| 1 | .\" RCSid "$Id: rholo.1,v 1.4 2007/09/04 17:36:41 greg Exp $" | 
| 2 | .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 | .I rvu(1), | 
| 32 | .I rholo | 
| 33 | can compute views interactively, but unlike | 
| 34 | .I rvu, | 
| 35 | 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 parallelepiped 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 three 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 parallelepiped origin & vectors | 
| 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 | rholo \-n 1 elect.hdk elect.hif TIME=12 & | 
| 552 | .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 | rholo\-n 1 \-o x11 elect.hdk & | 
| 558 | .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 | rholo \-n 1 \-o x11 \-i \-f elect.hdk + DISK=0 | 
| 600 | .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 | rhoptimize(1), rhpict(1), rpict(1), rtrace(1), rvu(1) |