7

I have a single object spinning (at varying speeds controlled by F-curves) along two axes.

The effect I'm going for turns out best if I can vary the Shutter in Sampled Motion Blur for every frame, say, for instance, exponentially from 0.25 in Frame 30 to 4.00 in Frame 80.

Manually adjusting this value and exporting bits of the animation is tedious. Is there any way to control the Shutter using F-curves? Or could the same effect be somehow accomplished using another method?

David
  • 49,291
  • 38
  • 159
  • 317
MuffinMan
  • 73
  • 3

1 Answers1

7

Since this property cannot be animated or driven, the only thing left is to control it with script:

import bpy
import math

def function(frame):
    # modify this function if you want
    return math.pow(4.75, (frame-30)/50) - 0.75

def my_handler(scene):
    # this code will be run on every frame change
    scene.render.motion_blur_shutter = function(scene.frame_current)

bpy.app.handlers.frame_change_pre.append(my_handler)

Run this in the Text editor, render the animation normally. If you want to make changes after you ran the code, remove the handler first with typing this into the console: bpy.app.handlers.frame_change_pre.clear()

If you would like to animate the value, create a custom ID property for the scene which you can animate (name the property "shutter"):

enter image description here

And use this code (it copies the value into the shutter speed):

import bpy

def my_handler(scene):
    scene.render.motion_blur_shutter = scene["shutter"]

bpy.app.handlers.frame_change_pre.append(my_handler)
Jaroslav Jerryno Novotny
  • 51,077
  • 7
  • 129
  • 218