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:
-rw-r--r--intern/cycles/blender/addon/properties.py35
-rw-r--r--intern/cycles/blender/addon/ui.py44
-rw-r--r--intern/cycles/blender/blender_object.cpp10
-rw-r--r--intern/cycles/blender/blender_util.h30
4 files changed, 115 insertions, 4 deletions
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index 1d568247327..eb6680b02a0 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -742,6 +742,41 @@ class CyclesMeshSettings(bpy.types.PropertyGroup):
del bpy.types.MetaBall.cycles
+class CyclesObjectBlurSettings(bpy.types.PropertyGroup):
+
+ @classmethod
+ def register(cls):
+
+ bpy.types.Object.cycles = PointerProperty(
+ name="Cycles Object Settings",
+ description="Cycles object settings",
+ type=cls,
+ )
+
+ cls.use_motion_blur = BoolProperty(
+ name="Use Motion Blur",
+ description="Use motion blur for this object",
+ default=True,
+ )
+
+ cls.use_deform_motion = BoolProperty(
+ name="Use Deformation Motion",
+ description="Use deformation motion blur for this object",
+ default=True,
+ )
+
+ cls.motion_steps = IntProperty(
+ name="Motion Steps",
+ description="Control accuracy of deformation motion blur, more steps gives more memory usage (actual number of steps is 2^(steps - 1))",
+ min=1, soft_max=8,
+ default=1,
+ )
+
+ @classmethod
+ def unregister(cls):
+ del bpy.types.Object.cycles
+
+
class CyclesCurveRenderSettings(bpy.types.PropertyGroup):
@classmethod
def register(cls):
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index 70368c25435..60d1b036d9d 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -572,6 +572,50 @@ class Cycles_PT_mesh_normals(CyclesButtonsPanel, Panel):
col.label()
+class CyclesObject_PT_motion_blur(CyclesButtonsPanel, Panel):
+ bl_label = "Motion Blur"
+ bl_context = "object"
+ bl_options = {'DEFAULT_CLOSED'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ return CyclesButtonsPanel.poll(context) and ob and ob.type in {'MESH', 'CURVE', 'CURVE', 'SURFACE', 'FONT', 'META'}
+
+ def draw_header(self, context):
+ layout = self.layout
+
+ rd = context.scene.render
+ scene = context.scene
+ cscene = scene.cycles
+
+ layout.active = (rd.use_motion_blur and cscene.device == 'CPU')
+
+ ob = context.object
+ cob = ob.cycles
+
+ layout.prop(cob, "use_motion_blur", text="")
+
+ def draw(self, context):
+ layout = self.layout
+
+ rd = context.scene.render
+ scene = context.scene
+ cscene = scene.cycles
+
+ ob = context.object
+ cob = ob.cycles
+
+ layout.active = (rd.use_motion_blur and cscene.device == 'CPU' and cob.use_motion_blur)
+
+ row = layout.row()
+ row.prop(cob, "use_deform_motion", text="Deformation")
+
+ sub = row.row()
+ sub.active = cob.use_deform_motion
+ sub.prop(cob, "motion_steps", text="Steps")
+
+
class CyclesObject_PT_ray_visibility(CyclesButtonsPanel, Panel):
bl_label = "Ray Visibility"
bl_context = "object"
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index bd4becb2dd4..69225594a03 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -244,7 +244,7 @@ Object *BlenderSync::sync_object(BL::Object b_parent, int persistent_id[OBJECT_P
if(motion) {
object = object_map.find(key);
- if(object) {
+ if(object && (scene->need_motion() == Scene::MOTION_PASS || object_use_motion(b_ob))) {
/* object transformation */
if(tfm != object->tfm) {
if(motion_time == -1.0f) {
@@ -323,9 +323,11 @@ Object *BlenderSync::sync_object(BL::Object b_parent, int persistent_id[OBJECT_P
if(scene->need_motion() == Scene::MOTION_BLUR && object->mesh) {
Mesh *mesh = object->mesh;
- if(true) {
- if(true) {
- mesh->motion_steps = 3;
+ mesh->use_motion_blur = false;
+
+ if(object_use_motion(b_ob)) {
+ if(object_use_deform_motion(b_ob)) {
+ mesh->motion_steps = object_motion_steps(b_ob);
mesh->use_motion_blur = true;
}
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index 58e523d7fc2..bea5ee49bf4 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -341,6 +341,36 @@ static inline void mesh_texture_space(BL::Mesh b_mesh, float3& loc, float3& size
loc = loc*size - make_float3(0.5f, 0.5f, 0.5f);
}
+/* object used for motion blur */
+static inline bool object_use_motion(BL::Object b_ob)
+{
+ PointerRNA cobject = RNA_pointer_get(&b_ob.ptr, "cycles");
+ bool use_motion = get_boolean(cobject, "use_motion_blur");
+
+ return use_motion;
+}
+
+/* object motion steps */
+static inline uint object_motion_steps(BL::Object b_ob)
+{
+ PointerRNA cobject = RNA_pointer_get(&b_ob.ptr, "cycles");
+ uint steps = get_int(cobject, "motion_steps");
+
+ /* use uneven number of steps so we get one keyframe at the current frame,
+ * and ue 2^(steps - 1) so objects with more/fewer steps still have samples
+ * at the same times, to avoid sampling at many different times */
+ return (2 << (steps - 1)) + 1;
+}
+
+/* object uses deformation motion blur */
+static inline bool object_use_deform_motion(BL::Object b_ob)
+{
+ PointerRNA cobject = RNA_pointer_get(&b_ob.ptr, "cycles");
+ bool use_deform_motion = get_boolean(cobject, "use_deform_motion");
+
+ return use_deform_motion;
+}
+
/* ID Map
*
* Utility class to keep in sync with blender data.