[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17720] branches/sim_physics/source/ blender: * Added other noise basis types to point density turbulence

Matt Ebb matt at mke3.net
Fri Dec 5 05:06:46 CET 2008


Revision: 17720
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17720
Author:   broken
Date:     2008-12-05 05:06:41 +0100 (Fri, 05 Dec 2008)

Log Message:
-----------
* Added other noise basis types to point density turbulence

* Fixed a bug in 'ignoring volumes in AAO'

Modified Paths:
--------------
    branches/sim_physics/source/blender/makesdna/DNA_texture_types.h
    branches/sim_physics/source/blender/render/intern/source/occlusion.c
    branches/sim_physics/source/blender/render/intern/source/pointdensity.c
    branches/sim_physics/source/blender/render/intern/source/volume_precache.c
    branches/sim_physics/source/blender/src/buttons_shading.c

Modified: branches/sim_physics/source/blender/makesdna/DNA_texture_types.h
===================================================================
--- branches/sim_physics/source/blender/makesdna/DNA_texture_types.h	2008-12-05 02:03:37 UTC (rev 17719)
+++ branches/sim_physics/source/blender/makesdna/DNA_texture_types.h	2008-12-05 04:06:41 UTC (rev 17720)
@@ -153,6 +153,8 @@
 	float noise_size;
 	short noise_depth;
 	short noise_influence;
+	short noise_basis;
+	short pdpad3[3];
 	float noise_fac;
 	
 	float speed_scale;

Modified: branches/sim_physics/source/blender/render/intern/source/occlusion.c
===================================================================
--- branches/sim_physics/source/blender/render/intern/source/occlusion.c	2008-12-05 02:03:37 UTC (rev 17719)
+++ branches/sim_physics/source/blender/render/intern/source/occlusion.c	2008-12-05 04:06:41 UTC (rev 17720)
@@ -630,7 +630,7 @@
 			if((a & 255)==0) vlr= obr->vlaknodes[a>>8].vlak;
 			else vlr++;
 
-			if(vlr->mat->mode & MA_TRACEBLE)
+			if((vlr->mat->mode & MA_TRACEBLE) && (vlr->mat->material_type == MA_SOLID))
 				totface++;
 		}
 	}

Modified: branches/sim_physics/source/blender/render/intern/source/pointdensity.c
===================================================================
--- branches/sim_physics/source/blender/render/intern/source/pointdensity.c	2008-12-05 02:03:37 UTC (rev 17719)
+++ branches/sim_physics/source/blender/render/intern/source/pointdensity.c	2008-12-05 04:06:41 UTC (rev 17720)
@@ -405,14 +405,15 @@
 	if (pd->flag & TEX_PD_TURBULENCE) {
 	
 		if (pd->noise_influence == TEX_PD_NOISE_AGE) {
-			turb = BLI_turbulence(pd->noise_size, texvec[0]+age, texvec[1]+age, texvec[2]+age, pd->noise_depth);
+			turb = BLI_gTurbulence(pd->noise_size, texvec[0]+age, texvec[1]+age, texvec[2]+age, pd->noise_depth, 0, pd->noise_basis);
 		}
 		else if (pd->noise_influence == TEX_PD_NOISE_TIME) {
 			time = R.cfra / (float)R.r.efra;
-			turb = BLI_turbulence(pd->noise_size, texvec[0]+time, texvec[1]+time, texvec[2]+time, pd->noise_depth);
+			turb = BLI_gTurbulence(pd->noise_size, texvec[0]+time, texvec[1]+time, texvec[2]+time, pd->noise_depth, 0, pd->noise_basis);
+			//turb = BLI_turbulence(pd->noise_size, texvec[0]+time, texvec[1]+time, texvec[2]+time, pd->noise_depth);
 		}
 		else {
-			turb = BLI_turbulence(pd->noise_size, texvec[0]+vec[0], texvec[1]+vec[1], texvec[2]+vec[2], pd->noise_depth);
+			turb = BLI_gTurbulence(pd->noise_size, texvec[0]+vec[0], texvec[1]+vec[1], texvec[2]+vec[2], pd->noise_depth, 0, pd->noise_basis);
 		}
 
 		turb -= 0.5f;	/* re-center 0.0-1.0 range around 0 to prevent offsetting result */

Modified: branches/sim_physics/source/blender/render/intern/source/volume_precache.c
===================================================================
--- branches/sim_physics/source/blender/render/intern/source/volume_precache.c	2008-12-05 02:03:37 UTC (rev 17719)
+++ branches/sim_physics/source/blender/render/intern/source/volume_precache.c	2008-12-05 04:06:41 UTC (rev 17720)
@@ -325,6 +325,135 @@
 
 }
 
