[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29825] branches/render25: Render Branch: render layer material overrides can now be restricted

Brecht Van Lommel brecht at blender.org
Wed Jun 30 16:57:20 CEST 2010


Revision: 29825
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29825
Author:   blendix
Date:     2010-06-30 16:57:20 +0200 (Wed, 30 Jun 2010)

Log Message:
-----------
Render Branch: render layer material overrides can now be restricted
to all objects that are not part of a specified group. Helpful for
creating masks.

Modified Paths:
--------------
    branches/render25/release/scripts/ui/properties_render.py
    branches/render25/source/blender/blenkernel/intern/group.c
    branches/render25/source/blender/blenloader/intern/readfile.c
    branches/render25/source/blender/makesdna/DNA_scene_types.h
    branches/render25/source/blender/makesrna/intern/rna_scene.c
    branches/render25/source/blender/render/extern/include/RE_pipeline.h
    branches/render25/source/blender/render/extern/include/RE_shader_ext.h
    branches/render25/source/blender/render/intern/source/path.c
    branches/render25/source/blender/render/intern/source/rayshade.c
    branches/render25/source/blender/render/intern/source/rendercore.c
    branches/render25/source/blender/render/intern/source/result.c
    branches/render25/source/blender/render/intern/source/shadeinput.c
    branches/render25/source/blender/render/intern/source/volumetric.c

Modified: branches/render25/release/scripts/ui/properties_render.py
===================================================================
--- branches/render25/release/scripts/ui/properties_render.py	2010-06-30 14:43:52 UTC (rev 29824)
+++ branches/render25/release/scripts/ui/properties_render.py	2010-06-30 14:57:20 UTC (rev 29825)
@@ -99,11 +99,16 @@
         col.label(text="")
         col.prop(rl, "light_override", text="Light")
         col.prop(rl, "material_override", text="Material")
+        row = col.row()
+        row.prop(rl, "except_override", text="Except")
+        row.active = rl.material_override != None
         if wide_ui:
             col = split.column()
         col.prop(rl, "visible_layers", text="Layer")
         col.label(text="Mask Layers:")
-        col.prop(rl, "zmask_layers", text="")
+        row = col.row()
+        row.prop(rl, "zmask_layers", text="")
+        row.active = rl.zmask
 
 
         layout.separator()

Modified: branches/render25/source/blender/blenkernel/intern/group.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/group.c	2010-06-30 14:43:52 UTC (rev 29824)
+++ branches/render25/source/blender/blenkernel/intern/group.c	2010-06-30 14:57:20 UTC (rev 29825)
@@ -98,6 +98,8 @@
 		for(srl= sce->r.layers.first; srl; srl= srl->next) {
 			if (srl->light_override==group)
 				srl->light_override= NULL;
+			if (srl->except_override==group)
+				srl->except_override= NULL;
 		}
 	}
 	

Modified: branches/render25/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/render25/source/blender/blenloader/intern/readfile.c	2010-06-30 14:43:52 UTC (rev 29824)
+++ branches/render25/source/blender/blenloader/intern/readfile.c	2010-06-30 14:57:20 UTC (rev 29825)
@@ -4272,6 +4272,7 @@
 			for(srl= sce->r.layers.first; srl; srl= srl->next) {
 				srl->mat_override= newlibadr_us(fd, sce->id.lib, srl->mat_override);
 				srl->light_override= newlibadr_us(fd, sce->id.lib, srl->light_override);
+				srl->except_override= newlibadr_us(fd, sce->id.lib, srl->except_override);
 			}
 			/*Game Settings: Dome Warp Text*/
 			sce->gm.dome.warptext= newlibadr(fd, sce->id.lib, sce->gm.dome.warptext);
@@ -11980,6 +11981,7 @@
 	for(srl= sce->r.layers.first; srl; srl= srl->next) {
 		expand_doit(fd, mainvar, srl->mat_override);
 		expand_doit(fd, mainvar, srl->light_override);
+		expand_doit(fd, mainvar, srl->except_override);
 	}
 
 	if(sce->r.dometext)

