From 33304d022d7f43eb1319fe7e9db33ec6559c275d Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Tue, 26 May 2009 13:46:08 +0000 Subject: Bugfix #18801 Third transparent shadow bug... this time it's a Material Node, which has mirror + transp-shadow on, and when it traces its own material it enters an eternal loop... Raytracing + shading + materialnode combo really needs work! --- source/blender/render/extern/include/RE_shader_ext.h | 1 + source/blender/render/intern/source/rayshade.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'source/blender/render') diff --git a/source/blender/render/extern/include/RE_shader_ext.h b/source/blender/render/extern/include/RE_shader_ext.h index 2cee2673a26..0ad48fe97a9 100644 --- a/source/blender/render/extern/include/RE_shader_ext.h +++ b/source/blender/render/extern/include/RE_shader_ext.h @@ -171,6 +171,7 @@ typedef struct ShadeInput /* from initialize, part or renderlayer */ short do_preview; /* for nodes, in previewrender */ short thread, sample; /* sample: ShadeSample array index */ + short nodes; /* indicate node shading, temp hack to prevent recursion */ unsigned int lay; int layflag, passflag, combinedflag; diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c index f4dcbe9e186..75b9557f337 100644 --- a/source/blender/render/intern/source/rayshade.c +++ b/source/blender/render/intern/source/rayshade.c @@ -263,7 +263,8 @@ static void shade_ray(Isect *is, ShadeInput *shi, ShadeResult *shr) shade_input_set_shade_texco(shi); if(is->mode==RE_RAY_SHADOW_TRA) { - if(shi->mat->nodetree && shi->mat->use_nodes) { + /* temp hack to prevent recursion */ + if(shi->nodes==0 && shi->mat->nodetree && shi->mat->use_nodes) { ntreeShaderExecTree(shi->mat->nodetree, shi, shr); shi->mat= vlr->mat; /* shi->mat is being set in nodetree */ } @@ -1299,6 +1300,7 @@ static void ray_trace_shadow_tra(Isect *is, ShadeInput *origshi, int depth, int shi.xs= origshi->xs; shi.ys= origshi->ys; shi.lay= origshi->lay; + shi.nodes= origshi->nodes; shade_ray(is, &shi, &shr); if (traflag & RAY_TRA) -- cgit v1.2.3