[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20424] trunk/blender/source/blender: Bugfix #18801

Ton Roosendaal ton at blender.org
Tue May 26 15:46:08 CEST 2009


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)





More information about the Bf-blender-cvs mailing list