What is SIFF?
SIFF stands for Scene Interchange File Format. It is an attempt at creatinga reasonable interchange format for 3D data.

Why is it SIFF 1.0?
The 1.0 is specified to show that it is the first level SIFF format. A SIFF
2.0 is planned for the near future. It will accommodate higher ordergraphics (curves, NURBs, etc.).

Who did it?
SIFF was developed by Sega and a number of its vendors.

What is Sega’s motivation?
We have a very real need for portable 3D data. Current interchange
methods are either very cumbersome, or very damaging to the data inprocess. By establishing a common format and enlisting the support ofmajor 3D package vendors, we can achieve this interchange transparently.

Is it limited to video game development?
No. Sega very deliberately made the format general purpose. If we limited
the formats usefulness to video games, we would have difficulty in gaining
support from major tool vendors. So limiting to format hinders its
usefulness to us.

Why would Sega give away such an advantage?
Again, if we keep it to ourselves it becomes more difficult to garnersupport. By releasing the specification, we hopefully help the graphics
community, which in turn will help us with a larger selection of tools.

What is being done to promote it?
Well, we’re just getting underway. So, we’re preparing sample code anddata and working with a few vendors to establish support. Then we’ll hit
everybody.

What services are available?
Right now, just clarification of the format.

What services will be available?
In the near future, a chunk registry will be set up to maintain the chunkdefinitions. Also, we’ll be able to arbitrate problems within thespecification.

S IFF 1. 0
Scene Interchange File Format
October 1996

PurposeTo provide a mechanism for the exchange of three-dimensional scene, animation, andmodel data for the general graphics community.

S IFF and the IFF Standard
The file format described is compliant with the IFF standard as specified by Electronic Arts.

Reference
Since voluminous documentation on the IFF standard exists, this document will notreiterate those descriptions. Most people working with file formats will already be familiar
with IFF type file. The official format document is the EA IFF 85 Standard for Interchange
Format File , Jerry Morrison (Electronic Arts), January 14, 1985.

FORM for SIFF
SIFF 1.0 is specifically defined as a “FORM” group chunk of type “SF1Q”, thus the general
file format it:“FORM”<size of group>“SF1Q”<chunk definition><chunk definition>…
<chunk definition>

Alignment and Padding
The IFF standard requires chunks to be aligned on 32-bit boundaries with nulls used topad out chunks. The size fields account only for actual data, not padding information.

Endian
IFF and SIFF assume the use of big-endian storage. (68000, not 80x86 style).

Ordering of chunks
SIFF chunks are designed to contain the necessary data of relationship with other chunks.
As a result, ordering of chunks is arbitrary and no meaningful data should be inferred fromsuch ordering.

S IFF General Notes
3-D Coordinate System
SIFF assumes a right-handed coordinate system with the positive x-axis directed towards
the right; the positive y-axis directed down; and, the positive z-axis directed into thescreen. Rotations about an axis are clockwise as viewed towards to positive directions.

UV Coordinate System
UV coordinates are used within SIFF to apply texture information to geometry.
Given a standard rectangular texture, the u-axis covers the range [0.0,1.0] with 0.0
indicating the left-edge of the left-most pixel of the texture; and 1.0 indicating the rightedge of the right-most pixel of the texture. The v-axis covers the range [0.0,1.0] with 0.0
indicating the top-edge of the top-most pixel of the texture; and 1.0 indicating the bottomedge of the bottom-most pixel of the texture.
Since the UV coordinates are represented by floating-point values, they can be specified
outside of the [0.0,1.0] range. This is accepted as legal and implies that the texture repeats
infinitely in all directions without deviation.

Linear Algebra Conventions
Although implementation details can vary considerably, the following rules define SIFF
expected mathematics. Only alternative methods and notation that yield identical result areconsidered compliant.
•Standard 4x4 homogenous matrices are used to represent transformations.

•

Cumulative transformations are of the form: T* = T0T1T2…, where TN represents thetransformation at depth N in the hierarchy.

•

Points are transformed to global space with the following: P* = PT*, where P
represents the original point in the form (X,Y,Z,1).

Types
The following data types are used within the SIFF specification. Note that these are more
precise names than the identical types defined within the IFF specification.
Uint8
Uint1 6
Uint3 2float
stringunsigned 8-bit integer (UBYTE in IFF)
unsigned 16-bit integer (UWORD in IFF)
unsigned 32-bit integer
32-bit IEEE single precision floating-point value
zero-terminated string

Names
Most of the SIFF chunks have associated “names” which are used as uniq ue identifiers of
the particular component that a chunk contains.

There is no restriction on the length of names or their contents. No restrictions are definedsince naming schemes that a globally legal are very limited in ability. As a result, applications
should use reasonable naming schemes. Ensuring legal names for the intended use is
the responsibility of the application.

Tags
Many of the SIFF chunks have associated “tags” which contain user-defined (notapplication defined) data associated with a particular component. Tags are zero-terminatedstrings containing possibly multiple-field data. Semicolons are used to delimit fields within asingle tag.

CHU NK TYPESThe following are the defined chunk types SIFF 1.0.

Geometry Chunk Types
The following chunk types define the geometric makeup of the scene. Hierarchy isinherent since each element has a specified parent. No element of the hierarchy is‘displayed’ until it is associated with visual information (see Visual Chunk Types below).
All coordinates are local to the given object. The world space in inherited from thehierarchical parent, and can be changed with the transformation chunks. Alltransformations are cumulative within their hierarchies as would be expected, therefore
transformations take place in the world space of their parent.
There are a limited number of restrictions or rules regarding usage of the hierarchy:•

Cycles within the data are restricted (as in two elements having each other as theirrespective parents).

•

Elements that cannot reach global space through the parental chain are restricted.
This is also a cyclical graph problem, but the intention of this rule is to ensure thatelements can resolve their space in the global coordinate system.

NODE - Generi c Node
A Generic Node is a placeholder or hook in the geometry intended to suit organizational
purposes. It is also the base form for all of the geometric types.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

MTRX - Matrix
Matrix data is used to incorporate standard homogenous matrix transforms of the form

a 0 0 a1 0
a 2 0a 3 0a0 1 a 0 2 a0 3

a1 1 a1 2 a1 3
.
a2 1 a 2 2 a2 3

a3 1 a 3 2 1 NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

a0 0
a0 1
a0 2
a0 3
a1 0
a1 1
a1 2
a1 3
a2 0
a2 1
a2 2
a2 3
a3 0
a3 1
a3 2

float
float
float
float
float
float
float
float
float
float
float
float
float
float
float

TRAN - Transl ate
Shorthand chunk for the specification of a translation-only transformation matrix.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

TransX
TransY
TransZ

float
float
float

S CAL - Scal e
Shorthand chunk for the specification of a scaling-only transformation matrix.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

S cale X
S cale Y
S cale Z

float
float
float

ROTX - Rotate about the X-Axi s
Shorthand chunk for the specification of an x-axis rotation-only transformation matrix.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

Rotate X

float

ROTY - Rotate about the Y-Axi s
Shorthand chunk for the specification of a y-axis rotation-only transformation matrix.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

Rotate Y

float

ROTZ - Rotate about the Z-Axi s
Shorthand chunk for the specification of a z-axis rotation-only transformation matrix.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

Rotate Z

float

ROTQ - Rotate about Quarterni on Defined Axi s
The rotation component of a transformation matrix.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

Rotate X
Rotate Y
Rotate Z

float
float
float

A quarternion of the form (s,(x,y,z)) can be converted to a homogenous matrix with thefollowing formulae:

 1 − 2 y 2 − 2z 2
 2 x y + 2sz
 2 xz − 2 sy0

2 x y − 2sz
22
1− 2x − 2z
2 yz + 2 sx
0

2 xz + 2 sy
2 yz − 2 sx
22
1− 2x − 2y
0

0

0
0

1

VERT - Vertex
A vertex defines a point in space. It’s location is specified in local coordinates; it’sorientation is inherited from its parent.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

string

X
Y
Z

float
float
float

Identification string of parent geometry.
If NULL, then parent is global space.

EDGV - Edge (Value Specified)
Two points specified with discrete locations
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

X0
Y0
Z0
X1
Y1
Z1

float
float
float
float
float
float

EDGR - Edge (Reference Specified)
Two points specified by reference to points already transformed to global space.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P0
P1

stringstringNames of points to inherit from.

TRIV - Triangle (Value Specified)Three points specified with discrete locations
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.

If NULL, then parent is global space.
X0
Y0
Z0
X1
Y1
Z1
X2
Y2
Z2

float
float
float
float
float
float
float
float
float

TRIR - Triangle (Reference Specified)Three points specified by reference to points already transformed to global space.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P0
P1
P2

stringstringstringNames of points to inherit from.

QADV - Quadri lateral (Val ue S peci fi ed)
Four points specified with discrete locations
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

X0
Y0
Z0
X1
Y1
Z1
X2
Y2
Z2
X3
Y3

float
float
float
float
float
float
float
float
float
float
float

Z3

float

QADR - Quadri lateral (Reference S peci fi ed)
Four points specified by reference to points already transformed to global space.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt
P1
P2
P3

stringstringstringstringNames of points to inherit from.

PLYV - Polygon (General Cas e, Val ue S peci fi ed)
An n-gon of at least 1 point, specified with discrete value. It is a superset capable
containing vertices, edges, triangles, and quadrilaterals, any of which may be specified
here.
Name

stringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

N

float

Number of points

X0
Y0
Z0
…

float
float
float
…

