From abc79af9752516198d0d417b3d7308303d997657 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 13 Mar 2008 15:55:35 +0000 Subject: Fix for bug #8437: white borders in envmap reflection, cause was change in imagewraposa that de-premuls colors, while envmap code was expecting premultiplied colors. --- source/blender/render/intern/source/envmap.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c index eb106591096..26151ff8b91 100644 --- a/source/blender/render/intern/source/envmap.c +++ b/source/blender/render/intern/source/envmap.c @@ -636,7 +636,7 @@ int envmaptex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexRe /* texvec should be the already reflected normal */ EnvMap *env; ImBuf *ibuf; - float fac, vec[3], sco[3], dxts[3], dyts[3]; + float fac, vec[3], sco[3], dxts[3], dyts[3], w[3]; int face, face1; env= tex->env; @@ -717,10 +717,16 @@ int envmaptex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexRe fac= (texres->ta+texr1.ta+texr2.ta); if(fac!=0.0) { fac= 1.0/fac; + + /* weight contributions based on alpha */ + w[0]= texres->ta*fac; + w[1]= texr1.ta*fac; + w[2]= texr2.ta*fac; - texres->tr= fac*(texres->ta*texres->tr + texr1.ta*texr1.tr + texr2.ta*texr2.tr ); - texres->tg= fac*(texres->ta*texres->tg + texr1.ta*texr1.tg + texr2.ta*texr2.tg ); - texres->tb= fac*(texres->ta*texres->tb + texr1.ta*texr1.tb + texr2.ta*texr2.tb ); + /* interpolate premultiplied result (imagewraposa returns key) */ + texres->tr= (w[0]*texres->ta*texres->tr + w[1]*texr1.ta*texr1.tr + w[2]*texr2.ta*texr2.tr); + texres->tg= (w[0]*texres->ta*texres->tg + w[1]*texr1.ta*texr1.tg + w[2]*texr2.ta*texr2.tg); + texres->tb= (w[0]*texres->ta*texres->tb + w[1]*texr1.ta*texr1.tb + w[2]*texr2.ta*texr2.tb); } texres->ta= 1.0; } -- cgit v1.2.3