Three.js: Cargar animación Mixamo Animation

Creado en 11 feb. 2015  ·  67Comentarios  ·  Fuente: mrdoob/three.js

Oye, estoy manipulando y animando mi personaje con mixamo ... luego los importo a blender a través de FBX ... luego los exporto a js con tu exportador (probé todos los exportadores ... todos).

El resultado está aquí:
http://instagram.com/p/y8NQjQkk9-/?modal=true

siempre se ve así distorsionado y no puedo entenderlo ... siempre son las manos ... ¿Es por la cantidad de huesos? mixamo tiene 16 o algo. y el marine_anim de los ejemplos más de 50.

Por favor, ayuda a un hermano ... después de tres días estoy al final de mi sabiduría | retoques

Question

Comentario más útil

Alternativamente, puede exportar como FBX desde Mixamo y cargar directamente usando FBXLoader.
A partir de la última versión (R89) debería funcionar sin problemas.

Todos 67 comentarios

Después de fusionar este PR https://github.com/mrdoob/three.js/pull/6052 , sugiero probar el exportador desde la rama de desarrollo. Tiene 2 opciones de posición de pose diferentes para POSE y REST . Configure su armadura en una u otra, y luego durante la exportación asegúrese de que la propiedad Skeletal animation coincida. Pruebe ambos y vea si alguno ayuda. Para algunas personas POSE funciona, y para otras es REST .

hmm tan exportado usando el descanso de animación esquelética y en modo pose ...

estos son mis archivos http://we.tl/CNM5qEmBMs
incluyendo final original y ambas exportaciones ...

Modo de descanso = sin movimiento en absoluto
Modo pose = distorsiones extrañas

dijiste "Tiene 2 opciones de posición de postura diferentes para POSE y DESCANSO. Configura tu armadura en una u otra" ... no sé cómo configurar mi amature para posar o descansar ... quiero usar Blender solo como un traductor de mixamo a threejs ... lo siento si mi pregunta es para novato

¿Te refieres a los modos de edición pose y modo de edición para objetos?

Ok Pose mode --- mismas distorsiones
Modo de edición del siguiente registro de errores:

error

No se puede volver a crear este error, pero noté que, al mirar los números de línea en el rastreo, posiblemente no esté en la misma (última) versión que se encuentra en dev . También asegúrese de no realizar una exportación Scene con este activo. Simplemente realice exportaciones de geometría única por ahora (ya que ObjectLoader aún no funciona con mallas con piel).

En lo que respecta a las animaciones rotas; Puedo recrear tanto la animación rota como el problema de la animación que falta. Hay personas que están obteniendo un exportador de animaciones en funcionamiento (ejemplo https://github.com/mrdoob/three.js/issues/5582#issuecomment-73444737), por lo que sospecho que hay algunos problemas con el proceso de importación de FBX. Es muy difícil determinar si es el exportador o la importación FBX. Me preguntaba si había transformaciones que debían aplicarse a los huesos, pero aún no lo sé.

¡Oye, muchas gracias por tu tiempo y tus conocimientos!

posiblemente no esté en la misma (última) versión que se encuentra en dev.

Creo que estoy trabajando con la última versión porque puedo seleccionar pose y descansar:
"La opción de animación es ahora una enumeración que requiere que el usuario seleccione entre POSE y REST"

dado que ObjectLoader aún no funciona con mallas con piel

Desde mi experiencia, no es más loco ... he cargado geometrías y escenas con objectloader en threejs. El siguiente error se crea con Objectloader y da el mismo resultado que las exportaciones anteriores de Geometrie.
newerror

Puedo recrear tanto la animación rota como el problema de la animación que falta.

Sería realmente interesante si NO pudieras recrear el problema ...
Por lo tanto, ve alguna posibilidad de exportar el modelo a threejs ...

Es interesante en general ya que es un modelo exportado por mixamo. Si este modelo funciona, todos los modelos mixamo funcionarían. (En teoria ;))

de todos modos gracias por investigarlo.

Con la versión actual de Blender y solo geometrías y sin exportación de escenas, obtengo el modo pose:

poseterror

y en modo reposo

resterror

solo puedo exportar la geometría si exporto la escena del agujero

ok, creo que lo encontré ... es un error en la referencia entre los vértices de la geometría y los huesos animados ... la malla y el esqueleto están apagados

Después de escalar y rotar manualmente la malla hacia el esqueleto de esta manera

