320 likes | 550 Views
RenderMan Introduction. CS 551/645 Fall 2000. Evaluate Me!. Please visit the SEAS main website and use the ‘Course Evaluations’ button to rate this class. Administrivia. RenderMan assignment due 9:00 a.m. on December 5 th , one week from today
E N D
RenderMan Introduction CS 551/645 Fall 2000
Evaluate Me! • Please visit the SEAS main website and use the ‘Course Evaluations’ button to rate this class.
Administrivia • RenderMan assignment due 9:00 a.m. on December 5th, one week from today • Extra Credit assignment due 7:00 p.m. on December 11th • I have handouts to help explain the ray tracing algorithm. Grab one after class.
Remember • BMRT.org download is closed until Friday • www.rhino3d.com has older Windows version • www.tucows.com has recent Linux version • My account on Small Hall has recent SGI version
Renderman Sites • http://www.cgrg.ohio-state.edu/~smay/RManNotes/rmannotes.html • http://www.renderman.org/RMR/ • http://home.earthlink.net/~satysharon/RMan/ • http://www.rendermania.com • http://www.bmrt.org • http://minerva.ca.scad.edu/faculty/kesson/CA301/bookindex.html
RenderMan • Defines an interface between scene design and scene rendering • RenderMan Interface (Ri) is the formal spec • BMRT and Pixar’s PRMan (aka RenderMan) are two implementations of rendering software that accept the RenderMan Interface input files (RIB)
RenderMan Standards • High-level object primitives • Polygon, Quadric Surfaces, Parametric Surfaces • Hierarchical graphics state • Model and viewing transformations • Programmable shading language • Anti-aliasing • Texture Maps • Robust definition of image size and depth
RenderMan I/O • Inputs • RenderMan Interface Bytestream (RIB) files • Scene description • Shaders • Programs that describe shading (lighting and coloring) algorithms • Maps • Images, shadow regions, etc. • Outputs • Maps • For use as inputs in future rendering stages • Images • The final product of the rendering
RIB Files • You can write these by hand (ASCII or binary) • You can have them generated using C++ code and RenderMan C++ libraries • Maya plugin - MTOR • Roll your own RIB writer
Sample RIB File ##RenderMan RIB version 3.03 Display "RenderMan" "framebuffer" "rgb" Format 256 192 -1 LightSource "distantlight" 1 Translate 0 0 5 WorldBegin Surface "metal" Color [0.2 0.4 0.6] Polygon "P" [0.5 0.5 0.5 0.5 -0.5 0.5 -0.5 -0.5 0.5 -0.5 0.5 0.5] WorldEnd
Shaders • Write from scratch • Obtained from software app, Slim or ShadeTree • Must be compiled to object code
Sample Shader surface metal (float Ka=1, Ks=1, roughness=.1) { normal Nf; vector V; Nf = faceforward(normalize(N), I) ; V = normalize(-I) ; Oi = Os; Ci = Os * Cs * ( Ka*ambient() + Ks*specular(Nf,V,roughness) ); } /* metal */
Shaders Examples • There are a million shaders on the web • It is amazing to see the complex effects generated with simple functional descriptions • Shader writing is the bread and butter of special effects houses (the fur on Stuart Little, for example)
Shaders • Many extra shaders are included with the BMRT distribution • Look in the shaders directory • Read the .sl shaders and follow the structure of the input parameters when using • Remember, RenderMan graphics state stores variables about camera position, light positions, etc.
How To • Generate this: http://www.renderman.org/RMR/RIBS/bulb.rib
.rib Code # bulb.rib # Author: Scott Iverson <jsiverso@midway.uchicago.edu> # Date: 6/9/95 # Display "bulb.tiff" "file" "rgb" Projection "perspective" "fov" 25 Format 380 380 -1 Rotate 0 0 0 1 Rotate -0.570093918 1 0 0 Rotate 5.71059326 0 1 0 Translate -1 -2 10 Comments Output to file (TIFF) Perspective, 25 deg FOV Image Size Camera Rotation (NOOP) Angle, X, Y, Z Move Camera
.rib Code WorldBegin Light 1 is ambient with intensity .4 LightSource "ambientlight 1 "intensity" .4 Light 2 is distant with intensity .6 and direction (-.3, -.2, 1) LightSource "distantlight" 2 "intensity" .6 "from" [0 0 0] "to" [-.3 -.2 1] AttributeBegin is like GL_PUSH AttributeBegin Rotate –90 degrees about x-axis Rotate -90 1 0 0 Use interpolation to determine shading of pixels that fall between sampled points. Could be “constant” ShadingInterpolation "smooth"
.rib Code # base Apply the material “metal” to all future geometry Surface "metal“ Apply the color “blue” to all future geometry Color 0 0 1 Again, push to isolate the upcoming changes AttributeBegin Change the “handedness” of the coordinate system. Because we’re about to draw a quadric surface, the handedness effects the normal direction Orientation "rh“ Create a quadric surface, a disk Disk 0 .18 360 Pop the state (the handedness) AttributeEnd
.rib Code The Blue color remains and we draw a cylinder Cylinder .18 0 .1 360 We move up a little (to the top of the cylinder) Translate 0 0 .1 We change to another surface shader Surface "matte” We change to color “yellow” Color 1 1 0 We draw a hyperboloid around base of bulb Hyperboloid .18 0 0 .4 0 .15 360
.rib Code Move up a little Change the surface shader Change the color to be more red Draw the torii for the threads Translate 0 0 .15 Surface "metal" Color 1 .7 0 Translate 0 0 .05 Torus .4 .05 -90 90 360 Translate 0 0 0.10 Torus .4 .05 -90 90 360 Translate 0 0 0.10 Torus .4 .05 -90 90 360 Translate 0 0 0.10 Torus .4 .05 -90 90 360 Translate 0 0 0.10 Torus .4 .05 -90 90 360 Translate 0 0 0.10 Translate 0 0 -0.05
.rib Code # the glass part Change the shader Surface "plastic" "roughness" .4 Change the color to “white” Color 1 1 1 Here is the truncated call to generate the bulb surface PatchMesh "bicubic" 13 "nowrap" 7 "nowrap" "P" [ 0.40 0.00 0 0.40 0.220913867…] Pop Stack AttributeEnd End of scene description WorldEnd
Things to remember • The default coordinate system is left-handed • Camera initially at origin looking along positive-z • All camera movements are defined before the “World Begin” command • Think backwards about camera movement. You’re moving the world, not the camera • Object transformations accumulate (note the torus sequence) but for each object, the transformations are applied last -> first
C++ Library • Straightforward relationship to .rib file we just reviewed • Uses • include/ri.h (for Rt data types and function headers) • lib/libribout.a (for function code)
C++ Library • One weird thing about RenderMan Interface • Shaders accept parameter list arguments • token-value pairs • Terminated by RI_NULL • Explicit type casting • RtToken, RtPointer • Pass by address
parameter list Define the name of the texture map file Char *mytmap = “grid.tiff” Create a new token name and define its type tmap will now be of type uniform string RiDeclare (“tmap”, ”uniform string”); Use the shader, mytexture.sl, for the future geometry Provide the input parameter, mytmap, for the location of the texture map RiSurface (”mytexture”, (RtToken) ”tmap”, (RtPointer) &mytmap, RI_NULL);
What you need to do • Create RiLookat() • Arguments: eyePoint(xyz), lookatpoint(xyz), upvector(xyz) • Once this is created, remove the explicit rotate and translate commands I have in the code
What you need to do • Create an environment map • Use the command in the class handout • Apply the environment map to the surface of the teapot • Any surface shader that accepts a texture argument will work (shinymetal, for example)
What you need to do • Apply a marble or wood shader to the pedestal • It should look good
What you need to do • Apply the images you used to generate the environment map to texture map the walls of the room • If you wish, you can apply another kind of shader to the floor of the room (even though this would result in an unrealistic reflection on the teapot)
Applying Texture Maps • Again, a shader like paintedplastic will accept a texturemap argument • Just use it as an RiSurface before rendering the walls of the room • Make sure each wall gets a different texture • However, polygons do not have simple ways to adjust texture coordinates and texture may wrap or tile • Alternative: BILINEAR patch
RiPatch • RiPatch (“bilinear”, RI_P, (RtPointer) corners, RI_ST, (RtPointer) textcoords, RI_NULL); • RtPoint corners[4]; • static struct {RtFloat x,y} textcoords [4];
What you need to do • Put 3 lights in the scene • 1 point, 1 directional, 1 spot • Forget about the shadows • I’ll send out email with instructions for those who are still interested