| 1 |
greg |
1.4 |
.\" RCSid "$Id: rholo.1,v 1.3 2004/01/01 19:31:45 greg Exp $"
|
| 2 |
greg |
1.1 |
.TH RHOLO 1 1/14/99 RADIANCE
|
| 3 |
|
|
.SH NAME
|
| 4 |
|
|
rholo - generate/view a RADIANCE holodeck
|
| 5 |
|
|
.SH SYNOPSIS
|
| 6 |
|
|
.B rholo
|
| 7 |
|
|
[
|
| 8 |
|
|
.B "\-n npr"
|
| 9 |
|
|
][
|
| 10 |
|
|
.B "\-o dev"
|
| 11 |
|
|
][
|
| 12 |
|
|
.B \-w
|
| 13 |
|
|
][
|
| 14 |
|
|
.B \-i
|
| 15 |
|
|
][
|
| 16 |
|
|
.B \-f
|
| 17 |
|
|
|
|
| 18 |
|
|
.B \-r
|
| 19 |
|
|
]
|
| 20 |
|
|
.B hdkfile
|
| 21 |
|
|
[
|
| 22 |
|
|
.B "varfile | + | -"
|
| 23 |
|
|
[
|
| 24 |
|
|
.B "VAR\=value .."
|
| 25 |
|
|
]
|
| 26 |
|
|
]
|
| 27 |
|
|
.SH DESCRIPTION
|
| 28 |
|
|
.I Rholo
|
| 29 |
|
|
is a program for generating and viewing holodeck files.
|
| 30 |
|
|
Similar to
|
| 31 |
greg |
1.3 |
.I rvu(1),
|
| 32 |
greg |
1.1 |
.I rholo
|
| 33 |
|
|
can compute views interactively, but unlike
|
| 34 |
greg |
1.3 |
.I rvu,
|
| 35 |
greg |
1.1 |
it reuses any and all information that was previously computed in
|
| 36 |
|
|
this or earlier runs using the given holodeck file,
|
| 37 |
|
|
.I hdkfile.
|
| 38 |
|
|
.PP
|
| 39 |
|
|
The
|
| 40 |
|
|
.I \-n
|
| 41 |
|
|
option sets the number of
|
| 42 |
|
|
.I rtrace(1)
|
| 43 |
|
|
processes to start for the calculation.
|
| 44 |
|
|
It defaults to zero, which means that no new rays will be calculated.
|
| 45 |
|
|
In general, it is unwise to start more processes than there are
|
| 46 |
|
|
processors on the system.
|
| 47 |
|
|
On a multiprocessing system with 4 or more processors, a value one
|
| 48 |
|
|
less than the total should yield optimal interactive rates on a
|
| 49 |
|
|
lightly loaded system.
|
| 50 |
|
|
.PP
|
| 51 |
|
|
The \-o
|
| 52 |
|
|
option sets the output device to use for display.
|
| 53 |
|
|
Currently, there are at least two display drivers available,
|
| 54 |
|
|
.I x11
|
| 55 |
|
|
and
|
| 56 |
|
|
.I glx.
|
| 57 |
|
|
If no output device is specified, then
|
| 58 |
|
|
.I rholo
|
| 59 |
|
|
will start a global calculation of the holodeck, filling it
|
| 60 |
|
|
in as time goes by.
|
| 61 |
|
|
The quality of the final holodeck will depend on how long
|
| 62 |
|
|
.I rholo
|
| 63 |
|
|
runs before it is interrupted or runs out of file space or time,
|
| 64 |
|
|
according to the variable settings described in the control variable
|
| 65 |
|
|
section, below.
|
| 66 |
|
|
If no output device and no processes are specified,
|
| 67 |
|
|
.I rholo
|
| 68 |
|
|
creates an empty holodeck using the given
|
| 69 |
|
|
.I varfile,
|
| 70 |
|
|
if present.
|
| 71 |
|
|
.PP
|
| 72 |
|
|
The
|
| 73 |
|
|
.I \-i
|
| 74 |
|
|
option provides for reading from the standard input.
|
| 75 |
|
|
Without a display driver, the input should consist only of views,
|
| 76 |
|
|
which will be used to limit which parts of the holodeck are rendered
|
| 77 |
|
|
in a batch calculation.
|
| 78 |
|
|
With a display driver, most of the commands understood by the driver
|
| 79 |
|
|
can be issued either from the operating window or the standard input.
|
| 80 |
|
|
These commands are described together with their window equivalents in
|
| 81 |
|
|
the display driver section following the control variable section.
|
| 82 |
|
|
.PP
|
| 83 |
|
|
The
|
| 84 |
|
|
.I \-f
|
| 85 |
|
|
option permits the given holodeck to be clobbered.
|
| 86 |
|
|
Without this option, giving both the holodeck file and a variable file (or "-")
|
| 87 |
|
|
will result in an error message if the holodeck exists, since giving
|
| 88 |
|
|
both implies that a new holodeck is being created.
|
| 89 |
|
|
(When reusing an existing holodeck, the variable values are taken
|
| 90 |
|
|
from the holodeck header, though some may be overriden by giving a "+"
|
| 91 |
|
|
in place of the variable file.)\0
|
| 92 |
|
|
Also, attempts to clear the holodeck using the interactive
|
| 93 |
|
|
"clobber" command will be permitted only if the
|
| 94 |
|
|
.I \-f
|
| 95 |
|
|
option is given on the initial command line.
|
| 96 |
|
|
.PP
|
| 97 |
|
|
The
|
| 98 |
|
|
.I \-r
|
| 99 |
|
|
option tells
|
| 100 |
|
|
.I rholo
|
| 101 |
|
|
to open the holodeck file read-only, which is the default if there
|
| 102 |
|
|
are no ray calculation processes.
|
| 103 |
|
|
If one or more
|
| 104 |
|
|
.I rtrace
|
| 105 |
|
|
processes are started with the
|
| 106 |
|
|
.I \-n
|
| 107 |
|
|
option and the
|
| 108 |
|
|
.I \-r
|
| 109 |
|
|
option is given or the specified holodeck is not writable by the user,
|
| 110 |
|
|
then any additional rays computed during the session will be discarded
|
| 111 |
|
|
rather than saved to the holodeck file.
|
| 112 |
|
|
.PP
|
| 113 |
|
|
One or more holodeck section boundaries are defined along with other
|
| 114 |
|
|
parameters in the holodeck file or,
|
| 115 |
|
|
if the holodeck is being created, the
|
| 116 |
|
|
.I rholo
|
| 117 |
|
|
control variable file,
|
| 118 |
|
|
.I varfile.
|
| 119 |
|
|
These section boundaries define where you may move, or at least,
|
| 120 |
|
|
where you will be able to see, since they determine where computed
|
| 121 |
|
|
rays are stored.
|
| 122 |
|
|
Additional variable settings may be added or overridden on the
|
| 123 |
|
|
command line following
|
| 124 |
|
|
.I varfile.
|
| 125 |
|
|
If no
|
| 126 |
|
|
.I varfile
|
| 127 |
|
|
is needed, a holodeck may still be created by giving a "-" on the
|
| 128 |
|
|
command line in place of the variable file.
|
| 129 |
|
|
If you wish to override some of the variable settings in an existing
|
| 130 |
|
|
holodeck, use a "+", followed by the new settings on the command line.
|
| 131 |
|
|
Upper case variables specified more than once will result in
|
| 132 |
|
|
a warning message (unless the
|
| 133 |
|
|
.I \-w
|
| 134 |
|
|
option is present),
|
| 135 |
|
|
and the last value given will be the one used, unless it would conflict
|
| 136 |
|
|
with something in an existing holodeck that cannot be changed, such as
|
| 137 |
|
|
the section boundaries.
|
| 138 |
|
|
Changing section boundaries requires creating a new holodeck using
|
| 139 |
|
|
.I rholo
|
| 140 |
|
|
without a
|
| 141 |
|
|
.I \-n
|
| 142 |
|
|
or
|
| 143 |
|
|
.I \-o
|
| 144 |
|
|
option, then running
|
| 145 |
|
|
.I rhcopy(1)
|
| 146 |
|
|
to fill the new holodeck with the old holodeck's contents.
|
| 147 |
|
|
.PP
|
| 148 |
|
|
The
|
| 149 |
|
|
.I \-w
|
| 150 |
|
|
option turns off warnings about multiply and misassigned variables.
|
| 151 |
|
|
.PP
|
| 152 |
|
|
Rendering variable assignments appear one per line in
|
| 153 |
|
|
.I varfile.
|
| 154 |
|
|
The name of the variable is followed by an equals sign
|
| 155 |
|
|
('=') and its value(s).
|
| 156 |
|
|
The end of line may be escaped with a backslash ('\\'), though it is
|
| 157 |
|
|
not usually necessary.
|
| 158 |
|
|
Variables that should have only one value are given in upper case.
|
| 159 |
|
|
Variables that may have multiple values are given in lower case.
|
| 160 |
|
|
Variables may be abbreviated by their first three letters.
|
| 161 |
|
|
Comments in
|
| 162 |
|
|
.I varfile
|
| 163 |
|
|
start with a pound sign ('#') and proceed to the end of line.
|
| 164 |
|
|
.SH "CONTROL VARIABLES"
|
| 165 |
|
|
The control variables, their interpretations and default values
|
| 166 |
|
|
are given below.
|
| 167 |
|
|
.TP 10n
|
| 168 |
|
|
.BR OCTREE
|
| 169 |
|
|
The name of the octree file.
|
| 170 |
|
|
The default name is the same as
|
| 171 |
|
|
.I hdkfile
|
| 172 |
|
|
but with any suffix replaced by ".oct".
|
| 173 |
|
|
This variable may also be read from
|
| 174 |
|
|
.I rad(1)
|
| 175 |
|
|
if the "RIF" variable is set.
|
| 176 |
|
|
(See below.)\0
|
| 177 |
|
|
.TP
|
| 178 |
|
|
.BR RIF
|
| 179 |
|
|
This variable specifies a
|
| 180 |
|
|
.I rad
|
| 181 |
|
|
input file to use as a source of rendering options and other
|
| 182 |
|
|
variable settings.
|
| 183 |
|
|
If given,
|
| 184 |
|
|
.I rholo
|
| 185 |
|
|
will execute
|
| 186 |
|
|
.I rad
|
| 187 |
|
|
and get the rendering options to later pass to
|
| 188 |
|
|
.I rtrace.
|
| 189 |
|
|
Besides prepending the
|
| 190 |
|
|
.I render
|
| 191 |
|
|
variable,
|
| 192 |
|
|
.I rholo
|
| 193 |
|
|
will also extract default settings for the common "OCTREE" variable,
|
| 194 |
|
|
and the "EYESEP" variable.
|
| 195 |
|
|
Following the file name, overriding variable settings may be given,
|
| 196 |
|
|
which will be passed to
|
| 197 |
|
|
.I rad
|
| 198 |
|
|
on the command line.
|
| 199 |
|
|
Settings with spaces in them should be enclosed in quotes.
|
| 200 |
|
|
The execution of
|
| 201 |
|
|
.I rad
|
| 202 |
|
|
will also update the contents of the octree, if necessary.
|
| 203 |
|
|
There is no default value for this variable.
|
| 204 |
|
|
.TP
|
| 205 |
|
|
.BR EYESEP
|
| 206 |
|
|
The interocular spacing for stereo viewing.
|
| 207 |
|
|
I.e., the world distance between the pupils of the left and right eyes.
|
| 208 |
|
|
There is no default value for this variable.
|
| 209 |
|
|
.TP
|
| 210 |
|
|
.BR section
|
| 211 |
|
|
A section is a 6-sided parallel prism given by an origin and three axis
|
| 212 |
|
|
vectors (i.e., 12 floating point values in world coordinates).
|
| 213 |
|
|
The axis vectors define the three edges attached to the origin vertex,
|
| 214 |
|
|
and the other edges and vertices are determined by the parallel wall
|
| 215 |
|
|
constraint.
|
| 216 |
|
|
A holodeck section is a region in which the user may freely move about
|
| 217 |
|
|
to obtain a view of what is outside that region.
|
| 218 |
|
|
In object rendering mode, a section may instead contain a detailed
|
| 219 |
|
|
object to be viewed from the outside.
|
| 220 |
|
|
The grid dimensions for each axis may also be given by three additional
|
| 221 |
|
|
integer arguments following the prism axes.
|
| 222 |
|
|
Otherwise, if the grid dimensions are left out or any are unspecified
|
| 223 |
|
|
or zero, the "GRID" variable will be used to determine them from the
|
| 224 |
|
|
section axis lengths.
|
| 225 |
|
|
(See below.)\0
|
| 226 |
|
|
There is no default value for this variable, and it is required.
|
| 227 |
|
|
If multiple values are given, they will be used for multiple rendering
|
| 228 |
|
|
sections, which may or may not be connected, but should generally not
|
| 229 |
|
|
overlap.
|
| 230 |
|
|
The starting view for interactive display will be the center
|
| 231 |
|
|
of the first section facing the positive X direction unless
|
| 232 |
|
|
"OBSTRUCTIONS" is set to True, when the view will be placed
|
| 233 |
|
|
outside the first section.
|
| 234 |
|
|
(See below for this variable's definition.)\0
|
| 235 |
|
|
The third axis of the first section is also
|
| 236 |
|
|
used as the default "view up" vector.
|
| 237 |
|
|
.TP
|
| 238 |
|
|
.BR geometry
|
| 239 |
|
|
This variable is used to associate geometry from an
|
| 240 |
|
|
octree file with one or more sections.
|
| 241 |
|
|
The specified octree will be used by certain drivers (e.g., the "ogl" driver)
|
| 242 |
|
|
to display simplified geometry using hardware lighting during motion.
|
| 243 |
|
|
If this variable is not set, such drivers will use the main octree file,
|
| 244 |
|
|
which contains all the scene geometry.
|
| 245 |
|
|
This can be slow if the scene is complex, so use simplified geometry
|
| 246 |
|
|
with portals (described below) or specify a non-existent file to turn
|
| 247 |
|
|
geometry rendering off.
|
| 248 |
|
|
If there is just one setting of this variable, it will be used for all
|
| 249 |
|
|
sections.
|
| 250 |
|
|
If there are multiple settings, they will correspond to multiple sections.
|
| 251 |
|
|
.TP
|
| 252 |
|
|
.BR portals
|
| 253 |
|
|
This variable is used to associate portal geometry with one or more
|
| 254 |
|
|
sections, as required for simplified geometry in some drivers (e.g., "ogl").
|
| 255 |
|
|
The portal geometry itself is given in one or more RADIANCE scene files or
|
| 256 |
|
|
quoted commands beginning with an exclamation mark ('!'),
|
| 257 |
|
|
and the input may or may not include material definitons.
|
| 258 |
|
|
(I.e., the surfaces may be modified by "void" if there are no materials.)
|
| 259 |
|
|
A portal is an imaginary surface that intervenes between a view and
|
| 260 |
|
|
some detailed geometry not included in the current section.
|
| 261 |
|
|
(See the "geometry" variable definition, above.)
|
| 262 |
|
|
Portals are often placed in doorways, windows and in front of mirrors.
|
| 263 |
|
|
Portal geometry may also be placed around local geometry that has been
|
| 264 |
|
|
culled due to its complexity.
|
| 265 |
|
|
This specification is necessary in order that the detail geometry be
|
| 266 |
|
|
drawn correctly, and that mirrors will work with virtual distances.
|
| 267 |
|
|
(See the definition of "VDISTANCE," below.)
|
| 268 |
|
|
The orientation of the portal surface geometry is ignored, so they
|
| 269 |
|
|
have effect no matter which way they are facing.
|
| 270 |
|
|
If there is just one setting of this variable, it will be used for all
|
| 271 |
|
|
sections.
|
| 272 |
|
|
If there are multiple settings, they will correspond to multiple sections.
|
| 273 |
|
|
.TP
|
| 274 |
|
|
.BR GRID
|
| 275 |
|
|
The default section grid size in world distance units.
|
| 276 |
|
|
If any section axis grid is unspecified, the length of the axis
|
| 277 |
|
|
will be divided by this number and rounded up to the next larger integer.
|
| 278 |
|
|
The grid size is a very important determiner of holodeck performance,
|
| 279 |
|
|
since the holodeck beam index is proportional to average axis grid dimension
|
| 280 |
|
|
to the fourth power!
|
| 281 |
|
|
If the beam index is too large, poor file and memory performance will
|
| 282 |
|
|
result.
|
| 283 |
|
|
If the beam index is too small, the holodeck resolution will suffer and
|
| 284 |
|
|
objects will tend to break up.
|
| 285 |
|
|
In general, the grid size should divide each section wall
|
| 286 |
|
|
into 64 or fewer cells for optimal performance.
|
| 287 |
|
|
The default value for this variable is the maximum section axis length
|
| 288 |
|
|
divided by 8.
|
| 289 |
|
|
.TP
|
| 290 |
|
|
.BR OBSTRUCTIONS
|
| 291 |
|
|
This boolean variable tells
|
| 292 |
|
|
.I rholo
|
| 293 |
|
|
whether or not to compute intersections with objects inside holodeck
|
| 294 |
|
|
sections.
|
| 295 |
|
|
If it is set to "False", then only objects outside the holodeck sections
|
| 296 |
|
|
will be visible.
|
| 297 |
|
|
This is appropriate when you know all sections to be devoid of geometry,
|
| 298 |
|
|
or when some secondary method is available for rendering geometry inside
|
| 299 |
|
|
each section.
|
| 300 |
|
|
If it is set to "True," all inside geometry will be visible.
|
| 301 |
|
|
There is no default for this variable, which means that rays will be
|
| 302 |
|
|
started at random points within each holodeck section, allowing interior
|
| 303 |
|
|
geometry to be partially sampled.
|
| 304 |
|
|
.TP
|
| 305 |
|
|
.BR VDISTANCE
|
| 306 |
|
|
This boolean variable determines whether the actual distance to objects
|
| 307 |
|
|
is computed, or the virtual distance.
|
| 308 |
|
|
If it is set to "True," the virtual distance will be used, which will
|
| 309 |
|
|
make reflections and refractions through smooth, flat objects clear,
|
| 310 |
|
|
but will blur the boundaries of those objects.
|
| 311 |
|
|
Note that some drivers cannot render virtual samples without the proper
|
| 312 |
|
|
placement of "portals" in the scene.
|
| 313 |
|
|
(See above for the definition of the "portals" variable.)
|
| 314 |
|
|
If it is set to "False," the reflections and refractions will be blurred,
|
| 315 |
|
|
but object boundaries will remain sharp.
|
| 316 |
|
|
The default value for this variable is "False."
|
| 317 |
|
|
.TP
|
| 318 |
|
|
.BR CACHE
|
| 319 |
|
|
The memory cache size to use for ray samples
|
| 320 |
|
|
during interactive rendering, in Megabytes.
|
| 321 |
|
|
This tuning parameter determines the tradeoff between memory use and
|
| 322 |
|
|
disk access time for interactive display.
|
| 323 |
|
|
This value will not affect memory use or performance for global
|
| 324 |
|
|
holodeck rendering if there is no display process.
|
| 325 |
|
|
The default cache is effectively set to 16 Megabytes.
|
| 326 |
|
|
If this variable is set to zero, no limit will be placed on memory
|
| 327 |
|
|
use and the process will grow to accommodate all the beams that
|
| 328 |
|
|
have been accessed.
|
| 329 |
|
|
.TP
|
| 330 |
|
|
.BR DISKSPACE
|
| 331 |
|
|
Specifies the maximum holodeck file size, in Megabytes.
|
| 332 |
|
|
Once the holodeck file reaches this size,
|
| 333 |
|
|
.I rtrace
|
| 334 |
|
|
will exit.
|
| 335 |
|
|
If there is no display process,
|
| 336 |
|
|
.I rholo
|
| 337 |
|
|
will also exit.
|
| 338 |
|
|
The default value for this variable is 0, which is interpreted as no
|
| 339 |
|
|
size limit.
|
| 340 |
|
|
.TP
|
| 341 |
|
|
.BR TIME
|
| 342 |
|
|
Sets the maximum time to run rtrace, in decimal hours.
|
| 343 |
|
|
After this length of time,
|
| 344 |
|
|
.I rtrace
|
| 345 |
|
|
will exit.
|
| 346 |
|
|
If there is no display process,
|
| 347 |
|
|
.I rholo
|
| 348 |
|
|
will also exit.
|
| 349 |
|
|
If there is a display process, and
|
| 350 |
|
|
.I rtrace
|
| 351 |
|
|
is restarted with the "restart" command, then the time clock will
|
| 352 |
|
|
be restarted as well.
|
| 353 |
|
|
The default value for this variable is 0, which is interpreted as no
|
| 354 |
|
|
time limit.
|
| 355 |
|
|
.TP
|
| 356 |
|
|
.BR REPORT
|
| 357 |
|
|
This variable may be used to specify a interval for
|
| 358 |
|
|
progress reports in minutes.
|
| 359 |
|
|
If this value is zero, then progress reports will not be given
|
| 360 |
|
|
in intervals, but a final report of the file size and fragmentation
|
| 361 |
|
|
will be issued when the program terminates, along with the number
|
| 362 |
|
|
of rays and packets computed.
|
| 363 |
|
|
If a filename is given after the interval, it will be used as the
|
| 364 |
|
|
error file for reports and error messages instead of the standard error.
|
| 365 |
|
|
There is no default value for this variable.
|
| 366 |
|
|
.TP
|
| 367 |
|
|
.BR render
|
| 368 |
|
|
This variable may be used to specify additional options to
|
| 369 |
|
|
.I rtrace.
|
| 370 |
|
|
These options will appear after the options set automatically by
|
| 371 |
|
|
.I rad,
|
| 372 |
|
|
and thus will override the default values.
|
| 373 |
|
|
.SH "DISPLAY DRIVER"
|
| 374 |
|
|
.I Rholo
|
| 375 |
|
|
may be started in interactive mode using the
|
| 376 |
|
|
.I \-o
|
| 377 |
|
|
option to specify an output display driver.
|
| 378 |
|
|
Currently, three drivers are supported on most machines,
|
| 379 |
|
|
.I glx,
|
| 380 |
|
|
.I ogl
|
| 381 |
|
|
and
|
| 382 |
|
|
.I x11.
|
| 383 |
|
|
(In addition, there are variations on the first two drivers for
|
| 384 |
|
|
stereo displays, local objects and human tone mapping.
|
| 385 |
|
|
These are accessed with some combination of the 's', 'o' and 'h' suffixes,
|
| 386 |
|
|
always in that order.
|
| 387 |
|
|
E.g., the OpenGL stereo driver with human tone mapping would be "oglsh".)
|
| 388 |
|
|
Each driver accepts simple one-character commands and mouse
|
| 389 |
|
|
view control in its operating window.
|
| 390 |
|
|
If the
|
| 391 |
|
|
.I \-i
|
| 392 |
|
|
option is also given, then the driver will also listen for commands entered
|
| 393 |
|
|
on the standard input.
|
| 394 |
|
|
(It is unwise to use the
|
| 395 |
|
|
.I \-i
|
| 396 |
|
|
option when rholo is run in the background, because it will occassionally
|
| 397 |
|
|
stop the process when input is available on the controlling terminal.)\0
|
| 398 |
|
|
The commands and their single-key window equivalents are given below.
|
| 399 |
|
|
.TP 10n
|
| 400 |
|
|
.BR "VIEW= (mouse)"
|
| 401 |
|
|
Modify the current view with the specified parameters.
|
| 402 |
|
|
(See the
|
| 403 |
|
|
.I \-v*
|
| 404 |
|
|
view options in the
|
| 405 |
|
|
.I rpict(1)
|
| 406 |
|
|
manual page for parameter details.)\0
|
| 407 |
|
|
There is no one-character equivalent for this command in the display window.
|
| 408 |
|
|
Instead, the mouse is used to control the current view in the following ways:
|
| 409 |
|
|
.sp
|
| 410 |
|
|
.nf
|
| 411 |
|
|
CONTROL MOUSE ACTION
|
| 412 |
|
|
(none) left Move forward towards cursor position
|
| 413 |
|
|
(none) middle Rotate in place (usually safe)
|
| 414 |
|
|
(none) right Move backward away from cursor position
|
| 415 |
|
|
shift left Orbit left around cursor position
|
| 416 |
|
|
shift middle Orbit skyward
|
| 417 |
|
|
cntl middle Orbit earthward
|
| 418 |
|
|
shift right Orbit right around cursor position
|
| 419 |
|
|
cntl+shift any Frame focus by dragging rectangle
|
| 420 |
|
|
.fi
|
| 421 |
|
|
.sp
|
| 422 |
|
|
For all movements but rotating in place, the cursor must be placed over some
|
| 423 |
|
|
bit of visible geometry, otherwise the driver has no reference point from
|
| 424 |
|
|
which to work.
|
| 425 |
|
|
It is best to just experiment with these controls until you learn to fly
|
| 426 |
|
|
safely in your model.
|
| 427 |
|
|
And if you run into trouble, the "last" command is very useful.
|
| 428 |
|
|
(See below.)\0
|
| 429 |
|
|
.TP
|
| 430 |
|
|
.BR "last 'l'"
|
| 431 |
|
|
Return to the previous view.
|
| 432 |
|
|
Some drivers will save up multiple views in a history, but you are
|
| 433 |
|
|
guaranteed at least one.
|
| 434 |
|
|
.TP
|
| 435 |
|
|
.BR "where 'v'"
|
| 436 |
|
|
Print the current view parameters to the standard output.
|
| 437 |
|
|
This is useful for finding out where you are, or for saving specific
|
| 438 |
|
|
views in a keyframe file for animations or returning to later.
|
| 439 |
|
|
.TP
|
| 440 |
|
|
.BR "frame 'f'"
|
| 441 |
|
|
Change the calculation focus.
|
| 442 |
|
|
If the "frame" command is given with no arguments on the standard input,
|
| 443 |
|
|
it is equivalent to the interactive 'F' command, which releases
|
| 444 |
|
|
the current calculation focus.
|
| 445 |
|
|
If the "frame" command is followed by a relative horizontal and vertical
|
| 446 |
|
|
position (specified as floating point values between 0 and 1), then the
|
| 447 |
|
|
new focus is about this position on the screen (where 0 0 is at the lower
|
| 448 |
|
|
left of the display).
|
| 449 |
|
|
This is equivalent to the interactive 'f' command, which sets the focus
|
| 450 |
|
|
about the current window cursor position.
|
| 451 |
|
|
If four relative coordinates are given, they are assumed to mean the
|
| 452 |
|
|
minimum horizontal and vertical positon, and the maximum horizontal and
|
| 453 |
|
|
vertical position, in that order.
|
| 454 |
|
|
This is equivalent to dragging the mouse over a rectangular area
|
| 455 |
|
|
with the 'cntl+shift' keys held down.
|
| 456 |
|
|
.TP
|
| 457 |
|
|
.BR "pause 'p'"
|
| 458 |
|
|
Pause the ray calculation temporarily.
|
| 459 |
|
|
.TP
|
| 460 |
|
|
.BR "resume <cr>"
|
| 461 |
|
|
Resume the ray calculation.
|
| 462 |
|
|
.TP
|
| 463 |
|
|
.BR "redraw ^L"
|
| 464 |
|
|
Redraw the current view from values calculated and stored in the holodeck.
|
| 465 |
|
|
When executed from the display window via '^L', the effect may be slightly
|
| 466 |
|
|
different, since all stored information will be flushed.
|
| 467 |
|
|
.TP
|
| 468 |
|
|
.BR "kill 'K'"
|
| 469 |
|
|
Terminate the ray calculation process.
|
| 470 |
|
|
This is usually unnecessary, but is provided for special purpose applications.
|
| 471 |
|
|
.TP
|
| 472 |
|
|
.BR "restart 'R'"
|
| 473 |
|
|
Restart the ray calculation process.
|
| 474 |
|
|
If the "RIF" variable has been set,
|
| 475 |
|
|
.I rad
|
| 476 |
|
|
will be run first to assure that the octree is up to date.
|
| 477 |
|
|
.TP
|
| 478 |
|
|
.BR "clobber 'C'"
|
| 479 |
|
|
Clobber the holodeck contents, deleting all that has been calculated before.
|
| 480 |
|
|
To get an interactive dissolve of changes to the scene description,
|
| 481 |
|
|
use the sequence "kill," "clobber," "restart."
|
| 482 |
|
|
This command will be honored by
|
| 483 |
|
|
.I rholo
|
| 484 |
|
|
only if it was started with the
|
| 485 |
|
|
.I \-f
|
| 486 |
|
|
option.
|
| 487 |
|
|
.TP
|
| 488 |
|
|
.BR "quit 'q'"
|
| 489 |
|
|
Quit
|
| 490 |
|
|
.I rholo.
|
| 491 |
|
|
The ray tracing calculation is terminated and all values are flushed to
|
| 492 |
|
|
the holodeck file.
|
| 493 |
|
|
This is the normal way to exit the program.
|
| 494 |
|
|
.PP
|
| 495 |
|
|
In addition to these standard commands, all
|
| 496 |
|
|
drivers offer the following supplimentary controls.
|
| 497 |
|
|
.TP 10n
|
| 498 |
|
|
.BR "'h'"
|
| 499 |
|
|
Fix the head height.
|
| 500 |
|
|
All mouse-controlled view motions will be adjusted so that the head height
|
| 501 |
|
|
does not change (where vertical is determined by the current
|
| 502 |
|
|
view up vector).
|
| 503 |
|
|
.TP
|
| 504 |
|
|
.BR "'H'"
|
| 505 |
|
|
Release the head height, allowing it to change again during mouse-controlled
|
| 506 |
|
|
movements.
|
| 507 |
|
|
.TP
|
| 508 |
|
|
.BR "^R"
|
| 509 |
|
|
Redraw the current view, recomputing the tone mapping in the process.
|
| 510 |
|
|
This is useful if the current view is too light or too dark.
|
| 511 |
|
|
(On an 8-bit display, it may be necessary to redraw the
|
| 512 |
|
|
screen a couple of times to get the best image.)\0
|
| 513 |
|
|
The "^L" command is a stronger type of redraw, since it will use
|
| 514 |
|
|
only rays in the current view to determine the tone mapping, rather
|
| 515 |
|
|
than a history of rays drawn from the
|
| 516 |
|
|
.I rholo
|
| 517 |
|
|
server.
|
| 518 |
|
|
.SH EXAMPLES
|
| 519 |
|
|
The following shows a minimal holodeck control variable file:
|
| 520 |
|
|
.IP "" .3i
|
| 521 |
|
|
.nf
|
| 522 |
|
|
RIF= sample.rif # rad input file
|
| 523 |
|
|
section= 2 2 4 5 0 0 0 7 0 0 0 3 # section prism boundaries
|
| 524 |
|
|
.fi
|
| 525 |
|
|
.PP
|
| 526 |
|
|
Technically, the "RIF" setting is not necessary, but the results are
|
| 527 |
|
|
much better when
|
| 528 |
|
|
.I rholo
|
| 529 |
|
|
is used in association with
|
| 530 |
|
|
.I rad
|
| 531 |
|
|
to control the rendering parameters.
|
| 532 |
|
|
.PP
|
| 533 |
|
|
Here is a slightly more sophisticated example:
|
| 534 |
|
|
.IP "" .3i
|
| 535 |
|
|
.nf
|
| 536 |
|
|
RIF=electric.rif
|
| 537 |
|
|
section= 7 4 3.5 15 0 0 0 10 0 0 0 5
|
| 538 |
|
|
GRID= .75
|
| 539 |
|
|
CACHE= 20 # cache size in megabytes
|
| 540 |
|
|
TIME= 120 # maximum time in hours
|
| 541 |
|
|
DISK= 200 # maximum file size in megabytes
|
| 542 |
|
|
REPORT= 60 elect.her
|
| 543 |
|
|
OBST= False
|
| 544 |
|
|
VDIST= False
|
| 545 |
|
|
.fi
|
| 546 |
|
|
.PP
|
| 547 |
|
|
We can invoke
|
| 548 |
|
|
.I rholo
|
| 549 |
|
|
on the above file to compute a hologram overnight in batch mode:
|
| 550 |
|
|
.IP "" .2i
|
| 551 |
greg |
1.4 |
rholo \-n 1 elect.hdk elect.hif TIME=12 &
|
| 552 |
greg |
1.1 |
.PP
|
| 553 |
|
|
This will report progress every hour to "elect.her".
|
| 554 |
|
|
.PP
|
| 555 |
|
|
The next morning, we can look at the holodeck interactively:
|
| 556 |
|
|
.IP "" .2i
|
| 557 |
greg |
1.4 |
rholo\-n 1 \-o x11 elect.hdk &
|
| 558 |
greg |
1.1 |
.PP
|
| 559 |
|
|
If the previous command were still running, the above command would
|
| 560 |
|
|
fail because the permissions on the holodeck would not grant access.
|
| 561 |
|
|
To terminate
|
| 562 |
|
|
.I rholo
|
| 563 |
|
|
without losing any computed information, use the
|
| 564 |
|
|
.I kill(1)
|
| 565 |
|
|
command to send an interrupt or terminate signal to the
|
| 566 |
|
|
.I rholo
|
| 567 |
|
|
process listed by
|
| 568 |
|
|
.I ps(1).
|
| 569 |
|
|
If the system goes down or something dire happens to
|
| 570 |
|
|
.I rholo,
|
| 571 |
|
|
it may be necessary to restore read/write permission on the holodeck using
|
| 572 |
|
|
.I chmod(1).
|
| 573 |
|
|
Do not do this, however, unless you are absolutely sure that
|
| 574 |
|
|
.I rholo
|
| 575 |
|
|
is no longer running on the holodeck.
|
| 576 |
|
|
(See the
|
| 577 |
|
|
.I ps
|
| 578 |
|
|
man page on how to check for running processes.
|
| 579 |
|
|
The file modification date as reported by
|
| 580 |
|
|
.I ls(1)
|
| 581 |
|
|
is another clue.)\0
|
| 582 |
|
|
.PP
|
| 583 |
|
|
To view the holodeck without invoking a new ray calculation, leave off the
|
| 584 |
|
|
.I \-n
|
| 585 |
|
|
option.
|
| 586 |
|
|
To compute the holodeck with multiple processes on a multiprocessing system,
|
| 587 |
|
|
use a higher number for the
|
| 588 |
|
|
.I \-n
|
| 589 |
|
|
option.
|
| 590 |
|
|
(Don't use more processes than you have processors, though, because
|
| 591 |
|
|
you'll only slow things down.)\0
|
| 592 |
|
|
.PP
|
| 593 |
|
|
To allow interactive control of
|
| 594 |
|
|
.I rholo
|
| 595 |
|
|
from another process, the following invocation will override
|
| 596 |
|
|
the file size limit and permit the holodeck
|
| 597 |
|
|
to be clobbered by a command entered on the standard input:
|
| 598 |
|
|
.IP "" .2i
|
| 599 |
greg |
1.4 |
rholo \-n 1 \-o x11 \-i \-f elect.hdk + DISK=0
|
| 600 |
greg |
1.1 |
.PP
|
| 601 |
|
|
To create an empty holodeck from settings on the command line:
|
| 602 |
|
|
.IP "" .2i
|
| 603 |
|
|
rholo new.hdk - RIF=sample.rif "section=2 2 4 8 0 0 0 10 0 0 0 3"
|
| 604 |
|
|
.SH NOTES
|
| 605 |
|
|
Each time rays are added to a beam, that beam's position in the holodeck
|
| 606 |
|
|
file is released and a new position is found.
|
| 607 |
|
|
After substantial computation on a holodeck, especially over several runs,
|
| 608 |
|
|
the holodeck file may become fragmented, leaving holes that take up space
|
| 609 |
|
|
without contributing useful information.
|
| 610 |
|
|
The percentage fragmentation is reported when the REPORT variable is set
|
| 611 |
|
|
and some calculation has taken place.
|
| 612 |
|
|
When this percentage gets high on a large holodeck (above 15% or so),
|
| 613 |
|
|
it is a good idea to run the
|
| 614 |
|
|
.I rhoptimize(1)
|
| 615 |
|
|
program once batch rendering is complete to close the gaps and collect
|
| 616 |
|
|
beams into groups for quicker rendering access.
|
| 617 |
|
|
Rholo will print periodic warnings when the fragmentation exceeds 20%.
|
| 618 |
|
|
.SH AUTHOR
|
| 619 |
|
|
Greg Ward Larson
|
| 620 |
|
|
.SH ACKNOWLEDGMENT
|
| 621 |
|
|
This work was supported by Silicon Graphics, Inc.
|
| 622 |
|
|
.SH BUGS
|
| 623 |
|
|
Global participating media are not handled correctly, though local
|
| 624 |
|
|
participating media will usually work.
|
| 625 |
|
|
.SH "SEE ALSO"
|
| 626 |
|
|
chmod(1), ls(1), ps(1), rad(1), ranimate(1), rhcopy(1), rhinfo(1),
|
| 627 |
greg |
1.3 |
rhoptimize(1), rhpict(1), rpict(1), rtrace(1), rvu(1)
|