Man Linux: Main Page and Category List

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 6-sided parallel prism 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  prism   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.)

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

       wherev’
                 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.

       framef’
                 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.

       pausep’
                 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.

       killK’
                 Terminate the  ray  calculation  process.   This  is  usually
                 unnecessary,    but   is   provided   for   special   purpose
                 applications.

       restartR’
                 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.

       clobberC’
                 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.

       quitq’
                 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 prism boundaries

       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)