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]"
        ]
    ]
}
​​​​​​​