ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/doc/ray.html
Revision: 1.42
Committed: Fri May 30 16:35:52 2025 UTC (4 days, 8 hours ago) by greg
Content type: text/html
Branch: MAIN
CVS Tags: HEAD
Changes since 1.41: +19 -17 lines
Log Message:
docs: Improved wording on new mirror material behavior

File Contents

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