Animation Project -- RendView
RendView is a utility to have films rendered using
POVRay (and maybe other raytracers)
and post-processed in a local distributed environment.
RendView is being developed by me (since 2001)
and distributed under the GNU GPL
(General Public License).
Note: You need a patch before using POVRay-3.6/3.6.1 together with
RendView. Details.
Status of POVRay-3.7 unknown.
News
- 2006/02/28: Version 0.7.1c (beta)
-
Bugfix for frame clock support. Added example in examples/.
- 2006/01/28: Version 0.7.1b (beta)
-
Minor changes to make rendview compile cleanly with recent versions
of gcc and use hlib-1.1.1.
- 2004/05/22: Version 0.7.1a (beta)
-
Minor bugfix release: Forgot to close /dev/urandom.
Compilation on cygwin should now work again;
now compiles cleanly with GCC-3.4 and hlib-1.0.0.
- 2004/03/25: Version 0.7.1 (beta)
-
Some minor features added: option -daemon
(useful to start it via ssh), logging facility to save output in
memory (only useful for not yet implemented remote admin port functionality),
incomplete admin port implementation (do not enable now).
Fixed bugs: Resuming partially rendered frames should now work
(again) with recent version of POVRay (POVRay-3.50c changed behaviour),
fixed problem with challenge response auth (rejections
of correct responses), fixed (seldom) stray characters in help hext,
fixed keepalive timeouts during up/downloading of very large files,
fixed two incorrectly failing (too strict) assertions and some other things.
- 2003/08/15: Version 0.7.0 (beta)
-
Some minor features added: RendView will now also render .ini
files: just use the .ini file as input frame pattern instead of the
.pov file and add the associated .pov file as
additional file (-l-r-files),
example here; furthermore,
POVRay frame clock support has been changed; read more
here.
Fixed bugs: Stopping POVRay-3.5 now works (again?); added new
render desc parameter stopsig which can be
SIGTSTP (default) or SIGSTOP,
details; finite() and
isinf()/isnan() are no longer required which improves portability.
- 2003/07/15: Version 0.6.9 (beta)
-
Again some bugfixes: Prevent unfinished frames from
dropping out as "finished" when not processed at all (huh? :); transfer the
primary render/filter input/output file names when using LDR (instead
of using fixed f-%d-%d...); LDR client should now only delete
downloaded input files; when using the frame clock, the render
input file is no longer downloaded repeatedly for no reason; some more
minor fixes.
...and new features: It should now be possible to run LDR using a
shared directory like NFS, see
here for details, and
some sort of task fit strategy is finally implemented, details
here.
- 2003/04/07: Version 0.6.8 (beta)
-
Several enhancements and bugfixes: Check modification time of additional
files [added stat(2) cache for efficiency; hope it does not
play tricks on us...], read LDR password from file, automatic compensation
for different system times, fixed incorrect paths when using
-l-r-dir or -l-f-dir [still not well tested], fixed wrong
description of -L-timestamp-thresh, prevent downloading
recently modified files more than once.
- 2003/04/01: Version 0.6.7a (beta)
-
Some bugs were fixed; RendView on 64bit Alpha Linux on should work now.
- 2003/03/26: Initial beta release: Version 0.6.7 (beta)
-
After more than 2 years of development, RendView is finally about to
get released to the public.
Brief overview of RendView
The primary intent of RendViev is to be an easy-to-set up
render farm manager: Say you have access to a couple of Linux workstations
which are idle during the night and you want to use them for your
rendering - without installation of external services such as MPI,
without requiring a firewall or opening insecure services such as
rsh.
Simply spoken it does the following: You give it a number of files to
be rendered (i.e. f000000.pov .. f000123.pov,
scene.pov, colors.inc)
and then call RendView to have that done, either locally or in a LAN.
RendView will then call the renderer (currently, only POVRay is supported)
and (if told so) also a filter on the rendered frame.
Or, your animation uses the POVRay clock value and you want to animate
sceleA.pov in 72 frames with clock 1..3 and
sceneB.pov with clock 0..15 in 120 frames.
Of course, that's not all. Here is a list of features; please check the
docu for more complete information and how to
launch RendView.
Features:
-
Job control: ability to launch more than one render/filter job at a time
(i.e. if you have a dual processor SMP box you may want to use 2 processes
at a time). (-ld-njobs=)
-
LDR, Local Distributed Rendering: RendView implements an LDR client and
LDR server (in the same binary "rendview").
RendView as LDR server can distribute rendering and filtering jobs to any
number of LDR clients in the local network. It does time stamp and size
checks to prevent unecessary file downloads and implemnts automatic
correction for server/client system clock differences.
-
Continuing operation: RendView can only (re-)render/filter frames which
got modified, just like make(1) decides whether to (re-)compile a file
(-l-cont).
-
Resume operation: for renderers which support that (POVRay), frames which
were rendered partly can be resumed (-l-rcont).
-
Continuing and resume also work with LDR; required files are downloaded
automatically to the client, (un)finished output uploaded to the server.
-
Lots of (colored) useful
status and info output on the terminal.
-
Lots of tuning options which can be passed on the command line or via
the environment vars RENDVIEWARGS/ LDRCLIENTARGS/ LDRSERVERARGS.
-
Per-frame blocks: you can specify what shall be done on a per-frame basis
using frame number ranges (e.g. 10-19: use filter A, 5-12: render with
radiosity, 20-30: use filter B)
-
Little overhead. RendView is single-threaded and does no busy-waiting
at any time.
-
More features: execution, tidle and job timeouts, nice values, re-connect
lost clients, stop/cont, LDR authentication, load control,
POVRay frame clock support, POVRay
spurious success detection,
client/server time correction.
Why not use PVM- or MPI-POV?
The initial problem which lead to the development of RendView was the
following: You have a large number of POV files
(frame0000.pov.. frame0720.pov) generated automatically
by a self-developed animation system and you want to have all these frames
rendered.
Principally, there are two ways of getting that done: Either you render
one frame at a time on all computers simultaniously (using
PVM- or
MPI-POV)
or you render one frame one each box.
Initially, PVM-Pov and MPI-POV were given a try (i.e. rendering one frame
at a time on several computers in parallel). However, it showed that this
introduced a significant overhead. In fact, using PVM-POV, it was
estimated that probably twice as many frames could have been
rendered on an Alpha cluster when rendering one frame on one processor
instead of using PVM because of parsing overhead
(which accumulates when using PVM as every PVM client/slave parses the
input file). Of course, the exact ratio depends on parsing versus
rendering time.
OTOH, MPI-POV tended to introduce artifacts from the previous frame
into the currently rendered frame. The problem only occured when
launching it as quickly as possible (what you would always do...).
This is probably already fixed.
If you have a dedicated MPI cluster, then you may be fine with
MPI-POV.
But only few people are lucky and have that hardware. Imagine
you "just" have access to a set of workstations which are idle during the
night.
These boxes are most certainly attached to the internet and you cannot
expect people to set up insecure rsh (as used by MPI IIRC) or
a firewall just so that you can do your rendering.
Replacing rsh by ssh is possible but again introduces
overhead (encryption, decryption, transport overhead and authentication
overhead).
As long as there are more frames to render than available processors,
it is most efficient to render one frame on one processor, e.g. using
vanilla POVRay and launching one POV-Ray process on each processor (on
all computers in the render farm). That's what RendView does.
Furthermore, RendView is easy to set up: just start the LDR client on
the client machines. No need for a firewall, insecure services or things
like that. The LDR client uses a challenge response auth (using SHA hash,
AFAIK not vulnerable to replay attacks; of course this prevents anyone
from sniffing the password on the net)
to authenticate the LDR server to prevent unknown people from using
it.
And finally, RendView has lots of additional
features...
(Note, however, that you can probably also use RendView to launch PVM-POV or
MPI-POV for each frame in case you really find that useful.)
|