Difference between revisions of "Materials (Metroid Prime 3)"
(→CLR) |
(→PASS) |
||
Line 164: | Line 164: | ||
| u32 | | u32 | ||
| 4 | | 4 | ||
− | + | | '''Pass Flags''' | |
| Only bottom 5 bits are valid | | Only bottom 5 bits are valid | ||
|- | |- | ||
Line 202: | Line 202: | ||
|- | |- | ||
| <code>TRAN</code> | | <code>TRAN</code> | ||
− | | Greyscale opacity map | + | | Greyscale opacity map |
|- | |- | ||
| <code>INCA</code> | | <code>INCA</code> | ||
Line 227: | Line 227: | ||
| <code>XRAY</code> | | <code>XRAY</code> | ||
| Sphere map for X-Ray models; similar to RFLD | | Sphere map for X-Ray models; similar to RFLD | ||
+ | |} | ||
+ | |||
+ | ===== Flags ===== | ||
+ | |||
+ | Known flag settings: | ||
+ | |||
+ | {| class="wikitable" | ||
+ | ! Bit | ||
+ | ! Hex | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0 | ||
+ | | 0x1 | ||
+ | | {{unknown|Unknown}} | ||
+ | |- | ||
+ | | 1 | ||
+ | | 0x2 | ||
+ | | {{unknown|Unknown}} | ||
+ | |- | ||
+ | | 2 | ||
+ | | 0x4 | ||
+ | | {{unknown|Unknown}} | ||
+ | |- | ||
+ | | 3 | ||
+ | | 0x8 | ||
+ | | {{unknown|Unknown}} | ||
+ | |- | ||
+ | | 4 | ||
+ | | 0x10 | ||
+ | | On <code>TRAN</code>, indicates that the texture map is inverted (ie. white is transparent, black is opaque). | ||
|} | |} | ||
Revision as of 15:48, 17 May 2015
The format for materials saw a dramatic overhaul in Metroid Prime 3. The format is seen in both the CMDL and MREA formats and is identical in both. This particular material format appears in Metroid Prime 3: Corruption and Donkey Kong Country Returns.
This file format needs more research Need to find TEV values for each subsection type |
Contents
Material Set Format
Materials come as part of a set; although most files will only have one set, some CMDLs will have more, as indicated by a count value in the header. The set format is merely a 32-bit count value followed by that number of materials.
Material Format
The material format starts with a 28-byte header, then after that is broken up into a bunch of subsections.
Header
Offset | Type | Size | Description | Notes |
---|---|---|---|---|
0x0 | u32 | 4 | Material size | Does not include size value |
0x4 | u32 | 4 | Material flags | Only bottom 17 bits are valid |
0x8 | u32 | 4 | Group index | Denotes groups of materials that share the same settings, but different textures. |
0xC | u32 | 4 | Unknown | Value is possibly unused; the material loading code seems to skip it |
0x10 | u32 | 4 | Vertex attribute flags | Functionality is identical to Metroid Prime 2 |
0x14 | u32 | 4 | Unknown | Value is possibly unused; the material loading code seems to skip it |
0x18 | u32 | 4 | Unknown | |
0x1C | u32 | 4 | Unknown | |
0x20 | End of header |
Flags
Known flag values:
Bit | Hex | Description |
---|---|---|
0 | 0x1 | Unknown |
1 | 0x2 | Unknown |
2 | 0x4 | Unknown |
3 | 0x8 | Unknown |
4 | 0x10 | Unknown |
5 | 0x20 | Enable additive blending (probably - needs verification) |
6 | 0x40 | Unknown |
7 | 0x80 | Unknown |
8 | 0x100 | Shadow occluder mesh; meshes using this material are not rendered, but can be used to cast dynamic shadows on actors |
9 | 0x200 | Unknown |
10 | 0x400 | Unknown |
11 | 0x800 | Unknown |
Subsections
The rest of the material data is made up of a number of subsections. These subsections generally set different texture slots, as well as other parameters like Konst colors and material opacity. There's no count for the number of subsections; it needs to be read in using a while loop. The "END " section denotes the end of the material.
The order of the subsections doesn't matter. One material can only have one of each type of subsection; if there's any additional ones, they will overwrite the previous ones.
There are three subsection types (aside from END): PASS, CLR, and INT. Each of these types has a number of subtypes.
PASS
Offset | Type | Size | Description | Notes |
---|---|---|---|---|
0x0 | u32 | 4 | PASS subsection size | |
0x4 | char[4] | 4 | Section subtype fourCC | See below for possible subtypes |
0x8 | u32 | 4 | Pass Flags | Only bottom 5 bits are valid |
0xC | TXTR | 8 | Texture ID | |
0x14 | u32 | 4 | UV Source | Only bottom 4 bits are valid |
0x18 | u32 | 4 | UV animations size | Needs verification; only bottom 8 bits are valid |
List of possible PASS subtypes:
Type | Description |
---|---|
DIFF
|
Lightmap |
BLOL
|
Bloom lightmap |
CLR
|
Diffuse map |
TRAN
|
Greyscale opacity map |
INCA
|
Emissive map |
RFLV
|
Specular map |
RFLD
|
Reflection/sphere map |
LRLD
|
See RFLD |
LURD
|
See RFLV |
BLOD
|
See BLOL |
BLOI
|
See BLOL |
XRAY
|
Sphere map for X-Ray models; similar to RFLD |
Flags
Known flag settings:
Bit | Hex | Description |
---|---|---|
0 | 0x1 | Unknown |
1 | 0x2 | Unknown |
2 | 0x4 | Unknown |
3 | 0x8 | Unknown |
4 | 0x10 | On TRAN , indicates that the texture map is inverted (ie. white is transparent, black is opaque).
|
CLR
Offset | Type | Size | Description | Notes |
---|---|---|---|---|
0x0 | char[4] | 4 | Section subtype fourCC | See below for possible subtypes |
0x4 | u32 | 4 | Color value | 32-bit RGBA value |
List of possible CLR subtypes:
Type | Description |
---|---|
CLR
|
Color additively applied to the material |
DIFB
|
Lightmap multiplier color |
INT
Offset | Type | Size | Description | Notes |
---|---|---|---|---|
0x0 | char[4] | 4 | Section subtype fourCC | See below for possible subtypes |
0x4 | u32 | 4 | Value | Actually an 8-bit value; the top 24 bits are ignored |
List of possible INT subtypes:
Type | Description |
---|---|
OPAC
|
Sets the opacity of the entire material |
BLOD
|
|
BLOI
|
|
BNIF
|
|
XRBR
|