Provided by: radiance_4R1+20120125-1.1_amd64 bug

NAME

       rholo - generate/view a RADIANCE holodeck

SYNOPSIS

       rholo [ -n npr ][ -o dev ][ -w ][ -i ][ -f | -r ] hdkfile [ varfile | + | - [ VAR=value ..  ] ]

DESCRIPTION

       Rholo is a program for generating and viewing holodeck files.  Similar to rvu(1), rholo can compute views
       interactively,  but unlike rvu, it reuses any and all information that was previously computed in this or
       earlier runs using the given holodeck file, hdkfile.

       The -n option sets the number of rtrace(1) processes to start for the calculation.  It defaults to  zero,
       which  means  that no new rays will be calculated.  In general, it is unwise to start more processes than
       there are processors on the system.  On a multiprocessing system with 4 or more processors, a  value  one
       less than the total should yield optimal interactive rates on a lightly loaded system.

       The  -o  option  sets  the  output  device to use for display.  Currently, there are at least two display
       drivers available, x11 and glx.  If no output device  is  specified,  then  rholo  will  start  a  global
       calculation  of  the  holodeck,  filling  it  in as time goes by.  The quality of the final holodeck will
       depend on how long rholo runs before it is interrupted or runs out of file space or  time,  according  to
       the  variable  settings  described  in  the  control variable section, below.  If no output device and no
       processes are specified, rholo creates an empty holodeck using the given varfile, if present.

       The -i option provides for reading from the standard input.  Without a display driver, the  input  should
       consist  only  of  views, which will be used to limit which parts of the holodeck are rendered in a batch
       calculation.  With a display driver, most of the commands understood by the driver can be  issued  either
       from the operating window or the standard input.  These commands are described together with their window
       equivalents in the display driver section following the control variable section.

       The  -f option permits the given holodeck to be clobbered.  Without this option, giving both the holodeck
       file and a variable file (or "-") will result in an error message if the holodeck  exists,  since  giving
       both  implies  that  a  new  holodeck is being created.  (When reusing an existing holodeck, the variable
       values are taken from the holodeck header, though some may be overriden by giving a "+" in place  of  the
       variable  file.)   Also,  attempts  to clear the holodeck using the interactive "clobber" command will be
       permitted only if the -f option is given on the initial command line.

       The -r option tells rholo to open the holodeck file read-only, which is the default if there are  no  ray
       calculation  processes.  If one or more rtrace processes are started with the -n option and the -r option
       is given or the specified holodeck is not writable by the user, then any additional rays computed  during
       the session will be discarded rather than saved to the holodeck file.

       One  or more holodeck section boundaries are defined along with other parameters in the holodeck file or,
       if the holodeck is being created, the rholo control variable file,  varfile.   These  section  boundaries
       define  where  you  may  move,  or  at  least,  where you will be able to see, since they determine where
       computed rays are stored.  Additional variable settings may be added or overridden on  the  command  line
       following  varfile.   If  no  varfile  is  needed, a holodeck may still be created by giving a "-" on the
       command line in place of the variable file.  If you wish to override some of the variable settings in  an
       existing  holodeck,  use  a  "+", followed by the new settings on the command line.  Upper case variables
       specified more than once will result in a warning message (unless the -w option is present), and the last
       value given will be the one used, unless it would conflict with something in an  existing  holodeck  that
       cannot  be  changed, such as the section boundaries.  Changing section boundaries requires creating a new
       holodeck using rholo without a -n or -o option, then running rhcopy(1) to fill the new holodeck with  the
       old holodeck's contents.

       The -w option turns off warnings about multiply and misassigned variables.

       Rendering  variable  assignments appear one per line in varfile.  The name of the variable is followed by
       an equals sign ('=') and its value(s).  The end of line may be escaped with a backslash ('\'), though  it
       is  not usually necessary.  Variables that should have only one value are given in upper case.  Variables
       that may have multiple values are given in lower case.  Variables may be abbreviated by their first three
       letters.  Comments in varfile start with a pound sign ('#') and proceed to the end of line.

CONTROL VARIABLES

       The control variables, their interpretations and default values are given below.

       OCTREE    The name of the octree file.  The default name is the same  as  hdkfile  but  with  any  suffix
                 replaced  by  ".oct".  This variable may also be read from rad(1) if the "RIF" variable is set.
                 (See below.)

       RIF       This variable specifies a rad input file to use as a source  of  rendering  options  and  other
                 variable  settings.   If  given,  rholo will execute rad and get the rendering options to later
                 pass to rtrace.  Besides prepending the  render  variable,  rholo  will  also  extract  default
                 settings for the common "OCTREE" variable, and the "EYESEP" variable.  Following the file name,
                 overriding  variable  settings  may  be given, which will be passed to rad on the command line.
                 Settings with spaces in them should be enclosed in quotes.  The  execution  of  rad  will  also
                 update the contents of the octree, if necessary.  There is no default value for this variable.

       EYESEP    The interocular spacing for stereo viewing.  I.e., the world distance between the pupils of the
                 left and right eyes.  There is no default value for this variable.

       section   A  section  is  a  parallelepiped  given by an origin and three axis vectors (i.e., 12 floating
                 point values in world coordinates).  The axis vectors define the three edges  attached  to  the
                 origin vertex, and the other edges and vertices are determined by the parallel wall constraint.
                 A holodeck section is a region in which the user may freely move about to obtain a view of what
                 is  outside  that  region.   In object rendering mode, a section may instead contain a detailed
                 object to be viewed from the outside.  The grid dimensions for each axis may also be  given  by
                 three additional integer arguments following the three axes.  Otherwise, if the grid dimensions
                 are left out or any are unspecified or zero, the "GRID" variable will be used to determine them
                 from  the section axis lengths.  (See below.)  There is no default value for this variable, and
                 it is required.  If multiple values are  given,  they  will  be  used  for  multiple  rendering
                 sections,  which  may  or may not be connected, but should generally not overlap.  The starting
                 view for interactive display will be the center of the first  section  facing  the  positive  X
                 direction  unless "OBSTRUCTIONS" is set to True, when the view will be placed outside the first
                 section.  (See below for this variable's definition.)  The third axis of the first  section  is
                 also used as the default "view up" vector.

       geometry  This variable is used to associate geometry from an octree file with one or more sections.  The
                 specified octree will be used by certain drivers (e.g., the "ogl" driver) to display simplified
                 geometry using hardware lighting during motion.  If this variable is not set, such drivers will
                 use the main octree file, which contains all the scene geometry.  This can be slow if the scene
                 is complex, so use simplified geometry with portals (described below) or specify a non-existent
                 file to turn geometry rendering off.  If there is just one setting of this variable, it will be
                 used  for  all  sections.   If  there  are  multiple settings, they will correspond to multiple
                 sections.

       portals   This variable is used to associate portal geometry with one or more sections, as  required  for
                 simplified  geometry in some drivers (e.g., "ogl").  The portal geometry itself is given in one
                 or more RADIANCE scene files or quoted commands beginning with an exclamation mark  ('!'),  and
                 the  input  may or may not include material definitons.  (I.e., the surfaces may be modified by
                 "void" if there are no materials.)  A portal is an imaginary surface that intervenes between  a
                 view  and  some  detailed  geometry  not  included in the current section.  (See the "geometry"
                 variable definition, above.)  Portals are often placed in doorways, windows  and  in  front  of
                 mirrors.   Portal geometry may also be placed around local geometry that has been culled due to
                 its complexity.  This specification is necessary in order that the  detail  geometry  be  drawn
                 correctly,  and  that  mirrors  will  work  with  virtual  distances.   (See  the definition of
                 "VDISTANCE," below.)  The orientation of the portal surface geometry is ignored, so  they  have
                 effect  no matter which way they are facing.  If there is just one setting of this variable, it
                 will be used for all sections.  If  there  are  multiple  settings,  they  will  correspond  to
                 multiple sections.

       GRID      The  default  section  grid  size  in  world  distance  units.   If  any  section  axis grid is
                 unspecified, the length of the axis will be divided by this number and rounded up to  the  next
                 larger  integer.   The  grid size is a very important determiner of holodeck performance, since
                 the holodeck beam index is proportional to average axis grid dimension to the fourth power!  If
                 the beam index is too large, poor file and memory performance will result.  If the  beam  index
                 is  too  small,  the  holodeck  resolution  will  suffer and objects will tend to break up.  In
                 general, the grid size should divide each section wall into  64  or  fewer  cells  for  optimal
                 performance.  The default value for this variable is the maximum section axis length divided by
                 8.

       OBSTRUCTIONS
                 This  boolean  variable tells rholo whether or not to compute intersections with objects inside
                 holodeck sections.  If it is set to "False", then only objects outside  the  holodeck  sections
                 will  be  visible.  This is appropriate when you know all sections to be devoid of geometry, or
                 when some secondary method is available for rendering geometry inside each section.  If  it  is
                 set  to  "True,"  all  inside geometry will be visible.  There is no default for this variable,
                 which means that rays will be started at random points within each holodeck  section,  allowing
                 interior geometry to be partially sampled.

       VDISTANCE This  boolean  variable  determines  whether the actual distance to objects is computed, or the
                 virtual distance.  If it is set to "True," the virtual distance will be used, which  will  make
                 reflections and refractions through smooth, flat objects clear, but will blur the boundaries of
                 those  objects.   Note  that  some  drivers  cannot  render  virtual samples without the proper
                 placement of "portals" in the scene.  (See above for the definition of the "portals" variable.)
                 If it is set to "False," the reflections and refractions will be blurred, but object boundaries
                 will remain sharp.  The default value for this variable is "False."

       CACHE     The memory cache size to use for ray samples during interactive rendering, in Megabytes.   This
                 tuning  parameter  determines  the  tradeoff  between  memory  use  and  disk  access  time for
                 interactive display.  This value will not affect memory use or performance for global  holodeck
                 rendering  if  there  is  no  display  process.   The  default  cache  is effectively set to 16
                 Megabytes.  If this variable is set to zero, no limit will be placed  on  memory  use  and  the
                 process will grow to accommodate all the beams that have been accessed.

       DISKSPACE Specifies  the  maximum  holodeck file size, in Megabytes.  Once the holodeck file reaches this
                 size, rtrace will exit.  If there is no display process, rholo will  also  exit.   The  default
                 value for this variable is 0, which is interpreted as no size limit.

       TIME      Sets  the maximum time to run rtrace, in decimal hours.  After this length of time, rtrace will
                 exit.  If there is no display process, rholo will also exit.  If there is  a  display  process,
                 and  rtrace  is  restarted with the "restart" command, then the time clock will be restarted as
                 well.  The default value for this variable is 0, which is interpreted as no time limit.

       REPORT    This variable may be used to specify a interval for progress reports in minutes.  If this value
                 is zero, then progress reports will not be given in intervals, but a final report of  the  file
                 size  and  fragmentation  will  be issued when the program terminates, along with the number of
                 rays and packets computed.  If a filename is given after the interval, it will be used  as  the
                 error  file  for reports and error messages instead of the standard error.  There is no default
                 value for this variable.

       render    This variable may be used to specify additional options to rtrace.  These options  will  appear
                 after the options set automatically by rad, and thus will override the default values.

DISPLAY DRIVER

       Rholo  may  be  started  in  interactive  mode  using  the -o option to specify an output display driver.
       Currently, three drivers are supported on most machines, glx, ogl  and  x11.   (In  addition,  there  are
       variations on the first two drivers for stereo displays, local objects and human tone mapping.  These are
       accessed  with some combination of the 's', 'o' and 'h' suffixes, always in that order.  E.g., the OpenGL
       stereo driver with human tone mapping would  be  "oglsh".)   Each  driver  accepts  simple  one-character
       commands and mouse view control in its operating window.  If the -i option is also given, then the driver
       will  also  listen  for  commands entered on the standard input.  (It is unwise to use the -i option when
       rholo is run in the background, because it will occassionally stop the process when input is available on
       the controlling terminal.)  The commands and their single-key window equivalents are given below.

       VIEW=    (mouse)
                 Modify the current view with the specified parameters.   (See  the  -v*  view  options  in  the
                 rpict(1)  manual  page  for  parameter details.)  There is no one-character equivalent for this
                 command in the display window.  Instead, the mouse is used to control the current view  in  the
                 following ways:

                 CONTROL   MOUSE     ACTION
                 (none)    left Move forward towards cursor position
                 (none)    middle    Rotate in place (usually safe)
                 (none)    right     Move backward away from cursor position
                 shift     left Orbit left around cursor position
                 shift     middle    Orbit skyward
                 cntl middle    Orbit earthward
                 shift     right     Orbit right around cursor position
                 cntl+shift     any       Frame focus by dragging rectangle

                 For  all  movements  but  rotating in place, the cursor must be placed over some bit of visible
                 geometry, otherwise the driver has no reference point from which to work.  It is best  to  just
                 experiment  with  these  controls  until you learn to fly safely in your model.  And if you run
                 into trouble, the "last" command is very useful.  (See below.)

       last    'l'
                 Return to the previous view.  Some drivers will save up multiple views in a  history,  but  you
                 are guaranteed at least one.

       where    'v'
                 Print the current view parameters to the standard output.  This is useful for finding out where
                 you are, or for saving specific views in a keyframe file for animations or returning to later.

       frame     'f'
                 Change  the  calculation  focus.   If  the  "frame"  command  is given with no arguments on the
                 standard input, it is equivalent to the interactive 'F' command,  which  releases  the  current
                 calculation  focus.   If  the "frame" command is followed by a relative horizontal and vertical
                 position (specified as floating point values between 0 and 1), then the new focus is about this
                 position on the screen (where 0 0 is at the lower left of the display).  This is equivalent  to
                 the interactive 'f' command, which sets the focus about the current window cursor position.  If
                 four  relative  coordinates  are  given,  they  are  assumed to mean the minimum horizontal and
                 vertical positon, and the maximum horizontal and vertical position, in  that  order.   This  is
                 equivalent to dragging the mouse over a rectangular area with the 'cntl+shift' keys held down.

       pause    'p'
                 Pause the ray calculation temporarily.

       resume    <cr>
                 Resume the ray calculation.

       redraw    ^L
                 Redraw  the current view from values calculated and stored in the holodeck.  When executed from
                 the display window via '^L', the effect may be slightly different, since all stored information
                 will be flushed.

       kill    'K'
                 Terminate the ray calculation process.  This  is  usually  unnecessary,  but  is  provided  for
                 special purpose applications.

       restart    'R'
                 Restart the ray calculation process.  If the "RIF" variable has been set, rad will be run first
                 to assure that the octree is up to date.

       clobber    'C'
                 Clobber  the  holodeck  contents,  deleting  all  that  has  been calculated before.  To get an
                 interactive dissolve of changes to the scene description, use the sequence  "kill,"  "clobber,"
                 "restart."  This command will be honored by rholo only if it was started with the -f option.

       quit    'q'
                 Quit  rholo.   The  ray  tracing  calculation  is  terminated and all values are flushed to the
                 holodeck file.  This is the normal way to exit the program.

       In addition to these standard commands, all drivers offer the following supplimentary controls.

       'h'       Fix the head height.  All mouse-controlled view motions will  be  adjusted  so  that  the  head
                 height does not change (where vertical is determined by the current view up vector).

       'H'       Release the head height, allowing it to change again during mouse-controlled movements.

       ^R        Redraw  the  current  view, recomputing the tone mapping in the process.  This is useful if the
                 current view is too light or too dark.  (On an 8-bit display, it may be necessary to redraw the
                 screen a couple of times to get the best image.)  The  "^L"  command  is  a  stronger  type  of
                 redraw,  since  it will use only rays in the current view to determine the tone mapping, rather
                 than a history of rays drawn from the rholo server.

EXAMPLES

       The following shows a minimal holodeck control variable file:

          RIF= sample.rif                       # rad input file
          section= 2 2 4  5 0 0  0 7 0  0 0 3   # section parallelepiped origin & vectors

       Technically, the "RIF" setting is not necessary, but the results are much better when rholo  is  used  in
       association with rad to control the rendering parameters.

       Here is a slightly more sophisticated example:

          RIF=electric.rif
          section= 7 4 3.5  15 0 0  0 10 0  0 0 5
          GRID= .75
          CACHE= 20 # cache size in megabytes
          TIME= 120 # maximum time in hours
          DISK= 200 # maximum file size in megabytes
          REPORT= 60 elect.her
          OBST= False
          VDIST= False

       We can invoke rholo on the above file to compute a hologram overnight in batch mode:

         rholo -n 1 elect.hdk elect.hif TIME=12 &

       This will report progress every hour to "elect.her".

       The next morning, we can look at the holodeck interactively:

         rholo-n 1 -o x11 elect.hdk &

       If  the  previous command were still running, the above command would fail because the permissions on the
       holodeck would not grant access.  To terminate rholo without losing any  computed  information,  use  the
       kill(1)  command  to  send an interrupt or terminate signal to the rholo process listed by ps(1).  If the
       system goes down or something dire happens to rholo, it may be necessary to restore read/write permission
       on the holodeck using chmod(1).  Do not do this, however, unless you are absolutely sure that rholo is no
       longer running on the holodeck.  (See the ps man page on how to check for running  processes.   The  file
       modification date as reported by ls(1) is another clue.)

       To  view  the  holodeck  without invoking a new ray calculation, leave off the -n option.  To compute the
       holodeck with multiple processes on a multiprocessing system, use a higher  number  for  the  -n  option.
       (Don't use more processes than you have processors, though, because you'll only slow things down.)

       To  allow  interactive  control of rholo from another process, the following invocation will override the
       file size limit and permit the holodeck to be clobbered by a command entered on the standard input:

         rholo -n 1 -o x11 -i -f elect.hdk + DISK=0

       To create an empty holodeck from settings on the command line:

         rholo new.hdk - RIF=sample.rif "section=2 2 4  8 0 0  0 10 0  0 0 3"

NOTES

       Each time rays are added to a beam, that beam's position in the holodeck  file  is  released  and  a  new
       position  is  found.   After  substantial  computation  on  a holodeck, especially over several runs, the
       holodeck file may become fragmented, leaving  holes  that  take  up  space  without  contributing  useful
       information.   The  percentage  fragmentation  is  reported  when  the  REPORT  variable  is set and some
       calculation has taken place.  When this percentage gets high on a large holodeck (above 15% or so), it is
       a good idea to run the rhoptimize(1) program once batch rendering is  complete  to  close  the  gaps  and
       collect  beams  into  groups  for  quicker rendering access.  Rholo will print periodic warnings when the
       fragmentation exceeds 20%.

AUTHOR

       Greg Ward Larson

ACKNOWLEDGMENT

       This work was supported by Silicon Graphics, Inc.

BUGS

       Global participating media are not handled correctly, though local participating media will usually work.

SEE ALSO

       chmod(1), ls(1), ps(1), rad(1), ranimate(1), rhcopy(1), rhinfo(1),  rhoptimize(1),  rhpict(1),  rpict(1),
       rtrace(1), rvu(1)

RADIANCE                                             1/14/99                                            RHOLO(1)