ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cv/mgflib/spec.txt
Revision: 1.8
Committed: Thu Apr 13 12:38:33 1995 UTC (29 years ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 1.7: +15 -3 lines
Log Message:
added index of refraction

File Contents

# User Rev Content
1 greg 1.1 MATERIALS AND GEOMETRY FORMAT
2     SCCSid "$SunId$ LBL"
3    
4     Introduction
5     ============
6     The following file format is a simple ASCII representation of surface
7     geometry and materials for the purpose of visible-light simulation
8     and rendering. The overall objective of this format is to provide
9     a very simple yet fairly complete modeling language that does not
10     place unreasonable demands on the applications programmer or the
11     object library creator.
12    
13     Similar to Wavefront's .OBJ file format, our format utilizes a
14     number of object entities, one per line, some of which establish
15     a context for the entities that follow. Specifically, there is
16     a context for the current vertex, the current color, and the
17     current material. The current vertex is used only for setting
18     values related to that vertex. The current color is used for
19     setting values related to that color, as well as by certain
20     material attributes which take an optional color setting.
21     The current material is used for setting material-related
22     parameters, and for establishing the material for the following
23     geometric entities. In addition to these three named contexts,
24     there are two hierarchical (i.e. cumulative) contexts, the
25     current transform and the current object name.
26    
27     Each entity is given by a short keyword, followed by space- or tab-
28     delimited arguments on a single line. A single entity may be extended
29     over multiple lines using a backslash ('\') character right before the
30 greg 1.7 end of line, though no extended line may exceed 4096 characters in total
31     length.
32 greg 1.1
33     Entities and Contexts
34     =====================
35     There are three contexts in effect at all times, current vertex,
36     current color and current material. Initially, these contexts are
37     unnamed, and have specific default values. The unnamed vertex is the
38     origin. The unnamed color is neutral gray. The unnamed material is a
39 greg 1.3 perfect (two-sided) absorber. The unnamed contexts may be modified,
40     but those modifications will not be saved. Thus, reestablishing an
41     unnamed context always gets its initial default value. To save a new
42     context or modify an old one, it must first be named. Entities
43     associated with named contexts (i.e. "v", "c" and "m") may be followed
44     by an identifier and an equals sign ('='), indicating a new context.
45     If there is no equals, then the context must already be defined, and
46     the appearance of the entity merely reestablishes this context. If the
47     context id is followed by an equals, then a new context is defined,
48     destroying any previous instance of that context name. Redefining or
49     changing values of a context does not affect earlier uses of the same
50     name, however. Contexts are always associated with a name id, which is
51     any non-blank sequence of printing ASCII characters. An optional
52     template may be given following the equals, which is a previously
53     defined context to use as a source of default values for this
54     definition. If no template is given, then the unnamed context of that
55     type is used to set initial values. Named contexts continue until the
56     next context definition of the same type.
57 greg 1.1
58     Hierarchical Contexts
59     =====================
60     Two entities define a second type of context, which is hierarchical.
61     These are the transform ("xf") entity and the object ("o") entity.
62     The object entity is used simply for naming collections of surfaces.
63     An object entity with a name applies to the following surfaces up
64     until an object entity with no name, which signifies the end of this
65     object's scope. Object entities may be nested to any level, and
66     can be thought of as parts and subparts of an enclosing global object.
67     Note that this is strictly for ease of identification, and has no
68     real meaning as far as the geometric description goes. In contrast,
69     the transform entity is very significant as it determines how enclosing
70 greg 1.5 objects are to be scaled and placed in the final description. Hierarchical
71     contexts may be nested in any way, but should not overlap.
72 greg 1.1
73     Without further ado, here are the proposed entities and their interpretations:
74    
75     Keyword Arguments Meaning
76     ------- --------- -------
77     # anything a comment
78     i filename [xform] include file (with transformation)
79     ies filename [-m f][xform] include IES luminaire (with transformation)
80     v [id [= [template]]] get/set vertex context
81     p x y z set point position for current vertex
82     n dx dy dz set surface normal for current vertex
83     c [id [= [template]]] get/set color context
84     cxy x y set CIE (x,y) chromaticity for current color
85     cspec l_min l_max v1 v2 .. set relative spectrum for current color
86 greg 1.7 cct temperature set spectrum based on black body temperature
87 greg 1.1 cmix w1 c1 w2 c2 .. mix named colors to make current color
88     m [id [= [template]]] get/set material context
89 greg 1.3 sides {1|2} set number of sides for current material
90 greg 1.1 rd rho_d set diffuse reflectance for current material
91     td tau_d set diffuse transmittance for current material
92     ed epsilon_d set diffuse emittance for current material
93     rs rho_s alpha_r set specular reflectance for current material
94     ts tau_s alpha_t set specular transmittance for current material
95 greg 1.8 ir n_real n_imag set index of refraction for current material
96 greg 1.1 o [name] begin/end object context
97     f v1 v2 v3 .. polygon using current material, spec. vertices
98     sph vc radius sphere
99     cyl v1 radius v2 truncated right cylinder (open-ended)
100     cone v1 rad1 v2 rad2 truncated right cone (open-ended)
101 greg 1.5 prism v1 v2 v3 .. length truncated right prism (closed solid)
102 greg 1.1 ring vc rmin rmax circular ring with inner and outer radii
103     torus vc rmin rmax circular torus with inner and outer radii
104     xf [xform] begin/end transformation context
105    
106     These are the context dependencies of each entity:
107    
108     Entities Contexts
109     -------- --------
110     p, n vertex
111     cxy, cspec, cmix color
112 greg 1.3 sides material
113 greg 1.1 rd, td, ed, rs, ts color, material
114     f, sph, cyl, cone, ring, torus, prism material, object, transformation
115    
116     Transformations
117     ===============
118     A rigid body transformation is given with the transform entity, or as
119     part of an included file. The following transformation flags and
120     arguments are defined:
121    
122     -t dx dy dz translate objects along the given vector
123     -rx degrees rotate objects about the X-axis
124     -ry degrees rotate objects about the Y-axis
125     -rz degrees rotate objects about the Z-axis
126     -s scalefactor scale objects by the given factor
127     -mx mirror objects about the Y-Z plane
128     -my mirror objects about the X-Z plane
129     -mz mirror objects about the X-Y plane
130     -i N repeat the following arguments N times
131     -a N make an array of N geometric instances
132    
133     Transform arguments have a cumulative effect. That is, a rotation
134     about X of 20 degrees followed by a rotation about X of -50 degrees
135     results in a total rotation of -30 degrees. However, if the two
136     rotations are separated by some translation vector, the cumulative
137     effect is quite different. It is best to think of each argument as
138     acting on the included geometric objects, and each subsequent transformation
139     argument affects the objects relative to their new position/orientation.
140    
141     For example, rotating an object about its center requires translating
142     the object back to the origin, applying the desired rotation, and translating
143     it again back to its original position.
144    
145     Rotations are given in degrees counter-clockwise about a principal axis.
146     That is, with the thumb of the right hand pointing in the direction
147     of the axis, rotation follows the curl of the fingers.
148    
149 greg 1.4 The transform command itself is also cumulative, but in the reverse
150     order. That is, later transformations (i.e. enclosed transformations)
151     are prepended to existing (i.e. enclosing) ones. A transform command
152     with no arguments is used to return to the previous condition. It is
153     necessary that transforms and their end statements ("xf" by itself) be
154     balanced in a file, so that later or enclosing files are not affected.
155 greg 1.1
156     Transformations apply only to geometric types, e.g. polygons, spheres, etc.
157     Vertices and the components that go into geometry are not directly affected.
158     This is to avoid confusion and the inadvertent multiple application of a
159     given transformation.
160    
161     Arrays
162     ======
163     The -a N transform specification causes the following transform
164     arguments to be repeated along with the contents of the included
165 greg 1.2 objects N times. The first instance of the geometry will be in its
166     initial location; the second instance will be repositioned according
167     to the named transformation; the third instance will be repositioned by
168 greg 1.1 applying this transformation twice, and so on up to N-1 applications.
169    
170     Multi-dimensional arrays may be specified with a single include
171     entity by giving multiple array commands separated by their
172     corresponding transforms. A final transformation may be given
173     by preceeding it with a -i 1 specification. In other words, the
174     scope of an array command continues until the next -i or -a option.
175    
176     Other Details
177     =============
178     End of line may be any one of the sequences: linefeed ('\n'), carriage-
179     return ('\r'), or a carriage return followed by a linefeed.
180    
181     Blank lines are ignored on the input, as are any blanks preceeding
182     a keyword on a line. Indentation may improve readability, especially
183     in context definitions.
184    
185     The comment character ('#') must be followed by at least one blank
186     character (space or tab) for easy parsing. Like any other line,
187     a comment may be extended to multiple lines using a backslash ('\').
188    
189     Include filename paths are relative to the current file. Absolute
190     paths are expressly forbidden. UNIX conventions should be used for the
191     path separator ('/') and disk names should not be used (i.e. no
192     "C:\file"). To further enhance portability across systems, directory
193     names should be 8 characters or fewer with no suffix, filenames should
194     fit within an 8.3 format, and all characters should be lower case.
195     (They will be automatically promoted to upper case by DOS systems.)
196     We suggest the standard suffix ".mgf" for "materials and geometry format".
197    
198     The XYZ coordinate system is right-handed, and lengths are always in
199     SI meters. This is not really a limitation as the first statement
200     in the file can always be a transform with the -s option to convert
201     to a more convenient set of units. Included IES files will also start
202     out in meters, and it is important to specify a transform into the
203     local coordinate system. The -m option (preceeding any transform)
204     may be used to specify an output multiplication factor.
205    
206     Vertex normals need not be normalized, and a normal equal to (0,0,0) indicates
207     that the exact surface normal should be used. (This is the default.)
208    
209     Color in this system does not include intensity, only hue and
210     saturation. Intensity, such as reflectance or emittance, is explicitly
211     included in the other material parameters. All colors are absolute,
212     e.g. spectral reflectance or transmittance under uniform white light.
213    
214 greg 1.6 A CIE xy chromaticity pair is the most basic color specification. A
215     full spectrum is the most general specification, and the starting (i.e.
216     minimum) and ending (i.e. maximum) wavelengths are given along with a
217     set of evenly spaced values. Wavelengths are given in nanometers, and
218 greg 1.7 should be within the range of 380-780. The spectral values themselves,
219 greg 1.6 which can be thought of as relative power density per nanometer, start
220     at the first wavelength and proceed at even increments to the last
221     wavelength. The values in between will be interpolated as necessary,
222 greg 1.7 so there must be at least two specified points. The color temperature
223     entity corresponds to the spectrum of a black body at the specified
224     temperature (in degrees Kelvin). The color mixing entity is intended
225     not only for the mixing of named colors, but also for color
226     specifications using an arbitrary set of basis functions. The mixing
227     coefficients are in effect relative luminances for each color
228     "primary." The actual total of the mixing coefficients or spectral
229     values is irrelevant, since the results will always be normalized.
230 greg 1.1
231     Diffuse emittance is always given in SI units of lumens/meter^2. Note that
232     this is emittance, not exitance, and does not include light reflected or
233     transmitted by the surface.
234    
235     The roughness associated with specular reflectance and transmittance
236     is the RMS surface facet slope. A value of 0 indicates a perfectly
237     smooth surface, meaning that reflected or transmitted rays will not
238     be scattered.
239    
240     The sum of the diffuse and specular reflectances and transmittances
241     must be strictly less than one (with no negative values, obviously).
242 greg 1.8 These values are assumed to be measured at normal incidence. If an
243     index of refraction is given, this may modify the balance between
244     diffuse and specular reflectance at other incident angles. If the
245     material is one-sided (see below), then it may be a dielectric interface.
246     In this case, the specular transmittance given is that which would be
247     measured at normal incidence for a pane of the material 5 mm thick.
248     This is important for figuring the actual transmittance for non-planar
249     geometries assuming a uniformly absorbing medium. If the index of
250     refraction has an imaginary part, then the surface is a metal and this
251     implies other properties according to physics. The default index of
252     refraction is that of a vacuum, i.e. (1,0).
253 greg 1.1
254     The object entity establishes a hierarchical context, consisting of
255     this identifier and all those preceding. It has no real meaning except
256     to group the following surfaces up until an empty object statement
257     under a descriptive name for improved file readability.
258    
259 greg 1.3 Surfaces are two-sided unless the "sides" entity is used to set the
260 greg 1.8 number of sides for a material to one. If a surface is one-sided,
261 greg 1.3 then it appears invisible when viewed from the back side. This means
262     that a transmitting object will affect the light coming in through the
263     front surface and ignore the characteristics of the back surface. As
264 greg 1.8 long as the transmission characteristics are the same, the results should
265     be correct. If the rendering technique does not allow for one-sided
266 greg 1.3 surfaces, an approximately correct result can be obtained for one-sided
267     transmitting surfaces by using the square root of the given tau_s and
268     half the given alpha_t. If a rendering technique does not permit
269     two-sided surfaces, then each surface must be made into two for
270     full compliance if "sides" is set to 2 (the default).
271 greg 1.1
272     The surface normal of a face is oriented by the right-hand rule.
273     Specifically, the surface normal faces towards the viewer when the
274     vertices circulate counter-clockwise. Faces may be concave or convex,
275     but must be planar. Holes may be represented as concave polygons with
276     coincident sides (i.e. seams).
277    
278     A prism consists of a set of coplanar vertices specifying an end-face,
279     and a length value. The prism will be extruded so that the end-face
280     points outward, unless the length value is negative, in which case the
281     object is extruded in the opposite direction, resulting in inward-
282 greg 1.5 directed surface normals. If surface normals are specified for the
283     vertices, they will be applied to the side faces but not the end
284     faces, and they must generally point in the appropriate direction
285     (i.e. in or out depending on whether extrusion is negative or positive).
286 greg 1.1
287     A sphere, cylinder or cone with negative radii is interpreted as having
288     an inward facing surface normal. Otherwise, the normal is assumed
289     to face outwards. (It is illegal for a cone to have one positive and
290     one negative radius.)
291    
292     The central vertex for a ring or torus must have an associated normal,
293     which serves to orient the ring. The inner radius must be given first,
294     and must be strictly less than the outer radius. The inner radius may
295     be zero but not negative. There is an exception for a torus with
296     inward-pointing normal, which is identified by a negative outer radius
297     and a non-positive inner radius.
298    
299     Examples
300     ========
301     The following is a complete example input file (don't ask me what it is):
302    
303     # Define some materials:
304     m red_plastic =
305     c red =
306     cxy .8 .1
307     rd 0.5
308     # reestablish unnamed (neutral) color context:
309     c
310     rs 0.04 0.02
311     m green_plastic =
312     c green =
313     cxy .2 .6
314     rd 0.4
315     c
316     rs .05 0
317     m bright_emitter =
318     c
319     ed 1000
320     m dark =
321     c
322     rd .08
323     # Define some vertices:
324     v v1 =
325     p 10 5 7
326     v v2 =
327     p 15 3 9
328     v v3 =
329     p 20 -7 6
330     v v4 =
331     p 20 10 6
332     v v5 =
333     p 10 10 6
334     v v6 =
335     p 10 -7 6
336     v cv1 =
337     p -5 3 8
338     n 0 0 -1
339     v cv2 =
340     p -3 3 8
341     n 0 0 1
342     # make some faces:
343     m green_plastic
344     f v1 v3 v4
345     m red_plastic
346     f v3 v4 v5
347     f v5 v6 v7
348     m bright_emitter
349     f v3 v4 v5 v6
350     # make a cylindrical source with dark end caps:
351     m bright_emitter
352     cyl cv1 .15 cv2
353     m dark
354     ring cv1 0 .15
355     ring cv2 0 .15
356    
357     The following is a more typical example, which relies on a material library:
358    
359     # Include our materials:
360     i material.mgf
361     # Modify red_plastic to have no specular component:
362     m red_plastic
363     rs 0 0
364     # Make an alias for blue_plastic:
365     m outer_material = blue_plastic
366     # Make a new material based on brass, with greater roughness:
367     m rough_brass = brass
368     c brass_color
369     rs 0.9 0.15
370     # Load our vertices:
371     i lum1vert.mgf
372     # Modify appropriate vertices to make luminaire longer:
373     v v10
374     p 5 -2 -.1
375     v v11
376     p 5 2 -.1
377     v v8
378     p 5 2 0
379     v v9
380     p 5 -2 0
381     # Load our surfaces, rotating them -90 degrees about Z:
382     i lum1face.mgf -rz -90
383     # Make a 2-D array of sequins covering the face of the fixture:
384     m silver
385     i sequin.mgf -a 5 -t .5 0 0 -a 4 -t 0 .75 0
386    
387     Note that by using libraries and modifying values, it is possible to create
388     a variety of fixtures without requiring large files to describe each one.
389    
390     Interpretation
391     ==============
392     Interpretation of this language will be simplified by the creation
393     of a general parser that will be able to express the defined entities
394     in simpler forms and remove entities that would not be understood by
395     the caller.
396    
397     For example, a caller may ask the standard parser to produce only
398     the entities for diffuse uncolored materials, vertices without normals,
399     and polygons. The parser would then expand all include statements,
400     remove all color statements, convert spheres and cones to polygonal
401     approximations, and so forth.
402    
403     This way, a single general parser can permit software to operate
404     at whatever level it is capable, with a minimal loss of generality.
405     Furthermore, distribution of a standard parser will improve
406     both forward and backward compatibility as new entities are added
407     to the specification.
408    
409     Rationale
410     =========
411     Why create yet another file format for geometric data, when so many
412     others already exist? The main answer to this question is that we
413     are not merely defining geometry, but materials as well. Though the
414     number of committee and de facto standards for geometric data is large,
415     the number of standards for geometry + materials is small. Of these,
416     almost all are non-physical in origin, i.e. they are based on common,
417     ad hoc computer graphics rendering practices and cannot be used to create
418     physical simulations. Of the one or two formats that were intended
419     for or could be adapted to physical simulation, the syntax and semantics
420     are at the same time too complex and too limiting to serve as a suitable
421     standard.
422    
423     Specifically, establishing the above, new standard has the following
424     advantages:
425    
426     o It is easy to parse.
427     o It is easy to support, at least as a least common denominator.
428     o It is ASCII and fairly easy for a person to read and understand.
429     o It supports simple color, material and vertex libraries.
430     o It includes a simple yet fairly complete material specification.
431     o It is easy to skip unsupported entities (e.g. color, vertex normals)
432     o It supports transformations and instances.
433     o It is easy to add new entities, and as long as these entities can
434     be approximated by the original set, backwards compatibility
435     can be maintained through a standard parsing library.
436    
437     Most of the disadvantages of this format relate to its simplicity, but
438     since simplicity was our most essential goal, this could not be helped.
439     Specifically:
440    
441     o There is no general representation of curved surfaces (though
442     vertex normals make approximations straightforward).
443     o There are no general surface scattering functions.
444     o There are no textures or bump-maps.
445    
446     If any of these seems particularly important, I will look into adding them,
447     though they will tend to complicate the specification and make it more
448     difficult to support.