[comp.graphics] Scene Description Standard

david@mks.com (David Rowley) (04/30/91)

One of the harder problems in producing snazzy computer graphics seems
to be the modelling, rather than the rendering.  One reason for this is
the lack of a standard modelling format.

Would it make sense to define a new, say text-based, format to describe
a world, such that a renderer could use as much information from it
as possible, and chuck the rest ?

There could be the standard sort of NFF, Rayshade type primitives
(sphere, ellipsoid, cone, polygon, box, etc) with a set of filters
that would convert higher-level primitives to lower-level ones for
those renderers that need that lower level.  For example a sphere
could be tessellated into triangles, or polygons, for those renderers
without a general 'sphere' primitive.  Spline objects could be
translated into polygons.  The filters would be written in portable 'C'
so that the transformations were available on all platforms.

In fact a filter could be created to convert *everything* down to
polygons, then a display program could simply display a wire-frame
rendering as a fast model preview.

Filters could also be written to translate this standard format into
a format accepted by a particular renderer.

Another filter could take a set of polygons and produce a hidden-line
rendering.

By developing general-purpose primitive-conversion filters, all renderers
would be able to work with all scene descriptions, at least to some extent.

Perhaps a CSG filter could convert a CSG description to polygons for those
renderers without that capability.  Some of these filters may be quite
complex.

Special-purpose filters could be created to generate 3D text, surfaces
of rotation, or extrusion.

Surface descriptions are harder than modelling the geometry of a scene.
There should be enough described in the standard to handle the most
common parameters, such as ambient, diffuse, specular, etc, but
there should be a general way of handling procedural surfaces such as
wood, marble, etc.

Interactive X-Windows, Microsoft Windows, or whatever applications could
be created that would read and write this format, to allow manipulation
of the world.  Those without a modeller could craft scene descriptions
by hand.

Does it make sense ?  Anyone interested ?

-- 
     ll  // // ,~/~~\'   David Rowley
    /ll/// //l' `\\\     Mortice Kern Systems Inc.
   / l //_// ll\___/     35 King Street North, Waterloo, ON, Canada N2J 2W9
O_/                      519/884-2251, FAX 519/884-8861, david@mks.com

msr@gator.cacs.usl.edu (Srinivas R. Manapragada) (04/30/91)

In article <1991Apr30.003612.16050@mks.com> david@mks.com (David Rowley) writes:
>One of the harder problems in producing snazzy computer graphics seems
>to be the modelling, rather than the rendering.  One reason for this is
>the lack of a standard modelling format.
>
>Would it make sense to define a new, say text-based, format to describe
>a world, such that a renderer could use as much information from it
>as possible, and chuck the rest ?
> ...
>Does it make sense ?  Anyone interested ?

Yes it would be nice to have a standard. However it should be more expressive
and powerful than the language of say rayshade, which allows hierarchical
objects to be defined rather easily. However one should also have some kind of
procedural features. For example say while describing a forest I should be able
to define it as

	for(x = 0; x < 100; x++)
	    for(y = 0; y < 100; y++)
		FirTree(x + dither(), y + dither());
	
	where FirTree is the parameterized object and dither provides a small
amount of +- deviation. Ofcourse the object need not have its position as a
parameter since they may be more naturally handled by modelling transformations
but it may be more important to parameterize by, say, the surface color, texture
etc.

Also very compact descriptions arise through the use of fractals, IFS's etc., I
wonder if they can be pulled into the language.

_Srini_

jk87377@cc.tut.fi (Juhana Kouhia) (04/30/91)

In article <30137@rouge.usl.edu> msr@gator.cacs.usl.edu (Srinivas R. Manapragada) writes:
>
>However one should also have some kind of procedural features.
>
>	for(x = 0; x < 100; x++)
>	    for(y = 0; y < 100; y++)
>		FirTree(x + dither(), y + dither());

Now the main algorithm for the ray tracers in the net is

   1. build the scene
   2. trace it

I have designed my program so that I can generate the objects on the fly
with the modelling language I have in the program.
For example, if I have a crass field I can present it by program code,
it takes a bit memory and is nearly as fast as if I store each crass
to the memory; a large one memory.
In the article John M. Snyder and Alan H. Barr, Ray Tracing Complex
Models Containing Surface Tessellations, SIGGRAPH '87 Proceedings they
made a large field by copying a small crass field part to the
several places; of course you don't see the similarities easily, but
if our field is not equally distributed it causes problems with the
memory.

>but it may be more important to parameterize by, say, the surface
>color, texture etc.

If you mean "sphere r g b texture pos_x pos_y pos_z"-type
presentation I say no.
It's much easier if every parameter is possible to replace by a
small program - user can make that program too.
RenderMan is good example.

That all guess means that the program must be in object format not
executable.

Juhana Kouhia

bcorrie@csr (Brian Corrie) (04/30/91)

msr@gator.cacs.usl.edu (Srinivas R. Manapragada) writes:
>In article <1991Apr30.003612.16050@mks.com> david@mks.com (David Rowley) writes:
>>One of the harder problems in producing snazzy computer graphics seems
>>to be the modelling, rather than the rendering.  One reason for this is
>>the lack of a standard modelling format.
>>
>>Would it make sense to define a new, say text-based, format to describe
>>a world, such that a renderer could use as much information from it
>>as possible, and chuck the rest ?
>> ...
>>Does it make sense ?  Anyone interested ?
>Yes it would be nice to have a standard. However it should be more expressive
>and powerful than the language of say rayshade, which allows hierarchical
>objects to be defined rather easily. However one should also have some kind of
>procedural features. For example say while describing a forest I should be able
>to define it as

>	for(x = 0; x < 100; x++)
>	    for(y = 0; y < 100; y++)
>		FirTree(x + dither(), y + dither());
>	
>	where FirTree is the parameterized object and dither provides a small
>amount of +- deviation. Ofcourse the object need not have its position as a
>parameter since they may be more naturally handled by modelling transformations
>but it may be more important to parameterize by, say, the surface color, texture
>etc.

>Also very compact descriptions arise through the use of fractals, IFS's etc., I
>wonder if they can be pulled into the language.

>_Srini_

Makes wonderful sense. In fact, this is what the RenderMan Specification tries
to do. Its definition contains a multitude of primitves, CSG, etc. etc. One
could write a book on it.... Wait a second, there is a book on it 8-)

Check out ``The RenderMan Companion'' by Steve Upstill. Its published by
Addison Wesley and the ISBN number is 0-201-50868-0. A more technical document
is available from PIXAR as well, giving the gory details of the interface. Note
that ``The RenderMan Companion'' is a pretty good graphics text as well.

It should be possible to do all of the above with the RenderMan Interface.

	B
--
                  Brian Corrie (bcorrie@csr.uvic.ca)
Under the most rigorously controlled conditions of pressure, temperature,
volume, humidity and other variables, the organism will do as it damn well
pleases. Sounds like some of the code I have written......  8-)

bcorrie@csr (Brian Corrie) (04/30/91)

I apoligize for posting twice, but on re-reading Davids article, I thought it
may have deserved a more extensive explanation of what the RenderMan interface
includes. If you haven't seen my previous posting, it just gives the ISBN
number of the ``RenderMan Companion''.

david@mks.com (David Rowley) writes:
>One of the harder problems in producing snazzy computer graphics seems
>to be the modelling, rather than the rendering.  One reason for this is
>the lack of a standard modelling format.

...and the lack of modelling software. Compare the number of PD renderers
to the number of PD modellers and you will see what I mean.

>Would it make sense to define a new, say text-based, format to describe
>a world, such that a renderer could use as much information from it
>as possible, and chuck the rest ?

See my previous posting on RenderMan for a brief description of Pixar's
rendering interface.

>There could be the standard sort of NFF, Rayshade type primitives
>(sphere, ellipsoid, cone, polygon, box, etc) with a set of filters

RenderMan has them all, along with patches (NURBS and other flavors) and CSG.

>that would convert higher-level primitives to lower-level ones for
>those renderers that need that lower level.  For example a sphere
>could be tessellated into triangles, or polygons, for those renderers
>without a general 'sphere' primitive.  Spline objects could be
>translated into polygons.  The filters would be written in portable 'C'
>so that the transformations were available on all platforms.

>In fact a filter could be created to convert *everything* down to
>polygons, then a display program could simply display a wire-frame
>rendering as a fast model preview.

As a matter of fact, Pixar's renderers do exactly that, except they coerce
a realistic image out of their polygons. They create sub-pixel polygons
(that is polygons that are smaller than a pixel) out of all their primitives
and render that. It simplifies the process, and allows some nifty effects to
be done easily.

>Filters could also be written to translate this standard format into
>a format accepted by a particular renderer.

>Another filter could take a set of polygons and produce a hidden-line
>rendering.

>By developing general-purpose primitive-conversion filters, all renderers
>would be able to work with all scene descriptions, at least to some extent.

>Perhaps a CSG filter could convert a CSG description to polygons for those
>renderers without that capability.  Some of these filters may be quite
>complex.

>Special-purpose filters could be created to generate 3D text, surfaces
>of rotation, or extrusion.

That is the idea behind RenderMan. A renderer supports what it can, and ignores
what it can't. To be a RenderMan compliant renderer, there is a minimal amount
of functionality that must be supported. It is the job of the renderer to take
the RenderMan description and convert that to something it understands. To do
this, it is possible that filters like you describe above would be used.

>Surface descriptions are harder than modelling the geometry of a scene.
>There should be enough described in the standard to handle the most
>common parameters, such as ambient, diffuse, specular, etc, but
>there should be a general way of handling procedural surfaces such as
>wood, marble, etc.

The RenderMan Shading Language fits the bill here. Some great effects have
been created with this language. Essentially, the renderer is responsible
for interpreting a C like shader description for each surface. Voila,
programmable shaders. Just like that! OK, maybe it ain't that easy, but its
possible. Check out the RenderMan Companion for some pretty slick pictures.

>Interactive X-Windows, Microsoft Windows, or whatever applications could
>be created that would read and write this format, to allow manipulation
>of the world.  Those without a modeller could craft scene descriptions
>by hand.

>Does it make sense ?  Anyone interested ?

In summary, RenderMan is a scene description language, and thats it. Its not
a modeller and its not a renderer. It IS the interface betwen the two.
It is a powerful scene description language. The problem now is that
few rendering systems can support the ``minimal'' amount of functionality
that is required before you can say the renderer is RenderMan compliant.

On the modeling side, many modelling systems output the RenderMan Interface
Bytestream (RIB) that is the RenderMan language. This is the easy part, since
you just have to pick the appropriate RIB primitves and output them. Little
extra work is required. What I would like to see is a modeller that supports
the full range of the RenderMan interface. What a system that would be....

