diff options
author | Ervin Weber <ervin.weber@gmail.com> | 2011-03-11 10:59:43 +0300 |
---|---|---|
committer | Ervin Weber <ervin.weber@gmail.com> | 2011-03-11 10:59:43 +0300 |
commit | 102c5e0ad4db69828efaf66845a00a62a2075fe2 (patch) | |
tree | 650d4cb325159913f066a392606231a9697b7e0e /source/blender/render | |
parent | bfe5a6ed8ffb4502aafe20bbb0815b0b4a58d504 (diff) |
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/rayshade.c | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/shadeoutput.c | 20 |
3 files changed, 15 insertions, 9 deletions
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c index 81652f5a290..d7eb22b5fc7 100644 --- a/source/blender/render/intern/source/convertblender.c +++ b/source/blender/render/intern/source/convertblender.c @@ -3350,7 +3350,7 @@ static void init_render_mesh(Render *re, ObjectRen *obr, int timeoffset) /* test for 100% transparant */ ok= 1; - if(ma->alpha==0.0f && ma->spectra==0.0f && ma->filter==0.0f) { + if(ma->alpha==0.0f && ma->spectra==0.0f && ma->filter==0.0f && (ma->mode & MA_TRANSP)) { ok= 0; /* texture on transparency? */ for(a=0; a<MAX_MTEX; a++) { diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index 6f639de70d5..c69507e6bf5 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -762,7 +762,7 @@ static void traceray(ShadeInput *origshi, ShadeResult *origshr, short depth, flo if(depth>0) { float fr, fg, fb, f, f1; - if((shi.mat->mode_l & MA_TRANSP) && shr.alpha < 1.0f) { + if((shi.mat->mode_l & MA_TRANSP) && shr.alpha < 1.0f && (shi.mat->mode_l & (MA_ZTRANSP | MA_RAYTRANSP))) { float nf, f, refract[3], tracol[4]; tracol[0]= shi.r; diff --git a/source/blender/render/intern/source/shadeoutput.c b/source/blender/render/intern/source/shadeoutput.c index 0081f809a09..768f1425c6f 100644 --- a/source/blender/render/intern/source/shadeoutput.c +++ b/source/blender/render/intern/source/shadeoutput.c @@ -878,7 +878,9 @@ void shade_color(ShadeInput *shi, ShadeResult *shr) if(ma->fresnel_tra!=0.0f) shi->alpha*= fresnel_fac(shi->view, shi->vn, ma->fresnel_tra_i, ma->fresnel_tra); - + + if (!(shi->mode & MA_TRANSP)) shi->alpha= 1.0f; + shr->diff[0]= shi->r; shr->diff[1]= shi->g; shr->diff[2]= shi->b; @@ -1578,7 +1580,7 @@ static void shade_lamp_loop_only_shadow(ShadeInput *shi, ShadeResult *shr) accum = 1.0f - shaded; }} - shr->alpha= (shi->mat->alpha)*(accum); + shr->alpha= (shi->alpha)*(accum); } else { /* If "fully shaded", use full alpha even on areas that have no lights */ @@ -1638,6 +1640,8 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr) memset(shr, 0, sizeof(ShadeResult)); + if(!(shi->mode & MA_TRANSP)) shi->alpha = 1.0f; + /* separate loop */ if(ma->mode & MA_ONLYSHADOW) { shade_lamp_loop_only_shadow(shi, shr); @@ -1654,10 +1658,12 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr) shi->g= shi->vcol[1]; shi->b= shi->vcol[2]; if(ma->mode & (MA_FACETEXTURE_ALPHA)) - shi->alpha= shi->vcol[3]; + shi->alpha= (shi->mode & MA_TRANSP) ? shi->vcol[3] : 1.0f; } - if(ma->texco) + if(ma->texco){ do_material_tex(shi); + if (!(shi->mode & MA_TRANSP)) shi->alpha = 1.0f; + } shr->col[0]= shi->r*shi->alpha; shr->col[1]= shi->g*shi->alpha; @@ -1812,11 +1818,11 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr) /* alpha in end, spec can influence it */ if(passflag & (SCE_PASS_COMBINED)) { - if(ma->fresnel_tra!=0.0f) + if((ma->fresnel_tra!=0.0f) && (shi->mode & MA_TRANSP)) shi->alpha*= fresnel_fac(shi->view, shi->vn, ma->fresnel_tra_i, ma->fresnel_tra); /* note: shi->mode! */ - if(shi->mode & MA_TRANSP) { + if(shi->mode & MA_TRANSP && (shi->mode & (MA_ZTRANSP|MA_RAYTRANSP))) { if(shi->spectra!=0.0f) { float t = MAX3(shr->spec[0], shr->spec[1], shr->spec[2]); t *= shi->spectra; @@ -1886,7 +1892,7 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr) shr->combined[0] *= obcol[0]; shr->combined[1] *= obcol[1]; shr->combined[2] *= obcol[2]; - shr->alpha *= obcol[3]; + if (shi->mode & MA_TRANSP) shr->alpha *= obcol[3]; } } |