| 1 | greg | 1.1 | .\" RCSid "$Id" | 
| 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 rview(1), | 
| 32 |  |  | .I rholo | 
| 33 |  |  | can compute views interactively, but unlike | 
| 34 |  |  | .I rview, | 
| 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 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 |  |  | 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), rview(1) |