8-)

>-- 
>     ll  // // ,~/~~\'   David Rowley
>    /ll/// //l' `\\\     Mortice Kern Systems Inc.
>   / l //_// ll\___/     35 King Street North, Waterloo, ON, Canada N2J 2W9
>O_/                      519/884-2251, FAX 519/884-8861, david@mks.com

Hope this helps and clarifies things a bit. I apoligize for the two posts.

	B
--
                  Brian Corrie (bcorrie@csr.uvic.ca)
Under the most rigorously controlled conditions of pressure, temperature,
volume, humidity and other variables, the organism will do as it damn well
pleases. Sounds like some of the code I have written......  8-)

yeidel@tomar.accs.wsu.edu (Joshua Yeidel) (05/01/91)

Isn't this approximately what RenderMan is trying to accomplish?

matt@mandala.think.com (Matt Fitzgibbon) (05/01/91)

In article <30137@rouge.usl.edu> msr@gator.cacs.usl.edu (Srinivas R. Manapragada) writes:

   Yes it would be nice to have a standard. However it should be more
   expressive
   and powerful than the language of say rayshade, which allows hierarchical
   objects to be defined rather easily. However one should also have some
   kind of procedural features.

Rather than define another new language, has anyone explored using
Lisp or some subset as a geometric description language?

-Matt

woolstar@nntp-server.caltech.edu (John D. Woolverton) (05/01/91)

   I would love to have a standard interface to work with
(from both sides: modeling and rendering).  However my investigation
of RenderMan has been _very_ dissapointing.

   Perhapse to the world of 3D Z-buffers and other scan line
rendering programs, RenderMan is enough.  But for work in
RayTracing and beyond, there are too many things missing.

   Conceptually, Renderman seems to be designed like PostScript.
One renderman file, one image.  While this works for the printed
page, animations and 3D graphics have continuity across frames
that RenderMan cannot describe or take advantage of.
   Renderman is also grossly inefficient for representing
polygons, as it takes a [vertex, vertex, vertex, close] form for
representing each face instead of a list of verteces and then a
face list.
   Finally the concept of an actor/object is non-existant
in RenderMan.  There is no grouping of faces with different
properties or relationships defined.

   While one could take one's own model from another system
and extract the Renderman Commands for it, it does not seem
possible to go the other way.  Witness all the modeling programs
that support the RenderMan interface, but use their own 
formats for working data (scene and objects).  [all of them!]

   PLEASE SOMEONE!  Work on a scene description file format
that will describe an animation or scene, not just the
resultant list of polygons.

My proposal:
	One object format that includes geometry primatives
and surface descriptions.
	One model format that describes position and motion
of objects in a scene.
	Extentions to both for specific shading and 
(for ray tracing) geometry organization (bounding boxes...).

	John D. Woolverton, Video Bits
	woolstar@cobalt.caltech.edu

will@rins.ryukoku.ac.jp (will) (05/01/91)

In article <MATT.91Apr30142917@mandala.think.com>, matt@mandala.think.com (Matt Fitzgibbon) writes:
>Rather than define another new language, has anyone explored using
>Lisp or some subset as a geometric description language?
>

	If I remember correctly, SYMBOLICS Corp. uses just this technique.  I
	think it was LISP based.  I wonder, do they still exist?  Anyone know?

                                        William Dee Rieken
                                        Researcher, Computer Visualization
                                        Faculty of Science and Technology
                                        Ryukoku University
                                        Seta, Otsu 520-21,
                                        Japan

                                        Tel: 0775-43-7418(direct)
                                        Fax: 0775-43-7749
                                        will@rins.ryukoku.ac.jp

david@mks.com (David Rowley) (05/01/91)

Many people have suggested Renderman as being ``the answer''.

What I'm really looking for is something more extensive than NFF or OFF
but much less ambitious than Renderman.  Having to write a full
Renderman 'compiler' just to use a scene description seems overkill to
me.  I want to see something that enables the exchange of modeled objects,
in a simple portable way.  The standard should be able to be read on
even the smallest of machines, by the simplest of renderers.  One
of the main reasons it seems that the teapot surfaces all over the
place is that it is one of the most readily available models, found
in a number of different formats.  People should be able to trade
models in the same way people are currently trading 'GIF' images.

Is the RIB format simply a Renderman program compiled into a bytestream ?
If it is a reasonable subset, perhaps it could be used.  Unfortunately
it is not documented (or even really discussed) in Upstill's Renderman
Companion.

I like the programmatic approach of Renderman, but the overhead of
interpretation just to get at the data is too high.  The shader
language is particularly neat, and perhaps that is a reasonable
way to describe that portion.  I'd like to see the programmatic
approach used at a higher level, to *create* scenes modeled in this
format.  This means that the user of the data does not need to
understand the same programming language.

There is also Pixar's copyright limitations on Renderman that could cause
problems.  They do license the interface without charge, but they
have the right to refuse to do so.  Are they likely to approve a
public domain implementation ?

One person mentioned a lisp-style format.  This is more what I had
in mind.  It should be something that can be parsed in a simple manner.
It should be trivial to write a filter to convert the standard format
to the specific input format of a renderer.  The main point being
keep it as simple, yet extensible, as possible.  You shouldn't
need Yacc to parse it.

David

-- 
     ll  // // ,~/~~\'   David Rowley
    /ll/// //l' `\\\     Mortice Kern Systems Inc.
   / l //_// ll\___/     35 King Street North, Waterloo, ON, Canada N2J 2W9
O_/                      519/884-2251, FAX 519/884-8861, david@mks.com

dbc@cs.brown.edu (Brook Conner) (05/01/91)

In article <1991Apr30.211131.7166@nntp-server.caltech.edu>, woolstar@nntp-server.caltech.edu (John D. Woolverton) writes:
|> 
|>    I would love to have a standard interface to work with
|> (from both sides: modeling and rendering).  However my investigation
|> of RenderMan has been _very_ dissapointing.
|> 
|>    Perhapse to the world of 3D Z-buffers and other scan line
|> rendering programs, RenderMan is enough.  But for work in
|> RayTracing and beyond, there are too many things missing.

Quite agreed. RenderMan has only the slightest concessions
to other rendering paradigms -- loopholes in the shading language
for ray casting or radiance calculation. The fact that the
RenderMan Interface has builtin support fo depth maps to
calculate shadows shows just how Pixar expects you to do things.
An abstract scene description it is not.

|> 
|>    Conceptually, Renderman seems to be designed like PostScript.
|> One renderman file, one image.  While this works for the printed
|> page, animations and 3D graphics have continuity across frames
|> that RenderMan cannot describe or take advantage of.

I think Pixar has even made the comparison between RenderMan and PostScript
(notice the funny capitalization).  And you're right, its pretty
useless for nice things like interfrace coherency.

|>    Renderman is also grossly inefficient for representing
|> polygons, as it takes a [vertex, vertex, vertex, close] form for
|> representing each face instead of a list of verteces and then a
|> face list.

But its still O(n) space :-)

|>    Finally the concept of an actor/object is non-existant
|> in RenderMan.  There is no grouping of faces with different
|> properties or relationships defined.

Maybe in RIB, but the C protocol is pretty PHIGS-like in its
structure.  Of course, PHIGS is hardly an example of a
sophisticated, actor or object based environment.

|>    While one could take one's own model from another system
|> and extract the Renderman Commands for it, it does not seem
|> possible to go the other way.  Witness all the modeling programs
|> that support the RenderMan interface, but use their own 
|> formats for working data (scene and objects).  [all of them!]

Yes, it would be like converting PostScript to some other
vector drawing format.  In general, it isn't possible without
loss of a lot of information.

|>    PLEASE SOMEONE!  Work on a scene description file format
|> that will describe an animation or scene, not just the
|> resultant list of polygons.
|> 
|> My proposal:
|> 	One object format that includes geometry primatives
|> and surface descriptions.
|> 	One model format that describes position and motion
|> of objects in a scene.
|> 	Extentions to both for specific shading and 
|> (for ray tracing) geometry organization (bounding boxes...).

My opinion:  A scene description broken down into Modeling,
Animation, and Rendering components (what you have suggested)
is woefully inadequate.  Suppose your constructive solid geometry
objects change over time?  Maybe your surface attributes do, too.
Perhaps you want animated deformations.  In short, nontrivial
scenes will require a richer environment than Model - Animate - Render.
M-A-R is certainly the traditional graphics pipeline, but it is not
the way to go for anything more than flying logos.

|> 
|> 	John D. Woolverton, Video Bits
|> 	woolstar@cobalt.caltech.edu

Brook

-- 
Brook Conner		| Klacktoveedsedstene
Brown Computer Graphics	| Fortune sez: Brook's Law -- Adding manpower to a late
dbc@cs.brown.edu     	|  	software project makes it later
uunet!brunix!dbc dbc@browncs.bitnet   Box 1910 Brown U Prov RI 02912

stparker@uokmax.ecn.uoknor.edu (Steve Parker) (05/01/91)

woolstar@nntp-server.caltech.edu (John D. Woolverton) writes:

>   Perhapse to the world of 3D Z-buffers and other scan line
>rendering programs, RenderMan is enough.  But for work in
>RayTracing and beyond, there are too many things missing.

>   PLEASE SOMEONE!  Work on a scene description file format
>that will describe an animation or scene, not just the
>resultant list of polygons.


    Well, I am not Mr. Computer Graphics expert yet, but I am working
diligently on being one.  For the last four months, I have been busily
working on my own raytracing program.  I have spent most of that time
working on an input language.

    I find the same shortcomings in current file formats - They stink
for animation.  If I have a large scene, I want to read it in *once*
and generate hundreds of views or variations of the one scene.

    Computers are getting fast enough to make ray traced animations
even more feasible.

    With these observations, I set out to design my input language.
I have come up with an interpretive type language which has proved to
be very powerful and very expandable.   At the bottom, I have attached
a short piece of code which  renders a CSG face.  I would appreciate any
inputs or *constructive* criticisms.

    Much of my language is incomplete, but some of the features which
will be implemented include:

	- if else contstructs
	- for and while loops
	- Object copying.
	- Default object values
	- Object paths and camera paths - for motion blur
	- Built in matrix and vector manipulation

    One feature that I like is that I can add a primitive without
changing the yacc or lex code.  I simply put the name of the new primitive
in a file, write all of the associated routines, add it to the Makefile
and type make.

    The language is really powerful in my opinion, but what do I know?

    I do not want to bore the entire group with the gory details, but
I can supply more information if anyone would like it.

    Again, I would appreciate any input.

		Steve Parker
		sgp@phyast.nhn.uoknor.edu





/*
 * render a CSG face
 */

