[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29417] branches/render25/source/blender: Material IDs work with nodes now; the id defaults to the

Joseph Eagar joeedh at gmail.com
Fri Jun 11 23:53:10 CEST 2010


Revision: 29417
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29417
Author:   joeedh
Date:     2010-06-11 23:53:10 +0200 (Fri, 11 Jun 2010)

Log Message:
-----------
Material IDs work with nodes now; the id defaults to the
containing material's id, but you can also specify an
id mask output node if you want.

Modified Paths:
--------------
    branches/render25/source/blender/blenkernel/BKE_node.h
    branches/render25/source/blender/blenkernel/intern/node.c
    branches/render25/source/blender/makesrna/intern/rna_nodetree_types.h
    branches/render25/source/blender/nodes/SHD_node.h
    branches/render25/source/blender/nodes/intern/SHD_nodes/SHD_material.c
    branches/render25/source/blender/nodes/intern/SHD_nodes/SHD_output.c
    branches/render25/source/blender/nodes/intern/SHD_util.c
    branches/render25/source/blender/nodes/intern/SHD_util.h
    branches/render25/source/blender/render/intern/source/shadeinput.c
    branches/render25/source/blender/render/intern/source/shadeoutput.c

Modified: branches/render25/source/blender/blenkernel/BKE_node.h
===================================================================
--- branches/render25/source/blender/blenkernel/BKE_node.h	2010-06-11 21:13:59 UTC (rev 29416)
+++ branches/render25/source/blender/blenkernel/BKE_node.h	2010-06-11 21:53:10 UTC (rev 29417)
@@ -245,6 +245,7 @@
 #define SH_NODE_COMBRGB		121
 #define SH_NODE_HUE_SAT		122
 #define NODE_DYNAMIC		123
+#define SH_NODE_IDMASK_OUTPUT	124
 
 /* custom defines options for Material node */
 #define SH_NODE_MAT_DIFF   1

