[Bf-blender-cvs] [6d128d8] temp-cycles-microdisplacement: Move Cycles subdivision options to subsurf modifier

Mai Lavelle noreply at git.blender.org
Mon Jun 27 11:31:51 CEST 2016


Commit: 6d128d81af93a133cb89d51e9cadb5908a5487b1
Author: Mai Lavelle
Date:   Sun Jun 26 18:31:11 2016 -0400
Branches: temp-cycles-microdisplacement
https://developer.blender.org/rB6d128d81af93a133cb89d51e9cadb5908a5487b1

Move Cycles subdivision options to subsurf modifier

Subdivision options can now be set per object rather than per mesh. The
subsurface modifier must be the last in the stack or Cycles will ignore
the option.

===================================================================

M	intern/cycles/blender/addon/properties.py
M	intern/cycles/blender/addon/ui.py
M	intern/cycles/blender/blender_mesh.cpp
M	intern/cycles/blender/blender_util.h
M	release/scripts/startup/bl_ui/properties_data_modifier.py

===================================================================

diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index 1408627..7330f61 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -46,12 +46,6 @@ enum_displacement_methods = (
     ('BOTH', "Both", "Combination of displacement and bump mapping"),
     )
 
-enum_subdivision_types = (
-    ('NONE', "None", "No subdivision"),
-    ('LINEAR', "Linear", "Use linear subdivision"),
-    ('CATMULL_CLARK', "Catmull–Clark", "Use Catmull-Clark subdivision"),
-    )
-
 enum_bvh_types = (
     ('DYNAMIC_BVH', "Dynamic BVH", "Objects can be individually updated, at the cost of slower render time"),
     ('STATIC_BVH', "Static BVH", "Any object modification requires a complete BVH rebuild, but renders faster"),
@@ -959,18 +953,6 @@ class CyclesMeshSettings(bpy.types.PropertyGroup):
                 items=enum_displacement_methods,
                 default='BUMP',
                 )
-        cls.subdivision_type = EnumProperty(
-                name="Subdivision Type",
-                description="Type of subdivision to use",
-                items=enum_subdivision_types,
-                default='NONE',
-                )
-        cls.dicing_rate = FloatProperty(
-                name="Dicing Rate",
-                description="Multiplier for scene dicing rate",
-                min=0.1, max=1000.0,
-                default=1.0,
-                )
 
     @classmethod
     def unregister(cls):
@@ -979,11 +961,9 @@ class CyclesMeshSettings(bpy.types.PropertyGroup):
         del bpy.types.MetaBall.cycles
 
 
-class CyclesObjectBlurSettings(bpy.types.PropertyGroup):
-
+class CyclesObjectSettings(bpy.types.PropertyGroup):
     @classmethod
     def register(cls):
-
         bpy.types.Object.cycles = PointerProperty(
                 name="Cycles Object Settings",
                 description="Cycles object settings",
@@ -1015,6 +995,20 @@ class CyclesObjectBlurSettings(bpy.types.PropertyGroup):
                 default=False,
                 )
 
+        cls.use_cycles_subdivision = BoolProperty(
+                name="Use Cycles Subdivision",
+                description="Use Cycles render time subdivision",
+                default=False,
+                )
+
+        cls.dicing_rate = FloatProperty(
+                name="Dicing Rate",
+                description="Multiplier for scene dicing rate",
+                min=0.1, max=1000.0,
+                default=1.0,
+                )
+
+
     @classmethod
     def unregister(cls):
         del bpy.types.Object.cycles
@@ -1131,6 +1125,7 @@ def register():
     bpy.utils.register_class(CyclesWorldSettings)
     bpy.utils.register_class(CyclesVisibilitySettings)
     bpy.utils.register_class(CyclesMeshSettings)
+    bpy.utils.register_class(CyclesObjectSettings)
     bpy.utils.register_class(CyclesCurveRenderSettings)
     bpy.utils.register_class(CyclesCurveSettings)
 
@@ -1142,6 +1137,7 @@ def unregister():
     bpy.utils.unregister_class(CyclesLampSettings)
     bpy.utils.unregister_class(CyclesWorldSettings)
     bpy.utils.unregister_class(CyclesMeshSettings)
+    bpy.utils.unregister_class(CyclesObjectSettings)
     bpy.utils.unregister_class(CyclesVisibilitySettings)
     bpy.utils.unregister_class(CyclesCurveRenderSettings)
     bpy.utils.unregister_class(CyclesCurveSettings)
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index 0961c34..62b3433 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -706,14 +706,6 @@ class Cycles_PT_mesh_displacement(CyclesButtonsPanel, Panel):
         sub.label(text="Displacement:")
         sub.prop(cdata, "displacement_method", text="")
 