List points as necessary

PLYR - Polygon (General Cas e, Reference S peci fi ed)
An n-gon of at least 1 point, specified with referenced values. It is a superset capable
containing vertices, edges, triangles, and quadrilaterals, any of which may be specified
here.
Name

stringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

N

float

Numberof points

P0…

string…

Names of points to inherit fromList points as necessary

PLXV - Polygon (Convex Case, Value Specified)A special case polygon which is entirely convex. The differentiation in chunks is to serve asa hint for optimal processing of the data.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

N

float

Number of points

X0
Y0
Z0
…

float
float
float
…

List points as necessary

PLXR - Polygon (Convex Case, Reference Specified)A special case polygon which is entirely convex. The differentiation in chunks is to serve asa hint for optimal processing of the data.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

N

float

Number of points

P0…

string…

Names of points to inherit fromList points as necessary

INS T - Instance of Geometry Data
Declares an instance of data.

NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

O riginal

stringName of original geometry to copy (can be ahierarchy)

Visual Chunk Types
The following chunk types define the visual properties of the scene.
COLR - Color
Defines a color in 16-bit per channel form, including alpha. Since most systems are notusing 16-bits per channel, the data for lower bit depths should be aligned to the mostsignificant-bit of the data space. Additionally, IFF specifies the repetition of data bits to thelower order unused space. For example,
bit-depth
4812value (hex)
F
4F
34F

store as (hex)
FFFF
4F4F
34F3

Name

stringUnique identification string for visual data.

TagstringUser defined information.

Re d

Uint16Red Channel

Gree nUint16

Green Channel

Blue

Uint16

Blue Channel

Alpha

Uint16Alpha Channel (transparency) – 0 istransparent, FFFF is opaque

PALT - PaletteDefines a series of colors in 16-bit per channel form, including alpha. The same
conventions regarding bit-use apply as in the COLR chunk.
NamestringUnique identification string for visual data.

TagstringUser defined information.

N

Uint16

Re d0

Uint16Gree n0

Uint16

Blue 0

Uint16Alpha0

Uint16…

…

Numberof colors in this palette

List colors as necessary

TXTP - Texture us ing Palette Data
Defines a texture map using palette data. Data is listed row-by-row from left-to-right. Eachpixel gets is own byte (if 256 or fewer colors are used) or 16-bit word (if more than 256 areused). Palette indices are enumerated beginning with zero.
NamestringUnique identification string for visual data.

TagstringUser defined information.

P ale tte

stringName of the palette to use

O ffse t

Uint16

Offset within palette to starting color

S ize

Uint16

Number of colors assumed to be in palette

Width

Uint16in Pixels

He ight

Uint16in Pixels

data

Uint8 | Uint16…

…

Row-by-row dump of palette indices.
List entries as necessary

TXTR - Texture us ing Raw Data
Indicates a texture map using raw data.
Supported are 8-bit per channel and 16-bit per channel data, including alpha. Color entries
follow the same rules as in the COLR chunk. Data is stored row-by-row, left-to-right.
NamestringUnique identification string for visual data.

TagstringUser defined information.

De pth

Uint16

Color depth per channel.

Width

Uint16in Pixels

He ight

Uint16in Pixels

Re d0 0

Uint8 | Uint16

Red channel.

Gree n0 0

Uint8 | Uint16

Green channel.

Blue 0 0

Uint8 | Uint16

Blue channel.

Alpha0 0

Uint8 | Uint16

Alpha channel.

…

…

List entries as necessary

APLY - Appl y to Object
Applies visual information to geometry.
In general, any visual information can be applied to any geometry. Some of these areappropriate; other make little sense. Specified results are as follows:•

COLR applied to <any> ‡ <any> is solid-colored with specified color.

•

PALT applied to <any> ‡ <any>’s points are colored with a series of colors from thepalette. The indices of the palettes are specified by the U coordinate of each point.
This is to allow for Gouraud shading.

•

TXT* applied to <any> ‡ <any>’s surface area is mapped with the specified texture datalinearly mapped in 3-space.

A visual chunk can be applied to multiple pieces of geometry. A piece of geometry canhave multiple visual chunks applied to it. If an object has multiple visual attributes, they are
assumed to mix equally.
Textures are specified with UV coordinates. As many UV coordinates as the target
geometry has are specified (1 for VERT, 2 for EDG*, 3 for TRI*, 4 for QAD*, N for PL*).
NamestringUnique identification string for this chunkTagstringUser defined information.

V isualstringName of visual chunk to apply

Ge ome try

stringName of geometry chunk to apply to.

P oints

Uint32

Number of points expected in target
geometry. (32 bits are used to maintainalignment)

U0

float

U coordinate for first point

V0

float

V coordinate for first point…

…

List UV entries as necessary