Modified: branches/render25/source/blender/blenkernel/intern/node.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/node.c	2010-06-11 21:13:59 UTC (rev 29416)
+++ branches/render25/source/blender/blenkernel/intern/node.c	2010-06-11 21:53:10 UTC (rev 29417)
@@ -3115,6 +3115,7 @@
 {
 	nodeRegisterType(ntypelist, &node_group_typeinfo);
 	nodeRegisterType(ntypelist, &sh_node_output);
+	nodeRegisterType(ntypelist, &sh_node_idmask_output);
 	nodeRegisterType(ntypelist, &sh_node_mix_rgb);
 	nodeRegisterType(ntypelist, &sh_node_valtorgb);
 	nodeRegisterType(ntypelist, &sh_node_rgbtobw);

Modified: branches/render25/source/blender/makesrna/intern/rna_nodetree_types.h
===================================================================
--- branches/render25/source/blender/makesrna/intern/rna_nodetree_types.h	2010-06-11 21:13:59 UTC (rev 29416)
+++ branches/render25/source/blender/makesrna/intern/rna_nodetree_types.h	2010-06-11 21:53:10 UTC (rev 29417)
@@ -24,6 +24,7 @@
  
 /*       Tree type       Node ID                  RNA def function        Enum name         Struct name       UI Name              UI Description */
 DefNode( ShaderNode,     SH_NODE_OUTPUT,          0,                      "OUTPUT",         Output,           "Output",            ""              )
+DefNode( ShaderNode,     SH_NODE_IDMASK_OUTPUT,   0,                      "IDMASK_OUTPUT",  IDMaskOutput,     "ID Mask Output",    "Use a custom material id mask")
 DefNode( ShaderNode,     SH_NODE_MATERIAL,        def_sh_material,        "MATERIAL",       Material,         "Material",          ""              )
 DefNode( ShaderNode,     SH_NODE_RGB,             0,                      "RGB",            RGB,              "RGB",               ""              )
 DefNode( ShaderNode,     SH_NODE_VALUE,           0,                      "VALUE",          Value,            "Value",             ""              )

Modified: branches/render25/source/blender/nodes/SHD_node.h
===================================================================
--- branches/render25/source/blender/nodes/SHD_node.h	2010-06-11 21:13:59 UTC (rev 29416)
+++ branches/render25/source/blender/nodes/SHD_node.h	2010-06-11 21:53:10 UTC (rev 29417)
@@ -62,6 +62,7 @@
 extern bNodeType sh_node_seprgb;
 extern bNodeType sh_node_combrgb;
 extern bNodeType sh_node_hue_sat;
+extern bNodeType sh_node_idmask_output;
 
 #endif
 

Modified: branches/render25/source/blender/nodes/intern/SHD_nodes/SHD_material.c
===================================================================
--- branches/render25/source/blender/nodes/intern/SHD_nodes/SHD_material.c	2010-06-11 21:13:59 UTC (rev 29416)
+++ branches/render25/source/blender/nodes/intern/SHD_nodes/SHD_material.c	2010-06-11 21:53:10 UTC (rev 29417)
@@ -43,6 +43,7 @@
 	{	SOCK_RGBA, 0, "Color",		0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
 	{	SOCK_VALUE, 0, "Alpha",		1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
 	{	SOCK_VECTOR, 0, "Normal",	0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f},
+	{	SOCK_VALUE, 0, "ID Mask",	0.0f, 0.0f, 0.0f, 0.0f, 0.0, 999999.0f},
 	{	-1, 0, ""	}
 };
 
@@ -67,6 +68,7 @@
 	{	SOCK_RGBA, 0, "Color",		0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
 	{	SOCK_VALUE, 0, "Alpha",		1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
 	{	SOCK_VECTOR, 0, "Normal",	0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f},
+	{	SOCK_VALUE, 0, "ID Mask",	0.0f, 0.0f, 0.0f, 0.0f, 0.0, 999999.0f},
 	{	SOCK_RGBA, 0, "Diffuse",		0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
 	{	SOCK_RGBA, 0, "Spec",		0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
 	{	SOCK_RGBA, 0, "AO",		0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
@@ -164,6 +166,7 @@
 		}
 		
 		VECCOPY(out[MAT_OUT_NORMAL]->vec, shi->geometry.vn);
+		out[MAT_OUT_INDEXMA]->vec[0] = shrnode.indexma;
 		
 		/* Extended material options */
 		if (node->type == SH_NODE_MATERIAL_EXT) {

Modified: branches/render25/source/blender/nodes/intern/SHD_nodes/SHD_output.c
===================================================================
--- branches/render25/source/blender/nodes/intern/SHD_nodes/SHD_output.c	2010-06-11 21:13:59 UTC (rev 29416)
+++ branches/render25/source/blender/nodes/intern/SHD_nodes/SHD_output.c	2010-06-11 21:53:10 UTC (rev 29417)
@@ -45,7 +45,7 @@
 		/* stack order input sockets: col, alpha, normal */
 		nodestack_get_vec(col, SOCK_VECTOR, in[0]);
 		nodestack_get_vec(col+3, SOCK_VALUE, in[1]);
-		
+				
 		if(shi->shading.do_preview) {
 			nodeAddToPreview(node, col, shi->geometry.xs, shi->geometry.ys);
 			node->lasty= shi->geometry.ys;
@@ -56,7 +56,6 @@
 			
 			QUATCOPY(shr->combined, col);
 			shr->alpha= col[3];
-			
 			//	VECCOPY(shr->nor, in[3]->vec);
 		}
 	}	
@@ -94,3 +93,44 @@
 	
 };
 
+static bNodeSocketType sh_node_idmask_output_in[]= {
+	{   SOCK_VALUE, 1, "ID Mask",   0.0f, 0.0f, 0.0f, 0.0f, 0.0, 999999.0f},    
+	{	-1, 0, ""	}
+};
+
+
+static void node_shader_exec_idmask_output(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+	if(data) {
+		ShadeInput *shi= ((ShaderCallData *)data)->shi;
+		float col[1];
+
+		nodestack_get_vec(col, SOCK_VALUE, in[0]);
+		
+		if(node->flag & NODE_DO_OUTPUT) {
+			ShadeResult *shr= ((ShaderCallData *)data)->shr;
+			
+			shr->indexma = col[0];
+		}
+	}	
+}
+
+
+bNodeType sh_node_idmask_output= {
+	/* *next,*prev */	NULL, NULL,
+	/* type code   */	SH_NODE_IDMASK_OUTPUT,
+	/* name        */	"ID Mask Output",
+	/* width+range */	80, 60, 200,
+	/* class+opts  */	NODE_CLASS_OUTPUT, 0,
+	/* input sock  */	sh_node_idmask_output_in,
+	/* output sock */	NULL,
+	/* storage     */	"",
+	/* execfunc    */	node_shader_exec_idmask_output,
+	/* butfunc     */	NULL,
+	/* initfunc    */	NULL,
+	/* freestoragefunc    */	NULL,
+	/* copystoragefunc    */	NULL,
+	/* id          */	NULL, NULL, NULL,
+	/* gpufunc     */	NULL
+	
+};

Modified: branches/render25/source/blender/nodes/intern/SHD_util.c
===================================================================
--- branches/render25/source/blender/nodes/intern/SHD_util.c	2010-06-11 21:13:59 UTC (rev 29416)
+++ branches/render25/source/blender/nodes/intern/SHD_util.c	2010-06-11 21:53:10 UTC (rev 29417)
@@ -83,6 +83,7 @@
 	scd.re= re;
 	scd.shi= shi;
 	scd.shr= shr;
+	scd.shr->indexma = shi->material.index;
 	
 	/* each material node has own local shaderesult, with optional copying */
 	memset(shr, 0, sizeof(ShadeResult));

Modified: branches/render25/source/blender/nodes/intern/SHD_util.h
===================================================================
--- branches/render25/source/blender/nodes/intern/SHD_util.h	2010-06-11 21:13:59 UTC (rev 29416)
+++ branches/render25/source/blender/nodes/intern/SHD_util.h	2010-06-11 21:53:10 UTC (rev 29417)
@@ -106,11 +106,13 @@
 /* output socket defines */
 #define MAT_OUT_COLOR		0
 #define MAT_OUT_ALPHA		1
-#define MAT_OUT_NORMAL	2
-#define MAT_OUT_DIFFUSE	3
-#define MAT_OUT_SPEC		4
-#define MAT_OUT_AO		5
+#define MAT_OUT_NORMAL		2
+#define MAT_OUT_INDEXMA		3
 
+#define MAT_OUT_DIFFUSE		4
+#define MAT_OUT_SPEC		5
+#define MAT_OUT_AO			6
+
 extern void node_ID_title_cb(void *node_v, void *unused_v);
 void nodestack_get_vec(float *in, short type_in, bNodeStack *ns);
 

Modified: branches/render25/source/blender/render/intern/source/shadeinput.c
===================================================================
--- branches/render25/source/blender/render/intern/source/shadeinput.c	2010-06-11 21:13:59 UTC (rev 29416)
+++ branches/render25/source/blender/render/intern/source/shadeinput.c	2010-06-11 21:53:10 UTC (rev 29417)
@@ -1389,7 +1389,10 @@
 		copy_v4_v4(shr->winspeed, shi->texture.winspeed);
 		copy_v3_v3(shr->nor, shi->geometry.vn);
 		shr->indexob= shi->primitive.obi->index;
-		shr->indexma= shi->material.index;
+
+		/*nodetree sets indexma itself*/
+		if (!(shi->material.mat->nodetree && shi->material.mat->use_nodes))
+			shr->indexma= shi->material.index;
 	}
 
 	/* uv pass */

Modified: branches/render25/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- branches/render25/source/blender/render/intern/source/shadeoutput.c	2010-06-11 21:13:59 UTC (rev 29416)
+++ branches/render25/source/blender/render/intern/source/shadeoutput.c	2010-06-11 21:53:10 UTC (rev 29417)
@@ -350,6 +350,7 @@
 
 	/* alpha pass */
 	shr->alpha= mat_alpha(&shi->material);
+	shr->indexma = shi->material.index;
 
 	/* color pass */
 	if((passflag & SCE_PASS_RGBA) || (ma->sss_flag & MA_DIFF_SSS)) {





More information about the Bf-blender-cvs mailing list