Changes

Jump to navigation Jump to search
2,720 bytes added ,  10:34, 5 June 2017
no edit summary
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 175: Line 175:  
| 0xC
 
| 0xC
 
| 0x4
 
| 0x4
| Value (often offsets)
+
| Offset (self-relative) to object
 
|}
 
|}
   Line 292: Line 292:  
|-
 
|-
 
| 0x0
 
| 0x0
| 0x3
+
| 0x4
| Flags ?
+
| Flags (bit 4: model; bit 1: skeleton)
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Magic "SOBJ"
 +
|-
 +
| 0x8
 +
| 0x4
 +
| ?
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Unknown symbol offset (self-relative)
 +
|-
 +
| 0x10
 +
| 0xC
 +
| ?
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| Offset (self-relative) to Unknown1 (appears to hold array of floats) ?
 +
|-
 +
| 0x20
 +
| 0xC
 +
| Mesh position offset (X/Y/Z floats)
 +
|-
 +
| 0x2C
 +
| 0x4
 +
| Face groups count
 +
|-
 +
| 0x30
 +
| 0x4
 +
| Offset (self-relative) to face groups offset array
 +
|-
 +
| 0x34
 +
| 0x4
 +
| ?
 +
|-
 +
| 0x38
 +
| 0x4
 +
| Vertex groups count
 +
|-
 +
| 0x3C
 +
| 0x4
 +
| Offset (self-relative) to vertex groups offset array
 +
|-
 +
| 0x40
 +
| 0x4
 +
| Unknown offset (self-relative) ?
 +
|}
 +
 
 +
Face groups:
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Offset
 +
! Length
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| Bone groups count
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Offset (self-relative) to UInt32 bone group IDs array
 +
|-
 +
| 0x8
 +
| 0x4
 +
| ?
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Unknown2 count
 +
|-
 +
| 0x10
 +
| 0x4
 +
| Offset (self-relative) to Unknown2 offset array
 +
|}
 +
 
 +
Unknown2:
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Offset
 +
! Length
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| Face group descriptor count
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Offset (self-relative) to face array descriptors offset array
 +
|-
 +
| 0x8
 +
| 0x4
 +
| Unknown3 count
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Offset (self-relative) to UInt32 Unknown3 array
 +
|-
 +
| 0x10
 +
| 0x8
 +
| ?
 +
|}
 +
 
 +
Face array descriptor:
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Offset
 +
! Length
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| Flags (bit 1: vertex index format: 0=byte, 1=short)
 +
|-
 +
| 0x4
 +
| 0x4
 +
| ?
 +
|-
 +
| 0x8
 +
| 0x4
 +
| Vertex index array size (in bytes)
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Offset (self-relative) to vertex index array
 +
|}
 +
 
 +
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 format 0x40000002:
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Offset
 +
! Length
 +
! Description
 
|-
 
|-
| 0x3
+
| 0x0
| 0x1
+
| 0x4
| SOBJ type ? (0x10 = model, 0x02 = skeleton)
+
| Flags (0x40000002)
 
|-
 
|-
 
| 0x4
 
| 0x4
 
| 0x4
 
| 0x4
| Magic "SOBJ"
+
| ?
 
|-
 
|-
| 0x44
+
| 0x8
 
| 0x4
 
| 0x4
| Y = Offset (self-relative) to bone correspondance array
+
| ?
 
|-
 
|-
| 0x48
+
| 0xC
 
| 0x4
 
| 0x4
| X = Offset (relative to SOBJ magic) to SOBJ data structure (wrong ?)
+
| ?
 
|-
 
|-
| 0x44+Y+0x00
+
| 0x10
 
| 0x4
 
| 0x4
| N = Number of bone IDs in bone correspondance array
+
| ?
 
|-
 
|-
| 0x44+Y+0x14
+
| 0x14
| 0x4*N
+
| 0x4
| Bone correspondance array
+
| Vertex array size (in bytes)
 
|-
 
|-
| X+0x18
+
| 0x18
| 0x1
+
| 0x4
| Face data format (?) : 0x1 = u8, 0x3 = u16
+
| Offset (self-relative) to vertex array
 
|-
 
|-
| X+0x20
+
| 0x1C
 
| 0x4
 
| 0x4
| Face data section size (in bytes)
+
| ?
 
|-
 
|-
| X+0x24
+
| 0x20
 
| 0x4
 
