Channels are predefined keywords which allow to query the value of almost any Entity attribute value, ranging from the current played Motion Clip to the position of a Bone. Channels can be query via Expressions in the Channel Operator, and Set Bone Behaviors, via the Expression Trigger in Triggers or via the MEL/Python command glmGetChannelValue.
There are three types of Channels:
Some Channels require a Component Name in addition to a Channel Name. The Component Name allows to specify which objects is queried for this Channel. Component Names can be the name of the wanted skeleton bone, limb... It can be specified through the Expressions Channels special syntax or using the -componentName flag of the glmGetChannelValue command.
Channels values are only of type float or vector3.
Channel Name | Channel Type | Description |
currentFrame | float | Scene current frame |
currentTime | float | Scene current time (in seconds) |
frameRate | float | Scene frequency |
frameTime | float | Time of a frame (in seconds) |
this.currentFrame
this.frameRate
Channel Name | Channel Type | Description |
entityId | float | Unique integer ID of the Entity (eg. 1001, 2001, 3001...) |
entityIdx | float | Index of the Entity in the Crowd Field simulation (eg. 0, 1, 2...) |
entityCount | float | Number of Entities in the current Crowd Field |
particleId | float | Maya Particle ID of an Entity within its particle system |
entityTypeId | float | Entity Type ID of the Entity |
renderingTypeId | float | Rendering Type ID of the Entity |
crowdFieldId | float | CrowdField ID of the Entity |
particleSystemIdx | float | Maya Particle System index of the particle of an Entity |
entityTypeColor | vector | Color of the Entity Type of the Entity |
scale | float | Scale of the Entity |
position | vector3 | World position of the Entity Pelvis |
orientation | vector3 | World orientation of the Entity Pelvis |
direction | vector3 | Direction vector of the Entity Pelvis |
headAttBank | vector3 | World orientation of the Entity Pelvis as heading / attitude / bank |
bodyForward | vector3 | Direction vector representing the forward of an Entity |
bodySide | vector3 | Direction vector representing the side of an Entity |
bodyUp | vector3 | Direction vector representing the up of an Entity |
previousPosition | vector3 | World position of the Entity Pelvis at the previous frame |
previousDirection | vector3 | Direction vector of the Entity Pelvis at the previous frame |
pelvisVelocity | vector3 | Velocity of the Entity Pelvis |
entityVelocity | vector3 | Velocity of the Entity (can be different from pelvisVelocity when using the Locomotion Behavior) |
entityDesiredVelocity | vector3 | Desired velocity of the Entity (can be different from pelvisVelocity when using the Locomotion Behavior) |
hasPaintedColor | float | Returns 1 if the Entity is within a Painted Zone. |
paintedColor | vector3 | Returns the color of the first Painted Zone at the Entity position (each component will be between 0. and 1.). |
paintedColorAlpha | float | Returns the alpha coefficient of the first Painted Zone at the Entity position (between 0. and 1.). |
hasPaintedDirection | float | Returns 1 if the Entity is within a Vector Field (even if the nothing is painted at the Entity Position) |
paintedDirection | vector3 | Returns the direction of the first Vector Field at the Entity position. |
this.entityId
this.position
this.position[x]
The following Channels are only meaningful if the Entity belongs to a Group EntityType
Channel Name | Channel Type | Description |
hasGroup | float | Does the entity belong to a Group Entity Type? It returns 1 if it does. |
groupTypeId | float | Group EntityType ID to which the Entity belongs |
groupId | float | ID of the cluster within the Group EntityType the Entity belongs to. It is similar to the Entity ID (eg. 1001, 2001, 3001...) but represents a Group Entity |
groupIdx | float | Index of the cluster within the Group EntityType the Entity belongs to. It is similar to the Entity index (eg. 0, 1, 2...) at the Group Entity level |
this.hasGroup
this.groupIdx
The following Channels are only meaningful if there's at least a Motion, Locomotion or SyncMotion Behavior playing in the Behavior Graph.
Channel Name | Channel Type | Description |
isAnimationEnabled | float | Is the animation enabled for an Entity? It returns 1 if the Entity exists. |
bonePosition | vector3 | World position of an Entity Bone. This Channel requires the name of the Bone as a Component |
boneOrientation | vector3 | World orientation (as Maya angles) of an Entity Bone. This Channel requires the name of the Bone as a Component |
boneDirection | vector3 | World direction vector of an Entity Bone (e.g. direction the Hand bone will be the vector going from the ForeArm bone to the Hand bone). This Channel is not valid for root bone of the skeleton. This Channel requires the name of the Bone as a Component |
limbHasFootprint | float | Are there footprints defined for an Entity Limb? This Channel requires the name of the Limb as a Component. |
limbFootprint | float | Is the Entity Limb currently playing a footprint? The result of this Channel is only valid if limbHasFootprint returns 1. This Channel requires the name of the Limb as a Component. |
limbFootprintPosition | vector3 | World position of the footprint of an Entity Limb. The result of this Channel is only valid if limbHasFootprint returns 1. This Channel requires the name of the Limb as a Component. |
blindDataValue | float | Value of a Character Blind Data / Blend Shape. This Channel requires the name of a Blind Data or a Blend Shape as a Component. The name of a Blend Shape has the following naming convention: blendShapeGroupName.blendShapeName. |
this.bonePosition.LeftArm
this.bonePosition.RightLeg[x]
this.blendShapeValue.FacialBS.LeftEye
The following Channels are only meaningful if there's at least a GoTo and a Navigation Behavior playing in the Behavior Graph.
Channel Name | Channel Type | Description |
isNavigationEnabled | float | Is the navigation enabled for an Entity? It returns 1 if a NavMesh is correctly defined in the Terrain Locator and if the Entity Navigation Attributes are valid. |
radius | float | Navigation radius of an Entity |
personalSpace | float | Navigation personal space of an Entity |
height | float | Navigation height of an Entity |
isNavigating | float | Is the Entity currently playing a Navigation Behavior? The result of this Channel is only valid if isNavigationEnabled returns 1 |
boldness | float | Navigation boldness of an Entity. The result of this Channel is only valid if isNavigating returns 1. |
hasAGoToTarget | float | Is the Entity currently going to a target?. The result of this Channel is only valid if isNavigating returns 1. |
goToTargetPosition | vector3 | World position of the target. The result of this Channel is only valid if hasAGoToTarget returns 1. |
localGoToTargetPosition | vector3 | World position of the local target. The result of this Channel is only valid if hasAGoToTarget returns 1. |
goToTargetPosition | vector3 | World position of the target. The result of this Channel is only valid if hasAGoToTarget returns 1. |
distanceToGoToTarget | float | Distance between the Entity and the target. The result of this Channel is only valid if hasAGoToTarget returns 1. |
isGoToTargetReached | float | Returns 1 if the Entity has reached its target. The result of this Channel is only valid if hasAGoToTarget returns 1. |
curvilinearAbscissaOnPath | float | Position of the Entity on the curvilinear abscissa between its starting position and the target. This value varies between 0. (starting position) and 1. (target reached). The result of this Channel is only valid if hasAGoToTarget returns 1. |
this.height
this.goToTargetPosition
this.goToTargetPosition[x]
Channel Name | Channel Type | Description |
hasGround | float | Returns 1. if the Entity is currently adapted on a Terrain Locator node |
groundHeight | float | Height of the currently adapted ground at the Entity position. The result of this Channel is only valid if hasGround returns 1. |
groundNormal | vector3 | Normal of the currently adapted ground at the Entity position. The result of this Channel is only valid if hasGround returns 1. |
groundSlope | float | Unsigned slope angle (in °) of the currently adapted ground at the Entity position. The result of this Channel is only valid if hasGround returns 1. |
entityGroundSlope | float | Signed slope angle (in °) of the currently adapted ground at the Entity position and depending on the Entity orientation. The result of this Channel is only valid if hasGround returns 1. |
this.hasGround
this.groundSlope
Channel Name | Channel Type | Description |
bonePhysicsMode | float | Physicalize mode of an Entity Bone (0: Dynamic, 1: Kinematic, 2: Local Servo, 3: World Servo, -1: disabled). This Channel requires the name of the Bone as a Component. |
Channel Name | Channel Type | Description |
isFlockEnabled | float | Is the flock enabled for an Entity? It returns 1 if a Flock Behavior is currently active. |
hasAPerchTarget | float | Is the Entity currently going to a perch?. The result of this Channel is only valid if isFlockEnabled returns 1. |
perchTargetPosition | vector3 | World position of the perch target. The result of this Channel is only valid if hasAPerchTarget returns 1. |
perchTargetNormal | vector3 | Normal of the perch target. The result of this Channel is only valid if hasAPerchTarget returns 1. |
distanceToPerchedTarget | float | Distance between the Entity and the perch target. The result of this Channel is only valid if hasAPerchTarget returns 1. |
isPerchedTargetReached | float | Returns 1 if the Entity has reached its perch target. The result of this Channel is only valid if hasAPerchTarget returns 1. |
hasASteerTarget | float | Returns 1 if the Entity has an active Steer behavior in Reach or Flee mode, otherwise returns 0. |
localSteerTargetPosition | vector3 | The position of the local Steer target. In Follow Curve mode this represents the next position to reach on the curve, otherwise this is equivalent to the steerTargetPosition channel. The value is valid only when hasASteerTarget is true. |
steerTargetPosition | vector3 | The position of the Steer target. In Follow Curve mode this represents the end position of the curve. The value is valid only when hasASteerTarget is true. |
distanceToSteerTarget | float | The distance from the Entity to the Steer target. In Follow Curve mode this is not a distance in a straight line, but the distance from the Entity to the Steer target along the curve. The value is valid only when hasASteerTarget is true. |
isSteerTargetReached | float | Returns 1 if the Entity has reached its Steer target, otherwise returns 0. In Follow Curve mode if Loop at end of curve is checked the channel always returns 0 (the target is never reached). The value is valid only when hasASteerTarget is true. |
Channel Name | Channel Type | Description |
isTrafficEnabled | float | Is the traffic enabled for an Entity? It returns 1 if a TrafficBehavior is currently active. |
isTrafficNavigating | float | Does the entity have an active TrafficGoto, returns 1 if true |
hasATrafficTarget | float | Does the entity have a traffic target, returns 1 if true |
trafficTargetPosition | vector3 | Target of the active trafficGoto, only valid if hasATrafficTarget is 1 |
trafficSteerAngle | float | Orientation angle (in °) of the Traffic Entity |
distanceToTrafficTarget | float | Remaining distance to the target (Note that the target always sits on the traffic network, even if a locator is set outside of it) |
isTrafficTurningRight | float | Is 1 if the entity is turning right in the traffic (it is active when the car start to switch to a right lane, or approaching/in the crossings when the car exit road is more that than 0.3 radian to the right of input road) |
isTrafficTurningLeft | float | Is 1 if the entity is turning left in the traffic (it is active when the car start to switch to a right lane, or approaching/in the crossings when the car exit road is more that than 0.3 radian to the left of input road) |
isTrafficBraking | float | Is 1 if the entity is slowing down |
trafficRoadId | float | The entity is driving on the given road ID. A road ID can be seen in the extra attributes of a traffic curve / road after the simulation init |
isTrafficSwitchingLane | float | 0 if not switching, varying from 1 to 0 if switching toward the exterior of the road, varying from -1 to 0 if switching toward the center of the road |
trafficRollAngle | float | Rotation in degrees to apply to a car wheel of diameter 1 for the current frame (multiply by the actual diameter of the wheel to get the correct wheel rotation) |
Channel Name | Channel Type | Description |
hasMesh | float | Returns 1 if the Entity has been assigned with a Mesh named as specified. This Channel requires a Mesh Asset Node Name as a Component |
geometryId | float | Id of the Geometry File currently played by the Entity. A Geometry File can be changed by using a Geometry Behavior. -1 if no Geometry Behavior is played. |
geometryFrame | float | Frame of the Geometry File currently played by the Entity. Played frame of a Geometry File is controlled by a Geometry Behavior. |
geometryRatio | float | Ratio (between 0. and 1.) of the Geometry File currently played by the Entity. The ratio of a Geometry File is computed depending on the Start Frame and End Frame defined in the current Geometry Behavior. |
geometryStartFrame | float | Start frame value defined in the current Geometry Behavior. |
geometryEndFrame | float | End frame value defined in the current Geometry Behavior. |
this.bonePhysicsMode.LeftLeg
Channel Name | Channel Type | Description |
closestEntity | float | EntityId of the closest Entity. |
closestEntityOfEntityType | float | EntityId of the closest Entity of Entity Type X. This Channel requires an Entity Type Id as a Component |
closestEntityOfCrowdField | float | EntityId of the closest Entity belonging to CrowdField X. This Channel requires a CrowdField Id as a Component |
distanceWithEntity | float | Distance with the specified Entity of Id X. This Channel requires an Entity Id as a Component. |
distance2WithEntity | float | Squared distance with the specified Entity of Id X (faster than distanceWithEntity). This Channel requires an Entity Id as a Component. |
closestParticleIdx | float | Closest particle index on a particle system. This channel requires a maya particle system as a Component |
closestParticlePosition | vector3 | Closest particle position on a particle system. This channel requires a maya particle system as a Component |
closestEdgeIdx | float | Closest edge index on a mesh. This channel requires a maya mesh object as a Component |
closestEdgePosition | vector3 | Closest edge position on a mesh. This channel requires a maya mesh object as a Component |
closestPolygonIdx | float | Closest polygon index on a mesh. This channel requires a maya mesh object as a Component |
closestPolygonPosition | vector3 | Closest polygon position on a mesh. This channel requires a maya mesh object as a Component |
closestVertexIdx | float | Closest vertex index on a mesh. This channel requires a maya mesh object as a Component |
closestVertexPosition | vector3 | Closest vertex position on a mesh. This channel requires a maya mesh object as a Component |
this.closestEntity
this.closestEntityOfEntityType.2
this.closestEntityOfCrowdField.1
These Channels are available for all Behaviors:
Channel Name | Channel Type | Description |
isIdle | float | Is the Behavior idled? Returns 1. if the Behavior is neither starting, running or stopping. |
isStarting | float | Is the Behavior starting? Returns 1. if the Behavior is waiting for its Starting Trigger to be true. |
isRunning | float | Is the Behavior running? Returns 1. if the Behavior is has currently running |
isStopping | float | N/A |
runningTime | float | How long this behavior has been running for (in sec) |
this.beMotionShape1.isIdle
this.beGotoShape1.isRunning
These Channels are only available on Motion Behaviors:
Channel Name | Channel Type | Description |
motionId | float | ID of the Motion Clip currently played by the Motion Behavior |
motionFrame | float | Currently played frame of the Motion Clip |
motionTime | float | Currently played time (in seconds) of the Motion Clip |
motionRatio | float | Currently played ratio of the Motion Clip. This value varies between 0. (first frame of the motion) and 1. (last frame of the motion). |
numberOfFrames | float | Number of frames in the currenly played Motion Clip |
duration | float | Duration of the currently played Motion Clip (in sec) |
motionClipBlendWeight | float | Blending weight of the animation in the final posture |
this.beMotionShape1.motionFrame
this.beMotionShape2.motionId
These Channels are only available on Locomotion Behaviors:
Channel Name | Channel Type | Description |
linearVelocity | float | Currently wanted linear velocity |
angularVelocity | float | Currently wanted angular velocity |
minLinearVelocity | float | Minimum available linear velocity in the Locomotion Database |
minAngularVelocity | float | Minimum available angular velocity in the Locomotion Database |
maxLinearVelocity | float | Maximum available linear velocity in the Locomotion Database |
maxAngularVelocity | float | Maximum available angular velocity in the Locomotion Database |
startMotionBlendWeight | float | Blending weight of the starting animation in the final posture |
motionClipBlendWeight[motinIndex] | float | Blending weight of the each animation in the final posture |
this.beLocomotionShape1.linearVelocity
this.beLocomotionShape2.angularVelocity
These Channels are only available on the Activate Sensor Behavior or Navigation Behavior:
Channel Name | Channel Type | Description |
objectCount | float | Number of perceived objects. |
objectPos | vector3 | Position of each of the perceived objects. This channel requires an integer Component to specify the index of the perceived object. |
objectDist | float | The distance to each of the perceived objects. This channel requires an integer Component to specify the index of the perceived object. |
objectId | float | The id of each of the perceived object. For example, if the Sensor Detection Type is set to Plain Entity, the objectId channel will contain the crowd entity Ids of the perceived entities. This channel requires an integer Component to specify the index of the perceived object. |
this.beSensor.objectCount
this.beSensor.objectPos.0
These Channels are only available on the Channel Operator Behavior.
Channel Name | Channel Type | Description |
outputChannel | vector3 | The output of the ChOp Behavior. This channel requires an integer Component to specify the index of output. |
this.beChannelOperatorShape1.outputChannel.0
More Channels will be added in the next versions depending on user requirements. If some other Channels interest you, tell us here.