[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26246] trunk/blender: Added simplification back for quicker preview renders with less subdivision

Brecht Van Lommel brecht at blender.org
Mon Jan 25 12:39:57 CET 2010


Revision: 26246
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26246
Author:   blendix
Date:     2010-01-25 12:39:56 +0100 (Mon, 25 Jan 2010)

Log Message:
-----------
Added simplification back for quicker preview renders with less subdivision
levels, child particles, and shadow/SSS/AO quality.. Now also works on what
is displayed in the 3d view instead of only rendering, see panel in the scene
properties.

Most file changes were to make scene available in the isDisabled modifier
callback function.

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/properties_scene.py
    trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
    trunk/blender/source/blender/blenkernel/BKE_modifier.h
    trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
    trunk/blender/source/blender/blenkernel/intern/modifier.c
    trunk/blender/source/blender/blenkernel/intern/multires.c
    trunk/blender/source/blender/blenkernel/intern/particle_system.c
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/blenkernel/intern/subsurf_ccg.c
    trunk/blender/source/blender/editors/include/UI_interface.h
    trunk/blender/source/blender/editors/interface/interface_templates.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt_intern.h
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/makesrna/intern/rna_modifier.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/makesrna/intern/rna_ui_api.c

Modified: trunk/blender/release/scripts/ui/properties_scene.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_scene.py	2010-01-25 11:15:04 UTC (rev 26245)
+++ trunk/blender/release/scripts/ui/properties_scene.py	2010-01-25 11:39:56 UTC (rev 26246)
@@ -180,11 +180,40 @@
         else:
             layout.column().prop(scene, "gravity", text="")
 
+class SCENE_PT_simplify(SceneButtonsPanel):
+    bl_label = "Simplify"
+    COMPAT_ENGINES = {'BLENDER_RENDER'}
+
+    def draw_header(self, context):
+        scene = context.scene
+        rd = scene.render_data
+        self.layout.prop(rd, "use_simplify", text="")
+    
+    def draw(self, context):
+        layout = self.layout
+        scene = context.scene
+        rd = scene.render_data
+        wide_ui = context.region.width > narrowui
+
+        layout.active = rd.use_simplify
+
+        split = layout.split()
+
+        col = split.column()
+        col.prop(rd, "simplify_subdivision", text="Subdivision")
+        col.prop(rd, "simplify_child_particles", text="Child Particles")
+
+        if wide_ui:
+            col = split.column()
+        col.prop(rd, "simplify_shadow_samples", text="Shadow Samples")
+        col.prop(rd, "simplify_ao_sss", text="AO and SSS")
+
 bpy.types.register(SCENE_PT_scene)
 bpy.types.register(SCENE_PT_unit)
 bpy.types.register(SCENE_PT_keying_sets)
 bpy.types.register(SCENE_PT_keying_set_paths)
 bpy.types.register(SCENE_PT_physics)
+bpy.types.register(SCENE_PT_simplify)
 
 bpy.types.register(SCENE_PT_custom_props)
 

Modified: trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2010-01-25 11:15:04 UTC (rev 26245)
+++ trunk/blender/source/blender/blenkernel/BKE_DerivedMesh.h	2010-01-25 11:39:56 UTC (rev 26246)
@@ -502,8 +502,8 @@
 
 /* returns an array of deform matrices for crazyspace correction, and the
    number of modifiers left */
-int editmesh_get_first_deform_matrices(struct Object *, struct EditMesh *em, float (**deformmats)[3][3],
-                                       float (**deformcos)[3]);
+int editmesh_get_first_deform_matrices(struct Scene *, struct Object *, struct EditMesh *em,
+                                       float (**deformmats)[3][3], float (**deformcos)[3]);
 
 void weight_to_rgb(float input, float *fr, float *fg, float *fb);
 

Modified: trunk/blender/source/blender/blenkernel/BKE_modifier.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_modifier.h	2010-01-25 11:15:04 UTC (rev 26245)
+++ trunk/blender/source/blender/blenkernel/BKE_modifier.h	2010-01-25 11:39:56 UTC (rev 26246)
@@ -279,10 +279,10 @@
 void          modifier_copyData(struct ModifierData *md, struct ModifierData *target);
 int           modifier_dependsOnTime(struct ModifierData *md);
 int           modifier_supportsMapping(struct ModifierData *md);
