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.
Checking the stable version of the documentation...
Usando SoftBody3D
Corpos macios (ou dinâmica de corpos macios) simulam o movimento, a mudança de forma e outras propriedades físicas de objetos deformáveis. Por exemplo, isso pode ser usado para simular tecido ou para criar personagens mais realistas.
Considerações do motor de física
O suporte para soft bodies é geralmente mais robusto no Jolt Physics em comparação com o GodotPhysics3D. Você pode alternar os motores de física alterando Physics > 3D > Physics Engine nas Configurações de Projeto. Projetos criados no Godot 4.6 e posteriores usam o Jolt Physics por padrão, mas projetos existentes terão que ser alterados manualmente.
Além disso, a interpolação de física atualmente não afeta soft bodies. Se você quiser que a simulação de soft body pareça mais fluida em taxas de quadros mais altas, terá que aumentar a configuração de projeto Physics > Common > Physics Ticks per Second, o que acarreta um custo de desempenho.
Configuração básica
Um nó SoftBody3D é usado para simulações de corpo macio. Ao contrário de outros nós de corpo físico como RigidBody3D ou StaticBody3D, ele não possui um nó filho CollisionShape3D ou MeshInstance3D. Em vez disso, a forma de colisão é derivada da malha atribuída ao nó. Esta malha também é usada diretamente para renderização, o que significa que você não precisa criar nenhum nó filho para uma configuração funcional e visível.
Vamos criar um cubo saltitante para demonstrar a configuração de um corpo mole.
Crie uma nova cena com um nó Node3D como raiz. Em seguida, crie un nó SoftBody3D. Adicione um BoxMesh na propriedade Mesh do nó no inspetor e aumente a subdivisão da malha para a simulação.
O nível de subdivisão determina o nível de precisão da deformação, com valores mais altos permitindo deformações menores e mais detalhadas, ao custo do desempenho. Neste exemplo, definiremos como 3 em cada eixo:
Ajustando as propriedades do BoxMesh no inspetor
Agora, defina os parâmetros para obter o tipo de corpo macio que você deseja. Tente manter a Simulation Precision acima de 5; caso contrário, o corpo macio pode colapsar.
Ajustando propriedades de simulação SoftBody3D no inspetor
Nota
Manuseie alguns parâmetros com cuidado, pois alguns valores podem levar a resultados estranhos. Por exemplo, se a forma não estiver completamente fechada e você definir a pressão para um valor maior que 0.0, o corpo macio voará por aí como uma sacola plástica sob um vento forte.
Execute a cena para visualizar a simulação. Aqui está um exemplo de como deve ser a aparência:
Dica
Para melhorar o resultado da simulação, aumente a Simulation Precision. Isso pode proporcionar uma melhoria significativa ao custo do desempenho.
Alternativamente, você pode aumentar a configuração de projeto Physics > Common > Physics Ticks per Second, o que também afetará a qualidade da simulação do soft body.
Simulação de capa
Vamos fazer uma capa na demo do Platformer 3D.
Nota
Você pode baixar a demonstração do Platformer 3D no GitHub ou na Asset Library.
Abra a cena player/player.tscn, adicione um nó SoftBody3D abaixo do nó raiz e, em seguida, atribua um recurso PlaneMesh a ele em sua propriedade Mesh.
Abra as propriedades do PlaneMesh e defina o tamanho para (0.5, 1.0), depois defina Subdivide Width e Subdivide Depth para 5. Ajuste a posição e a rotação do nó SoftBody3D para que o plano pareça estar próximo às costas do personagem. Você deve terminar com algo assim:
Subdividindo o PlaneMesh e posicionando-o nas costas do personagem
Dica
A subdivisão gera uma malha mais tesselada para melhores simulações. No entanto, níveis de subdivisão mais altos impactarão o desempenho. Tente encontrar um equilíbrio entre desempenho e qualidade. Isso depende do número de simulações de corpo macio que você espera que estejam ativas ao mesmo tempo, bem como da distância entre a câmera e o corpo macio.
Adicione um nó BoneAttachment3D sob o nó do esqueleto e selecione o osso Neck para prender a capa ao esqueleto do personagem.
Nota
O nó BoneAttachment3D é usado para anexar objetos a um osso de uma armadura. O objeto anexado seguirá o movimento do osso. Por exemplo, a arma empunhada por um personagem pode ser anexada dessa forma.
Não mova o nó SoftBody3D para baixo do nó BoneAttachment3D por enquanto. Em vez disso, configuraremos seus pontos fixados (pinned points) para seguir o nó BoneAttachment3D.
Configurando o nó BoneAttachment3D no inspetor
Para criar pontos fixados, selecione os vértices superiores no nó SoftBody3D. Um ponto fixado aparece em azul no viewport do editor 3D:
Fixando os pontos do SoftBody3D no inspetor
As articulações fixadas podem ser encontradas na seção Attachments do SoftBody3D, que fica sob a seção Collision que deve ser expandida primeiro. Escolha o nó BoneAttachment3D como o Spatial Attachment Path para cada articulação fixada. As articulações fixadas agora estão anexadas ao pescoço.
Dica
Para atribuir as propriedades mais rapidamente, você pode arrastar e soltar o nó BoneAttachment3D do painel da árvore de cena para o campo da propriedade Spatial Attachment Path.
Note que você pode ter que desmarcar e selecionar novamente o nó SoftBody3D para que a seção Attachments apareça.
Configurando os pontos fixados para serem anexados ao nó BoneAttachment3D no inspetor do SoftBody3D
O último passo é evitar o recorte (clipping) adicionando o CharacterBody3D Player (nó raiz da cena) à propriedade Parent Collision Ignore do SoftBody3D.
Configurando a exceção de colisão no inspetor do SoftBody3D
Jogue a cena e a capa deve simular corretamente.
Resultado final ao executar a cena principal do projeto
Isso cobre as configurações básicas de uma simulação de soft body. Experimente com os parâmetros para alcançar o efeito que você deseja ao criar seu jogo.
Nota
A capa não aparecerá quando vista de certos ângulos devido ao backface culling (descarte de faces traseiras). Para resolver isso, você pode desabilitar o backface culling atribuindo um novo StandardMaterial3D e definindo seu modo de corte (cull mode) como Disabled. Isso fará com que o material renderize ambos os lados do plano.
Usando malhas importadas
A opção Save to File na janela de Configurações Avançadas de Importação permite salvar uma malha como um arquivo de recurso independente que você pode anexar aos nós SoftBody3D.
Você também pode querer desativar a geração de LOD ou alterar as opções de geração de LOD ao importar uma malha para uso com SoftBody3D. As configurações padrão de importação produzirão um LOD que mescla faces adjacentes que são quase planas entre si, mesmo a distâncias de renderização muito próximas. Isso funciona bem para malhas estáticas, mas geralmente é indesejável para uso com SoftBody3D se você quiser que essas faces sejam capazes de dobrar e se mover umas em relação às outras, em vez de serem renderizadas como um único plano.
Veja Configuração de importação e Nível de detalhe de malha (LOD) para mais detalhes.