Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorM.G. Kishalmi <lmg@kishalmi.net>2011-04-26 19:29:12 +0400
committerM.G. Kishalmi <lmg@kishalmi.net>2011-04-26 19:29:12 +0400
commitf9cb8f80e702961d55ce2c6ad5c8a33b8b572ba2 (patch)
treec212097603158d295b394ed7a359da603bdf98d1 /source
parent64a37fadf09e32772520272a831034a9fe790fc8 (diff)
fixed some issues with the new "shadow only + shading" code.
patch from MiikaH.
Diffstat (limited to 'source')
-rw-r--r--source/blender/render/intern/source/shadeoutput.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c
index 97c6c562028..5a5de938e43 100644
--- a/source/blender/render/intern/source/shadeoutput.c
+++ b/source/blender/render/intern/source/shadeoutput.c
@@ -1523,19 +1523,19 @@ static void shade_lamp_loop_only_shadow(ShadeInput *shi, ShadeResult *shr)
if(lar->shb || (lar->mode & LA_SHAD_RAY)) {
visifac= lamp_get_visibility(lar, shi->co, lv, &lampdist);
+ ir+= 1.0f;
+
if(visifac <= 0.0f) {
- if (shi->mat->shadowonly_flag == MA_SO_OLD) {
- ir+= 1.0f;
+ if (shi->mat->shadowonly_flag == MA_SO_OLD)
accum+= 1.0f;
- }
+
continue;
}
inpr= INPR(shi->vn, lv);
if(inpr <= 0.0f) {
- if (shi->mat->shadowonly_flag == MA_SO_OLD) {
- ir+= 1.0f;
+ if (shi->mat->shadowonly_flag == MA_SO_OLD)
accum+= 1.0f;
- }
+
continue;
}
@@ -1543,11 +1543,9 @@ static void shade_lamp_loop_only_shadow(ShadeInput *shi, ShadeResult *shr)
if (shi->mat->shadowonly_flag == MA_SO_OLD) {
/* Old "Shadows Only" */
- ir+= 1.0f;
accum+= (1.0f-visifac) + (visifac)*rgb_to_grayscale(shadfac)*shadfac[3];
}
else {
- ir+= lar->energy;
shaded += rgb_to_grayscale(shadfac)*shadfac[3] * visifac * lar->energy;
if (shi->mat->shadowonly_flag == MA_SO_SHADOW) {
@@ -1563,9 +1561,6 @@ static void shade_lamp_loop_only_shadow(ShadeInput *shi, ShadeResult *shr)
accum = 1.0f - accum/ir;
}
else {
- shaded/= ir;
- lightness/= ir;
-
if (shi->mat->shadowonly_flag == MA_SO_SHADOW) {
if (lightness > 0.0f) {
/* Get shadow value from between 0.0f and non-shadowed lightness */
@@ -1581,10 +1576,11 @@ static void shade_lamp_loop_only_shadow(ShadeInput *shi, ShadeResult *shr)
}}
shr->alpha= (shi->alpha)*(accum);
+ if (shr->alpha<0.0f) shr->alpha=0.0f;
}
else {
/* If "fully shaded", use full alpha even on areas that have no lights */
- if (shi->mat->shadowonly_flag == MA_SO_SHADED) shr->alpha=1.0f;
+ if (shi->mat->shadowonly_flag == MA_SO_SHADED) shr->alpha=shi->alpha;
else shr->alpha= 0.f;
}
}