fs25-i3d-structure
SKILL.md
FS25 I3D File Structure
Overview
I3D is GIANTS Engine's XML-based scene format. Understanding its structure is essential for all FS25 modding.
When to Use
- Reading or editing
.i3dfiles - Understanding the scene graph hierarchy
- Configuring materials, shapes, or collision masks
- Debugging node references and paths
I3D Coordinate System
I3D uses Y-up, right-handed coordinates:
- X = right
- Y = up
- Z = forward
Rotations are in degrees, stored as rx ry rz.
File Structure
<?xml version="1.0" encoding="iso-8859-1"?>
<i3D name="myObject" version="1.6">
<Asset /> <!-- metadata -->
<Files>
<File fileId="1" filename="textures/diffuse.dds" />
<File fileId="2" filename="textures/normal.dds" />
</Files>
<Materials>
<Material name="myMat" materialId="1">
<Texture fileId="1" />
<Normalmap fileId="2" />
</Material>
</Materials>
<Shapes>
<Shape shapeId="1" name="mesh" ... />
</Shapes>
<Scene>
<TransformGroup name="root" nodeId="1">
<Shape name="visual" nodeId="2" shapeId="1" materialIds="1" />
<TransformGroup name="collisions" nodeId="3" />
</TransformGroup>
</Scene>
</i3D>
Node Types
| Node Type | XML Tag | Purpose |
|---|---|---|
| TransformGroup | <TransformGroup> |
Empty transform (grouping, reference points) |
| Shape | <Shape> |
Visible mesh with geometry and material |
| Light | <Light> |
Light source |
| Camera | <Camera> |
Camera viewpoint |
| Dynamic | <Dynamic> |
Physics-enabled rigid body |
| TerrainTransformGroup | <TerrainTransformGroup> |
Terrain node |
Common Attributes
All nodes share:
<TransformGroup name="myNode" nodeId="42"
translation="1.0 2.0 3.0"
rotation="0 90 0"
scale="1 1 1"
visibility="true"
clipDistance="300"
objectMask="0xFFFF" />
Node Path Indexing
Nodes are referenced by path from root:
0>— first root child0>0|1— root child 0, then child index 0, then child index 10>2|0|3— root child 0 (skip 2), child 0, child 3
The > separates root index, | separates child indices.
Materials
<Material name="vehicleMat" materialId="1"
diffuseColor="1 1 1 1" specularColor="1 1 1"
customShaderId="2" customShaderVariation="colorMask">
<Texture fileId="1" /> <!-- diffuse/albedo -->
<Normalmap fileId="2" /> <!-- normal map -->
<Glossmap fileId="3" /> <!-- specular/gloss -->
<CustomParameter name="colorMat0" value="0.5 0.1 0.1 1" />
</Material>
Shapes
Shapes reference external .i3d.shapes binary files containing vertex/index data:
<Shape shapeId="1" name="bodyShape"
castsShadows="true" receiveShadows="true"
nonRenderable="false" decalLayer="0" />
User Attributes
Custom key-value data on nodes, read by Lua scripts:
<TransformGroup name="fillVolume" nodeId="50">
<UserAttribute>
<Attribute name="fillType" type="string" value="wheat" />
<Attribute name="capacity" type="float" value="50000" />
</UserAttribute>
</TransformGroup>
Collision Flags
Collision filtering uses bitmasks:
| Flag | Bit | Common Use |
|---|---|---|
| STATIC_WORLD | 0 | Static geometry |
| DYNAMIC_OBJECT | 1 | Moving objects |
| VEHICLE | 2 | Vehicles |
| PLAYER | 3 | Player character |
| TRIGGER | 4 | Trigger volumes |
| FILLABLE | 5 | Fillable volumes |
| TREE | 9 | Trees |
<Shape collisionMask="0x3" ... /> <!-- collides with STATIC_WORLD + DYNAMIC_OBJECT -->
XSD Schema
The I3D format has a full XML Schema definition (in the game's shared/xml/schema/ directory):
| Schema | Covers |
|---|---|
shared/xml/schema/i3d-1.6.xsd |
Complete I3D file structure — all node types, attributes, materials, shapes |
This is the authoritative reference for every valid I3D element and attribute. When unsure about attribute names, types, or valid values, read the XSD.
Quick Reference
| Task | Where to Look |
|---|---|
| Node types & attributes | I3D <Scene> section, or i3d-1.6.xsd |
| Material setup | I3D <Materials> section |
| Texture references | I3D <Files> section |
| Node path for XML config | Count child indices in scene hierarchy |
| Collision setup | collisionMask attribute + dataS/scripts/CollisionFlag.lua |
| Valid attributes/values | shared/xml/schema/i3d-1.6.xsd |
Weekly Installs
2
Repository
paint-a-farm/fs25-skillsGitHub Stars
10
First Seen
Feb 27, 2026
Security Audits
Installed on
opencode2
antigravity2
github-copilot2
codex2
windsurf2
kimi-cli2