Advertencia

Este documento está un poco desactualizado. FIXME(A tener en cuenta): menciona solo FBX (verifica si glTF también es compatible), contiene contenido alojado en HiFi

Personaliza las Animaciones del Avatar

Puedes expresarte reemplazando el conjunto estándar de animaciones de Vircadia con tus propias animaciones personalizadas, como bailar, hacer malabarismos o saludar. Cualquier animación personalizada que configures será independiente de cada avatar que poseas y uses.

Nota

A menudo actualizamos nuestro proceso para importar animaciones personalizadas para que sea más fácil de usar. A medida que desarrolles animaciones personalizadas, ten en cuenta que es posible que debas modificarlas en el futuro a medida que nuestro soporte de animación personalizada continúe mejorando.

Prerrequisitos

A medida que profundizamos en la creación de animaciones personalizadas, es posible que usemos terminología con la que no estés familiarizado. A continuación, se muestran algunos términos con los que puedes encontrarte:

Términos

Descripción

Animaciones de avatar

Las animaciones de avatar son archivos FBX que definen cómo se mueve tu avatar. Por ejemplo, turn_left.fbx es el archivo de animación estándar para que tu avatar gire a la izquierda.

Funciones de animación

Las funciones de animación son disparadores que se asignan a una acción que puede realizar un avatar. Por ejemplo, turnLeft es una función de animación que hace que tu avatar gire a la izquierda mientras está parado. Esta función de animación se asigna al archivo turn_left.fbx. Puedes ver esto en acción presionando la tecla de flecha izquierda o A en el modo Escritorio o usando los controladores de mano en el modo VR.

Animación de Avatar JSON o Archivo Gráfico de Animación

El sistema de animación estándar combina y superpone una serie de animaciones de archivos FBX utilizando un archivo de datos JSON. Este archivo JSON se denomina archivo gráfico de animación y especifica exactamente qué animaciones reproducir y cómo combinarlas. También determina el orden de las operaciones, de modo que operaciones como la cinemática inversa ocurren después de que el resto del cuerpo ha sido animado por medios tradicionales. Por defecto, cada avatar usa el mismo Archivo Gráfico de Animación.

Prepara Tu Animación Personalizada

Antes de reemplazar las animaciones estándar existentes, debes preparar tu archivo de animación personalizado. Utiliza nuestro Guía de estándares de Avatar y ten en cuenta las siguientes pautas:

  • Las animaciones deben tener nombres comunes estándar para Vircadia.

  • Las animaciones deben tener orientaciones articulares estándar (y hacia abajo del hueso).

  • Los fotogramas clave deben tener fotogramas clave para cada articulación a un intervalo uniforme de 30 fotogramas por segundo.

  • La fase de animación de locomoción tiene el tobillo izquierdo en posición de primer paso en el primer fotograma. Intenta hacer coincidir esta fase si quieres que tu animación de locomoción se mezcle con el conjunto predeterminado.

Una vez que creas tu animación:

  1. Exporta tu animación desde la herramienta externa de tu elección como un archivo FBX.

  2. Sube tu archivo FBX de animación a un servidor en la nube y copia la URL.

Reemplazar Animaciones Estándar

Puedes hacer que tu avatar use tus animaciones personalizadas reemplazando las animaciones predeterminadas. Hay dos formas diferentes de hacer esto:

Reemplazar Usando un archivo Script

Puedes escribir un script y usar el espacio de nombres (namespace) MyAvatar para reemplazar una animación o función de animación existente.

Hemos enumerado los métodos que puedes utilizar para reemplazar las animaciones estándar de tu avatar.

Método

Descripción

MyAvatar.overrideAnimation

Este método puede utilizarse para reproducir cualquier animación en el avatar actual. Se moverá suavemente desde la pose actual hasta el fotograma inicial de la animación personalizada. Por ejemplo, si su avatar está saludando, este script detendrá su avatar y reproducirá la animación personalizada proporcionada.

AnimationCache.prefetch

Este método busca un recurso. Puedes usar esto para obtener una animación personalizada que hayas alojado en un servidor en la nube. Si no buscas previamente tus animaciones antes de reproducirlas, es posible que veas una pose en T brevemente mientras se descarga la animación.

MyAvatar.restoreAnimation

Este método evita que la función de reemplazo (override) reproduzca cualquier animación personalizada. Tu avatar volverá a reproducir las animaciones estándar.

Nota

Este proceso para reemplazar una animación existente tomará el control completo de todas las articulaciones del avatar. Se desactivará la cinemática inversa de las manos y la cabeza de los usuarios de HMD.

También puedes reemplazar una asignación de función de animación existente:

  1. Usa MyAvatar.getAnimationRoles para ver la lista de funciones del avatar actual.

  2. Puedes reemplazar la animación para cada función con una animación personalizada (archivo FBX) usando MyAvatar.overrideRoleAnimation.

