Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMai Lavelle <mai.lavelle@gmail.com>2016-04-17 21:15:50 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2016-04-17 21:38:50 +0300
commit9f39619ddadef25909b0cd9d9b9934e311d23674 (patch)
tree2203cab8b0b37a60e64dcba09061e08296e2d8cd /intern/cycles
parentfacc127e727ed34d385b069edcf83a443a1c75c0 (diff)
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
Diffstat (limited to 'intern/cycles')
-rw-r--r--intern/cycles/blender/addon/properties.py15
-rw-r--r--intern/cycles/blender/addon/ui.py34
-rw-r--r--intern/cycles/blender/blender_mesh.cpp7
-rw-r--r--intern/cycles/blender/blender_sync.cpp29
-rw-r--r--intern/cycles/blender/blender_sync.h2
5 files changed, 72 insertions, 15 deletions
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index 68f5f4b12f2..d65718f6e19 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 c02e2497d93..afad3b83983 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 a590b5f5532..ba0ba7892e8 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 2239f992404..803a997ca6e 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 a007099b178..4918b7871f8 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),