Changes

948 bytes added ,  09:42, 31 July 2018
m
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
 +
| 0x2
 +
| Unknown. Seems to be shifted left by 4 bits in the source.
 +
|-
 
| 0x10
 
| 0x10
 +
| 0x2
 +
| ?
 +
|-
 +
| 0x12
 +
| 0xA
 
| ?
 
| ?
 
|}
 
|}
Line 175: Line 187:  
| 0xC
 
| 0xC
 
| 0x4
 
| 0x4
| Value (often offsets)
+
| Offset (self-relative) to object
 
|}
 
|}
   Line 317: Line 329:  
| 0x20
 
| 0x20
 
| 0xC
 
| 0xC
| ?
+
| Mesh position offset (X/Y/Z floats)
 
|-
 
|-
 
| 0x2C
 
| 0x2C
Line 427: Line 439:  
|}
 
|}
    +
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 451:  
| 0x0
 
| 0x0
 
| 0x4
 
| 0x4
| Flags (0x40000001)
+
| Flags (0x40000002)
 
|-
 
|-
 
| 0x4
 
| 0x4
 
| 0x4
 
| 0x4
| Type ?
+
| ?
 
|-
 
|-
 
| 0x8
 
| 0x8
Line 475: Line 486:  
|-
 
|-
 
| 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 510:  
| 0x0
 
| 0x0
 
| 0x4
 
| 0x4
| Flags (0x40000002)
+
| Flags (0x40000001)
 
|-
 
|-
 
| 0x4
 
| 0x4
 
| 0x4
 
| 0x4
| ?
+
| Vertex component type (see below)
 
|-
 
|-
 
| 0x8
 
| 0x8
Line 533: Line 530:  
| 0x14
 
| 0x14
 
| 0x4
 
| 0x4
| Vertex array size (in bytes)
+
| ?
 
|-
 
|-
 
| 0x18
 
| 0x18
 
| 0x4
 
| 0x4
| Offset (self-relative) to vertex array
+
| ?
 
|-
 
|-
 
| 0x1C
 
| 0x1C
Line 548: Line 545:  
|-
 
|-
 
| 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
| ? (possibly half-precision XYZUV)
+
! 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 659:  
| 0x4
 
| 0x4
 
| Magic "TXOB"
 
| Magic "TXOB"
 +
|-
 +
| 0x8
 +
| 0x8
 +
| ?
 
|-
 
|-
 
| 0xC
 
| 0xC
Line 793: Line 845:     
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]]
2

edits