Revision: 20424
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20424
Author:   ton
Date:     2009-05-26 15:46:08 +0200 (Tue, 26 May 2009)

Log Message:
-----------
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!

Modified Paths:
--------------
    trunk/blender/source/blender/nodes/intern/SHD_nodes/SHD_material.c
    trunk/blender/source/blender/render/extern/include/RE_shader_ext.h
    trunk/blender/source/blender/render/intern/source/rayshade.c

Modified: trunk/blender/source/blender/nodes/intern/SHD_nodes/SHD_material.c
===================================================================
--- trunk/blender/source/blender/nodes/intern/SHD_nodes/SHD_material.c  
2009-05-26 12:57:16 UTC (rev 20423)
+++ trunk/blender/source/blender/nodes/intern/SHD_nodes/SHD_material.c  
2009-05-26 13:46:08 UTC (rev 20424)
@@ -130,7 +130,9 @@
                                nodestack_get_vec(&shi->translucency, 
SOCK_VALUE, in[MAT_IN_TRANSLUCENCY]);                     
                }
                
+               shi->nodes= 1; /* temp hack to prevent trashadow recursion */
                node_shader_lamp_loop(shi, &shrnode);   /* clears shrnode */
+               shi->nodes= 0;
                
                /* write to outputs */
                if(node->custom1 & SH_NODE_MAT_DIFF) {

Modified: trunk/blender/source/blender/render/extern/include/RE_shader_ext.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_shader_ext.h  
2009-05-26 12:57:16 UTC (rev 20423)
+++ trunk/blender/source/blender/render/extern/include/RE_shader_ext.h  
2009-05-26 13:46:08 UTC (rev 20424)
@@ -171,6 +171,7 @@
        /* 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;

Modified: trunk/blender/source/blender/render/intern/source/rayshade.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rayshade.c        
2009-05-26 12:57:16 UTC (rev 20423)
+++ trunk/blender/source/blender/render/intern/source/rayshade.c        
2009-05-26 13:46:08 UTC (rev 20424)
@@ -263,7 +263,8 @@
        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 @@
                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)


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to