for (var i = 0; i < geometry.children[0].geometry.vertices.length; i++) {
                vector = geometry.children[0].geometry.vertices[i];
                var axis = new THREE.Vector3(0, 1, 0);
                var angle = Math.PI / 2;
                geometry.children[0].geometry.vertices[i].applyAxisAngle(axis, angle);
                geometry.children[0].geometry.vertices[i].multiplyScalar(0.01);
 }

obtuve un resultado bastante bueno.

Entonces, en primer lugar, ¿por qué necesito rotar la malla? Recuerdo que al importar a mixamo tuve que rotar mi modelo exactamente 90 grados ... es por la dirección -z
¿Por qué escalar? ninguna pista...

ahora viene el buggy mi modelo no tenía el TPos perfecto ... los brazos estaban demasiado bajos ... lo arreglé en mixamo y seguía siendo perfecto después ... lo vi en la licuadora ... y fue perfecto para ... lo vi en max fue perfecto también.
ENTONCES, la exportación a Threejs y el mapeo entre huesos y cuerpo se referían al cuerpo creado originalmente en max.

tpose

por lo tanto, existe un error matemático al hacer referencia a vértices y huesos en su matriz de transformación.

Me pregunto si en realidad es un error o una característica opcional. Esto podría solucionar muy bien el problema que está teniendo, pero interrumpir las exportaciones para otra persona que no tenga que importar activos FBX (algo que ya he visto antes con las animaciones POSE y REST). La lógica que se usa (para huesos y vértices) ha estado en su lugar por un tiempo (copiada del antiguo exportador) y no estoy diciendo que sea perfecta o sin fallas, pero si esto fuera un error en las matemáticas, creo que lo habríamos visto más problemas. Tiene que aplicar su ejemplo de código en el exportador y luego ejecutar muchas pruebas en muchos casos de prueba (que no es algo que tenga por ahí).

He visto problemas similares en la producción donde un activo realiza múltiples viajes a través de múltiples programas y exportadores. Agregue en esta ecuación las reorientaciones del eje y tendrá una receta para travesuras certificables. Si puedo averiguar cómo implementar esto en el exportador, será una opción solo hasta que haya mucha más certeza de que efectivamente se aplica a todos los usuarios y no a casos extremos.

Con la versión actual de Blender y solo geometrías y sin exportación de escenas, obtengo el modo pose:

El error dice específicamente "No es un objeto de malla válido". Las exportaciones de geometría se basan en la selección y lo más probable es que haya seleccionado la armadura y no la malla.

hola de nuevo gracias por investigarlo.
No quería decir que mi código debería ingresar al exportador. Lo que quería señalar es: que dentro de la cadena de max a mixamo a blender, todo se asigna como debe ser. una vez que llega a threeJs, se produce un desplazamiento de transformación simple (en mi caso, era putrefacción y escala) que causa el error ... esta transformación se refiere a la malla original que se creó una vez (donde sea) y se ignora en Blender y mixamo ... pero revivido durante la exportación.

Desafortunadamente, tengo que admitir que no soy un mago de Matrix; de lo contrario, me encantaría echar una mano, ya que ustedes están trabajando muy duro. Gracias por tus conocimientos.

Nunca usé mixamo. ¿Utiliza Y-up? Lo que me pregunto qué sucedió es que si maximo es Y-up, entonces la importación de FBX tendría que reorientar el activo a Z-up, y luego el exportador se reorienta nuevamente para Y-up a three . Me pregunto si las transformaciones de los activos deberían aplicarse en Blender al momento de la importación si eso luego se exportaría correctamente a three .

Traducir plataformas de una plataforma / formato a otro se vuelve feo después de más de un par de iteraciones. Incluso en algunas de las canalizaciones y herramientas más avanzadas con las que he trabajado, siempre hubo límites en lo que se podía pasar un activo manipulado. Es posible que exista una solución que funcione para usted y para todos, pero ciertamente no está claro de inmediato cuál es.

No quería decir que mi código debería ingresar al exportador.

Y me refería de manera más general a algo que intentaría aplicar ángulos de eje a las posiciones de los vértices.

vector = geometry.children[0].geometry.vertices[i];
var axis = new THREE.Vector3(0, 1, 0);
var angle = Math.PI / 2;
geometry.children[0].geometry.vertices[i].applyAxisAngle(axis, angle); <-- would need something like this as well

