[Bf-blender-cvs] [9f39619] master: Cycles microdisplacement: scene level render and preview dicing rates

Mai Lavelle noreply at git.blender.org
Sun Apr 17 20:39:18 CEST 2016


Commit: 9f39619ddadef25909b0cd9d9b9934e311d23674
Author: Mai Lavelle
Date:   Sun Apr 17 20:15:50 2016 +0200
Branches: master
https://developer.blender.org/rB9f39619ddadef25909b0cd9d9b9934e311d23674

Cycles microdisplacement: scene level render and preview dicing rates

This makes it easier to control overall dicing rate without having to tweak
every object. The preview rate makes viewport editing more interactive. The
default preview rate of 8 is roughly 64 times faster for some operations.

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D1919

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

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_sync.cpp
M	intern/cycles/blender/blender_sync.h

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

diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index 68f5f4b..d65718f 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -370,6 +370,19 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
                 min=2, max=65536
                 )
 
+        cls.dicing_rate = FloatProperty(
+                name="Dicing Rate",
+                description="Size of a micropolygon in pixels",
+                min=0.1, max=1000.0,
+                default=1.0,
+                )
+        cls.preview_dicing_rate = FloatProperty(
+                name="Preview Dicing Rate",
+                description="Size of a micropolygon in pixels during preview render",
+                min=0.1, max=1000.0,
+                default=8.0,
+                )
+
         cls.film_exposure = FloatProperty(
                 name="Exposure",
                 description="Image brightness scale",
@@ -945,7 +958,7 @@ class CyclesMeshSettings(bpy.types.PropertyGroup):
                 )
         cls.dicing_rate = FloatProperty(
                 name="Dicing Rate",
-                description="Size of a micropolygon in pixels",
+                description="Multiplier for scene dicing rate",
                 min=0.1, max=1000.0,
                 default=1.0,
                 )
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index c02e249..afad3b8 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -209,8 +209,8 @@ class CyclesRender_PT_sampling(CyclesButtonsPanel, Panel):
         draw_samples_info(layout, context)
 
 
-class CyclesRender_PT_volume_sampling(CyclesButtonsPanel, Panel):
-    bl_label = "Volume Sampling"
+class CyclesRender_PT_geometery(CyclesButtonsPanel, Panel):
+    bl_label = "Geometry"
     bl_options = {'DEFAULT_CLOSED'}
 
     def draw(self, context):
@@ -219,11 +219,28 @@ class CyclesRender_PT_volume_sampling(CyclesButtonsPanel, Panel):
         scene = context.scene
         cscene = scene.cycles
 
-        row = layout.row()
-        row.label("Heterogeneous:")
-        row = layout.row()
-        row.prop(cscene, "volume_step_size")
-        row.prop(cscene, "volume_max_steps")
+        if cscene.feature_set == 'EXPERIMENTAL':
+            split = layout.split()
+
+            col = split.column()
+
+            sub = col.column(align=True)
+            sub.label("Volume Sampling:")
+            sub.prop(cscene, "volume_step_size")
+            sub.prop(cscene, "volume_max_steps")
+
+            col = split.column()
+
+            sub = col.column(align=True)
+            sub.label("Subdivision Rate:")
+            sub.prop(cscene, "dicing_rate", text="Render")
+            sub.prop(cscene, "preview_dicing_rate", text="Preview")
+        else:
+            row = layout.row()
+            row.label("Volume Sampling:")
+            row = layout.row()
+            row.prop(cscene, "volume_step_size")
+            row.prop(cscene, "volume_max_steps")
 
 
 class CyclesRender_PT_light_paths(CyclesButtonsPanel, Panel):
@@ -694,8 +711,7 @@ class Cycles_PT_mesh_displacement(CyclesButtonsPanel, Panel):
         sub.prop(cdata, "subdivision_type", text="")
 
         if cdata.subdivision_type != 'NONE':
