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:
- AvatarUserReferenceAssigner (Component) - #on avatar equip these assign the reference of the user that equipped the avatar to the slot assigned to the assigner's target.
- SimpleAwayIndicator (Component) - This applies the away material to a mesh target MeshRenderer (Component) or SkinnedMeshRenderer (Component) 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 also contains:
- Grabbable (Component) - It can be picked up.
- ObjectRoot (Component) - It can be identified as a self contained object.
Avatar roots of avatars created with the Avatar Creator have these additional components
- AvatarGroup (Component) - Unknown purpose
- PBS_RimMetalic (Component) - The #away material of the avatar.
- SimpleAvatarProtection (Component) - Only the one bound to the avatar can equip and save it.
- MeshRendererMaterialRely (Component - Unknown purpose
Humanoid avatars also contain:
- Rig (Component) - Unknown purpose
- BipedRig (Component) - Unknown Purpose
- VRIK (Component) - Computes the logic to map the input #IK Targets to #IK Proxies.
- VRIKAvatar (Component) - Chooses when and how to bind the User's controls to the #IK Proxies.
Most often, an Avatar Root contains the #Avatar Node 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 a 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 (Component) 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 nodes:
- AvatarVoiceSourceAssigner (Component) - This assigns the audio stream of the user #on avatar equip. There may be multiple of these.
- AvatarAudioOutputManager (Component) - This configures the avatar's AudioOutput (Component) with the configured settings based on the user voice setting.
- AudioOutput (Component) - This is what emits the user's voice, many fields on this component are driven by the AvatarAudioOutputManager (Component).
- AvatarVoiceRangeVisualizer (Component) - This configures the whisper bubble for the user based off AvatarAudioOutputManager (Component) provided settings.
- VisemeAnalyzer (Component) - This computes the values to be routed to DirectVisemeDriver (Component) elsewhere in the avatar, this drives blendshape movements.
- 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:
- MeshRenderer (Component) - The visual part of the whisper bubble.
- PBS_IntersectMetalic (Component) - The material applied to the bubble, this is on the whisper bubble itself as this changes based on the user's audio volume.
Centered Root - VRIK specific
This slot represents where Neos thinks the center of the avatar is.