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:
authorPascal Schoen <pascal_schoen@gmx.net>2016-09-27 09:59:32 +0300
committerPascal Schoen <pascal_schoen@gmx.net>2016-09-27 09:59:32 +0300
commite1fa8623915407cea942a07fd0a106b04e113c09 (patch)
tree18718342eb340baa5aaa73e367db4288293fe5c0 /intern/cycles/blender
parentd0530a8af0e076c0aca4c9a61b0a64cada45ac4d (diff)
parent7f76f6f2490a4375dc4c5e0f61de7daa7a75a9c2 (diff)
Merge branch 'master' into cycles_disney_brdf
Diffstat (limited to 'intern/cycles/blender')
-rw-r--r--intern/cycles/blender/addon/properties.py6
-rw-r--r--intern/cycles/blender/blender_mesh.cpp22
-rw-r--r--intern/cycles/blender/blender_object.cpp7
-rw-r--r--intern/cycles/blender/blender_session.cpp3
-rw-r--r--intern/cycles/blender/blender_sync.cpp53
-rw-r--r--intern/cycles/blender/blender_util.h28
6 files changed, 60 insertions, 59 deletions
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index 82a18b3f6a9..977d7f75bb7 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -367,14 +367,14 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
cls.dicing_rate = FloatProperty(
name="Dicing Rate",
description="Size of a micropolygon in pixels",
- min=0.1, max=1000.0,
+ min=0.1, max=1000.0, soft_min=0.5,
default=1.0,
subtype="PIXEL"
)
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,
+ min=0.1, max=1000.0, soft_min=0.5,
default=8.0,
subtype="PIXEL"
)
@@ -1011,7 +1011,7 @@ class CyclesObjectSettings(bpy.types.PropertyGroup):
cls.dicing_rate = FloatProperty(
name="Dicing Scale",
description="Multiplier for scene dicing rate (located in the Geometry Panel)",
- min=0.1, max=1000.0,
+ min=0.1, max=1000.0, soft_min=0.5,
default=1.0,
)
diff --git a/intern/cycles/blender/blender_mesh.cpp b/intern/cycles/blender/blender_mesh.cpp
index c33bc4c263f..ff1d49ffd12 100644
--- a/intern/cycles/blender/blender_mesh.cpp
+++ b/intern/cycles/blender/blender_mesh.cpp
@@ -606,7 +606,7 @@ static void create_mesh(Scene *scene,
int numtris = 0;
int numcorners = 0;
int numngons = 0;
- bool use_loop_normals = b_mesh.use_auto_smooth();
+ bool use_loop_normals = b_mesh.use_auto_smooth() && (mesh->subdivision_type != Mesh::SUBDIVISION_CATMULL_CLARK);
BL::Mesh::vertices_iterator v;
BL::Mesh::tessfaces_iterator f;
@@ -959,25 +959,7 @@ Mesh *BlenderSync::sync_mesh(BL::Object& b_ob,
bool need_undeformed = mesh->need_attribute(scene, ATTR_STD_GENERATED);
- 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];
- bool enabled = preview ? mod.show_viewport() : mod.show_render();
-
- if(enabled && mod.type() == BL::Modifier::type_SUBSURF && RNA_boolean_get(&cobj, "use_adaptive_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;
- }
- }
- }
+ mesh->subdivision_type = object_subdivision_type(b_ob, preview, experimental);
BL::Mesh b_mesh = object_to_mesh(b_data, b_ob, b_scene, true, !preview, need_undeformed, mesh->subdivision_type);
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index f305e8e17cc..f7f77dfb4cb 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -698,6 +698,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render,
Camera prevcam = *(scene->camera);
int frame_center = b_scene.frame_current();
+ float subframe_center = b_scene.frame_subframe();
float frame_center_delta = 0.0f;
if(scene->need_motion() != Scene::MOTION_PASS &&
@@ -711,7 +712,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render,
assert(scene->camera->motion_position == Camera::MOTION_POSITION_START);
frame_center_delta = shuttertime * 0.5f;
}
- float time = frame_center + frame_center_delta;
+ float time = frame_center + subframe_center + frame_center_delta;
int frame = (int)floorf(time);
float subframe = time - frame;
python_thread_state_restore(python_thread_state);
@@ -734,7 +735,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render,
float shuttertime = scene->motion_shutter_time();
/* compute frame and subframe time */
- float time = frame_center + frame_center_delta + relative_time * shuttertime * 0.5f;
+ float time = frame_center + subframe_center + frame_center_delta + relative_time * shuttertime * 0.5f;
int frame = (int)floorf(time);
float subframe = time - frame;
@@ -759,7 +760,7 @@ void BlenderSync::sync_motion(BL::RenderSettings& b_render,
* function assumes it is being executed from python and will
* try to save the thread state */
python_thread_state_restore(python_thread_state);
- b_engine.frame_set(frame_center, 0.0f);
+ b_engine.frame_set(frame_center, subframe_center);
python_thread_state_save(python_thread_state);
/* tag camera for motion update */
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 80a16e0ef27..c250a54f259 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -681,8 +681,7 @@ void BlenderSession::bake(BL::Object& b_object,
}
}
- /* when used, non-instanced convention: object = ~object */
- int object = ~object_index;
+ int object = object_index;
BakeData *bake_data = scene->bake_manager->init(object, tri_offset, num_pixels);
diff --git a/intern/cycles/blender/blender_sync.cpp b/intern/cycles/blender/blender_sync.cpp
index e7e57b2be36..4ca202ac40d 100644
--- a/intern/cycles/blender/blender_sync.cpp
+++ b/intern/cycles/blender/blender_sync.cpp
@@ -103,6 +103,27 @@ bool BlenderSync::sync_recalc()
if(b_lamp->is_updated() || (b_lamp->node_tree() && b_lamp->node_tree().is_updated()))
shader_map.set_recalc(*b_lamp);
+ bool dicing_prop_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_prop_changed = true;
+ }
+
+ int updated_max_subdivisions = RNA_int_get(&cscene, "max_subdivisions");
+
+ if(max_subdivisions != updated_max_subdivisions) {
+ max_subdivisions = updated_max_subdivisions;
+ dicing_prop_changed = true;
+ }
+ }
+
BL::BlendData::objects_iterator b_ob;
for(b_data.objects.begin(b_ob); b_ob != b_data.objects.end(); ++b_ob) {
@@ -112,7 +133,9 @@ bool BlenderSync::sync_recalc()
}
if(object_is_mesh(*b_ob)) {
- if(b_ob->is_updated_data() || b_ob->data().is_updated()) {
+ if(b_ob->is_updated_data() || b_ob->data().is_updated() ||
+ (dicing_prop_changed && object_subdivision_type(*b_ob, preview, experimental) != Mesh::SUBDIVISION_NONE))
+ {
BL::ID key = BKE_object_is_modified(*b_ob)? *b_ob: b_ob->data();
mesh_map.set_recalc(key);
}
@@ -129,42 +152,14 @@ bool BlenderSync::sync_recalc()
}
}
- bool dicing_prop_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_prop_changed = true;
- }
-
- int updated_max_subdivisions = RNA_int_get(&cscene, "max_subdivisions");
-
- if(max_subdivisions != updated_max_subdivisions) {
- max_subdivisions = updated_max_subdivisions;
- dicing_prop_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()) {
mesh_map.set_recalc(*b_mesh);
}
- else if(dicing_prop_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;
for(b_data.worlds.begin(b_world); b_world != b_data.worlds.end(); ++b_world) {
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index e79f2bbb27d..f17a61f0ac8 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -17,6 +17,8 @@
#ifndef __BLENDER_UTIL_H__
#define __BLENDER_UTIL_H__
+#include "mesh.h"
+
#include "util_map.h"
#include "util_path.h"
#include "util_set.h"
@@ -55,11 +57,10 @@ static inline BL::Mesh object_to_mesh(BL::BlendData& data,
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_viewport = subsurf_mod.show_viewport();
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);
@@ -561,6 +562,29 @@ static inline BL::DomainFluidSettings object_fluid_domain_find(BL::Object b_ob)
return BL::DomainFluidSettings(PointerRNA_NULL);
}
+static inline Mesh::SubdivisionType object_subdivision_type(BL::Object& b_ob, bool preview, bool experimental)
+{
+ 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];
+ bool enabled = preview ? mod.show_viewport() : mod.show_render();
+
+ if(enabled && mod.type() == BL::Modifier::type_SUBSURF && RNA_boolean_get(&cobj, "use_adaptive_subdivision")) {
+ BL::SubsurfModifier subsurf(mod);
+
+ if(subsurf.subdivision_type() == BL::SubsurfModifier::subdivision_type_CATMULL_CLARK) {
+ return Mesh::SUBDIVISION_CATMULL_CLARK;
+ }
+ else {
+ return Mesh::SUBDIVISION_LINEAR;
+ }
+ }
+ }
+
+ return Mesh::SUBDIVISION_NONE;
+}
+
/* ID Map
*
* Utility class to keep in sync with blender data.