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>2008-09-21 16:03:41 +0400
committerTon Roosendaal <ton@blender.org>2008-09-21 16:03:41 +0400
commit92829e821f345596edec123e06187186e2471027 (patch)
tree5dccdf48da9a59b0e085ba0b85b34dcceed1c8be
parentf7a528811183d5477816aff1c9d3dc7f597e1d58 (diff)
Bugfix #17656
- Changed order for applying atmosphere, it does it now before alpha-adding sky, giving correct transparency - Added correction for de-premulling and premulling scatter color
-rw-r--r--source/blender/render/intern/source/rendercore.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 159d3422520..05ff0d3c020 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -713,7 +713,7 @@ static void atm_tile(RenderPart *pa, RenderLayer *rl)
if(lar->type==LA_SUN && lar->sunsky) {
/* if it's sky continue and don't apply atmosphere effect on it */
- if(*zrect >= 9.9e10) {
+ if(*zrect >= 9.9e10 || rgbrect[3]==0.0f) {
continue;
}
@@ -721,7 +721,14 @@ static void atm_tile(RenderPart *pa, RenderLayer *rl)
float tmp_rgb[3];
VECCOPY(tmp_rgb, rgbrect);
+ if(rgbrect[3]!=1.0f) { /* de-premul */
+ float div= 1.0f/rgbrect[3];
+ VECMUL(tmp_rgb, div);
+ }
shadeAtmPixel(lar->sunsky, tmp_rgb, x, y, *zrect);
+ if(rgbrect[3]!=1.0f) { /* premul */
+ VECMUL(tmp_rgb, rgbrect[3]);
+ }
if(done==0) {
VECCOPY(rgb, tmp_rgb);
@@ -1199,6 +1206,10 @@ void zbufshadeDA_tile(RenderPart *pa)
}
}
+ /* sun/sky */
+ if(rl->layflag & SCE_LAY_SKY)
+ atm_tile(pa, rl);
+
/* sky before edge */
if(rl->layflag & SCE_LAY_SKY)
sky_tile(pa, rl);
@@ -1208,10 +1219,6 @@ void zbufshadeDA_tile(RenderPart *pa)
if(R.r.mode & R_EDGE)
edge_enhance_add(pa, rl->rectf, edgerect);
- /* sun/sky */
- if(rl->layflag & SCE_LAY_SKY)
- atm_tile(pa, rl);
-
if(rl->passflag & SCE_PASS_VECTOR)
reset_sky_speed(pa, rl);
@@ -1362,6 +1369,10 @@ void zbufshade_tile(RenderPart *pa)
}
}
+ /* sun/sky */
+ if(rl->layflag & SCE_LAY_SKY)
+ atm_tile(pa, rl);
+
/* sky before edge */
if(rl->layflag & SCE_LAY_SKY)
sky_tile(pa, rl);
@@ -1372,10 +1383,6 @@ void zbufshade_tile(RenderPart *pa)
edge_enhance_add(pa, rl->rectf, edgerect);
}
- /* sun/sky */
- if(rl->layflag & SCE_LAY_SKY)
- atm_tile(pa, rl);
-
if(rl->passflag & SCE_PASS_VECTOR)
reset_sky_speed(pa, rl);