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 |
< |
end of line, though no extended line may exceed 512 characters in total |
31 |
< |
length. (Given the current set of entities, even approaching 80 |
32 |
< |
characters would be highly unusual.) |
30 |
> |
end of line, though no extended line may exceed 4096 characters in total |
31 |
> |
length. |
32 |
|
|
33 |
|
Entities and Contexts |
34 |
|
===================== |
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 |
< |
perfect absorber. The unnamed contexts may be modified, but those |
40 |
< |
modifications will not be saved. Thus, reestablishing an unnamed |
41 |
< |
context always gets its initial default value. To save a new context |
42 |
< |
or modify an old one, it must first be named. Entities associated with |
43 |
< |
named contexts (i.e. "v", "c" and "m") may be followed by an identifier |
44 |
< |
and an equals sign ('='), indicating a new context. If there is no |
45 |
< |
equals, then the context must already be defined, and the appearance of |
46 |
< |
the entity merely reestablishes this context. If the context id is |
47 |
< |
followed by an equals, then a new context is defined, destroying any |
48 |
< |
previous instance of that context name. Redefining or changing values |
49 |
< |
of a context does not affect earlier uses of the same name, however. |
50 |
< |
Contexts are always associated with a name id, which is any non-blank |
51 |
< |
sequence of printing ASCII characters. An optional template may be |
52 |
< |
given following the equals, which is a previously defined context to |
53 |
< |
use as a source of default values for this definition. If no template |
54 |
< |
is given, then the unnamed context of that type is used to set initial |
55 |
< |
values. Named contexts continue until the next context definition of |
56 |
< |
the same type. |
39 |
> |
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 |
|
|
58 |
|
Hierarchical Contexts |
59 |
|
===================== |
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 |
< |
objects are to be scaled and placed in the final description. |
70 |
> |
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 |
|
|
73 |
|
Without further ado, here are the proposed entities and their interpretations: |
74 |
|
|
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 |
+ |
cct temperature set spectrum based on black body temperature |
87 |
|
cmix w1 c1 w2 c2 .. mix named colors to make current color |
88 |
|
m [id [= [template]]] get/set material context |
89 |
+ |
sides {1|2} set number of sides for current material |
90 |
|
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 |
97 |
|
sph vc radius sphere |
98 |
|
cyl v1 radius v2 truncated right cylinder (open-ended) |
99 |
|
cone v1 rad1 v2 rad2 truncated right cone (open-ended) |
100 |
< |
prism v1 v2 v3 .. length right prism (closed solid) |
100 |
> |
prism v1 v2 v3 .. length truncated right prism (closed solid) |
101 |
|
ring vc rmin rmax circular ring with inner and outer radii |
102 |
|
torus vc rmin rmax circular torus with inner and outer radii |
103 |
|
xf [xform] begin/end transformation context |
108 |
|
-------- -------- |
109 |
|
p, n vertex |
110 |
|
cxy, cspec, cmix color |
111 |
+ |
sides material |
112 |
|
rd, td, ed, rs, ts color, material |
113 |
|
f, sph, cyl, cone, ring, torus, prism material, object, transformation |
114 |
|
|
145 |
|
That is, with the thumb of the right hand pointing in the direction |
146 |
|
of the axis, rotation follows the curl of the fingers. |
147 |
|
|
148 |
< |
The transform command itself is also cumulative, and a transform |
149 |
< |
command with no arguments is used to return to the previous |
150 |
< |
condition. It is best if transforms and their end statements |
151 |
< |
("xf" by itself) are balanced in a file, so that later or enclosing |
152 |
< |
files are not affected. |
148 |
> |
The transform command itself is also cumulative, but in the reverse |
149 |
> |
order. That is, later transformations (i.e. enclosed transformations) |
150 |
> |
are prepended to existing (i.e. enclosing) ones. A transform command |
151 |
> |
with no arguments is used to return to the previous condition. It is |
152 |
> |
necessary that transforms and their end statements ("xf" by itself) be |
153 |
> |
balanced in a file, so that later or enclosing files are not affected. |
154 |
|
|
155 |
|
Transformations apply only to geometric types, e.g. polygons, spheres, etc. |
156 |
|
Vertices and the components that go into geometry are not directly affected. |
161 |
|
====== |
162 |
|
The -a N transform specification causes the following transform |
163 |
|
arguments to be repeated along with the contents of the included |
164 |
< |
file N times. (Note that this option is supported only for included |
165 |
< |
files.) The first instance of the geometry will be in its initial |
166 |
< |
location; the second instance will be repositioned according to the |
163 |
< |
named transformation; the third instance will be repositioned by |
164 |
> |
objects N times. The first instance of the geometry will be in its |
165 |
> |
initial location; the second instance will be repositioned according |
166 |
> |
to the named transformation; the third instance will be repositioned by |
167 |
|
applying this transformation twice, and so on up to N-1 applications. |
168 |
|
|
169 |
|
Multi-dimensional arrays may be specified with a single include |
210 |
|
included in the other material parameters. All colors are absolute, |
211 |
|
e.g. spectral reflectance or transmittance under uniform white light. |
212 |
|
|
213 |
< |
A CIE xy chromaticity pair is the most basic color specification. |
214 |
< |
A full spectrum is the most general specification, and the starting |
215 |
< |
(i.e. minimum) and ending (i.e. maximum) wavelengths are given along |
216 |
< |
with a set of evenly spaced values. Wavelengths are given in nanometers, |
217 |
< |
and must be within the range of 380-780. The spectral values themselves |
218 |
< |
are located starting at the first wavelength and proceeding at even |
219 |
< |
increments to the ending wavelength. The values in between will be |
220 |
< |
interpolated as necessary, so there must be at least two specified points. |
221 |
< |
The color mixing entity is intended not only for the mixing of named |
222 |
< |
colors, but also for color specifications using an arbitrary set |
223 |
< |
of basis functions. The actual totals for spectral and mixing |
224 |
< |
coefficients is irrelevant, since the results will be normalized. |
213 |
> |
A CIE xy chromaticity pair is the most basic color specification. A |
214 |
> |
full spectrum is the most general specification, and the starting (i.e. |
215 |
> |
minimum) and ending (i.e. maximum) wavelengths are given along with a |
216 |
> |
set of evenly spaced values. Wavelengths are given in nanometers, and |
217 |
> |
should be within the range of 380-780. The spectral values themselves, |
218 |
> |
which can be thought of as relative power density per nanometer, start |
219 |
> |
at the first wavelength and proceed at even increments to the last |
220 |
> |
wavelength. The values in between will be interpolated as necessary, |
221 |
> |
so there must be at least two specified points. The color temperature |
222 |
> |
entity corresponds to the spectrum of a black body at the specified |
223 |
> |
temperature (in degrees Kelvin). The color mixing entity is intended |
224 |
> |
not only for the mixing of named colors, but also for color |
225 |
> |
specifications using an arbitrary set of basis functions. The mixing |
226 |
> |
coefficients are in effect relative luminances for each color |
227 |
> |
"primary." The actual total of the mixing coefficients or spectral |
228 |
> |
values is irrelevant, since the results will always be normalized. |
229 |
|
|
230 |
|
Diffuse emittance is always given in SI units of lumens/meter^2. Note that |
231 |
|
this is emittance, not exitance, and does not include light reflected or |
244 |
|
to group the following surfaces up until an empty object statement |
245 |
|
under a descriptive name for improved file readability. |
246 |
|
|
247 |
< |
Surfaces are one-sided, and appear invisible when viewed from the |
248 |
< |
back side. This means that a transmitting object will affect the |
249 |
< |
light coming in through the front surface and ignore the characteristics |
250 |
< |
of the back surface. As long as the characteristics are the same, |
251 |
< |
the results should be correct. If the rendering technique does not |
252 |
< |
allow for one-sided surfaces, an approximately correct result can |
253 |
< |
be obtained for transmitting surfaces by using the square root of |
254 |
< |
the given tau_s and half the given alpha_t. |
247 |
> |
Surfaces are two-sided unless the "sides" entity is used to set the |
248 |
> |
number of sides for a material to one. If a surfaces is one-sided, |
249 |
> |
then it appears invisible when viewed from the back side. This means |
250 |
> |
that a transmitting object will affect the light coming in through the |
251 |
> |
front surface and ignore the characteristics of the back surface. As |
252 |
> |
long as the characteristics are the same, the results should be |
253 |
> |
correct. If the rendering technique does not allow for one-sided |
254 |
> |
surfaces, an approximately correct result can be obtained for one-sided |
255 |
> |
transmitting surfaces by using the square root of the given tau_s and |
256 |
> |
half the given alpha_t. If a rendering technique does not permit |
257 |
> |
two-sided surfaces, then each surface must be made into two for |
258 |
> |
full compliance if "sides" is set to 2 (the default). |
259 |
|
|
260 |
|
The surface normal of a face is oriented by the right-hand rule. |
261 |
|
Specifically, the surface normal faces towards the viewer when the |
267 |
|
and a length value. The prism will be extruded so that the end-face |
268 |
|
points outward, unless the length value is negative, in which case the |
269 |
|
object is extruded in the opposite direction, resulting in inward- |
270 |
< |
directed surface normals. |
270 |
> |
directed surface normals. If surface normals are specified for the |
271 |
> |
vertices, they will be applied to the side faces but not the end |
272 |
> |
faces, and they must generally point in the appropriate direction |
273 |
> |
(i.e. in or out depending on whether extrusion is negative or positive). |
274 |
|
|
275 |
|
A sphere, cylinder or cone with negative radii is interpreted as having |
276 |
|
an inward facing surface normal. Otherwise, the normal is assumed |