-int           modifier_couldBeCage(struct ModifierData *md);
+int           modifier_couldBeCage(struct Scene *scene, struct ModifierData *md);
 int           modifier_isCorrectableDeformed(struct ModifierData *md);
 int			  modifier_sameTopology(ModifierData *md);
-int           modifier_isEnabled(struct ModifierData *md, int required_mode);
+int           modifier_isEnabled(struct Scene *scene, struct ModifierData *md, int required_mode);
 void          modifier_setError(struct ModifierData *md, char *format, ...);
 
 void          modifiers_foreachObjectLink(struct Object *ob,
@@ -293,7 +293,7 @@
                                       void *userData);
 struct ModifierData  *modifiers_findByType(struct Object *ob, ModifierType type);
 void          modifiers_clearErrors(struct Object *ob);
-int           modifiers_getCageIndex(struct Object *ob,
+int           modifiers_getCageIndex(struct Scene *scene, struct Object *ob,
                                      int *lastPossibleCageIndex_r, int virtual_);
 
 int           modifiers_isSoftbodyEnabled(struct Object *ob);
@@ -313,7 +313,8 @@
  * evaluation, assuming the data indicated by dataMask is required at the
  * end of the stack.
  */
-struct LinkNode *modifiers_calcDataMasks(struct Object *ob,
+struct LinkNode *modifiers_calcDataMasks(struct Scene *scene, 
+                                         struct Object *ob,
                                          struct ModifierData *md,
                                          CustomDataMask dataMask,
                                          int required_mode);

Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2010-01-25 11:15:04 UTC (rev 26245)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c	2010-01-25 11:39:56 UTC (rev 26246)
@@ -1643,7 +1643,7 @@
 	/* we always want to keep original indices */
 	dataMask |= CD_MASK_ORIGINDEX;
 
-	datamasks = modifiers_calcDataMasks(ob, md, dataMask, required_mode);
+	datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, required_mode);
 	curr = datamasks;
 
 	if(deform_r) *deform_r = NULL;
@@ -1659,7 +1659,7 @@
 
 			md->scene= scene;
 			
-			if(!modifier_isEnabled(md, required_mode)) continue;
+			if(!modifier_isEnabled(scene, md, required_mode)) continue;
 			if(useDeform < 0 && mti->dependsOnTime && mti->dependsOnTime(md)) continue;
 
 			if(mti->type == eModifierTypeType_OnlyDeform) {
@@ -1708,7 +1708,7 @@
 
 		md->scene= scene;
 		
-		if(!modifier_isEnabled(md, required_mode)) continue;
+		if(!modifier_isEnabled(scene, md, required_mode)) continue;
 		if(mti->type == eModifierTypeType_OnlyDeform && !useDeform) continue;
 		if((mti->flags & eModifierTypeFlag_RequiresOriginalData) && dm) {
 			modifier_setError(md, "Modifier requires original data, bad stack position.");
@@ -1884,12 +1884,12 @@
 	return cos;
 }
 
-static int editmesh_modifier_is_enabled(ModifierData *md, DerivedMesh *dm)
+static int editmesh_modifier_is_enabled(Scene *scene, ModifierData *md, DerivedMesh *dm)
 {
 	ModifierTypeInfo *mti = modifierType_getInfo(md->type);
 	int required_mode = eModifierMode_Realtime | eModifierMode_Editmode;
 
-	if(!modifier_isEnabled(md, required_mode)) return 0;
+	if(!modifier_isEnabled(scene, md, required_mode)) return 0;
 	if((mti->flags & eModifierTypeFlag_RequiresOriginalData) && dm) {
 		modifier_setError(md, "Modifier requires original data, bad stack position.");
 		return 0;
@@ -1906,7 +1906,7 @@
 	float (*deformedVerts)[3] = NULL;
 	CustomDataMask mask;
 	DerivedMesh *dm, *orcodm = NULL;
-	int i, numVerts = 0, cageIndex = modifiers_getCageIndex(ob, NULL, 1);
+	int i, numVerts = 0, cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1);
 	LinkNode *datamasks, *curr;
 	int required_mode = eModifierMode_Realtime | eModifierMode_Editmode;
 
@@ -1922,7 +1922,7 @@
 	/* we always want to keep original indices */
 	dataMask |= CD_MASK_ORIGINDEX;
 
-	datamasks = modifiers_calcDataMasks(ob, md, dataMask, required_mode);
+	datamasks = modifiers_calcDataMasks(scene, ob, md, dataMask, required_mode);
 
 	curr = datamasks;
 	for(i = 0; md; i++, md = md->next, curr = curr->next) {
@@ -1930,7 +1930,7 @@
 
 		md->scene= scene;
 		
-		if(!editmesh_modifier_is_enabled(md, dm))
+		if(!editmesh_modifier_is_enabled(scene, md, dm))
 			continue;
 
 		/* add an orco layer if needed by this modifier */
@@ -2348,12 +2348,12 @@
 
 /* ********* crazyspace *************** */
 
-int editmesh_get_first_deform_matrices(Object *ob, EditMesh *em, float (**deformmats)[3][3], float (**deformcos)[3])
+int editmesh_get_first_deform_matrices(Scene *scene, Object *ob, EditMesh *em, float (**deformmats)[3][3], float (**deformcos)[3])
 {
 	ModifierData *md;
 	DerivedMesh *dm;
 	int i, a, numleft = 0, numVerts = 0;
-	int cageIndex = modifiers_getCageIndex(ob, NULL, 1);
+	int cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1);
 	float (*defmats)[3][3] = NULL, (*deformedVerts)[3] = NULL;
 
 	modifiers_clearErrors(ob);
@@ -2367,7 +2367,7 @@
 	for(i = 0; md && i <= cageIndex; i++, md = md->next) {
 		ModifierTypeInfo *mti = modifierType_getInfo(md->type);
 
-		if(!editmesh_modifier_is_enabled(md, dm))
+		if(!editmesh_modifier_is_enabled(scene, md, dm))
 			continue;
 
 		if(mti->type==eModifierTypeType_OnlyDeform && mti->deformMatricesEM) {
@@ -2388,7 +2388,7 @@
 	}
 
 	for(; md && i <= cageIndex; md = md->next, i++)
-		if(editmesh_modifier_is_enabled(md, dm) && modifier_isCorrectableDeformed(md))
+		if(editmesh_modifier_is_enabled(scene, md, dm) && modifier_isCorrectableDeformed(md))
 			numleft++;
 
 	if(dm)

Modified: trunk/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/modifier.c	2010-01-25 11:15:04 UTC (rev 26245)
+++ trunk/blender/source/blender/blenkernel/intern/modifier.c	2010-01-25 11:39:56 UTC (rev 26246)
@@ -101,6 +101,7 @@
 #include "BKE_object.h"
 #include "BKE_particle.h"
 #include "BKE_pointcache.h"
+#include "BKE_scene.h"
 #include "BKE_smoke.h"
 #include "BKE_softbody.h"
 #include "BKE_subsurf.h"
@@ -427,8 +428,9 @@
 static int subsurfModifier_isDisabled(ModifierData *md, int useRenderParams)
 {
 	SubsurfModifierData *smd = (SubsurfModifierData*) md;
+	int levels= (useRenderParams)? smd->renderLevels: smd->levels;
 
-	return (useRenderParams)? (smd->renderLevels == 0): (smd->levels == 0);
+	return get_render_subsurf_level(&md->scene->r, levels) == 0;
 }
 
 static DerivedMesh *subsurfModifier_applyModifier(
@@ -9181,10 +9183,12 @@
 		mti->copyData(md, target);
 }
 
-int modifier_couldBeCage(ModifierData *md)
+int modifier_couldBeCage(Scene *scene, ModifierData *md)
 {
 	ModifierTypeInfo *mti = modifierType_getInfo(md->type);
 
+	md->scene= scene;
+
 	return (	(md->mode & eModifierMode_Realtime) &&
 			(md->mode & eModifierMode_Editmode) &&
 			(!mti->isDisabled || !mti->isDisabled(md, 0)) &&
@@ -9219,11 +9223,13 @@
  * also used in transform_conversion.c, to detect CrazySpace [tm] (2nd arg
  * then is NULL)
  */
-int modifiers_getCageIndex(Object *ob, int *lastPossibleCageIndex_r, int virtual_)
+int modifiers_getCageIndex(Scene *scene, Object *ob, int *lastPossibleCageIndex_r, int virtual_)
 {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list