Shutter opening and closing rates are controlled by the shutterOpenTime, shutterCloseTime, and shutteropening RiCamera properties. The shutter interval is determined by the values passed to RiShutter. In shutter-normalized time, the shutter interval is mapped to [0,1]. Specifying a shutterOpenTime and shutterCloseTime would appear in rib as follows:
Camera "world" "float shutterOpenTime" [opentime] "float shutterCloseTime" [closetime]
The shutter begins opening at time 0. The opentime is the time at which it becomes fully open. Between opentime and closetime the shutter remains fully open. At closetime, it begins closing, and it fully closes at time 1.
The following image shows a blue sphere moving from the screen left to screen right. The camera shutter opens and closes instantaneously, which is the default behavior if shutteropening is not given. The sphere is made artificially bright so that its blur shows up more. Because the shutter is completely open during the entire shutter interval, the motion samples are uniformly distributed, giving a constant blur:
By setting the shutterOpenTime and shutterCloseTime parameters to [0.0], we can make the shutter still open instantaneously, but then spend the time between 0 and 1 closing at a constant speed. This generates the most samples at the beginning of the sphere's motion, at screen left, and gradually fewer samples as it moves across the screen, making the blur fade out to screen right.
Camera "world" "float shutterOpenTime" [0.0] "float shutterCloseTime" [0.0]
Having this shutter spend the entire interval opening and then close instantaneously reverses the image and the blur fades in over the sphere's motion.
Camera "world" "float shutterOpenTime" [1.0] "float shutterCloseTime" [1.0]
Since real camera shutters cannot move infinitely fast, they generally spend some nonzero amount of time opening, remain open for a bit, and then spend some nonzero amount of time closing. We can model this by having the shutter opening between 0 and 0.35, fully-open between 0.35 and 0.65, and closing between 0.65 and 1.
Camera "world" "float shutterOpenTime" [0.35] "float shutterCloseTime" [0.65]
To approximate a real camera shutter even more accurately, we can relax the restriction that it opens and closes at a constant rate and model the acceleration of the shutter as it begins to open and the deceleration as it reaches its fully open or fully closed position. For this we need a more complex parametric description:
Camera "world" "float shutterOpenTime" [a] "float shutterCloseTime" [b] "float shutteropening" [c1 c2 d1 d2 e1 e2 f1 f2]
The eight parameters of shutteropening represent four points on a graph representing the motion of the shutter:
The points c1,c2 and d1,d2 must lie in the axis-aligned rectangle with corners at (0,0) and (opentime,1) and are the control points of a bezier curve segment. Likewise, e1,e2 and f1,f2 are control points of a bezier curve between (closetime,1) and (1,0) and must lie in the axis-aligned rectangle with corners at those points. In addition, the bezier curve itself must be a function, i.e. its slope must never be infinite within the defined segment.
Here are images of the shutter taking the entire interval to open. The first is the same as before, with the shutter opening at a constant rate. The second bends the bezier curve segment down to make the shutter open very slowly at first and accelerate throughout the opening interval, going very fast at the point that it finally becomes fully open. This moves the distribution of motion samples even more towards the end of the shutter interval, so the streak at the beginning of the interval is less pronounced and it becomes brighter more sharply.
Camera "world" "float shutterOpenTime"  "float shutterCloseTime"  "float shutteropening" [0 0 1 1 1 1 1 1]
Camera "world" "float shutterOpenTime"  "float shutterCloseTime"  "float shutteropening" [0.8 0.1 0.9 0.2 1 1 1 1]
The sharper shutter opening curve preserves more of the static shape of the moving object and can be more aesthetically appealing.