Bugfix #26116
Node materials with 'ray transparency' set now work again. Fix provided by Ervin Weber, thanks a lot!
This commit is contained in:
@@ -872,7 +872,7 @@ static void init_render_nodetree(bNodeTree *ntree, Material *basemat, int r_mode
|
||||
if(ma!=basemat) {
|
||||
do_init_render_material(ma, r_mode, amb);
|
||||
basemat->texco |= ma->texco;
|
||||
basemat->mode_l |= ma->mode_l;
|
||||
basemat->mode_l |= ma->mode_l & ~(MA_TRANSP|MA_ZTRANSP|MA_RAYTRANSP);
|
||||
}
|
||||
}
|
||||
else if(node->type==NODE_GROUP)
|
||||
|
||||
@@ -1502,7 +1502,7 @@ void ray_trace(ShadeInput *shi, ShadeResult *shr)
|
||||
float diff[3];
|
||||
int do_tra, do_mir;
|
||||
|
||||
do_tra= ((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f && (shi->depth <= shi->mat->ray_depth_tra));
|
||||
do_tra= ((shi->mode & MA_TRANSP) && (shi->mode & MA_RAYTRANSP) && shr->alpha!=1.0f && (shi->depth <= shi->mat->ray_depth_tra));
|
||||
do_mir= ((shi->mat->mode & MA_RAYMIRROR) && shi->ray_mirror!=0.0f && (shi->depth <= shi->mat->ray_depth));
|
||||
|
||||
/* raytrace mirror amd refract like to separate the spec color */
|
||||
|
||||
@@ -133,13 +133,13 @@ void shade_material_loop(ShadeInput *shi, ShadeResult *shr)
|
||||
/* depth >= 1 when ray-shading */
|
||||
if(shi->depth==0 || shi->volume_depth > 0) {
|
||||
if(R.r.mode & R_RAYTRACE) {
|
||||
if(shi->ray_mirror!=0.0f || ((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f)) {
|
||||
if(shi->ray_mirror!=0.0f || ((shi->mode & MA_TRANSP) && (shi->mode & MA_RAYTRANSP) && shr->alpha!=1.0f)) {
|
||||
/* ray trace works on combined, but gives pass info */
|
||||
ray_trace(shi, shr);
|
||||
}
|
||||
}
|
||||
/* disable adding of sky for raytransp */
|
||||
if((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP))
|
||||
if((shi->mode & MA_TRANSP) && (shi->mode & MA_RAYTRANSP))
|
||||
if((shi->layflag & SCE_LAY_SKY) && (R.r.alphamode==R_ADDSKY))
|
||||
shr->alpha= 1.0f;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user