The Infini-D File Format

For Infini-D versions 3.0--3.5, Specular R&D
September 6, 1996
Converted by Paul Bourke


Introduction

This document describes how to create, interpret, and modify Infini-D 3.0-3.5 scene files and object library files. A scene file describes either a static 3D scene or a 3D animation, and includes parameters for geometric objects, lights, cameras, surfaces, effects, and time-based transformation parameters. An object library file describes the geometry of a single SplineForm&tm; object, which describes a path, 4 rails, and 1 or more cross-sections to form a cubic Bezier-patch surface.

About the Elmo Block Structure.

Infini-D versions 3.0 and later use the Elmo file format. Elmo is a nested block structure which brings order to an otherwise chaotic collection of data. Elmo's main features are:

a) Each file is a list of 1 or more blocks.

b) Each block has a list of 0 or more subblocks after the main block data.

c) Each block has a header containing the block type, a unique block ID (the Tag), the block size, and the position of the first subblock.

d) Blocks have a fixed or variable size depending on the block type.

e) Any block can have extra data added by adding a subblock of a new type.

f) Any unrecognized block types are ignored, to allow backward compatibility.

g) Blocks are written in a standard order for efficiency of reading.

h) File readers can take advantage of the expected order for efficiency, but should not expect blocks in a particular order to allow for new and unrecognized block types.

i) Integers and other values are ordered with the most-significant byte first (big-endian), as is typical with Mactinosh data.

A Single Elmo Block

Offset

Size in Bytes
Contents
Description
0
4
Elmo type
a 4-character code which determines the block contents, e.g. "scen" for scene files.
4
4
Elmo tag
unique identifying number for each block in a file.
8
4
block size
block size in bytes, including header and subblocks.
12
4
subblock offset
subblock offset: the number of bytes from the start of the block to the first subblock. If there are no subblocks then the offset equals the block size.
16
varies
block data
The contents here depends on the block type, and extends from byte 16 to (subblock_offset - 1)
subblock_offset
varies
1st subblock
(subblocks are optional, according to block type)
subblock_offset + 1st subblock block size
varies
2nd subblock
(subblocks are optional, according to block type)
subblock_offset + 2nd subblock block size
varies
3nd subblock
(subblocks are optional, according to block type)
...
...
...
...
block size


start of next block

Block Type Summary - In order of occurrence

Type

Name
Subblock of
Possible subblocks
Subblock offset
Page
elmo
File header
-
(many)
28
12
scen
Scene
elmo
surf
48
12
csrf
Composite surface
elmo
csla
100
13
csla
Composite surface layer
csrf
-
156
14
surf
Basic surface
elmo
rgb, tile, frct, nois, marb, wood, natw, imag
104
15
rgb
RGB color
surf
-
28
16
tile
Tile surface
surf
-
192
17
frct
Fractal surface
surf, terr
-
72
17
nois
Noise surface
surf
-
48
18
marb
Marble surface
surf
-
64
18
wood
Wood surface
surf
-
56
18
natw
Natural wood surface
surf
-
64
19
wave
Wave surface
surf
-
64
19
imag
Image map
surf, terr
alis, qtsp
80
19
alis
File Alias
imag
-
varies
20
qtsp
QuickTime surface parameters
imag
-
42
21
lite
Light
elmo
lnsf
124
21
lnsf
Lens Flare
lite
-
20
22
obj
Object
elmo
obx1, evtm, terr, modl
236
22
obx1
Object extended
obj
-
20
24
terr
Terrain data
obj
imag, frct
28
25
modl
Polygonal Mesh data
obj
verl, edgl, facl

25
verl
Vertex list
modl
-
varies
26
edgl
Edge list
modl
-
varies
26
facl
Face list
modl
indl
varies
27
indl
Index list
facl
-
varies
27
evtm
Event mark
obj
afev, raev, sfev, olev, txev, ptev, liev, caev, trev, ppev
varies
28
afev
Affine event mark
evtm
-
72
29
raev
Rotation Affine event mark
evtm
-
88
30
sfev
Surface event mark
evtm
-
28
30
olev
Outline event mark
evtm
-
28
31
txev
Text object event mark
evtm
-
varies
31
liev
Light object event mark
evtm
lfev
72
32
lfev
Lens flare event
liev
-
106
32
caev
Camera object event mark
evtm
-
28
33
trev
Terrain object event mark
evtm
frct
28
33
ppev
Path-profile obj. event mark
evtm
pmdl
28
34
ptev
Path-Profile text obj. event mark
evtm
pmdl
varies
35
pmdl
Path Model
ppev, ptev
ppro
40
35
ppro
Path Profile
pmdl
ol3d, pf2d
varies
36
pf2d
Cross Section (Profile 2D)
ppro
ol2d
varies
37
ol3d
3D Spline (Outline 3D)
ppro
-
varies
38
ol2d
2D Spline (Outline 2D)
pf2d
-
varies
38
envv
Environment Variables
elmo
-
64
39
seqv
Sequence Variables
elmo
-
64
40
bkmk
Bookmark
elmo
-
96
41
view
View of scene
elmo
vwx2
196
41
vwx2
View extended
view
-
20
43
outl
Outline Model (5-way Polyline)
elmo
pypt
58
44
pypt
Polypoint
outl
pylp
varies
45
pylp
Polypoint Loop
pypt
-
varies
45
sqin
Sequencer Info
elmo
sqob
20
46
sqob
Sequencer Object data
sqin
-
32
46
sprf
Scene preferences
elmo
-
24
46
end!
End of file
elmo
-
16
47

Block Type Summary - Alphabetical

Type