pero también me estoy aferrando a un poco, y tal vez esto esté tratando de hacer que el exportador maneje demasiadas variables

Comentario interesante aquí sobre FBX
https://github.com/mrdoob/three.js/issues/2803#issuecomment -11458920

¿Ha aplicado la rotación que probablemente ha hecho a su modelo y la armadura dentro del archivo de Blender? Ya sabes, con ctrl + A> Rotación y Escala, en modo objeto. He visto que suceden cosas muy similares por no hacer eso. @princemio

Mi malla sale constantemente distorsionada o recibo errores y no puedo exportar varias animaciones. Se cambió de nuevo al exportador r69 que parece funcionar bien incluso en Blender 2.73a

@ por favor-espera ... no, en realidad no lo hice ... pero tal vez de Mixamo a Blender ...
@kimasendorf , ¿intentó recrear manualmente la malla en threejs?

La malla se modeló en Blender. A pesar de que es un personaje de baja poli, ciertamente es muy complejo recrear manualmente la malla en threejs. ¿Y cómo podría ayudar eso?

en mi caso, la malla y los huesos no estaban alineados entre sí ... por lo tanto, el modelo se dobla tratando de adaptarse a los huesos ... si no tienes huesos, entonces esto no tiene nada que ver con eso ...

por cierto ... no me refiero a "recrear" lol ... lo siento, intenté escribir "realinear" el modelo ...

Tuve problemas similares con cada esqueleto más complejo que probé hasta ahora. Incluyendo el marine incluido en el repositorio de three.js y presentado en los ejemplos. Esto es lo que obtengo con eso usando el interruptor de pose:

Marine en pose:
https://antont.github.io/three.js/examples/webgl_animation_skinning.html

Esa exportación está en:
https://github.com/antont/three.js/blob/blenderexport_buggy_marineskinning/examples/models/skinned/marine/marine_anims-pose.json

El ejemplo mínimo de las pruebas del exportador funciona. El ayudante de esqueleto coincide con el modelo cuando usa el modo pose allí.

Probaré (algunos de) estos trucos de ese otro problema ya cerrado (# 4660) a continuación:

  1. Necesitará fotogramas clave en cada hueso que desee exportar.
  2. La malla debe estar en la pose de T. Aquí hay dos formas de hacer esto: a. Haz una acción de pose de T. Esta acción necesita un marco en el que se hayan limpiado todos los huesos. Este debería ser el marco actual cuando se selecciona el exportador. segundo. Elimine el modificador Armature de la malla inmediatamente antes de exportar. Después de exportar el archivo, deshaga la última acción para recuperar el modificador.

y:

Solo pude hacer que esto funcionara cuando mantuve el modificador Armature, pero deshabilité tanto los grupos de vértices como las envolventes de huesos (luego volví a habilitar después de la exportación). En mi caso, eliminar el modificador no ayudó.

quizás también:

¿Ha aplicado la rotación que probablemente ha hecho a su modelo y la armadura dentro del archivo de Blender? Ya sabes, con ctrl + A> Rotación y Escala, en modo objeto.

Si alguien me gana en obtener una exportación funcional de esa mezcla de ejemplo y me dice lo que se necesitaba ... ¡muchas gracias! :) Estoy usando esta mezcla: https://github.com/mrdoob/three.js/blob/master/examples/models/skinned/marine/marine_anims.blend

Ok, lo hice funcionar ahora, actualizado https://antont.github.io/three.js/examples/webgl_animation_skinning.html (si alguien vio la versión con errores antes, asegúrese de no obtenerla del caché ahora)

Probé muchas cosas de ida y vuelta, verifiqué que todos los huesos estaban enclavados, tanto las opciones de reposo como de pose, etc. pero al final parece que fue solo que cuando tenía apply modifiers en obtuve la deformación extraña. Tiene sentido porque luego el modificador de armadura se aplicó a la base geom en la exportación, y luego se deformó aún más por el skel anim en three.js.

Entonces, hay una exportación en funcionamiento de la mezcla marina sin modificar con el nuevo exportador en: https://github.com/antont/three.js/blob/example_skinning/examples/models/skinned/marine/marine_anims.json

Sin embargo, creo que solo tiene una de las animaciones, a continuación, necesito descubrir cómo exportar todas las animaciones con la nueva exportación.

Captura de pantalla de las opciones utilizadas:
threejs-skelexport-marineoptions

@antont ¡ gracias por investigar esto!

