From 4c82be95fdaa4bef2f186b12ac28f58fa9a40564 Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Mon, 29 Nov 2010 01:05:20 +0000 Subject: Fix: [#24170] Camera inside volume error [#24838] Light inside Volume material drops on it's walls - it may be double Problem in a previous bugfix commit, reverted back, the original bug is still fixed too. --- source/blender/render/intern/source/shadeinput.c | 14 ++++++++------ source/blender/render/intern/source/volumetric.c | 8 ++++++-- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/source/blender/render/intern/source/shadeinput.c b/source/blender/render/intern/source/shadeinput.c index 4754e0d15f1..e619eb6bf06 100644 --- a/source/blender/render/intern/source/shadeinput.c +++ b/source/blender/render/intern/source/shadeinput.c @@ -141,7 +141,12 @@ void shade_material_loop(ShadeInput *shi, ShadeResult *shr) if((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP)) if((shi->layflag & SCE_LAY_SKY) && (R.r.alphamode==R_ADDSKY)) shr->alpha= 1.0f; - } + } + + if(R.r.mode & R_RAYTRACE) { + if (R.render_volumes_inside.first) + shade_volume_inside(shi, shr); + } } @@ -163,11 +168,8 @@ void shade_input_do_shade(ShadeInput *shi, ShadeResult *shr) shade_input_init_material(shi); if (shi->mat->material_type == MA_TYPE_VOLUME) { - if(R.r.mode & R_RAYTRACE) { - if (R.render_volumes_inside.first) - shade_volume_inside(shi, shr); - else - shade_volume_outside(shi, shr); + if(R.r.mode & R_RAYTRACE) { + shade_volume_outside(shi, shr); } } else { /* MA_TYPE_SURFACE, MA_TYPE_WIRE */ shade_material_loop(shi, shr); diff --git a/source/blender/render/intern/source/volumetric.c b/source/blender/render/intern/source/volumetric.c index f3f31bf6b43..f791f8728d0 100644 --- a/source/blender/render/intern/source/volumetric.c +++ b/source/blender/render/intern/source/volumetric.c @@ -784,6 +784,7 @@ void shade_volume_inside(ShadeInput *shi, ShadeResult *shr) MatInside *m; Material *mat_backup; ObjectInstanceRen *obi_backup; + float prev_alpha = shr->alpha; /* XXX: extend to multiple volumes perhaps later */ mat_backup = shi->mat; @@ -794,11 +795,14 @@ void shade_volume_inside(ShadeInput *shi, ShadeResult *shr) shi->obi = m->obi; shi->obr = m->obi->obr; - memset(shr, 0, sizeof(ShadeResult)); - volume_trace(shi, shr, VOL_SHADE_INSIDE); + + shr->alpha = shr->alpha + prev_alpha; + CLAMP(shr->alpha, 0.0, 1.0); shi->mat = mat_backup; shi->obi = obi_backup; shi->obr = obi_backup->obr; } + + -- cgit v1.2.3