100% found this document useful (4 votes)
1K views42 pages

RenderMan For Everyone: SIGGRAPH 2006 Course Notes

This is a talk I gave as part of SIGGRAPH 2006's RenderMan course. It is both an overview of, and introduction to RenderMan. Cheers, Saty

Uploaded by

satychary
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF or read online on Scribd
100% found this document useful (4 votes)
1K views42 pages

RenderMan For Everyone: SIGGRAPH 2006 Course Notes

This is a talk I gave as part of SIGGRAPH 2006's RenderMan course. It is both an overview of, and introduction to RenderMan. Cheers, Saty

Uploaded by

satychary
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF or read online on Scribd
You are on page 1/ 42

Introduction to RenderMan

Saty Raghavachary
Talk outline

RenderMan basics
• origins
• 'RI Spec' – brief tour
• workflow
• scene (RIB) files
• shaders (RSL)
• resources
Origins, history

• Univ. of Utah – Ed Catmull

• Lucasfilm, Pixar - “REYES” ('87)

• Photorealistic RenderMan ('89), RSL ('90)


Origins, history

REYES
• all objects get broken down
into micropolygons
• micropolygons are shaded
• results are combined to produce
output pixel colors and opacities
Origins, history
Origins, history
Origins, history

LOTS of movies use RenderMan!


RI Spec

What is RenderMan?
• an interface between modelers and renderers

• idea is to be able to mix-and-match them


RI Spec

What's in the Spec


• core capabilities (eg. hierarchical graphics state,
antialiasing, programmable shading language)
• advanced/optional capabilities (eg. motion blur,
depth of field, global illumination)
• C/C++ bindings and RenderMan Interface
Bytestream (RIB) bindings
• RenderMan Shading Language (RSL)
RI Spec

Who implements the Spec?


• Pixar – Photorealistic RenderMan (PRMan) - v.13
• Dot C Software – RenderDotC
• Paul Gregory and team - Aqsis
• SiTex Graphics – AIR
• Okan Arikan – Pixie
• 3Delight
• ... several others ...
RI Spec

Version numbers
• 3.0 – 1988
• 3.1 – 1989, revised in 1995
• 3.2 – 2000
• 3.2.1 – Nov. 2005
• 3.3 – in the works

Read the Spec thoroughly!


Workflow

RenderMan dataflow/pipeline

Do modeling, layout, animation, effects


and lighting/surfacing elsewhere (eg. in Maya)
Workflow

Sources of RIB files


• 'by hand', using a text editor
• by running a program – bindings exist for Java,
Python, Perl, Tcl, Ruby..
• standalone scene converters, eg. mi2rib
• native output, eg. from Blender
• translator plugins – eg. for Maya, we have
MTOR/Slim, RfM, MayaMan and Liquid
Workflow

Sources of shaders
• from scratch, 'by hand'
• plugin interface, eg. 'Slim' for Maya
• integrated into host program, eg. 'RenderMan for
Maya' plugin for Maya
• standalone 'connect the boxes' UI programs, eg.:
– ShaderMan
– ShadeTree (defunct)
Workflow

ShaderMan, ShadeTree
Workflow

Sources of maps Types of maps:


• digital paintings, – texture
scans, photos.. – environment/reflection
• prior renders, ie. – normal
from a previous 'pass' – shadow/deep shadow
– photon
TIFF images for texturing – irradiance cache
need to be converted to map
– occlusion
format, eg. .tex for PRMan
– brick
Workflow

Ways of extending RenderMan


• shaders
• DSO shader plugins, “shadeops”
• standalones/DSOs to output RIB
for use with the 'Procedural' RIB call
• display driver DSOs
RIB files

• scene description files


• simple, declarative style, eg.
Projection “perspective” “fov” 54.3

• no loops, branches, function


calls etc.
• can be ASCII or binary
• usually one file per frame
of animation
RIB files

A very simple RIB file and output:

PRMan render command: render sph_pln.rib


RSL

Language highlights
• C-like syntax
• types: float, string, color, point, normal...
• operators: +,-,*,/,%,==...
• control statements: if(), for()..
• rich collection of built-in functions
• user-definable functions
• DSO shadeops (shader plugins)
• pre-processor directives, eg. #include
RSL

Built-in function categories


• mathematical, eg. asin()
• geometric, eg. normalize()
• color, eg. ctransform()
• matrix, array, eg. arraylength(), determinant()
• string, eg. concat()
• shading, lighting, eg. diffuse(), trace()
• texture mapping, eg. texture(), shadow()
• message passing, info., eg. surface(), rayinfo()
RSL

Five categories of shaders


• surface
• displacement
• atmosphere
• light
• imager

Shader source needs to be compiled, eg. (PRMan):


shader myshader.sl
RSL
RSL
RSL

surface showN()
{
normal NN = normalize(N);
vector posNorm = 0.5*(vector(1,1,1)+NN);

Oi = Os;
Ci = Oi*color(comp(posNorm,0), comp(posNorm,1),
comp(posNorm,2));
}// showN()
RSL
RSL

surface tex(string tmap="generic.tex";)


{
float alpha;
/* get base color from map */
if(tmap!="")
{
color Ct = color texture(tmap,s,t);
alpha = texture(tmap[3],s,t);
Oi = alpha;
Ci = Oi*Ct;
}
}//tex()
RSL
RSL

displacement sinewaves(float freq=1.0, ampl=1.0,


sphase=0, tphase=0, paramdir=0)
{
// displace along normal, using sin(s),sin(t) or both
if(0==paramdir)
{
P += ampl*sin(sphase+s*freq*2*PI)*normalize(N);
}
else if (1==paramdir)
{
P += ampl*sin(tphase+t*freq*2*PI)*normalize(N);
}
else
{
P += ampl*sin(sphase+s*freq*2*PI)*
sin(tphase+t*freq*2*PI)*normalize(N);
}
N = calculatenormal(P);
}// sinewaves
RSL
RSL

light
Kessonlt(
float intensity=1 ;
color lightcolor=1 ;
float freq=1.0, coneangle=PI/2;
)
{
point Pt = freq*transform("shader",Ps);
vector ldir = 2*noise(freq*Pt) - 1;
solar(ldir,coneangle)
{
Cl = intensity * lightcolor;
}
}// Kessonlt()
RSL
RSL

volume underwater(
float mindist=0, maxdist= 1;
color fg=1, bg=1;
float inten=1, gam=1, mixf=0.5;
)
{
color c; float d;
d = length(I);
if(d<=mindist)c = fg;
else if(d>=maxdist)c = bg;
else
{
d = (d-mindist)/(maxdist-mindist);
d = pow(d,gam);
c = mix(fg,bg,d);
}
Ci = inten*mix(Ci,c,mixf);
Oi = mix( Oi, color (1,1,1), d );
}// underwater()
RSL
RSL
imager Imager_ramp
(
color ctop = color(1,1,1);
color cbot = color(0,0,0);
float gam=1.0;
)
{
float curr_y;
float rez[3];
color rampcol;
float mixf;
option("Format",rez);
curr_y = ycomp(P)/ rez[1]; // 0 to 1, top to bottom
curr_y = pow(curr_y,gam);
rampcol = mix(ctop,cbot,curr_y);
Ci += (1-Oi)*rampcol;
Oi = 1.0;
}// Imager_ramp()
RSL
Resources

Books

Also:
• Texturing and Modeling
• Essential RenderMan
• a new RSL book
Resources

Notes, tutorials
• SIGGRAPH course notes
'92, '95, '98, '99, '00, '01, '02, '03, '06
• Prof. Malcolm Kesson – 'fundza'
• Zhang Jian - “ZJ”
• Steve May -
• Katsuaki Hiramitsu - 'Katsu's RooM'
Resources

Portals, forums
• RenderMan Repository – RMR – Tal Lancaster
• RenderMan Academy – Rudy Cortes
• RenderMania – Simon Bunker
• highend3d.com
• deathfall.com
• comp.graphics.rendering.renderman
Resources

Implementors' sites
• Pixar - www.pixar.com
• RenderDotC - www.dotcsw.com
• Aqsis - www.aqsis.org
• AIR - www.sitexgraphics.com
• Pixie - sourceforge.net/projects/pixie
• 3Delight - www.3delight.com
• ART - www.art-render.com/
Summary

• origins
• RI Spec
• workflow
• RIB files
• shaders (RSL)
• resources
HAVE FUN!!

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy