[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