Hemos enumerado las funciones de animación y su descripción. Estas se actualizan con frecuencia, por lo que recomendamos usar MyAvatar.getAnimationRoles para obtener las últimas funciones de animación antes de continuar. Los archivos FBX de animación estándar para estas funciones se pueden encontrar en el repositorio de código fuente de Vircadia en GitHub.

Funciones de Animación

Descripción

rightHandGraspOpen

Cuando no se aprieta el gatillo del controlador de mano.

rightHandGraspClosed

Cuando se aprieta completamente el gatillo del controlador de mano.

rightIndexPointOpen

Gesto de señalar.

rightIndexPointClosed

Gesto de señalar con el gatillo apretado.

rightThumbRaiseOpen

Gesto de pulgar hacia arriba.

rightThumbRaiseClosed

Gesto de pulgar hacia arriba con el gatillo apretado.

rightIndexPointAndThumbRaiseOpen

Pulgar hacia arriba y gesto de señalar simultáneamente.

rightIndexPointAndThumbRaiseClosed

Pulgar hacia arriba y gesto de señalar simultáneamente, con el gatillo apretado.

leftHandGraspOpen

Cuando no se aprieta el gatillo del controlador de mano.

leftHandGraspClosed

Cuando se aprieta completamente el gatillo del controlador de mano.

leftIndexPointOpen

Gesto de señalar.

leftIndexPointClosed

Gesto de señalar con el gatillo apretado.

leftThumbRaiseOpen

Gesto de pulgar hacia arriba.

leftThumbRaiseClosed

Gesto de pulgar hacia arriba con el gatillo apretado.

leftIndexPointAndThumbRaiseOpen

Pulgar hacia arriba y gesto de señalar simultáneamente.

leftIndexPointAndThumbRaiseClosed

Pulgar hacia arriba y gesto de señalar simultáneamente, con el gatillo apretado.

idleStand

Quedarse quieto, sin hablar.

idleTalk

Quedarse quieto, pero el avatar está hablando mientras tanto.

walkFwdShort_c

Caminando hacia adelante a 0.5 m/s.

walkFwdNormal_c, walkFwdFast_c

Caminando hacia adelante a 1.8 m/s. Caminando hacia adelante a 2.3 m/s.

walkFwdJog_c, walkFwdRun_c

Caminando hacia adelante a 3.2 m/s. Caminando hacia adelante a 4.5 m/s.

idleToWalkFwd, idleSettle

Transición corta de estar inactivo a caminar hacia adelante. Transición de caminar a inactivo.

walkBwdShort_c

Caminando hacia atrás a 0,6 m/s.

walkBwdFast_c, jogBwd_c, runBwd_c

Caminando hacia atrás a 1,6 m/s. Trota hacia atrás a 2,3 m/s. Trota hacia atrás a 3,1 m/s.

turnLeft

Animación de pie girando en el lugar.

turnRight

Animación de pie girando en el lugar.

strafeLeftShortStep_c

Paso lateral a 0,1 m/s.

strafeLeftStep_c, strafeLeftWalk_c, strafeLeftWalkFast_c, strafeLeftJog_c

Dar paso lateral a 0,5 m/s. Caminar de lado a 1,0 m/s. Caminar de lado a 2,6 m/s. Trote lateral a 3,0 m/s.

strafeRightShortStep_c, strafeRightStep_c

Dar paso lateral a 0,1 m/s. Dar paso lateral a 0,5 m/s.

strafeRightWalk_c, strafeRightFast_c, strafeRightJog_c, stepLeftShort_c, stepLeft_c, strafeLeftAnim_c, stepRightShort_c, stepRight_c, strafeRightAnim_c

Caminar de lado a 1 m/s. Caminar de lado a 2,6 m/s. Trote lateral a 3 m/s. Paso de HMD a la izquierda a 0 m/s. Paso de HMD a la izquierda a 0,5 m/s. Desplazamiento de HMD a la izquierda a 2,5 m/s. Paso de HMD a la derecha a 0 m/s. Paso de HMD a la derecha a 0,5 m/s. Desplazamiento de HMD a la derecha a 2,5 m/s.

fly

Volando inactivo.

takeoffStand

Pararse con salto de pies.

TAKEOFFRUN

Saltar rápidamente al correr.

inAirStandPreApex

Salto de pie en el aire en el camino hacia arriba hacia el vértice del salto.

inAirStandApex

Salto de pie en el aire en el vértice del salto.

inAirStandPostApex

Salto de pie en el aire en el arco descendente del salto.

inAirRunPreApex

Saltar corriendo en el aire en el camino hacia arriba hacia el vértice del salto.

inAirRunApex

Salto corriendo en el aire en el vértice del salto.

inAirRunPostApex

Saltar mientras se corre en el aire durante el arco descendente del salto.

landStandImpact

De pie sobre el piso.