| 0x4
| Face data section offset (self-relative)
+
| ?
 
|-
 
|-
| X+0x58
+
| 0x24
 
| 0x4
 
| 0x4
| Vertex data section size (in bytes)
+
| Vertex stride/size in bytes (see below)
 
|-
 
|-
| X+0x5C
+
| 0x28
 
| 0x4
 
| 0x4
| Vertex data section offset (self-relative)
+
| Unknown3 count
 
|-
 
|-
| X+0x68
+
| 0x2C
| 0x1
+
| 0x4
| Vertex data format size (in bytes)
+
| Offset (self-relative) to component declaration offset array
 
|}
 
|}
 +
 +
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"
 
|-
 
|-
! Vertex format size
+
! Offset
 +
! Length
 
! Description
 
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| Flags (0x40000001)
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Vertex component type (see below)
 +
|-
 +
| 0x8
 +
| 0x4
 +
| ?
 
|-
 
|-
 
| 0xC
 
| 0xC
| X (float), Y (float), Z (float)
+
| 0x4
 +
| ?
 +
|-
 +
| 0x10
 +
| 0x4
 +
| ?
 
|-
 
|-
 
| 0x14
 
| 0x14
| X (float), Y (float), Z (float), U (float), V (float)
+
| 0x4
 +
| ?
 
|-
 
|-
 
| 0x18
 
| 0x18
| X (float), Y (float), Z (float), Unk (u32?), U (float), V (float)
+
| 0x4
 +
| ?
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| ?
 
|-
 
|-
 
| 0x20
 
| 0x20
| X (float), Y (float), Z (float), NX (float), NY (float), NZ (float), U (float), V (float)
+
| 0x4
 +
| ?
 +
|-
 +
| 0x24
 +
| 0x1
 +
| Component data type (see below)
 +
|-
 +
| 0x25
 +
| 0x1
 +
| ?
 +
|-
 +
| 0x26
 +
| 0x1
 +
| ?
 
|-
 
|-
| 0x28v1
+
| 0x27
| 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)
+
| 0x1
 +
| ?
 
|-
 
|-
| 0x28v2
+
| 0x28
| 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)
+
| 0x4
 +
| Number of values in this component (e.g. XYZ->3, UV->2)
 +
|-
 +
| 0x2C
 +
| 0x4
 +
| Multiplier for this component's values (float)
 +
|-
 +
| 0x30
 +
| 0x4
 +
| Position of this component within vertex stride
 
|}
 
|}
   −
Vertex format 0x28 (and possibly others) supports multiple bone assignment. In this case, the sum of all bone weights is 0x64.
+
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"
 +
|-
 +
! Value
 +
! 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"
 +
|-
 +
! Value
 +
! Type
 +
|-
 +
| 0x00
 +
| sbyte
 +
|-
 +
| 0x01
 +
| byte
 +
|-
 +
| 0x02
 +
| short
 +
|-
 +
| 0x03
 +
| ? (unobserved, possibly ushort)
 +
|-
 +
| 0x04
 +
| ? (unobserved, possibly int)
 +
|-
 +
| 0x05
 +
| ? (unobserved, possibly uint)
 +
|-
 +
| 0x06
 +
| float
 +
|}
 +
 
 +
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 387: Line 647:  
| 0x4
 
| 0x4
 
| Magic "TXOB"
 
| Magic "TXOB"
 +
|-
 +
| 0x8
 +
| 0x8
 +
| ?
 
|-
 
|-
 
| 0xC
 
| 0xC
Line 530: Line 794:  
| 0x4
 
| 0x4
 
| Offset (self relative) to name symbol
 
| Offset (self relative) to name symbol
 +
|-
 +
| 0x4
 +
| 0x4
 +
| ?
 
|-
 
|-
 
| 0x8
 
| 0x8
Line 555: Line 823:  
| Transformation matrix (4x3)
 
| Transformation matrix (4x3)
 
|-
 
|-
| 0x70
+
| 0x74
 
| 0x30
 
| 0x30
 
| Identity matrix ? (4x3)
 
| Identity matrix ? (4x3)
Line 565: Line 833:     
CANMs are used to store skeletal animation data.
 
CANMs are used to store skeletal animation data.
 +
 +
== Tools ==
 +
* Every File Explorer
 +
* Ohana3DS and its forks
    
== 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]]
166

edits

Navigation menu