[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30831] trunk/blender/source/blender/ render/intern/source: Assorted small volume render related fixes.

Matt Ebb matt at mke3.net
Wed Jul 28 10:06:47 CEST 2010


Revision: 30831
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30831
Author:   broken
Date:     2010-07-28 10:06:46 +0200 (Wed, 28 Jul 2010)

Log Message:
-----------
Assorted small volume render related fixes.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/source/rayshade.c
    trunk/blender/source/blender/render/intern/source/shadeinput.c
    trunk/blender/source/blender/render/intern/source/shadeoutput.c
    trunk/blender/source/blender/render/intern/source/volumetric.c

Modified: trunk/blender/source/blender/render/intern/source/rayshade.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rayshade.c	2010-07-28 08:05:39 UTC (rev 30830)
+++ trunk/blender/source/blender/render/intern/source/rayshade.c	2010-07-28 08:06:46 UTC (rev 30831)
@@ -558,19 +558,9 @@
 			shi->mat= vlr->mat;		/* shi->mat is being set in nodetree */
 		}
 		else {
-			int tempdepth;
-			/* XXX dodgy business here, set ray depth to -1
-			 * to ignore raytrace in shade_material_loop()
-			 * this could really use a refactor --Matt */
-			if (shi->volume_depth == 0) {
-				tempdepth = shi->depth;
-				shi->depth = -1;
-				shade_material_loop(shi, shr);
-				shi->depth = tempdepth;
-			} else {
-				shade_material_loop(shi, shr);
-			}
+			shade_material_loop(shi, shr);
 		}
+		
 		/* raytrace likes to separate the spec color */
 		VECSUB(shr->diff, shr->combined, shr->spec);
 	}	

Modified: trunk/blender/source/blender/render/intern/source/shadeinput.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadeinput.c	2010-07-28 08:05:39 UTC (rev 30830)
+++ trunk/blender/source/blender/render/intern/source/shadeinput.c	2010-07-28 08:06:46 UTC (rev 30831)
@@ -130,7 +130,7 @@
 	}
 	
 	/* depth >= 1 when ray-shading */
-	if(shi->depth==0) {
+	if(shi->depth==0 || shi->volume_depth > 0) {
 		if(R.r.mode & R_RAYTRACE) {
 			if(shi->ray_mirror!=0.0f || ((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f)) {
 				/* ray trace works on combined, but gives pass info */

Modified: trunk/blender/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadeoutput.c	2010-07-28 08:05:39 UTC (rev 30830)
+++ trunk/blender/source/blender/render/intern/source/shadeoutput.c	2010-07-28 08:06:46 UTC (rev 30831)
@@ -1644,7 +1644,7 @@
 		if(((passflag & SCE_PASS_COMBINED) && (shi->combinedflag & (SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT)))
 			|| (passflag & (SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT))) {
 			/* AO was calculated for scanline already */
-			if(shi->depth)
+			if(shi->depth || shi->volume_depth)
 				ambient_occlusion(shi);
 			VECCOPY(shr->ao, shi->ao);
 			VECCOPY(shr->env, shi->env); // XXX multiply

Modified: trunk/blender/source/blender/render/intern/source/volumetric.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/volumetric.c	2010-07-28 08:05:39 UTC (rev 30830)
+++ trunk/blender/source/blender/render/intern/source/volumetric.c	2010-07-28 08:06:46 UTC (rev 30831)
@@ -193,7 +193,7 @@
 	isect.labda = FLT_MAX;
 	
 	isect.mode= RE_RAY_MIRROR;
-	isect.skip = RE_SKIP_VLR_NEIGHBOUR | RE_SKIP_VLR_RENDER_CHECK;
+	isect.skip = RE_SKIP_VLR_NEIGHBOUR;
 	isect.orig.ob = (void*) shi->obi;
 	isect.orig.face = (void*)vlr;
 	isect.last_hit = NULL;
@@ -446,7 +446,7 @@
 		const float stepd = (t0 - pt0) * d;
 		float sigma_t[3];
 		
-		vol_get_sigma_t(shi, sigma_t, co);
+		vol_get_sigma_t(shi, sigma_t, p);
 		
 		tau[0] += stepd * sigma_t[0];
 		tau[1] += stepd * sigma_t[1];
@@ -609,7 +609,10 @@
 			/* transmittance component (alpha) */
 			vol_get_transmittance_seg(shi, tr, stepsize, co, density);
 			
-			if (luminance(tr) < shi->mat->vol.depth_cutoff) break;
+			if (t0 > t1 * 0.25) {
+				/* only use depth cutoff after we've traced a little way into the volume */
+				if (luminance(tr) < shi->mat->vol.depth_cutoff) break;
+			}
 			
 			vol_get_emission(shi, emit_col, p);
 			





More information about the Bf-blender-cvs mailing list