diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-10-27 17:00:51 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-10-28 00:43:06 +0300 |
commit | b909dfdae140ba0cc71003ad30dc612b059732d6 (patch) | |
tree | 9d705fd6606d4eb7a34196fe6efe67879356b9c9 /source/blender/editors | |
parent | 6a529e14f4c25fc20b797799b602472d3a22a0f9 (diff) |
Cycles: Expose user-defined shutter curve to the interface
Shutter curve now can be controlled using curve mapping widget in the motion
blur panel in Render buttons. Only mapping from 0..1 by x axis are allowed,
Y values will be normalized to fill in 0..1 space as well automatically.
Y values of 0 means fully closed shutter, Y values of 1 means fully opened
shutter.
Default mapping is set to old behavior when shutter opens and closes instantly.
This shutter mapping curve could easily be used by any other render engine by
accessing scene.render.motion_blur_shutter_curve.
Reviewers: #cycles, brecht, juicyfruit, campbellbarton
Differential Revision: https://developer.blender.org/D1585
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/render/render_intern.h | 1 | ||||
-rw-r--r-- | source/blender/editors/render/render_internal.c | 42 | ||||
-rw-r--r-- | source/blender/editors/render/render_ops.c | 1 |
3 files changed, 44 insertions, 0 deletions
diff --git a/source/blender/editors/render/render_intern.h b/source/blender/editors/render/render_intern.h index 26f313cb3fe..fb07b03c286 100644 --- a/source/blender/editors/render/render_intern.h +++ b/source/blender/editors/render/render_intern.h @@ -89,6 +89,7 @@ void TEXTURE_OT_envmap_clear_all(struct wmOperatorType *ot); /* render_internal.c */ void RENDER_OT_render(struct wmOperatorType *ot); +void RENDER_OT_shutter_curve_preset(struct wmOperatorType *ot); void render_view3d_update(struct RenderEngine *engine, const struct bContext *C); void render_view3d_draw(struct RenderEngine *engine, const struct bContext *C); diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 57aafb549ac..f44374b1d7b 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -1640,3 +1640,45 @@ Scene *ED_render_job_get_current_scene(const bContext *C) } return NULL; } + +/* Motion blur curve preset */ + +static int render_shutter_curve_preset_exec(bContext *C, wmOperator *op) +{ + Scene *scene = CTX_data_scene(C); + CurveMapping *mblur_shutter_curve = &scene->r.mblur_shutter_curve; + CurveMap *cm = mblur_shutter_curve->cm; + int preset = RNA_enum_get(op->ptr, "shape"); + + cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE; + mblur_shutter_curve->preset = preset; + curvemap_reset(cm, + &mblur_shutter_curve->clipr, + mblur_shutter_curve->preset, + CURVEMAP_SLOPE_POS_NEG); + curvemapping_changed(mblur_shutter_curve, false); + + return OPERATOR_FINISHED; +} + +void RENDER_OT_shutter_curve_preset(wmOperatorType *ot) +{ + PropertyRNA *prop; + static EnumPropertyItem prop_shape_items[] = { + {CURVE_PRESET_SHARP, "SHARP", 0, "Sharp", ""}, + {CURVE_PRESET_SMOOTH, "SMOOTH", 0, "Smooth", ""}, + {CURVE_PRESET_MAX, "MAX", 0, "Max", ""}, + {CURVE_PRESET_LINE, "LINE", 0, "Line", ""}, + {CURVE_PRESET_ROUND, "ROUND", 0, "Round", ""}, + {CURVE_PRESET_ROOT, "ROOT", 0, "Root", ""}, + {0, NULL, 0, NULL, NULL}}; + + ot->name = "Shutter Curve Preset"; + ot->description = "Set shutter curve"; + ot->idname = "RENDER_OT_shutter_curve_preset"; + + ot->exec = render_shutter_curve_preset_exec; + + prop = RNA_def_enum(ot->srna, "shape", prop_shape_items, CURVE_PRESET_SMOOTH, "Mode", ""); + RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_CURVE); /* Abusing id_curve :/ */ +} diff --git a/source/blender/editors/render/render_ops.c b/source/blender/editors/render/render_ops.c index f98083f7e74..c09e8576dc2 100644 --- a/source/blender/editors/render/render_ops.c +++ b/source/blender/editors/render/render_ops.c @@ -93,6 +93,7 @@ void ED_operatortypes_render(void) WM_operatortype_append(RENDER_OT_view_show); WM_operatortype_append(RENDER_OT_render); WM_operatortype_append(RENDER_OT_view_cancel); + WM_operatortype_append(RENDER_OT_shutter_curve_preset); /* render_opengl.c */ WM_operatortype_append(RENDER_OT_opengl); |