;-)
PoV-Ray is a free ray-tracer available online in many platforms. Did I say free? Yes, free. But, it doesn't do many of the wonderful things Renderman does. So feel free to use it, but you'll have to learn to use it on your own. There's a pretty well-written tutorial online.
printf
) or using procedural interface calls which
results in the output of RIB. We'll use the latter.
.rib
file.rib
files and see for yourself. In general, if the .rib
file
has very simple geometry but complicated lighting calculations then distributed
rendering will win. Sometimes it's more efficient to use two or three machines
rather than many machines. This all depends on the particular .rib
file, the load on the network and the load on the render servers at the time.
Your mileage may vary, but in general try local renderings first, then try
distributed renderings using machines in the lab that aren't being used by
anyone.
render
command with a single argument, the
.rib
file you want to render, and render
will either display the output to the screen or to a file, depending
on what your Display
was set to.
The interaction you should see (if you set it to write to a file) is:
unix% render foo.rib unix%and as a side-effect, your file (let's call it
foo.tif
) has been created.
-h flag
on your call
to netrender
. Here's an example:
unix% netrender -h holmes.cs -h shapiro.cs foo.rib holmes.CS.Berkeley.EDU: Network RenderMan Server 1.1a shapiro.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar unix%
ars
- All Render Servers~cs184/bin
there is an executable called
ars
(this stands for "All Rendering Servers") which will
return a list of machines optimized for the machine you are
on. Unfortunately the HPs have an upper-limit on the number of
machines which can be passed into netrender
. The program
ars
determines which machine you are on and selects a
close-to-optimal list of machines for you to render on. (You get twice
the render servers if you use an SGI machine) So, all you ever have to
do a distributed render is type:
unix% netrender `ars` foo.ribwhich if you were on an SGI would return:
unix% netrender `ars` foo.rib benet.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar ellison.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar heller.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar kilmer.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar melville.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar millay.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar miller.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar shapiro.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar sinclair.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar stowe.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar alcott.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar wright.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar thayer.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar thoreau.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar warren.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar holmes.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar walker.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar whitman.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar hughes.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar laviera.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar sandburg.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar unix%
netrender
for files that render fine using render
, ala:
unix% render hard.rib unix% netrender `ars` hard.rib (lots of these deleted for space reasons) machine.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar Bad bucket completion message.: Error 0 unix%or
unix% render hard.rib unix% netrender `ars` hard.rib (lots of these deleted for space reasons) machine.CS.Berkeley.EDU: Network RenderMan Server 1.1a PhotoRealistic RenderMan 3.5d Copyright (C) 1988-94 Pixar *** Error code 255 unix%In these cases, try replacing the
ars
with selected parts of what ars
returns. So if ars returns:
unix% ars -h benet.CS -h ellison.CS -h heller.CS -h kilmer.CS -h melville.CS -h millay.CS -h miller.CS -h shapiro.CS -h sinclair.CS -h stowe.CS unix%you might want to manually try a
netrender
to half of those, ala:
unix% netrender -h benet.CS -h ellison.CS -h heller.CS -h kilmer.CS -h melville.CS hard.rib unix%
.tif
file(s)unix% tiffdspy foo.tif unix%and if you have a sequence of files
foo1.tif, foo2.tif
, etc., you can use tiffdspy
for multiple images (as long as they are the same size) as in:
unix% tiffdspy foo*.tif unix%
/usr/local/prman
/usr/local/prman/look/examples/
netrender
, just call it again. Many errors are a result of an overloaded network license server and will be resolved after someone else's job is finished. Also, try removing the number of machines that are being called from netrender.
render, netrender, tiffdspy, etc
) are set up already.
unix% mkdir ~/renderman ; cd ~/renderman unix% cp ~cs184/prman/example/* . unix%You will find 4 files:
Makefile
- standard Makefile
cube.c
- geometry of a cube
simple.c
- simple example
hard.c
- hard example (animation, texture, recursive geometry)
cube.c
is a simple file in which we specify a unit cube centered around the origin whenever someone calls UnitCube()
.
The file simple.c
specifies the full scene (lights, camera, etc) for our first .rib
file.
To compile this and automagically generate the .tif
image, you just make the simple.pic, as in:
unix% gmake simple.pic gcc -ansi -I/usr/local/prman/tutorial -I/usr/local/prman/include -c cube.c gcc -ansi -I/usr/local/prman/tutorial -I/usr/local/prman/include -c simple.c gcc -ansi -I/usr/local/prman/tutorial -I/usr/local/prman/include -o simple.gen simple.o cube.o /usr/local/prman/lib/librib.a -lm simple.gen >simple.rib render simple.rib unix%this will create some new files:
cube.o
- the object file for cube.c
simple.o
- the object file for simple.c
simple.gen
- the executable for simple.c
which, when run, generates the file...
simple.rib
- the RIB file for simple.c
simple.tif
- the TIFF file for simple.c
hard.c
which generates 3 images:
![]() |
![]() |
![]() |
hard0.tif - Note the wood texture and the recursive geometry. |
hard1.tif - Note the wood texture changing and the geometry rotating. |
hard2.tif - Note the wood texture morphed to blue and the geometry continued to rotate. |
Makefile
funMakefile
is pretty general. You can:
gmake all
(same as just plain make
) - compiles and renders all the examples in the directory.
gmake pics
- generates all the pictures in the directory (equivalent to make all
)
gmake rib
- generates the RIB files but does not render them
gmake exec
- generates the executable .gen
files without executing them
gmake clean
- Removes all .slo
, .o
, .gen
, .rib
, and .tif
files
pic, rib, gen
) you can just generate them for one file (and not for both simple
and hard
by just saying gmake file.keyword
as in:
gmake simple.pic
- generates the pictures for simple.c
gmake hard.rib
- generates the rib file for hard.c
but does not render it
gmake simple.gen
- generates the executable .gen
file for simple.c
without executing it.
.rgb
(through a simple script) and use the
SGI movie player in ~cs184/bin.sgi/movie
while sitting on an SGI (see below)
mpeg_encode
imgcopy
(available on both HPs and SGIs, so this is preferred):
unix% foreach i (hard*.tif) ? /usr/sbin/imgcopy -fSGI $i $i.rgb ? end
unix% foreach i (hard*.tif) ? tifftopnm $i | pnmtosgi > $i.rgb ? end
.rgb
files, sit on an SGI and run the
program ~cs184/bin.sgi/movie
like so:
unix% ~cs184/bin.sgi/movie *.rgband the right mouse button allows you to control lots of cool things about the animation - loop it, slow it down, go frame by frame, etc. I've set up
.rgb
files from the hard.c
animation (but I made
the cube rotate a bit more for this animation) and they are in: ~cs184/prman/movie/hard[0-2][0-9].rgb
. So you would see the movie I created by typing (sitting in front of an SGI):
unix% ~cs184/bin.sgi/movie ~cs184/prman/movie/*
comp.graphics.rendering.renderman