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.

Retargeting de Esqueletos 3D

Para compartilhar animações entre múltiplos Skeletons

O Godot possui faixas 3D de Posição/Rotação/Escala (que este documento chama de faixas de "Transform") com Nodepaths para ossos para a animação de ossos de esqueleto (Skeleton). Isso significa que você não pode compartilhar animações entre múltiplos Skeletons apenas usando os mesmos nomes de ossos.

O Godot permite que cada osso tenha uma relação de pai e filho e possa ter rotação e escala, além de posição, o que significa que ossos que compartilham um nome ainda podem ter valores de Transform diferentes.

O Skeleton armazena os valores de Transform necessários para a pose padrão como Bone Rest (Posição de Descanso do Osso). Se a Bone Pose for igual ao Bone Rest, significa que o Skeleton está na pose padrão.

Nota

O Godot 3 e o Godot 4 possuem comportamentos diferentes para a Bone Pose. No Godot 3, a Bone Pose é relativa ao Bone Rest, mas no Godot 4, ela inclui o Bone Rest. Veja este artigo para mais informações.

Modelos de esqueleto possuem diferentes Bone Rests dependendo do ambiente do qual foram exportados. Por exemplo, os ossos de um modelo glTF gerado pelo Blender têm a "Edit Bone Orientation" como a rotação do Bone Rest. No entanto, existem modelos de esqueleto sem nenhuma rotação de Bone Rest, como o modelo glTF gerado pelo Maya.

Para compartilhar animações no Godot, é necessário fazer a correspondência dos Bone Rests, bem como dos Bone Names, para remover faixas indesejadas em alguns casos. Você pode fazer isso usando o importador de cena.

Opções para Retargeting

Bone Map (Mapa de Ossos)

Quando você seleciona o nó Skeleton3D no menu de importação de cena avançada, um menu aparecerá no lado direito contendo a seção "Retarget". A seção Retarget possui uma única propriedade bone_map.

../../_images/retargeting1.webp

Com o nó Skeleton selecionado, primeiro configure um novo BoneMap e um SkeletonProfile. O Godot possui uma predefinição chamada SkeletonProfileHumanoid para modelos humanoides. Este tutorial prossegue com a suposição de que você está usando o SkeletonProfileHumanoid.

Nota

Se você precisar de um perfil que seja diferente do SkeletonProfileHumanoid, você pode exportar um SkeletonProfile a partir do editor selecionando um Skeleton3D e usando o menu Skeleton3D na barra de ferramentas do viewport 3D.

Quando você usa o SkeletonProfileHumanoid, o mapeamento automático (auto-mapping) será realizado assim que o SkeletonProfile for definido. Se o mapeamento automático não funcionar bem, você pode mapear os ossos manualmente.

../../_images/retargeting2.webp

Qualquer mapeamento ausente, duplicado ou com relação de pai e filho incorreta será indicado por um botão magenta / vermelho (dependendo da configuração do editor). Isso não bloqueia o processo de importação, mas avisa que as animações podem não ser compartilhadas corretamente.

Nota

O mapeamento automático usa correspondência de padrões para os nomes dos ossos. Portanto, recomendamos o uso de nomes comuns em inglês para os ossos.

Depois de configurar o bone_map, várias opções ficam disponíveis nas seções abaixo.

../../_images/retargeting3.webp

Remover Trilhas

Se você importar recursos como uma AnimationLibrary que será compartilhada, recomendamos ativar essas opções. No entanto, se você importar recursos como cenas, elas devem ser desativadas em alguns casos. Por exemplo, se você importar um personagem com acessórios animados, essas opções podem fazer com que os acessórios não sejam animados.

Exceto Transformações de Ossos

Remove todas as faixas das animações, exceto a faixa de transformação do osso.

Posições Pouco Importantes

