|
|
|
|
GNU GMAN
A GPL RenderMan Implementation |
GNU GMAN FAQ v0.0
----------------------------------------------------------------------
Table of Contents
----------------------------------------------------------------------
0. General Information
0.01 What is GMAN?
0.02 Where do I find GMAN?
0.03 Who wrote GMAN?
0.04 What is the primary development platform for GNU GMAN?
0.05 Is GMAN Free Software?
0.06 What platforms are supported by GNU GMAN?
0.07 What are the hardware requirements for running GMAN?
0.08 Where can I find additional resources relating to GMAN and
RenderMan?
0.09 What books where invaluable in coding GNU GMAN?
0.10 Is there a GMAN mailing list?
0.11 What is the status of GMAN?
1. RenderMan Specification
1.01 What RenderMan features are supported by GNU GMAN?
2. Supported Shading Algorithms (Shaders)
2.01 What types of shaders does GMAN support?
2.02 What is a Z-buffer shader?
2.03 What is an anti-aliased Z-buffer shader?
2.04 What is a Raytracing shader?
2.05 What is a Distributed Raytracing shader?
2.06 What is a Radiosity shader?
2.07 What is a Combo shader?
3. Object Management
3.01 What types of object managers does GMAN support?
Search e.g. for "Section 6" to find that section.
Search e.g. for "Subject 6.04" to find that item.
----------------------------------------------------------------------
Section 0. General Information
----------------------------------------------------------------------
Subject 0.01: What is GMAN?
GNU GMAN is an implementation of the RenderMan interface
specification. It is a high-quality renderer supporting zbuffer,
radiosity, distributed raytracing, spatial and temporal
anti-aliasing (motion blur), surfaces such as NURBS and patches,
and many other great features.
Subject 0.02 Where do I find GMAN?
The current version of GNU GMAN is always available from
http://gman-toolkit.sourceforge.net
Subject 0.03 Who wrote GMAN?
GMAN was started by John Cairns. John Cairns is a 3d hobbyist
and experimenter. Contact john at his E-mail address john@2ad.com,
or send GMAN specific mail to gman-toolkit@2ad.com.
Please see the file AUTHORS included in the GMAN toolkit
distribution for more information on authors and contributors to GMAN.
Subject 0.04 What is the primary development platform for GNU GMAN?
The GMAN toolkit is primarily developed under Linux, but GMAN is
intended to be portable to all platforms. Contact the author if
you have a specific question about GMAN and your platform.
Subject 0.05 Is GMAN Free Software?
GMAN is released under the GNU Library General Public License. This
license is available from the Free Software Foundation,
www.fsf.org, and you should always receive a copy of this license
with your GMAN distribution. If you did not receive a copy of this
license please contact the current maintainer (author) of GMAN.
Subject 0.06 What platforms are supported by GNU GMAN?
GMAN is designed to be portable, and therefore all platforms are
supported. However, at this time, GMAN is built and tested only on
Linux. If you would like GMAN ported to your
platform please contribute patches or a hardware donation to the
maintainers or author.
Subject 0.07 What are the hardware requirements for running GMAN?
GMAN was designed to run on an Intel Pentium 200MHz, with 64Mb of
RAM. GMAN should be adequate for most tasks even on a lesser
system. GMAN should work well on a better system.
Subject 0.08 Where can I find additional resources relating to GMAN and
RenderMan?
Check out the RenderMan newsgroup,
comp.graphics.rendering.renderman. It is very good. Also check
out the GMAN links page at http://gman-toolkit.sourceforge.net/links.html
for additional web links and resources relating to RenderMan and GMAN.
Subject 0.09 What books where invaluable in coding GNU GMAN?
I owe a great debt to Alan and Mark Watt who taught me almost
everything I know about 3d graphics in the books "3D Computer
Graphics" and "Advanced Animation and Rendering Techniques." Also,
Another good read is "Radiosity, A Programmer's Perspective" for lots
of information on Radiosity. The FAQ's for comp.graphics.algorithims
are also very helpful.
Subject 0.10 Is there a GMAN mailing list?
Yes, the GMAN mailing list is located on egroups.com at
http://www.egroups.com/group/gman-toolkit or you can subscribe
by sending E-mail to gman-toolkit-subscribe@egroups.com.
Also, checkout the website at http://gman-toolkit.sourceforge.net
egroups.com has merged with yahoo.com, the list can now be found
at Yahoogroups.com
Subject 0.11 What is the current status of GMAN?
Please have a look at the sourceforge page for the latest updates
of GMAN. GMAN is currently a work in progress. Although, GMAN
has generated a few output images for developers, it has not
rendered its first environment yet.
----------------------------------------------------------------------
Section 1. RenderMan Specification
----------------------------------------------------------------------
Subject 1.01 What RenderMan features are supported by GNU GMAN?
GMAN supports all required features of the RenderMan
specification. In the future GMAN will support all optional
features. See the RenderMan specification for a complete list of
RenderMan features.
----------------------------------------------------------------------
Section 2. Supported Shading Algorithms (Shaders)
----------------------------------------------------------------------
Subject 2.01 What types of shaders does GMAN support?
GMAN has built in support for several standard shading
algorithms. GMAN supports a Z-Buffer by polygon shading
algorithm for rapid rendering at medium quality. GMAN also
supports Radiosity and Distributed Raytracing for producing
high-quality images.
Subject 2.02 What is a Z-buffer shader?
A Z-buffer shading algorithm is an efficient O(n) shading
algorithm that provides support for a medium quality local
illumination model. The Z-buffer works with the database
translated into view space. The objects in view space are
iterated across sequentially, this is why a linear object manager
is most efficient for this algorithm, and shaded one at a time
based on their apparent depth or distance from the viewing plane
or screen space. This depth is stored in a table of depth values
called a Z-buffer, after the Z axes which gives the perception of
depth in a 3d image.
The Z-buffer shading algorithm provides a powerful and efficient
shading mechanism, that produces fairly decent quality in a
reasonable time frame.
Subject 2.03 What is an anti-aliased Z-buffer shader?
The Z-buffer algorithm lends itself to a simple super-sampling
strategy similar to 'distributed ray tracing'. The
anti-aliased Z-buffer samples each pixel multiple times by
maintaining an 'average-buffer' and a current jitter buffer. The
Z-buffer algorithm is repeated once for each sample required to
generate the image. In each repetition the start offset (offset
within the pixel) is randomly jittered. After the jittered
Z-buffer is computed it is averaged with the current value in the
frame-buffer or the average-buffer.
The net result is a fairly simple super-sampled shading algorithm,
which produces similar results to the A-buffer algorithm. The
AA-Z-Buffer is not as efficient, computationally, as the A-buffer,
but is far simpler to code and extend to support shadowing, and
other effects.
Subject 2.04 What is a Raytracing shader?
Ray tracing is a 'global-illumination' shading algorithm that
accurately models the "flow" of light in a 3d environment in O(n^2)
or O(n*lg(n)) time. As the name suggests ray tracing functions by
tracing rays from a view point to the light source (In backwards
ray tracing, the ray is traced from the light source to the view
point). These traced rays depict the flow of light as it travels
through a room and interacts with objects specularly, or through
transmission. Ray tracing provides a very good simulation of
specular reflection (mirror-like surfaces) and object
transmittance. Ray tracing breaks down in diffuse interaction,
because it would require an infinite number of rays to accurately
sample the diffusion of incident light, however the effects of this
can be mitigated by using distributed raytracing, or radiosity.
Subject 2.05 What is a Distributed Raytracing shader?
Like ray tracing, distributed ray tracing is a technique for
modeling the flow of light in a 3d environment. However,
distributed ray tracing uses a technique similar to the
super-sampling in an anti-aliased Z-buffer algorithm to both reduce
aliasing artifacts, and more accurately simulate the diffuse
interaction of objects in an environment. Most distributed ray
tracers compute sixteen (16) samples per pixel, and therefore may be
very inefficient, i.e., sixteen times longer to compute than an
ordinary ray tracer, which is also very inefficient. Likewise, the
Radiosity method provides an illumination model that very accurately
models the diffuse interaction of light.
Subject 2.06 What is a Radiosity shader?
The radiosity method is a global illumination model that accurately
models the diffuse interaction of objects in a room in O(n), O(n^2),
or O(n^3) time. Unlike, ray tracing, radiosity does not simulate
the flow of light, nor does it perform well for specular or
transmittive (transparent) objects. The Radiosity method solves an
integral form factor equation in a system of linear equations
representing rectangular surfaces in the 3d environment. The
solution takes a very long time to compute but provides the most
accurate simulation of diffuse lighting effects currently available.
This technique can provide an even better 'general' solution when
used in conjunction with the raytracing method.
Subject 2.07 What is a Combo shader?
Each of the available shading algorithms has its own strengths and
weaknesses. Usually, the goal of the 3d artist is to produce images
that accurately reflect reality. Unfortunately, there is no general
solution to this problem, and no single local or global illumination
model behaves ideally in all circumstances. The Z-buffer algorithm
provides a decent approximation of specular and diffuse interaction,
but it suffers from a number of aliasing artifacts that prevent it
from looking perfectly real in most situations. The ray tracing
algorithm can fairly accurately model specular light interactions in
objects and light sources, but it generally fails to accurately
model shadowing effects such as umbra and penumbra, and diffuse
interaction. The radiosity method produces a very good simulation
of the diffuse interaction of objects in a 3d environment, including
shadowing effects such as umbra and penumbra, while being relatively
difficult to use to produce a model of the specular or transmissive
interaction of light and objects. Interestingly enough, the
strengths and weaknesses of these methods align with each other
almost perfectly, and a combo-shader exploits this fact by computing
the radiosity equation to model the diffuse interaction of the
objects in an environment, and then uses a distributed ray-tracer to
compute the specular and other interactions that ray-tracing handles
well. This method can produce a 'best-case' result in worst case
time, i.e., O(2*n^2), ouch!
----------------------------------------------------------------------
Section 3. Object Management
----------------------------------------------------------------------
Subject 3.01 What types of object managers does GMAN support?
GMAN provides object managers supporting linear data access, i.e.,
sequential access, and binary space partitioning object managers.
Linear data access is ideal for Z-buffer like shading algorithms
where efficient sequential access of objects is imperative. The
BSP algorithm provides good all around support for shaders that
can exploit proximity to speed global illumination models.