2012-11-22 8 views
8

Attualmente sto lavorando su test di animazione scheletrica in three.js. Ho un modello semplice che si anima perfettamente nel frullatore. Fondamentalmente si compone di tre cubi sovrapposti, piegati.Modello con animazione delle ossa (esportazione blender) che si anima in modo errato in three.js

Quando esporto il file di frullatore sul three.js utilizzando il plugin di esportazione del blender con Blender V2.64, l'animazione nel contesto webGl appare diversa come se la skinweight fosse errata.

WebGL-demo: http://rainbowrangers.de/threejs/animation_test01/

Blender-File: http://rainbowrangers.de/threejs/animation_test01/model/animation_test01.blend

Che cosa devo fare per ottenere il risultato corretto in Three.js?

risposta

10

Sono la persona che hai citato dalla discussione github. Recentemente ho sperimentato questa pipeline, ovvero le animazioni di Blender bone in threejs, e ho scoperto che è molto difficile trovare un processo affidabile che funzioni sempre.

Sul mio blog, ho compilato una lista di 'suggerimenti' che mi ha permesso di raggiungere il successo in alcune occasioni:

http://dev.mothteeth.com/2012/10/threejs-blender-exporting-skeletal-animations/

Per riassumere, le cose più importanti che ho trovato sono stati:

Elimina il modificatore di armatura prima dell'esportazione, altrimenti l'animazione sarà tutta incasinata.

Verificare che i gruppi di vertici siano assegnati correttamente alle ossa. (In Blender, puoi utilizzare pesi automatici dell'osso)

Inserisci tutte le ossa nel primo e nell'ultimo fotogramma dell'animazione. (Come hai scoperto, se hai solo le chiavi per le ossa che hai modificato, ThreeJS non dedurrà nulla sugli altri, e le cose saranno interrotte.)

Anche seguendo queste linee guida, non riesco a ottenere le cose lavorare in modo coerente, e abbiamo preso in considerazione l'utilizzo di bersagli di morph finchè la libreria non matura un po 'di più. Le dimensioni dei file per gli obiettivi di metamorfosi sono molto più grandi, ma a mio parere sembrano essere un'opzione più affidabile, nella mia esperienza.

+1

Grazie! Avevo le ossa che ruotavano dal perno sbagliato e sembrava non obbedire ai genitori. ** "Elimina il modificatore di armatura prima dell'esportazione" ** è stata la chiave per me. Ottimo articolo! – jozxyqk

+0

Felice di poter aiutare :) – null

2

Dopo un sacco di scavare ho finalmente trovato la risposta in una delle discussioni Three.js GitHub:.

"inserire un fotogramma chiave completo per tutte le ossa all'inizio e alla fine dell'animazione I ho scoperto che senza il primo fotogramma chiave l'animazione sarebbe stata leggermente distorta, e senza quello alla fine avrei perso parti dell'animazione verso la fine. "

Fonte: https://github.com/mrdoob/three.js/issues/2106

Questo era esattamente quello che è successo al nostro rendering. Mettiamo solo i fotogrammi chiave impostati per le ossa che stanno cambiando e non per quelle statiche.

+0

Sono davvero impaziente di condividere le informazioni sulla pipeline di Blender/ThreeJS. Sentiti libero di metterti in contatto se desideri scambiare i puntatori o se hai delle grandi scoperte su come farlo funzionare in modo affidabile. – null

+0

Ti ho appena inviato una email per metterti in contatto. Mi piacerebbe scambiare qualche conoscenza. – Patrick

2

Ho anche scoperto che per far funzionare correttamente il modello esportato, l'esportazione dovrebbe essere fatta al frame 0 in Blender.

Un'altra cosa che ha risolto un problema che ho riscontrato non era quella di ridimensionare il modello dopo averlo esportato. Ciò significa che il modello non può essere ridimensionato nel file JSON e probabilmente nel codice direttamente.

Uso Three.js R56

Problemi correlati