1 / 35

RenderMan Tutorial

Overview. Two ?languages"Geometry - set of C subroutinesShading - a C-like languageGeometry code can be run directly, or output to RIB fileShading code is compiled to byte-code. Process. RmanGeomCode. . cc. RmanProgram. RmanShader.sl. . shader. Byte-codeShader.slo. . . RIBFile. renderPr

zavad
Download Presentation

RenderMan Tutorial

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 Tutorial COMP238 Fall 2000

    2. Overview Two “languages” Geometry - set of C subroutines Shading - a C-like language Geometry code can be run directly, or output to RIB file Shading code is compiled to byte-code

    3. Process

    4. Local Configuration Files are in /usr/local/prman On Suns, SGI, Linux File /usr/local/prman/rendermn.ini has default values (file paths, etc). You can make your own .rendermn.ini to override Blue Moon now does Windows

    5. Resources RenderMan Companion – copies in Glab Pixar web pages http://www.pixar.com/products/renderman/toolkit/Toolkit/user.html Look on course “resources” web page for links

    6. RenderMan code #include <ri.h> RtPoint Square[4] = { {.5,.5,.5}, {.5,-.5,.5}, {-.5,-.5,.5}, {-.5,.5,.5} }; main(void){ RiBegin(RI_NULL); /* Start the renderer */ RiDisplay("RenderMan", RI_FRAMEBUFFER, "rgb", RI_NULL); RiFormat((RtInt) 256, (RtInt) 192, -1.0); RiShadingRate(1.0); RiWorldBegin(); RiSurface("constant", RI_NULL); RiPolygon( (RtInt) 4, /* Declare the square */ RI_P, (RtPointer) Square, RI_NULL); RiWorldEnd(); RiEnd(); /* Clean up */

    7. RIB Display "RenderMan" "framebuffer" "rgb" Format 256 192 -1 ShadingRate 1 WorldBegin Surface "constant" 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

    8. Output to a File Examples have display output RiDisplay("RenderMan", RI_FRAMEBUFFER, "rgb", RI_NULL); Change to RiDisplay("filename", RI_FILE, RI_RGBA, RI_NULL); or RIB to Display "filename" "file" "rgba"

    9. Making a Model Procedural RIB files on web Look at my “resources” page Many programs output RIB Format converter

    10. Parameter Lists Variable length Name/Value pairs or vector RiPatch(RI_BICUBIC, RI_P, (RtPointer) Patch, RI_NULL);

    11. Surface Shader Specification ks = 0.5; ka = kd = 0; RiSurface("plastic", (RtToken)"Ka", (RtPointer)&ka, (RtToken)"Kd", (RtPointer)&kd, (RtToken)"Ks", (RtPointer)&ks, RI_NULL); RiCylinder(0.5, -0.5, 0.5, 360.0, RI_NULL);

    12. Shader Instances ks = 0.5; ka = kd = 0; RiSurface("plastic", (RtToken)"Ka", (RtPointer)&ka, (RtToken)"Kd", (RtPointer)&kd, (RtToken)"Ks", (RtPointer)&ks, RI_NULL); RiCylinder(0.5, -0.5, 0.5, 360.0, RI_NULL); ks = 0.2; ka = 0.3; kd = 0.1; RiSurface("plastic", (RtToken)"Ka", (RtPointer)&ka, (RtToken)"Kd", (RtPointer)&kd, (RtToken)"Ks", (RtPointer)&ks, RI_NULL);

    13. Shader Example surface clouds(float Kd=.8, Ka=.2 ) { float sum ; float i, freq; color white = color(1.0, 1.0, 1.0); point Psh = transform("shader", P); sum = 0; freq = 4.0; for (i = 0; i < 6; i = i + 1) { sum = sum + 1/freq * abs(.5 - noise(freq * Psh)); freq = 2 * freq; } Ci = mix(Cs, white, sum*4.0); Oi = 1.0; /* Always make the surface opaque */ }

    14. Result

    15. Shader Example (defaults) surface clouds(float Kd=.8, Ka=.2 ) { float sum ; float i, freq; color white = color(1.0, 1.0, 1.0); point Psh = transform("shader", P); sum = 0; freq = 4.0; for (i = 0; i < 6; i = i + 1) { sum = sum + 1/freq * abs(.5 - noise(freq * Psh)); freq = 2 * freq; } Ci = mix(Cs, white, sum*4.0); Oi = 1.0; /* Always make the surface opaque */ }

    16. Why? Because you’re not required to specify parameters RiWorldBegin(); RiColor(color); RiSurface("clouds", RI_NULL); RiPolygon( (RtInt) 4, RI_P, (RtPointer) Square, RI_NULL); RiWorldEnd();

    17. Shader Example (data types) surface clouds(float Kd=.8, Ka=.2 ) { float sum ; float i, freq; color white = color(1.0, 1.0, 1.0); point Psh = transform("shader", P); sum = 0; freq = 4.0; for (i = 0; i < 6; i = i + 1) { sum = sum + 1/freq * abs(.5 - noise(freq * Psh)); freq = 2 * freq; } Ci = mix(Cs, white, sum*4.0); Oi = 1.0; /* Always make the surface opaque */ }

    18. Data Types Float (no integer!) String Point Color New in latest RenderMan Vector, matrix Also arrays of any type

    19. Uniform vs. Varying Uniform means that the parameter is the same across surface More efficient default Varying variables can be attached to vertices Interpolated across surface

    20. Shader (magic variables) surface clouds(float Kd=.8, Ka=.2 ) { float sum ; float i, freq; color white = color(1.0, 1.0, 1.0); point Psh = transform("shader", P); sum = 0; freq = 4.0; for (i = 0; i < 6; i = i + 1) { sum = sum + 1/freq * abs(.5 - noise(freq * Psh)); freq = 2 * freq; } Ci = mix(Cs, white, sum*4.0); Oi = 1.0; /* Always make the surface opaque */ }

    21. Predefined Global Variables Position “P” Normal “N” Surface color “Cs” Output color “Ci” Output opacity “Oi” Others: P.292 of RenderMan Companion

    22. Shader (built-in functions) surface clouds(float Kd=.8, Ka=.2 ) { float sum ; float i, freq; color white = color(1.0, 1.0, 1.0); point Psh = transform("shader", P); sum = 0; freq = 4.0; for (i = 0; i < 6; i = i + 1) { sum = sum + 1/freq * abs(.5 - noise(freq * Psh)); freq = 2 * freq; } Ci = mix(Cs, white, sum*4.0); Oi = 1.0; /* Always make the surface opaque */ }

    23. Built-in Functions Trig functions Standard math Texture, bump, environment, and shadow mapping functions Geometric - area(), normalize(V) printf()

    24. Shader (return value Ci, Oi) surface clouds(float Kd=.8, Ka=.2 ) { float sum ; float i, freq; color white = color(1.0, 1.0, 1.0); point Psh = transform("shader", P); sum = 0; freq = 4.0; for (i = 0; i < 6; i = i + 1) { sum = sum + 1/freq * abs(.5 - noise(freq * Psh)); freq = 2 * freq; } Ci = mix(Cs, white, sum*4.0); Oi = 1.0; /* Always make the surface opaque */ }

    25. Constant Shader surface constant() { Oi = Os; Ci = Os * Cs; }

    26. Lighting illuminance(point [, axis, angle]) Executes each light within specified angle Rarely used. Returns Cl, L

    27. Alternate Approach Usually shortcut with ambient(), diffuse(), specular() Examples next

    28. Diffuse Surface surface matte( float Ka = 1, Kd = 1 ) { normal Nf = faceforward(normalize(N),I); Oi = Os; Ci = Os * Cs *(Ka*ambient() + Kd*diffuse(Nf)); }

    29. Plastic surface plastic( float Ks = .5, Kd = .5, Ka = 1, roughness = .1; color specularcolor = 1 ) { normal Nf = faceforward(normalize(N), I ); vector V = normalize(-I); Oi = Os; Ci = Os*( Cs * (Ka*ambient()+ Zd*diffuse(Nf))+ specularcolor * Ks * specular(Nf,V,roughness) ); }

    30. Lights The light shaders generate Cl, the intensity of the light Also control cone of light

    31. Ambient Light light ambientlight( float intensity = 1; color lightcolor= 1 ) { Cl = intensity * lightcolor; }

    32. Point Light light pointlight( float intensity = 1; color lightcolor = 1; point from = point "camera" (0,0,0) ) { illuminate( from ) Cl = intensity * lightcolor / L.L; }

    33. illuminate illuminate(position [, axis, angle]) Position specifies apex of cone Axis direction of center of cone Angle of cone

    34. What Next? Look at Chapter 16 of RenderMan Companion Compile and modify some of the examples http://www.pixar.com/products/rendermandocs/toolkit/Toolkit/tut.html will help you with compilation, etc.

    35. Other Resources RenderMan Docs (PDF and HTML) http://www.pixar.com/products/renderman/toolkit/Toolkit/ Articles http://www.cgrg.ohio-state.edu/~smay/RManNotes/ http://howto.tucows.com/LDP/LDP/LG/issue15/bmrt-part1.html http://howto.tucows.com/LDP/LDP/LG/issue17/bmrt-part2.html

More Related