Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Reindirizzare gli scheletri 3D

Per condividere le animazioni tra più scheletri

Godot ha tracce 3D di posizione/rotazione/scala (che in questo documento sono dette tracce di "Trasformazione") con percorsi di nodi verso le ossa da animare in uno scheletro. Ciò significa che non è possibile condividere le animazioni tra più scheletri solo utilizzando gli stessi nomi delle ossa.

Godot consente a ogni osso di avere una relazione genitore-figlio e può avere rotazione e scala, oltre alla posizione, il che significa che gli ossi che condividono lo stesso nome possono comunque avere valori di trasformazione diversi.

Lo scheletro memorizza i valori di trasformazione necessari per la posa predefinita come Bone Rest. Se Bone Pose è uguale a Bone Rest, significa che lo scheletro si trova nella posa predefinita.

Nota

Godot 3 e Godot 4 hanno comportamenti diversi per quanto riguarda la posizione delle ossa (Bone Pose). In Godot 3, la posizione delle ossa è relativa al riposo delle ossa (Bone Rest), mentre in Godot 4 include anche il riposo delle ossa. Consultare questo articolo per maggiori informazioni.

I modelli scheletrici hanno diversi Bone Rest a seconda dell'ambiente da cui sono stati esportati. Ad esempio, le ossa di un modello glTF esportato da Blender hanno "Edit Bone Orientation" come rotazione del Bone Rest. Tuttavia, esistono modelli scheletrici senza alcuna rotazione del Bone Rest, come ad esempio i modelli glTF esportati da Maya.

To share animations in Godot, it is necessary to match Bone Rests as well as Bone Names to remove unwanted tracks in some cases. You can do that using the scene importer.

Opzioni per il reindirizzamento

Mappa d'ossa

Selezionando il nodo Skeleton3D nel menu avanzato di importazione della scena, sul lato destro apparirà un menu contenente la sezione "Retarget". La sezione Retarget ha una singola proprietà chiamata bone_map.

../../_images/retargeting1.webp

Dopo aver selezionato il nodo Skeleton, configura innanzitutto un nuovo BoneMap e un SkeletonProfile. Godot include una predisposizione chiamata SkeletonProfileHumanoid per i modelli umanoidi. Questo tutorial presuppone che stia utilizzando SkeletonProfileHumanoid.

Nota

Se hai bisogno di un profilo diverso da SkeletonProfileHumanoid, puoi esportare un SkeletonProfile dall'editor selezionando uno Skeleton3D e utilizzando il menu Skeleton3D nella barra degli strumenti della viewport 3D.

Utilizzando SkeletonProfileHumanoid, una mappatura automatica verrà effettuata quando SkeletonProfile è impostato. Se la mappatura automatica non funziona correttamente, le ossa si possono mappare manualmente.

../../_images/retargeting2.webp

