diff options
Diffstat (limited to 'intern/cycles/blender/blender_util.h')
-rw-r--r-- | intern/cycles/blender/blender_util.h | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h index 9f7181cc564..78a0adbef00 100644 --- a/intern/cycles/blender/blender_util.h +++ b/intern/cycles/blender/blender_util.h @@ -43,8 +43,8 @@ void python_thread_state_restore(void **python_thread_state); static inline BL::Mesh object_to_mesh(BL::BlendData data, BL::Object object, BL::Scene scene, bool apply_modifiers, bool render, bool calc_undeformed) { BL::Mesh me = data.meshes.new_from_object(scene, object, apply_modifiers, (render)? 2: 1, false, calc_undeformed); - if ((bool)me) { - if (me.use_auto_smooth()) { + if((bool)me) { + if(me.use_auto_smooth()) { me.calc_normals_split(); } me.calc_tessface(true); @@ -310,7 +310,7 @@ static inline string get_string(PointerRNA& ptr, const char *name) char cstrbuf[1024]; char *cstr = RNA_string_get_alloc(&ptr, name, cstrbuf, sizeof(cstrbuf)); string str(cstr); - if (cstr != cstrbuf) + if(cstr != cstrbuf) MEM_freeN(cstr); return str; @@ -354,11 +354,20 @@ static inline void mesh_texture_space(BL::Mesh b_mesh, float3& loc, float3& size } /* object used for motion blur */ -static inline bool object_use_motion(BL::Object b_ob) +static inline bool object_use_motion(BL::Object b_parent, BL::Object b_ob) { PointerRNA cobject = RNA_pointer_get(&b_ob.ptr, "cycles"); bool use_motion = get_boolean(cobject, "use_motion_blur"); - + /* If motion blur is enabled for the object we also check + * whether it's enabled for the parent object as well. + * + * This way we can control motion blur from the dupligroup + * duplicator much easier. + */ + if(use_motion && b_parent.ptr.data != b_ob.ptr.data) { + PointerRNA parent_cobject = RNA_pointer_get(&b_parent.ptr, "cycles"); + use_motion &= get_boolean(parent_cobject, "use_motion_blur"); + } return use_motion; } @@ -375,11 +384,20 @@ static inline uint object_motion_steps(BL::Object b_ob) } /* object uses deformation motion blur */ -static inline bool object_use_deform_motion(BL::Object b_ob) +static inline bool object_use_deform_motion(BL::Object b_parent, BL::Object b_ob) { PointerRNA cobject = RNA_pointer_get(&b_ob.ptr, "cycles"); bool use_deform_motion = get_boolean(cobject, "use_deform_motion"); - + /* If motion blur is enabled for the object we also check + * whether it's enabled for the parent object as well. + * + * This way we can control motion blur from the dupligroup + * duplicator much easier. + */ + if(use_deform_motion && b_parent.ptr.data != b_ob.ptr.data) { + PointerRNA parent_cobject = RNA_pointer_get(&b_parent.ptr, "cycles"); + use_deform_motion &= get_boolean(parent_cobject, "use_deform_motion"); + } return use_deform_motion; } @@ -388,7 +406,7 @@ static inline BL::SmokeDomainSettings object_smoke_domain_find(BL::Object b_ob) BL::Object::modifiers_iterator b_mod; for(b_ob.modifiers.begin(b_mod); b_mod != b_ob.modifiers.end(); ++b_mod) { - if (b_mod->is_a(&RNA_SmokeModifier)) { + if(b_mod->is_a(&RNA_SmokeModifier)) { BL::SmokeModifier b_smd(*b_mod); if(b_smd.smoke_type() == BL::SmokeModifier::smoke_type_DOMAIN) |