Modified: branches/render25/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- branches/render25/source/blender/makesdna/DNA_scene_types.h	2010-06-30 14:43:52 UTC (rev 29824)
+++ branches/render25/source/blender/makesdna/DNA_scene_types.h	2010-06-30 14:57:20 UTC (rev 29825)
@@ -152,6 +152,7 @@
 	
 	struct Material *mat_override;
 	struct Group *light_override;
+	struct Group *except_override;
 	
 	unsigned int lay;		/* scene->lay itself has priority over this */
 	unsigned int lay_zmask;	/* has to be after lay, this is for Z-masking */

Modified: branches/render25/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- branches/render25/source/blender/makesrna/intern/rna_scene.c	2010-06-30 14:43:52 UTC (rev 29824)
+++ branches/render25/source/blender/makesrna/intern/rna_scene.c	2010-06-30 14:57:20 UTC (rev 29825)
@@ -1239,6 +1239,14 @@
 	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, "except_override", PROP_POINTER, PROP_NONE);
+	RNA_def_property_pointer_sdna(prop, NULL, "except_override");
+	RNA_def_property_struct_type(prop, "Group");
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_ui_text(prop, "Except Override", "Group whose members will not get material overrides");
+	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);
+
 	/* layers */
 	prop= RNA_def_property(srna, "visible_layers", PROP_BOOLEAN, PROP_LAYER_MEMBER);
 	RNA_def_property_boolean_sdna(prop, NULL, "lay", 1);

Modified: branches/render25/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- branches/render25/source/blender/render/extern/include/RE_pipeline.h	2010-06-30 14:43:52 UTC (rev 29824)
+++ branches/render25/source/blender/render/extern/include/RE_pipeline.h	2010-06-30 14:57:20 UTC (rev 29825)
@@ -89,6 +89,7 @@
 	
 	struct Material *mat_override;
 	struct Group *light_override;
+	struct Group *except_override;
 	
 	float *rectf;		/* 4 float, standard rgba buffer (read not above!) */
 	float *acolrect;	/* 4 float, optional transparent buffer, needs storage for display updates */

Modified: branches/render25/source/blender/render/extern/include/RE_shader_ext.h
===================================================================
--- branches/render25/source/blender/render/extern/include/RE_shader_ext.h	2010-06-30 14:43:52 UTC (rev 29824)
+++ branches/render25/source/blender/render/extern/include/RE_shader_ext.h	2010-06-30 14:57:20 UTC (rev 29825)
@@ -144,6 +144,7 @@
 
 	struct Group *light_override;
 	struct Material *mat_override;
