Loading...

Addon que permite convertir las animaciones entre el modo Quaternion y rotación Euler en Blender 2_8x

Creado por superadmin  2020-08-25 11:34:57  Modelado 3D



Recientemente intenté reutilizar algunas animaciones de Mixamo para aplicarlas a uno de mis personajes en Blender. Sin embargo, me encontré con un problema bastante común dentro de cualquier pipeline de animación: Mixamo utiliza su propio sistema de armatures y mi personaje ya estaba completamente riggeado con una estructura distinta. En un principio pensé en resolverlo utilizando restricciones (constraints) para copiar las transformaciones de una armadura a otra. La idea parecía funcionar correctamente, hasta que apareció un detalle técnico importante: Mixamo maneja las rotaciones utilizando cuaterniones, mientras que mi rig trabajaba completamente en modo Euler XYZ. Esto puede parecer un detalle menor, pero en producción realmente marca una gran diferencia. Los cuaterniones son el estándar en la industria para manejar rotaciones 3D porque evitan problemas clásicos como el gimbal lock, además de ofrecer interpolaciones mucho más suaves durante las animaciones. Por otro lado, las rotaciones Euler son más intuitivas para muchos animadores y suelen utilizarse bastante en rigs personalizados o proyectos antiguos. El verdadero problema comenzó cuando descubrí que mi personaje ya tenía varias animaciones creadas utilizando Euler XYZ. Cambiar el sistema de rotación manualmente implicaba corregir curvas, keyframes y orientaciones de huesos en prácticamente toda la librería de animaciones. Frente a este escenario solo tenía dos alternativas:
  • Corregir todas las animaciones manualmente, fotograma por fotograma.
  • Automatizar el proceso mediante scripting.
La primera opción quedó descartada inmediatamente. Cuando trabajas con animaciones complejas que contienen cientos o incluso miles de fotogramas, hacer ajustes manuales se vuelve un proceso extremadamente lento, tedioso y poco eficiente. Además, modificar keyframes manualmente puede introducir errores difíciles de detectar, especialmente en cadenas IK, animaciones faciales o movimientos con interpolaciones complejas. :tiempo: Así que decidí desarrollar una solución automatizada utilizando la API de Blender en Python.

¿Por qué ocurre este problema?

Cuando importamos una animación desde Mixamo, Blender genera automáticamente los huesos utilizando rotaciones en modo Quaternion (WXYZ). Esto significa que cada keyframe almacena la rotación utilizando cuatro componentes matemáticos en lugar de los tres ejes clásicos de Euler. El inconveniente aparece cuando intentamos transferir esa animación a un rig que trabaja bajo otro sistema de rotación. Aunque visualmente ambas armaduras puedan verse similares, internamente Blender interpreta los datos de manera completamente distinta. Esto provoca problemas como:
  • Rotaciones inesperadas.
  • Saltos entre keyframes.
  • Interpolaciones incorrectas.
  • Desalineación de huesos.
  • Pérdida parcial de la animación.
En rigs complejos, estos errores pueden volverse extremadamente difíciles de corregir manualmente.

Desarrollando la solución en Python

Blender cuenta con una API increíblemente potente que permite automatizar prácticamente cualquier tarea dentro del software. Aprovechando esto, decidí crear un script capaz de recorrer automáticamente todos los huesos de una armadura y convertir el modo de rotación sin perder la información de animación. El objetivo principal era:
  • Convertir automáticamente los huesos de Quaternion a Euler.
  • Preservar los keyframes existentes.
  • Mantener la integridad de la animación.
  • Evitar correcciones manuales innecesarias.
Inicialmente todo el desarrollo fue realizado directamente desde el intérprete de Python integrado en Blender, realizando pruebas sobre distintas armaduras y animaciones importadas desde Mixamo. Después de varias iteraciones logré obtener un resultado bastante estable y decidí empaquetar todo como un add-on para facilitar su uso.

Creando el Add-on

Una vez que el script comenzó a funcionar correctamente, el siguiente paso fue convertirlo en un complemento instalable para Blender. La ventaja de crear un add-on es que permite reutilizar la herramienta fácilmente en cualquier proyecto sin necesidad de copiar scripts manualmente cada vez. Además, otros usuarios que trabajen con retargeting de animaciones o pipelines híbridos entre Mixamo y rigs personalizados pueden beneficiarse directamente de esta solución. Repositorio en Github:

https://github.com/RichardCollao/RotationConvert

¿Cuándo puede ser útil este add-on?

Este tipo de herramienta puede ahorrar muchísimo tiempo en situaciones como:
  • Transferencia de animaciones entre rigs distintos.
  • Conversión de proyectos antiguos.
  • Integración de animaciones descargadas desde Mixamo.
  • Corrección de incompatibilidades entre sistemas de rotación.
  • Automatización de pipelines de animación.
Especialmente en proyectos grandes, automatizar este tipo de procesos puede marcar una diferencia enorme en productividad.

Reflexión final

Muchas veces, los problemas más pequeños dentro de Blender terminan convirtiéndose en excelentes oportunidades para automatizar tareas y aprender más sobre el funcionamiento interno del software. En este caso, lo que comenzó como un simple inconveniente de compatibilidad entre sistemas de rotación terminó convirtiéndose en una excelente excusa para profundizar en la API de Blender, scripting en Python y sistemas de animación. Si trabajas frecuentemente con animaciones de Mixamo, probablemente tarde o temprano te encontrarás con este mismo problema. Y si todavía no tienes claro qué son los cuaterniones o por qué son tan utilizados en animación 3D, te dejo un video que me ayudó bastante a comprender su funcionamiento y aplicación práctica:

Developed by Richard Collao Olivares

Software CMS Copyright © 2017 - 2026 All rights reserved