[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17273] trunk/blender/source/blender: Bug #17912: fix for some SSS floating point precision issues, and also

Brecht Van Lommel brecht at blender.org
Sat Nov 1 18:07:24 CET 2008


Revision: 17273
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17273
Author:   blendix
Date:     2008-11-01 18:07:24 +0100 (Sat, 01 Nov 2008)

Log Message:
-----------
Bug #17912: fix for some SSS floating point precision issues, and also
fix a divide by zero in the subsurf code found in the process.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c
    trunk/blender/source/blender/render/intern/source/sss.c

Modified: trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c	2008-11-01 17:06:36 UTC (rev 17272)
+++ trunk/blender/source/blender/blenkernel/intern/CCGSubSurf.c	2008-11-01 17:07:24 UTC (rev 17273)
@@ -1245,9 +1245,11 @@
 			}
 		}
 
-		avgSharpness /= sharpCount;
-		if (avgSharpness>1.0) {
-			avgSharpness = 1.0;
+		if(sharpCount) {
+			avgSharpness /= sharpCount;
+			if (avgSharpness>1.0) {
+				avgSharpness = 1.0;
+			}
 		}
 
 		if (seam && seamEdges < 2)
@@ -1543,9 +1545,11 @@
 				}
 			}
 
-			avgSharpness /= sharpCount;
-			if (avgSharpness>1.0) {
-				avgSharpness = 1.0;
+			if(sharpCount) {
+				avgSharpness /= sharpCount;
+				if (avgSharpness>1.0) {
+					avgSharpness = 1.0;
+				}
 			}
 
 			if (seam && seamEdges < 2)

Modified: trunk/blender/source/blender/render/intern/source/sss.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/sss.c	2008-11-01 17:06:36 UTC (rev 17272)
+++ trunk/blender/source/blender/render/intern/source/sss.c	2008-11-01 17:07:24 UTC (rev 17273)
@@ -451,13 +451,13 @@
 	VECCOPY(rdsum, result.rdsum);
 	VECADD(backrdsum, result.rdsum, result.backrdsum);
 
-	if(rdsum[0] > 0.0f) rad[0]= tree->ss[0]->color*rad[0]/rdsum[0];
-	if(rdsum[1] > 0.0f) rad[1]= tree->ss[1]->color*rad[1]/rdsum[1];
-	if(rdsum[2] > 0.0f) rad[2]= tree->ss[2]->color*rad[2]/rdsum[2];
+	if(rdsum[0] > 1e-16f) rad[0]= tree->ss[0]->color*rad[0]/rdsum[0];
+	if(rdsum[1] > 1e-16f) rad[1]= tree->ss[1]->color*rad[1]/rdsum[1];
+	if(rdsum[2] > 1e-16f) rad[2]= tree->ss[2]->color*rad[2]/rdsum[2];
 
-	if(backrdsum[0] > 0.0f) backrad[0]= tree->ss[0]->color*backrad[0]/backrdsum[0];
-	if(backrdsum[1] > 0.0f) backrad[1]= tree->ss[1]->color*backrad[1]/backrdsum[1];
-	if(backrdsum[2] > 0.0f) backrad[2]= tree->ss[2]->color*backrad[2]/backrdsum[2];
+	if(backrdsum[0] > 1e-16f) backrad[0]= tree->ss[0]->color*backrad[0]/backrdsum[0];
+	if(backrdsum[1] > 1e-16f) backrad[1]= tree->ss[1]->color*backrad[1]/backrdsum[1];
+	if(backrdsum[2] > 1e-16f) backrad[2]= tree->ss[2]->color*backrad[2]/backrdsum[2];
 
 	rad[0]= MAX2(rad[0], backrad[0]);
 	rad[1]= MAX2(rad[1], backrad[1]);
@@ -504,20 +504,20 @@
 		}
 	}
 
-	if(node->area > 0) {
+	if(node->area > 1e-16f) {
 		inv= 1.0/node->area;
 		node->rad[0] *= inv;
 		node->rad[1] *= inv;
 		node->rad[2] *= inv;
 	}
-	if(node->backarea > 0) {
+	if(node->backarea > 1e-16f) {
 		inv= 1.0/node->backarea;
 		node->backrad[0] *= inv;
 		node->backrad[1] *= inv;
 		node->backrad[2] *= inv;
 	}
 
-	if(totrad > 0.0f) {
+	if(totrad > 1e-16f) {
 		inv= 1.0/totrad;
 		node->co[0] *= inv;
 		node->co[1] *= inv;
@@ -578,20 +578,20 @@
 		node->backarea += subnode->backarea;
 	}
 
-	if(node->area > 0) {
+	if(node->area > 1e-16f) {
 		inv= 1.0/node->area;
 		node->rad[0] *= inv;
 		node->rad[1] *= inv;
 		node->rad[2] *= inv;
 	}
-	if(node->backarea > 0) {
+	if(node->backarea > 1e-16f) {
 		inv= 1.0/node->backarea;
 		node->backrad[0] *= inv;
 		node->backrad[1] *= inv;
 		node->backrad[2] *= inv;
 	}
 
-	if(totrad > 0.0f) {
+	if(totrad > 1e-16f) {
 		inv= 1.0/totrad;
 		node->co[0] *= inv;
 		node->co[1] *= inv;





More information about the Bf-blender-cvs mailing list