/*
 * Note: the names light1, light2, and light3 are not special, they
 *       are simply variable names which are assigned to the lights.
 *       They could have just as easily been Larry, Curly and Moe.
 */
light1=light_source(POSITION={0,-10,30},BRIGHTNESS=1,COLOR=[1,1,1],TYPE=Point);
light2=light_source(POSITION={0,-10,-10},BRIGHTNESS=.8,COLOR=[1,1,1],TYPE=Point);
light3=light_source(POSITION={0,-1000,0},BRIGHTNESS=.8,COLOR=[1,1,1],TYPE=Point);
lighting(SOURCE=light1,SOURCE=light2,SOURCE=light3);

/*
 *  The idea behind these is that they will be pretty much the same for
 *  most cameras
 * 
 */
params=parameter(SUPERSAMPLING=Jittered, SAMPLES=1, MAX_RAYTREE_DEPTH=4,
              CUTOFF_THRESHOLD=.001, SHADOWS=True);

camera1=camera(EYE_POINT={1,-4,0},LOOK_POINT={0,0,0},UP_VECTOR={0,0,1},
              FOV=45, XRESOLUTION=250, YRESOLUTION=250,
              XOUTPUT=True, TITLE="Michele's Face",
              OUTFILE="face.rle",PARAMETERS=params);

/*
 * Set up surfaces
 */
mouthsurf=surface(AMBIENT=[.01,.01,.01],DIFFUSE=[.8,.01,.01],SPECULAR=[.9,.9,.9],
              SR_COEFF=25, REFLECTIVITY=.7, TRANSPARENCY=0);
nosesurf=surface(AMBIENT=[.01,.01,.01],DIFFUSE=[.7,0,.5],SPECULAR=[.9,.9,.9],
              SR_COEFF=25, REFLECTIVITY=.9, TRANSPARENCY=0);
eyesurf=surface(AMBIENT=[.01,.01,.01],DIFFUSE=[.5,.3,.9],SPECULAR=[.9,.9,.9],
              SR_COEFF=25, REFLECTIVITY=.6, TRANSPARENCY=0);
facesurf=surface(AMBIENT=[.01,.01,.01],DIFFUSE=[.9,.7,.5],SPECULAR=[.9,.9,.9],
              SR_COEFF=25, REFLECTIVITY=.4, TRANSPARENCY=0);
hairsurf=surface(AMBIENT=[0,0,0],DIFFUSE=[.5,.5,.5],SPECULAR=[0,0,0],
              SR_COEFF=25, REFLECTIVITY=.1, TRANSPARENCY=0);

/*
 * Create the primitives.  Again face, left_eye, right_eye, etc. are
 * just variable names
 *
 */
face=sphere(POSITION={0,0,0},RADIUS=1.2, SURFACE=facesurf);
left_eye=sphere(POSITION={-.5,-.8,.6},RADIUS=.3,SURFACE=eyesurf);
right_eye=sphere(POSITION={.5,-.8,.6},RADIUS=.3,SURFACE=eyesurf);
left_nose=sphere(POSITION={-.2,-.95,0},RADIUS=.4,SURFACE=nosesurf);
right_nose=sphere(POSITION={.2,-.95,0},RADIUS=.4,SURFACE=nosesurf);
mouth_top=sphere(POSITION={0,-1.32,.15},RADIUS=1,SURFACE=mouthsurf);
mouth_bot=sphere(POSITION={0,-.82,-.1},RADIUS=.8,SURFACE=mouthsurf);

/*
 * CSG operations
 */
eyes=left_eye+right_eye;
nose=left_nose&right_nose;
mouth=mouth_bot-mouth_top;

/*
 * A background color may also be specified here
 */
world(OBJECT=(face-eyes)+(mouth+nose));

/*
 * Render the image
 */
render(CAMERA=camera1);

/* And we could then continue and render another view, add objects, or
 * just render something else completely different altogether
 */

bcorrie@csr (Brian Corrie) (05/02/91)

dbc@cs.brown.edu (Brook Conner) writes:
>In article <1991Apr30.211131.7166@nntp-server.caltech.edu>, woolstar@nntp-server.caltech.edu (John D. Woolverton) writes:
>|> 
>|>    I would love to have a standard interface to work with
>|> (from both sides: modeling and rendering).  However my investigation
>|> of RenderMan has been _very_ dissapointing.
>|> 
>|>    Perhapse to the world of 3D Z-buffers and other scan line
>|> rendering programs, RenderMan is enough.  But for work in
>|> RayTracing and beyond, there are too many things missing.

>Quite agreed. RenderMan has only the slightest concessions
>to other rendering paradigms -- loopholes in the shading language
>for ray casting or radiance calculation. The fact that the
>RenderMan Interface has builtin support fo depth maps to
>calculate shadows shows just how Pixar expects you to do things.
>An abstract scene description it is not.

I agree, RenderMan is very biased towards their micro-polygon renderers, but
that doesn't mean it is not a giant step forward in some areas of the
modeler/renderer interface. If you think about it (just step back for a second)
almost all of the micro-polygon biased stuff is in the shading language. This
is VERY unfortunate, becuase I think this is the most powerful part of the
RenderMan interface. If you look at the geometric part of RenderMan, it is
really just a very rich and flexible geometric description. I am not an expert
on that part of RenderMan (I've been concentrating on the shading language),
but I don't beleive there is anything earth shattering there. What is exciting
is the shading language and its potential.

>|> 
>|>    Conceptually, Renderman seems to be designed like PostScript.
>|> One renderman file, one image.  While this works for the printed
>|> page, animations and 3D graphics have continuity across frames
>|> that RenderMan cannot describe or take advantage of.

>I think Pixar has even made the comparison between RenderMan and PostScript
>(notice the funny capitalization).  And you're right, its pretty
>useless for nice things like interfrace coherency.

>|>    Renderman is also grossly inefficient for representing
>|> polygons, as it takes a [vertex, vertex, vertex, close] form for
>|> representing each face instead of a list of verteces and then a
>|> face list.

>But its still O(n) space :-)

Now guys, this just ain't true. The RiPointsPolygon C binding takes a list of
vertices and a list of indexes into the vertex list to form the polygons.
Check out pages 80-83 of ``The RenderMan Companion''.

>|>    Finally the concept of an actor/object is non-existant
>|> in RenderMan.  There is no grouping of faces with different
>|> properties or relationships defined.

>Maybe in RIB, but the C protocol is pretty PHIGS-like in its
>structure.  Of course, PHIGS is hardly an example of a
>sophisticated, actor or object based environment.

Like I said, I'm really a rookie at the geometric part or RenderMan.
In fact, just reading these messages made me go take a look at the
RIB stuff. Lo and behold, its true, there is no for loops or such in RIB.
It is purely a geometry description. Oh well, can't have everything ....
The C binding is much more powerful than plain RIB though

Also, I'm not an expert in animation, and I don't really know what an ``actor''
is (although an intelligent guess may be close 8-). RenderMan does make an
attempt at addressing animation (RiFrameBegin/RiFrameEnd pairs), but I don't
know that that was its intended strong point, so I will beleive you that it is
weak in that area.

>|>    While one could take one's own model from another system
>|> and extract the Renderman Commands for it, it does not seem
>|> possible to go the other way.  Witness all the modeling programs
>|> that support the RenderMan interface, but use their own 
>|> formats for working data (scene and objects).  [all of them!]

>Yes, it would be like converting PostScript to some other
>vector drawing format.  In general, it isn't possible without
>loss of a lot of information.

True in a sense. That is, if format A is a polygon only format, then it is
possible to convert from RenderMan to format A, but probably not back again.
Of course, that is always true of a richer format being converted to a simpler
form.

>|>    PLEASE SOMEONE!  Work on a scene description file format
>|> that will describe an animation or scene, not just the
>|> resultant list of polygons.
>|> 
>|> My proposal:
>|> 	One object format that includes geometry primatives
>|> and surface descriptions.
>|> 	One model format that describes position and motion
>|> of objects in a scene.
>|> 	Extentions to both for specific shading and 
>|> (for ray tracing) geometry organization (bounding boxes...).

>My opinion:  A scene description broken down into Modeling,
>Animation, and Rendering components (what you have suggested)
>is woefully inadequate.  Suppose your constructive solid geometry
>objects change over time?  Maybe your surface attributes do, too.
>Perhaps you want animated deformations.  In short, nontrivial
>scenes will require a richer environment than Model - Animate - Render.
>M-A-R is certainly the traditional graphics pipeline, but it is not
>the way to go for anything more than flying logos.

>|> 
>|> 	John D. Woolverton, Video Bits
>|> 	woolstar@cobalt.caltech.edu

>Brook

>-- 
>Brook Conner		| Klacktoveedsedstene
>Brown Computer Graphics	| Fortune sez: Brook's Law -- Adding manpower to a late
>dbc@cs.brown.edu     	|  	software project makes it later
>uunet!brunix!dbc dbc@browncs.bitnet   Box 1910 Brown U Prov RI 02912

After my defense of RenderMan, I'll end by saying that I don't think it is
good enough either. I beleive Brook and John in their claims that it is
lacking in animation support, but I don't beleive that that was its intended
purpose anyway. I beleive Pixar itself uses other tools (both home brewed
and commercial) to do its animations. I may be wrong, but I doubt it.

I also agree that RenderMan is too micro-polygon biased in the shading
language area. It is relatively easy to implement most shading techniques
supported by RenderMan with micro-polygons, while many are very difficult
to implement with other rendering techniques (ray tracing/radiosity).

Anyway, back to work....

	B

--
                  Brian Corrie (bcorrie@csr.uvic.ca)
Under the most rigorously controlled conditions of pressure, temperature,
volume, humidity and other variables, the organism will do as it damn well
pleases. Sounds like some of the code I have written......  8-)

bcorrie@csr (Brian Corrie) (05/02/91)

david@mks.com (David Rowley) writes:
>Many people have suggested Renderman as being ``the answer''.

I don't think it is ``the answer'', but it is a step forward. See my post
just before (or after, depending on mailers of course) this one for a
discussion of some of the faults/omissions of RenderMan.

>What I'm really looking for is something more extensive than NFF or OFF
>but much less ambitious than Renderman.  Having to write a full
>Renderman 'compiler' just to use a scene description seems overkill to
>me.  I want to see something that enables the exchange of modeled objects,
>in a simple portable way.  The standard should be able to be read on
>even the smallest of machines, by the simplest of renderers.  One
>of the main reasons it seems that the teapot surfaces all over the
>place is that it is one of the most readily available models, found
>in a number of different formats.  People should be able to trade
>models in the same way people are currently trading 'GIF' images.