Configuré un canal de equipo de Slack para three.js, principalmente para trabajar en problemas de animación, pero se puede usar para cualquier cosa relacionada con tres. Este es un canal de equipo privado, por lo que las personas solo pueden unirse mediante invitación. Busco:

  • gente que conoce Python
  • personas con un conocimiento sólido de rigging en Blender
  • personas con experiencias de animación _y_ escenas dispuestas a compartir

Esto no es algo elitista. Estoy limitado en el tiempo y no tengo ancho de banda para enseñar a alguien Python o Blender, así que me disculpo si esto no parece amigable para los novatos (para eso está el IRC). Esto es para aquellos que realmente quieren cortar esto en el trasero y tienen algunas habilidades útiles para contribuir. IRC me molesta e incluso los hilos de github no son mi lugar favorito para colaborar. He estado usando Slack con otros grupos y ha sido genial.

Envíame un correo electrónico (y ten en cuenta también tu identificador de github) para una invitación
ed [punto] caspersen [arroba] gmail [punto] com

Creo que un cambio en las últimas apis de Blender ha roto el método que usa el exportador para seleccionar la acción en la malla.

El comportamiento que estoy viendo (no completamente confirmado) es que el exportador está exportando:

  1. La acción que se selecciona en la armadura que es el padre de la malla seleccionada ...
  2. Intentar exportar las otras animaciones no seleccionadas y fallar al intentar configurar la animación en la armadura para recorrer los fotogramas clave de acciones. El resultado es que la animación del paso 1 se exporta repetidamente bajo los diferentes nombres de acción ... Sin embargo, la duración parece ser correcta entre las diferentes acciones.

Creo que un cambio reciente en Blender ahora requiere que la armadura sea el objeto seleccionado real en la vista 3D para que el cambio de acción tenga efecto.

Esto podría resolverse cambiando el exportador para requerir que se seleccione la armadura para exportar, en lugar de la malla, y la acción de cambio realizada en el script puede funcionar.

Avíseme si desea más ayuda con el exportador de Blender. Tengo una experiencia decente en el scripting para pre 2.6 ..

Otro problema, tenía que tener la combinación correcta de "descanso" seleccionada tanto en los parámetros del script como en la armadura. Esto parece frágil ...

Otro problema es el "Aplicar modificadores" ...
Por lo que puedo decir, en la circunstancia normal de exportar una malla sin piel, este nunca debería ser el caso, y debería estar desactivado de forma predeterminada o tener una palanca separada para excluir las mallas sin piel.
La aplicación de modificadores hace que la armadura transforme la malla en cualquier marco en el que esté configurado actualmente.
Esto manguea la unión de la malla y demuestra los problemas que se muestran en otras partes de este hilo.

Sería bueno encontrar una manera de simplificar estos pasos.

Acabo de ejecutar algunas pruebas y confirmé que el exportador está exportando los fotogramas de la misma animación para cada animación exportada ...

Entonces, desde que exporté mi malla con la acción "caminar" seleccionada ...
Todas las animaciones en el archivo son copias de la animación "caminar" con diferentes nombres y con diferentes longitudes.

Me sorprende que el exportador no se bloquee por completo en el caso de que tenga una acción con más fotogramas que las otras animaciones en el archivo.

Una descripción sucinta de este error:

Todos los fotogramas clave de las animaciones exportadas son los de la animación seleccionada en lugar de sus propios fotogramas clave.

He encontrado al menos una solución parcial para esto ...

En "io_three \ exporter \ api \ animation.py"

al comienzo de "parse_pose_action" (alrededor de la línea 183)

insertar:

context.scene.objects.active = armature

Con este cambio, ahora puedo exportar animaciones únicas ...

Hola, gracias por este comentario + corrección. Hice el cambio recomendado y exporté con "Pose" y "Aplicar modificador" = desactivado y esto funciona muy bien.
Gracias

context.scene.objects.active = armadura

Estoy deseando probar esto.

Tenía los mismos problemas que planteé en:

https://github.com/mrdoob/three.js/issues/7165

El trabajo funcionó para mí, feliz de que realmente puedo poner en marcha múltiples animaciones. ¡Gracias por eso!

¡Excelente! ¡Me alegro de haber podido ayudar!

Vinculé algunos otros errores que pueden ser manifestaciones de esto, de nuevo a este hilo.