GRUP - Decl are a Group of Chunks
Identifies a set of chunks as a named set. The named set could be used for group
selection, or operation. The primary intent of this feature is to allow a group of visual
information to be applied to a group of geometry information.
There are many situations where this feature is undesirable – as in the parent of a geometry
item. As a result this chunk is only legally named as part of the APLY chunk, or by itself.
NamestringUnique identification string of this group.

TagstringUser defined information.

N

Uint32

Number of members in this group

Me mbe r0

stringName of members to be included…

stringList members as necessary

Animation Chunk Types
ANML - Animate Li near
Straight linear interpolated animation (or key-framed data)
NamestringUnique identification string for this chunkTagstringUser defined information.

P oints

Uint16

Number of control points in function.

Time 0float

Time of first control point.

P aram0

float

Value at first control point.

…

…

List Time/Parameter pairs as necessary.

ANIM - Animate Parameter
Applies animation function to an arbitrary parameter. Due to the nature of variable length
records, the context of the target needs to be understood for the animation data to becorrectly placed and converted to integer if necessary.
NamestringUnique identification string for this chunkTagstringUser defined information.

Anim

stringName of animation function to apply

Targe tstringName of chunk to apply to.

P aramUint32

Parameter index of animated value (staring
with zero for ‘Name’)

VALU - Value
This chunk is a container for a single value. It is used for evaluation of animation.
NamestringUnique identification string for this chunkTagstringUser defined information.

P aramfloat

The value

ASGN - As si gn Val ue to Parameter
Copies a value to an arbitrary parameter. Due to the nature of variable length records, thecontext of the target needs to be understood for the animation data to be correctly placedand converted to integer if necessary.
NamestringUnique identification string for this chunkTagstringUser defined information.

V aluestringName of value to copy

Targe tstringName of chunk to apply to.

P aramUint32

Parameter index of animated value (staring
with zero for ‘Name’)ARTH - Arithmetic function, s impl e
Performs simple three component arithmetic (two sources, one destination). It operates
exclusively on VALU chunks. The hierarchy exists to force ordering when necessary –processing is expected to be depth-first.
NamestringUnique identification string for this chunkTagstringUser defined information.

P are nt

stringIdentification string of parent arithmetic.
If NULL, then function is top-level.

O perstring

Function identificationA

stringName of source value 1

BstringName of source value 2

Re sult

stringName of result value

O per
+
*
/
%
abs
acos
asin
atan
cos
cosh
exp
log
log10
pow
sin
sinh
tan
tanh
sqrt
Order of Animation evaluation

Re sult
A+B
A-B
A*B
A/B
A%B
as defined by “C” language
as defined by “C” language
as defined by “C” language
as defined by “C” language
as defined by “C” language
as defined by “C” language
as defined by “C” language
as defined by “C” language
as defined by “C” language
as defined by “C” language
as defined by “C” language
as defined by “C” language
as defined by “C” language
as defined by “C” language
as defined by “C” language

Order of evaluation of animation data is as follows:••••

determination of Time
ANIM/ANML chunks
ARTH chunks
ASGN chunks

•evaluation of Geometry

Miscellaneous Chunk Types
LTAM - Li ght, Ambient
Defines an ambient light sourceNamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

R
G
B

float
float
float

Color of light (1.0 being full intensity)

LTPT - Li ght, Poi nt
Defines a point light in space. It’s location is specified in local coordinates; it’s orientation isinherited from its parent.
NamestringUnique identification string of this light.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

R
G
B
X
Y
Z

float
float
float
float
float
float

Color of light (1.0 being full intensity)

Coordinate location

LTDR - Li ght, Directi onal
Defines a directional light in space. It’s location is specified in local coordinates; it’sorientation is inherited from its parent.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

R
G
B
X
Y
Z

float
float
float
float
float
float

Color of light (1.0 being full intensity)

Coordinate location

CAMR - Camera
Defines a simple pinpoint camera in space. It’s location is specified in local coordinates; it’sorientation is inherited from its parent.
NamestringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.
If NULL, then parent is global space.

Dist
X
Y
Z

float
float
float
float

distance to view plane
Coordinate location

USR* - Appl ication defi ned us age
Any chunk beginning with “USR” is assumed to be application defined. Though not official
sanctioned as a chunk, it is included for application writers who are unable to or do not havetime to register their chunk usage and definition, and for development stage work.
NORM - Defi nes a Surface Normal
Define a surface normal which can be attached to a piece of geometry. The parent isdefined at having this normal. This chunk is not considered a core geometry type sincenormals are very application specific. Therefore, specification and usage of these normals
is application defined. Applications that use this data should have an option to ignore this
data.
Name

stringUnique identification string of this piece ofgeometry.

TagstringUser defined information.

P are nt

stringIdentification string of parent geometry.

If NULL, then parent is global space.
NX
NY
NZ

float
float
float

Surface normal value