1 / 32

RenderMan Introduction

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

cassie
Download Presentation

RenderMan Introduction

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. RenderMan Introduction CS 551/645 Fall 2000

  2. Evaluate Me! • Please visit the SEAS main website and use the ‘Course Evaluations’ button to rate this class.

  3. 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.

  4. 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

  5. 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

  6. 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)

  7. 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

  8. 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

  9. 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

  10. 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

  11. Shaders • Write from scratch • Obtained from software app, Slim or ShadeTree • Must be compiled to object code

  12. 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 */

  13. 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)

  14. 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.

  15. How To • Generate this: http://www.renderman.org/RMR/RIBS/bulb.rib

  16. .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

  17. .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"

  18. .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

  19. .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

  20. .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

  21. .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

  22. 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

  23. 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)

  24. 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

  25. 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);

  26. 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

  27. 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)

  28. What you need to do • Apply a marble or wood shader to the pedestal • It should look good

  29. 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)

  30. 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

  31. RiPatch • RiPatch (“bilinear”, RI_P, (RtPointer) corners, RI_ST, (RtPointer) textcoords, RI_NULL); • RtPoint corners[4]; • static struct {RtFloat x,y} textcoords [4];

  32. 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

More Related