+	struct Group *except_override;
 } ShadeMaterial;
 
 typedef struct ShadeTexco {

Modified: branches/render25/source/blender/render/intern/source/path.c
===================================================================
--- branches/render25/source/blender/render/intern/source/path.c	2010-06-30 14:43:52 UTC (rev 29824)
+++ branches/render25/source/blender/render/intern/source/path.c	2010-06-30 14:57:20 UTC (rev 29825)
@@ -67,6 +67,7 @@
 	copy_v3_v3(shi->geometry.co, hit->co);
 
 	shi->material.mat_override= (rl)? rl->mat_override: NULL;
+	shi->material.except_override= (rl)? rl->except_override: NULL;
 	shi->material.mat= hit->vlr->mat;
 	if(hit->quad)
 		shade_input_set_triangle_i(re, shi, hit->obi, hit->vlr, 0, 2, 3);

Modified: branches/render25/source/blender/render/intern/source/rayshade.c
===================================================================
--- branches/render25/source/blender/render/intern/source/rayshade.c	2010-06-30 14:43:52 UTC (rev 29824)
+++ branches/render25/source/blender/render/intern/source/rayshade.c	2010-06-30 14:57:20 UTC (rev 29825)
@@ -780,6 +780,7 @@
 		//shi.do_preview= 0; // memset above, so dont need this
 		shi.material.light_override= origshi->material.light_override;
 		shi.material.mat_override= origshi->material.mat_override;
+		shi.material.except_override= origshi->material.except_override;
 		
 		memset(&shr, 0, sizeof(ShadeResult));
 		
@@ -1533,6 +1534,7 @@
 	shi->shading.thread= oldshi->shading.thread;
 	shi->shading.lay= oldshi->shading.lay;
 	shi->material.mat_override= oldshi->material.mat_override;
+	shi->material.except_override= oldshi->material.except_override;
 	shi->shading.depth= depth;
 	shi->shading.nodes= oldshi->shading.nodes;
 

Modified: branches/render25/source/blender/render/intern/source/rendercore.c
===================================================================
--- branches/render25/source/blender/render/intern/source/rendercore.c	2010-06-30 14:43:52 UTC (rev 29824)
+++ branches/render25/source/blender/render/intern/source/rendercore.c	2010-06-30 14:57:20 UTC (rev 29825)
@@ -1130,6 +1130,7 @@
 		ssamp.shi[0].shading.combinedflag &= ~(SCE_PASS_SPEC);
 		ssamp.shi[0].material.mat_override= NULL;
 		ssamp.shi[0].material.light_override= NULL;
+		ssamp.shi[0].material.except_override= NULL;
 
 		/* create the pixelstrs to be used later */
 		zbuffer_sss(re, pa, lay, &handle, addps_sss, &psmlist, mat);

Modified: branches/render25/source/blender/render/intern/source/result.c
===================================================================
--- branches/render25/source/blender/render/intern/source/result.c	2010-06-30 14:43:52 UTC (rev 29824)
+++ branches/render25/source/blender/render/intern/source/result.c	2010-06-30 14:57:20 UTC (rev 29825)
@@ -905,6 +905,7 @@
 		rl->pass_xor= srl->pass_xor;
 		rl->light_override= srl->light_override;
 		rl->mat_override= srl->mat_override;
+		rl->except_override= srl->except_override;
 		rl->rectx= rectx;
 		rl->recty= recty;
 		

Modified: branches/render25/source/blender/render/intern/source/shadeinput.c
===================================================================
--- branches/render25/source/blender/render/intern/source/shadeinput.c	2010-06-30 14:43:52 UTC (rev 29824)
+++ branches/render25/source/blender/render/intern/source/shadeinput.c	2010-06-30 14:57:20 UTC (rev 29825)
@@ -41,6 +41,7 @@
 #include "DNA_node_types.h"
 
 #include "BKE_colortools.h"
+#include "BKE_group.h"
 #include "BKE_node.h"
 #include "BKE_utildefines.h"
 
@@ -116,6 +117,18 @@
 	}
 }
 
+static int shade_input_override_material(ShadeInput *shi)
+{
+	ShadeMaterial *mat= &shi->material;
+	ShadePrimitive *prim= &shi->primitive;
+
+	if(mat->mat_override)
+		if(!mat->except_override || !object_in_group(prim->obr->ob, mat->except_override))
+			return 1;
+	
+	return 0;
+}
+
 /* copy data from face to ShadeInput, general case */
 /* indices 0 1 2 3 only */
 void shade_input_set_triangle_i(Render *re, ShadeInput *shi, ObjectInstanceRen *obi, VlakRen *vlr, short i1, short i2, short i3)
@@ -138,7 +151,10 @@
 	prim->i3= i3;
 	
 	/* note, mat->mat is set in node shaders */
-	mat->mat= (mat->mat_override)? mat->mat_override: vlr->mat;
+	if(shade_input_override_material(shi))
+		mat->mat= mat->mat_override;
+	else
+		mat->mat= vlr->mat;
 	mat->mode= mat->mat->mode_l;		/* or-ed result for all nodes */
 
 	geom->osatex= (mat->mat->texco & TEXCO_OSA);
@@ -168,8 +184,11 @@
 	ShadeMaterial *mat= &shi->material;
 
 	/* note, mat->mat is set in node shaders */
-	mat->mat= mat->mat_override? mat->mat_override: strand->buffer->ma;
-	
+	if(shade_input_override_material(shi))
+		mat->mat= mat->mat_override;
+	else
+		mat->mat= strand->buffer->ma;
+
 	geom->osatex= (mat->mat->texco & TEXCO_OSA);
 	mat->mode= mat->mat->mode_l;		/* or-ed result for all nodes */
 
@@ -1161,6 +1180,7 @@
 	shi->shading.combinedflag= ~rl->pass_xor;
 	shi->material.mat_override= rl->mat_override;
 	shi->material.light_override= rl->light_override;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list