|
Printable Version |
I3D Format
Table of Contents
Introduction
I3D is an open eXtensible Markup Language (XML) file format.
The purpose of i3D is to interchange 3D assets between applications and platforms without loss of information.

A vaild I3D file has up to seven parts: Textures, Materials, Shapes, Dynamics, Scene graph, Animation and Userdata. Dependent on application each part can be omitted.
The XML Schema language is used to describe the I3D feature set. Download: I3D 1.6 Schema
Features
- Scenegraph hierarchy with
- TransformGroups/Bones: translation, rotation, scale and visibility
- Lights: ambient, point, directional and spot lights
- Cameras: field of view, near and far clipping plane
- Shapes: meshes and nurbs curves (supports geometry instancing)
- Particle Systems
- Animation
- Animation sets
- Clips
- Keyframes: translation, rotation, scale and visibility
- Morph Targets
- User Attributes
- Dynamics
- Particle Systems (Sprite based)
- Surface Emitter
- Gravity Fields
- Air Fields
- Particle Systems (Sprite based)
- Meshes
- Vertices
- Normals
- Vertex colors
- Skin weights
- Texture coordinates (including multiple uv sets)
- Faces (vertex color, normals and texture coordinates per face)
- Curves
- Nurbscurves
- Shader/Materials
- Multitextures (arbitrary layered textures)
- Lightmaps
- Bumpmaps/Normalmaps
- Environmentmaps
- Specularmaps
Overview
Specification
General Layout
|
<?xml version="1.0" encoding="iso-8859-1"?>
<i3D name="MyScene" version="1.6" xsi:noNamespaceSchemaLocation="http://i3d.giants.ch/schema/i3d-1.6.xsd"> <Files>..</Files> <Materials>..</Materials> <Shapes>..</Shapes> <Dynamics>..</Dynamics> <Scene>..</Scene> <Animation>..</Animation> <UserAttributes>..</UserAttributes> </i3D> |
Coordinate Systems
I3D uses a right-handed coordinate system.Files
All used file references are defined here. File handles are mapped to the corresponding filenames.
|
<Files>
<File fileId="1" filename="myTexture1.png" relativePath="true"/> ... </Files> |
Materials
Materials used in the materials attribute of Shape nodes within the scenegraph section are defined in this section.
|
<Materials>
<Material name="myShader_001" materialId="12"> <Texture fileId="1"/> </Material> ... </Materials> |
Shapes
Shapes are defined here and referenced from the Scene graph section. This mechanism allows multiple instancing of shapes.
|
<Shapes>
<IndexedTriangleSet name="myMesh01" shapeId="1"> ... </IndexedTriangleSet> ... </Shapes> |
Shape node types
IndexedTriangleSet
| Attribute | Description | Type | Optional |
|---|---|---|---|
| name | Name of Shape | string | no |
| shapeId | Shape id | integer | no |
| Element | Description | Type | Cardinality |
|---|---|---|---|
| Vertices | List of vertices | complex | 1 |
| Triangles | List of triangles | complex | 1 |
| Subsets | List of Subsets | complex | 1 |
Vertices
| Attribute | Description | Type | Optional |
|---|---|---|---|
| count | Number of vertices | integer | no |
| normal | Normal | boolean | yes |
| uv0 | UV set 0 | boolean | yes |
| uv1 | UV set 1 | boolean | yes |
| uv2 | UV set 2 | boolean | yes |
| uv3 | UV set 3 | boolean | yes |
| color | Vertex color | boolean | yes |
| blendweights | Blend weights | boolean | yes |
| Element | Description | Type | Cardinality |
|---|---|---|---|
| v | Vertex | complex | 1..n |
v
| Attribute | Description | Type | Optional |
|---|---|---|---|
| p | Vertex position | string | no |
| n | Vertex normals | string | yes |
| t0 to t16 | Texture coordinate | string | yes |
| c | Vertex colors | string | yes |
| bw | Bone weights | string | yes |
| bi | Bone indices | string | yes |
Triangles
| Attribute | Description | Type | Optional |
|---|---|---|---|
| count | Number of triangles | integer | no |
| Element | Description | Type | Cardinality |
|---|---|---|---|
| t | Triangle | complex | 1..n |
t
| Attribute | Description | Type | Optional |
|---|---|---|---|
| vi | Vertices index | string | no |
Subsets
| Element | Description | Type | Cardinality |
|---|---|---|---|
| Subset | Subset | complex | 1..n |
Subset
| Attribute | Description | Type | Optional |
|---|---|---|---|
| firstVertex | First vertex | integer | no |
| numVertices | Number of vertices | integer | no |
| firstIndex | First index | integer | no |
| numIndices | Number of indices | integer | no |
Example
|
<IndexedTriangleSet name="myMesh01" shapeId="1">
<Vertices count="30" uv0="true"> <v c="-0.50 -0.5 0.50" t0="0 0.1 0.3 0.3 0.2 0 0.1 1"/> <v c="0.49 -0.5 0.50" t0="1 0.9 0.3 0.3 0.6 0 0.1 1"/> <v c="-0.50 0.49 0.50" t0="0 0.1 0.9 0.3 0.2 0 0 1"/> ... </Vertices> <Triangles count="40"> <t vi="0 1 3"/> <t vi="2 3 5"/> <t vi="4 5 7"/> ... </Triangles> <Subsets count="1"> <Subset firstVertex="0" numVertices="30" firstIndex="0" numIndices="40"/> </Subsets> </IndexedTriangleSet> |
NurbsCurve
| Attribute | Description | Type | Optional |
|---|---|---|---|
| name | Name of Shape | string | no |
| shapeId | Shape id | integer | no |
| degree | Degree | integer | no |
| form | Form (stored as: "open", "close" or "periodic") | string | no |
| Element | Description | Type | Cardinality |
|---|---|---|---|
| cv | List of contol vertices | complex | 3..n |
cv
| Attribute | Description | Type | Optional |
|---|---|---|---|
| c | Contol vertex (stored as "x y z") | string | no |
Example
|
<NurbsCurve name="cameraPathShape" shapeId="1" degree="3" form="periodic">
<cv c="-160.4501888 7.53270339 82.4246445"/> <cv c="-72.07301868 2.962592169 111.1353409"/> <cv c="-14.67712792 3.470019386 126.2614971"/> <cv c="15.12607817 8.251274441 47.11430616"/> <cv c="30.05244121 12.88635426 26.06245926"/> <cv c="34.16515005 11.5454009 -1.548135874"/> <cv c="-86.27624814 11.50889609 -65.1259517"/> <cv c="-88.5073931 11.67542369 -86.80101523"/> <cv c="-174.5511508 8.575730303 -67.03592031"/> <cv c="-189.2139061 8.539901228 -43.65303468"/> <cv c="-199.9735277 8.470538543 63.31385212"/> <cv c="-191.3309447 8.438562697 75.55727406"/> <cv c="-176.8774992 8.259085125 81.87273025"/> </NurbsCurve> |
Dynamics
Dynamic objects are defined in this part and referenced from the Scene graph section.
|
<Dynamics>
<ParticleSystem name="emitter1" dynamicId="1" type="sprite" rate="0.004" lifespanInfinite="false" speed="0.01" speedRandom="0" tangentSpeed="0" normalSpeed="1" lifespan="10000" maxCount="1000" spriteScaleX="50" spriteScaleY="50" depthSort="false" emitterShape="pCubeShape1" shader="lambert2"> <Gravity force="0 -3 0"/> <Air velocity="2 0 0"/> </ParticleSystem> </Dynamics> |
Scenegraph
The Scene graph hierarchy (transformations, bones, joints, shapes, lights, cameras and particle systems) are stored in this section. Shapes, materials and particle systems are stored as references.
|
<Scene>
<TransformGroup name="myGroup1" translation="1.25 0 -9" nodeId="47"> <Shape name="mySphere" materialIds="1" shapeId="1" nodeId="48"/> <TransformGroup name="myGroup2" rotation="90 0 270" nodeId="49"> <Shape name="mySphere2" materialIds="1" shapeId="2" nodeId="50"/> </TransformGroup> ... </TransformGroup> ... </Scene> |
Scene graph node types
TransformGroup
| Attribute | Description | Type | Optional |
|---|---|---|---|
| name | Name of TransformGroup | string | no |
| translation | Translation | complex | yes |
| rotation | Rotation, euler order ZY'X'' | complex | yes |
| scale | Scale | complex | yes |
| visibility | Visibility | boolean | yes |
| kinematic | Kinematic object | boolean | yes |
| dynamic | Dynamic object | boolean | yes |
| static | Static object | boolean | yes |
| compound | Compound parent | boolean | yes |
| compoundChild | Compound child | boolean | yes |
| collision | Enable collision | boolean | yes |
| ccd | Continuous collision detection | boolean | yes |
| trigger | Trigger | boolean | yes |
| cloth | Cloth | boolean | yes |
| restitution | Restitution | float | yes |
| staticFriction | Static friction | float | yes |
| dynamicFriction | Dynamic friction | float | yes |
| skinWidth | Skin width | float | yes |
| density | Density | float | yes |
| collisionMask | Collision mask | integer | yes |
| joint | Joint | boolean | yes |
| breakableJoint | Breakable joint | boolean | yes |
| jointBreakForce | Joint break force | double | yes |
| jointBreakTorque | Joint break torque | double | yes |
| projection | Enable joint projection | boolean | yes |
| xAxisDrive | Enable x axis drive | boolean | yes |
| yAxisDrive | Enable y axis drive | boolean | yes |
| zAxisDrive | Enable z axis drive | boolean | yes |
| drivePos | Enable drive position | boolean | yes |
| projDistance | Projection distance | double | yes |
| driveForceLimit | Drive force limit | double | yes |
| driveSpring | Drive spring | double | yes |
| driveSpring | Drive spring | double | yes |
| solverIterationCount | Solver iteration count | integer | yes |
| rotMinX | Rotation minimum x | double | yes |
| rotMinY | Rotation minimum y | double | yes |
| rotMinZ | Rotation minimum z | double | yes |
| rotMaxX | Rotation maximum x | double | yes |
| rotMaxY | Rotation maximum y | double | yes |
| rotMaxZ | Rotation maximum z | double | yes |
| transMinX | Translation minimum x | double | yes |
| transMinY | Translation minimum y | double | yes |
| transMinZ | Translation minimum z | double | yes |
| transMaxX | Translation maximum x | double | yes |
| transMaxY | Translation maximum y | double | yes |
| transMaxZ | Translation maximum z | double | yes |
| objectMask | Object mask | integer | yes |
| nodeId | Node reference id, used for Animation and UserAttributes section | integer | no |
| Element | Description | Type | Cardinality |
|---|---|---|---|
| TransformGroup | Transform group node | complex | 0..N |
| Shape | Shape node | complex | 0..N |
| Camera | Camera node | complex | 0..N |
| Light | Light node | complex | 0..N |
| Dynamic | Dynamic node (eg. particle system) | complex | 0..N |
Shape
| Attribute | Description | Type | Optional |
|---|---|---|---|
| shapeId | Shape reference id (reference to shapes section) | string | no |
| materialIds | List of used material ids (reference to materials section) | string | no |
| skinBindNodeIds | Skin bind node ids | string | yes |
| castsShadows | Casts shadows | boolean | yes |
| receiveShadows | Receive shadows | boolean | yes |
| clipDistance | Clip distance | double | yes |
| nonRenderable | Non renderable | boolean | yes |
Camera
| Attribute | Description | Type | Optional |
|---|---|---|---|
| fov | Field of view | double | no |
| nearClip | Near clipping plane | double | no |
| farClip | Far clipping plane | double | no |
Light
| Attribute | Description | Type | Optional |
|---|---|---|---|
| type | Light type | string | no |
| diffuseColor | Diffuse color | complex | yes |
| emitDiffuse | Emit diffuse | string | yes |
| specularColor | Specular color | complex | yes |
| emitSpecular | Emit specular | string | yes |
| castShadowMap | Cast shadow Map | boolean | yes |
| depthMapBias | Depth map bias | double | yes |
| depthMapResolution | Depth map resolution | integer | yes |
| shadowFarDistance | Shadow far fistance | double | yes |
| shadowTextureOffset | Shadow texture offset | double | yes |
| shadowExtrusionDistance | Shadow extrusion distance | double | yes |
| decayRate | Decay rate | integer | yes |
| coneAngle | coneAngle | double | yes |
| dropOff | dropOff | integer | yes |
| projTexture | Projective texture name | string | yes |
| range | Range | double | no |
5 Dynamic
| Attribute | Description | Type | Optional |
|---|---|---|---|
| dynamicId | Dynamic id (reference to dynamics section) | string | no |
Example
|
<Scene>
<Camera name="camera1" translation="0 2.00 6.47" rotation="-13.07 0 0" fov="54.43" nearClip="0.01" farClip="1000" nodeId="34"/> <Light name="pointLight1" translation="6.56 5.76 4.04" type="point" diffuseColor="1 1 1" range="10" nodeId="35"/> <TransformGroup name="group1" translation="1.35 0.96 0.81" nodeId="36"> <Shape name="pCubeShape1" rotation="-23.94 6.49 14.29" materialIds="1 2" shapeId="1" nodeId="37"/> </TransformGroup> </Scene> |
Animation
Motions are defined in this part. Clips are the basic building block and allow Non-Linear Animation by composing multiple clips.
|
<Animation>
<AnimationSets> <AnimationSet name="walk_crouched"> <Clip name="walk_crouched1Source" duration="1000"> <Keyframes nodeId="Hips"> <Keyframe time="0" translation="-0.467 13.504 39.842"/> <Keyframe time="333" translation="-0.559 12.915 39.370"/> <Keyframe time="1000" translation="-2.610 11.917 35.462"/> </Keyframes> <Keyframes node="Chest"> <Keyframe time="0" rotation="-1.013 -4.465 0.890"/> <Keyframe time="666" rotation="10.009 -6.667 4.381"/> <Keyframe time="1000" rotation="11.638 -3.906 4.115"/> </Keyframes> </Clip> </AnimationSet> </AnimationSets> </Animation> |
I3D Example: Quad
|
<?xml version="1.0" encoding="iso-8859-1"?>
<i3D name="myScene" version="1.6" xsi:noNamespaceSchemaLocation="http://i3d.giants.ch/schema/i3d-1.6.xsd"> <Files> <File fileId="1" filename="myTexture1.png"/> </Files> <Materials> <Material name="myShader_001" materialId="1"> <Texture fileId="1"/> </Material> </Materials> <Shapes> <IndexedTriangleSet name="myPolyObject" shapeId="1"> <Vertices count="3" uv0="true"> <v c="-0.50 -0.5 0.50" t0="0 0.1 0.3 0.3 0.2 0 0.1 1"/> <v c="0.49 -0.5 0.50" t0="1 0.9 0.3 0.3 0.6 0 0.1 1"/> <v c="-0.50 0.49 0.50" t0="0 0.1 0.9 0.3 0.2 0 0 1"/> </Vertices> <Triangles count="3"> <t vi="0 1 3"/> <t vi="2 3 5"/> <t vi="4 5 7"/> </Triangles> <Subsets count="1"> <Subset firstVertex="0" numVertices="3" firstIndex="0" numIndices="3"/> </Subsets> </IndexedTriangleSet> </Shapes> <Scene> <TransformGroup name="myGroup1" translation="1.25 0 -9"> <Shape name="myPolyObject" shapeId="1" materialIds="1"/> <TransformGroup name="myGroup2" translation="2.0 1.0 1.5" rotation="90 0 270"> <Shape name="polyObject" shapeId="1" materialIds="1"/> </TransformGroup> </TransformGroup> </Scene> </i3D> |
Test Scenes
Note: Test scenes are bundled with the editor.
![]() |
| Terrain and Foliage (terrain_test.i3d) |
![]() |
| Water Shader (terrain_test.i3d) |
![]() |
| Physics (physics_test.i3d) |
![]() |
| Custom Shader (custom_shader_test_scene.i3d) |
![]() |
| Character Animation (character_animation_test.i3d) |
![]() |
| Parallax Mapping (parallax_mapping_test.i3d) |
![]() |
| Level of Detail (level_of_detail_test.i3d) |
![]() |
| Particle System (particle_system_test.i3d) |
Latest Versions
Newsletter
15 March 2010
GIANTS SDK v4.1.3
GIANTS Script Debugger v4.1.5
27 May 2010
GIANTS Editor v4.1.6
Maya Exporter Plugins v4.1.6
3Ds MAX Exporter Plugins v4.1.6
Blender Exporter Plugins v4.1.6
Newsletter
Subscribe to our newsletter and keep yourself informed about updates and new releases of the GIANTS engine. Register here.








