[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40159] trunk/blender/source/blender/ render/intern: Fix for bug #28332: Smoke Simulation rendering artifacts.
Miika Hamalainen
miika.hamalainen at kolumbus.fi
Mon Sep 12 11:55:05 CEST 2011
Revision: 40159
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40159
Author: miikah
Date: 2011-09-12 09:55:04 +0000 (Mon, 12 Sep 2011)
Log Message:
-----------
Fix for bug #28332: Smoke Simulation rendering artifacts.
Volume pre-caching altered shared data simultaneously in multiple threads, causing invalid scattering results when "Asymmetry" value was used. The view vector is now passed as a function argument.
Modified Paths:
--------------
trunk/blender/source/blender/render/intern/include/volumetric.h
trunk/blender/source/blender/render/intern/source/volume_precache.c
trunk/blender/source/blender/render/intern/source/volumetric.c
Modified: trunk/blender/source/blender/render/intern/include/volumetric.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/volumetric.h 2011-09-12 09:47:28 UTC (rev 40158)
+++ trunk/blender/source/blender/render/intern/include/volumetric.h 2011-09-12 09:55:04 UTC (rev 40159)
@@ -36,7 +36,7 @@
struct ShadeResult;
float vol_get_density(struct ShadeInput *shi, float *co);
-void vol_get_scattering(ShadeInput *shi, float *scatter_col, float *co_);
+void vol_get_scattering(ShadeInput *shi, float *scatter_col, float *co_, float *view);
void shade_volume_outside(ShadeInput *shi, ShadeResult *shr);
void shade_volume_inside(ShadeInput *shi, ShadeResult *shr);
Modified: trunk/blender/source/blender/render/intern/source/volume_precache.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/volume_precache.c 2011-09-12 09:47:28 UTC (rev 40158)
+++ trunk/blender/source/blender/render/intern/source/volume_precache.c 2011-09-12 09:55:04 UTC (rev 40159)
@@ -490,7 +490,7 @@
RayObject *tree = pa->tree;
ShadeInput *shi = pa->shi;
float scatter_col[3] = {0.f, 0.f, 0.f};
- float co[3], cco[3];
+ float co[3], cco[3], view[3];
int x, y, z, i;
int res[3];
@@ -523,9 +523,9 @@
continue;
}
- copy_v3_v3(shi->view, cco);
- normalize_v3(shi->view);
- vol_get_scattering(shi, scatter_col, cco);
+ copy_v3_v3(view, cco);
+ normalize_v3(view);
+ vol_get_scattering(shi, scatter_col, cco, view);
obi->volume_precache->data_r[i] = scatter_col[0];
obi->volume_precache->data_g[i] = scatter_col[1];
Modified: trunk/blender/source/blender/render/intern/source/volumetric.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/volumetric.c 2011-09-12 09:47:28 UTC (rev 40158)
+++ trunk/blender/source/blender/render/intern/source/volumetric.c 2011-09-12 09:55:04 UTC (rev 40159)
@@ -464,7 +464,7 @@
tr[2] = expf(-tau[2]);
}
-static void vol_shade_one_lamp(struct ShadeInput *shi, float *co, LampRen *lar, float *lacol)
+static void vol_shade_one_lamp(struct ShadeInput *shi, float *co, float *view, LampRen *lar, float *lacol)
{
float visifac, lv[3], lampdist;
float tr[3]={1.0,1.0,1.0};
@@ -535,7 +535,7 @@
if (luminance(lacol) < 0.001f) return;
normalize_v3(lv);
- p = vol_get_phasefunc(shi, shi->mat->vol.asymmetry, shi->view, lv);
+ p = vol_get_phasefunc(shi, shi->mat->vol.asymmetry, view, lv);
/* physically based scattering with non-physically based RGB gain */
vol_get_reflection_color(shi, ref_col, co);
@@ -546,7 +546,7 @@
}
/* single scattering only for now */
-void vol_get_scattering(ShadeInput *shi, float *scatter_col, float *co)
+void vol_get_scattering(ShadeInput *shi, float *scatter_col, float *co, float *view)
{
ListBase *lights;
GroupObject *go;
@@ -561,7 +561,7 @@
lar= go->lampren;
if (lar) {
- vol_shade_one_lamp(shi, co, lar, lacol);
+ vol_shade_one_lamp(shi, co, view, lar, lacol);
add_v3_v3(scatter_col, lacol);
}
}
@@ -629,7 +629,7 @@
vol_get_precached_scattering(&R, shi, scatter_col, p2);
} else
- vol_get_scattering(shi, scatter_col, p);
+ vol_get_scattering(shi, scatter_col, p, shi->view);
radiance[0] += stepd * tr[0] * (emit_col[0] + scatter_col[0]);
radiance[1] += stepd * tr[1] * (emit_col[1] + scatter_col[1]);
More information about the Bf-blender-cvs
mailing list