-            sub.label(text="Subdivision Rate:")
-            sub.prop(cdata, "dicing_rate", text="Render")
+            sub.prop(cdata, "dicing_rate")
 
 class CyclesObject_PT_motion_blur(CyclesButtonsPanel, Panel):
     bl_label = "Motion Blur"
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index a590b5f..ba0ba78 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -660,13 +660,14 @@ static void create_subd_mesh(Scene *scene,
                              BL::Object b_ob,
                              BL::Mesh& b_mesh,
                              PointerRNA *cmesh,
-                             const vector<uint>& used_shaders)
+                             const vector<uint>& used_shaders,
+                             float dicing_rate)
 {
 	Mesh basemesh;
 	create_mesh(scene, &basemesh, b_mesh, used_shaders);
 
 	SubdParams sdparams(mesh, used_shaders[0], true, false);
-	sdparams.dicing_rate = RNA_float_get(cmesh, "dicing_rate");
+	sdparams.dicing_rate = max(0.1f, RNA_float_get(cmesh, "dicing_rate") * dicing_rate);
 
 	scene->camera->update();
 	sdparams.camera = scene->camera;
@@ -783,7 +784,7 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
 		if(b_mesh) {
 			if(render_layer.use_surfaces && !hide_tris) {
 				if(cmesh.data && experimental && RNA_enum_get(&cmesh, "subdivision_type"))
-					create_subd_mesh(scene, mesh, b_ob, b_mesh, &cmesh, used_shaders);
+					create_subd_mesh(scene, mesh, b_ob, b_mesh, &cmesh, used_shaders, dicing_rate);
 				else
 					create_mesh(scene, mesh, b_mesh, used_shaders);
 
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index 2239f99..803a997 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -63,8 +63,11 @@ BlenderSync::BlenderSync(BL::RenderEngine& b_engine,
   preview(preview),
   experimental(false),
   is_cpu(is_cpu),
+  dicing_rate(1.0f),
   progress(progress)
 {
+	PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
+	dicing_rate = preview ? RNA_float_get(&cscene, "preview_dicing_rate") : RNA_float_get(&cscene, "dicing_rate");
 }
 
 BlenderSync::~BlenderSync()
@@ -124,11 +127,33 @@ bool BlenderSync::sync_recalc()
 		}
 	}
 
+	bool dicing_rate_changed = false;
+
+	if(experimental) {
+		PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
+		float updated_dicing_rate = preview ? RNA_float_get(&cscene, "preview_dicing_rate")
+		                                    : RNA_float_get(&cscene, "dicing_rate");
+
+		if(dicing_rate != updated_dicing_rate) {
+			dicing_rate = updated_dicing_rate;
+			dicing_rate_changed = true;
+		}
+	}
+
 	BL::BlendData::meshes_iterator b_mesh;
 
-	for(b_data.meshes.begin(b_mesh); b_mesh != b_data.meshes.end(); ++b_mesh)
-		if(b_mesh->is_updated())
+	for(b_data.meshes.begin(b_mesh); b_mesh != b_data.meshes.end(); ++b_mesh) {
+		if(b_mesh->is_updated()) {
 			mesh_map.set_recalc(*b_mesh);
+		}
+		else if(dicing_rate_changed) {
+			PointerRNA cmesh = RNA_pointer_get(&b_mesh->ptr, "cycles");
+
+			if(RNA_enum_get(&cmesh, "subdivision_type"))
+				mesh_map.set_recalc(*b_mesh);
+		}
+	}
+
 
 	BL::BlendData::worlds_iterator b_world;
 
diff --git a/intern/cycles/blender/blender_sync.h b/intern/cycles/blender/blender_sync.h
index a007099..4918b78 100644
--- a/intern/cycles/blender/blender_sync.h
+++ b/intern/cycles/blender/blender_sync.h
@@ -172,6 +172,8 @@ private:
 	bool experimental;
 	bool is_cpu;
 
+	float dicing_rate;
+
 	struct RenderLayerInfo {
 		RenderLayerInfo()
 		: scene_layer(0), layer(0),




More information about the Bf-blender-cvs mailing list