Avatar
An avatar is the form of a user in a given world.
Structure
An avatar is a hierarchy of slots, with an Avatar Root containing Avatar Nodes
In general, some components may (and do) appear in multiple places over the hierarchy of an avatar:
Components | |
---|---|
Component | Summary |
AvatarUserReferenceAssigner | #on avatar equip, this assigns the reference of the user that equipped the avatar to the slot assigned to the assigner's target. |
SimpleAwayIndicator | This applies the away material to a mesh target MeshRenderer or SkinnedMeshRenderer when the user equipping the avatar goes to away state. |
Avatar Root
Any slot with an active AvatarRoot (Component) defines the root of an avatar.
Commonly the avatar root will contain the following components:
Components | |
---|---|
Component | Summary |
AvatarRoot | Indicates that this slot is the root of an avatar. |
Grabbable | Indicates the avatar can be grabbed. |
ObjectRoot | Indicates that this slot is the root of an object. |
Avatar roots of avatars created with the Avatar Creator have these additional components:
Components | |
---|---|
Component | Summary |
AvatarGroup | |
PBS_RimMetallic | The #away material of the avatar. |
SimpleAvatarProtection | Sets permissions such that only the user bound to the avatar may equip and save it. |
MeshRendererMaterialRelay |
Humanoid avatars also contain:
Components | |
---|---|
Component | Summary |
Rig | |
BipedRig | |
VRIK | Computes the logic to map the input #IK Targets to #IK Proxies. |
VRIKAvatar | Chooses when and how to bind the User's controls to the #IK Proxies. |
Most often, an Avatar Root contains the Avatar Nodes proxies, #Centered Root, and user defined Logix modules (modules do not need to be defined here, but they often are for ease of access).
Avatar Nodes
Any slot under an #avatar root that contains an AvatarPoseNode (Component) is considered an avatar node. Most often, avatar nodes are direct children of the Avatar Root.
Avatar nodes represent a strongly identifiable piece of the avatar, such as LeftHand or Head.
With VRIK-based avatars an Avatar Node is named <pose node name> Proxy by convention, and contains:
- AvatarObjectComponentProxy (Component) - This copies the global transform of the avatar node, onto a target node (at least it appears to). Scans for the node kind identified by the AvatarPoseNode (Component) will find the target of the proxy as well.
- A child slot named Target - This is where the part of the avatar model will actually try to go to. - Ex: A proxy moves to exactly where a VR tracker is in space, the Target offsets that tracker back to where that body part should be. - Avatar calibration is done by moving the Target slot under the proxies being calibrated.
The Head of the avatar often contains these additional components:
Components | |
---|---|
Component | Summary |
AvatarVoiceSourceAssigner | Assigns the audio stream of the user #on avatar equip. There may be multiple of these. |
AvatarAudioOutputManager | Configures the avatar's AudioOutput with the configured settings based on the user voice setting. |
AudioOutput | Emits the user's voice. Many fields on this component are driven by the AvatarAudioOutputManager. |
AvatarVoiceRangeVisualizer | Configures the whisper bubble for the user based off AvatarAudioOutputManager provided settings. |
VisemeAnalyzer | Computes the values to be routed to DirectVisemeDriver elsewhere in the avatar, which drives blendshape movements. |
In addition, the Head slot contains a child slot named Voice Range Visual. This is the whisper bubble, the slot is inactive unless the equipped user is in the whisper voice mode. This slot commonly contains:
Components | |
---|---|
Component | Summary |
MeshRenderer | The visual part of the whisper bubble. |
PBS_IntersectMetallic | The material applied to the whisper bubble. Changes based on the user's audio volume. |
Centered Root - VRIK specific
This slot represents where Neos thinks the center of the avatar is.