Name
Subblock of
Possible subblocks
Subblock offset
Page
afev
Affine event mark
evtm
-
72
27
alis
File Alias
imag
-
varies
20
bkmk
Bookmark
elmo
-
96
38
caev
Camera object event mark
evtm
-
28
31
csla
Composite surface layer
csrf
-
156
14
csrf
Composite surface
elmo
csla
100
13
edgl
Edge list
modl
-
varies
25
elmo
File header
-
(many)
28
12
end!
End of file
elmo
-
16
44
envv
Environment Variables
elmo
-
64
37
evtm
Event mark
obj
afev, raev, sfev, olev, txev, ptev, liev, caev, trev, ppev
varies
26
facl
Face list
modl
indl
varies
25
frct
Fractal surface
surf, terr
-
72
17
imag
Image map
surf, terr
alis, qtsp
80
19
indl
Index list
facl
-
varies
26
lfev
Lens flare event
liev
-
106

liev
Light object event mark
evtm
lfev
72
30
lite
Light
elmo
lnsf
124
21
lnsf
Lens Flare
lite
-
20

marb
Marble surface
surf
-
64
18
modl
Polygonal Mesh data
obj
verl, edgl, facl

24
natw
Natural wood surface
surf
-
64
19
nois
Noise surface
surf
-
48
18
obj
Object
elmo
obx1, evtm, terr, modl
236
22
obx1
Object extended
obj
-
20

ol2d
2D Spline (Outline 2D)
pf2d
-
varies
36
ol3d
3D Spline (Outline 3D)
ppro
-
varies
35
olev
Outline event mark
evtm
-
28
29
outl
Outline Model (5-way Polyline)
elmo
pypt
58
41
pf2d
Cross Section (Profile 2D)
ppro
ol2d
varies
35
pmdl
Path Model
ppev, ptev
ppro
40
33
ppev
Path-profile obj. event mark
evtm
pmdl
28
32
ppro
Path Profile
pmdl
ol3d, pf2d
varies
33
ptev
Path-Profile text obj. event mark
evtm
pmdl
varies
32
pylp
Polypoint Loop
pypt
-
varies
42
pypt
Polypoint
outl
pylp
varies
42
qtsp
QuickTime surface parameters
imag
-
42

raev
Rotation Affine event mark
evtm
-
88
28
rgb
RGB color
surf
-
28
16
scen
Scene
elmo
surf
48
12
seqv
Sequence Variables
elmo
-
64
37
sfev
Surface event mark
evtm
-
28
29
sprf
Scene preferences
elmo
-
24

sqin
Sequencer Info
elmo
sqob
20
43
sqob
Sequencer Object data
sqin
-
32
43
surf
Basic surface
elmo
rgb, tile, frct, nois, marb, wood, natw, imag
104
15
terr
Terrain data
obj
imag, frct
28
23
tile
Tile surface
surf
-
192
17
trev
Terrain object event mark
evtm
frct
28
31
txev
Text object event mark
evtm
-
varies
30
verl
Vertex list
modl
-
varies
25
view
View of scene
elmo
vwx2
196
39
vwx2
View extended
view
-
20

wave
Wave surface
surf
-
64
19
wood
Wood surface
surf
-
56
18

Scene file structure.

Blocks types are listed in the order they usually appear in a scene file. Each level of indentation below indicates that the block type is a subblock of the block above.

elmo

-------file header

scen
-------one scene block

csrf
-------one block per composite surface, in a mixed list of basic and composite surfaces.


csla
-------one block per composite surface layer

surf
-------one block per basic surface, in a mixed list of basic and composite surfaces. Basic surfaces have 1 or 2 surface mapping subblocks:

-------one image mapping subblock from list below.



rgb
-------RGB color parameter.


tile
-------tiling parameters.


frct
-------fractal parameters.


nois
-------noise parameters.


marb
-------marble parameters.


wood
-------(old style) wood parameters.


natw
-------natural wood parameters.


imag
-------image map parameters.



alis
-------one file alias block.



qtsp
-------one QuickTime surface parameter block.


-------optionally one bump maping subblock from list below.


nois
-------noise parameters.


wave
-------wave parameters.

lite
-------one per light


lnsf
-------one lens flare block per light.

obj
-------one per object, including cameras and lights, in a tree structure.


obx1
-------one object extended block per object.


terr
-------one terrain block for terrain objects



frct
-------one fractal data block for fractal terrains.



imag
-------one image block for image mapped terrains.




alis
-------one file alias block


modl
-------one model block for polygonal mesh objects.



verl
-------one vertex list.



edgl
-------one edge list.



facl
-------one face list.




indl
-------multiple edge or neighbor index lists blocks.


evtm
-------one for each eventmark of object. Event marks have different sets of parameters stored with the subblocks below:



afev
-------affine event data.



raev
-------rotation Affine event data.



caev
-------camera event data.



liev
-------light event data.




lfev
-------one lens flare event data. block.



sfev
-------surface event data.



ppev
-------path-profile event data.




pmdl
-------one path model data block.





ppro
-------one path-profile data block.






ol3d
-------5 outline 3D data blocks (path & 4 rails).






pf2d
-------one profile2D block for each cross-section.







ol2d
-------one outline2D block for each curve in a cross-section.



ptev
-------path-profile text event data.




pmdl
-------one path model data block (see above for subblocks)



trev
-------terrain event data.




frct
-------Fractal parameters.

envv
-------one environment variables block.

seqv
-------one sequence variables block.

bkmk
-------one per bookmark, forming a linked list of blocks.

view
-------one per view, forming a linked list of blocks.


vwx2
-------one view extended block per view.

outl
-------one per outline object, forming a link list of blocks.


pypt
-------5 polypoint lists per outline object.



pylp
-------one or more Polypoint Loop blocks per Polypoint block.

sqin
-------one sequencer info block.


sqob
-------one per object listed in sequencer.

sprf
-------one scene preferences block.

end!
-------one EOF block.









Object Library file structure

elmo

-------file header

pmdl
-------one path model data block


ppro
-------one path-profile data block



