Difference between revisions of "MT5"
Line 66: | Line 66: | ||
These instructions are state machine like. Each instruction changes the state of how to render the strip.<br> | These instructions are state machine like. Each instruction changes the state of how to render the strip.<br> | ||
Each instruction identifier is 2 bytes long. | Each instruction identifier is 2 bytes long. | ||
=====(0x0E00, 0x0F00)===== | =====(0x0E00, 0x0F00)===== |
Revision as of 11:52, 21 December 2018
MT5 is an model container format for Shenmue I.
The model format is based on an node based hierarchy tree.
For an C# implementation based on this documentation look here.
Header
Position | Length | Type | Description |
---|---|---|---|
0x00 | 0x04 | string | Identifier (HRCM) |
0x04 | 0x04 | uint | TEXD offset |
0x08 | 0x04 | uint | First node offset |
MT5 Node
Position | Length | Type | Description |
---|---|---|---|
0x00 | 0x04 | uint | ID |
0x04 | 0x04 | uint | Mesh offset |
0x08 | 0x0C | short | Rotation (X, Y, Z) |
0x14 | 0x0C | float | Scale (X, Y, Z) |
0x20 | 0x0C | float | Position/Translate (X, Y, Z) |
0x2C | 0x04 | uint | Child offset |
0x30 | 0x04 | uint | Sibling offset |
0x34 | 0x04 | uint | Parent offset |
0x38 | 0x04 | string | Node name |
0x3C | 0x04 | ? | Reserved |
Mesh Data
Position | Length | Type | Description |
---|---|---|---|
0x00 | 0x04 | uint | Polytype? |
0x04 | 0x04 | uint | Vertices offset |
0x08 | 0x04 | uint | Vertex count |
0x0C | 0x04 | uint | Instructions offset |
0x10 | 0x0C | float | Mesh center (X, Y, Z) |
0x1C | 0x04 | float | Mesh radius |
Instructions
These instructions are state machine like. Each instruction changes the state of how to render the strip.
Each instruction identifier is 2 bytes long.
(0x0E00, 0x0F00)
Ignored. Skip 10 bytes.
(0x8000, 0xA000)
Ignored. Skip 2 bytes.
(0x0B00)
Unknown.
(0x0200, 0x0300)
Unknown.
Texture (0x0900)
Sets the texture to use for the next instructions.
Strip Group (0x1000 - 0x1400, 0x1800 - 0x1C00)
Position | Length | Type | Description |
---|---|---|---|
0x00 | 0x02 | ushort | Strip count |
These strip groups have the following additional data:
Identifier | Description |
---|---|
0x1000 | Vertex index |
0x1100 | Vertex index, UV |
0x1200 | Vertex index, UV, Color |
Everything above 0x1200 automatically has Vertex index, UV, Color.
Strip
Position | Length | Type | Description |
---|---|---|---|
0x00 | 0x02 | short | Strip vertex count (sometimes negativ, just abs() it) |
Often the vertex index can be negativ, this is an optimization and is used to point to the parents vertices.
Strip "Vertex"
Position | Length | Type | Description |
---|---|---|---|
0x00 | 0x02 | short | Vertex index |
0x02 | 0x04 | short | Texture Coordinate (UV) |
0x06 | 0x04 | byte | BGRA Color |
The UV coordinates are UVH (UV high-resolution) and need to be divided by 1024 to get normalized UV coordnates.
End (0x0080)
Defines the end of instructions.
Vertices
The vertices only hold the position and normal of an vertex.
Vertex
Position | Length | Type | Description |
---|---|---|---|
0x00 | 0x0C | float | Position (X, Y, Z) |
0x0C | 0x0C | float | Normals (X, Y, Z) |
TEXD
This sections holds textures for the model.
Position | Length | Type | Description |
---|---|---|---|
0x00 | 0x04 | string | Identifier |
0x04 | 0x04 | uint | Header size (or offset to first entry) |
0x08 | 0x04 | uint | Texture count |
TEXD Entry
Position | Length | Type | Description |
---|---|---|---|
0x00 | 0x04 | string | Identifier (TEXN, NAME) |
0x04 | 0x04 | uint | Entry size in bytes |
TEXN
This entry defines an actual PVRT texture.
Position | Length | Type | Description |
---|---|---|---|
0x00 | 0x04 | uint | ID |
0x04 | 0x04 | string | Name |
0x08 | 0x0? | PVRT | Texture |
NAME
This entry is used to define used textures outside of the MT5.
Position | Length | Type | Description |
---|---|---|---|
0x00 | 0x04 | uint | ID |
0x04 | 0x04 | string | Name |