Difference between revisions of "MT5"
Line 89: | Line 89: | ||
| 0x00 || 0x02 || ushort || Strip count | | 0x00 || 0x02 || ushort || Strip count | ||
|} | |} | ||
These strip groups have the following | These strip groups have the following vertex data based on the identifiers: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Identifier !! Description | ! Identifier !! Vertex Size !! Description | ||
|- | |- | ||
| 0x1000 || Vertex index | | 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====== | ======Strip====== |
Revision as of 15:34, 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.
(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 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 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 |