diff options
author | Mai Lavelle <mai.lavelle@gmail.com> | 2016-04-17 21:15:50 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2016-04-17 21:38:50 +0300 |
commit | 9f39619ddadef25909b0cd9d9b9934e311d23674 (patch) | |
tree | 2203cab8b0b37a60e64dcba09061e08296e2d8cd /intern/cycles | |
parent | facc127e727ed34d385b069edcf83a443a1c75c0 (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.py | 15 | ||||
-rw-r--r-- | intern/cycles/blender/addon/ui.py | 34 | ||||
-rw-r--r-- | intern/cycles/blender/blender_mesh.cpp | 7 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.cpp | 29 | ||||
-rw-r--r-- | intern/cycles/blender/blender_sync.h | 2 |
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), |