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, "");
                        


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to