Eventuali mappature mancanti di relazioni padre-figlio, duplicate o errate saranno indicate da un pulsante magenta/rosso (a seconda delle impostazioni dell'editor). Ciò non blocca il processo di importazione, ma avverte che le animazioni potrebbero non essere condivise correttamente.

Nota

La mappatura automatica riconosce schemi per i nomi delle ossa. Pertanto, consigliamo di usare nomi comuni in inglese per le ossa.

Dopo aver configurato la bone_map, sono disponibili diverse opzioni nelle sezioni seguenti.

../../_images/retargeting3.webp

Rimuovi tracce

Se importi risorse come AnimationLibrary che saranno condivise, consigliamo di abilitare queste opzioni. Tuttavia, se importi risorse come scene, queste opzioni si dovrebbero disabilitare in alcuni casi. Ad esempio, se importi un personaggio con accessori animati, queste opzioni potrebbero non far animare gli accessori.

Tranne trasformazione d'ossa

Rimuove tutte le tracce tranne la traccia di trasformazione delle ossa dalle animazioni.

Posizioni non importanti

Rimuove le tracce di posizione diverse da root_bone e scale_base_bone definite in SkeletonProfile dalle animazioni. In SkeletonProfileHumanoid, ciò significa rimuovere le tracce di posizione diverse da "Root" e "Hips". A partire da Godot 4, le animazioni includono Bone Rest nel valore Transform. Se si disabilita questa opzione, l'animazione potrebbe modificare la forma del corpo in modo imprevedibile.

Ossa non mappate

Rimuove le tracce di trasformazione delle ossa non mappate dalle animazioni.

Rinominatore di ossa

Rinomina ossa

Rinomina le ossa mappate.

Nodo univoco

Rende lo scheletro un nodo univoco con il nome specificato in skeleton_name. Ciò consente di unificare i percorsi delle tracce di animazione indipendentemente dalla gerarchia della scena.

Rest Fixer

Le pose di riferimento definite in SkeletonProfileHumanoid hanno le seguenti regole:

  • L'umanoide è in T-pose

  • L'umanoide è rivolto verso +Z nel sistema di coordinate Y-su destrorso

  • L'umanoide non dovrebbe avere una trasformazione, come Node

  • Dirige l'asse +Y dall'articolazione padre all'articolazione figlia

  • La rotazione +X piega l'articolazione come un muscolo che si contrae

Queste regole sono definizioni pratiche per la fusione di animazioni e la cinematica inversa (IK). Se il modello non corrisponde a questa definizione, è necessario correggerlo con queste opzioni.

Applica trasformazione del nodo

Se la risorsa non viene esportata correttamente per essere condivisa, lo scheletro importato potrebbe avere una trasformazione come nodo. Ad esempio, un file glTF esportato da Blender senza l'opzione "Apply Transform" è un caso tipico. Il modello sembra corrispondere alla definizione, ma le trasformazioni interne sono diverse dalla definizione. Questa opzione corregge tali modelli applicando le trasformazioni durante l'importazione.

Nota

Se la scena importata contiene oggetti diversi dagli scheletri, questa opzione potrebbe avere un effetto negativo.

Normalizza le tracce di posizione

La traccia di posizione serve principalmente per il movimento del modello, ma condividere l'animazione di movimento tra modelli con altezze diverse può far apparire uno slittamento, dovuto alla differenza nella lunghezza del passo. Questa opzione normalizza i valori della traccia di posizione in base all'altezza di scale_base_bone. L'altezza di scale_base_bone è memorizzata nello scheletro come motion_scale e i valori normalizzati della traccia di posizione sono moltiplicati per tale valore durante la riproduzione. Se questa opzione è disabilitata, la traccia di posizione non è normalizzata e il valore di motion_scale dello scheletro è sempre importato come 1.0.

Con SkeletonProfileHumanoid, scale_base_bone è "Hips", quindi l'altezza di Hips (i fianchi) è utilizzata come motion_scale.

Sovrascrivi asse

Unifica i riposi delle ossa dei modelli sovrascrivendoli per farli corrispondere alle pose di riferimento definite nel file SkeletonProfile.

Nota

This is the most important option for sharing animations in Godot 4, but be aware that this option can produce horrible results if the original Bone Rest set externally is important. If you want to share animations with keeping the original Bone Rest, consider to use the Realtime Retarget Module.

Correggi silhouette

Tenta di far corrispondere la silhouette del modello a quella delle pose di riferimento definite nello SkeletonProfile, come ad esempio la posa a T. Questo metodo non è in grado di correggere silhouette troppo diverse e potrebbe non funzionare per correggere il rollio delle ossa.

Con SkeletonProfileHumanoid, questa opzione non deve essere abilitata per i modelli in posa a T, ma dovrebbe esserlo per i modelli in posa ad A. Tuttavia, in tal caso, i risultati corregendo i piedi potrebbero essere imprecisi a seconda dell'altezza del tallone del modello, quindi potrebbe essere necessario aggiungere i nomi delle ossa del SkeletonProfile che non si desidera correggere nell'array filter, come nell'esempio seguente.

../../_images/retargeting4.webp

Inoltre, per i modelli con ginocchia o piedi piegati, potrebbe essere necessario regolare l'altezza di scale_base_bone. A tale scopo, è possibile usare l'opzione base_height_adjustment.