Some rendering programs are capable of performing temporal anti-aliasing and motion blur. Motion blur is specified through moving transformations and moving geometric primitives. Appearance parameters, such as color, opacity, and shader variables can also be changed during a frame. To specify objects that vary over time, several copies of the same object are created, each with different parameters at different times within a frame. The times that actually contribute to the motion blur are set with the RiShutter command. Parameter values change linearly over the intervals between knots. There is no limit to the number of time values associated with a motion-blurred primitive, although two is usually sufficient.
Rigid body motions and other transformation-based movements are modeled using moving coordinate systems. Moving coordinate systems are created by giving a sequence of transformations at different times and can be concatenated and nested hierarchically. All output primitives are defined in the current object coordinate system and, if that coordinate system is moving, the primitives will also be moving. The extreme case is when the camera is moving, since then all objects in the scene appear to be moving. Moving lights also are handled by placing them in a moving coordinate system. Deforming geometric primitives can also be modeled by giving their parameters at different times.
Moving geometry is created by bracketing the definitions at different times between RiMotionBegin and RiMotionEnd calls.
RiMotionBegin( RtInt n, RtFloat t0, RtFloat t1,..., RtFloat tnminus1 ) RiMotionEnd()
RiMotionBegin starts the definition of a moving primitive. n is the number of time steps associated with this moving primitive. The times should be in increasing order. Only one type of RenderMan Interface command can be executed within this sequence and only numerical values may be interpolated.
RiMotionEnd terminates the definition of the moving primitive.
RIB BINDING MotionBegin [ t0 t1... tn-1 ] MotionEnd - SEE ALSO RiShutter
For example, assume the following list of commands creates a static translated sphere:
RtFloat Kd = 0.8; RiSurface( "leather", "Kd", (RtPointer)&Kd, RI_NULL ); RiTranslate( 1., 2., 3. ); RiSphere( 1., -1., 1., 360., RI_NULL );
To create a moving, deforming sphere with changing surface qualities, the following might be used:
RtFloat Kd[] = { 0.8, 0.7 }; RiMotionBegin( 2, 0., 1. ); RiSurface( "leather", "Kd", (RtPointer)Kd, RI_NULL ); RiSurface( "leather", "Kd", (RtPointer)(Kd+1), RI_NULL ); RiMotionEnd(); RiMotionBegin( 2, 0., 1. ); RiTranslate( 1., 2., 3. ); RiTranslate( 2., 3., 4. ); RiMotionEnd(); RiMotionBegin( 2, 0., 1. ); RiSphere( 1., -1., 1., 360., RI_NULL ); RiSphere( 2., -2., 2., 360., RI_NULL ); RiMotionEnd();
Table 6.2, Moving Commands, shows which commands may be specified inside a RiMotionBegin-RiMotionEnd block. If the Motion Blur capability is not supported by a particular implementation, only the transformations, geometry and shading parameters from t0 are used to render each moving object.
No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior written permission of Pixar. The information in this publication is furnished for informational use only, is subject to change without notice and should not be construed as a commitment by Pixar. Pixar assumes no responsibility or liability for any errors or inaccuracies that may appear in this publication.
Pixar Animation Studios
|