Character Geometry File (.gcg)

Since Golaem 5.3, a new file format has been introduced to handle geometry definition for Golaem.

Golaem Character Geometry (gcg) file is meant to replace FBX character geometry storage. It provides a huge speed boost over FBX, by skipping unnecessary features handled by the FBX format and enabling multithreaded processing. 

A GCG file stores the following data:

  • skeleton definition (bones joint orient and names)
  • A bindpose (position, orientation)
  • A pose to be displayed by default at import (position, orientation, scale)
  • A list of meshes. Each of the meshes holds its vertices positions / normals / UVs / skinning information, triangle definition, vertex caching (baked geometry) and blendshapes definitions.

Its definition can be found in the Golaem Geometry API SDK file glm_crowd_io.h, as GlmGeometryFile_0 struct.

It can be read/written via glmReadGeometryFile() & ​glmWriteGeometryFile() functions. The GlmGeometryFile struct must be reset to 0 priori to use it, for example via a memset.

GCG format handles linear, dual quaternions or blend skinning methods.

Limitations

The speed boost comes at a cost, and here are the limitations to use this format:

  • Bindpose unicity: the bindpose must be unique over the meshes exported (which is globally a good practice anyway). As gcg has space for a unique bindpose, we cannot handle different bindposes for different meshes. 
  • Skeleton scales: the bindpose may have a scale only on root, any other bone must have a local scale at 1. The presentation (current pose) may have a scale on root only. This scale impacts the scale of the character at import.
  • Valid skinning: the skinning should be applied on bones defined in the characterFile, mapped or not. However a fallback to parent bones in hierarchy is present.
  • Rigid Bind Skinning : The option is progressively discontinued since Maya 2015 (only the command is still available) and Maya 2016 (command seems to have been taken off). Thus, Golaem won't support that node. If a rigid bind skinning is required, please just build a single joint skinCluster, it will be recognized by Golaem as rigid binding, and instanced.
  • Each geometry mesh can only have a single baked animation on it. It will be detected by Golaem via history and cacheFile nodes.
  • No deformers on meshes, that would impact vertices count between original and skinned mesh 
  • The GCG file does not store any shader information (anyway, this is matched at previz / render time through our asset management process)
  • Note on internal process : gcg does not handle more than a shader per mesh, thus multi-materials meshes will be split into several meshes at export time.
  • Subdivision : as GCG stores only triangles, subdivision made on quad faces may not work properly when used with GCG asset.