[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