diff options
author | Matt Ebb <matt@mke3.net> | 2009-08-30 11:07:02 +0400 |
---|---|---|
committer | Matt Ebb <matt@mke3.net> | 2009-08-30 11:07:02 +0400 |
commit | 970c9214b543c95921dbb51a681457b5d6597133 (patch) | |
tree | d3f96d4271522bfdb16832342343c59f574e81d1 | |
parent | 466d59461d060b291dc1df8bd8b26fcd8d59ca1d (diff) |
* Fixes for shading objects inside volumes
-rw-r--r-- | source/blender/render/intern/include/render_types.h | 1 | ||||
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 1 | ||||
-rw-r--r-- | source/blender/render/intern/source/volumetric.c | 12 |
3 files changed, 13 insertions, 1 deletions
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h index c4910f7733d..e50e498228d 100644 --- a/source/blender/render/intern/include/render_types.h +++ b/source/blender/render/intern/include/render_types.h @@ -419,6 +419,7 @@ typedef struct VolumeOb typedef struct MatInside { struct MatInside *next, *prev; struct Material *ma; + struct ObjectInstanceRen *obi; } MatInside; typedef struct VolPrecachePart diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index e486daf2585..cf6246e3641 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -2999,6 +2999,7 @@ static void init_camera_inside_volumes(Render *re) mi = MEM_mallocN(sizeof(MatInside), "camera inside material"); mi->ma = vo->ma; + mi->obi = obi; BLI_addtail(&(re->render_volumes_inside), mi); } diff --git a/source/blender/render/intern/source/volumetric.c b/source/blender/render/intern/source/volumetric.c index 046a145e9da..4fa31674bbe 100644 --- a/source/blender/render/intern/source/volumetric.c +++ b/source/blender/render/intern/source/volumetric.c @@ -674,15 +674,25 @@ void shade_volume_inside(ShadeInput *shi, ShadeResult *shr) { MatInside *m; Material *mat_backup; + ObjectInstanceRen *obi_backup; + float prev_alpha = shr->alpha; //if (BLI_countlist(&R.render_volumes_inside) == 0) return; /* XXX: extend to multiple volumes perhaps later */ mat_backup = shi->mat; + obi_backup = shi->obi; + m = R.render_volumes_inside.first; shi->mat = m->ma; + shi->obi = m->obi; + shi->obr = m->obi->obr; volume_trace(shi, shr, VOL_SHADE_INSIDE); - + shr->alpha += prev_alpha; + CLAMP(shr->alpha, 0.f, 1.f); + shi->mat = mat_backup; + shi->obi = obi_backup; + shi->obr = obi_backup->obr; }
\ No newline at end of file |