@manthrax (con su corrección parcial) me funciona bien exportando 'Animaciones esqueléticas: Pose' y deseleccionando 'Usar modificador durante el renderizado' en el modificador de armadura.
image

Una demostración de un personaje con 3 animaciones funcionando> http://unboring.net/lab/6326/hero_72/

¿Crees que sería posible / fácil exportar y ejecutar animaciones correctamente con el 'Modo de reposo'?
Porque en ese caso, el exportador solo escribe los fotogramas clave, no todos los fotogramas, y el archivo json pasa de tener 873kb a 174kb

Envió algunas invitaciones de Slack. No estoy seguro de qué tipo de tiempo tendré mañana, pero debería tener un par de horas el domingo.

@arturitu Puedo investigar eso ... ¿Cuál es el comportamiento en este momento para la pose de modo de descanso que es incorrecta?
¿Parece el mismo problema?

@repsac :

Exportar actualmente lleva mucho tiempo en mi máquina para animaciones grandes ...

Resulta que la gran mayoría de las veces se debe al spam de registros ...

Y simplemente apagar el registrador probablemente no solucionará esto. He tenido este problema con los scripts de Python en el pasado ... Incluso si la salida de registro está deshabilitada, la construcción de la cadena todavía tiene lugar en las declaraciones de registro.
Será necesario reescribir el script para que haga algo como "if (registro) log.debug (" bla ");" en todas las declaraciones de registro, para no incurrir en la sobrecarga de formatear todos los mensajes.

Simplemente comentando los mensajes de registro que vi en la exportación de animación / fotogramas clave, hizo que mi tiempo de exportación pasara de 2 minutos a alrededor de 5 segundos.

@arturitu Probé la exportación rest_pose ... Obtuve un archivo más pequeño, pero los enlaces del esqueleto se estropearon al intentar reproducir ... ¿Alguna idea?

Estoy probando con el archivo de mezcla marina, enlazado a una malla diferente ...

image

Animaciones esqueléticas: Descanso

image

Animaciones esqueléticas: Pose

@manthrax Creo que en Rest tiene un problema con la parte de los huesos en JSON, porque muchos de ellos tienen muchos "parent": null, mientras que en Pose los huesos tienen el valor principal correcto. Y la cantidad de huesos es diferente (en mi caso en Pose escribe 38 y en Descanso solo 28)

Pero no sé si sería necesario otro tipo de BlendCharacter.js para mostrar una animación correcta

Será necesario reescribir el script para que haga algo como "if (registro) log.debug (" bla ");" en todas las declaraciones de registro, para no incurrir en la sobrecarga de formatear todos los mensajes.

Probablemente no, esto puede ser direccionable dentro del propio módulo de registro. Mira eso ahora

Otro problema, tenía que tener la combinación correcta de "descanso" seleccionada tanto en los parámetros del script como en la armadura. Esto parece frágil ...

Lo es, y había intentado resolver esto en el pasado. Hay secciones comentadas con

armature.data.pose_position =

por todas partes. Al probarlo en el shell de Blender, funcionó pero no lo haría durante la exportación. No lo he probado en versiones recientes de Blender, así que tal vez esto se solucionó (hasta que se rompa nuevamente).

Con este cambio, ahora puedo exportar animaciones únicas ...

Buena atrapada. La conciencia contextual de Blender que requiere es tan implícita que a veces resulta enloquecedor tratar con ella.

La desactivación del registro fue fácil. Dado que el repositorio de tres es demasiado grande, creé un repositorio temporal que solo pertenecerá al exportador, todo finalmente se fusionará nuevamente.
https://github.com/repsac/io_three

Por lo que puedo decir, en la circunstancia normal de exportar una malla sin piel, este nunca debería ser el caso, y debería estar desactivado de forma predeterminada o tener una palanca separada para excluir las mallas sin piel.

Si no se puede explicar por qué debería permanecer encendido, entonces elegiría establecerlo en False si las animaciones están habilitadas. El único problema puede estar en las exportaciones de escenas, que estoy indeciso si las exportaciones de escenas deben admitir animaciones de todos modos. He tenido problemas con la forma en que Blender maneja las acciones bajo el capó que lo hacen parecer muy frágil.

@repsac Solo quería decir ... El exportador es increíble. Espero que ninguno de mis comentarios salga como una crítica ... He escrito muchos más exportadores de licuadoras primitivas en el pasado ... pero nada con el alcance de este, así que no es exagerado decir que es un gran logro.

