Difference between revisions of "MT5"
Line 117: | Line 117: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Type !! Size !! Description | ||
|- | |- | ||
| | | short || 0x02 || Vertex index | ||
|- | |- | ||
| | | short || 0x04 || (optional) Texture Coordinate (UV) | ||
|- | |- | ||
| | | byte || 0x04 || (optional) BGRA8888 Color | ||
|} | |} | ||
The vertex structure is based on the strip group identifier.<br> | |||
Often the vertex index can be negativ, this is an optimization and is used to point to the parents vertices.<br> | Often the vertex index can be negativ, this is an optimization and is used to point to the parents vertices.<br> | ||
The UV coordinates are UVH (UV high-resolution) and need to be divided by 1024 to get normalized UV coordnates. | The UV coordinates are UVH (UV high-resolution) and need to be divided by 1024 to get normalized UV coordnates. |
Revision as of 15:46, 26 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.
Unused (0x0E00, 0x0F00)
Ignored. Skip 10 bytes.
Unused (0x8000, 0xA000)
Ignored. Skip 2 bytes.
Unknown (0x0B00)
Unknown.
Strip Attributes (0x0200, 0x0300)
First byte holds UV flag for how they are interpreted. Holds information about the texture UV wrap modes.
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 vertex data based on the identifiers:
Identifier | Vertex Size | Description |
---|---|---|
0x1000, 0x1300, 0x1800, 0x1B00 | 2 Bytes (Index) | Vertex index |
0x1200, 0x1A00 | 2 Bytes (Index) + 4 Bytes (BGRA) | Vertex index, Color |
0x1100, 0x1900 | 2 Bytes (Index) + 4 Bytes (UV) | Vertex index, UV |
0x1400, 0x1C00 | 2 Bytes (Index) + 4 Bytes (UV) + 4 Bytes (BGRA) | Vertex index, UV, Color |
Strip
Position | Length | Type | Description |
---|---|---|---|
0x00 | 0x02 | short | Strip vertex count |
Sometimes the vertex count can be negativ, just abs() it.
The reason for this behaviour is unknown.
Strip "Vertex"
Type | Size | Description |
---|---|---|
short | 0x02 | Vertex index |
short | 0x04 | (optional) Texture Coordinate (UV) |
byte | 0x04 | (optional) BGRA8888 Color |
The vertex structure is based on the strip group identifier.
Often the vertex index can be negativ, this is an optimization and is used to point to the parents vertices.
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 |