>Is the RIB format simply a Renderman program compiled into a bytestream ?
>If it is a reasonable subset, perhaps it could be used.  Unfortunately
>it is not documented (or even really discussed) in Upstill's Renderman
>Companion.

From what I understand, the RIB format is just a scene description, without
all of the control flow and other constructs of the C binding. It is still
quite rich geometrically, so you are right, most PD type renderers will not
be able (mine included 8-) to handle most of the more sophisticated primtives.
Unfortunate, but NURBS and CSG are the best ways to describe many objects.
Polygons just don't cut it for a lot of things.

>I like the programmatic approach of Renderman, but the overhead of
>interpretation just to get at the data is too high.  The shader
>language is particularly neat, and perhaps that is a reasonable
>way to describe that portion.  I'd like to see the programmatic
>approach used at a higher level, to *create* scenes modeled in this
>format.  This means that the user of the data does not need to
>understand the same programming language.

I agree. I actually thought RIB had the programming constructs as well, until
recently. Without them RIB is JAF (Just Another Format 8-), rich as it may
be. One thing I just realized: if we loose the programming constructs of the
C binding, the RiPointsPolygon mentioned in my previous posting isn't nearly
as efficient as it could be. Only duplicate vertices within one polyhedra
are avaoided. Better than nothing, but still, it would be nice if RIB could
have variables as well, no?

>There is also Pixar's copyright limitations on Renderman that could cause
>problems.  They do license the interface without charge, but they
>have the right to refuse to do so.  Are they likely to approve a
>public domain implementation ?

This I'm not too sure about. Any comments from people out there that have
dealt with licensing from Pixar. Anyone form Pixar have any comments.

>One person mentioned a lisp-style format.  This is more what I had
>in mind.  It should be something that can be parsed in a simple manner.
>It should be trivial to write a filter to convert the standard format
>to the specific input format of a renderer.  The main point being
>keep it as simple, yet extensible, as possible.  You shouldn't
>need Yacc to parse it.

>David

>-- 
>     ll  // // ,~/~~\'   David Rowley
>    /ll/// //l' `\\\     Mortice Kern Systems Inc.
>   / l //_// ll\___/     35 King Street North, Waterloo, ON, Canada N2J 2W9
>O_/                      519/884-2251, FAX 519/884-8861, david@mks.com

Later,
	B
--
                  Brian Corrie (bcorrie@csr.uvic.ca)
Under the most rigorously controlled conditions of pressure, temperature,
volume, humidity and other variables, the organism will do as it damn well
pleases. Sounds like some of the code I have written......  8-)

jamison@boulder.ColoState.EDU (Jamie Gulden) (05/02/91)

In article <1991Apr30.003612.16050@mks.com> david@mks.com (David Rowley) writes:
>One reason for this is
>the lack of a standard modelling format.
>
>Would it make sense to define a new, say text-based, format to describe
>a world, such that a renderer could use as much information from it
>as possible, and chuck the rest ?
>

   Take a look at the renderman interface specification.  Thats basically
what it was designed for.

gritz@seas.gwu.edu (Larry Gritz) (05/02/91)

In article <1991Apr30.211131.7166@nntp-server.caltech.edu> woolstar@nntp-server.caltech.edu (John D. Woolverton) writes:
>
>   I would love to have a standard interface to work with
>(from both sides: modeling and rendering).  However my investigation
>of RenderMan has been _very_ dissapointing.
>
>   Perhapse to the world of 3D Z-buffers and other scan line
>rendering programs, RenderMan is enough.  But for work in
>RayTracing and beyond, there are too many things missing.
>

Not only is RenderMan perfectly acceptable for describing scenes to a
renderer which uses ray tracing, but RenderMan supports features which
are not possible on ray tracers at all (e.g. Displacement shaders).
I wonder exactly which features you want that cannot be described in
RenderMan?  Don't forget the explicit "trace" command in the shading language.


>   Renderman is also grossly inefficient for representing
>polygons, as it takes a [vertex, vertex, vertex, close] form for
>representing each face instead of a list of verteces and then a
>face list.

Not true at all.  See RiPointsPolygons and RiGeneralPointsPolygons.


>   Finally the concept of an actor/object is non-existant
>in RenderMan.  

This is because RenderMan is designed to be an interface to a renderer,
not a way to specify models or animation scripts.


>
>	John D. Woolverton, Video Bits
>	woolstar@cobalt.caltech.edu

------------------------------------------------------------------------
Larry Gritz                                     lg@galileo.usno.navy.mil
US Naval Observatory                            202-653-1034
Washington, DC 20392-5100                       also: gritz@seas.gwu.edu
------------------------------------------------------------------------

dean@cs.mcgill.ca (Dean NEWTON) (05/02/91)

In article <MATT.91Apr30142917@mandala.think.com> matt@mandala.think.com (Matt Fitzgibbon) writes:
>In article <30137@rouge.usl.edu> msr@gator.cacs.usl.edu (Srinivas R. Manapragada) writes:
>
>   Yes it would be nice to have a standard. However it should be more
>   expressive
>   and powerful than the language of say rayshade, which allows hierarchical
>   objects to be defined rather easily. However one should also have some
>   kind of procedural features.
>
>Rather than define another new language, has anyone explored using
>Lisp or some subset as a geometric description language?
>


You may want to consider using scheme for this purpose.  I have appended a
brief description of the Elk (Extension Language Kit) scheme interpreter at the
end of this message.

Since scheme is a general-purpose interpreted language, embedding Elk into
your system not only gives you a language for storing scenes, but you also get:
  -- an interpreted command language
  -- a cleaner (than the C binding) interface to Xlib/Xt/Motif
  -- an interpreter to Xlib/Xt/Motif

In fact, this will completely eliminate the dichotomy between "scene description
files" and "programs".

Elk is available for anonymous ftp from export.lcs.mit.edu

Enjoy,

Kaveh Kardan
Taarna Systems, Inc.
Montreal Quebec Canada
(posting from a friend's account)

----------------------------------------------------------------------------

Implementation:         Elk
Implemented by:         Oliver Laumann <net@tub.UUCP> <net@tub.BITNET>
Hardware:               VAX, Sun-3, Sun-4, ISI 680x0, Intel 80386, Mips,
                        IBM/RT, and others
Operating Systems:      UNIX/SunOS/Ultrix
Price/Availability:     Free.  Available as source code through the usual
                        sources archives and by e-mail from the author
Intended Use:           Primarily as a general extension language

Elk (Extension Language Kit) is a Scheme interpreter intended to be
used as a general extension language; it is also useful as a stand-alone
implementation of Scheme.

One purpose of the Elk project is to end the recent proliferation of
mutually incompatible Lisp-like extension languages.  Instead of
inventing and implementing yet another extension language, application
programmers can link the Scheme interpreter into their application
in order to make it extensible and highly customizable.

The Elk project was started in 1987 to support ISOTEXT, an ODA-based
document system (a WYSIWYG editor) that is being developed at the
Technical University of Berlin.  Elk has been successfully demonstrated
as the extension language kernel of ISOTEXT, e.g. at the Hanover Fair 1989.

The Elk Scheme interpreter is R^3RS compatible (with some minor exceptions
listed in a separate document); future releases will conform to the R^4RS
and/or P1178 as soon as the respective standards become available.

Non-standard features of the Scheme implementation include:

      o  dynamic loading of object files
      o  creation of an executable image from the running
         interpreter (``unexec'')
      o  a macro facility
      o  environments as first-class objects
      o  dynamic-wind, fluid-let
      o  autoloading, provide/require

The Scheme interpreter can easily be extended by application-specific
new types and primitive procedures.  Such extensions are typically
written in C or C++ and dynamically loaded into the running interpreter.

The current release of Elk includes several such extensions, e.g.
interfaces to the X11 Xlib and to the application programmer interface
of the Xt intrinsics, and interfaces to the Athena, HP, and Motif
widget sets.

turk@Apple.COM (Ken "Turk" Turkowski) (05/02/91)

The problem with a procedural language (like PostScript) is that
the definition of the language specifies exactly how the picture
is to be rendered.  Procedural languages generally require a complex
parser that is really a compiler that builds expression trees, etc.

A declarative language does not have programming constructs, and
merely describes the scene.  While there are certain universally
understood data types, it is up to the implementation to determine
exactly what the resultant picture looks like (i.e. wireframe,
anti-aliased, gouraud-shaded, light transport global illumination,
etc.).

If you want a programming language, use C; you'll be satisfied with
nothing less!
-- 
Ken Turkowski @ Apple Computer, Inc., Cupertino, CA
Internet: turk@apple.com
Applelink: TURK
UUCP: sun!apple!turk

raisa@hila.hut.fi (Olli R{is{) (05/02/91)

bcorrie@csr (Brian  Corrie) writes:

>>Is the RIB format simply a Renderman program compiled into a bytestream?

>From what I understand, the RIB format is just a scene description, without
>all of the control flow and other constructs of the C binding.

As far as I know, a RIB file resembles the C interface, but all
parameters to RenderMan functions are literals. Variables don't
exist -- nor are there any C other language constructs. You could 
produce a RIB file from a C language scene description by linking
it with a "renderer" that outputs a function name and its arguments
for each RenderMan function call. 

>>There is also Pixar's copyright limitations on Renderman that could cause
>>problems.

>This I'm not too sure about. Any comments from people out there that have
>dealt with licensing from Pixar. Anyone form Pixar have any comments.

Some time ago, someone from UK told us (here in comp.graphics)
that it is virtually impossible to get any answers from Pixar.
However, if you are going to write a RenderMan-compatible modeller
or renderer, you are supposed to inform Pixar about it. I think
you are very welcome to write a modelling program, but (if I read
correctly between the lines of the RenderMan specifications) the 
rendering part could cause problems -- you would be competing with 
Pixar.

Olli Raisa

jk87377@cc.tut.fi (Juhana Kouhia) (05/02/91)

In article <1991May1.135548.27865@mks.com> david@mks.com (David Rowley) writes:
>Many people have suggested Renderman as being ``the answer''.

How about Thalmann & Magnanet-Thalmann animation language?
I have not read much about it, so I'm wondering if anyone could make a
summary about it. What it can do? What is the difference between T&M-T
language and RenderMan? Etc.

Juhana Kouhia

david@mks.com (David Rowley) (05/02/91)

In article <bcorrie.673121202@csr> bcorrie@csr (Brian  Corrie) writes:
>david@mks.com (David Rowley) writes:
>
>>Is the RIB format simply a Renderman program compiled into a bytestream ?
>>If it is a reasonable subset, perhaps it could be used.  Unfortunately
>>it is not documented (or even really discussed) in Upstill's Renderman
>>Companion.
>
>From what I understand, the RIB format is just a scene description, without
>all of the control flow and other constructs of the C binding. It is still
>quite rich geometrically, so you are right, most PD type renderers will not
>be able (mine included 8-) to handle most of the more sophisticated primtives.
>Unfortunate, but NURBS and CSG are the best ways to describe many objects.
>Polygons just don't cut it for a lot of things.

	Where can I get a description of the RIB format ?  It could
	be used as a standard format, since RenderMan is likely to
	be fairly popular.  Like it or not.  A RIB translator
	could transform the more complicated RIB primitives into
	simpler ones that all renderers could understand.
	(polygons, triangles, whatever).

>I agree. I actually thought RIB had the programming constructs as well, until
>recently. Without them RIB is JAF (Just Another Format 8-), rich as it may
>be.
	Although it's just another format, it has some high-powered
	backing, and isn't likely to go away any day soon.

>>One person mentioned a lisp-style format.  This is more what I had
>>in mind.  It should be something that can be parsed in a simple manner.
>>It should be trivial to write a filter to convert the standard format
>>to the specific input format of a renderer.  The main point being
>>keep it as simple, yet extensible, as possible.  You shouldn't
>>need Yacc to parse it.

	Someone pointed me to P3D from Pittsburgh Supercomputing Center,
	which is based on a simple lisp interpreter.  It comes close,
	but I still think a programmatic approach embedded within
	the scene description language is a liability.  Programs
	should be used to *generate* this stuff.  The reason I like
	the lisp-style *syntax* is that it is easy to parse.

-- 
     ll  // // ,~/~~\'   David Rowley
    /ll/// //l' `\\\     Mortice Kern Systems Inc.
   / l //_// ll\___/     35 King Street North, Waterloo, ON, Canada N2J 2W9
O_/                      519/884-2251, FAX 519/884-8861, david@mks.com

rick@pangea.Stanford.EDU (Rick Ottolini) (05/02/91)

In article <1991May1.161329.26495@uokmax.ecn.uoknor.edu> stparker@uokmax.ecn.uoknor.edu (Steve Parker) writes:
>    With these observations, I set out to design my input language.
>I have come up with an interpretive type language which has proved to
>be very powerful and very expandable.   At the bottom, I have attached
>a short piece of code which  renders a CSG face.  I would appreciate any
>inputs or *constructive* criticisms.

An example of a declarative binding to the RenderMan specification is the
scene description language in the ART part of SunVision.  I did not see a
declarative binding or metafile description to RenderMan in Upstill's book.

I wrote a declarative scene description language for the purposes of
scientific visualization a few years ago.  The goal was to represent discrete
data as 3-D geometric objects.  (Continuous samplings in 1-D, 2-D,
and 3-D have their own representation techniques such as graphs, surfaces,
and volumes.) I got tired of writing large amounts of generally repetitive PHIGS
code and of the slow edit-compile-run-debug cycle method of building scenes.

I modeled my scene description language after the [unpublished] metafile of
MacDraw.  The characteristics Iemulated from MacDraw was a rich set of
primitive objects, from zero to three dimensions and the method of compositing
into complex objects.  I also added a large set of object attributes,
generally most of the rendering capabilities of the PHIGS variants I was using.

The graphics shops that sell turn-key 3-D design systems at graphics trade
shows may have some very good scene description languages.  I haven't done
a systematic study of their products, but perhaps someone else in this
newsgroup could report on this.

bouma@cs.purdue.EDU (William J. Bouma) (05/03/91)

In article <13281@goofy.Apple.COM> turk@Apple.COM (Ken "Turk" Turkowski) writes:
>The problem with a procedural language (like PostScript) is that
>the definition of the language specifies exactly how the picture
>is to be rendered.  Procedural languages generally require a complex
>parser that is really a compiler that builds expression trees, etc.

   In the case of PostScript this is just not true!  PostScript does not
   require ANY parsing.  If this shocks you try doing some reading on
   the subject of "Threaded Interpreters".

   I have written a TI based animation tool.  It was very easy to write 
   and it is flexible to do whatever I may want.  The reason I wrote it
   was I wanted an interactive graphics environment on this HP I was 
   using.  I got tired of the awkward compile-load-run cycle that the C
   language requires.
-- 
Bill <bouma@cs.purdue.edu>

david@mks.com (David Rowley) (05/03/91)

In article <14567@medusa.cs.purdue.edu> bouma@cs.purdue.EDU (William J. Bouma) writes:
>In article <13281@goofy.Apple.COM> turk@Apple.COM (Ken "Turk" Turkowski) writes:
>>The problem with a procedural language (like PostScript) is that
>>the definition of the language specifies exactly how the picture
>>is to be rendered.  Procedural languages generally require a complex
>>parser that is really a compiler that builds expression trees, etc.
>
>   In the case of PostScript this is just not true!  PostScript does not
>   require ANY parsing.  If this shocks you try doing some reading on
>   the subject of "Threaded Interpreters".

	I took the postscript interpreter part of GNU's Ghostscript,
	and hacked up an interface for Rayshade.  It was kind of neat,
	though the Ghostscript code is pretty hard to use.  Saying
	that postscript doesn't need parsing is too kind.  I'd more
	agree with the simpler, original Threaded Language, Forth.

	The bottom line is that a renderer should deal with rendering
	type concerns.  A language only benefits the builder of the
	scenes, not the renderer, thus it can safely be extracted.

	The following pipeline seems reasonable:

	Animation,	  --->   Standard Scene	  ---> Simplification -> Render
	Programmatic		 Format,	       Filters
	Scene Description	 Camera, Lights

	Where the simplification filters would convert the scene description
	into the level of simplicity required by the particular renderer.

>   I have written a TI based animation tool.  It was very easy to write 
>   and it is flexible to do whatever I may want.  The reason I wrote it
>   was I wanted an interactive graphics environment on this HP I was 
>   using.  I got tired of the awkward compile-load-run cycle that the C
>   language requires.
>-- 
>Bill <bouma@cs.purdue.edu>


-- 
     ll  // // ,~/~~\'   David Rowley
    /ll/// //l' `\\\     Mortice Kern Systems Inc.
   / l //_// ll\___/     35 King Street North, Waterloo, ON, Canada N2J 2W9
O_/                      519/884-2251, FAX 519/884-8861, david@mks.com

craig@weedeater.math.yale.edu (Craig Kolb) (05/03/91)

In article <MATT.91Apr30142917@mandala.think.com>, matt@mandala.think.com (Matt Fitzgibbon) writes:
>Rather than define another new language, has anyone explored using
>Lisp or some subset as a geometric description language?

Enclosed is an annoucement for the Pittsburgh Supercomputing Center's
P3D, which "uses lisp with slight extensions to store three-dimensional
models".  I've yet to look at P3D myself, but it may be relevant to
this disucssion.

Craig

---
            PSC P3D VERSION 2.0 AVAILABLE
            -----------------------------

   The third release of the Pittsburgh Supercomputing Center's P3D
software is now available.  This software uses lisp with slight
extensions to store three-dimensional models; we are using it as the
standard format for 3D models within the PSC.  A simple lisp
interpreter is included with the P3D release, so there is no need to
have access to any vendor's lisp to run this software.

   The copyright to the P3D software is owned by Carnegie Mellon
University, of which the Pittsburgh Supercomputing Center is a
department.  We copyright it so that no one can grab it and market it
as their own.  Feel free to copy it and distribute it around your own
site, and to modify it.  We ask that you do not redistribute it, as we
want new users to get it from us so we can keep track of it and
maintain a mailing list.  If you have modifications to the code or bug
reports, or would like to arrange to redistribute it, please contact
us.  This code is provided 'as is' without expressed or implied
warranty; the PSC makes no representations about its suitability for
any particular purpose.

HIGHLIGHTS

The highlights of the new release are the mouse-driven user interfaces
for Motif, Open Look, and Silicon Graphics GL, and the DrawP3D subroutine
library for generating P3D without ever looking at the underlying Lisp.
Renderer interfaces have been added for generic, DEC, and Sun Phigs,
and version 3.0 of Craig Kolb's Rayshade ray tracer.  We have also 
installed a new parser, which should be more robust and provide better 
diagnostics on P3D files containing Lisp errors.  It also will allow 
the rendering of larger models on some platforms.

RENDERERS

The PSC P3D software currently supports seven renderers.  They are:

	Painter, a Painter's Algorithm renderer.  This runs on just
	about everything, but requires the PSC's DrawCGM library and
	can only draw flat-shaded polygons.  If you need the DrawCGM
	library, get the GPlot software distribution by anonymous
	FTP from calpe.psc.edu, in the directory pub/gplot.

	Dore renderer, which is an interface to the Stardent Inc. Dore
	renderer software.  This is the recommended renderer for
	Stardent workstations.

	Silicon Graphics Inc. GL language renderer interface.  This
	is the recommended renderer for SGI workstations and IBM R6000
	workstations.

	Generic Phigs renderer interface.  This renderer should work with
	only minor modification on any implementation of Phigs, but because
	(like generic Phigs) it does not handle light sources it is not
	the recommended renderer on any platform.

	Sun Phigs+ renderer interface.  This renderer should work with
	Sun Phigs.  It produces excellent results with Sun hardware with
	graphics accelerators and a 24 bit display, but because of limitations
	with some versions of the Sun Phigs software it may not work
	properly on platforms with 8 bit displays.  Try this renderer 
	if you have a Sun platform, and if you don't like the results,
	switch to the Painter renderer.

	DEC Phigs+ renderer interface.  This renderer should work with
	DEC Phigs.  It is the recommended renderer for DEC platforms
	with 24 bit displays and graphics accelerators, for example
	accelerated DECStation 5000's.  For 8 bit DECStations, one might
	want to try both this renderer and the Painter renderer.

	Rayshade ray tracer renderer interface.  This renderer is an
	interface to Craig Kolb and associates' Rayshade ray tracer
	(version 3.0, patch level 5).  It produces some very nice images,
	very slowly.  The current implementation is a first release
	of the interaface and does not properly support all P3D
	model elements (for example, text primitives and vertex colors).


GETTING THE CODE

   The code is available via anonymous FTP from the machine
calpe.psc.edu.  If you do not already have the PSC's GPlot and DrawCGM
software, you can get that also from the same machine.  (You will need
GPlot/DrawCGM if you are using the Painter renderer, which is the
recommended renderer on machines lacking special 3D graphics
hardware).  To install the software on a Unix system, do the
following:

  - FTP to calpe.psc.edu (internet address 128.182.66.148).

  - Log in as anonymous, with your name as password.

  - cd to the directory pub/p3d (the GPlot software is in pub/gplot).

  - Set file transfer mode to Binary or Image.

  - Get p3d_2_0.tar.Z, (or p3d_2_0.tar if your machine doesn't
    have the 'uncompress' utility).

  - Move the tar file to an otherwise empty directory on your machine.

  - Uncompress the tar file with the command 'uncompress p3d_2_0.tar'.
    If this doesn't work, you should have gotten the uncompressed
    version;  see above.

  - Extract the contents of the tar file with the command 
    'tar -xvf p3d_2_0.tar' .

  - Follow the directions in the README file contained in the tar file.

To install the software on a VMS system, do the following:

  - FTP to calpe.psc.edu (internet address 128.182.66.148).

  - Log in as anonymous, with your name as password.

  - cd to the directory pub/p3d (the GPlot software is in pub/gplot).

  - Get tar2vms.c, a freely distributable tool copyrighted by Sid Penstone,
    Dept. of Electrical Engineering, Queen's University, Kingston, Ontario,
    Canada K7L3N6.

  - Set file transfer mode to Binary or Image.

  - Get p3d_2_0.tar, giving it the local name p3d_2_0.tar .

  - Move the tar file and tar2vms.c to an otherwise empty directory on 
    your machine.

  - Compile and link tar2vms.c.  It's a stand-alone program needing no
    libraries except the usual sys$library:vaxcrtl.olb.

  - Give the following commands to unpack the tar file:

      $ assign p3d_1_1.tar tape
      $ tar2vms:== $dev:[directory]tar2vms.exe   
                  (where dev and directory are your current default device
                   and directory).
      $ tar2vms xv

  - Follow the directions in the README file contained within the tar file.


------
NOTE:  The Motif and Open Look user interfaces in this release require a
bugfix to the PSC's GPlot/DrawCGM software which is not yet in the released
version (as of March 14, 1991;  the release is expected before the end
of March).  The symptom of the problem which this fixes is incorrect color
map handling using these user interfaces.  The fix is to relink DrawCGM
with the version of xws_color.c in the pub/p3d anonymous FTP directory
on calpe.psc.edu, or to include that module in the linking of the 
P3D executables.
------

   If you get this software, please send your name and network address
to me at welling@seurat.psc.edu so that we can send you announcements of
updates and bug fixes.  If you find bugs, that is also the address to
which to send the bug reports.


-Joel Welling
 Pittsburgh Supercomputing Center
 welling@seurat.psc.edu
 (412)268-6352

bcorrie@csr (Brian Corrie) (05/03/91)

david@mks.com (David Rowley) writes:
<STUFF DELETED?

>	Where can I get a description of the RIB format ?  It could
>	be used as a standard format, since RenderMan is likely to
>	be fairly popular.  Like it or not.  A RIB translator
>	could transform the more complicated RIB primitives into
>	simpler ones that all renderers could understand.
>	(polygons, triangles, whatever).

The address I have for Pixar is:

PIXAR
3240 Kerner Boulevard
San Rafael CA
94901-9905

Unfortunately, I seem to remember hearing that they have moved recently.
Anyone know the scoop on this?

The RIB format is described in a document called ``The RenderMan Interface''.
I have version 3.1, from Spetember 1989. I don't know if there are newer ones
or not. 

I am posting this rather than emailing, because I have received a couple
of requests, and there are probably others that are interested. Be warned,
it costs some money, but not very much... ($25 dollars or so I think).

	B
--
                  Brian Corrie (bcorrie@csr.uvic.ca)
Under the most rigorously controlled conditions of pressure, temperature,
volume, humidity and other variables, the organism will do as it damn well
pleases. Sounds like some of the code I have written......  8-)

adrianho@barkley.berkeley.edu (Adrian J Ho) (05/05/91)

In article <1991May3.160108.26438@cs.yale.edu> craig@weedeater.math.yale.edu (Craig Kolb) writes:

[ most of P3D announcement deleted, except ]

>  - FTP to calpe.psc.edu (internet address 128.182.66.148).
That's 128.182.62.148 (at least of 5/4/91).
               ^^

pcb@basin06.cacs.usl.edu (Peter C. Bahrs) (05/06/91)

In article <30137@rouge.usl.edu> msr@gator.cacs.usl.edu (Srinivas R. Manapragada) writes:
>In article <1991Apr30.003612.16050@mks.com> david@mks.com (David Rowley) writes:
>>One of the harder problems in producing snazzy computer graphics seems
>>to be the modelling, rather than the rendering.  One reason for this is
>>the lack of a standard modelling format.
>>
>>Would it make sense to define a new, say text-based, format to describe
>>a world, such that a renderer could use as much information from it
>>as possible, and chuck the rest ?
>> ...
>>Does it make sense ?  Anyone interested ?
>
>Yes it would be nice to have a standard. However it should be more expressive
>and powerful than the language of say rayshade, which allows hierarchical
>objects to be defined rather easily. However one should also have some kind of
>procedural features. For example say while describing a forest I should be able
>to define it as

I just finished a dissertation that proposes an object-oriented framework
for concurrent graphics in heterogeneous environments.  In particular, the
modeling primitives, messaging protocols, and Scene composition are presented.
The oo approach accomplishes (by far) modeling facilities found in PHIGS and
HOOPS but adds some really neat capabilities, like the ability to model
with high level primitives (and user defined primitives) and have the
renderer (camera) break the objects into primitives into those tailored
for a specific platform. 

I can't post the dissertation (260 pages) but it is going to UMI now and
will be in our library next month.

Title: AN OBJECT-ORIENTED FRAMEWORK FOR CONCURRENT GRAPHICS
                  IN HETEROGENEOUS ENVIRONMENTS

(we call the prototype "GO||" for concurrent graphics objects)

The first paper will appear in an oo graphics edited series book by 
John Wiley, due out Fall 91.


/*----------- Thanks in advance... --------------------------------------+
| Peter C. Bahrs                                                         |
| The USL-NASA Project                                                   |
| Center For Advanced Computer Studies      INET: pcb@swamp.cacs.usl.edu |
| 2 Rex Street                                                           |
| University of Southwestern Louisiana      ...!uunet!dalsqnt!gator!pcb  | 
| Lafayette, LA 70504                                                    |
+-----------------------------------------------------------------------*/

graeme@labtam.labtam.oz (Graeme Gill) (05/06/91)

In article <1991May2.134020.4952@cc.tut.fi>, jk87377@cc.tut.fi (Juhana Kouhia) writes:
> 
> How about Thalmann & Magnanet-Thalmann animation language?
> I have not read much about it, so I'm wondering if anyone could make a
> summary about it.

	The following info is from the book:

	Nadia Magnenat-Thalmann, Daniel Thalmann,"Image Synthesis:
	Theory and Practice", Computer Science Workbench,
	Editor: Tosiyasu L. Kunii, Springer-Verlag, ISBN 0-387-70023-4

    MIRALab is the image synthesis and computing laboratory of the University
of Montreal. Two types of software have been produced:

	Research and development tools:

	MIRA-SHADING, the main language for synthesis and animation of
	realistic images.
	CINEMIRA-2, an animation sub-language.
	INTERMIRA, a specification language for interactive image synthesis
	and animation systems.
	EXPERTMIRA, an Artificial Intelligence language for the development
	of expert systems in image synthesis and animation.

	User-friendly systems:

	The MIRANIM director oriented system, an advanced actor based animation
	system.
	The SABRINA image synthesis system.
	The MUTAN multiple track animator system for motion synchronization.
	The HUMAN FACTORY system, an animation system for articulated bodies.


    A description of the SABRINA image synthesis system is given in the book
as well as a look at some of the other systems listed above. References are
given to more detailed descriptions. The book came with an insert with the
following on it:

		More information about the MIRALab
		Image Synthesis System SABRINA is
		available upon request. Manuals and
		software for D.E.C. VAX VMS systems
		can be ordered at the following address:

		N. Magnenat-Thalmann
		HEC, Universite de Montreal
		5255 avenue Decelles
		Montreal, P.Q.
		Canada, H3T 1V6

    For those interested in this book, here is some of the preface:

	Image Synthesis: Theory and Practice is the first book completely
	dedicated to the numerous techniques of image synthesis. The book
	contains a detailed description of the most important algorithms;
	other algorithms are summarized or simply listed.

> What it can do? What is the difference between T&M-T
> language and RenderMan? Etc.

	I am not familiar enough with any of these languages to give
a definitive answer to this question. However, these tools seem to be complete
enough that some spectacular animations have been generated with them. The
most well known is probably "Rendez-vous a Montreal".

	Graeme Gill
	Labtam Australia



		

thomsen@spf.trw.com (Mark R. Thomsen) (05/07/91)

In article <1991Apr30.211131.7166@nntp-server.caltech.edu>  
woolstar@nntp-server.caltech.edu (John D. Woolverton) writes:
>    Conceptually, Renderman seems to be designed like PostScript.
> One renderman file, one image.  While this works for the printed
> page, animations and 3D graphics have continuity across frames
> that RenderMan cannot describe or take advantage of.
>
> 	One model format that describes position and motion
> of objects in a scene.

With some stuff edited out.

I wonder, in light of these comments, what NeXT and Pixar have done
to produce Interactive RenderMan? NeXT worked with Adobe to move
PostScript to Display PostScript. Some of the obvious issues were
addressed or ignored, but it was one stab at moving a static
description language into a more complex and dynamic interface. I
would anticipate that Interactive RenderMan addressed some of the
obvious issues.

Comments? Does anyone know status and specifications of IRM?

Mark R. Thomsen

thinman@netcom.COM (Lance Norskog) (05/07/91)

Well, a picture standard is a first step.  But, I don't want to look at
pictures created by others, I want to interact with them.  I've
designed a first cut at a 3D real-time window system, called 5D.  The
visual part is 3 dimensions, real-time interaction gives the fourth
dimension, and sound and other interaction (such as
force-feedback joysticks) form the fifth dimension.

5D uses a Smalltalk-style object-oriented system to define visual
objects and their static and dynamic properties:  a box may be blue,
shiny, and have a sound inside it which gets louder when you get near.
Adding specifications for rendering via this or that method is
a minor detail under this method.  The system can support still-frame
or continuous motion, depending on how much rendering you're willing
to implement and wait around for.

The specification is available by e-mail.  It is 60 pages of nroff-d
output.  

Lance Norskog 
thinman@netcom.com

cn09+@andrew.cmu.edu (Christopher Kalevi Nuuja) (05/08/91)

A programmatic approach is sometimes good for keeping the size of files down.
A dna model can be represented by a list of A G C and whatever that other
letter is, along with a few functions that read that list and create
the appropriate primitivies (balls,sticks,letters,etc.)
This makes it very easy to alter the way the model is represented
(ball+stick,text+stick,space-filling,etc), and its much more compact than
explicitly listing each primitive, or even multiply instantiating similiar
primitives (need a name, and a location).  A progammatic approach allows
you to use information from the domain of the model to simplify its
encoding.

It also makes it easy to create coroegraphy scripts to control rendering
animations.  You can design whatever function you want to procedurally
alter your geometry as time goes by, or load new geometries at appropriate
times.

ehg@alice.att.com (Eric Grosse) (05/08/91)

Since there have been several postings this week critical of RenderMan
and I have seen no spirited defense from Pixarfolk, I'd like to mention
my positive experience with RIB as an interface.  In the course of my
work in scientific computing, I frequently have occasion to write filters
that map numerical simulation data (like finite element solutions) into
geometry files to pass off to graphics packages.  I suppose these filters
qualify as "modelers", though they have little or no interactive component.
After exploring a number of alternatives over the years, RIB has come out
the winner in my application.  The pieces of RenderMan are easy enough to
understand, the RIB syntax is easy to parse, and every graphic construct
that has been needed for my images was already in the language.

In response to particular criticisms:  I did get a license from Pixar to write
a renderer;  it took a couple letters and phone calls, but if you don't have
enough energy for that, you probably wouldn't finish the renderer anyway.
I've had no trouble writing small driver programs that read the subset of
RIB that I happen to be using at the moment and call GL or whatever local
graphics library is convenient for quick images.  Although my main output is
videotape, I'm satisfied with rendering images independently;  the surfaces
and objects in my images are moving under control of differential equations
much too complex for any graphics language to solve.

The basic advantage RIB has given me is the ability to make complex images by
pasting together the output of several small, independently written tools.
I don't need to buy into one of the big visualization programs and figure out
how to connect my code to their interface.

Eric Grosse
AT&T Bell Labs 2T504
Murray Hill NJ 07974
ehg@research.att.com

u87rpb@ecs.oxford.ac.uk (05/08/91)

David Rowley wrote:

> I took the postscript interpreter part of GNU's Ghostscript,
> and hacked up an interface for Rayshade.

I've got a half finished Forth interpreter which I added to the
PRT ray tracer that was posted at the end of last year. It's one
of the easiest languages to parse (as has been mentioned) whilst
at the same time allowing parametric definitions for geometry and
texture (and whatever else you might need).

To save time parsing, I decided that the Forth code should be
converted *once* into a byte stream (a la RenderMan) which could
be interpreted very quickly by the renderer itself. The main reason
for this was to prevent backtracking through the (ASCII) source whilst
rendering, and also to prevent duplicate effort in a parallel
environment (there's no point having 50 Sun's all doing a parse job
on the same program).

When the renderer itself starts, the program is first interpreted to
build the object database, and also to insert hooks for procedural
texturing. If an object in the database has a hook for texturing, that
`word' is then called with the relevant object parameters on the forth
stack whenever that object is intercepted.

I've not done any work on this since January, but it sounds like a
sound idea, so it's definitely something that I'll carry on with next
time I have some spare time...

Ray.

dwrowley@watserv1.waterloo.edu (David W. Rowley) (05/09/91)

In article <20322@alice.att.com> ehg@alice.att.com (Eric Grosse) writes:
>
>Since there have been several postings this week critical of RenderMan
>and I have seen no spirited defense from Pixarfolk, I'd like to mention
>my positive experience with RIB as an interface.  In the course of my
>work in scientific computing, I frequently have occasion to write filters
>that map numerical simulation data (like finite element solutions) into
>geometry files to pass off to graphics packages.  I suppose these filters
>qualify as "modelers", though they have little or no interactive component.
>After exploring a number of alternatives over the years, RIB has come out
>the winner in my application.  The pieces of RenderMan are easy enough to
>understand, the RIB syntax is easy to parse, and every graphic construct
>that has been needed for my images was already in the language.

	This sounds exactly like what I was looking for.  I am
	hopeful that RIB will fit the bill.   Would you like to
	donate some RIB parsing code ?

David.

unx20238@unx2.ucc.okstate.edu (Lonny) (05/10/91)

 Just wondering if anyone out there knows of any X11 graphic editor,
cad, or just plain paint programs that will work on an IBM RISC/6000 ?
ANY information will be greatly appreciated!


Lonny L. Lowe
Oklahoma State University 
Stillwater, Ok 74076

unx20238@unx2.ucc.okstate.edu

aaa@pixar.com (Tony Apodaca) (05/14/91)

	There has been a lot of traffic about what RenderMan is and is not
in the past couple weeks, so I hope I can clear up some of the confusion.
My credentials: currently Chief Architect of the RenderMan Interface, and
one of the Unknown Implementors of both of Pixar's image synthesis products.
	First, I must apologize for the untimeliness of this post.  As I
type this, it is May 12, and only today has our news feed deigned to send us
your postings from April 30!  A friend at UCSC has sent me some postings
up through May 9 (thanks Rob!), but I have not seen the whole thread.
If I cover "old ground", I apologize.
	This post is likely to be long, because I am (too darn) longwinded.
I hope those who are interested will not 'n' this article purely because
of it's length.

	The two documents that describe RenderMan are the Specification
(the current version is 3.1, printed December 1989) and the book,
"The RenderMan Companion" (written by Steve Upstill).  The Specification
is the true source, and is available from Pixar (1001 W. Cutting Blvd,
Richmond, CA, 94804, (415)236-4000) for $20.  We don't make any profit
on that, $20 doesn't quite cover printing costs and postage (particularly
on foreign requests, of which we get a lot).  The book is published by
Addison-Wesley, ISBN 0-201-50868-0.  The "Companion" is cool because it
gives lots of examples and pictures, and is not nearly as technical as
the spec.  The only problem is that the "Companion" uses C to demonstrate
RenderMan, as it was written before the RIB language was codified.

	I want to correct some factually incorrect statements that have
been made about RenderMan.  Someone mentioned...
> Renderman is grossly inefficient for polygons, as it takes a
> [vertex, vertex, close] instead of a list of vertices and a face list.
Check out RiPointsPolygons().  I think this will do what you want.
	Someone claimed that Pixar did not use RenderMan and RIB for its own
animations.  We most certainly do, and we are quite proud of it.
We sell what we use, we use what we sell.
	People are worried about how hard it is to parse RIB.  Believe me,
you don't need yacc to parse RIB.  It is very simple.  To be honest, I
am quite surprised there isn't a PD file reader already.  I would write one,
but I'm not allowed (employment contract and all).
	Several people were worried about copyrights and licenses and such.
Let me put the record straight.  Pixar wants RenderMan to be "ubiquitous"
(such a nice word!).  That means STANDARD.  We want other people to write
renderers, because if they don't, what good is it to call it a standard?
One company does not agreement make.  Sure, our marketing department would
be really happy if our engineering department produced the best such
renderer available, but as a company, we completely recognize the need
for honorable competition, and we look forward to it.
	So what's the deal with licenses?  We retain the copyright and require
licensing for our own protection, and for the protection of the consumer.
Who is helped if someone announces a RenderMan product and they lie?  Noone,
obviously.  We do not restrict or charge fees or make it difficult an any way
for someone who tells the truth to get a full license.  We've given out many.
If anyone out there has had a problem in this regard, please contact me
personally, and I will get it straightened out.  'Nuff said.
	Finally, several people were concerned that RenderMan only "works"
for Pixar's Reyes-style renderer.  I have heard this on occassion from
various places.  Sometimes the evidence is "Look, displacements can't be
done in a ray tracer, QED".  The fact is, RenderMan was designed to be used
by any renderer, anywhere.  Sure, some features are algorithm-specific,
because people who write such renderers asked for them to be there.  There
are things in RenderMan that can't be done by Reyes that CAN be done by
a ray tracer (tranluscent volumes, for example).  But these are all "optional".
It is a bit much to go into exactly what this means (it's in the spec), but
suffice it to say, if the renderer can't do it, it is free to ignore it.
If there are any examples of anything in the RenderMan Interface Spec which
clearly are impossible in a ray tracer, or in any other mainstream algorithm,
I would like to hear about it...and fix it!  If it were true, I would have
failed, and I don't want to fail.
	Being "Chief Architect", I am privy to a lot of private plans of
various companies using RenderMan, and it would be indiscreet for me to let
on what I know, even by innuendo.  Let me just say, there is more in store
than just bug-fixes for Reyes....

	I will now launch into a long explanation of why RenderMan
was designed the way it was designed.  I think there are some valuable
lessons for the person who designed the next modeling and rendering interface.
If you are already bored, hit 'n' now.

	By now, everyone understands the difference between C calls
to a RenderMan library and RIB.  Yes, RIB is (for all intents and purposes)
simply a metafile format for the C library.  Why did we choose a C
library as the "fundamental" binding, rather that write our own procedural
language?  Well, because it seemed like the right thing to do at the time.
This is not a flippant comment.  We (actually Pat Hanrahan, the original
father of RenderMan) examined other graphics packages and standards closely.
He decided that a procedural interface, in the long tradition of GKS, PHIGS
and SGI's GL, was the most flexible and gave the users the most bang per
buck.  It is simple to write a metafile format for a procedural interface,
but it is very awkward to write a procedural interface for a language
(ex: Postscript wrappers from a C program).
	One must remember the domain that RenderMan was set out to cover.
We wanted a standardized interface between modeling programs and rendering
programs.  All sorts of rendering programs, from SGI hardware renderers to
Reyes to ray tracers, and everything in between.  There were two totally
different ways to approach this problem: 1) provide a standard set of
really simple primitives that absolutely any renderer could eat, and put
the burden on the modeller to convert anything more interesting that *it*
knew about into these simple primitives; 2) provide all of the primitives
that any modeller could possibly want, and put the burden on the renderer
to be so complex that it could handle anything.  Any new rendering interface
has to face this question, and believe me, it is the hardest one of all.
We tried to compromise, to fill as many people's needs as we could without
getting PL/1 (anyone remember PL/1?).  We provided a "very rich" set of
primitives, anything that renderers might reasonably be expected to be
able to "take advantage of", but do not solve every modelling problem.
For example, we take spheres directly, because ray tracers can certainly
trace spheres a lot faster than some collection of 2000 triangles.
Similarly, we take CSG and object hierarchies directly.  On the other hand,
we don't take surfaces of revolution directly.  These are easily
described with the other primitives, and offer renderers no real advantage.
	So, we made our decision.  What kind of flack do we get for it?
You might be able to guess: people who are writing renderers say, "This
interface is too darn complex.  Noone could ever meet it."  People who are
writing modellers say, "My modeller has the one neato concept that really
ought to be in the interface, can't you see your way clear to add it?"

	But what about animation?  Doesn't that require a procedural
interface?  We struggled with two important constraints which many people
don't think about: 1) the animation that the average Joe on the street
does is simple now, but is going to get more and more complex as computers
and renderers get faster and faster; 2) any procedural language which
we were to define has to be better than C.
	What do we mean by simple animation?  We all know the type...
flying logos, camera moves over static scenes, robot arms and spaceships.
Basically, simple rigid motions over repetitive objects.  Our own
animation has shown us that people are bored of this, and want to move
to complex animation: soft, squishy surfaces which deform as they move,
faces and bodies, scenes with zillions of objects.  Everyone wants to
see and do this type of animation, but what does it do to the image
description?  Well, for one thing, almost NOTHING is constant
from one frame to the next.  Oh, the occasional desk or wall, but the
size of the data in the description of the wall is microscopic in
comparison to size of the data in the description of the baby's crying face.
It makes a lot of sense to optimize for the big, changing data, rather
than the small, static data.  And everyone who does these kinds of
animations has their own special tricks for managing the huge amount of
data this kind of animation requires.  Some things might be simple,
like a particle system or an evolving fractal, but for some people it
is gargantuan systems of differential equations, hydrodynamic equations
of the third order, or even giant databases of the complete motion of every
one of the individual control points (vertices) in the scene.
	Could we design a language which could encompass all this, and do
it better than Lisp or C?  Hardly.  General purpose languages are just
too powerful (imagine that!).  Special purpose languages only help if the
domain is very small (Postscript), or if they are pure amplifications of
a general purpose language (Shading Language).  C/Lisp/Ada are just too good.
(Okay, maybe not Ada. ;-) )

	So, what have we learned?  Modeling languages are hard.  Very hard.
This is not to say impossible, and I look forward to the day when a smart
person solves this problem.  But Pixar didn't (and doesn't) know the answer.
Pixar has at least 3 modeling and animation languages we use, each of which
handles some things very well and other things very poorly.
	The original poster said he was looking for a "new, text-based,
standard modelling format", and then went on to describe some features
of a rendering format not too different from RenderMan (some primitives,
shading parameters, etc.).  Other posters have described their needs for
a much more general animation language.  I encourage people to keep these
two concepts separated.  The data necessary for describing (good, complex)
modeling and animation is very different from the data necessary to do
a photorealistic rendering of a single frame from this animation.
	And beware the temptation to "add programming constructs" to a
line-oriented database format.  It will end up ugly and not very useful.
If you want a good language, you must design it as a language from the start.

	If you have made it this far, you are brave indeed.  If anyone has
specific questions or comments about RenderMan, I'd be happy to answer them.

-- 
UUCP:		{sun,ucbvax}!pixar!aaa		Tony Apodaca
Internet:	aaa@pixar.com			Pixar, Richmond, CA, USA
    "And in the end, the love you take is equal to the love you make."

mccoy@pixar.com (Dan McCoy) (05/14/91)

In article <1991Apr30.211131.7166@nntp-server.caltech.edu> woolstar@nntp-server.caltech.edu (John D. Woolverton) writes:
>
>   I would love to have a standard interface to work with
>(from both sides: modeling and rendering).  However my investigation
>of RenderMan has been _very_ dissapointing.

Sorry to hear that.  I believe some of your complaints are based on 
a misunderstanding of the RenderMan Interface. 
I'll try to clarify.

>   Perhaps to the world of 3D Z-buffers and other scan line
>rendering programs, RenderMan is enough.  But for work in
>RayTracing and beyond, there are too many things missing.
>
>   Conceptually, Renderman seems to be designed like PostScript.
>One renderman file, one image.  While this works for the printed
>page, animations and 3D graphics have continuity across frames
>that RenderMan cannot describe or take advantage of.

I take this to mean that you dislike the lack of animation control
information in the RenderMan Interface.
This is, arguably, a weakness of the current RenderMan standard.
So yes, as it stands RenderMan is a "scene description language" and not
an "animation description language".
Control information could possibly make its way into the standard 
in the future.
Currently, the time it takes to render a high quality image dwarfs 
the time involved in reading a new file for each frame.
That is even more true of ray tracers and beyond than it is with the
"other scan line rendering program" that we currently sell.

>   Renderman is also grossly inefficient for representing
>polygons, as it takes a [vertex, vertex, vertex, close] form for
>representing each face instead of a list of verteces and then a
>face list.

Did you look at the RiPointsPolygons call? It sounds like what you want. 
Besides, if you want efficifient descriptions of objects, then patches, 
patch meshes, quadrics, and NURBS are all superior to polygons.
Also much information required by a high quality renderer is lost if curved
surfaces are expressed as polygons.

>   Finally the concept of an actor/object is non-existant
>in RenderMan.  There is no grouping of faces with different
>properties or relationships defined.

Current implementations of RenderMan renderers may not have the features 
you want.  But the RenderMan Interface provides flexible support 
for this sort of extension with the RiAttribute call along with 
RiAttributeBegin/End blocks.  The set of attributes that can be specified 
is not closed.  As implementations of RenderMan compatible programs arise, 
they are free to add implementation specific attributes.

>   While one could take one's own model from another system
>and extract the Renderman Commands for it, it does not seem
>possible to go the other way.  Witness all the modeling programs
>that support the RenderMan interface, but use their own 
>formats for working data (scene and objects).  [all of them!]

This is a chicken-egg sort of problem.
The interface hasn't been around that long.
So far the only reason that people have modified their modellers to output
RenderMan compatible files (RIB files) is to allow them to be renderered
by Pixar's renderer.  Now that many modellers can output their geometry
in RIB format, I'm sure you'll start seeing programs that read RIB files
as well as write them.  

>   PLEASE SOMEONE!  Work on a scene description file format
>that will describe an animation or scene, not just the
>resultant list of polygons.

The RenderMan Interface provides much more than a "list of polygons".

>My proposal:
>	One object format that includes geometry primatives
>and surface descriptions.
>	One model format that describes position and motion
>of objects in a scene.
>	Extentions to both for specific shading and 
>(for ray tracing) geometry organization (bounding boxes...).

RiBound provides bounding boxes.
The only thing you ask for that isn't covered by the current RenderMan 
Interface is motion (beyond motion blur within a frame).  
It could be argued that this is outside the scope of a "scene description" 
standard.  

An example of how to provide what you want without starting from scratch:
Motion control could be provided as a separate control file.
This control file along with a properly formatted RIB file could either 
be read by filter program which combines them and outputs to a current 
level RenderMan renderer.
Or the files could be read by a new smarter renderer that could make use of
the control information. 
This has the advantage of being able to compactly express more than one 
animation sequence for a given geometry file.

Dan McCoy	Pixar

bcorrie@csr (Brian Corrie) (05/14/91)

aaa@pixar.com (Tony Apodaca) writes:
>	There has been a lot of traffic about what RenderMan is and is not
>in the past couple weeks, so I hope I can clear up some of the confusion.
>My credentials: currently Chief Architect of the RenderMan Interface, and
>one of the Unknown Implementors of both of Pixar's image synthesis products.
>	First, I must apologize for the untimeliness of this post.  As I
>type this, it is May 12, and only today has our news feed deigned to send us
>your postings from April 30!  A friend at UCSC has sent me some postings
>up through May 9 (thanks Rob!), but I have not seen the whole thread.

I was wondering why no one from Pixar was speaking up. Now we know. Today,
I got three postings from Pixar defending RenderMan 8-) Nice to hear from you
guys...

[Stuff deleted about ordering the RenderMan spec. etc]

>	I want to correct some factually incorrect statements that have
>been made about RenderMan.  Someone mentioned...
>> Renderman is grossly inefficient for polygons, as it takes a
>> [vertex, vertex, close] instead of a list of vertices and a face list.
>Check out RiPointsPolygons().  I think this will do what you want.

This misunderstanding was caused for a couple of reasons I think.

1) John Woolverton (as he explains in his recent posting) based his info
on the output of modelers that he used, none of which used this feature.

2) RIB is purely a textual format, correct? That is there are no variables
or static arrays that can be declared. Therfore, if you have a large number
of polygons to be declared with a large set of common vertices, then you
either declare separate polygons with duplicate vertex info, or use one
large RiPointsPolygons declaration for all polygons. For exmaple, to be
really efficient (as in the OFF file format) you would declare a list of
all vertices in an object, and then the entire list of polygons that makes
up the entire object. This isn't terribly obvious that its the way to go,
especially when you are thinking of the C binding and then convert that to
RIB. This makes for a single RiPointsPolygon call that could have thousands
of polygons in it, not the most obvious way to go (but the most efficient)
when you think about it.

>	Someone claimed that Pixar did not use RenderMan and RIB for its own
>animations.  We most certainly do, and we are quite proud of it.
>We sell what we use, we use what we sell.

I hope this wasn't my statement that gave you this impression. If so, what I
meant to say was that I thought Pixar uses other tools/langauges as well/on top
of RenderMan. You confirm this later in your article when you say...

>	So, what have we learned?  Modeling languages are hard.  Very hard.
>This is not to say impossible, and I look forward to the day when a smart
>person solves this problem.  But Pixar didn't (and doesn't) know the answer.
>Pixar has at least 3 modeling and animation languages we use, each of which
>handles some things very well and other things very poorly.

[More explanation/description deleted]

>	Being "Chief Architect", I am privy to a lot of private plans of
>various companies using RenderMan, and it would be indiscreet for me to let
>on what I know, even by innuendo.  Let me just say, there is more in store
>than just bug-fixes for Reyes....

Sounds interesting, I'll keep my eyes and ears open 8-)

[Interesting exlpanation of the design decisions wrt RenderMan deleted]


>-- 
>UUCP:		{sun,ucbvax}!pixar!aaa		Tony Apodaca
>Internet:	aaa@pixar.com			Pixar, Richmond, CA, USA
>    "And in the end, the love you take is equal to the love you make."

Later,
	B

--
                  Brian Corrie (bcorrie@csr.uvic.ca)
Under the most rigorously controlled conditions of pressure, temperature,
volume, humidity and other variables, the organism will do as it damn well
pleases. Sounds like some of the code I have written......  8-)

richard@mee.tcd.ie (05/14/91)

If this scene description language gets off the ground in a big way, it means
that watching T.V. in the future will be a lot more interesting. 
Say for example in ten years time you're sitting watching T.V. one day
(say Casablanca for example), and suddenly the reception becomes bad
and Bogie's trenchcoat turns into a polkadot leotard, his cigar a cucumber,
and his tremondously stylish hat becomes a mahogany coloured tin of 
smoked salmon.

Personally, I can't wait.

Richard Bolger                //
Trinity College Dublin       //       rbolger@vax1.tcd.ie       
Republic of Ireland         //