Re Logging: todavía no estoy seguro de cómo se elimina la sobrecarga del formato del mensaje de registro simplemente deshabilitando la salida en el marco de registro, pero tal vez no entiendo los matices del marco.

Por lo que puedo decir, cualquier registro del formulario "someLoggingFunction (" texto formateado: xyz ")" SIEMPRE incurrirá en la conversión / formato del texto del mensaje, incluso si la función no emite el texto internamente

Para un registro de cero gastos generales, las cosas tendrían que tomar la forma de "Logger.log (function () {return SomeFormattedText;}), donde la función pasada solo se llama si el registro está habilitado.

. En un lenguaje verdaderamente compilado y optimizado, el compilador podría detectar que la función no es operativa y omitir las llamadas de formato, pero incluso entonces, las llamadas de formato podrían tener efectos secundarios para el resto del programa, por lo que generalmente todavía estaría incluido.

re: Exportaciones de escenas que admiten animación ...
Estoy de acuerdo en que, a corto plazo, probablemente sea demasiado pronto para seguir ese camino, PERO, si llegamos al punto en el que eso podría funcionar ... sería bastante sorprendente poder construir niveles completos con animación y exportar WYSIWYG a three.js Los molinos de viento girarían ... los ríos y las cascadas podrían animarse con rayos UV ... las plataformas podrían volar ... todo sin escribir ningún código. Algún día ...: D

Por lo que puedo decir, cualquier registro del formulario "someLoggingFunction (" texto formateado: xyz ")" SIEMPRE incurrirá en la conversión / formato del texto del mensaje, incluso si la función no emite el texto internamente

Bueno, cualquier llamada de registro debe formatearse como tal:

logger.info("foo bar %s", arg)

Entonces, la cadena no se formatea hasta que la API de registro se pasa *args bajo el capó. Cambié la lógica de registro a

https://github.com/repsac/io_three/blob/master/addons/io_three/exporter/__init__.py

        level = options.get(constants.LOGGING, constants.DISABLED)
        version = options.get('addon_version')
        if level != constants.DISABLED:
            logger.init('io_three.export.log', level=level)

https://github.com/repsac/io_three/blob/master/addons/io_three/logger.py

def _logger(func):

    def inner(*args):
        if LOGGER is not None:
            func(*args)

    return inner


<strong i="18">@_logger</strong>
def info(*args):
    LOGGER.info(*args)


<strong i="19">@_logger</strong>
def debug(*args):
    LOGGER.debug(*args)


<strong i="20">@_logger</strong>
def warning(*args):
    LOGGER.warning(*args)


<strong i="21">@_logger</strong>
def error(*args):
    LOGGER.error(*args)


<strong i="22">@_logger</strong>
def critical(*args):
    LOGGER.critical(*args)

No se debe formatear ningún mensaje. No tengo escenas grandes, así que no puedo probar esto, pero en teoría debería hacerlo, y si no es así, esa es la razón # 4576 por la que odio la programación.

Espero que ninguno de mis comentarios sea una crítica.

No difícilmente, entre las empresas de tecnología llenas de bro-grammers aquí en SF (incluido Silicon Valley) y la industria de VFX, me han dicho cosas peores en las entrevistas.

Actualmente revisando todo este hilo y tratando de armar una lista de viñetas de lo que se debe hacer específicamente. Lo publicaré cuando tenga algo para que puedas ver si está cerca.

¡Oh, excelente! Parece que tienes todo el registro cubierto. Mi pitón era un poco débil para comprender los matices de su solución.

¡Pequeño mundo, yo también estoy en SF!

Muy bueno ... en lo que puedo deducir de este hilo, es principalmente la solución de una línea, y luego resolver la ambigüedad del modo "descanso" ... todavía no estoy seguro de qué caso de uso tiene el modo de descanso. .. si conoces alguno, te agradecería que lo entendieras ...

Tendría que buscar en todos los problemas anteriores para brindarle enlaces específicos, pero en aras de una respuesta rápida, aquí hay un desglose:

  • alrededor de r66 hubo una confirmación que cambió las exportaciones de usar REST a usar el modo POSE
  • Había comenzado mi propia versión del exportador en esta época, que se convirtió en la que estamos hablando ahora, y basé mi lógica original en la lógica REST.
  • en r70 el mío era el exportador de reemplazo, ahí es cuando se desató el infierno
  • Reemplacé la lógica con soporte POSE, que luego rompió las exportaciones para otros usuarios
  • No podía entender qué demonios estaba pasando, así que implementé el cambio entre los 2