ol3d
-------5 outline 3D data blocks (path & 4 rails)



pf2d
-------one profile2D block for each cross-section




ol2d
-------one outline2D block for each curve in a cross-section

end!
-------one EOF block









Version History

Infini-D version 3.0 was released in August 1995. This was the first version of Infini-D to used a published file format.

Infini-D version 3.0.1 was released shortly after 3.0. This bug-fix release did not have any file format changes.

Infini-D version 3.1 was released in October 1995. The QuickTime -Surface-Parameters block (`qtsp') was introduced, and the ElmoIndexUnion type was modified to correct smoothing problems with polygonal mesh models having 65,535 or more faces.

Infini-D version 3.2 was released in April 1996. This version did not have any file format changes.

Infini-D version 3.5 was released in August 1996. New block types were Lens-Flare (`lnsf'), Lens-Flare-Event (`lfev'), Object-Extended (`obx1'), View-Extended (`vwx2'), Scene-Preferences (`sprf').

Please note that all elmo scene files are backward compatible to Infini-D version 3.0, since unrecognized block types are ignored. See "About the Elmo Block Structure" for more information.

Data Types.

Integers are ordered with the most-significant byte first (big-endian), as is typical with Mactinosh data. All floating-point values are in standard IEEE format.

General Types




Name
Bytes
Description



ElmoUInt8
1
8 bit unsigned integer




ElmoUInt16
2
16 bit unsigned integer




ElmoUInt32
4
32 bit unsigned integer




ElmoInt8
1
8 bit signed integer




ElmoInt16
2
16 bit signed integer




ElmoInt32
4
32 bit signed integer




ElmoFloat32
4
32 bit floating point number (IEEE single precision)
ElmoBoolean
1
8 bit boolean value. 1 = TRUE, 0 = FALSE.




ElmoPString
varies
A Macintosh "Pascal" string, where the first byte is the number of characters (0-255) in the string that follows. There is no terminating character. Note that the maximum string length is one less than the number of bytes available.











Block header types






Name
Bytes
Description



ElmoType
4
4-character code, e.g. 'elmo'. Characters must be in the range 32-216 ($20-$D8).




ElmoTag
4
An identifying number unique to each block in an elmo file. A 32 bit unsigned value.







Reserved block numbers are:






kNotAnElmoTag = 0
No block or end of block list.



kElmoEOFTag = -1
Tag of "end!" block.





Elmo file header = 1
Tag of file header block.


ElmoBlockHeader
16
The standard header for each Elmo block:






4
ElmoType
a 4-character code which determines the block contents, e.g. "scen" for scene files. Characters must be in the range 32-2216 ($20-$D8).




4
ElmoTag
unique identifying number for each block in a file.




4
ElmoUInt32
block size in bytes, including header and subblocks.




4
ElmoUInt32
subblock offset: the number of bytes from the start of the block to the first subblock. If there are no subblocks then the offset equals the block size.









Geometric types






Name
Bytes
Description



ElmoPoint2D
8
A 2D point (ElmoFloat32: x, y)




ElmoIntPoint2D
4
A 2D Macintosh-style point (ElmoInt16: x, y)




ElmoPointST
8
A point for texture mapping (ElmoFloat32: s, t)




ElmoPoint3D
12
a 3D point or 3D vector (x, y, z)




ElmoPoint4D
16
a 4D point or 4D vector (x, y, z, w)




ElmoQuaternion
16
a quaternion (a useful way to represent rotation: c, x, y, z)




ElmoRect
16
a rectangle (left, top, right, bottom)




ElmoIntRect
8
an integer, Macintosh-style rect (top, left, bottom, right)




Color types







Name
Bytes
Description



ElmoRGBInt8Color
4
A Macintosh-style RGB color






1
ElmoUInt8
red




1
ElmoUInt8
green




1
ElmoUInt8
blue




1
ElmoUInt8
padding (reserved, set to 0)
ElmoRGBIntColor
6
A Macintosh-style RGB color






2
ElmoUInt16
red




2
ElmoUInt16
green




2
ElmoUInt16
blue


ElmoRGBColor
12
an RGB color (each component ranges from 0.0--1.0)






4
ElmoFloat32
red




4
ElmoFloat32
green




4
ElmoFloat32
blue


ElmoHSVColor
12
an HSV color (each component ranges from 0.0--1.0)






4
ElmoFloat32
hue




4
ElmoFloat32
saturation




4
ElmoFloat32
value


ElmoColorTransition
28
an RGB or HSV transition from one color to another






2
ElmoUInt16
padding (reserved, set to 0)


2
ElmoUInt16
transition type (ElmoRGBTransition = 0, ElmoHSVTransition = 1)




12
ElmoRGBColor / ElmoHSVColor
start




12
ElmoRGBColor / ElmoHSVColor
end


ElmoAlphaMode
1
What kind of alpha channel for an image?



kElmoNoAlpha = 0






kElmoStraightAlpha = 1






kElmoMultipliedAlpha = 2










Object transform types






Name
Bytes
Description



ElmoAffine
72
An object's affine data.






12
ElmoVector3D
scale
local scale; does not affect children


12
ElmoVector3D
offset
local offset; does not affect children


12
ElmoVector3D
tree_scale
"uniform scale"; passed down to children


12
ElmoVector3D
rotation
passed down to children


12
ElmoVector3D
shear
passed down to children


12
ElmoVector3D
position
passed down to children
ElmoConstraint3D
28
An object's constraint information (rotation, scale, or position).






12
ElmoVector3D
min




12
ElmoVector3D
max




1
ElmoBoolean
xLocked




1
ElmoBoolean
yLocked




1
ElmoBoolean
zLocked




1
ElmoBoolean
reserved









Bezier spline types







Name
Bytes
Description



PtNode2D_Elmo_Struct
28
A point node on a 2D cubic Bezier spline.