+#if 0
+void vol_precache_objectinstance_threads(Render *re, ObjectInstanceRen *obi, Material *ma, float *bbmin, float *bbmax)
+{
+	int x, y, z;
+
+	float co[3], voxel[3], scatter_col[3];
+	ShadeInput shi;
+	float view[3] = {0.0,0.0,-1.0};
+	float density;
+	float stepsize;
+	
+	float resf, res_3f;
+	int res_2, res_3;
+	
+	int edgeparts=2;
+	int totparts;
+	
+	float i = 1.0f;
+	double time, lasttime= PIL_check_seconds_timer();
+	const int res = ma->vol_precache_resolution;
+	RayTree *tree;
+	
+	R = *re;
+
+	/* create a raytree with just the faces of the instanced ObjectRen, 
+	 * used for checking if the cached point is inside or outside. */
+	tree = create_raytree_obi(obi, bbmin, bbmax);
+	if (!tree) return;
+
+	/* Need a shadeinput to calculate scattering */
+	memset(&shi, 0, sizeof(ShadeInput)); 
+	shi.depth= 1;
+	shi.mask= 1;
+	shi.mat = ma;
+	shi.vlr = NULL;
+	memcpy(&shi.r, &shi.mat->r, 23*sizeof(float));	// note, keep this synced with render_types.h
+	shi.har= shi.mat->har;
+	shi.obi= obi;
+	shi.obr= obi->obr;
+	shi.lay = re->scene->lay;
+	VECCOPY(shi.view, view);
+	
+	stepsize = vol_get_stepsize(&shi, STEPSIZE_VIEW);
+
+	resf = (float)res;
+	res_2 = res*res;
+	res_3 = res*res*res;
+	res_3f = (float)res_3;
+	
+	VecSubf(voxel, bbmax, bbmin);
+	if ((voxel[0] < FLT_EPSILON) || (voxel[1] < FLT_EPSILON) || (voxel[2] < FLT_EPSILON))
+		return;
+	VecMulf(voxel, 1.0f/res);
+	
+	
+	part[0] = parceil(res/(float)xparts); 
+	part[1] = ceil(rex/(float)yparts);
+	part[2] = ceil(rex/(float)zparts);
+	
+	
+	
+	//obi->volume_precache = MEM_callocN(sizeof(float)*res_3*3, "volume light cache");
+	
+	/* Iterate over the 3d voxel grid, and fill the voxels with scattering information
+	 *
+	 * It's stored in memory as 3 big float grids next to each other, one for each RGB channel.
+	 * I'm guessing the memory alignment may work out better this way for the purposes
+	 * of doing linear interpolation, but I haven't actually tested this theory! :)
+	 */
+	 /*
+	for (x=0; x < res; x++) {
+		co[0] = bbmin[0] + (voxel[0] * x);
+		
+		for (y=0; y < res; y++) {
+			co[1] = bbmin[1] + (voxel[1] * y);
+			
+			for (z=0; z < res; z++) {
+				co[2] = bbmin[2] + (voxel[2] * z);
+			
+				time= PIL_check_seconds_timer();
+				i++;
+			
+				// display progress every second
+				if(re->test_break()) {
+					if(tree) {
+						RE_ray_tree_free(tree);
+						tree= NULL;
+					}
+					return;
+				}
+				if(time-lasttime>1.0f) {
+					char str[64];
+					sprintf(str, "Precaching volume: %d%%", (int)(100.0f * (i / res_3f)));
+					re->i.infostr= str;
+					re->stats_draw(&re->i);
+					re->i.infostr= NULL;
+					lasttime= time;
+				}
+				
+				// don't bother if the point is not inside the volume mesh
+				
+				if (!point_inside_obi(tree, obi, co)) {
+					obi->volume_precache[0*res_3 + x*res_2 + y*res + z] = -1.0f;
+					obi->volume_precache[1*res_3 + x*res_2 + y*res + z] = -1.0f;
+					obi->volume_precache[2*res_3 + x*res_2 + y*res + z] = -1.0f;
+					continue;
+				}
+				density = vol_get_density(&shi, co);
+				vol_get_scattering(&shi, scatter_col, co, stepsize, density);
+			
+				obi->volume_precache[0*res_3 + x*res_2 + y*res + z] = scatter_col[0];
+				obi->volume_precache[1*res_3 + x*res_2 + y*res + z] = scatter_col[1];
+				obi->volume_precache[2*res_3 + x*res_2 + y*res + z] = scatter_col[2];
+				
+			}
+		}
+	}
+	*/
+
+	if(tree) {
+		RE_ray_tree_free(tree);
+		tree= NULL;
+	}
+	
+	lightcache_filter(obi->volume_precache, res);
+
+}
+#endif
+
 /* loop through all objects (and their associated materials)
  * marked for pre-caching in convertblender.c, and pre-cache them */
 void volume_precache(Render *re)

Modified: branches/sim_physics/source/blender/src/buttons_shading.c
===================================================================
--- branches/sim_physics/source/blender/src/buttons_shading.c	2008-12-05 02:03:37 UTC (rev 17719)
+++ branches/sim_physics/source/blender/src/buttons_shading.c	2008-12-05 04:06:41 UTC (rev 17720)
@@ -994,6 +994,11 @@
 		
 		yco = ymid - BUTH - YSPACE;
 
+		uiDefBut(block, LABEL, B_NOP, "Noise Basis:",
+			X2CLM2, yco-=BUTH, BUTW2, BUTH, 0, 0, 0, 0, 0, "");
+		uiDefButS(block, MENU, B_REDR, noisebasis_menu(),
+			X2CLM2, yco-=BUTH, BUTW2, BUTH, &(pd->noise_basis), 0.0, 0.0, 0, 0, "Noise formula used for tubulence");
+		
 		uiDefBut(block, LABEL, B_NOP, "Noise Influence:",
 			X2CLM2, yco-=BUTH, BUTW2, BUTH, 0, 0, 0, 0, 0, "");
 			





More information about the Bf-blender-cvs mailing list