diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2015-05-29 13:26:58 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2015-05-29 13:26:58 +0300 |
commit | 1bede8644a762279119adafb6e1b5e03884601e6 (patch) | |
tree | d39ecce74fc654ed710f8febc5c62122abcb3448 /source/blender/render | |
parent | 52cfd0eef8de4e5cef435c9e002c308881bed1da (diff) |
Fix T44880: transparency filter is only valid with raytransp, not ztransp.
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 5 | ||||
-rw-r--r-- | source/blender/render/intern/source/rayshade.c | 8 |
2 files changed, 7 insertions, 6 deletions
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 06028870a3f..1da1a81fe95 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -3279,12 +3279,13 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) for (a1=0; (a1<ob->totcol || (a1==0 && ob->totcol==0)); a1++) { ma= give_render_material(re, ob, a1+1); - + /* test for 100% transparent */ ok = 1; if ((ma->alpha == 0.0f) && (ma->spectra == 0.0f) && - (ma->filter == 0.0f) && + /* No need to test filter here, it's only active with MA_RAYTRANSP and we check against it below. */ + /* (ma->filter == 0.0f) && */ (ma->mode & MA_TRANSP) && (ma->mode & (MA_RAYTRANSP | MA_RAYMIRROR)) == 0) { diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index 88960b7a66d..2b1d5b8c1e5 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -795,7 +795,7 @@ static void traceray(ShadeInput *origshi, ShadeResult *origshr, short depth, con traceray(origshi, origshr, depth-1, shi.co, shi.view, tracol, shi.obi, shi.vlr, 0); f= shr.alpha; f1= 1.0f-f; - nf= d * shi.mat->filter; + nf= (shi.mat->mode & MA_RAYTRANSP) ? d * shi.mat->filter : 0.0f; fr= 1.0f+ nf*(shi.r-1.0f); fg= 1.0f+ nf*(shi.g-1.0f); fb= 1.0f+ nf*(shi.b-1.0f); @@ -1629,9 +1629,9 @@ static void ray_trace_shadow_tra(Isect *is, ShadeInput *origshi, int depth, int shade_ray(is, &shi, &shr); if (shi.mat->material_type == MA_TYPE_SURFACE) { - const float d= (traflag & RAY_TRA) ? - shade_by_transmission(is, &shi, &shr) : - 1.0f; + const float d = (shi.mat->mode & MA_RAYTRANSP) ? + ((traflag & RAY_TRA) ? shade_by_transmission(is, &shi, &shr) : 1.0f) : + 0.0f; /* mix colors based on shadfac (rgb + amount of light factor) */ addAlphaLight(col, shr.diff, shr.alpha, d*shi.mat->filter); } |