[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [38090] trunk/blender: Current situation

Daniel Salazar - 3Developer.com zanqdo at gmail.com
Fri Jul 8 02:14:46 CEST 2011


Hey man, nice going. I do detect a problem with node materials. I
believe the MatID should be in "Render Pipeline Options" for node
materials and affect the entire node shader. See why in this blend

http://www.pasteall.org/blend/7439

cheers!

Daniel Salazar
3Developer.com



On Mon, Jul 4, 2011 at 12:14 PM, Jeroen Bakker <j.bakker at atmind.nl> wrote:
> Revision: 38090
>          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38090
> Author:   jbakker
> Date:     2011-07-04 18:14:41 +0000 (Mon, 04 Jul 2011)
> Log Message:
> -----------
> Current situation
>
> A mesh can consist out of multiple material. Take a character with clothing's. the skin can be a different material as the different clothing's. During compositing it is a common use-case to only do a part of the composit on only a specific material. Currently this can not be done.
>
> In blender movies this feature is known to be implemented, but until now it never got integrated into trunk.
> Proposal
>
> With material index the Blender internal renderer will be capable of creating a buffer containing the material indexes of the first pixel-hit. This will be implemented in the same manner as the object index.
>
> In the compositor the ID Mask node can be used to extract the information out of the Render pass.
> Impact
> User interface
>
> On the properties-space the next changes will be done
>
>    Scene?\226?\135?\146Render layer?\226?\135?\146Passes?\226?\135?\146Material index will be added
>    Material?\226?\135?\146Options?\226?\135?\146Pass index will be added
>
> DNA
>
>    Material struct will get an new field called ?\226?\128?\156index?\226?\128?\157. this will be a short-type.
>    Material struct the field pad will be removed.
>    A new Render-layer pass will be added (bit 1?\194?\17118)
>
> RNA
>
>    Material RNA is updated (based on ?\226?\128?\156pass index?\226?\128?\157 from object)
>    Render layer RNA is updated (based on IndexOB)
>
> Blender internal renderer
>
> The Blender internal renderer will process the render pass as a copy of the Object index.
> Blender compositor
>
> The render layer input will get a new output socket called ?\226?\128?\156IndexMA?\226?\128?\157
> Usage
>
> An example on how to use material index can be found at:
>
> https://svn.blender.org/svnroot/bf-blender/trunk/lib/tests/compositing/composite_materialindex.blend
>
> This is also example of a commit message longer than the commit itself :)
>
> Modified Paths:
> --------------
>    trunk/blender/release/scripts/startup/bl_ui/properties_material.py
>    trunk/blender/release/scripts/startup/bl_ui/properties_render.py
>    trunk/blender/source/blender/blenkernel/BKE_node.h
>    trunk/blender/source/blender/blenkernel/intern/node.c
>    trunk/blender/source/blender/editors/space_outliner/outliner.c
>    trunk/blender/source/blender/makesdna/DNA_material_types.h
>    trunk/blender/source/blender/makesdna/DNA_scene_types.h
>    trunk/blender/source/blender/makesrna/intern/rna_material.c
>    trunk/blender/source/blender/makesrna/intern/rna_render.c
>    trunk/blender/source/blender/makesrna/intern/rna_scene.c
>    trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_image.c
>    trunk/blender/source/blender/render/intern/source/pipeline.c
>    trunk/blender/source/blender/render/intern/source/rendercore.c
>    trunk/blender/source/blender/render/intern/source/shadeinput.c
>    trunk/blender/source/blender/render/intern/source/zbuf.c
>
> Modified: trunk/blender/release/scripts/startup/bl_ui/properties_material.py
> ===================================================================
> --- trunk/blender/release/scripts/startup/bl_ui/properties_material.py  2011-07-04 18:11:41 UTC (rev 38089)
> +++ trunk/blender/release/scripts/startup/bl_ui/properties_material.py  2011-07-04 18:14:41 UTC (rev 38090)
> @@ -729,6 +729,7 @@
>         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")
>
>
>  class MATERIAL_PT_shadow(MaterialButtonsPanel, bpy.types.Panel):
>
> Modified: trunk/blender/release/scripts/startup/bl_ui/properties_render.py
> ===================================================================
> --- trunk/blender/release/scripts/startup/bl_ui/properties_render.py    2011-07-04 18:11:41 UTC (rev 38089)
> +++ trunk/blender/release/scripts/startup/bl_ui/properties_render.py    2011-07-04 18:14:41 UTC (rev 38090)
> @@ -141,6 +141,7 @@
>         col.prop(rl, "use_pass_uv")
>         col.prop(rl, "use_pass_mist")
>         col.prop(rl, "use_pass_object_index")
> +        col.prop(rl, "use_pass_material_index")
>         col.prop(rl, "use_pass_color")
>
>         col = split.column()
>
> Modified: trunk/blender/source/blender/blenkernel/BKE_node.h
> ===================================================================
> --- trunk/blender/source/blender/blenkernel/BKE_node.h  2011-07-04 18:11:41 UTC (rev 38089)
> +++ trunk/blender/source/blender/blenkernel/BKE_node.h  2011-07-04 18:14:41 UTC (rev 38090)
> @@ -319,9 +319,10 @@
>  #define RRES_OUT_REFRACT       12
>  #define RRES_OUT_INDIRECT      13
>  #define RRES_OUT_INDEXOB       14
> -#define RRES_OUT_MIST          15
> -#define RRES_OUT_EMIT          16
> -#define RRES_OUT_ENV           17
> +#define RRES_OUT_INDEXMA       15
> +#define RRES_OUT_MIST          16
> +#define RRES_OUT_EMIT          17
> +#define RRES_OUT_ENV           18
>
>  /* note: types are needed to restore callbacks, don't change values */
>  #define CMP_NODE_VIEWER                201
>
> Modified: trunk/blender/source/blender/blenkernel/intern/node.c
> ===================================================================
> --- trunk/blender/source/blender/blenkernel/intern/node.c       2011-07-04 18:11:41 UTC (rev 38089)
> +++ trunk/blender/source/blender/blenkernel/intern/node.c       2011-07-04 18:14:41 UTC (rev 38090)
> @@ -3156,7 +3156,9 @@
>        if(!(passflag & SCE_PASS_INDIRECT)) sock->flag |= SOCK_UNAVAIL;
>        sock= BLI_findlink(&node->outputs, RRES_OUT_INDEXOB);
>        if(!(passflag & SCE_PASS_INDEXOB)) sock->flag |= SOCK_UNAVAIL;
> -       sock= BLI_findlink(&node->outputs, RRES_OUT_MIST);
> +        sock= BLI_findlink(&node->outputs, RRES_OUT_INDEXMA);
> +        if(!(passflag & SCE_PASS_INDEXMA)) sock->flag |= SOCK_UNAVAIL;
> +        sock= BLI_findlink(&node->outputs, RRES_OUT_MIST);
>        if(!(passflag & SCE_PASS_MIST)) sock->flag |= SOCK_UNAVAIL;
>        sock= BLI_findlink(&node->outputs, RRES_OUT_EMIT);
>        if(!(passflag & SCE_PASS_EMIT)) sock->flag |= SOCK_UNAVAIL;
>
> Modified: trunk/blender/source/blender/editors/space_outliner/outliner.c
> ===================================================================
> --- trunk/blender/source/blender/editors/space_outliner/outliner.c      2011-07-04 18:11:41 UTC (rev 38089)
> +++ trunk/blender/source/blender/editors/space_outliner/outliner.c      2011-07-04 18:14:41 UTC (rev 38090)
> @@ -480,7 +480,11 @@
>        te->name= "Index Object";
>        te->directdata= &srl->passflag;
>
> -       te= outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_RGBA));
> +        te= outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXMA));
> +        te->name= "Index Material";
> +        te->directdata= &srl->passflag;
> +
> +        te= outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_RGBA));
>        te->name= "Color";
>        te->directdata= &srl->passflag;
>
>
> Modified: trunk/blender/source/blender/makesdna/DNA_material_types.h
> ===================================================================
> --- trunk/blender/source/blender/makesdna/DNA_material_types.h  2011-07-04 18:11:41 UTC (rev 38089)
> +++ trunk/blender/source/blender/makesdna/DNA_material_types.h  2011-07-04 18:14:41 UTC (rev 38090)
> @@ -161,7 +161,7 @@
>
>        int mapto_textured;     /* render-time cache to optimise texture lookups */
>        short shadowonly_flag;          /* "shadowsonly" type */
> -       short pad;
> +        short index;    /* custom index for render passes */
>
>        ListBase gpumaterial;           /* runtime */
>  } Material;
>
> Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
> ===================================================================
> --- trunk/blender/source/blender/makesdna/DNA_scene_types.h     2011-07-04 18:11:41 UTC (rev 38089)
> +++ trunk/blender/source/blender/makesdna/DNA_scene_types.h     2011-07-04 18:14:41 UTC (rev 38090)
> @@ -201,6 +201,7 @@
>  #define SCE_PASS_RAYHITS               (1<<15)
>  #define SCE_PASS_EMIT                  (1<<16)
>  #define SCE_PASS_ENVIRONMENT   (1<<17)
> +#define SCE_PASS_INDEXMA       (1<<18)
>
>  /* note, srl->passflag is treestore element 'nr' in outliner, short still... */
>
>
> Modified: trunk/blender/source/blender/makesrna/intern/rna_material.c
> ===================================================================
> --- trunk/blender/source/blender/makesrna/intern/rna_material.c 2011-07-04 18:11:41 UTC (rev 38089)
> +++ trunk/blender/source/blender/makesrna/intern/rna_material.c 2011-07-04 18:14:41 UTC (rev 38090)
> @@ -1675,7 +1675,12 @@
>        RNA_def_property_flag(prop, PROP_EDITABLE);
>        RNA_def_property_ui_text(prop, "Light Group", "Limit lighting to lamps in this Group");
>        RNA_def_property_update(prop, 0, "rna_Material_update");
> -
> +
> +        prop= RNA_def_property(srna, "pass_index", PROP_INT, PROP_UNSIGNED);
> +        RNA_def_property_int_sdna(prop, NULL, "index");
> +        RNA_def_property_ui_text(prop, "Pass Index", "Index # for the IndexMA render pass");
> +        RNA_def_property_update(prop, NC_OBJECT, NULL);
> +
>        /* flags */
>
>        prop= RNA_def_property(srna, "use_light_group_exclusive", PROP_BOOLEAN, PROP_NONE);
>
> Modified: trunk/blender/source/blender/makesrna/intern/rna_render.c
> ===================================================================
> --- trunk/blender/source/blender/makesrna/intern/rna_render.c   2011-07-04 18:11:41 UTC (rev 38089)
> +++ trunk/blender/source/blender/makesrna/intern/rna_render.c   2011-07-04 18:14:41 UTC (rev 38090)
> @@ -388,7 +388,8 @@
>                {SCE_PASS_MIST, "MIST", 0, "Mist", ""},
>                {SCE_PASS_EMIT, "EMIT", 0, "Emit", ""},
>                {SCE_PASS_ENVIRONMENT, "ENVIRONMENT", 0, "Environment", ""},
> -               {0, NULL, 0, NULL, NULL}};
> +                {SCE_PASS_INDEXMA, "MATERIAL_INDEX", 0, "Material Index", ""},
> +                {0, NULL, 0, NULL, NULL}};
>
>        srna= RNA_def_struct(brna, "RenderPass", NULL);
>        RNA_def_struct_ui_text(srna, "Render Pass", "");
>
> Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
> ===================================================================
> --- trunk/blender/source/blender/makesrna/intern/rna_scene.c    2011-07-04 18:11:41 UTC (rev 38089)
> +++ trunk/blender/source/blender/makesrna/intern/rna_scene.c    2011-07-04 18:14:41 UTC (rev 38090)
> @@ -1515,7 +1515,13 @@
>        if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
>        else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
>
> -       prop= RNA_def_property(srna, "use_pass_color", PROP_BOOLEAN, PROP_NONE);
> +        prop= RNA_def_property(srna, "use_pass_material_index", PROP_BOOLEAN, PROP_NONE);
> +        RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_INDEXMA);
> +        RNA_def_property_ui_text(prop, "Material Index", "Deliver material index pass");
> +        if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
> +        else RNA_def_property_clear_flag(prop, PROP_EDITABLE);
> +
> +        prop= RNA_def_property(srna, "use_pass_color", PROP_BOOLEAN, PROP_NONE);
>        RNA_def_property_boolean_sdna(prop, NULL, "passflag", SCE_PASS_RGBA);
>        RNA_def_property_ui_text(prop, "Color", "Deliver shade-less color pass");
>        if(scene) RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneRenderLayer_pass_update");
>
> Modified: trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_image.c
> ===================================================================
> --- trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_image.c     2011-07-04 18:11:41 UTC (rev 38089)
> +++ trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_image.c     2011-07-04 18:14:41 UTC (rev 38090)
> @@ -53,7 +53,8 @@
>        {       SOCK_RGBA, 0, "Refract",        0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
>        {       SOCK_RGBA, 0, "Indirect",       0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
>        {       SOCK_VALUE, 0, "IndexOB",       0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
> -       {       SOCK_VALUE, 0, "Mist",          0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
> +        {      SOCK_VALUE, 0, "IndexMA",       0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
> +        {      SOCK_VALUE, 0, "Mist",          0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
>        {       SOCK_RGBA, 0, "Emit",           0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
>        {       SOCK_RGBA, 0, "Environment",0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
>        {       -1, 0, ""       }
> @@ -211,7 +212,9 @@
>                out[RRES_OUT_INDIRECT]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_INDIRECT);
>        if(out[RRES_OUT_INDEXOB]->hasoutput)
>                out[RRES_OUT_INDEXOB]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_INDEXOB);
> -       if(out[RRES_OUT_MIST]->hasoutput)
> +        if(out[RRES_OUT_INDEXMA]->hasoutput)
> +                out[RRES_OUT_INDEXMA]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_INDEXMA);
> +        if(out[RRES_OUT_MIST]->hasoutput)
>                out[RRES_OUT_MIST]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_MIST);
>        if(out[RRES_OUT_EMIT]->hasoutput)
>                out[RRES_OUT_EMIT]->data= compbuf_multilayer_get(rd, rl, ima, iuser, SCE_PASS_EMIT);
> @@ -326,7 +329,7 @@
>                CompBuf *buf;
>                int buftype= CB_VEC3;
>
> -               if(ELEM3(passcode, SCE_PASS_Z, SCE_PASS_INDEXOB, SCE_PASS_MIST))
> +                if(ELEM4(passcode, SCE_PASS_Z, SCE_PASS_INDEXOB, SCE_PASS_MIST, SCE_PASS_INDEXMA))
>                        buftype= CB_VAL;
>                else if(passcode==SCE_PASS_VECTOR)
>                        buftype= CB_VEC4;
> @@ -373,6 +376,8 @@
>          out[RRES_OUT_INDIRECT]->data= compbuf_from_pass(rd, rl, rectx, recty, SCE_PASS_INDIRECT);
>    if(out[RRES_OUT_INDEXOB]->hasoutput)
>           out[RRES_OUT_INDEXOB]->data= compbuf_from_pass(rd, rl, rectx, recty, SCE_PASS_INDEXOB);
> +   if(out[RRES_OUT_INDEXMA]->hasoutput)
> +           out[RRES_OUT_INDEXMA]->data= compbuf_from_pass(rd, rl, rectx, recty, SCE_PASS_INDEXMA);
>    if(out[RRES_OUT_MIST]->hasoutput)
>
> @@ Diff output truncated at 10240 characters. @@
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>


More information about the Bf-committers mailing list