ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/doc/ray.html
Revision: 1.19
Committed: Thu Jul 31 18:32:41 2014 UTC (9 years, 8 months ago) by greg
Content type: text/html
Branch: MAIN
CVS Tags: rad4R2P2, rad4R2, rad4R2P1
Changes since 1.18: +12 -11 lines
Log Message:
Preparation for 4.2 release

File Contents

# Content
1 <html>
2 <head>
3 <title>
4 The RADIANCE 4.2 Synthetic Imaging System
5 </title>
6 </head>
7 <body>
8
9 <p>
10
11 <h1>
12 The RADIANCE 4.2 Synthetic Imaging System
13 </h1>
14
15 <p>
16
17 Building Technologies Program<br>
18 Lawrence Berkeley National Laboratory<br>
19 1 Cyclotron Rd., 90-3111<br>
20 Berkeley, CA 94720<br>
21 <a HREF="http://radsite.lbl.gov/radiance"</a>
22 http://radsite.lbl.gov/radiance<br>
23
24 <p>
25 <hr>
26
27 <h2>
28 <a NAME="Overview">Overview</a>
29 </h2>
30 <ol>
31 <li><a HREF="#Intro">Introduction</a><!P>
32 <li><a HREF="#Scene">Scene Description</a><!P>
33 <ol>
34 <li><a HREF="#Primitive"> Primitive Types</a>
35 <ol>
36 <li><a HREF="#Surfaces">Surfaces</a>
37 <li><a HREF="#Materials">Materials</a>
38 <li><a HREF="#Textures">Textures</a>
39 <li><a HREF="#Patterns">Patterns</a>
40 <li><a HREF="#Mixtures">Mixtures</a>
41 </ol><!P>
42 <li><a HREF="#Auxiliary">Auxiliary Files</a>
43 <ol>
44 <li><a HREF="#Function">Function Files</a>
45 <li><a HREF="#Data">Data Files</a>
46 <li><a HREF="#Font">Font Files</a>
47 </ol><!P>
48 <li><a HREF="#Generators">Generators</a>
49 </ol><!P>
50 <li><a HREF="#Image">Image Generation</a><!P>
51 <li><a HREF="#License">License</a><!P>
52 <li><a HREF="#Ack">Acknowledgements</a><!P>
53 <li><a HREF="#Ref">References</a><!P>
54 <li><a HREF="#Index">Types Index</a><!P>
55 </ol>
56
57 <p>
58 <hr>
59
60 <h2>
61 <a NAME="Intro">1. Introduction</a>
62 </h2>
63
64 RADIANCE was developed as a research tool for predicting
65 the distribution of visible radiation in illuminated spaces.
66 It takes as input a three-dimensional geometric model
67 of the physical environment, and produces a map of
68 spectral radiance values in a color image.
69 The technique of ray-tracing follows light backwards
70 from the image plane to the source(s).
71 Because it can produce realistic images from a
72 simple description, RADIANCE has a wide range of applications
73 in graphic arts, lighting design,
74 computer-aided engineering and architecture.
75
76 <p>
77 <img SRC="diagram1.gif">
78 <p>
79 Figure 1
80 <p>
81 The diagram in Figure 1 shows the flow between programs (boxes) and data
82 (ovals).
83 The central program is <i>rpict</i>, which produces a picture from a scene
84 description.
85 <i>Rview</i> is a variation of rpict that computes and displays images
86 interactively, and rtrace computes single ray values.
87 Other programs (not shown) connect many of these elements together,
88 such as the executive programs
89 <i>rad</i>
90 and
91 <i>ranimate</i>,
92 the interactive rendering program
93 <i>rholo</i>,
94 and the animation program
95 <i>ranimove</i>.
96 The program
97 <i>obj2mesh</i>
98 acts as both a converter and scene compiler, converting a Wavefront .OBJ
99 file into a compiled mesh octree for efficient rendering.
100
101 <p>
102 A scene description file lists the surfaces and materials
103 that make up a specific environment.
104 The current surface types are spheres, polygons, cones, and cylinders.
105 There is also a composite surface type, called mesh, and a pseudosurface
106 type, called instance, which facilitates very complex geometries.
107 Surfaces can be made from materials such as plastic, metal, and glass.
108 Light sources can be distant disks as well as local spheres, disks
109 and polygons.
110
111 <p>
112 From a three-dimensional scene description and a specified view,
113 <i>rpict</i> produces a two-dimensional image.
114 A picture file is a compressed binary representation of the
115 pixels in the image.
116 This picture can be scaled in size and brightness,
117 anti-aliased, and sent to a graphics output device.
118
119 <p>
120 A header in each picture file lists the program(s)
121 and parameters that produced it.
122 This is useful for identifying a picture without having to display it.
123 The information can be read by the program <i>getinfo</i>.
124
125 <p>
126 <hr>
127
128 <h2>
129 <a name="Scene">2. Scene Description</a>
130 </h2>
131
132 A scene description file represents a three-dimensional physical environment in Cartesian (rectilinear) world coordinates.
133 It is stored as ASCII text, with the following basic format:
134
135 <pre>
136 # comment
137
138 modifier type identifier
139 n S1 S2 &quot;S 3&quot; .. Sn
140 0
141 m R1 R2 R3 .. Rm
142
143 modifier alias identifier reference
144
145 ! command
146
147 ...
148 </pre>
149
150 A comment line begins with a pound sign, `#'.
151
152 <p>
153 The <a NAME="scene_desc">scene description primitives</a>
154 all have the same general format, and can be either surfaces or modifiers.
155 A primitive has a modifier, a type, and an identifier.
156 <p>
157 A <a NAME="modifier"><b>modifier</b></a> is either the
158 identifier of a previously defined primitive, or &quot;void&quot;.
159 <br>
160 [ The most recent definition of a modifier is the
161 one used, and later definitions do not cause relinking
162 of loaded primitives.
163 Thus, the same identifier may be used repeatedly,
164 and each new definition will apply to the primitives following it. ]
165 <p>
166 An <a NAME="identifier"><b>identifier</b></a> can be any string
167 (i.e., any sequence of non-white characters).
168 <p>
169 The arguments associated with a primitive can be strings or real numbers.
170 <ul>
171 <li> The first integer following the identifier is the number of <b>string arguments</b>,
172 and it is followed by the arguments themselves (separated by white space or enclosed in quotes).
173 <li> The next integer is the number of integer arguments, and is followed by the <b>integer arguments</b>.
174 (There are currently no primitives that use them, however.)
175 <li> The next integer is the real argument count, and it is followed by the <b>real arguments</b>.
176 </ul>
177
178 <p>
179 An <a NAME="alias"><b>alias</b></a> gets its type and arguments from
180 a previously defined primitive.
181 This is useful when the same material is
182 used with a different modifier, or as a convenient naming mechanism.
183 The reserved modifier name &quot;inherit&quot; may be used to specificy that
184 an alias will inherit its modifier from the original.
185 Surfaces cannot be aliased.
186
187 <p>
188 A line beginning with an exclamation point, `!',
189 is interpreted as a command.
190 It is executed by the shell, and its output is read as input to the program.
191 The command must not try to read from its standard input, or confusion
192 will result.
193 A command may be continued over multiple lines using a
194 backslash, `\', to escape the newline.
195
196 <p>
197 White space is generally ignored, except as a separator.
198 The exception is the newline character after a command or comment.
199 Commands, comments and primitives may appear in any
200 combination, so long as they are not intermingled.
201
202 <p>
203 <hr>
204
205 <h3>
206 <a NAME="Primitive">2.1. Primitive Types</a>
207 </h3>
208
209 Primitives can be <a HREF="#Surfaces">surfaces</a>,
210 <a HREF="#Materials">materials</a>,
211 <a HREF="#Textures">textures</a> or
212 <a HREF="#Patterns">patterns</a>.
213 Modifiers can be <a HREF="#Materials">materials</a>,
214 <a HREF="#Mixtures">mixtures</a>,
215 <a HREF="#Textures">textures</a> or <a HREF="#Patterns">patterns</a>.
216 Simple surfaces must have one material in their modifier list.
217
218 <p>
219 <hr>
220
221 <h4>
222 <a NAME="Surfaces">2.1.1. Surfaces</a>
223 </h4>
224 <dl>
225
226 A scene description will consist mostly of surfaces.
227 The basic types are given below.
228
229 <p>
230
231 <dt>
232 <a NAME="Source">
233 <b>Source </b>
234 </a>
235 <dd>
236 A source is not really a surface, but a solid angle.
237 It is used for specifying light sources that are very distant.
238 The direction to the center of the source and the number of degrees subtended by its disk are given as follows:
239
240 <pre>
241 mod source id
242 0
243 0
244 4 xdir ydir zdir angle
245 </pre>
246
247 <p>
248
249 <dt>
250 <a NAME="Sphere">
251 <b>Sphere</b>
252 </a>
253 <dd>
254 A sphere is given by its center and radius:
255
256 <pre>
257 mod sphere id
258 0
259 0
260 4 xcent ycent zcent radius
261 </pre>
262
263 <p>
264
265 <dt>
266 <a NAME="Bubble">
267 <b>Bubble</b>
268 </a>
269
270 <dd>
271 A bubble is simply a sphere whose surface normal points inward.
272
273 <p>
274
275 <dt>
276 <a NAME="Polygon">
277 <b>Polygon</b>
278 </a>
279 <dd>
280 A polygon is given by a list of three-dimensional vertices,
281 which are ordered counter-clockwise as viewed from the
282 front side (into the surface normal).
283 The last vertex is automatically connected to the first.
284 Holes are represented in polygons as interior vertices
285 connected to the outer perimeter by coincident edges (seams).
286
287 <pre>
288 mod polygon id
289 0
290 0
291 3n
292 x1 y1 z1
293 x2 y2 z2
294 ...
295 xn yn zn
296 </pre>
297
298 <p>
299
300 <dt>
301 <a NAME="Cone">
302 <b>Cone</b>
303 </a>
304 <dd>
305 A cone is a megaphone-shaped object.
306 It is truncated by two planes perpendicular to its axis,
307 and one of its ends may come to a point.
308 It is given as two axis endpoints, and the starting and ending radii:
309
310 <pre>
311 mod cone id
312 0
313 0
314 8
315 x0 y0 z0
316 x1 y1 z1
317 r0 r1
318 </pre>
319
320 <p>
321
322 <dt>
323 <a NAME="Cup">
324 <b>Cup</b>
325 </a>
326 <dd>
327 A cup is an inverted <a HREF="#Cone">cone</a> (i.e., has an
328 inward surface normal).
329
330 <p>
331
332 <dt>
333 <a NAME="Cylinder">
334 <b>Cylinder</b>
335 </a>
336 <dd>
337 A cylinder is like a <a HREF="#Cone">cone</a>, but its
338 starting and ending radii are equal.
339
340 <pre>
341 mod cylinder id
342 0
343 0
344 7
345 x0 y0 z0
346 x1 y1 z1
347 rad
348 </pre>
349
350 <p>
351
352 <dt>
353 <a NAME="Tube">
354 <b>Tube</b>
355 </a>
356 <dd>
357 A tube is an inverted <a HREF="#Cylinder">cylinder</a>.
358
359 <p>
360
361 <dt>
362 <a NAME="Ring">
363 <b>Ring</b>
364 </a>
365 <dd>
366 A ring is a circular disk given by its center,
367 surface normal, and inner and outer radii:
368
369 <pre>
370 mod ring id
371 0
372 0
373 8
374 xcent ycent zcent
375 xdir ydir zdir
376 r0 r1
377 </pre>
378
379 <p>
380
381 <dt>
382 <a NAME="Instance">
383 <b>Instance</b>
384 </a>
385 <dd>
386 An instance is a compound surface, given
387 by the contents of an octree file (created by oconv).
388
389 <pre>
390 mod instance id
391 1+ octree transform
392 0
393 0
394 </pre>
395
396 If the modifier is &quot;void&quot;, then surfaces will
397 use the modifiers given in the original description.
398 Otherwise, the modifier specified is used in their place.
399 The transform moves the octree to the desired location in the scene.
400 Multiple instances using the same octree take
401 little extra memory, hence very complex
402 descriptions can be rendered using this primitive.
403
404 <p>
405 There are a number of important limitations to be aware of
406 when using instances.
407 First, the scene description used to generate the octree must
408 stand on its own, without referring to modifiers in the
409 parent description.
410 This is necessary for oconv to create the octree.
411 Second, light sources in the octree will not be
412 incorporated correctly in the calculation,
413 and they are not recommended.
414 Finally, there is no advantage (other than
415 convenience) to using a single instance of an octree,
416 or an octree containing only a few surfaces.
417 An <a HREF="../man_html/xform.1.html">xform</a> command
418 on the subordinate description is prefered in such cases.
419 </dl>
420
421 <p>
422
423 <dt>
424 <a NAME="Mesh">
425 <b>Mesh</b>
426 </a>
427 <dd>
428 A mesh is a compound surface, made up of many triangles and
429 an octree data structure to accelerate ray intersection.
430 It is typically converted from a Wavefront .OBJ file using the
431 <i>obj2mesh</i> program.
432
433 <pre>
434 mod mesh id
435 1+ meshfile transform
436 0
437 0
438 </pre>
439
440 If the modifier is &quot;void&quot;, then surfaces will
441 use the modifiers given in the original mesh description.
442 Otherwise, the modifier specified is used in their place.
443 The transform moves the mesh to the desired location in the scene.
444 Multiple instances using the same meshfile take little extra memory,
445 and the compiled mesh itself takes much less space than individual
446 polygons would.
447 In the case of an unsmoothed mesh, using the mesh primitive reduces
448 memory requirements by a factor of 30 relative to individual triangles.
449 If a mesh has smoothed surfaces, we save a factor of 50 or more,
450 permitting very detailed geometries that would otherwise exhaust the
451 available memory.
452 In addition, the mesh primitive can have associated (u,v) coordinates
453 for pattern and texture mapping.
454 These are made available to function files via the Lu and Lv variables.
455
456 </dl>
457
458 <p>
459 <hr>
460
461 <h4>
462 <a NAME="Materials">2.1.2. Materials</a>
463 </h4>
464
465 A material defines the way light interacts with a surface. The basic types are given below.
466
467 <p>
468
469 <dl>
470
471 <dt>
472 <a NAME="Light">
473 <b>Light</b>
474 </a>
475 <dd>
476 Light is the basic material for self-luminous surfaces (i.e.,
477 light sources).
478 In addition to the <a HREF="#Source">source</a> surface type,
479 <a HREF="#Sphere">spheres</a>,
480 discs (<a HREF="#Ring">rings</a> with zero inner radius),
481 <a HREF="#Cylinder">cylinders</a> (provided they are long enough), and <a HREF="#Polygon">polygons</a> can act as light sources.
482 Polygons work best when they are rectangular.
483 Cones cannot be used at this time.
484 A pattern may be used to specify a light output distribution.
485 Light is defined simply as a RGB radiance value (watts/steradian/m2):
486
487 <pre>
488 mod light id
489 0
490 0
491 3 red green blue
492 </pre>
493
494 <p>
495
496 <dt>
497 <a NAME="Illum">
498 <b>Illum</b>
499 </a>
500
501 <dd>
502 Illum is used for secondary light sources with broad distributions.
503 A secondary light source is treated like any other light source, except when viewed directly.
504 It then acts like it is made of a different material (indicated by
505 the string argument), or becomes invisible (if no string argument is given,
506 or the argument is &quot;void&quot;).
507 Secondary sources are useful when modeling windows or brightly illuminated surfaces.
508
509 <pre>
510 mod illum id
511 1 material
512 0
513 3 red green blue
514 </pre>
515
516 <p>
517
518 <dt>
519 <a NAME="Glow">
520 <b>Glow</b>
521 </a>
522
523 <dd>
524 Glow is used for surfaces that are self-luminous, but limited in their effect.
525 In addition to the radiance value, a maximum radius for shadow testing is given:
526
527 <pre>
528 mod glow id
529 0
530 0
531 4 red green blue maxrad
532 </pre>
533
534 If maxrad is zero, then the surface will never be tested for shadow, although it may participate in an interreflection calculation.
535 If maxrad is negative, then the surface will never contribute to scene illumination.
536 Glow sources will never illuminate objects on the other side of an illum surface.
537 This provides a convenient way to illuminate local light fixture geometry without overlighting nearby objects.
538
539 <p>
540
541 <dt>
542 <a NAME="Spotlight">
543 <b>Spotlight</b>
544 </a>
545
546 <dd>
547 Spotlight is used for self-luminous surfaces having directed output.
548 As well as radiance, the full cone angle (in degrees) and orientation (output direction) vector are given.
549 The length of the orientation vector is the distance of the effective
550 focus behind the source center (i.e., the focal length).
551
552 <pre>
553 mod spotlight id
554 0
555 0
556 7 red green blue angle xdir ydir zdir
557 </pre>
558
559 <p>
560
561 <dt>
562 <a NAME="Mirror">
563 <b>Mirror</b>
564 </a>
565
566 <dd>
567 Mirror is used for planar surfaces that produce virtual source reflections.
568 This material should be used sparingly, as it may cause the light source calculation to blow up if it is applied to many small surfaces.
569 This material is only supported for flat surfaces such as <a HREF="#Polygon">polygons</a> and <a HREF="#Ring">rings</a>.
570 The arguments are simply the RGB reflectance values, which should be between 0 and 1.
571 An optional string argument may be used like the illum type to specify a different material to be used for shading non-source rays.
572 If this alternate material is given as &quot;void&quot;, then the mirror surface will be invisible.
573 This is only appropriate if the surface hides other (more detailed) geometry with the same overall reflectance.
574
575 <pre>
576 mod mirror id
577 1 material
578 0
579 3 red green blue
580 </pre>
581
582 <p>
583
584 <dt>
585 <a NAME="Prism1">
586 <b>Prism1</b>
587 </a>
588
589 <dd>
590 The prism1 material is for general light redirection from prismatic glazings, generating virtual light sources.
591 It can only be used to modify a planar surface
592 (i.e., a <a HREF="#Polygon">polygon</a> or <a HREF="#Ring">disk</a>)
593 and should not result in either light concentration or scattering.
594 The new direction of the ray can be on either side of the material,
595 and the definitions must have the correct bidirectional properties to work properly with virtual light sources.
596 The arguments give the coefficient for the redirected light and its direction.
597
598 <pre>
599 mod prism1 id
600 5+ coef dx dy dz funcfile transform
601 0
602 n A1 A2 .. An
603 </pre>
604
605 The new direction variables dx, dy and dz need not produce a normalized vector.
606 For convenience, the variables DxA, DyA and DzA are defined as the normalized direction to the target light source.
607 See <a HREF="#Function">section 2.2.1</a> on function files for further information.
608
609 <p>
610
611 <dt>
612 <a NAME="Prism2">
613 <b>Prism2</b>
614 </a>
615
616 <dd>
617 The material prism2 is identical to <a HREF="#Prism1">prism1</a> except that it provides for two ray redirections rather than one.
618
619 <pre>
620 mod prism2 id
621 9+ coef1 dx1 dy1 dz1 coef2 dx2 dy2 dz2 funcfile transform
622 0
623 n A1 A2 .. An
624 </pre>
625
626 <p>
627
628 <dt>
629 <a NAME="Mist">
630 <b>Mist</b>
631 </a>
632
633 <dd>
634 Mist is a virtual material used to delineate a volume
635 of participating atmosphere.
636 A list of important light sources may be given, along with an
637 extinction coefficient, scattering albedo and scattering eccentricity
638 parameter.
639 The light sources named by the string argument list
640 will be tested for scattering within the volume.
641 Sources are identified by name, and virtual light sources may be indicated
642 by giving the relaying object followed by '&gt;' followed by the source, i.e:
643
644 <pre>
645 3 source1 mirror1&gt;source10 mirror2&gt;mirror1&gt;source3
646 </pre>
647
648 Normally, only one source is given per mist material, and there is an
649 upper limit of 32 to the total number of active scattering sources.
650 The extinction coefficient, if given, is added the the global
651 coefficient set on the command line.
652 Extinction is in units of 1/distance (distance based on the world coordinates),
653 and indicates the proportional loss of radiance over one unit distance.
654 The scattering albedo, if present, will override the global setting within
655 the volume.
656 An albedo of 0 0 0 means a perfectly absorbing medium, and an albedo of
657 1 1 1 means
658 a perfectly scattering medium (no absorption).
659 The scattering eccentricity parameter will likewise override the global
660 setting if it is present.
661 Scattering eccentricity indicates how much scattered light favors the
662 forward direction, as fit by the Henyey-Greenstein function:
663
664 <pre>
665 P(theta) = (1 - g*g) / (1 + g*g - 2*g*cos(theta))^1.5
666 </pre>
667
668 A perfectly isotropic scattering medium has a g parameter of 0, and
669 a highly directional material has a g parameter close to 1.
670 Fits to the g parameter may be found along with typical extinction
671 coefficients and scattering albedos for various atmospheres and
672 cloud types in USGS meteorological tables.
673 (A pattern will be applied to the extinction values.)
674
675 <pre>
676 mod mist id
677 N src1 src2 .. srcN
678 0
679 0|3|6|7 [ rext gext bext [ ralb galb balb [ g ] ] ]
680 </pre>
681
682 There are two usual uses of the mist type.
683 One is to surround a beam from a spotlight or laser so that it is
684 visible during rendering.
685 For this application, it is important to use a <a HREF="#Cone">cone</a>
686 (or <a HREF="#Cylinder">cylinder</a>) that
687 is long enough and wide enough to contain the important visible portion.
688 Light source photometry and intervening objects will have the desired
689 effect, and crossing beams will result in additive scattering.
690 For this application, it is best to leave off the real arguments, and
691 use the global rendering parameters to control the atmosphere.
692 The second application is to model clouds or other localized media.
693 Complex boundary geometry may be used to give shape to a uniform medium,
694 so long as the boundary encloses a proper volume.
695 Alternatively, a pattern may be used to set the line integral value
696 through the cloud for a ray entering or exiting a point in a given
697 direction.
698 For this application, it is best if cloud volumes do not overlap each other,
699 and opaque objects contained within them may not be illuminated correctly
700 unless the line integrals consider enclosed geometry.
701
702 <dt>
703 <a NAME="Plastic">
704 <b>Plastic</b>
705 </a>
706
707 <dd>
708 Plastic is a material with uncolored highlights.
709 It is given by its RGB reflectance, its fraction of specularity, and its roughness value.
710 Roughness is specified as the rms slope of surface facets.
711 A value of 0 corresponds to a perfectly smooth surface, and a value of 1 would be a very rough surface.
712 Specularity fractions greater than 0.1 and roughness values greater than 0.2 are not very realistic.
713 (A pattern modifying plastic will affect the material color.)
714
715 <pre>
716 mod plastic id
717 0
718 0
719 5 red green blue spec rough
720 </pre>
721
722 <p>
723
724 <dt>
725 <a NAME="Metal">
726 <b>Metal</b>
727 </a>
728
729 <dd>
730 Metal is similar to <a HREF="#Plastic">plastic</a>, but specular highlights are modified by the material color.
731 Specularity of metals is usually .9 or greater.
732 As for plastic, roughness values above .2 are uncommon.
733
734 <p>
735
736 <dt>
737 <a NAME="Trans">
738 <b>Trans</b>
739 </a>
740
741 <dd>
742 Trans is a translucent material, similar to <a HREF="#Plastic">plastic</a>.
743 The transmissivity is the fraction of penetrating light that travels all the way through the material.
744 The transmitted specular component is the fraction of transmitted light that is not diffusely scattered.
745 Transmitted and diffusely reflected light is modified by the material color.
746 Translucent objects are infinitely thin.
747
748 <pre>
749 mod trans id
750 0
751 0
752 7 red green blue spec rough trans tspec
753 </pre>
754
755 <p>
756
757 <dt>
758 <a NAME="Plastic2">
759 <b>Plastic2</b>
760 </a>
761
762 <dd>
763 Plastic2 is similar to <a HREF="#Plastic">plastic</a>, but with anisotropic roughness.
764 This means that highlights in the surface will appear elliptical rather than round.
765 The orientation of the anisotropy is determined by the unnormalized direction vector ux uy uz.
766 These three expressions (separated by white space) are evaluated in the context of the function file funcfile.
767 If no function file is required (i.e., no special variables or functions are required), a period (`.') may be given in its place.
768 (See the discussion of <a HREF="#Function">Function Files</a> in the Auxiliary Files section).
769 The urough value defines the roughness along the u vector given projected onto the surface.
770 The vrough value defines the roughness perpendicular to this vector.
771 Note that the highlight will be narrower in the direction of the smaller roughness value.
772 Roughness values of zero are not allowed for efficiency reasons since the behavior would be the same as regular plastic in that case.
773
774 <pre>
775 mod plastic2 id
776 4+ ux uy uz funcfile transform
777 0
778 6 red green blue spec urough vrough
779 </pre>
780
781 <p>
782
783 <dt>
784 <a NAME="Metal2">
785 <b>Metal2</b>
786 </a>
787
788 <dd>
789 Metal2 is the same as <a HREF="#Plastic2">plastic2</a>, except that the highlights are modified by the material color.
790
791 <p>
792
793 <dt>
794 <a NAME="Trans2">
795 <b>Trans2</b>
796 </a>
797
798 <dd>
799 Trans2 is the anisotropic version of <a HREF="#Trans">trans</a>.
800 The string arguments are the same as for plastic2, and the real arguments are the same as for trans but with an additional roughness value.
801
802 <pre>
803 mod trans2 id
804 4+ ux uy uz funcfile transform
805 0
806 8 red green blue spec urough vrough trans tspec
807 </pre>
808
809 <p>
810
811 <dt>
812 <a NAME="Dielectric">
813 <b>Dielectric</b>
814 </a>
815
816 <dd>
817 A dielectric material is transparent, and it refracts light as well as reflecting it.
818 Its behavior is determined by the index of refraction and transmission coefficient in each wavelength band per unit length.
819 Common glass has a index of refraction (n) around 1.5, and a transmission coefficient of roughly 0.92 over an inch.
820 An additional number, the Hartmann constant, describes how the index of refraction changes as a function of wavelength.
821 It is usually zero. (A <a HREF="#Patterns">pattern</a> modifies only the refracted value.)
822
823 <pre>
824 mod dielectric id
825 0
826 0
827 5 rtn gtn btn n hc
828 </pre>
829
830 <p>
831
832 <dt>
833 <a NAME="Interface">
834 <b>Interface</b>
835 </a>
836
837 <dd>
838 An interface is a boundary between two dielectrics.
839 The first transmission coefficient and refractive index are for the inside; the second ones are for the outside.
840 Ordinary dielectrics are surrounded by a vacuum (1 1 1 1).
841
842 <pre>
843 mod interface id
844 0
845 0
846 8 rtn1 gtn1 btn1 n1 rtn2 gtn2 btn2 n2
847 </pre>
848
849 <p>
850
851 <dt>
852 <a NAME="Glass">
853 <b>Glass</b>
854 </a>
855
856 <dd>
857 Glass is similar to <a HREF="#Dielectric">dielectric</a>, but it is optimized for thin glass surfaces (n = 1.52).
858 One transmitted ray and one reflected ray is produced.
859 By using a single surface is in place of two, internal reflections are avoided.
860 The surface orientation is irrelevant, as it is for <a HREF="#Plastic">plastic</a>, <a HREF="#Metal">metal</a>, and <a HREF="#Trans">trans</a>.
861 The only specification required is the transmissivity at normal incidence.
862 (Transmissivity is the amount of light not absorbed in one traversal
863 of the material.
864 Transmittance -- the value usually measured -- is the total light
865 transmitted through the pane including multiple reflections.)
866 To compute transmissivity (tn) from transmittance (Tn) use:
867
868 <pre>
869 tn = (sqrt(.8402528435+.0072522239*Tn*Tn)-.9166530661)/.0036261119/Tn
870 </pre>
871
872 Standard 88% transmittance glass has a transmissivity of 0.96.
873 (A <a HREF="#Patterns">pattern</a> modifying glass will affect the transmissivity.)
874 If a fourth real argument is given, it is interpreted as the index of refraction to use instead of 1.52.
875
876 <pre>
877 mod glass id
878 0
879 0
880 3 rtn gtn btn
881 </pre>
882
883 <p>
884
885 <dt>
886 <a NAME="Plasfunc">
887 <b>Plasfunc</b>
888 </a>
889
890 <dd>
891 Plasfunc in used for the procedural definition of plastic-like materials
892 with arbitrary bidirectional reflectance distribution functions (BRDF's).
893 The arguments to this material include the color and specularity,
894 as well as the function defining the specular distribution and the auxiliary file where it may be found.
895
896 <pre>
897 mod plasfunc id
898 2+ refl funcfile transform
899 0
900 4+ red green blue spec A5 ..
901 </pre>
902
903 The function refl takes four arguments, the x, y and z
904 direction towards the incident light, and the solid angle
905 subtended by the source.
906 The solid angle is provided to facilitate averaging, and is usually
907 ignored.
908 The refl function should integrate to 1 over
909 the projected hemisphere to maintain energy balance.
910 At least four real arguments must be given, and these are made available along with any additional values to the reflectance function.
911 Currently, only the contribution from direct light sources is considered in the specular calculation.
912 As in most material types, the surface normal is always altered to face the incoming ray.
913
914 <p>
915
916 <dt>
917 <a NAME="Metfunc">
918 <b>Metfunc</b>
919 </a>
920
921 <dd>
922 Metfunc is identical to <a HREF="#Plasfunc">plasfunc</a> and takes the same arguments,
923 but the specular component is multiplied also by the material color.
924
925 <p>
926
927 <dt>
928 <a NAME="Transfunc">
929 <b>Transfunc</b>
930 </a>
931
932 <dd>
933 Transfunc is similar to <a HREF="#Plasfunc">plasfunc</a> but with an arbitrary bidirectional transmittance distribution
934 as well as a reflectance distribution.
935 Both reflectance and transmittance are specified with the same function.
936
937 <pre>
938 mod transfunc id
939 2+ brtd funcfile transform
940 0
941 6+ red green blue rspec trans tspec A7 ..
942 </pre>
943
944 Where trans is the total light transmitted and tspec is the non-Lambertian fraction of transmitted light.
945 The function brtd should integrate to 1 over each projected hemisphere.
946
947 <p>
948
949 <dt>
950 <a NAME="BRTDfunc">
951 <b>BRTDfunc</b>
952 </a>
953
954 <dd>
955 The material BRTDfunc gives the maximum flexibility over surface reflectance and transmittance,
956 providing for spectrally-dependent specular rays and reflectance and transmittance distribution functions.
957
958 <pre>
959 mod BRTDfunc id
960 10+ rrefl grefl brefl
961 rtrns gtrns btrns
962 rbrtd gbrtd bbrtd
963 funcfile transform
964 0
965 9+ rfdif gfdif bfdif
966 rbdif gbdif bbdif
967 rtdif gtdif btdif
968 A10 ..
969 </pre>
970
971 The variables rrefl, grefl and brefl specify the color coefficients for the ideal specular (mirror) reflection of the surface.
972 The variables rtrns, gtrns and btrns specify the color coefficients for the ideal specular transmission.
973 The functions rbrtd, gbrtd and bbrtd take the direction to the incident light (and its solid angle) and
974 compute the color coefficients for the directional diffuse part of reflection and transmission.
975 As a special case, three identical values of '0' may be given in place of these function names to indicate no directional diffuse component.
976
977 <p>
978 Unlike most other material types, the surface normal is not altered to face the incoming ray.
979 Thus, functions and variables must pay attention to the orientation of the surface and make adjustments appropriately.
980 However, the special variables for the perturbed dot product and surface normal, RdotP, NxP, NyP and NzP are reoriented
981 as if the ray hit the front surface for convenience.
982
983 <p>
984 A diffuse reflection component may be given for the front side with rfdif, gfdif and bfdif for the front side of the surface
985 or rbdif, gbdif and bbdif for the back side.
986 The diffuse transmittance (must be the same for both sides by physical law) is given by rtdif, gtdif and btdif.
987 A pattern will modify these diffuse scattering values, and will be available through the special variables CrP, CgP and CbP.
988
989 <p>
990 Care must be taken when using this material type to produce a physically valid reflection model.
991 The reflectance functions should be bidirectional, and under no circumstances should the sum of reflected diffuse,
992 transmitted diffuse, reflected specular, transmitted specular and the integrated directional diffuse component be greater than one.
993
994 <p>
995
996 <dt>
997 <a NAME="Plasdata">
998 <b>Plasdata</b>
999 </a>
1000
1001 <dd>
1002 Plasdata is used for arbitrary BRDF's that are most conveniently given as interpolated data.
1003 The arguments to this material are the <a HREF="#Data">data file</a> and coordinate index functions,
1004 as well as a function to optionally modify the data values.
1005
1006 <pre>
1007 mod plasdata id
1008 3+n+
1009 func datafile
1010 funcfile x1 x2 .. xn transform
1011 0
1012 4+ red green blue spec A5 ..
1013 </pre>
1014
1015 The coordinate indices (x1, x2, etc.) are themselves functions of the x, y and z direction to the incident light, plus the solid angle
1016 subtended by the light source (usually ignored).
1017 The data function (func) takes five variables, the
1018 interpolated value from the n-dimensional data file, followed by the
1019 x, y and z direction to the incident light and the solid angle of the source.
1020 The light source direction and size may of course be ignored by the function.
1021
1022 <p>
1023
1024 <dt>
1025 <a NAME="Metdata">
1026 <b>Metdata</b>
1027 </a>
1028
1029 <dd>
1030 As metfunc is to plasfunc, metdata is to <a HREF="#Plasdata">plasdata</a>.
1031 Metdata takes the same arguments as plasdata, but the specular component is modified by the given material color.
1032
1033 <p>
1034
1035 <dt>
1036 <a NAME="Transdata">
1037 <b>Transdata</b>
1038 </a>
1039
1040 <dd>
1041 Transdata is like <a HREF="#Plasdata">plasdata</a> but the specification includes transmittance as well as reflectance.
1042 The parameters are as follows.
1043
1044 <pre>
1045 mod transdata id
1046 3+n+
1047 func datafile
1048 funcfile x1 x2 .. xn transform
1049 0
1050 6+ red green blue rspec trans tspec A7 ..
1051 </pre>
1052
1053 <p>
1054
1055 <dt>
1056 <a NAME="BSDF">
1057 <b>BSDF</b>
1058 </a>
1059
1060 <dd>
1061 The BSDF material type loads an XML (eXtensible Markup Language)
1062 file describing a bidirectional scattering distribution function.
1063 Real arguments to this material may define additional
1064 diffuse components that augment the BSDF data.
1065 String arguments are used to define thickness for proxied
1066 surfaces and the &quot;up&quot; orientation for the material.
1067
1068 <pre>
1069 mod BSDF id
1070 6+ thick BSDFfile ux uy uz funcfile transform
1071 0
1072 0|3|6|9
1073 rfdif gfdif bfdif
1074 rbdif gbdif bbdif
1075 rtdif gtdif btdif
1076 </pre>
1077
1078 <p>
1079 The first string argument is a &quot;thickness&quot; parameter that may be used
1080 to hide detail geometry being proxied by an aggregate BSDF material.
1081 If a view or shadow ray hits a BSDF proxy with non-zero thickness,
1082 it will pass directly through as if the surface were not there.
1083 Similar to the illum type, this permits direct viewing and
1084 shadow testing of complex geometry.
1085 The BSDF is used when a scattered (indirect) ray hits the surface,
1086 and any transmitted sample rays will be offset by the thickness amount
1087 to avoid the hidden geometry and gather samples from the other side.
1088 In this manner, BSDF surfaces can improve the results for indirect
1089 scattering from complex systems without sacrificing appearance or
1090 shadow accuracy.
1091 If the BSDF has transmission and back-side reflection data,
1092 a parallel BSDF surface may be
1093 placed slightly less than the given thickness away from the front surface
1094 to enclose the complex geometry on both sides.
1095 The sign of the thickness is important, as it indicates
1096 whether the proxied geometry is behind the BSDF
1097 surface (when thickness is positive) or in front (when
1098 thickness is negative).
1099 <p>
1100 The second string argument is the name of the BSDF file,
1101 which is found in the usual auxiliary locations. The
1102 following three string parameters name variables for an
1103 &quot;up&quot; vector, which together with the surface
1104 normal, define the local coordinate system that orients the
1105 BSDF. These variables, along with the thickness, are defined
1106 in a function file given as the next string argument. An
1107 optional transform is used to scale the thickness and
1108 reorient the up vector.
1109 <p>
1110 If no real arguments are given, the BSDF is used by itself
1111 to determine reflection and transmission. If there are at
1112 least 3 real arguments, the first triplet is an additional
1113 diffuse reflectance for the front side. At least 6 real
1114 arguments adds diffuse reflectance to the rear side of the
1115 surface. If there are 9 real arguments, the final triplet
1116 will be taken as an additional diffuse transmittance. All
1117 diffuse components as well as the non-diffuse transmission
1118 are modified by patterns applied to this material. The
1119 non-diffuse reflection from either side are unaffected.
1120 Textures perturb the effective surface normal in the usual
1121 way.
1122 <p>
1123 The surface normal of this type is not altered to face the
1124 incoming ray, so the front and back BSDF reflections may
1125 differ. (Transmission is identical front-to-back by physical
1126 law.) If back visibility is turned off during rendering and
1127 there is no transmission or back-side reflection, only then
1128 the surface will be invisible from behind. Unlike other
1129 data-driven material types, the BSDF type is fully supported
1130 and all parts of the distribution are properly sampled.
1131 <p>
1132
1133 <dt>
1134 <a NAME="Antimatter">
1135 <b>Antimatter</b>
1136 </a>
1137
1138 <dd>
1139 Antimatter is a material that can &quot;subtract&quot; volumes from other volumes.
1140 A ray passing into an antimatter object becomes blind to all the specified modifiers:
1141
1142 <pre>
1143 mod antimatter id
1144 N mod1 mod2 .. modN
1145 0
1146 0
1147 </pre>
1148
1149 The first modifier will also be used to shade the area leaving the antimatter volume and entering the regular volume.
1150 If mod1 is void, the antimatter volume is completely invisible.
1151 Antimatter does not work properly with the material type <a HREF="#Trans">&quot;trans&quot;</a>,
1152 and multiple antimatter surfaces should be disjoint.
1153 The viewpoint must be outside all volumes concerned for a correct rendering.
1154
1155 </dl>
1156
1157 <p>
1158 <hr>
1159
1160 <h4>
1161 <a NAME="Textures">2.1.3. Textures</a>
1162 </h4>
1163
1164 A texture is a perturbation of the surface normal, and is given by either a function or data.
1165
1166 <p>
1167
1168 <dl>
1169
1170 <dt>
1171 <a NAME="Texfunc">
1172 <b>Texfunc</b>
1173 </a>
1174
1175 <dd>
1176 A texfunc uses an auxiliary function file to specify a procedural texture:
1177
1178 <pre>
1179 mod texfunc id
1180 4+ xpert ypert zpert funcfile transform
1181 0
1182 n A1 A2 .. An
1183 </pre>
1184
1185 <p>
1186
1187 <dt>
1188 <a NAME="Texdata">
1189 <b>Texdata</b>
1190 </a>
1191
1192 <dd>
1193 A texdata texture uses three data files to get the surface normal perturbations.
1194 The variables xfunc, yfunc and zfunc take three arguments each from the interpolated values in xdfname, ydfname and zdfname.
1195
1196 <pre>
1197 mod texdata id
1198 8+ xfunc yfunc zfunc xdfname ydfname zdfname vfname x0 x1 .. xf
1199 0
1200 n A1 A2 .. An
1201 </pre>
1202
1203 </dl>
1204
1205 <p>
1206 <hr>
1207
1208 <h4>
1209 <a NAME="Patterns">2.1.4. Patterns</a>
1210 </h4>
1211
1212 Patterns are used to modify the reflectance of materials. The basic types are given below.
1213
1214 <p>
1215
1216 <dl>
1217
1218 <dt>
1219 <a NAME="Colorfunc">
1220 <b>Colorfunc</b>
1221 </a>
1222
1223 <dd>
1224 A colorfunc is a procedurally defined color pattern. It is specified as follows:
1225
1226 <pre>
1227 mod colorfunc id
1228 4+ red green blue funcfile transform
1229 0
1230 n A1 A2 .. An
1231 </pre>
1232
1233 <p>
1234
1235 <dt>
1236 <a NAME="Brightfunc">
1237 <b>Brightfunc</b>
1238 </a>
1239
1240 <dd>
1241 A brightfunc is the same as a colorfunc, except it is monochromatic.
1242
1243 <pre>
1244 mod brightfunc id
1245 2+ refl funcfile transform
1246 0
1247 n A1 A2 .. An
1248 </pre>
1249
1250 <p>
1251
1252 <dt>
1253 <a NAME="Colordata">
1254 <b>Colordata</b>
1255 </a>
1256
1257 <dd>
1258 Colordata uses an interpolated data map to modify a material's color.
1259 The map is n-dimensional, and is stored in three auxiliary files, one for each color.
1260 The coordinates used to look up and interpolate the data are defined in another auxiliary file.
1261 The interpolated data values are modified by functions of one or three variables.
1262 If the functions are of one variable, then they are passed the corresponding color component (red or green or blue).
1263 If the functions are of three variables, then they are passed the original red, green, and blue values as parameters.
1264
1265 <pre>
1266 mod colordata id
1267 7+n+
1268 rfunc gfunc bfunc rdatafile gdatafile bdatafile
1269 funcfile x1 x2 .. xn transform
1270 0
1271 m A1 A2 .. Am
1272 </pre>
1273
1274 <p>
1275
1276 <dt>
1277 <a NAME="Brightdata">
1278 <b>Brightdata</b>
1279 </a>
1280
1281 <dd>
1282 Brightdata is like colordata, except monochromatic.
1283
1284 <pre>
1285 mod brightdata id
1286 3+n+
1287 func datafile
1288 funcfile x1 x2 .. xn transform
1289 0
1290 m A1 A2 .. Am
1291 </pre>
1292
1293 <p>
1294
1295 <dt>
1296 <a NAME="Colorpict">
1297 <b>Colorpict</b>
1298 </a>
1299
1300 <dd>
1301 Colorpict is a special case of colordata, where the pattern is a two-dimensional image stored in the RADIANCE picture format.
1302 The dimensions of the image data are determined by the picture such that the smaller dimension is always 1,
1303 and the other is the ratio between the larger and the smaller.
1304 For example, a 500x338 picture would have coordinates (u,v) in the rectangle between (0,0) and (1.48,1).
1305
1306 <pre>
1307 mod colorpict id
1308 7+
1309 rfunc gfunc bfunc pictfile
1310 funcfile u v transform
1311 0
1312 m A1 A2 .. Am
1313 </pre>
1314
1315 <p>
1316
1317 <dt>
1318 <a NAME="Colortext">
1319 <b>Colortext</b>
1320 </a>
1321
1322 <dd>
1323 Colortext is dichromatic writing in a polygonal font.
1324 The font is defined in an auxiliary file, such as helvet.fnt.
1325 The text itself is also specified in a separate file, or can be part of the material arguments.
1326 The character size, orientation, aspect ratio and slant is determined by right and down motion vectors.
1327 The upper left origin for the text block as well as the foreground and background colors must also be given.
1328
1329 <pre>
1330 mod colortext id
1331 2 fontfile textfile
1332 0
1333 15+
1334 Ox Oy Oz
1335 Rx Ry Rz
1336 Dx Dy Dz
1337 rfore gfore bfore
1338 rback gback bback
1339 [spacing]
1340 </pre>
1341
1342 or:
1343
1344 <pre>
1345 mod colortext id
1346 2+N fontfile . This is a line with N words ...
1347 0
1348 15+
1349 Ox Oy Oz
1350 Rx Ry Rz
1351 Dx Dy Dz
1352 rfore gfore bfore
1353 rback gback bback
1354 [spacing]
1355 </pre>
1356
1357 <p>
1358
1359 <dt>
1360 <a NAME="Brighttext">
1361 <b>Brighttext</b>
1362 </a>
1363
1364 <dd>
1365 Brighttext is like colortext, but the writing is monochromatic.
1366
1367 <pre>
1368 mod brighttext id
1369 2 fontfile textfile
1370 0
1371 11+
1372 Ox Oy Oz
1373 Rx Ry Rz
1374 Dx Dy Dz
1375 foreground background
1376 [spacing]
1377 </pre>
1378
1379 or:
1380
1381 <pre>
1382 mod brighttext id
1383 2+N fontfile . This is a line with N words ...
1384 0
1385 11+
1386 Ox Oy Oz
1387 Rx Ry Rz
1388 Dx Dy Dz
1389 foreground background
1390 [spacing]
1391 </pre>
1392
1393 <p>
1394
1395 By default, a uniform spacing algorithm is used that guarantees every character will appear in a precisely determined position.
1396 Unfortunately, such a scheme results in rather unattractive and difficult to read text with most fonts.
1397 The optional spacing value defines the distance between characters for proportional spacing.
1398 A positive value selects a spacing algorithm that preserves right margins and indentation,
1399 but does not provide the ultimate in proportionally spaced text.
1400 A negative value insures that characters are properly spaced, but the placement of words then varies unpredictably.
1401 The choice depends on the relative importance of spacing versus formatting.
1402 When presenting a section of formatted text, a positive spacing value is usually preferred.
1403 A single line of text will often be accompanied by a negative spacing value.
1404 A section of text meant to depict a picture, perhaps using a special purpose font such as hexbit4x1.fnt, calls for uniform spacing.
1405 Reasonable magnitudes for proportional spacing are between 0.1 (for tightly spaced characters) and 0.3 (for wide spacing).
1406
1407 </dl>
1408
1409 <p>
1410 <hr>
1411
1412 <h4>
1413 <a NAME="Mixtures">2.1.5. Mixtures</a>
1414 </h4>
1415
1416 A mixture is a blend of one or more materials or textures and patterns.
1417 The basic types are given below.
1418
1419 <p>
1420
1421 <dl>
1422
1423 <dt>
1424 <a NAME="Mixfunc">
1425 <b>Mixfunc</b>
1426 </a>
1427
1428 <dd>
1429 A mixfunc mixes two modifiers procedurally. It is specified as follows:
1430
1431 <pre>
1432 mod mixfunc id
1433 4+ foreground background vname funcfile transform
1434 0
1435 n A1 A2 .. An
1436 </pre>
1437
1438 Foreground and background are modifier names that must be
1439 defined earlier in the scene description.
1440 If one of these is a material, then
1441 the modifier of the mixfunc must be &quot;void&quot;.
1442 (Either the foreground or background modifier may be &quot;void&quot;,
1443 which serves as a form of opacity control when used with a material.)
1444 Vname is the coefficient defined in funcfile that determines the influence of foreground.
1445 The background coefficient is always (1-vname).
1446
1447 <p>
1448
1449 <dt>
1450 <a NAME="Mixdata">
1451 <b>Mixdata</b>
1452 </a>
1453
1454 <dd>
1455 Mixdata combines two modifiers using an auxiliary data file:
1456
1457 <pre>
1458 mod mixdata id
1459 5+n+
1460 foreground background func datafile
1461 funcfile x1 x2 .. xn transform
1462 0
1463 m A1 A2 .. Am
1464 </pre>
1465
1466 <dt>
1467 <a NAME="Mixpict">
1468 <b>Mixpict</b>
1469 </a>
1470
1471 <dd>
1472 Mixpict combines two modifiers based on a picture:
1473
1474 <pre>
1475 mod mixpict id
1476 7+
1477 foreground background func pictfile
1478 funcfile u v transform
1479 0
1480 m A1 A2 .. Am
1481 </pre>
1482
1483 <p>
1484
1485 The mixing coefficient function &quot;func&quot; takes three
1486 arguments, the red, green and blue values
1487 corresponding to the pixel at (u,v).
1488
1489 </dl>
1490 <p>
1491
1492 <dt>
1493 <a NAME="Mixtext">
1494 <b>Mixtext</b>
1495 </a>
1496
1497 <dd>
1498 Mixtext uses one modifier for the text foreground, and one for the background:
1499
1500 <pre>
1501 mod mixtext id
1502 4 foreground background fontfile textfile
1503 0
1504 9+
1505 Ox Oy Oz
1506 Rx Ry Rz
1507 Dx Dy Dz
1508 [spacing]
1509 </pre>
1510
1511 or:
1512
1513 <pre>
1514 mod mixtext id
1515 4+N
1516 foreground background fontfile .
1517 This is a line with N words ...
1518 0
1519 9+
1520 Ox Oy Oz
1521 Rx Ry Rz
1522 Dx Dy Dz
1523 [spacing]
1524 </pre>
1525
1526 </dl>
1527
1528 <p>
1529 <hr>
1530
1531 <h3>
1532 <a NAME="Auxiliary">2.2. Auxiliary Files</a>
1533 </h3>
1534
1535 Auxiliary files used in <a HREF="#Textures">textures</a> and <a HREF="#Patterns">patterns</a>
1536 are accessed by the programs during image generation.
1537 These files may be located in the working directory, or in a library directory.
1538 The environment variable RAYPATH can be assigned an alternate set of search directories.
1539 Following is a brief description of some common file types.
1540
1541 <p>
1542
1543 <h4>
1544 <a NAME="Function">12.2.1. Function Files</a>
1545 </h4>
1546
1547 A function file contains the definitions of variables, functions and constants used by a primitive.
1548 The transformation that accompanies the file name contains the necessary rotations, translations and scalings
1549 to bring the coordinates of the function file into agreement with the world coordinates.
1550 The transformation specification is the same as for the <a HREF="#Generators">xform</a> command.
1551 An example function file is given below:
1552
1553 <pre>
1554 {
1555 This is a comment, enclosed in curly braces.
1556 {Comments can be nested.}
1557 }
1558 { standard expressions use +,-,*,/,^,(,) }
1559 vname = Ny * func(A1) ;
1560 { constants are defined with a colon }
1561 const : sqrt(PI/2) ;
1562 { user-defined functions add to library }
1563 func(x) = 5 + A1*sin(x/3) ;
1564 { functions may be passed and recursive }
1565 rfunc(f,x) = if(x,f(x),f(-x)*rfunc(f,x+1)) ;
1566 { constant functions may also be defined }
1567 cfunc(x) : 10*x / sqrt(x) ;
1568 </pre>
1569
1570 Many variables and functions are already defined by the program, and they are listed in the file rayinit.cal.
1571 The following variables are particularly important:
1572
1573 <pre>
1574 Dx, Dy, Dz - incident ray direction
1575 Nx, Ny, Nz - surface normal at intersection point
1576 Px, Py, Pz - intersection point
1577 T - distance from start
1578 Ts - single ray (shadow) distance
1579 Rdot - cosine between ray and normal
1580 arg(0) - number of real arguments
1581 arg(i) - i'th real argument
1582 </pre>
1583
1584 For mesh objects, the local surface coordinates are available:
1585
1586 <pre>
1587 Lu, Lv - local (u,v) coordinates
1588 </pre>
1589
1590 For BRDF types, the following variables are defined as well:
1591
1592 <pre>
1593 NxP, NyP, NzP - perturbed surface normal
1594 RdotP - perturbed dot product
1595 CrP, CgP, CbP - perturbed material color
1596 </pre>
1597
1598 A unique context is set up for each file so
1599 that the same variable may appear in different
1600 function files without conflict.
1601 The variables listed above and any others defined in
1602 rayinit.cal are available globally.
1603 If no file is needed by a given primitive because all
1604 the required variables are global,
1605 a period (`.') can be given in place of the file name.
1606 It is also possible to give an expression instead
1607 of a straight variable name in a scene file.
1608 Functions (requiring parameters) must be given
1609 as names and not as expressions.
1610
1611 <p>
1612 Constant expressions are used as an optimization in function files.
1613 They are replaced wherever they occur in an expression by their value.
1614 Constant expressions are evaluated only once, so they must not contain any variables or values that can change,
1615 such as the ray variables Px and Ny or the primitive argument function arg().
1616 All the math library functions such as sqrt() and cos() have the constant attribute,
1617 so they will be replaced by immediate values whenever they are given constant arguments.
1618 Thus, the subexpression cos(PI*sqrt(2)) is immediately replaced by its value, -.266255342,
1619 and does not cause any additional overhead in the calculation.
1620
1621 <p>
1622 It is generally a good idea to define constants and variables before they are referred to in a function file.
1623 Although evaluation does not take place until later, the interpreter does variable scoping and
1624 constant subexpression evaluation based on what it has compiled already.
1625 For example, a variable that is defined globally in rayinit.cal
1626 then referenced in the local context of a function file
1627 cannot subsequently be redefined in the same file
1628 because the compiler has already determined the scope of the referenced variable as global.
1629 To avoid such conflicts, one can state the scope of a variable explicitly by
1630 preceding the variable name with a context mark (a back-quote) for a local variable,
1631 or following the name with a context mark for a global variable.
1632
1633 <p>
1634
1635 <h4>
1636 <a NAME="Data">2.2.2. Data Files</a>
1637 </h4>
1638
1639 Data files contain n-dimensional arrays of real numbers used for interpolation.
1640 Typically, definitions in a function file determine how to index and use interpolated data values.
1641 The basic data file format is as follows:
1642
1643 <pre>
1644 N
1645 beg1 end1 m1
1646 0 0 m2 x2.1 x2.2 x2.3 x2.4 .. x2.m2
1647 ...
1648 begN endN mN
1649 DATA, later dimensions changing faster.
1650 </pre>
1651
1652 N is the number of dimensions.
1653 For each dimension, the beginning and ending coordinate values and the dimension size is given.
1654 Alternatively, individual coordinate values can be given when the points are not evenly spaced.
1655 These values must either be increasing or decreasing monotonically.
1656 The data is m1*m2*...*mN real numbers in ASCII form.
1657 Comments may appear anywhere in the file, beginning with a pound
1658 sign ('#') and continuing to the end of line.
1659
1660 <p>
1661
1662 <h4>
1663 <a NAME="Font">2.2.3. Font Files</a>
1664 </h4>
1665
1666 A font file lists the polygons which make up a character set.
1667 Comments may appear anywhere in the file, beginning with a pound
1668 sign ('#') and continuing to the end of line.
1669 All numbers are decimal integers:
1670
1671 <pre>
1672 code n
1673 x0 y0
1674 x1 y1
1675 ...
1676 xn yn
1677 ...
1678 </pre>
1679
1680 The ASCII codes can appear in any order. N is the number of vertices, and the last is automatically connected to the first.
1681 Separate polygonal sections are joined by coincident sides.
1682 The character coordinate system is a square with lower left corner at (0,0), lower right at (255,0) and upper right at (255,255).
1683
1684 <p>
1685
1686 <hr>
1687
1688 <h3>
1689 <a NAME="Generators">2.3. Generators</a>
1690 </h3>
1691
1692 A generator is any program that produces a scene description as its output.
1693 They usually appear as commands in a scene description file.
1694 An example of a simple generator is genbox.
1695
1696 <ul>
1697
1698 <li>
1699 <a NAME="Genbox" HREF="../man_html/genbox.1.html">
1700 <b>Genbox</b>
1701 </a>
1702 takes the arguments of width, height and depth to produce a parallelepiped description.
1703 <li>
1704 <a NAME="Genprism" HREF="../man_html/genprism.1.html">
1705 <b>Genprism</b>
1706 </a>
1707 takes a list of 2-dimensional coordinates and extrudes them along a vector to
1708 produce a 3-dimensional prism.
1709 <li>
1710 <a NAME="Genrev" HREF="../man_html/genrev.1.html">
1711 <b>Genrev</b>
1712 </a>
1713 is a more sophisticated generator that produces an object of rotation from parametric functions for radius and axis position.
1714 <li>
1715 <a NAME="Gensurf" HREF="../man_html/gensurf.1.html">
1716 <b>Gensurf</b>
1717 </a>
1718 tessellates a surface defined by the parametric functions x(s,t), y(s,t), and z(s,t).
1719 <li>
1720 <a NAME="Genworm" HREF="../man_html/genworm.1.html">
1721 <b>Genworm</b>
1722 </a>
1723 links cylinders and spheres along a curve.
1724 <li>
1725 <a NAME="Gensky" HREF="../man_html/gensky.1.html">
1726 <b>Gensky</b>
1727 </a>
1728 produces a sun and sky distribution corresponding to a given time and date.
1729 <li>
1730 <a NAME="Xform" HREF="../man_html/xform.1.html">
1731 <b>Xform</b>
1732 </a>
1733 is a program that transforms a scene description from one coordinate space to another.
1734 Xform does rotation, translation, scaling, and mirroring.
1735
1736 </ul>
1737
1738 <p>
1739 <hr>
1740
1741 <h2>
1742 <a NAME="Image">3. Image Generation</a>
1743 </h2>
1744
1745 Once the scene has been described in three-dimensions, it is possible to generate a two-dimensional image from a given perspective.
1746
1747 <p>
1748 The image generating programs use an <a NAME="octree"><b>octree</b></a> to efficiently trace rays through the scene.
1749 An octree subdivides space into nested octants which contain sets of surfaces.
1750 In RADIANCE, an octree is created from a scene description by <a NAME="oconv1" HREF="../man_html/oconv.1.html"><b>oconv</b></a>.
1751 The details of this process are not important, but the octree will serve as input to the ray-tracing programs and
1752 directs the use of a scene description.
1753 <ul>
1754 <li>
1755 <a NAME="rvu" HREF="../man_html/rvu.1.html"><b>Rview</b></a> is ray-tracing program for viewing a scene interactively.
1756 When the user specifies a new perspective, rvu quickly displays a rough image on the terminal,
1757 then progressively increases the resolution as the user looks on.
1758 He can select a particular section of the image to improve, or move to a different view and start over.
1759 This mode of interaction is useful for debugging scenes as well as determining the best view for a final image.
1760
1761 <li>
1762 <a NAME="rpict" HREF="../man_html/rpict.1.html"><b>Rpict</b></a> produces a high-resolution picture of a scene from a particular perspective.
1763 This program features adaptive sampling, crash recovery and progress reporting, all of which are important for time-consuming images.
1764 </ul>
1765 <p>
1766 A number of <a NAME="filters"><b>filters</b></a> are available for manipulating picture files:
1767 <ul>
1768 <li> <a HREF="../man_html/pfilt.1.html"><b>Pfilt</b></a>
1769 sets the exposure and performs antialiasing.
1770 <li> <a HREF="../man_html/pcompos.1.html"><b>Pcompos</b></a>
1771 composites (cuts and pastes) pictures.
1772 <li> <a HREF="../man_html/pcomb.1.html"><b>Pcomb</b></a>
1773 performs arbitrary math on one or more pictures.
1774 <li> <a HREF="../man_html/pcond.1.html"><b>Pcond</b></a>
1775 conditions a picture for a specific display device.
1776 <li> <a HREF="../man_html/protate.1.html"><b>Protate</b></a>
1777 rotates a picture 90 degrees clockwise.
1778 <li> <a HREF="../man_html/pflip.1.html"><b>Pflip</b></a>
1779 flips a picture horizontally, vertically, or both
1780 (180 degree rotation).
1781 <li> <a HREF="../man_html/pvalue.1.html"><b>Pvalue</b></a>
1782 converts a picture to and from simpler formats.
1783 </ul>
1784
1785 <p>
1786 Pictures may be displayed directly under X11 using the program
1787 <a HREF="../man_html/ximage.1.html">ximage</a>,
1788 or converted a standard image format using one of the following
1789 <b>translators</b>:
1790 <ul>
1791 <li> <a HREF="../man_html/ra_bmp.1.html"><b>Ra_bmp</b>
1792 converts to and from BMP image format.
1793 <li> <a HREF="../man_html/ra_ppm.1.html"><b>Ra_ppm</b></a>
1794 converts to and from Poskanzer Portable Pixmap formats.
1795 <li> <a HREF="../man_html/ra_ps.1.html"><b>Ra_ps</b></a>
1796 converts to PostScript color and greyscale formats.
1797 <li> <a HREF="../man_html/ra_rgbe.1.html"><b>Ra_rgbe</b></a>
1798 converts to and from Radiance uncompressed picture format.
1799 <li> <a HREF="../man_html/ra_t16.1.html"><b>Ra_t16</b></a>
1800 converts to and from Targa 16 and 24-bit image formats.
1801 <li> <a HREF="../man_html/ra_t8.1.html"><b>Ra_t8</b></a>
1802 converts to and from Targa 8-bit image format.
1803 <li> <a HREF="../man_html/ra_tiff.1.html"><b>Ra_tiff</b></a>
1804 converts to and from TIFF.
1805 <li> <a HREF="../man_html/ra_xyze.1.html"><b>Ra_xyze</b></a>
1806 converts to and from Radiance CIE picture format.
1807 </ul>
1808
1809 <p>
1810
1811 <hr>
1812
1813 <h2>
1814 <a NAME="License">4. License</a>
1815 </h2>
1816
1817 <pre>
1818 The Radiance Software License, Version 1.0
1819
1820 Copyright (c) 1990 - 2014 The Regents of the University of California,
1821 through Lawrence Berkeley National Laboratory. All rights reserved.
1822
1823 Redistribution and use in source and binary forms, with or without
1824 modification, are permitted provided that the following conditions
1825 are met:
1826
1827 1. Redistributions of source code must retain the above copyright
1828 notice, this list of conditions and the following disclaimer.
1829
1830 2. Redistributions in binary form must reproduce the above copyright
1831 notice, this list of conditions and the following disclaimer in
1832 the documentation and/or other materials provided with the
1833 distribution.
1834
1835 3. The end-user documentation included with the redistribution,
1836 if any, must include the following acknowledgment:
1837 &quot;This product includes Radiance software
1838 (<a HREF="http://radsite.lbl.gov/">http://radsite.lbl.gov/</a>)
1839 developed by the Lawrence Berkeley National Laboratory
1840 (<a HREF="http://www.lbl.gov/">http://www.lbl.gov/</a>).&quot;
1841 Alternately, this acknowledgment may appear in the software itself,
1842 if and wherever such third-party acknowledgments normally appear.
1843
1844 4. The names &quot;Radiance,&quot; &quot;Lawrence Berkeley National Laboratory&quot;
1845 and &quot;The Regents of the University of California&quot; must
1846 not be used to endorse or promote products derived from this
1847 software without prior written permission. For written
1848 permission, please contact [email protected].
1849
1850 5. Products derived from this software may not be called &quot;Radiance&quot;,
1851 nor may &quot;Radiance&quot; appear in their name, without prior written
1852 permission of Lawrence Berkeley National Laboratory.
1853
1854 THIS SOFTWARE IS PROVIDED ``AS IS&quot; AND ANY EXPRESSED OR IMPLIED
1855 WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1856 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
1857 DISCLAIMED. IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
1858 ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
1859 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
1860 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
1861 USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
1862 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
1863 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
1864 OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
1865 SUCH DAMAGE.
1866 </pre>
1867
1868 <hr>
1869
1870 <h2>
1871 <a NAME="Ack">5. Acknowledgements</a>
1872 </h2>
1873
1874 This work was supported by the Assistant Secretary of Conservation and Renewable Energy,
1875 Office of Building Energy Research and Development,
1876 Buildings Equipment Division of the U.S. Department of Energy under Contract No. DE-AC03-76SF00098.
1877
1878 <p>
1879 Additional work was sponsored by the Swiss federal government
1880 under the Swiss LUMEN Project and was carried out in the
1881 Laboratoire d'Energie Solaire (LESO Group) at the
1882 Ecole Polytechnique Federale de Lausanne (EPFL University) in Lausanne, Switzerland.
1883
1884 <p>
1885
1886 <hr>
1887
1888 <h2>
1889 <a NAME="Ref">6.</a> References
1890 </h2>
1891 <p>
1892 <ul>
1893 <li>McNeil, A., C.J. Jonsson, D. Appelfeld, G. Ward, E.S. Lee,
1894 &quot;<a href="http://gaia.lbl.gov/btech/papers/4414.pdf">
1895 A validation of a ray-tracing tool used to generate
1896 bi-directional scattering distribution functions for
1897 complex fenestration systems</a>,&quot;
1898 <em>Solar Energy</em>, 98, 404-14,
1899 November 2013.
1900 <li>Ward, G., R. Mistrick, E.S. Lee, A. McNeil, J. Jonsson,
1901 &quot;<a href="http://gaia.lbl.gov/btech/papers/4414.pdf">Simulating
1902 the Daylight Performance of Complex Fenestration Systems
1903 Using Bidirectional Scattering Distribution Functions within
1904 Radiance</a>,&quot;
1905 <em>Leukos</em>, 7(4)
1906 April 2011.
1907 <li>Cater, Kirsten, Alan Chalmers, Greg Ward,
1908 &quot;<a href="http://www.anyhere.com/gward/papers/egsr2003.pdf">Detail to Attention:
1909 Exploiting Visual Tasks for Selective Rendering</a>,&quot;
1910 <em>Eurographics Symposium
1911 on Rendering 2003</em>, June 2003.
1912 <li>Ward, Greg, Elena Eydelberg-Vileshin,
1913 &quot;<a HREF="http://www.anyhere.com/gward/papers/egwr02/index.html">Picture Perfect RGB
1914 Rendering Using Spectral Prefiltering and Sharp Color Primaries</a>,&quot;
1915 Thirteenth Eurographics Workshop on Rendering (2002),
1916 P. Debevec and S. Gibson (Editors), June 2002.
1917 <li>Ward, Gregory,
1918 &quot;<a HREF="http://www.anyhere.com/gward/papers/cic01.pdf">High Dynamic Range Imaging</a>,&quot;
1919 Proceedings of the Ninth Color Imaging Conference, November 2001.
1920 <li>Ward, Gregory and Maryann Simmons,
1921 &quot;<a HREF="http://www.anyhere.com/gward/papers/tog99.pdf">
1922 The Holodeck Ray Cache: An Interactive Rendering System for Global Illumination in Nondiffuse
1923 Environments</a>,&quot; ACM Transactions on Graphics, 18(4):361-98, October 1999.
1924 <li>Larson, G.W., &quot;<a HREF="http://www.anyhere.com/gward/papers/ewp98.pdf">The Holodeck: A Parallel
1925 Ray-caching Rendering System</a>,&quot; Proceedings of the Second
1926 Eurographics Workshop on Parallel Graphics and Visualisation,
1927 September 1998.
1928 <li>Larson, G.W. and R.A. Shakespeare,
1929 <a HREF="http://radsite.lbl.gov/radiance/book/index.html"><em>Rendering with Radiance:
1930 the Art and Science of Lighting Visualization</em></a>,
1931 Morgan Kaufmann Publishers, 1998.
1932 <li>Larson, G.W., H. Rushmeier, C. Piatko,
1933 &quot;<a HREF="http://radsite.lbl.gov/radiance/papers/lbnl39882/tonemap.pdf">A Visibility
1934 Matching Tone Reproduction Operator for
1935 High Dynamic Range Scenes</a>,&quot; LBNL Technical Report 39882,
1936 January 1997.
1937 <li>Ward, G., &quot;<a HREF="http://radsite.lbl.gov/radiance/papers/erw95.1/paper.html">Making
1938 Global Illumination User-Friendly</a>,&quot; Sixth
1939 Eurographics Workshop on Rendering, Springer-Verlag,
1940 Dublin, Ireland, June 1995.</li>
1941 <li>Rushmeier, H., G. Ward, C. Piatko, P. Sanders, B. Rust,
1942 &quot;<a HREF="http://radsite.lbl.gov/mgf/compare.html">
1943 Comparing Real and Synthetic Images: Some Ideas about
1944 Metrics</a>,&quot; Sixth Eurographics Workshop on Rendering,
1945 Springer-Verlag, Dublin, Ireland, June 1995.</li>
1946 <li>Ward, G., &quot;<a HREF="http://radsite.lbl.gov/radiance/papers/sg94.1/paper.html">The RADIANCE
1947 Lighting Simulation and Rendering System</a>,&quot; <em>Computer
1948 Graphics</em>, July 1994.</li>
1949 <li>Rushmeier, H., G. Ward, &quot;<a HREF="http://radsite.lbl.gov/radiance/papers/sg94.2/energy.html">Energy
1950 Preserving Non-Linear Filters</a>,&quot; <em>Computer
1951 Graphics</em>, July 1994.</li>
1952 <li>Ward, G., &quot;A Contrast-Based Scalefactor for Luminance
1953 Display,&quot; <em>Graphics Gems IV</em>, Edited by Paul Heckbert,
1954 Academic Press 1994.</li>
1955 <li>Ward, G., &quot;<a HREF="http://radsite.lbl.gov/radiance/papers/sg92/paper.html">Measuring and
1956 Modeling Anisotropic Reflection</a>,&quot; <em>Computer
1957 Graphics</em>, Vol. 26, No. 2, July 1992. </li>
1958 <li>Ward, G., P. Heckbert, &quot;<a HREF="http://radsite.lbl.gov/radiance/papers/erw92/paper.html">Irradiance
1959 Gradients</a>,&quot; Third Annual Eurographics Workshop on
1960 Rendering, Springer-Verlag, May 1992. </li>
1961 <li>Ward, G., &quot;<a HREF="http://radsite.lbl.gov/radiance/papers/erw91/erw91.html">Adaptive Shadow
1962 Testing for Ray Tracing</a>&quot; Photorealistic Rendering in
1963 Computer Graphics, proceedings of 1991 Eurographics
1964 Rendering Workshop, edited by P. Brunet and F.W. Jansen,
1965 Springer-Verlag. </li>
1966 <li>Ward, G., &quot;Visualization,&quot; <em>Lighting Design and
1967 Application</em>, Vol. 20, No. 6, June 1990. </li>
1968 <li>Ward, G., F. Rubinstein, R. Clear, &quot;<a HREF="http://radsite.lbl.gov/radiance/papers/sg88/paper.html">A Ray Tracing Solution for
1969 Diffuse Interreflection</a>,&quot; <em>Computer Graphics</em>,
1970 Vol. 22, No. 4, August 1988. </li>
1971 <li>Ward, G., F. Rubinstein, &quot;A New Technique for Computer
1972 Simulation of Illuminated Spaces,&quot; <em>Journal of the
1973 Illuminating Engineering Society</em>, Vol. 17, No. 1,
1974 Winter 1988. </li>
1975 </ul>
1976 <p>
1977 See the <a HREF="index.html">RADIANCE Reference Materials</a> page
1978 for additional information.
1979 <hr>
1980
1981 <a NAME="Index"><h2>7. Types Index</h2></a>
1982
1983 <pre>
1984 <h4>
1985 SURFACES MATERIALS TEXTURES PATTERNS MIXTURES</h4>
1986 <a HREF="#Source">Source</a> <a HREF="#Light">Light</a> <a HREF="#Texfunc">Texfunc</a> <a HREF="#Colorfunc">Colorfunc</a> <a HREF="#Mixfunc">Mixfunc</a>
1987 <a HREF="#Sphere">Sphere</a> <a HREF="#Illum">Illum</a> <a HREF="#Texdata">Texdata</a> <a HREF="#Brightfunc">Brightfunc</a> <a HREF="#Mixdata">Mixdata</a>
1988 <a HREF="#Bubble">Bubble</a> <a HREF="#Glow">Glow</a> <a HREF="#Colordata">Colordata</a> <a HREF="#Mixtext">Mixtext</a>
1989 <a HREF="#Polygon">Polygon</a> <a HREF="#Spotlight">Spotlight</a> <a HREF="#Brightdata">Brightdata</a>
1990 <a HREF="#Cone">Cone</a> <a HREF="#Mirror">Mirror</a> <a HREF="#Colorpict">Colorpict</a>
1991 <a HREF="#Cup">Cup</a> <a HREF="#Prism1">Prism1</a> <a HREF="#Colortext">Colortext</a>
1992 <a HREF="#Cylinder">Cylinder</a> <a HREF="#Prism2">Prism2</a> <a HREF="#Brighttext">Brighttext</a>
1993 <a HREF="#Tube">Tube</a> <a HREF="#Plastic">Plastic</a>
1994 <a HREF="#Ring">Ring</a> <a HREF="#Metal">Metal</a>
1995 <a HREF="#Instance">Instance</a> <a HREF="#Trans">Trans</a>
1996 <a HREF="#Mesh">Mesh</a> <a HREF="#Plastic2">Plastic2</a>
1997 <a HREF="#Metal2">Metal2</a>
1998 <a HREF="#Trans2">Trans2</a>
1999 <a HREF="#Mist">Mist</a>
2000 <a HREF="#Dielectric">Dielectric</a>
2001 <a HREF="#Interface">Interface</a>
2002 <a HREF="#Glass">Glass</a>
2003 <a HREF="#Plasfunc">Plasfunc</a>
2004 <a HREF="#Metfunc">Metfunc</a>
2005 <a HREF="#Transfunc">Transfunc</a>
2006 <a HREF="#BRTDfunc">BRTDfunc</a>
2007 <a HREF="#Plasdata">Plasdata</a>
2008 <a HREF="#Metdata">Metdata</a>
2009 <a HREF="#Transdata">Transdata</a>
2010 <a HREF="#BSDF">BSDF</a>
2011 <a HREF="#Antimatter">Antimatter</a>
2012
2013 </pre>
2014
2015 <p>
2016
2017
2018 <hr>
2019 <center>Last Update: October 22, 1997</center>
2020 </body>
2021 </html>
2022