[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12843] trunk/blender/source/blender/ render/intern/source/sss.c:

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Dec 11 15:35:09 CET 2007


Revision: 12843
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12843
Author:   blendix
Date:     2007-12-11 15:35:08 +0100 (Tue, 11 Dec 2007)

Log Message:
-----------

Bugfix for SSS crash with nan's.

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

Modified: trunk/blender/source/blender/render/intern/source/sss.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/sss.c	2007-12-11 14:19:05 UTC (rev 12842)
+++ trunk/blender/source/blender/render/intern/source/sss.c	2007-12-11 14:35:08 UTC (rev 12843)
@@ -234,11 +234,7 @@
 	float indexf, t, idxf;
 	int index;
 
-	if(rr > (RD_TABLE_RANGE_2*RD_TABLE_RANGE_2)) {
-		rd[0]= Rd_rsquare(ss[0], rr);
-		rd[1]= Rd_rsquare(ss[1], rr);
-		rd[2]= Rd_rsquare(ss[2], rr);
-	}
+	if(rr > (RD_TABLE_RANGE_2*RD_TABLE_RANGE_2));
 	else if(rr > RD_TABLE_RANGE) {
 		rr= sqrt(rr);
 		indexf= rr*(RD_TABLE_SIZE/RD_TABLE_RANGE_2);
@@ -246,9 +242,12 @@
 		idxf= (float)index;
 		t= indexf - idxf;
 
-		rd[0]= (ss[0]->tableRd2[index]*(1-t) + ss[0]->tableRd2[index+1]*t);
-		rd[1]= (ss[1]->tableRd2[index]*(1-t) + ss[1]->tableRd2[index+1]*t);
-		rd[2]= (ss[2]->tableRd2[index]*(1-t) + ss[2]->tableRd2[index+1]*t);
+		if(index >= 0 && index < RD_TABLE_SIZE) {
+			rd[0]= (ss[0]->tableRd2[index]*(1-t) + ss[0]->tableRd2[index+1]*t);
+			rd[1]= (ss[1]->tableRd2[index]*(1-t) + ss[1]->tableRd2[index+1]*t);
+			rd[2]= (ss[2]->tableRd2[index]*(1-t) + ss[2]->tableRd2[index+1]*t);
+			return;
+		}
 	}
 	else {
 		indexf= rr*(RD_TABLE_SIZE/RD_TABLE_RANGE);
@@ -256,10 +255,18 @@
 		idxf= (float)index;
 		t= indexf - idxf;
 
-		rd[0]= (ss[0]->tableRd[index]*(1-t) + ss[0]->tableRd[index+1]*t);
-		rd[1]= (ss[1]->tableRd[index]*(1-t) + ss[1]->tableRd[index+1]*t);
-		rd[2]= (ss[2]->tableRd[index]*(1-t) + ss[2]->tableRd[index+1]*t);
+		if(index >= 0 && index < RD_TABLE_SIZE) {
+			rd[0]= (ss[0]->tableRd[index]*(1-t) + ss[0]->tableRd[index+1]*t);
+			rd[1]= (ss[1]->tableRd[index]*(1-t) + ss[1]->tableRd[index+1]*t);
+			rd[2]= (ss[2]->tableRd[index]*(1-t) + ss[2]->tableRd[index+1]*t);
+			return;
+		}
 	}
+
+	/* fallback to slow Rd computation */
+	rd[0]= Rd_rsquare(ss[0], rr);
+	rd[1]= Rd_rsquare(ss[1], rr);
+	rd[2]= Rd_rsquare(ss[2], rr);
 }
 
 static void build_Rd_table(ScatterSettings *ss)





More information about the Bf-blender-cvs mailing list