Golaem Digital Asset (.gda)
The Golaem Digital Asset (.gda) file is a JSON file which stores a nodal representation of one or more Golaem simulations and references all the resources they need to run in the Golaem Engine. The Golaem Engine allows to run Golaem simulations and interact with them from any DCC.
The GDA file contains all the information to run a Golaem simulation:
- Entity types definitions and referenced Golaem Character files (.gcha)
- Population definitions
- Environment definitions (terrain, physics, flock, perception, traffic)
- Behaviors and triggers for each entity type
GDA File format structure
A GDA file can be represented using the following structure:
- GDANode: a GDA node can represent any Golaem node. It has a name, a type and a list of attributes (GDAAttrribute)
- GDAContainer: a GDA container is a special kind of GDANode that contains other GDANodes
- GDAAttribute: represents an attribute on a node. It has a name, a type and a value. Attributes can also be public. Public attributes can be overridden in DCCs
- GDAConnection: represents a connection between two GDA attributes
Gda file example
Here's an example of a GDA file exported from Maya. The Maya scene consists of 5 characters playing a motion.
{ "version": "8.0.1", "licenseHashKey": 2775867834, "updateFramerate": 24.0, "name": "gdaSample", "type": "Container", "attributes": [ { "name": "rngSeed", "type": "uint32", "value": 0 } ], "nodes": [ { "name": "crowdField1", "type": "Simulation", "attributes": [ { "name": "inTerrain", "type": "Terrain" }, { "name": "inPopulationTools", "type": "PopulationTool", "dimension": 1 }, { "name": "inPhysics", "type": "Physics" }, { "name": "inFlock", "type": "Flock" }, { "name": "inTraffic", "type": "Traffic" }, { "name": "startTime", "type": "float", "value": 0.0416666679084301 }, { "name": "simulEntityPercent", "type": "float", "value": 1.0 }, { "name": "drawEntityPercent", "type": "float", "value": 1.0 }, { "name": "simulationScale", "type": "float", "value": 1.0 }, { "name": "kbEntryName", "type": "string", "value": "" }, { "name": "kbEntryType", "type": "uint32Array" }, { "name": "kbEntryPerEntity", "type": "uint32Array" }, { "name": "kbEntryInitValue", "type": "vec3Array" }, { "name": "kbInitialStateEntryNames", "type": "string", "value": "" }, { "name": "expSCAdditionalGlmAttrs", "type": "string", "value": "" } ] }, { "name": "popToolShape1", "type": "PopulationTool", "attributes": [ { "name": "positions", "type": "vec3Array", "dataType": "distance", "value": [ [ -1.001000165939331, 0.0, 1.001000165939331 ], [ 2.002000093460083, 0.0, -2.002000093460083 ], [ -2.002000093460083, 0.0, -1.000999927520752 ], [ 2.002000093460083, 0.0, 2.002000093460083 ], [ -5.960464477539063e-08, 0.0, 2.002000093460083 ] ] }, { "name": "orientations", "type": "vec3Array", "dataType": "angle", "value": [ [ -0.0, 5.008955213270383e-06, 0.0 ], [ -0.0, 5.008955213270383e-06, 0.0 ], [ -0.0, 5.008955213270383e-06, 0.0 ], [ -0.0, 5.008955213270383e-06, 0.0 ], [ -0.0, 5.008955213270383e-06, 0.0 ] ] }, { "name": "inEntityTypes", "type": "EntityType", "dimension": 1 }, { "name": "entityTypeWeights", "type": "floatArray", "value": [ 50.0 ] }, { "name": "radius", "type": "float", "dataType": "distance", "value": 0.30000001192092896 }, { "name": "height", "type": "float", "dataType": "distance", "value": 1.75 }, { "name": "inGroupTypes", "type": "GroupType" }, { "name": "groupTypeWeights", "type": "floatArray" }, { "name": "groupMinSize", "type": "uint32", "value": 1 }, { "name": "groupMaxSize", "type": "uint32", "value": 1 } ] }, { "name": "entityTypeShape1", "type": "EntityType", "attributes": [ { "name": "entityTypeId", "type": "uint32", "value": 1 }, { "name": "characterFile", "type": "string", "value": "./resources/character/CasualMan_Light_vpShaders.gcha" }, { "name": "specificAnimationBlindDataMode", "type": "uint32", "value": 0 }, { "name": "rollExtractionBaseOffset", "type": "float", "value": 0.0 }, { "name": "inBeContainer", "type": "BehaviorContainer" }, { "name": "scaleMin", "type": "float", "value": 0.8999999761581421 }, { "name": "scaleMax", "type": "float", "value": 1.100000023841858 }, { "name": "renderingTypeIds", "type": "uint32Array", "value": [ 0 ] }, { "name": "renderingTypeWeights", "type": "uint32Array", "value": [ 50 ] }, { "name": "skeletonPelvisHeightRatio", "type": "float", "value": 1.0 }, { "name": "updateOrder", "type": "uint32", "value": 0 }, { "name": "displayColor", "type": "vec4", "dataType": "color", "value": [ 0.0, 1.0, 0.0, 1.0 ] }, { "name": "radius", "type": "float", "dataType": "distance", "value": 0.30000001192092896 }, { "name": "radiusToHeightRatio", "type": "float", "value": 6.0 }, { "name": "personalSpace", "type": "float", "dataType": "distance", "value": 0.10000000149011612 }, { "name": "radiusToLengthRatio", "type": "float", "value": 6.0 }, { "name": "radiusToWidthRatio", "type": "float", "value": 2.0 }, { "name": "kbEntryName", "type": "string", "value": "" }, { "name": "kbEntryType", "type": "uint32Array" }, { "name": "kbEntryInitValue", "type": "vec3Array" }, { "name": "defaultGroundAdaptation", "type": "uint32", "value": 1 } ] }, { "name": "entityTypeContainerShape1", "type": "BehaviorContainer", "attributes": [ { "name": "nextBehaviors", "type": "Behavior" }, { "name": "initialBehavior", "type": "Behavior" } ], "nodes": [ { "name": "beMotionShape1", "type": "PlayAnimationBehavior", "attributes": [ { "name": "nextBehaviors", "type": "Behavior", "dimension": 1 }, { "name": "inStartTrigger", "type": "TriggerContainer" }, { "name": "inStopTriggers", "type": "TriggerContainer", "dimension": 1 }, { "name": "startingDurationMin", "type": "float", "value": 0.4000000059604645 }, { "name": "startingDurationMax", "type": "float", "value": 0.4000000059604645 }, { "name": "stoppingDurationMin", "type": "float", "value": 0.4000000059604645 }, { "name": "stoppingDurationMax", "type": "float", "value": 0.4000000059604645 }, { "name": "startPercentMin", "type": "float", "value": 0.0 }, { "name": "startPercentMax", "type": "float", "value": 1.0 }, { "name": "animationPriority", "type": "uint32", "value": 2 }, { "name": "animationWeightMin", "type": "float", "value": 0.5 }, { "name": "animationWeightMax", "type": "float", "value": 0.5 }, { "name": "inMotionClips", "type": "MotionClip", "dimension": 1 }, { "name": "motionMirrors", "type": "uint32Array", "value": [ 0 ] }, { "name": "motionEnable", "type": "uint32Array", "value": [ 1 ] }, { "name": "maskPelvis", "type": "uint32", "value": 1 }, { "name": "maskSpines", "type": "string", "value": "*" }, { "name": "maskChannelLimbs", "type": "string", "value": "*" }, { "name": "maskChannelEffectors", "type": "string", "value": "*" }, { "name": "maskBlindDataGroups", "type": "string", "value": "*" }, { "name": "maskBlindData", "type": "string", "value": "*" }, { "name": "loop", "type": "uint32", "value": 1 }, { "name": "speedRatioMin", "type": "float", "value": 0.800000011920929 }, { "name": "speedRatioMax", "type": "float", "value": 1.2000000476837158 }, { "name": "blendMode", "type": "uint32", "value": 0 }, { "name": "additiveBlendRatioMin", "type": "float", "value": 1.0 }, { "name": "additiveBlendRatioMax", "type": "float", "value": 1.0 }, { "name": "motionMappingMode", "type": "uint32", "value": 0 } ] }, { "name": "beMotion1StartTriggerShape", "type": "TriggerContainer", "attributes": [ { "name": "rootTrigger", "type": "Trigger" } ], "nodes": [ { "name": "beMotion1TrueTriggerShape", "type": "BooleanTrigger", "attributes": [ { "name": "inPreviousTriggers", "type": "Trigger" }, { "name": "value", "type": "uint32", "value": 1 } ] } ], "connections": [ [ "rootTrigger", "beMotion1TrueTriggerShape.self" ] ] }, { "name": "beMotion1StopTriggerShape1", "type": "TriggerContainer", "attributes": [ { "name": "rootTrigger", "type": "Trigger" } ], "nodes": [ { "name": "beMotion1FalseTriggerShape1", "type": "BooleanTrigger", "attributes": [ { "name": "inPreviousTriggers", "type": "Trigger" }, { "name": "value", "type": "uint32", "value": 0 } ] } ], "connections": [ [ "rootTrigger", "beMotion1FalseTriggerShape1.self" ] ] } ], "connections": [ [ "initialBehavior", "beMotionShape1.self" ], [ "beMotionShape1.nextBehaviors[0]", "self" ], [ "beMotion1StartTriggerShape.self", "beMotionShape1.inStartTrigger" ], [ "beMotion1StopTriggerShape1.self", "beMotionShape1.inStopTriggers[0]" ] ] }, { "name": "Casual_StandRaisingArms_Shape11", "type": "MotionClip", "attributes": [ { "name": "motionFile", "type": "string", "value": "./resources/motion/Casual_StandRaisingArms_1.gmo" }, { "name": "forceFlatGround", "type": "uint32", "value": 1 }, { "name": "locomotionChannel", "type": "int32", "value": -1 }, { "name": "cropMotion", "type": "uint32", "value": 0 }, { "name": "cropStartFrame", "type": "uint32", "value": 0 }, { "name": "cropStopFrame", "type": "uint32", "value": 0 }, { "name": "editMotion", "type": "uint32", "value": 0 }, { "name": "editedFrameRate", "type": "float", "value": 30.0 }, { "name": "editedRootTranslation", "type": "vec3", "dataType": "distance", "value": [ 0.0, 0.0, 0.0 ] }, { "name": "editedRootHeadingRotation", "type": "float", "dataType": "angle", "value": 0.0877668634057045 }, { "name": "editedHeadingDirection", "type": "vec3", "dataType": "direction", "value": [ 0.0, 0.0, 0.0 ] } ] } ], "connections": [ [ "popToolShape1.self", "crowdField1.inPopulationTools[0]" ], [ "entityTypeShape1.self", "popToolShape1.inEntityTypes[0]" ], [ "entityTypeContainerShape1.self", "entityTypeShape1.inBeContainer" ], [ "Casual_StandRaisingArms_Shape11.self", "entityTypeContainerShape1.beMotionShape1.inMotionClips[0]" ] ] }