landStand

De pie sobre el piso.

LANDRUN

Corriendo sobre el piso.

Crear un Archivo JSON de animación de Avatar Personalizado

Si no te sientes cómodo usando un script (archivo de código fuente), puedes editar o reemplazar el archivo JSON de Animación de Avatar existente para anular las animaciones estándar.

Nota

Si creas un archivo JSON personalizado para las animaciones de tu avatar, no heredará ninguna actualización hecha en el archivo JSON de las animaciones estándar. Puedes realizar modificaciones al texto de la última versión en cualquier momento.

El archivo JSON muestra qué función de animación se asigna a qué archivo FBX de animación. Puedes reemplazar los archivos FBX de animación estándar con los archivos FBX de tu animación personalizada. O, puedes escribir un nuevo archivo JSON con las nuevas asignaciones para cada función de animación.

Para reemplazar animaciones estándar:

  1. Sube tu archivo JSON personalizado a un servidor en la nube y copia la URL.

  2. En Interface, abre tu HUD o Tablet y ve a Avatar.

  3. Haz clic en el icono de Configuración en la esquina superior derecha.

  4. En "Avatar Animation JSON", pega la URL de tu archivo JSON.

O

  1. Abre el archivo FST de tu avatar en un editor de texto.

  2. Agrega la URL de tu archivo de Gráfico de Animación.

Nota

Deberás ejecutar los archivos de tu avatar a través del paquete Empaquetador de Avatar para incluir los cambios en tu archivo FST.

animGraphUrl = "URL"

Ejemplos

  • Aquí está el archivo avatar-animation.json <https://github.com/vircadia/vircadia/blob/master/interface/resources/avatar/avatar-animation.json> predeterminado actual.

  • Este archivo scoot-animation.json reemplaza las animaciones de inactividad y caminata con una pose sentada. Este ejemplo muestra cómo puedes reemplazar algunas de las animaciones predeterminadas de un avatar.

Tema avanzado: Sistema AnimNode

El archivo JSON de Animación de Avatar contiene un árbol jerárquico de nodos llamado Sistema AnimNode. El sistema AnimNode define cómo se mueve un avatar y se describe en el archivo JSON de Animación Gráfica.

El movimiento de un avatar está determinado por una combinación compleja de animación de procedimiento, clips de animación pregrabados y cinemática inversa. Esta combinación se calcula en cada fotograma para garantizar que el cuerpo del avatar siga la física y la entrada del controlador lo más rápido posible. Debe manejar la animación para usuarios de escritorio, usuarios de HMD y usuarios que lleven un conjunto completo de rastreadores HTC Vive. Debe configurarse sobre la marcha a medida que se agregan y eliminan sensores del sistema. También debería estar abierto a extensiones para que sean posibles animaciones únicas y configuraciones de avatar. Estas funcionalidades son manejadas por el sistema AnimNode.

Hemos enumerado algunas características del sistema:

  • El sistema AnimNode es un gráfico de nodos.

  • Algunos nodos solo tienen salida, como los clips de animación pregrabados.

  • Otros nodos producen resultados procesando los nodos debajo de él en el grafo y combinando los resultados.

  • Al manipular la jerarquía de nodos, ciertas acciones de animación ocurrirán antes o después de otras acciones de animación.

  • Los parámetros del nodo se pueden cambiar dinámicamente en tiempo de ejecución. Esta flexibilidad es necesaria para lograr buenos resultados visuales.

  • El sistema está en el archivo JSON de Gráfico de Animación predeterminado y se carga durante la inicialización del avatar.

Conceptos clave

El sistema AnimNode funciona como un árbol de análisis de expresiones. Por ejemplo, la siguiente expresión: 4 + 3 * 7 - (5 / (3 + 4)) + 6, se puede representar mediante el siguiente árbol de análisis.

../../_images/animnode.png

Este árbol de análisis puede evaluarse en tiempo de ejecución para calcular el valor real. En este árbol, los nodos hoja son valores y los nodos interiores son operaciones que combinan dos o más subárboles y producen un nuevo valor. El árbol se evalúa hasta que quede un único valor, que debería ser el resultado de toda la expresión: 30.2957142.

En la expresión del caso (expression case), el valor de salida de cada nodo es un número de punto flotante, y las operaciones se pueden implementar simplemente evaluando cada subárbol y luego combinándolos con una operación aritmética, como la suma o la multiplicación.

El sistema AnimNode funciona con un concepto similar. Excepto que el valor de cada nodo contiene todas las traslaciones y rotaciones de las articulaciones del avatar. Los nodos de hoja pueden ser poses del avatar estáticas, como la pose de T, o pueden ser un solo fotograma de un clip de animación. Los nodos interiores pueden realizar operaciones como combinar dos o más subárboles o combinar el cuerpo superior de una animación con el cuerpo inferior de otra.

Ver también