CGFX: Difference between revisions

m Remove duplicate offset from DICT header
 
(13 intermediate revisions by 7 users not shown)
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 486: Line 494:
|}
|}


Each mesh's primary vertex group contains an array of vertex component declaration objects, defining the parameters for each of a vertex's components.
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:
Vertex component declaration:
Line 561: Line 569:
|}
|}


Observed sample vertex format sizes:
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 stride
! 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
| X (short), Y (short), Z (short), U (short), V (short)
! Type
|-
|-
| 0xC
| 0x00
| X (float), Y (float), Z (float)
| sbyte
|-
|-
| 0x10
| 0x01
| X (short), Y (short), Z (short), ... ?
| 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 formats with bone data support 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 612: Line 655:
| 0x4
| 0x4
| Magic "TXOB"
| Magic "TXOB"
|-
| 0x8
| 0x8
| ?
|-
|-
| 0xC
| 0xC
Line 794: 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]]