[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17046] trunk/blender/source/blender: - Fix for bug #17825: baking SSS is not supported, but it didn't give

Brecht Van Lommel brecht at blender.org
Sun Oct 12 15:32:28 CEST 2008


Revision: 17046
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17046
Author:   blendix
Date:     2008-10-12 15:32:28 +0200 (Sun, 12 Oct 2008)

Log Message:
-----------
- Fix for bug #17825: baking SSS is not supported, but it didn't give
  proper results, should bake as if SSS was disabled.
- Fix for GLSL to handle failing shadow buffer creation better.
- Fix for sky/atmosphere version patch, was not doing files from 2.46
  and newer.

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/gpu/intern/gpu_material.c
    trunk/blender/source/blender/render/intern/include/sss.h
    trunk/blender/source/blender/render/intern/source/shadeoutput.c
    trunk/blender/source/blender/render/intern/source/sss.c

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2008-10-12 13:16:23 UTC (rev 17045)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2008-10-12 13:32:28 UTC (rev 17046)
@@ -7767,23 +7767,9 @@
 
 	/* sun/sky */
 	if(main->versionfile < 246) {
-		Lamp *la;
 		Object *ob;
 		bActuator *act;
 
-		for(la=main->lamp.first; la; la= la->id.next) {
-			la->sun_effect_type = 0;
-			la->horizon_brightness = 1.0;
-			la->spread = 1.0;
-			la->sun_brightness = 1.0;
-			la->sun_size = 1.0;
-			la->backscattered_light = 1.0;
-			la->atm_turbidity = 2.0;
-			la->atm_inscattering_factor = 1.0;
-			la->atm_extinction_factor = 1.0;
-			la->atm_distance_factor = 1.0;
-			la->sun_intensity = 1.0;
-		}
 		/* dRot actuator change direction in 2.46 */
 		for(ob = main->object.first; ob; ob= ob->id.next) {
 			for(act= ob->actuators.first; act; act= act->next) {
@@ -7946,6 +7932,26 @@
 			}
 		}
 	}
+
+	if (main->versionfile < 248) {
+		Lamp *la;
+
+		for(la=main->lamp.first; la; la= la->id.next) {
+			if(la->atm_turbidity == 0.0) {
+				la->sun_effect_type = 0;
+				la->horizon_brightness = 1.0;
+				la->spread = 1.0;
+				la->sun_brightness = 1.0;
+				la->sun_size = 1.0;
+				la->backscattered_light = 1.0;
+				la->atm_turbidity = 2.0;
+				la->atm_inscattering_factor = 1.0;
+				la->atm_extinction_factor = 1.0;
+				la->atm_distance_factor = 1.0;
+				la->sun_intensity = 1.0;
+			}
+		}
+	}
 	
 	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
 	/* WATCH IT 2!: Userdef struct init has to be in src/usiblender.c! */

Modified: trunk/blender/source/blender/gpu/intern/gpu_material.c
===================================================================
--- trunk/blender/source/blender/gpu/intern/gpu_material.c	2008-10-12 13:16:23 UTC (rev 17045)
+++ trunk/blender/source/blender/gpu/intern/gpu_material.c	2008-10-12 13:32:28 UTC (rev 17046)
@@ -1362,10 +1362,14 @@
 
 static void gpu_lamp_shadow_free(GPULamp *lamp)
 {
-	if(lamp->tex)
+	if(lamp->tex) {
 		GPU_texture_free(lamp->tex);
-	if(lamp->fb)
+		lamp->tex= NULL;
+	}
+	if(lamp->fb) {
 		GPU_framebuffer_free(lamp->fb);
+		lamp->fb= NULL;
+	}
 }
 
 GPULamp *GPU_lamp_from_blender(Scene *scene, Object *ob, Object *par)

Modified: trunk/blender/source/blender/render/intern/include/sss.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/sss.h	2008-10-12 13:16:23 UTC (rev 17045)
+++ trunk/blender/source/blender/render/intern/include/sss.h	2008-10-12 13:32:28 UTC (rev 17046)
@@ -59,7 +59,7 @@
 void free_sss(struct Render *re);
 
 int sample_sss(struct Render *re, struct Material *mat, float *co, float *col);
-int has_sss_tree(struct Render *re, struct Material *mat);
+int sss_pass_done(struct Render *re, struct Material *mat);
 
 #endif /*SSS_H*/
 

Modified: trunk/blender/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadeoutput.c	2008-10-12 13:16:23 UTC (rev 17045)
+++ trunk/blender/source/blender/render/intern/source/shadeoutput.c	2008-10-12 13:32:28 UTC (rev 17046)
@@ -1568,7 +1568,7 @@
 		shr->col[2]= shi->b*shi->alpha;
 		shr->col[3]= shi->alpha;
 
-		if((ma->sss_flag & MA_DIFF_SSS) && !has_sss_tree(&R, ma)) {
+		if((ma->sss_flag & MA_DIFF_SSS) && !sss_pass_done(&R, ma)) {
 			if(ma->sss_texfac == 0.0f) {
 				shi->r= shi->g= shi->b= shi->alpha= 1.0f;
 				shr->col[0]= shr->col[1]= shr->col[2]= shr->col[3]= 1.0f;
@@ -1722,7 +1722,7 @@
 	shr->alpha= shi->alpha;
 	
 	/* from now stuff everything in shr->combined: ambient, AO, radio, ramps, exposure */
-	if(!(ma->sss_flag & MA_DIFF_SSS) || !has_sss_tree(&R, ma)) {
+	if(!(ma->sss_flag & MA_DIFF_SSS) || !sss_pass_done(&R, ma)) {
 		shr->combined[0]+= shi->ambr;
 		shr->combined[1]+= shi->ambg;
 		shr->combined[2]+= shi->ambb;
@@ -1772,7 +1772,7 @@
 
 	/* modulate by the object color */
 	if((ma->shade_flag & MA_OBCOLOR) && shi->obr->ob) {
-		if(!(ma->sss_flag & MA_DIFF_SSS) || !has_sss_tree(&R, ma)) {
+		if(!(ma->sss_flag & MA_DIFF_SSS) || !sss_pass_done(&R, ma)) {
 			float obcol[4];
 
 			QUATCOPY(obcol, shi->obr->ob->col);

Modified: trunk/blender/source/blender/render/intern/source/sss.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/sss.c	2008-10-12 13:16:23 UTC (rev 17045)
+++ trunk/blender/source/blender/render/intern/source/sss.c	2008-10-12 13:32:28 UTC (rev 17046)
@@ -1023,8 +1023,8 @@
 	return 0;
 }
 
-int has_sss_tree(struct Render *re, struct Material *mat)
+int sss_pass_done(struct Render *re, struct Material *mat)
 {
-	return (re->sss_hash && BLI_ghash_lookup(re->sss_hash, mat));
+	return ((re->flag & R_BAKING) || (re->sss_hash && BLI_ghash_lookup(re->sss_hash, mat)));
 }
 





More information about the Bf-blender-cvs mailing list