Line 19: |
Line 19: |
| |- | | |- |
| | 0x6 | | | 0x6 |
− | | 0x4 | + | | 0x2 |
| | CGFX header size | | | CGFX header size |
| |- | | |- |
− | | 0xA | + | | 0x8 |
− | | 0x2 | + | | 0x4 |
− | | ? | + | | Revision |
| |- | | |- |
| | 0xC | | | 0xC |
Line 83: |
Line 83: |
| |- | | |- |
| | 3 | | | 3 |
− | | Unknown | + | | Materials |
| |- | | |- |
| | 4 | | | 4 |
− | | Unknown | + | | Shaders |
| |- | | |- |
| | 5 | | | 5 |
Line 107: |
Line 107: |
| |- | | |- |
| | 11 | | | 11 |
− | | Unknown animations | + | | Visibility animations |
| |- | | |- |
| | 12 | | | 12 |
− | | Unknown | + | | Camera animations |
| |- | | |- |
| | 13 | | | 13 |
− | | Unknown | + | | Light animations |
| |- | | |- |
| | 14 | | | 14 |
− | | Unknown | + | | Emitters |
| |- | | |- |
| | 15 | | | 15 |
Line 146: |
Line 146: |
| |- | | |- |
| | 0xC | | | 0xC |
| + | | 0x4 |
| + | | ? |
| + | |- |
| | 0x10 | | | 0x10 |
| + | | 0x2 |
| + | | Unknown. Seems to be shifted left by 4 bits in the source. |
| + | |- |
| + | | 0x12 |
| + | | 0xA |
| | ? | | | ? |
| |} | | |} |
Line 175: |
Line 183: |
| | 0xC | | | 0xC |
| | 0x4 | | | 0x4 |
− | | Value (often offsets) | + | | Offset (self-relative) to object |
| |} | | |} |
| | | |
Line 317: |
Line 325: |
| | 0x20 | | | 0x20 |
| | 0xC | | | 0xC |
− | | ? | + | | Mesh position offset (X/Y/Z floats) |
| |- | | |- |
| | 0x2C | | | 0x2C |
Line 427: |
Line 435: |
| |} | | |} |
| | | |
| + | Vertex groups come in a number of different formats. Typically the first vertex group entry is of format 0x40000002 and contains the actual vertex array. |
| | | |
− | Vertex group objects come in one of several formats, specified by the flags field.
| + | Vertex group format 0x40000002: |
− | | |
− | Vertex group format 0x40000001: (?) | |
| | | |
| {| class="wikitable" | | {| class="wikitable" |
Line 440: |
Line 447: |
| | 0x0 | | | 0x0 |
| | 0x4 | | | 0x4 |
− | | Flags (0x40000001) | + | | Flags (0x40000002) |
| |- | | |- |
| | 0x4 | | | 0x4 |
| | 0x4 | | | 0x4 |
− | | Type ? | + | | ? |
| |- | | |- |
| | 0x8 | | | 0x8 |
Line 475: |
Line 482: |
| |- | | |- |
| | 0x24 | | | 0x24 |
− | | 0x1 | + | | 0x4 |
− | | ? | + | | Vertex stride/size in bytes (see below) |
− | |-
| |
− | | 0x25
| |
− | | 0x1
| |
− | | ?
| |
− | |-
| |
− | | 0x26
| |
− | | 0x1
| |
− | | ?
| |
− | |-
| |
− | | 0x27
| |
− | | 0x1
| |
− | | ?
| |
| |- | | |- |
| | 0x28 | | | 0x28 |
| | 0x4 | | | 0x4 |
− | | ? | + | | Unknown3 count |
| |- | | |- |
| | 0x2C | | | 0x2C |
| | 0x4 | | | 0x4 |
− | | ? (float) | + | | Offset (self-relative) to component declaration offset array |
− | |-
| |
− | | 0x30
| |
− | | 0x4
| |
− | | ?
| |
| |} | | |} |
| | | |
− | Vertex group format 0x40000002: | + | Each mesh's primary vertex group contains an array of vertex component declaration objects, defining the order and parameters for each of a vertex's components. |
| + | |
| + | Vertex component declaration: |
| | | |
| {| class="wikitable" | | {| class="wikitable" |
Line 513: |
Line 506: |
| | 0x0 | | | 0x0 |
| | 0x4 | | | 0x4 |
− | | Flags (0x40000002) | + | | Flags (0x40000001) |
| |- | | |- |
| | 0x4 | | | 0x4 |
| | 0x4 | | | 0x4 |
− | | ? | + | | Vertex component type (see below) |
| |- | | |- |
| | 0x8 | | | 0x8 |
Line 533: |
Line 526: |
| | 0x14 | | | 0x14 |
| | 0x4 | | | 0x4 |
− | | Vertex array size (in bytes) | + | | ? |
| |- | | |- |
| | 0x18 | | | 0x18 |
| | 0x4 | | | 0x4 |
− | | Offset (self-relative) to vertex array | + | | ? |
| |- | | |- |
| | 0x1C | | | 0x1C |
Line 548: |
Line 541: |
| |- | | |- |
| | 0x24 | | | 0x24 |
− | | 0x4 | + | | 0x1 |
− | | Vertex format size (see below) | + | | Component data type (see below) |
| + | |- |
| + | | 0x25 |
| + | | 0x1 |
| + | | ? |
| + | |- |
| + | | 0x26 |
| + | | 0x1 |
| + | | ? |
| + | |- |
| + | | 0x27 |
| + | | 0x1 |
| + | | ? |
| |- | | |- |
| | 0x28 | | | 0x28 |
| | 0x4 | | | 0x4 |
− | | Unknown3 count | + | | Number of values in this component (e.g. XYZ->3, UV->2) |
| |- | | |- |
| | 0x2C | | | 0x2C |
| | 0x4 | | | 0x4 |
− | | Offset (self-relative) to 0x40000001 offset array | + | | Multiplier for this component's values (float) |
| + | |- |
| + | | 0x30 |
| + | | 0x4 |
| + | | Position of this component within vertex stride |
| |} | | |} |
| | | |
− | Vertex formats: | + | Vertex formats with bone data support multiple bone assignment. In this case, the sum of all bone weights is 0x64. |
| + | |
| + | Vertex component types: |
| | | |
| {| class="wikitable" | | {| class="wikitable" |
| |- | | |- |
− | ! Vertex format size | + | ! Value |
− | ! Description
| + | ! Type |
| + | |- |
| + | | 0x00 |
| + | | Position |
| + | |- |
| + | | 0x01 |
| + | | Normal |
| + | |- |
| + | | 0x02 |
| + | | ? (unobserved) |
| + | |- |
| + | | 0x03 |
| + | | Color |
| + | |- |
| + | | 0x04 |
| + | | UV0 |
| + | |- |
| + | | 0x05 |
| + | | UV1 |
| + | |- |
| + | | 0x06 |
| + | | ? (unobserved, possibly UV2) |
| + | |- |
| + | | 0x07 |
| + | | Weight |
| + | |- |
| + | | 0x08 |
| + | | Index |
| + | |} |
| + | |
| + | Vertex component data types: |
| + | |
| + | {| class="wikitable" |
| |- | | |- |
− | | 0xA
| + | ! Value |
− | | ?
| + | ! Type |
| |- | | |- |
− | | 0xC | + | | 0x00 |
− | | X (float), Y (float), Z (float) | + | | sbyte |
| |- | | |- |
− | | 0x10 | + | | 0x01 |
− | | ? | + | | byte |
| |- | | |- |
− | | 0x14 | + | | 0x02 |
− | | X (float), Y (float), Z (float), U (float), V (float) | + | | short |
| |- | | |- |
− | | 0x18 | + | | 0x03 |
− | | X (float), Y (float), Z (float), Unk (u32?), U (float), V (float) | + | | ? (unobserved, possibly ushort) |
| |- | | |- |
− | | 0x20 | + | | 0x04 |
− | | X (float), Y (float), Z (float), NX (float), NY (float), NZ (float), U (float), V (float) | + | | ? (unobserved, possibly int) |
| |- | | |- |
− | | 0x28v1 | + | | 0x05 |
− | | X (float), Y (float), Z (float), NX (float), NY (float), NZ (float), U (float), V (float), (local) Bone IDs (4*u8), Bone weights (4*u8) | + | | ? (unobserved, possibly uint) |
| |- | | |- |
− | | 0x28v2 | + | | 0x06 |
− | | X (float), Y (float), Z (float), NX (float), NY (float), NZ (float), U (float), V (float), Unk1 (u32), (local) Bone IDs (2*u8), Bone weights (2*u8) | + | | float |
| |} | | |} |
| | | |
− | Vertex format 0x28 (and possibly others) supports multiple bone assignment. In this case, the sum of all bone weights is 0x64. | + | Vertex components are stored as one of the above data types, and the vertex component declaration contains a multiplier that adapts the values to the float version which the game will use. |
| + | For example, color RGBA values are stored as bytes, and the multiplier converts them from 0-255 to 0-1.0, and position components using short values are normalized via the multiplier to take advantage of the entire short value range. |
| | | |
| == TXOB == | | == TXOB == |
Line 611: |
Line 655: |
| | 0x4 | | | 0x4 |
| | Magic "TXOB" | | | Magic "TXOB" |
| + | |- |
| + | | 0x8 |
| + | | 0x8 |
| + | | ? |
| |- | | |- |
| | 0xC | | | 0xC |
Line 793: |
Line 841: |
| | | |
| CANMs are used to store skeletal animation data. | | CANMs are used to store skeletal animation data. |
| + | |
| + | == Tools == |
| + | * Every File Explorer |
| + | * Ohana3DS and its forks |
| + | * SPICA |
| | | |
| == Links == | | == Links == |
− | * Another CGFX Format Description: [http://florian.nouwt.com/wiki/index.php/CGFX_(File_Format) http://florian.nouwt.com/wiki/index.php/CGFX_(File_Format)] | + | * Another CGFX Format Description (Archived Page): [https://web.archive.org/web/20150511211029/http://florian.nouwt.com/wiki/index.php/CGFX_(File_Format) http://florian.nouwt.com/wiki/index.php/CGFX_(File_Format)] |
| + | |
| + | [[Category:File formats]] |