Remove faixas de Posição diferentes de root_bone e scale_base_bone definidas em SkeletonProfile das animações. Em SkeletonProfileHumanoid, isso significa remover faixas de Posição que não sejam "Root" (Raiz) e "Hips" (Quadris). Desde o Godot 4, as animações incluem Bone Rest (Descanso do Osso) no valor de Transformação. Se você desativar esta opção, a animação pode alterar a forma do corpo de forma imprevisível.

Unmapped Bones (Ossos não mapeados)

Remove as faixas de Transform de ossos não mapeados das animações.

Renomeador de Ossos

Renomear Ossos

Renomeia os ossos mapeados.

Nó Único

Torna o Skeleton um nó único com o nome especificado em skeleton_name. Isso permite que os caminhos das faixas de animação sejam unificados independentemente da hierarquia da cena.

Corretor de Pose de Repouso

As poses de referência definidas em SkeletonProfileHumanoid possuem as seguintes regras:

  • O humanoide está em pose T

  • O humanoide está voltado para +Z no Sistema de Coordenadas Y-UP de Mão Direita

  • O humanoide não deve ter um Transform como Nó

  • Direciona o eixo +Y da articulação pai para a articulação filho

  • +A rotação X flexiona a articulação como um músculo se contraindo

Essas regras são definições convenientes para animação de mesclagem (blend) e Cinemática Inversa (IK). Se o seu modelo não corresponder a essa definição, você precisará corrigi-lo com essas opções.

Aplicar Transformação de nó

Se o asset não for exportado corretamente para compartilhamento, o Skeleton importado pode ter um Transform como um Nó. Por exemplo, um glTF exportado do Blender sem nenhum "Apply Transform" executado é um desses casos. Parece que o modelo corresponde à definição, mas os Transforms internos são diferentes da definição. Essa opção corrige tais modelos aplicando os Transforms na importação.

Nota

Se a cena importada contiver objetos que não sejam Skeletons, essa opção pode ter um efeito negativo.

Normalizar faixas de posição

A faixa de Posição é usada principalmente para o movimento do modelo, mas compartilhar a animação de movimento entre modelos com alturas diferentes pode causar a aparência de deslizamento devido à diferença no comprimento da passada. Essa opção normaliza os valores da faixa de Posição com base na altura do scale_base_bone. A altura do scale_base_bone é armazenada no Skeleton como o motion_scale, e os valores normalizados da faixa de Posição são multiplicados por esse valor durante a reprodução. Se essa opção estiver desativada, as faixas de Posição não serão normalizadas e o motion_scale do Skeleton será sempre importado como 1.0.

Com SkeletonProfileHumanoid, o scale_base_bone é "Hips", portanto a altura dos Hips é usada como o motion_scale.

Sobregravar Eixo (Overwrite Axis)

Unifica os Bone Rests dos modelos sobrescrevendo-os para corresponder às poses de referência definidas no SkeletonProfile.

Nota

Esta é a opção mais importante para compartilhar animações no Godot 4, mas esteja ciente de que esta opção pode produzir resultados horríveis se o Bone Rest original definido externamente for importante. Se você deseja compartilhar animações mantendo o Bone Rest original, considere usar o Realtime Retarget Module.

Corrigir Silhueta (Fix Silhouette)

Tenta fazer com que a silhueta do modelo corresponda à das poses de referência definidas no SkeletonProfile, como a Pose T. Isso não pode corrigir silhuetas que sejam muito diferentes e pode não funcionar para corrigir a rotação do osso (bone roll).

Com SkeletonProfileHumanoid, esta opção não precisa estar ativada para modelos em pose T, mas deve estar ativada para modelos em pose A. No entanto, nesse caso, os resultados dos pés corrigidos podem ser ruins dependendo da altura do calcanhar do modelo, portanto pode ser necessário adicionar os nomes dos ossos do SkeletonProfile que você não deseja que sejam corrigidos no array filter, como no exemplo abaixo.

../../_images/retargeting4.webp

Além disso, para modelos com joelhos ou pés dobrados, pode ser necessário ajustar la altura do scale_base_bone. Para isso, você pode usar a opção base_height_adjustment.