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
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2013-04-18 20:26:58 +0400
committerTon Roosendaal <ton@blender.org>2013-04-18 20:26:58 +0400
commit4ad289a22de9d20d264bf6e62a2434401ff2e065 (patch)
treebfa4a7d78daed52f55cf91549a8316b85c7dd830 /source/blender/render
parent01ffbab8f54425bc3211859fe03aa9739cfbafdc (diff)
Bugfix #34895
Error in shadowbuffer with halo effect. It had render error when you look straight into the lamp, with something in front of lamp. The code that was sampling the shadowbuffer exited too soon (for ray going perpendicular to buffer it should take at least 1 sample). Code from 90ies. And still got a bug fix. Whoa :)
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/source/shadbuf.c3
-rw-r--r--source/blender/render/intern/source/shadeoutput.c10
2 files changed, 7 insertions, 6 deletions
diff --git a/source/blender/render/intern/source/shadbuf.c b/source/blender/render/intern/source/shadbuf.c
index 1a24055c7f4..7d463316a98 100644
--- a/source/blender/render/intern/source/shadbuf.c
+++ b/source/blender/render/intern/source/shadbuf.c
@@ -1394,7 +1394,6 @@ float shadow_halo(LampRen *lar, const float p1[3], const float p2[3])
}
lambda = min_ff(lambda_x, lambda_y);
- if (lambda==lambda_o || lambda>=1.0f) break;
zf= zf1 + lambda*(zf2-zf1);
count+= (float)shb->totbuf;
@@ -1410,6 +1409,8 @@ float shadow_halo(LampRen *lar, const float p1[3], const float p2[3])
lightcount+= readshadowbuf_halo(shb, shsample, x, y, z);
}
+ /* break after sample, so it takes at least one */
+ if (lambda==lambda_o || lambda>=1.0f) break;
}
if (count!=0.0f) return (lightcount/count);
diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c
index 7505b0fa567..6b48bb79e4d 100644
--- a/source/blender/render/intern/source/shadeoutput.c
+++ b/source/blender/render/intern/source/shadeoutput.c
@@ -181,7 +181,7 @@ static void spothalo(struct LampRen *lar, ShadeInput *shi, float *intens)
double a, b, c, disc, nray[3], npos[3];
double t0, t1 = 0.0f, t2= 0.0f, t3;
float p1[3], p2[3], ladist, maxz = 0.0f, maxy = 0.0f, haint;
- int snijp, do_clip = TRUE, use_yco = FALSE;
+ int cuts, do_clip = TRUE, use_yco = FALSE;
*intens= 0.0f;
haint= lar->haint;
@@ -244,7 +244,7 @@ static void spothalo(struct LampRen *lar, ShadeInput *shi, float *intens)
b = nray[0] * npos[0] + nray[1] * npos[1] - nray[2]*npos[2];
c = npos[0] * npos[0] + npos[1] * npos[1] - npos[2]*npos[2];
- snijp= 0;
+ cuts= 0;
if (fabs(a) < DBL_EPSILON) {
/*
* Only one intersection point...
@@ -256,16 +256,16 @@ static void spothalo(struct LampRen *lar, ShadeInput *shi, float *intens)
if (disc==0.0) {
t1=t2= (-b)/ a;
- snijp= 2;
+ cuts= 2;
}
else if (disc > 0.0) {
disc = sqrt(disc);
t1 = (-b + disc) / a;
t2 = (-b - disc) / a;
- snijp= 2;
+ cuts= 2;
}
}
- if (snijp==2) {
+ if (cuts==2) {
int ok1=0, ok2=0;
/* sort */