Hasta ahora parece haber 2 elementos que abordar:

1) establecer el contexto activo en la armadura

context.scene.objects.active = armature

2) no aplique modificadores a las mallas peladas

Volveré a probar el cambio automático de pose. Alguien dijo una vez que lo habían resuelto a partir de un guión diferente, pero que esa salsa secreta no llegó al exportador.

Esto funciona bien para animaciones en modo pose, siempre que su primer fotograma clave tenga la armadura configurada exactamente igual que su malla. Si intenta agregar cualquier transformación loc / rot / scale, en modo pose, y asignarlas como el primer fotograma clave, el modelo se renderiza distorsionado.

También me encontré con el problema REST / POSE (rama de desarrollo actualizada). El modelo tiene más de 40 huesos y 7 acciones. POSE funciona bien, pero el archivo exportado es enorme. REST tiene animaciones totalmente distorsionadas.

El problema parece estar ubicado en la matriz _skinIndices_ exportada. Ya sea en modo POSE o REST, la matriz _skinIndices_ es idéntica, pero el orden y, por lo tanto, los índices en la matriz _bones_ exportada son completamente diferentes. Creo que eso se debe a que __rest_bones () _ usa _armature.data.bones_ para indexar los huesos y __pose_bones_ usa _armature.pose.bones_ (api / mesh.py). Posteriormente, __skinning_data () _ siempre usa _armature.pose.bones_ independientemente de la configuración de REST / POSE. Una prueba rápida parece confirmarlo. El uso de _armature.data.bones_ en __skinning_data () _ exporta mi modelo y animaciones correctamente en modo REST.

No conozco a three.js lo suficientemente bien como para responder a esto y enviar una solución, pero ¿cuál está realmente mal _skinIndices_ o el orden de _bones_? El orden de _bones_ en REST parece ser idéntico a los índices de los grupos de vértices de Blender, lo que probablemente sea algo bueno.

Hola, este tema no se ha cerrado ni concluido sobre lo que es ahora? así que tengo otra preocupación sobre este tema: ¿alguien experimentó la reproducción simultánea de 2 animaciones? Mis pruebas no funcionan, pero no estoy seguro de la calidad de mi objeto 3D. Por otro lado, de lo que leí arriba, me pregunto si esto es realmente posible.

Para completar la inquietud: ¿Blender exporter permite NLA?

@Derived yes, mezcla de animación múltiple y trabajo de reproducción en el último three.js

Nla más generalmente solo es compatible con huesos AFAIK

Hola, gracias por tus comentarios. Sí, puedo ejecutar varias animaciones y hay una "combinación" de las animaciones; Yo uso v71 pero con la versión actualizada del exportador de licuadora (como se discutió aquí arriba). Pero permítanme explicar mejor mi observación:

Mi modelo tiene 2 animaciones aparejadas: (A1) levantar el brazo y (A2) girar la cabeza a la izquierda.

1) Reproduzca (A1) "levantar brazos" y luego deténgase en la mitad de la animación (los brazos están a la mitad)
2) jugar (A2) "girar la cabeza a la izquierda" => girar la cabeza a la izquierda PERO los brazos vuelven a la posición inicial en lugar de quedarse donde están.
3) Finalmente, si juego los 2 juntos, la cabeza gira a la izquierda y los brazos se elevan, pero no como deberían, sino como una combinación de (A1) (levantar) y (A2) (no mover los brazos) con la influencia de los huesos que no se mueven. de (A1) a los móviles de (A2) y opuestos.
Por lo tanto, miré en el archivo json y puedo ver que la animación describe las posiciones de los huesos para TODOS los huesos en cada animación. Entonces, para (A2) "girar la cabeza a la izquierda", la animación incluye las posiciones de los huesos de los brazos que simplemente no cambian (derecha, A2 no se mueven en A2). Pero, ¿cómo adivina Three.js que estas posiciones de los huesos no son significativas y no deberían influir en la ejecución de (A1)?
Espero que este ejemplo sea comprensible.

Perdiendo la cabeza por esto

Aquí está mi malla aparejada en la licuadora:

blender-cycle

Aquí está en threejs:

three-cycle

Pasé 2 días seguidos solo en la exportación. Última licuadora, últimas tres. ¿Cuál es el estado actual del exportador?