2
ElmoUInt16
reserved




1
ElmoUInt8
reserved




1
ElmoUInt8
kind
kPlainKind=0






kCornerKind=1






kCurveKind=2






kSmoothKind=3



8
ElmoPoint2D
position




8
ElmoPoint2D
LControl




8
ElmoPoint2D
RControl


PtNode3D_Elmo_Struct
40
A point node on a 3D cubic Bezier spline.






2
ElmoUInt16
reserved




1
ElmoUInt8
reserved




1
ElmoUInt8
kind
kPlainKind=0






kCornerKind=1






kCurveKind=2






kSmoothKind=3



12
ElmoPoint3D
position




12
ElmoPoint3D
LControl




12
ElmoPoint3D
RControl









Polygonal Model types






Name
Bytes
Description



ElmoModelIndex
4
An index into a Polygonal model's face, edge, or vertex list (an unsigned integer)




ElmoEdge
8
An edge of a polygonal mesh model.






4
ElmoModelIndex
index1
Index into vertex list; vertex has coordinates of 1st endpoint.



4
ElmoModelIndex
index2
Index into vertex list; vertex has coordinates of 2nd endpoint.

ElmoFace
40
A "face", a 3 or more sided 3D polygon; a facet of a polygonal mesh model.






4
ElmoUInt16
flags
kElmoFlatFace = 0 (face is planar)






kElmoInterpFace = 1 (face not planar)



4
ElmoModelIndex
edgeCount
Number of edges



16
ElmoIndexUnion
edgeList
4 edge indexes or Tag of (edge) index list, in CCW order.



16
ElmoIndexUnion
neighborList
4 neighboring face indexes or Tag of (neighboring face) index list, in CCW order and corresponding to the above edgeList.

ElmoIndexUnion
16
A list of up to 4 indices *OR* the tag of a subblock with a list of 5 or more indicies. Used for a face's edge and neighbor lists - since most faces have 3 or 4 edges and 3 or 4 neighbors, we optimize for that case. Edges and Faces must be listed in counter-clockwise order (CCW from the ouside perspective). If a face does not exist, or smoothing towards the neighboring face is not desired, the constant K_no_neighboring_face is used. K_no_neighboring_face is 0xFFFFFFFF for version 3.1 or later, 0xFFFF for version 3.0 or 3.0.1.













(if ElmoFace.edgeCount is 4 or less)






4
ElmoModelIndex
index[0]
Index of the first edge or neighbor



4
ElmoModelIndex
index[1]
Index of the second edge or neighbor



4
ElmoModelIndex
index[2]
Index of the third edge or neighbor



4
ElmoModelIndex
index[3]
Index of the fourth edge or neighbor



(or, if ElmoFace.edgeCount is 5 or more)






4
ElmoTag
indexListTag
Tag of Index List subblock (holds edge list or face list).







Outline Model types






Name
Bytes
Description



Elmo_Polypoint_Node
8
A node of a polypoint loop






4
ElmoPoint2D
pt




2
ElmoUInt16
padding




2
ElmoInt16
mode
K_straight_segment = 0






K_interpolated_segment = 1






K_bezier_segment = 2 (cubic spline)






K_bezier_2_segment = 3 (quadratic spline)

Block Reference.

Blocks types are listed in the same order as the "Block Type Summary" table width=100%, which has page references. The meaning of the table width=100% entries is as follows:

Name

The 4-character block type, followed by the C language structure or type name, followed by a C language constant which is equal to the block type.
Desc.
A brief description of the block type.
Content
The contents of the bock, which always starts with an Elmo header.
Offset
The number of bytes from the start of the block to that particular element. The last offset listed is usually the subblock offset.
Size
The number of bytes that particular element spans.
Type
The C Language type of the element. See section 7, "Data Types" for an explanation. Some types are common structures which have sub-elements listed in "Data Types", e.g. ElmoPoint3D has "x", "y", and "z" subelements.
Name
The C Language name of the element. Some groups of elements (between horizontal lines) are part of a sub-structure of the block, with the name of the subblock is listed at the top of the group. E.g. Bookmark blocks have a set of "Movie_Camera_Elmo_Struct" elements.
Description and cases
A brief description of the element, followed by any special values or usual values for that element (indented).







Name

elmo

ElmoFileHeader

kElmoFormatKind

Desc.
The Elmo file header. Identifies the file type and size.












Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
4
ElmoUInt32
elmo_vers
The Elmo block structure version number.







Version 2 = 512 (200 hex)

20
4
ElmoUInt32
creator_signature
The Macintosh application signature of Infini-D.







Infini-D signature =SI[infinity]D (5349 B004 hex)

24
4
ElmoUInt32
creator_file_vers
The file format version number.







Inifini-D 3.0, 3.0.1 = 296 (0000 0128 hex)






Inifini-D 3.1, 3.2 = 301 (0000 012D hex)

28




Inifini-D 3.5 = 350 (0000 015E hex)
Subbl.
All other blocks are subblocks of this one.





Context
This block encompases the entire file.



















Name
scen

Scene_Elmo_Block

kSceneElmoBlockType

Desc.
An Infini-D scene. Usually there is one scene block at the start of each scene file.












Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
4
ElmoTag
objectTree
Tag of the first block in the scene's object tree.


20
4
ElmoTag
outlineList
Tag of the first block in the scene's outline list.


24
4
ElmoTag
surfaceList
Tag of the first block in the scene's surface list.


28
4
ElmoTag
lightList
Tag of the first block in the scene's light list.


32
4
ElmoTag
viewList
Tag of the first block in the scene's view list.


36
4
ElmoTag
bookMarkList
Tag of the first block in the scene's book mark list.


40
4
ElmoTag
sequencerInfoTag
Tag of the scene's sequencer info block.


