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;


_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to