@DelvarWorld Creo que necesitas usar el exportador de Blender en la rama DEV para que funcione correctamente.

@arturitu Yo soy :(

@DelvarWorld

¿Cuál es el estado actual del exportador?

pienso esto

repsac no fue asignado por mrdoob el 30 de diciembre de 2015

podría ser el problema. Obviamente necesita algo de amor.

Podría ir en busca de los diversos errores que se han informado últimamente. ¿Puede compartir un archivo para reproducir este número (cuanto más simple, mejor)?

Por conveniencia, también publicaré esto aquí. Intenté exportar un modelo de prueba desde @DelvarWorld y

@phfatmonkey
https://github.com/mrdoob/three.js/pull/8412#issuecomment -210675561 este?

Excelente trabajo para solucionar todos estos problemas: +1:!

Cuando haya terminado de parchear, ¿le importaría abrir un ticket nuevo con descripciones o enlaces a los problemas de exportadores restantes, recién creados o descubiertos?

Es increíblemente difícil hacer un seguimiento de las cosas cuando se publican en algún lugar de las entradas existentes.

Idealmente, uno por caso (si aún no existe) y un maestro "Problemas del exportador de Blender" (o algo así) que haga referencia a todos ellos.

Lo que puedo recordar de la parte superior de mi cabeza es

  • A los normales les faltaba rotación (fijo)
  • Problemas de animación al exportar una jerarquía de escenas. ¿Funciona ahora?
  • Luego está el problema de la pose del resto mencionado en su publicación.
  • Luego está el problema de la piel / fotogramas clave (¿mensajes de error?)
  • ... (había más, creo)

¡Por supuesto! Es una gran idea. Trataré de hacerlo este fin de semana
de lo contrario, el lunes cuando vuelva a la oficina.
El 15 de abril de 2016 a las 17:12, "tschw" [email protected] escribió:

@phfatmonkey https://github.com/phfatmonkey

8412 (comentario)

https://github.com/mrdoob/three.js/pull/8412#issuecomment -210675561
¿éste?

¡Excelente trabajo para solucionar todos estos problemas [imagen:: +1:]!

Cuando haya terminado de parchear, ¿le importaría abrir un ticket nuevo
descripción o enlace al resto, recién creado o descubierto
problemas del exportador?

Es increíblemente difícil hacer un seguimiento de las cosas cuando se publican
en algún lugar de los billetes existentes.

Idealmente, uno por caja (si aún no existe) y un maestro "Blender Exporter
Problemas "(o algo así) haciendo referencia a todos ellos.

Lo que puedo recordar de la parte superior de mi cabeza es

  • A los normales les faltaba rotación (fijo)
  • Problemas de animación al exportar una jerarquía de escenas. ¿Funciona ahora?
  • Luego está el problema de la pose del resto mencionado en su publicación.
  • Luego está el problema de la piel / fotogramas clave (¿mensajes de error?)
  • ...

-
Estás recibiendo esto porque te mencionaron.
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/mrdoob/three.js/issues/6050#issuecomment -210693332

¿Qué pasa con la edición de animación no lineal que se puede hacer en Blender? ¿No hay nadie interesado en esta pregunta? Expliqué el punto en un mensaje anterior pero no recibí ningún comentario.

@derivou
¿Qué mensaje?

Cuando necesite un código personalizado, alguien tendrá que escribirlo. Una contribución podría ser bienvenida ...

Aquí el mensaje anterior fechado el 5 de febrero expliqué el problema al combinar varias animaciones.
Me encantaría ayudar a desarrollarlo, pero creo que primero se requieren algunas discusiones para compartir ideas y discutir cómo implementarlo. Por lo tanto, abrí un elemento de sugerencia "Animación no lineal" # 7913

Este es un problema largo y confesaré que no he leído todo, pero si el problema sigue siendo el descrito por el OP (es decir, necesita una forma de animar un personaje en Mixamo y cargar en three.js), entonces puede lograr esto con el exportador glTF Blender y THREE.GLTFLoader. Aquí está mi flujo de trabajo: https://medium.com/@donmccurdy/creating -animated-gltf-characters-with-mixamo-and-blender-728dc120e678

Alternativamente, puede exportar como FBX desde Mixamo y cargar directamente usando FBXLoader.
A partir de la última versión (R89) debería funcionar sin problemas.

¿Fue útil esta página
0 / 5 - 0 calificaciones