44
4
ElmoTag
useParentSurfaceTag
Tag value reserved for "use parent's surface." There is no block with this tag value. If an object has a surfaceTag with this value, the symbolic meaning is "use the parent object's surface."


48





Subbl.
none





Context
An elmo subblock, usually the first in a scene file.



















Name
csrf

Composite_Surface_Elmo_Block

kComposedSurfaceElmoBlockType

Desc.
A composite surface. Each composite surface has multiple layers as subblocks.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader




16
4
ElmoTag
next
Tag of next block in surface list


20
2
ElmoSurfaceType
type
The type of this surface




(an ElmoUInt16)


kElmoBasicSurface = 0 (`surf' blocks only)






kElmoPictureSurface = 1 (`surf' with `imag' subblock only)






kElmoCompositeSurface = 2 (`csrf' blocks only)

22
2
ElmoSurfaceType
nextType
The type of the next surface




(an ElmoUInt16)


kElmoBasicSurface = 0 (`surf' blocks only)






kElmoPictureSurface = 1 (`surf' with `imag' subblock only)






kElmoCompositeSurface = 2 (`csrf' blocks only)

24
32
char (ElmoPString)
name
The surface name


56
4
ElmoFloat32
diffusion
Diffuse reflection [0.0 to 1.0]


60
4
ElmoFloat32
specularity
Specular highlight [0.0 to 1.0]


64
4
ElmoFloat32
reflectivity
Specular reflection [0.0 to 1.0]


68
4
ElmoFloat32
transmission
Transparency [0.0 to 1.0]


72
4
ElmoFloat32
glow
Glow (ambient light) [0.0 to 1.0]


76
4
ElmoFloat32
specularPower
Shininess [20-220]


80
4
ElmoFloat32
indexOfRefraction
Ranges from 0.5 to 5.5


84
4
ElmoFloat32
metallicity
Metalicity [0.0 to 1.0]


88
4
ElmoFloat32
colorTransmission



92
4
ElmoTag
layerListTag
Tag of first block in layer list


96
4
ElmoUInt32
combinedSwitch
Bitwise-OR of the "mapSwitch" field of the layers.

100





Subbl.
one or more csla blocks





Context
An elmo subblock, in a list of basic and composed surfaces started by the Scene block's surfaceList tag.



















Name
csla

Surface_Layer_Elmo_Block


kSurfaceLayerElmoBlockType
Desc.
A composite surface layer.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader




16
4
ElmoTag
next
Tag of next block in layer list


20
4
ElmoTag
material
Tag of the basic surface for this layer (`surf' block)

24
2
ElmoInt16
inverseMappingID



26
2
ElmoInt16
transferMode
Surface layer transfer modes:






K_copy = 0






K_matte = 1






K_transparent = 2






K_blend_copy = 3






K_blend_matte = 4






K_blend_transparent = 5






K_alpha_channel = 6

28
72
ElmoAffine
transform



100
4
ElmoUInt32
mapSwitch
Map in use if TRUE for the following bits:







kElmoTextureMap = 0x0001






kElmoSpecularMap = 0x0002






kElmoTransmitMap = 0x0004






kElmoReflectMap = 0x0008






kElmoGlowMap = 0x0010






kElmoBumpMap = 0x0020






kElmoSpecularPowerMap = 0x0040






kElmoIndexOfRefractionMap = 0x0080






kElmoMetallicityMap = 0x00100

104
4
ElmoFloat32
textureValue
[0, 1]


108
4
ElmoFloat32
specularValue



112
4
ElmoFloat32
transmitValue



116
4
ElmoFloat32
reflectValue



120
4
ElmoFloat32
glowValue



124
4
ElmoFloat32
bumpValue



128
4
ElmoFloat32
cylindricalAngle
Only for cylindrical, cylindrical cap, and spherical

132
1
ElmoBoolean
invert



133
1
ElmoBoolean
padding1
Reserved, Set to 0.

134
2
ElmoInt16
horizRepeat
These two fields do not apply to 3D textures.


136
2
ElmoInt16
vertRepeat


138
1
ElmoUInt8
flip
surface layer flip mode:






k_layer_flip_none = 0






k_layer_flip_horz = 1






k_layer_flip_vert = 2






k_layer_flip_both = 3

139
1
ElmoUInt8
rotate
surface layer mapping rotate mode:






k_layer_rotate_none = 0






k_layer_rotate_CW_90 = 1






k_layer_rotate_CW_180 = 2






k_layer_rotate_CW_270 = 3

140
8
ElmoPointST
stMin
for ST mapping


148
8
ElmoPointST
stMax
for ST mapping

156





Subbl.
none





Context
A composed surface subblock, in a list of layers started by the surface's layerListTag element.



















Name
surf

Surface_Elmo_Block

kSurfaceElmoBlockType

Desc.
A single "basic" surface, including color, image, or texture mapping and bump mapping.

Content

Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader




16
4
ElmoTag
next
Tag of next block in surface list


20
2
ElmoSurfaceType
type
The type of this surface




(an ElmoUInt16)


kElmoBasicSurface = 0 (`surf' blocks only)






kElmoPictureSurface = 1 (`surf' with `imag' subblock only)






kElmoCompositeSurface = 2 (`csrf' blocks only)

22
2
ElmoSurfaceType
nextType
The type of the next surface




(an ElmoUInt16)


kElmoBasicSurface = 0 (`surf' blocks only)






kElmoPictureSurface = 1 (`surf' with `imag' subblock only)






kElmoCompositeSurface = 2 (`csrf' blocks only)

24
32
char (ElmoPString)
name
The surface name


56
4
ElmoFloat32
diffusion
Diffuse reflection [0.0 to 1.0]


60
4
ElmoFloat32
specularity
Specular highlight [0.0 to 1.0]


64
4
ElmoFloat32
reflectivity
Specular reflection [0.0 to 1.0]


68
4
ElmoFloat32
transmission
Transparency [0.0 to 1.0]


72
4
ElmoFloat32
glow
Glow (ambient light) [0.0 to 1.0]


76
4
ElmoFloat32
specularPower
Shininess [20 - 220]


80
4
ElmoFloat32
indexOfRefraction
Refraction during transparency [0.5 to 5.5]


84
4
ElmoFloat32
metallicity
Metalicity [0.0 to 1.0]


88
4
ElmoFloat32
colorTransmission



92
2
ElmoMappingType
mappingType
One of the following:




(an ElmoUInt16)


kElmoHomogeneousMap = 0






kElmoMandelbrotMap = 1






kElmoJuliaMap = 2






kElmoTileMap = 3






kElmoNoiseMap = 4






kElmoMarbleMap = 5






kElmoWoodMap = 6






kElmoImageMap = 7






kElmoNaturalWoodMap = 8

94
2
ElmoBumpType
bumpType
One of the following:




(an ElmoUInt16)


kElmoNoBump = 0






kElmoWaveBump = 1






kElmoNoiseBump = 2






kElmoCorrosionBump = 3






kElmoImageBump = 4

96
4
ElmoTag
mappingTag
Tag of subblock with color/image mapping data


100
4
ElmoTag
bumpTag
Tag of block with bump mapping data


104





Subbl.
One surface mapping sublock from the following list: rgb , tile, frct, nois, marb, wood, natw, imag, and optionally one bump mapping subblock from this list: nois, wave, imag.





Context
An elmo subblock, in a list of basic and composed surfaces started by the Scene block's surfaceList tag.



















Name
'rgb '

RGB_Color_Elmo_Block

kRGBColorElmoBlockType

Desc.
A color specified as additive Red, Green, and Blue values from 0.0 to 1.0.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
12
ElmoRGBColor
color



28





Subbl.
none





Context
A basic surface subblock.



















Name
tile

Tile_Param_Elmo_Block

kTileElmoBlockType

Desc.
A tile map. The tile colors are determined by the basic surface blocks referred to below. The surfaces must be basic surfaces in the surface list; image maps and composed surfaces can not be used.
Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header


16
2
ElmoInt16
tilesPerX;


18
2
ElmoInt16
tilesPerY;


20
4
ElmoTag
oddTileSurfaceTag;
tag of `surf' block for odd tiles.

24
4
ElmoTag
evenTileSurfaceTag;
tag of `surf' block for even tiles.

28
1
ElmoBoolean
isCheckerBoard;
TRUE or FALSE


29
1
ElmoUInt8
pad1
Reserved, set to 0.

30
2
ElmoUInt8
pad2
Reserved, set to 0.

32
160
ElmoIntPoint2D[40]
tile points



192





Subbl.
none





Context
A basic surface subblock.



















Name
frct

Fractal_Param_Elmo_Block

kFractalElmoBlockType

Desc.
Parameters for a fractal surface





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
8
ElmoPoint2D
seed



24
16
ElmoRect
bound



40
2
ElmoUInt16
padding
Reserved, set to 0.

42
2
ElmoInt16
maxIterations



44
28
ElmoColorTransition
transition



72





Subbl.
none





Context
A basic surface or terrain subblock.



















Name
nois

Noise_Param_Elmo_Block

kNoiseElmoBlockType

Desc.
Noise parameters for a surface





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
28
ElmoColorTransition
transition



44
4
ElmoFloat32
density



48





Subbl.
none





Context
A basic surface subblock.



















Name
marb

Marble_Param_Elmo_Block

kMarbleElmoBlockType

Desc.
A marble map.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
16
ElmoVector4D
weight



32
4
ElmoFloat32
magnitude



36
28
ElmoColorTransition
transition



64





Subbl.
none





Context
A basic surface subblock.



















Name
wood

Wood_Param_Elmo_Block

kWoodElmoBlockType

Desc.
An original-style wood map.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
28
ElmoColorTransition
transition
The two wood colors


44
12
ElmoPoint3D
scale
Swirl, Grain, Cut.


56





Subbl.
none





Context
A basic surface subblock.



















Name
natw

Natural_Wood_Param_Elmo_Block

kNaturalWoodElmoBlockType

Desc.
A "Natural Wood" map.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
28
ElmoColorTransition
transition
The two wood colors


44
4
ElmoFloat32
angle



48
4
ElmoFloat32
centerOffset



52
4
ElmoFloat32
ringScale



56
4
ElmoFloat32
gnarl



60
4
ElmoFloat32
gnarlScale



64





Subbl.
none





Context
A basic surface subblock.



















Name
wave

Wave_Param_Elmo_Block

kWaveElmoBlockType

Desc.
A wave map.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
4
ElmoTag
next
Tag of next wave block.


20
12
ElmoPoint3D
center



32
4
ElmoFloat32
amplitude



36
4
ElmoFloat32
frequency
in radians


40
4
ElmoFloat32
phase
in radians


44
4
ElmoFloat32
damp



48
4
ElmoFloat32
innerLimit
in radians.


52
4
ElmoFloat32
outerLimit
in radians.


56
4
ElmoFloat32
animRate
positive or negative.


60
4
ElmoFloat32
initialPhase
offset for animating.


64





Subbl.
none





Context
A basic surface subblock.



















Name
imag

Image_Param_Elmo_Block

kImageElmoBlockType

Desc.
An image map (picture). This is either a surface subblock (for an image surface), or a






terrain subblock (the terrain data).





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
32
char (ElmoPString)
fileName



48
2
ElmoInt16
vRefNum
Macintosh volume reference number


50
2
ElmoInt16
id


52
4
ElmoInt32
parID
Macintosh parent directory ID.

56
2
ElmoInt16
padding
Reserved, set to 0.

58
2
ElmoUInt16
originalDepth
Actual image bit depth.

60
2
ElmoUInt16
depth
Bit depth to promote or dither to in Infini-D.

62
12
ElmoRGBColor
color
for monochrome images.

74
2
ElmoImageType
type
One of the following:



(ElmoUInt16)


kElmoNoPicture = 0






kElmoPICTPicture = 1






kElmoPICSPicture = 2






kElmoMOVIEPicture = 3






kElmoSCRAPPicture = 4

76
1
ElmoBoolean
hasAlpha
Is there an alpha channel? (for 32-bit images only).

77
1
ElmoAlphaMode
alphaMode
One of the following:






kElmoNoAlpha = 0






kElmoStraightAlpha = 1






kElmoMultipliedAlpha = 2

78
1
ElmoFilterType
filterType





(ElmoUInt8)




79
1
ElmoUInt8
padding2
Reserved, set to 0.

80





Subbl.
alis, qtsp



Context
A basic surface subblock.



















Name
alis

(no block definition exists)

kMacAliasElmoBlockType

Desc.
An alias to a Macintosh file, using the Macintosh Toolbox "AliasRecord" type. Used to refer to






a file of image data.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
varies
AliasRecord
alias
A Macintosh file alias (private data).

Subbl.
none





Context
An `imag' surface subblock.



















Name
qtsp

QTSurf_Param_Elmo_Block

kQTSurfParamElmoBlockType

Desc.
QuickTime Surface Parameters for an Image block which contains a QuickTime movie.






a file of image data.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
4
ElmoInt32
playRate
(actually a 16.16 fixed point number).


20
4
ElmoInt32
movieStartTime



24
4
ElmoInt32
movieEndTime



28
4
ElmoFloat32
worldStartTime



32
4
ElmoInt32
leadInFrame



36
4
ElmoInt32
leadOutFrame



40
1
ElmoBoolean
loop



41
1
ElmoBoolean
padding
Reserved, set to 0.


42





Subbl.
none





Context
An `imag' surface subblock.



















Name
lite

Light_Elmo_Block

kLightElmoBlockType

Desc.
A light information block. A light is also an object, so this block also refers






to a object block.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
4
ElmoTag
next
Tag of next light in list


20
2
ElmoUInt16
padding
Reserved, set to 0.

22
2
ElmoUInt16
type
One of the following:






point_light = 0






sun_light = 1






spot_light = 2

24
4
ElmoTag
lightObject
Tag of the associated object





current
Light_Info_Elmo_Struct data follows:

28
12
ElmoRGBColor
color


40
12
ElmoPoint3D
position


52
12
ElmoVector3D
direction
direction of light; normalized and perpendicular to "up_vector"

64
12
ElmoVector3D
up_vector
normalized and perpendicular to "direction"

76
4
ElmoFloat32
distanceFallOffStart


80
4
ElmoFloat32
distanceFallOffEnd


84
4
ElmoFloat32
distanceFallOffExponent
Always set to 2.0

88
4
ElmoFloat32
innerAngle


92
4
ElmoFloat32
outerAngle


96
4
ElmoFloat32
angleDropExponent


100
4
ElmoFloat32
innerAngleCosine
Cosine of "innerAngle"

104
4
ElmoFloat32
outerAngleCosine
Cosine of "outerAngle"

108
4
ElmoFloat32
intensityScaler


112
4
ElmoTag
gelSurfaceTag
Tag of surface block in surface list.

116
4
ElmoTag
maskSurfaceTag
Tag of surface block in surface list.

120
2
ElmoUInt16
padding1
Reserved, set to 0.

122
1
ElmoUInt8
padding2
Reserved, set to 0.

123
1
ElmoBoolean
castsShadows



124





Subbl.
lnsf





Context
An elmo subblock, in a list of light blocks started by the Scene block's lightList tag.



















Name
lnsf

Lens_flare_Elmo_Block
kLensFlareElmoBlockType
Desc.
Lens-flare data for a light. The animatable width=100% lens-flare data is stored in a lens-flare event block (`lfev').












Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
1
ElmoBoolean
enabled
Does this light have a lens-flare?


17
1
ElmoBoolean
usesIntensity



18
1
ElmoBoolean
usesColor



19
1
ElmoBoolean
enableObfuscation



20





Subbl.
none





Context
A `lite' subblock. Used by Infini-D 3.5 or greater.



















Name
obj

Object_Elmo_Block

kObjectElmoBlockType

Desc.
A single object. EventMarks, terrain & model data are sub-blocks.












Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
2
ElmoUInt16
objectType
One of the following:







k_sphere = 0






k_square = 1






k_plane = 2






k_cube = 3






k_cylinder = 4






k_cone = 5






k_CSG_object = 6






k_extrude = 7






k_lathe = 8






k_terrain = 9 (has 'terr' subblock)






k_torus = 10






k_bicubic_patch = 11






k_light = 12






k_camera = 13






k_freeform = 14






k_mesh = 15 (has 'modl' subblock)






k_font = 16 (Infini-D 2.6 and earlier polygonal text)






k_pathpro = 17 (SplineForm object)






k_pathpro_font = 18 (SplineForm text)

18
1
ElmoUInt8
renderMode
One of the following:







k_at_setting = 0






k_wireframe = 1






k_hidden_line = 2






k_shade_fast = 3






k_shade_better = 4






k_shade_best = 5

19
1
ElmoUInt8
options
8 option flags using the following bit masks:







kElmoObjOptVisible = 0x01






kElmoObjOptForceBackFaces = 0x02






kElmoObjOptNoShadows = 0x04






kElmoObjOptCubeObject = 0x08 ("bbox only")






kElmoObjOptCubeTree = 0x10 ("fast tree")






kElmoObjOptHiddenFromInterface = 0x20 (2nd-Nth characters)






kElmoObjOptHeadOfGroup = 0x40 (1st text character)






kElmoObjOptVisibleMotionPath = 0x80

20
4
ElmoTag
parentTag
Tag of parent object


24
4
ElmoTag
siblingTag
Tag of sibling object


28
4
ElmoTag
childTag
Tag of child object


32
32
char (ElmoPString)
name
Object name


64
28
ElmoConstraint3D
constraint.rotation
Rotation constraints


92
28
ElmoConstraint3D
constraint.position
Position constraints


120
28
ElmoConstraint3D
constraint.scale
Scale constraints


148
72
ElmoAffine
currentAffine
Affine transformation parameters


220
4
ElmoTag
surfaceTag
Tag of surface used for this object, or "useParentSurfaceTag" value of scene block.


224
4
ElmoTag
eventListTag
Tag of events for this object ('evtm' sublock).


228
1
ElmoBoolean
collapsed
Are the object's children hidden in the sequencer window?

229
1
ElmoUInt8
patchBreakupMode
Patch breakup mode constants:







k_patch_at_setting = 0






k_patch_low = 1






k_patch_medium = 2






k_patch_high = 3

230
2
ElmoUInt16
pad1
Reserved, set to 0.

232
4
ElmoTag
extraInfoTag
Tag of subblock with data specific to the object-type. k_light: `lite' block in light list, k_camera: `view' block in view list, k_mesh: `modl' subblock, k_terrain: `terr' subblock.


236





Subbl.
One obx1 subblock, one eventListTag sublock of type 'evtm', plus an extraInfoTag subblock (depending on the "type" parameter) of type: terr or modl.





Context
An Elmo subblock, in a tree of Object blocks started by the Scene block's objectTree tag.



















Name
obx1

Lens_flare_Elmo_Block
kObjX1ElmoBlockType
Desc.
Extended object data for Infini-D 3.5 or greater.












Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
1
ElmoUInt8
CSG_mode
Constructive Solid Geometry mode:







k_CSG_union = 0






k_CSG_intersection = 1






k_CSG_difference = 2

17
1
ElmoUInt8
padding
Reserved, set to 0.


18
1
ElmoBoolean
trace_as_spline



19
1
ElmoBoolean
shadow_catcher



20





Subbl.
none





Context
An `obj ' subblock. Used by Infini-D 3.5 or greater.



















Name
terr

Terrain_Elmo_Block

kTerrainElmoBlockType

Desc.
A terrain info block for terrain objects. For image and fractal terrains, the appropriate






mapping data is stored in a sub-block.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
2
ElmoUInt16
type
The terrain type:







JULIA_IN_MANDEL_FN = 0 ('frct' subblock)






SQUARE_FN = 1 (no subblock)






RIPPLE_FN = 2 (no subblock)






BLACK_HOLE_FN = 3 (no subblock)






STARR_FN = 4 (no subblock)






BUMPS_FN = 5 (no subblock)






(reserved) = 6






NOISE_FN = 7 ('nois' subblock)






MANDEL_FN = 8 ('frct' subblock)






JULIA_FN = 9 ('frct' subblock)






IMAGE_FN = 10 ('imag' subblock)

18
2
ElmoUInt16
gridSize
Size of terrain grid (e.g. 10 = 10 by 10)


20
1
ElmoBoolean
matching
Apply matching surface?

21
1
ElmoBoolean
cliffs



22
2
ElmoUInt16
pad
Reserved, set to 0.

24
4
ElmoTag
mapTag
Tag of terrain map subblock, if any.


28





Subbl.
one nois, frct, or imag subblock, depending on the terrain type.





Context
An object subblock.



















Name
modl

Model_Elmo_Block

kModelElmoBlockType

Desc.
A surface model block for polygon mesh objects. The vertex, face, and edge lists are






sub-blocks.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
1
ElmoBoolean
drawBackfaces



17
1
ElmoBoolean
firstFaceForWireframeOnly



18
1
ElmoBoolean
hasFrontCap
Unused, set to FALSE.

19
1
ElmoBoolean
hasBackCap
Unused, set to FALSE.








20
4
ElmoModelIndex
vertexCount
Number of verticies in vertex list


24
4
ElmoTag
vertexListTag
Tag of vertex list block


28
4
ElmoModelIndex
edgeCount
Number of edges in edge list


32
4
ElmoTag
edgeListTag
Tag of edge list subblock


36
4
ElmoModelIndex
faceCount
Number of faces in face list


40
4
ElmoTag
faceListTag
Tag of face list subblock


44





Subbl.
3 subblocks, one of each type: verl, edgl, facl





Context
An object subblock.



















Name
verl

Vertex_List_Elmo_Block

kVertexListElmoBlockType

Desc.
A vertex list. A vertex is a 3D point on a polygonal model, using scene coordinates. Two verticies make an edge, and 3






or more edges make a polygon face.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
4
ElmoModelIndex
vertexCount
number of verticies to follow


20
12
ElmoPoint3D
vertexList[0]
First vertex


32
12
ElmoPoint3D
vertexList[1]
Second vertex


44
12
ElmoPoint3D
vertexList[2]
Third vertex


...
...
...
...
...

Subbl.
none





Context
A Model subblock



















Name
edgl

Edge_List_Elmo_Block

kEdgeListElmoBlockType

Desc.
A list of edges. An edge is a 3D line segment defined by its two endpoint verticies. The vertex indexes in each edge are zero-origin (0, 1, 2, ...). Three or more edges, listed in counter-clockwise order, make a polygon face.





Content
Offset
Size
Type
Name
Description and cases


0
16
ElmoBlockHeader
header



16
4
ElmoModelIndex
edgeCount
number of edges to follow


20
8
ElmoEdge
edgeList[0]
First edge (index of vertex 1, index of vertex 2)


28
8
ElmoEdge
edgeList[1]
Second edge


36
8
ElmoEdge
edgeList[2]
Third edge


...
...
...
...
...

Subbl.