fix for [#28012] Mat ID messy with shader nodes
authorJeroen Bakker <j.bakker@atmind.nl>
Tue, 19 Jul 2011 08:31:53 +0000 (08:31 +0000)
committerJeroen Bakker <j.bakker@atmind.nl>
Tue, 19 Jul 2011 08:31:53 +0000 (08:31 +0000)
Issue was that the Shader tree execution changed the ShaderInput.
Changes are that the UI is updated that only the main material will have the pass_index this is displayed in the "render pipeline options" panel.
When the material is not a node material the pass_index will be shown at the "options" panel

To test enable nodes on the material
Add a new input material
change the pass_index of the material (render pipeline options)
Enable RenderPass material ID and use the compositor to read out the material pass

Jeroen

release/scripts/startup/bl_ui/properties_material.py
source/blender/nodes/intern/SHD_util.c

index 45c15bd1ce699a8ad6ef133a5405b15057b7b569..2a52ae23782a57238a3f246ab0072f3efdaf2931 100644 (file)
@@ -174,6 +174,7 @@ class MATERIAL_PT_pipeline(MaterialButtonsPanel, bpy.types.Panel):
         row.prop(mat, "use_transparency")
         sub = row.column()
         sub.prop(mat, "offset_z")
+
         sub.active = mat_type and mat.use_transparency and mat.transparency_method == 'Z_TRANSPARENCY'
 
         row = layout.row()
@@ -199,6 +200,7 @@ class MATERIAL_PT_pipeline(MaterialButtonsPanel, bpy.types.Panel):
         col.prop(mat, "shadow_cast_alpha", text="Casting Alpha")
         col.prop(mat, "use_cast_buffer_shadows")
         col.prop(mat, "use_cast_approximate")
+        col.prop(mat, "pass_index")
 
 
 class MATERIAL_PT_diffuse(MaterialButtonsPanel, bpy.types.Panel):
@@ -729,7 +731,8 @@ class MATERIAL_PT_options(MaterialButtonsPanel, bpy.types.Panel):
         col.prop(mat, "use_vertex_color_paint")
         col.prop(mat, "use_vertex_color_light")
         col.prop(mat, "use_object_color")
-        col.prop(mat, "pass_index")
+        if simple_material(base_mat):
+            col.prop(mat, "pass_index")
 
 
 class MATERIAL_PT_shadow(MaterialButtonsPanel, bpy.types.Panel):
index cf7c64c9d5e3910910e6a1bdb0004162223912f7..190f68ce19a7cd65bc4f31bceb7a11ba95c40575 100644 (file)
@@ -83,7 +83,11 @@ void nodestack_get_vec(float *in, short type_in, bNodeStack *ns)
 void ntreeShaderExecTree(bNodeTree *ntree, ShadeInput *shi, ShadeResult *shr)
 {
        ShaderCallData scd;
-       
+       /*
+        @note: preserve material from ShadeInput for material id, nodetree execs change it
+        fix for bug "[#28012] Mat ID messy with shader nodes"
+        */
+       Material *mat = shi->mat;
        /* convert caller data to struct */
        scd.shi= shi;
        scd.shr= shr;
@@ -92,7 +96,8 @@ void ntreeShaderExecTree(bNodeTree *ntree, ShadeInput *shi, ShadeResult *shr)
        memset(shr, 0, sizeof(ShadeResult));
                   
        ntreeExecTree(ntree, &scd, shi->thread);        /* threads */
-       
+       // @note: set material back to preserved material
+       shi->mat = mat;
        /* better not allow negative for now */
        if(shr->combined[0]<0.0f) shr->combined[0]= 0.0f;
        if(shr->combined[1]<0.0f) shr->combined[1]= 0.0f;