-        col = split.column()
-        sub = col.column(align=True)
-        sub.label(text="Subdivision:")
-        sub.prop(cdata, "subdivision_type", text="")
-
-        if cdata.subdivision_type != 'NONE':
-            sub.prop(cdata, "dicing_rate")
-
 class CyclesObject_PT_motion_blur(CyclesButtonsPanel, Panel):
     bl_label = "Motion Blur"
     bl_context = "object"
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index c5f917d..0631e4e 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -769,7 +769,6 @@ static void create_subd_mesh(Scene *scene,
                              float dicing_rate,
                              int max_subdivisions)
 {
-	mesh->subdivision_type = (Mesh::SubdivisionType)RNA_enum_get(cmesh, "subdivision_type");
 	create_mesh(scene, mesh, b_mesh, used_shaders, true);
 
 	/* export creases */
@@ -797,7 +796,10 @@ static void create_subd_mesh(Scene *scene,
 
 	/* set subd params */
 	SubdParams sdparams(mesh, 0, true, false);
-	sdparams.dicing_rate = max(0.1f, RNA_float_get(cmesh, "dicing_rate") * dicing_rate);
+
+	PointerRNA cobj = RNA_pointer_get(&b_ob.ptr, "cycles");
+
+	sdparams.dicing_rate = max(0.1f, RNA_float_get(&cobj, "dicing_rate") * dicing_rate);
 	sdparams.max_level = max_subdivisions;
 
 	scene->camera->update();
@@ -911,12 +913,31 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
 			b_ob.update_from_editmode();
 
 		bool need_undeformed = mesh->need_attribute(scene, ATTR_STD_GENERATED);
-		bool subdivision = experimental && cmesh.data && RNA_enum_get(&cmesh, "subdivision_type");
-		BL::Mesh b_mesh = object_to_mesh(b_data, b_ob, b_scene, true, !preview, need_undeformed, subdivision);
+
+		mesh->subdivision_type = Mesh::SUBDIVISION_NONE;
+
+		PointerRNA cobj = RNA_pointer_get(&b_ob.ptr, "cycles");
+
+		if(cobj.data && b_ob.modifiers.length() > 0 && experimental) {
+			BL::Modifier mod = b_ob.modifiers[b_ob.modifiers.length()-1];
+
+			if(mod.type() == BL::Modifier::type_SUBSURF && RNA_int_get(&cobj, "use_cycles_subdivision")) {
+				BL::SubsurfModifier subsurf(mod);
+
+				if(subsurf.subdivision_type() == BL::SubsurfModifier::subdivision_type_CATMULL_CLARK) {
+					mesh->subdivision_type = Mesh::SUBDIVISION_CATMULL_CLARK;
+				}
+				else {
+					mesh->subdivision_type = Mesh::SUBDIVISION_LINEAR;
+				}
+			}
+		}
+
+		BL::Mesh b_mesh = object_to_mesh(b_data, b_ob, b_scene, true, !preview, need_undeformed, mesh->subdivision_type);
 
 		if(b_mesh) {
 			if(render_layer.use_surfaces && !hide_tris) {
-				if(subdivision)
+				if(mesh->subdivision_type != Mesh::SUBDIVISION_NONE)
 					create_subd_mesh(scene, mesh, b_ob, b_mesh, &cmesh, used_shaders,
 					                 dicing_rate, max_subdivisions);
 				else
@@ -925,7 +946,7 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
 				create_mesh_volume_attributes(scene, b_ob, mesh, b_scene.frame_current());
 			}
 
-			if(render_layer.use_hair && !subdivision)
+			if(render_layer.use_hair && mesh->subdivision_type == Mesh::SUBDIVISION_NONE)
 				sync_curves(mesh, b_mesh, b_ob, false);
 
 			if(can_free_caches) {
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index a5eaf50..354c170 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -48,7 +48,29 @@ static inline BL::Mesh object_to_mesh(BL::BlendData& data,
                                       bool calc_undeformed,
                                       bool subdivision)
 {
+	bool subsurf_mod_show_render;
+	bool subsurf_mod_show_viewport;
+
+	if(subdivision) {
+		BL::Modifier subsurf_mod = object.modifiers[object.modifiers.length()-1];
+
+		subsurf_mod_show_render = subsurf_mod.show_render();
+		subsurf_mod_show_viewport = subsurf_mod.show_render();
+
+		subsurf_mod.show_render(false);
+		subsurf_mod.show_viewport(false);
+
+	}
+
 	BL::Mesh me = data.meshes.new_from_object(scene, object, apply_modifiers, (render)? 2: 1, false, calc_undeformed);
+
+	if(subdivision) {
+		BL::Modifier subsurf_mod = object.modifiers[object.modifiers.length()-1];
+
+		subsurf_mod.show_render(subsurf_mod_show_render);
+		subsurf_mod.show_viewport(subsurf_mod_show_viewport);
+	}
+
 	if((bool)me) {
 		if(me.use_auto_smooth()) {
 			me.calc_normals_split();
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 7863c07..2402d9a 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -895,6 +895,12 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
         if hasattr(md, "use_opensubdiv"):
             col.prop(md, "use_opensubdiv")
 
+        engine = bpy.context.scene.render.engine
+        if engine == "CYCLES" and bpy.context.scene.cycles.feature_set == "EXPERIMENTAL":
+            col.prop(ob.cycles, "use_cycles_subdivision", text="Cycles Subdivision")
+            if ob.cycles.use_cycles_subdivision:
+                col.prop(ob.cycles, "dicing_rate")
+
     def SURFACE(self, layout, ob, md):
         layout.label(text="Settings are inside the Physics tab")




More information about the Bf-blender-cvs mailing list