G M A N
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.