Created
October 22, 2024 17:20
-
-
Save wernsey/9f18df8b928566a2a7296a29ab545072 to your computer and use it in GitHub Desktop.
3D Studio File Format Information (3dsinfo.txt) by Jochen Wilhelmy
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3D Studio File Format Information (3dsinfo.txt) | |
----------------------------------------------- | |
by | |
Jochen Wilhelmy | |
a.k.a. | |
digisnap | |
[email protected] | |
06.08.1997 | |
Introduction | |
============ | |
The information contained in this file is only collected by me. The credits | |
go to the following people (in alphabetical order): | |
Christophe Chabanois (Wolverine / Apocalypse) | |
Jim Pitts | |
Niklas Beisert (Pascal / 4711) | |
I think some more people did a good job in discovering unknown chunks, but | |
I don't know them all. The layout is based on 3dsffo10.txt from Christophe | |
Chabanois. I did not include any source code from this info, because it was | |
of no use to me. I used only the standard character set for compatibility | |
with other operating systems. | |
My own extensions and corrections are: | |
- Corrected the hierarchy levels of some chunks, especially the material | |
editor chunk and the spotlight sub-chunks are at the wrong place in | |
some docs | |
- Documented some spotlight and material sub-chunks | |
- Documented most tracks | |
- Made a consistent layout for all chunk descriptions | |
My reader is written in object oriented C++ and can read the chunks only if | |
they are in the right hierarchy position. It keeps the structure of the 3DS | |
file in memory and does not jam all vertices into one big array. It also | |
can write this structure back to a 3DS file. This gave me the possibility | |
to convert the data of my world-editor into a 3DS file to see where to | |
place the animated objects. If you want to convert a mesh object into a 3DS | |
file, you just need this chunk structure: | |
0x4D4D Main chunk | |
0x3D3D 3D editor chunk | |
0x4000 Object block (with name of your object) | |
0x4100 Triangular mesh | |
0x4110 Your vertices | |
0x4120 Your faces | |
The internal reader of 3DS sets all other things to their defaults. The | |
"auto edge" function is good if you dont't want to set the face flags. | |
Index | |
===== | |
1. Fast reference : The chunk tree | |
---------------------------------- | |
This will help you to find rapidly a chunk number and its description. | |
2. A chunk - What's that ? | |
-------------------------- | |
This will explain what a chunk is and help programmers understand the | |
general concept of the 3DS file format. | |
3. Data types | |
------------- | |
This short section will describe all data types used. | |
4. Chunks description | |
--------------------- | |
This is the most important part of the document. It describes the chunks. | |
1. Fast reference : The chunk tree | |
================================== | |
Color chunks | |
------------ | |
0x0010 : Rgb (float) | |
0x0011 : Rgb (byte) | |
0x0012 : Rgb (byte) gamma corrected | |
0x0013 : Rgb (float) gamma corrected | |
Percent chunks | |
-------------- | |
0x0030 : percent (int) | |
0x0031 : percent (float) | |
0x4D4D : Main chunk | |
------------------- | |
0x0002 : 3DS-Version | |
0x3D3D : 3D editor chunk | |
------------------------ | |
0x0100 : One unit | |
0x1100 : Background bitmap | |
0x1101 : Use background bitmap | |
0x1200 : Background color | |
0x1201 : Use background color | |
0x1300 : Gradient colors | |
0x1301 : Use gradient | |
0x1400 : Shadow map bias | |
0x1420 : Shadow map size | |
0x1450 : Shadow map sample range | |
0x1460 : Raytrace bias | |
0x1470 : Raytrace on | |
0x2100 : Ambient color | |
0x2200 : Fog | |
0x2210 : fog background | |
0x2201 : Use fog | |
0x2210 : Fog background | |
0x2300 : Distance queue | |
0x2310 : Dim background | |
0x2301 : Use distance queue | |
0x2302 : Layered fog options | |
0x2303 : Use layered fog | |
0x3D3E : Mesh version | |
0x4000 : Object block | |
--------------------- | |
0x4010 : Object hidden | |
0x4012 : Object doesn't cast | |
0x4013 : Matte object | |
0x4015 : External process on | |
0x4017 : Object doesn't receive shadows | |
0x4100 : Triangular mesh | |
0x4110 : Vertices list | |
0x4120 : Faces description | |
0x4130 : Faces material list | |
0x4140 : Mapping coordinates list | |
0x4150 : Smoothing group list | |
0x4160 : Local coordinate system | |
0x4165 : Object color in editor | |
0x4181 : External process name | |
0x4182 : External process parameters | |
0x4600 : Light | |
0x4610 : Spotlight | |
0x4627 : Spot raytrace | |
0x4630 : Light shadowed | |
0x4641 : Spot shadow map | |
0x4650 : Spot show cone | |
0x4651 : Spot is rectangular | |
0x4652 : Spot overshoot | |
0x4653 : Spot map | |
0x4656 : Spot roll | |
0x4658 : Spot ray trace bias | |
0x4620 : Light off | |
0x4625 : Attenuation on | |
0x4659 : Range start | |
0x465A : Range end | |
0x465B : Multiplier | |
0x4700 : Camera | |
0x7001 : Window settings | |
0x7011 : Window description #2 ... | |
0x7012 : Window description #1 ... | |
0x7020 : Mesh windows ... | |
0xAFFF : Material block | |
----------------------- | |
0xA000 : Material name | |
0xA010 : Ambient color | |
0xA020 : Diffuse color | |
0xA030 : Specular color | |
0xA040 : Shininess percent | |
0xA041 : Shininess strength percent | |
0xA050 : Transparency percent | |
0xA052 : Transparency falloff percent | |
0xA053 : Reflection blur percent | |
0xA081 : 2 sided | |
0xA083 : Add trans | |
0xA084 : Self illum | |
0xA085 : Wire frame on | |
0xA087 : Wire thickness | |
0xA088 : Face map | |
0xA08A : In tranc | |
0xA08C : Soften | |
0xA08E : Wire in units | |
0xA100 : Render type | |
0xA240 : Transparency falloff percent present | |
0xA250 : Reflection blur percent present | |
0xA252 : Bump map present (true percent) | |
0xA200 : Texture map 1 | |
0xA33A : Texture map 2 | |
0xA210 : Opacity map | |
0xA230 : Bump map | |
0xA33C : Shininess map | |
0xA204 : Specular map | |
0xA33D : Self illum. map | |
0xA220 : Reflection map | |
0xA33E : Mask for texture map 1 | |
0xA340 : Mask for texture map 2 | |
0xA342 : Mask for opacity map | |
0xA344 : Mask for bump map | |
0xA346 : Mask for shininess map | |
0xA348 : Mask for specular map | |
0xA34A : Mask for self illum. map | |
0xA34C : Mask for reflection map | |
Sub-chunks for all maps: | |
0xA300 : Mapping filename | |
0xA351 : Mapping parameters | |
0xA353 : Blur percent | |
0xA354 : V scale | |
0xA356 : U scale | |
0xA358 : U offset | |
0xA35A : V offset | |
0xA35C : Rotation angle | |
0xA360 : RGB Luma/Alpha tint 1 | |
0xA362 : RGB Luma/Alpha tint 2 | |
0xA364 : RGB tint R | |
0xA366 : RGB tint G | |
0xA368 : RGB tint B | |
0xB000 : Keyframer chunk | |
------------------------ | |
0xB001 : Ambient light information block | |
0xB002 : Mesh information block | |
0xB003 : Camera information block | |
0xB004 : Camera target information block | |
0xB005 : Omni light information block | |
0xB006 : Spot light target information block | |
0xB007 : Spot light information block | |
0xB008 : Frames (Start and End) | |
0xB010 : Object name, parameters and hierarchy father | |
0xB013 : Object pivot point | |
0xB015 : Object morph angle | |
0xB020 : Position track | |
0xB021 : Rotation track | |
0xB022 : Scale track | |
0xB023 : FOV track | |
0xB024 : Roll track | |
0xB025 : Color track | |
0xB026 : Morph track | |
0xB027 : Hotspot track | |
0xB028 : Falloff track | |
0xB029 : Hide track | |
0xB030 : Hierarchy position | |
2. A chunk - What's that ? | |
========================== | |
1 - What is a chunk ? | |
-------------------- | |
The 3D studio file format is compounded of several "chunks". What is a | |
"chunk" ? Well, that's quite simple. | |
Each chunk contains information : for example, it can contain colors, | |
images ... All tools which use the "chunk" method make file formats like | |
this: | |
1st chunk | |
2nd chunk | |
3rd chunk | |
... | |
nth chunk | |
2 - What is a "sub-chunk" ? | |
--------------------------- | |
But, there are several problems with this format : | |
- The data are all at same level (an image is as important as the name of | |
an object ...) | |
- A general concept can't group several things. | |
This is why there are "sub-chunks". | |
In fact, each chunk can contain several sub-chunks : | |
1st chunk | |
1st sub-chunk | |
2nd sub-chunk | |
2nd chunk | |
3rd chunk | |
1st sub-chunk | |
1st sub-sub-chunk | |
... | |
Nth chunk | |
3 - How to read chunks ? | |
------------------------ | |
This is the representation of a chunk : | |
Offset Length Name | |
0 2 Chunk-ID | |
2 4 Chunk-length = 6+n+m | |
6 n Data | |
6+n m Sub-chunks | |
So don't forget to read or skip the sub-chunks if the header and data size | |
is less than the chunk-length (6+n < chunk-length). | |
3. Data types | |
============= | |
Name Description | |
word 2 byte | |
dword 4 byte | |
float 4 byte floating point number | |
strz zero terminated string (C-string) | |
vector 3 floats (X,Y,Z) | |
BOOLEAN a BOOLEAN chunk acts as a flag and contains no data or sub-chunks | |
degree angle from 0 to 360 degree | |
rad angle from 0 to 2*pi | |
Note: If X and Y are the horizontal plane and Z is the height in your | |
world, you don't have to exchange Y and Z. Some other infos say that you | |
have to exchange Y and Z only in the keyframer chunk, but you have to treat | |
all vectors the same way. | |
4. Chunks description | |
===================== | |
----------------------------------------------------------------------------- | |
Color chunks | |
------------ | |
These chunks are used several times in the format, they are "global | |
chunks". | |
----------------------------------------------------------------------------- | |
Chunk # : 0x0010 | |
Name : Rgb color (float format) | |
Level : global chunk | |
Size : 12 | |
Format : | |
float red | |
float green | |
float blue | |
This chunk contains 3 floats : the red, green and blue components of a | |
color. The values range from 0.0 to 1.0 (full intensity). | |
----------------------------------------------------------------------------- | |
Chunk # : 0x0011 | |
Name : Rgb color (byte format) | |
Level : global chunk | |
Size : 3 | |
Format : | |
byte red | |
byte green | |
byte blue | |
This chunk contains 3 bytes : the red, green and blue components of a | |
color. The values range from 0 to 255 (full intensity). | |
----------------------------------------------------------------------------- | |
Chunk # : 0x0012 | |
Name : Rgb color gamma corrected (byte format) | |
Level : global chunk | |
Size : 3 | |
Format : | |
byte red | |
byte green | |
byte blue | |
This chunk contains 3 bytes : the red, green and blue components of a gamma | |
corrected color. The values range from 0 to 255 (full intensity). | |
----------------------------------------------------------------------------- | |
Chunk # : 0x0013 | |
Name : Rgb color gamma corrected (float format) | |
Level : global chunk | |
Size : 12 | |
Format : | |
float red | |
float green | |
float blue | |
This chunk contains 3 floats : the red, green and blue components of a | |
gamma corrected color. The values range from 0.0 to 1.0 (full intensity). | |
----------------------------------------------------------------------------- | |
Percent chunks | |
-------------- | |
----------------------------------------------------------------------------- | |
Chunk # : 0x0030 | |
Name : percent (int format) | |
Level : global chunk | |
Size : 2 | |
Format : | |
word percent | |
This chunk contains a word. The values range from 0 to 100. | |
----------------------------------------------------------------------------- | |
Chunk # : 0x0031 | |
Name : percent (float format) | |
Level : global chunk | |
Size : 4 | |
Format : | |
float percent | |
This chunk contains a float. The values range from 0 to 100. | |
============================================================================= | |
M A I N C H U N K | |
================== | |
============================================================================= | |
Chunk # : 0x4D4D | |
Name : Main chunk | |
Level : 0 | |
Size : 0 + sub-chunks | |
Father : none | |
Format : | |
----------------------------------------------------------------------------- | |
Chunk # : 0x0002 | |
Name : 3DS-Version | |
Level : 1 | |
Size : 4 | |
Father : 0x4D4D (Main chunk) | |
Format : | |
dword Version | |
This dword specifies the number of your 3DS-Version. | |
============================================================================= | |
3 D E D I T O R C H U N K | |
=========================== | |
============================================================================= | |
Chunk # : 0x3D3D | |
Name : 3D Editor chunk | |
Level : 1 | |
Size : 0 + sub-chunks | |
Father : 0x4D4D (Main chunk) | |
Format : | |
----------------------------------------------------------------------------- | |
Chunk # : 0x0100 | |
Name : One unit | |
Level : 2 | |
Size : 4 | |
Father : 3D Editor chunk | |
Format : | |
float One unit | |
----------------------------------------------------------------------------- | |
Chunk # : 0x1100 | |
Name : Background bitmap | |
Level : 2 | |
Size : varying | |
Father : 3D Editor chunk | |
Format : | |
strz Name | |
This chunk contains the name of the background bitmap choosen in 3DS even | |
if not used (i.e. you have selected a bitmap but you choose another thing). | |
----------------------------------------------------------------------------- | |
Chunk # : 0x1101 | |
Name : Use background bitmap | |
Level : 2 | |
Size : 0 | |
Father : 3D Editor chunk | |
Format : BOOLEAN | |
This chunk is a flag indicating that the background bitmap (see chunk | |
0x1100) is used. When this chunk is not present, the background bitmap is | |
not used. | |
----------------------------------------------------------------------------- | |
Chunk # : 0x1200 | |
Name : Background color | |
Level : 2 | |
Size : 0 + sub-chunks | |
Father : 3D Editor chunk | |
Format : | |
This chunk contains the color of the background even if not used. You must | |
read the color sub-chunks. Generaly, the format is : | |
- Background color chunk (0x1200) | |
- RGB float color chunk (0x0010) | |
- RGB float gamma corected color chunk (0x0013) | |
----------------------------------------------------------------------------- | |
Chunk # : 0x1201 | |
Name : Use background color | |
Level : 2 | |
Size : 0 | |
Father : 3D Editor chunk | |
Format : BOOLEAN | |
This chunk is a flag indicating that the background color (see chunk | |
0x1200) is used. When this chunk is not present, the background color is | |
not used. | |
----------------------------------------------------------------------------- | |
Chunk # : 0x1300 | |
Name : Background gradient colors | |
Level : 2 | |
Size : 4 + sub-chunks | |
Father : 3D Editor chunk | |
Format : | |
float Gradient position | |
color chunk RGBF1 | |
color chunk RGBFG1 | |
color chunk RGBF2 | |
color chunk RGBFG2 | |
color chunk RGBF3 | |
color chunk RGBFG3 | |
RGBF = RGB float color CHUNK | |
RGBFG = RGB gamma corrected float color CHUNK | |
So, if hexa you have something like that | |
00 13 76 00 00 00 21 CE 4A 3F 10 00 12 00 00 00 ..... | |
* 00 13 is the chunk ID (0x1300) and 76 00 00 00 is the length of this chunk. | |
* 21 CE 4A 3F are values which contain the "position" of the three gradient | |
colors. It's a float (from 0.0 to 1.0) indicating the position of the | |
middle color. | |
* 10 00 is the chunk ID (0x0010) of a rgb float color and 12 00 00 00 is the | |
length of this sub-chunk. | |
----------------------------------------------------------------------------- | |
Chunk # : 0x1301 | |
Name : Use background gradient colors | |
Level : 2 | |
Size : 0 | |
Father : 3D Editor chunk | |
Format : BOOLEAN | |
This chunk is a flag indicating that the background gradient colors (see | |
chunk 0x1300) are used. When this chunk is not present, the gradient | |
colors are not used. | |
----------------------------------------------------------------------------- | |
Chunk # : 0x1400 | |
Name : Shadow map bias | |
Level : 2 | |
Size : 4 | |
Father : 3D Editor chunk | |
Format : | |
float Shadow map bias | |
----------------------------------------------------------------------------- | |
Chunk # : 0x1420 | |
Name : Shadow map size | |
Level : 2 | |
Size : 2 | |
Father : 3D Editor chunk | |
Format : | |
word Shadow map size | |
----------------------------------------------------------------------------- | |
Chunk # : 0x1450 | |
Name : Shadow map sample range | |
Level : 2 | |
Size : 4 | |
Father : 3D Editor chunk | |
Format : | |
float Shadow map sample range | |
----------------------------------------------------------------------------- | |
Chunk # : 0x1460 | |
Name : Raytrace bias | |
Level : 2 | |
Size : 4 | |
Father : 3D Editor chunk | |
Format : | |
float Raytrace bias | |
----------------------------------------------------------------------------- | |
Chunk # : 0x1470 | |
Name : Use raytrace | |
Level : 2 | |
Size : 0 | |
Father : 3D Editor chunk | |
Format : BOOLEAN | |
This chunk is a flag indicating that raytrace (see chunk 0x1460) is used. | |
When this chunk is not present, the raytrace is not used. | |
----------------------------------------------------------------------------- | |
Chunk # : 0x2100 | |
Name : Ambient color | |
Level : 2 | |
Size : 0 + sub-chunk | |
Father : 3D Editor chunk | |
Format : | |
This chunk contains a color chunk (in general RGB float) | |
----------------------------------------------------------------------------- | |
0x4000 : OBJECT BLOCK | |
--------------------- | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4000 | |
Name : OBJECT BLOCK | |
Level : 2 | |
Size : varying + sub-chunks | |
Father : 0x3D3D (3D Editor chunk) | |
Format : | |
strz Object name | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4010 | |
Name : Object hidden | |
Level : 3 | |
Size : 0 | |
Father : 0x4000 (Object block) | |
Format : BOOLEAN | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4012 | |
Name : Object doesn't cast | |
Level : 3 | |
Size : 0 | |
Father : 0x4000 (Object block) | |
Format : BOOLEAN | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4013 | |
Name : Matte object | |
Level : 3 | |
Size : 0 | |
Father : 0x4000 (Object block) | |
Format : BOOLEAN | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4015 | |
Name : External process on | |
Level : 3 | |
Size : 0 | |
Father : 0x4000 (Object block) | |
Format : BOOLEAN | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4017 | |
Name : Object doesn't receive shadows | |
Level : 3 | |
Size : 0 | |
Father : 0x4000 (Object block) | |
Format : BOOLEAN | |
----------------------------------------------------------------------------- | |
0x4100 : Triangular mesh | |
------------------------ | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4100 | |
Name : Triangular Mesh | |
Level : 3 | |
Size : 0 + sub-chunks | |
Father : 0x4000 (Object block) | |
Format : | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4110 | |
Name : Vertices list | |
Level : 4 | |
Size : varying | |
Father : 0x4100 (Triangular mesh) | |
Format : | |
word Number of vertices | |
Then, for each vertex | |
vector Position | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4120 | |
Name : Faces description | |
Level : 4 | |
Size : varying + sub-chunks | |
Father : 0x4100 (Triangular mesh) | |
Format : | |
word Number of faces | |
Then, for each face: | |
word Vertex for corner A (number reference) | |
word Vertex for corner B (number reference) | |
word Vertex for corner C (number reference) | |
word Face flag | |
* bit 0 : CA visible | |
* bit 1 : BC visible | |
* bit 2 : AB visible | |
After datas, parse sub-chunks (0x4130, 0x4150). | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4130 | |
Name : Faces material list | |
Level : 5 | |
Size : varying | |
Father : 0x4120 (Faces description) | |
Format : | |
strz Material name | |
word Number of entries | |
Then, for each entry: | |
word Face assigned to this material (number reference) | |
I think the faces of one object can have different materials. Therefore, | |
this chunk can be present more than once. | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4140 | |
Name : Mapping coordinates list for each vertex | |
Level : 4 | |
Size : varying | |
Father : 0x4100 (Triangular mesh) | |
Format : | |
word Number of vertices | |
Then, for each vertex | |
float U coordinate | |
float V coordinate | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4150 | |
Name : Smoothing groups list | |
Level : 5 | |
Size : | |
Father : 0x4120 (Faces description) | |
Format : | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4160 | |
Name : Local coordinate system | |
Level : 4 | |
Size : 48 | |
Father : 0x4100 (Triangular mesh) | |
Format : | |
vector X1 | |
vector X2 | |
vector X3 | |
vector O | |
X1, X2 and X3 represent the axes, O the origin. | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4165 | |
Name : Object color in 3D Editor | |
Level : 4 | |
Size : 1 | |
Father : 0x4100 (Triangular mesh) | |
Format : | |
byte Color | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4600 | |
Name : Light | |
Level : 3 | |
Size : 12 + sub-chunks | |
Father : 0x4000 (Object block) | |
Format : | |
vector Position | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4610 | |
Name : Spotlight | |
Level : 4 | |
Size : 20 + sub-chunks | |
Father : 0x4600 (Light) | |
Format : | |
vector Target | |
float HotSpot | |
float FallOff | |
If this chunk is found, the light is a spot light and not an omni | |
directional light. | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4651 | |
Name : Spot is rectangular | |
Level : 5 | |
Size : 0 | |
Father : 0x4610 (Spotlight) | |
Format : BOOLEAN | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4653 | |
Name : Spot map | |
Level : 5 | |
Size : varying | |
Father : 0x4610 (Spotlight) | |
Format : | |
strz Filename | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4656 | |
Name : Spot roll | |
Level : 5 | |
Size : 4 | |
Father : 0x4610 (Spotlight) | |
Format : | |
float Roll (degree) | |
----------------------------------------------------------------------------- | |
Chunk # : 0x4700 | |
Name : CAMERA | |
Level : 3 | |
Size : 32 | |
Father : 0x4000 (Object block) | |
Format : | |
vector Position | |
vector Target | |
float Bank (degree) | |
float Lens | |
----------------------------------------------------------------------------- | |
Chunk # : 0x7001 | |
Name : Window settings | |
Level : 2 | |
Size : varying | |
Father : 0x3D3D (3D editor chunk) | |
Format : | |
----------------------------------------------------------------------------- | |
Chunk # : 0x3D3E | |
Name : Mesh version | |
Level : 2 | |
Size : 4 | |
Father : 0x3D3D (3D editor chunk) | |
Format : | |
dword Version | |
----------------------------------------------------------------------------- | |
0xAFFF : Material block | |
----------------------- | |
----------------------------------------------------------------------------- | |
Chunk # : 0xAFFF | |
Name : Material editor chunk | |
Level : 2 | |
Size : 0 + sub-chunks | |
Father : 0x3D3D (3D editor chunk) | |
Format : | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA000 | |
Name : Material name | |
Level : 3 | |
Size : varying | |
Father : 0xAFFF (Material block) | |
Format : | |
strz Material name | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA010 | |
Name : Material ambient color | |
Level : 3 | |
Size : 0 + sub-chunks | |
Father : 0xAFFF (Material block) | |
Format : | |
This chunk contains color chunks (in gen. rgb byte & rgb byte gamma) | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA020 | |
Name : Material diffuse color | |
Level : 3 | |
Size : 0 + sub-chunks | |
Father : 0xAFFF (Material block) | |
Format : | |
This chunk contains color chunks (in gen. rgb byte & rgb byte gamma) | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA030 | |
Name : Material specular color | |
Level : 3 | |
Size : 0 + sub-chunks | |
Father : 0xAFFF (Material block) | |
Format : | |
This chunk contains color chunks (in gen. rgb byte & rgb byte gamma) | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA040 | |
Name : Material shininess percent | |
Level : 3 | |
Size : 0 + sub-chunk | |
Father : 0xAFFF (Material block) | |
Format : | |
This chunk contains a percent chunk (in gen. int format) | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA041 | |
Name : Material shininess strength percent | |
Level : 3 | |
Size : 0 + sub-chunk | |
Father : 0xAFFF (Material block) | |
Format : | |
This chunk contains a percent chunk (in gen. int format) | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA200 - 0xA34C | |
Name : Map | |
Level : 3 | |
Size : 0 + sub-chunk | |
Father : 0xAFFF (Material block) | |
Format : | |
These chunks define the different maps (see chunk tree). They contain the | |
sub-chunks for all maps, such as mapping filename name or U/V scale. | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA300 | |
Name : Mapping filename | |
Level : 4 | |
Size : varying | |
Father : 0xA200 - 0xA34C (Map) | |
Format : | |
strz Filename | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA354 | |
Name : V scale | |
Level : 4 | |
Size : 4 | |
Father : 0xA200 - 0xA34C (Map) | |
Format : | |
float V scale | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA356 | |
Name : U scale | |
Level : 4 | |
Size : 4 | |
Father : 0xA200 - 0xA34C (Map) | |
Format : | |
float U scale | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA358 | |
Name : U offst | |
Level : 4 | |
Size : 4 | |
Father : 0xA200 - 0xA34C (Map) | |
Format : | |
float U offset | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA35A | |
Name : V offst | |
Level : 4 | |
Size : 4 | |
Father : 0xA200 - 0xA34C (Map) | |
Format : | |
float V offset | |
----------------------------------------------------------------------------- | |
Chunk # : 0xA35A | |
Name : Rotation angle | |
Level : 4 | |
Size : 4 | |
Father : 0xA200 - 0xA34C (Map) | |
Format : | |
float Rotation angle | |
----------------------------------------------------------------------------- | |
K E Y F R A M E R C H U N K | |
------------------------------ | |
----------------------------------------------------------------------------- | |
Chunk # : 0xB000 | |
Name : Keyframer | |
Level : 1 | |
Size : 0 + sub-chunks | |
Father : 0x4D4D (Main chunk) | |
Format : | |
The goal of the keyframer datas is to describe the move of | |
- The objects in the scene (like a cube ...) | |
- The lights (ambient, omni or spot) | |
- The cameras | |
----------------------------------------------------------------------------- | |
Chunk # : 0xB001..0xB007 | |
Name : Information block | |
Level : 2 | |
Size : 0 + sub-chunks | |
Father : 0xB000 (Keyframer chunk) | |
Format : | |
The information block is a chunk constituted of sub-chunks describing the | |
move of a particular object, or camera: | |
0xB001 : Ambient light information block | |
0xB002 : Mesh information block | |
0xB003 : Camera information block | |
0xB004 : Camera target information block | |
0xB005 : Omni light information block | |
0xB006 : Spot light target information block | |
0xB007 : Spot light information block | |
----------------------------------------------------------------------------- | |
Chunk # : 0xB008 | |
Name : Frames (Start and End) | |
Level : 2 | |
Size : 8 | |
Father : 0xB000 (Keyframer chunk) | |
Format : | |
dword Start | |
dword End | |
----------------------------------------------------------------------------- | |
Chunk # : 0xB010 | |
Name : Object name, parameters and hierarchy father | |
Level : 3 | |
Size : varying | |
Father : 0xB001..0xB007 Information block | |
Format : | |
strz Object Name | |
word Flag1 | |
* Bit 11 : Hidden | |
word Flag2 | |
* Bit 0 : Show path | |
* Bit 1 : Animate smoothing | |
* Bit 4 : Object motion blur | |
* Bit 6 : Morph materials | |
word Hierarchy father, link to the parent object (-1 for none) | |
----------------------------------------------------------------------------- | |
Chunk # : 0xB013 | |
Name : Object pivot point | |
Level : 3 | |
Size : 12 | |
Father : 0xB001..0xB007 Information block | |
Format : | |
vector Pivot point | |
----------------------------------------------------------------------------- | |
Chunk # : 0xB020..0xB029 | |
Name : Track | |
Level : 3 | |
Size : varying | |
Father : 0xB001..0xB007 Information block | |
Format : | |
word Flag | |
* Bits 0-1 : 0 = single | |
2 = repeat | |
3 = loop | |
* Bit 3 : lock X | |
* Bit 4 : lock Y | |
* Bit 5 : lock Z | |
* Bit 7 : unlink X | |
* Bit 8 : unlink Y | |
* Bit 9 : unlink Z | |
8 byte Unknown | |
dword Number of keys in this track | |
Then, for each key: | |
dword Key number (position in track) | |
word Acceleration data present (flag) Range: | |
* Bit 0 : Tension follows [-1.0, 1.0] | |
* Bit 1 : Continuity follows [-1.0, 1.0] | |
* Bit 2 : Bias follows [-1.0, 1.0] | |
* Bit 3 : Ease to follows [ 0.0, 1.0] | |
* Bit 4 : Ease from follows [ 0.0, 1.0] | |
n floats Acceleration data | |
? Track specific data | |
Track specific data is: | |
0xB020 : Position track : 1 vector Position | |
0xB021 : Rotation track : 1 float Angle (rad) | |
1 vector Axis | |
0xB022 : Scale track : 3 floats Size | |
0xB023 : FOV track : 1 float Angle (degree) | |
0xB024 : Roll track : 1 float Angle (degree) | |
0xB025 : Color track : | |
0xB026 : Morph track : 1 strz Object name | |
0xB027 : Hotspot track : 1 float Angle (degree) | |
0xB028 : Falloff track : 1 float Angle (degree) | |
0xB029 : Hide track : nothing | |
----------------------------------------------------------------------------- | |
Chunk # : 0xB030 | |
Name : Hierarchy position | |
Level : 3 | |
Size : 2 | |
Father : 0xB001..0xB007 Information block | |
Format : | |
word Hierarchy | |
This word contains a unique value for the object and is used for the | |
hierarchy tree links. | |
----------------------------------------------------------------------------- | |
<end> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment