Rumo ao multicorpo: constraints, Jolt e os limites do Godot
Montei este roadmap pra semana de 27 de julho, mas não cheguei a desenvolver — então estico o mesmo arco pelas duas semanas até hoje (10 ago) e dobro dentro os pontos novos da reunião de hoje. O norte não mudou: entender, não construir. O professor foi explícito — devagar.
Traduzindo a direção
A pergunta arquitetural que ficou aberta: raycast (força de penalidade) vs. multicorpo (juntas e constraints). A direção agora é clara — explorar o caminho multicorpo, entendendo como o motor de física do Godot liga corpos rígidos e restringe o movimento entre eles.
O ponto central: o Godot usa o Jolt Physics por baixo. Então a quinzena é sobre três camadas — o conceito (o que é multicorpo e constraint), a ferramenta (como o Jolt resolve constraints) e a ponte (o que o Godot me deixa usar do Jolt, e o que fica de fora).
Achado que já responde uma das perguntas
O Godot 4.6 tornou o Jolt o motor de física 3D padrão. Mas a documentação oficial marca o módulo Jolt embutido como experimental e sem paridade total com a antiga extensão godot-jolt.
Na prática, isso é a "limitação do Godot em relação às constraints do Jolt": pela API Joint3D eu acesso os tipos padrão de junta, mas não os recursos ricos do Jolt (limites suaves, juntas quebráveis, iterações de solver por junta, nós tipo JoltHingeJoint3D) — e a VehicleConstraint própria do Jolt não é exposta.
A sprint, semana a semana
O arco de 27/jul esticado nas duas semanas: primeiro o conceito, depois a prática mínima, depois o Jolt por dentro — e fecha na reunião de hoje, que abre a próxima frente.
O que é "multicorpo" (multibody)
Definir em uma frase: vários corpos rígidos + juntas que restringem o movimento relativo entre eles. Anotar a diferença essencial pro raycast — lá eu calculo e aplico forças; aqui eu declaro relações e o solver calcula as forças. Escrever, com minhas palavras, por que o VehicleBody3D e o raycast já eram "meio multicorpo escondido".
Constraint = tirar graus de liberdade
Fixar o conceito de grau de liberdade (GDL): um corpo rígido livre no 3D tem 6 GDL (3 translação + 3 rotação). Toda junta é "quantos GDL eu removo": a dobradiça deixa só 1 rotação; a prismática deixa só 1 translação. Mapear os tipos de junta do Godot (tabela abaixo).
Dois corpos + uma junta no Godot
Numa cena isolada (não tocar no rover): dois RigidBody3D + um HingeJoint3D ligando eles. Confirmar em Project Settings → Physics → 3D que o motor é Jolt. Rodar e só observar o corpo obedecer a restrição sem eu aplicar nenhuma força. Uma junta, dois corpos — só isso.
Como o Jolt resolve + o que o Godot esconde
Ler (sem implementar) como o Jolt organiza constraints: um solver de impulsos que, a cada passo, corrige velocidades pra manter a restrição — o oposto do "empurrão por penalidade". Explorar o repositório (Physics/Constraints, Physics/Vehicle, Samples) e listar o que o Godot não expõe do Jolt.
Mapear pro rover (no papel) + documentar
Só no papel: qual junta modela cada parte do rover (roda = hinge, curso da suspensão = slider, chassi = corpo-mãe). Escrever a entrada docs/multicorpo/visao-geral com o que aprendi e montar o briefing da quinzena.
Nova direção: sample do Jolt → Godot
A reunião de hoje aterrissou o conceito em tarefas concretas — comparar e replicar um sample do Jolt no Godot, ler a doc do GDExtension e espelhar o GDChrono do professor pro Jolt. Detalhado na próxima seção.
Novos pontos · reunião de 10 ago
Do conceito ao sample rodando
- Comparativo Jolt × Godot. Pegar um dos
Samplesdo Jolt, rodar, e mapear feature a feature o que o Jolt tem e o Godot não expõe. Vira o comparativo formal que fundamenta a decisão arquitetural. - Replicar um sample no Godot. Escolher um sample do Jolt e tentar reconstruir o mesmo cenário no Godot com os nós
Joint3D— medir até onde o Godot chega e onde bate no limite do achado acima. - Ler a doc do GDExtension. Entender como estender o Godot em C++ — é a ponte pra, um dia, expor o que o Jolt tem e o Godot esconde (ler a doc, não construir uma extensão de produção).
- Espelhar o GDChrono do professor pro Jolt. O professor fez uma GDExtension ligando o Godot ao Project Chrono; estudar como ele fez e fazer o mesmo raciocínio pro Jolt. Casa direto com o ponto 2 — é a mesma proposta de pegar um sample e replicar, só que pela via da extensão.
Esta quinzena eu NÃO vou
Porque "explorar" vira "reconstruir tudo" com uma facilidade assustadora.
- Construir o rover de 4/6 rodas em multicorpo
- Trocar ou aposentar o protótipo raycast
- Integrar a ExoPhysics ou mexer no
sinkage - Escrever uma GDExtension de produção (ler a doc, sim)
- Implementar a
VehicleConstraintdo Jolt - Modelar suspensão + direção juntas
Cola conceitual · penalidade vs. constraint
Raycast
Eu empurro. A cada frame eu calculo as forças (mola-amortecedor, tração, lateral) e aplico no corpo. O corpo é livre; o comportamento certo emerge das forças que eu escolho.
A favor: controle total, física explícita, troca fácil pra ExoPhysics. Contra: instabilidade do integrador, eu reimplemento tudo.
Multicorpo
Eu restrinjo. Eu declaro uma relação geométrica ("estes dois corpos giram juntos neste eixo") e o solver do Jolt calcula os impulsos que mantêm a relação. Não empurro — amarro.
A favor: junções rígidas estáveis, suspensão/direção "de graça". Contra: menos controle da física interna, preso ao que o Godot expõe.
Referência · juntas do Godot e graus de liberdade
Guia de exploração · repositórios
HingeConstraint, SliderConstraint, SixDOFConstraint — reparar nos parâmetros de cada uma (eixo, limites, motor). É o "de verdade" por trás dos nós do Godot.WheeledVehicleConstraint. O objetivo é só perceber que o Jolt já tem um modelo de veículo pronto — e que ele usa raycast nas rodas por baixo. A ponte entre meus dois mundos.Para o dossiê e a próxima reunião
O que sai desta quinzena
- Entrada no Docusaurus — ✔ publicada em Constraints, juntas e o Jolt: o quadro penalidade × constraint, a tabela de GDL, o experimento com
HingeJoint3De a nota Godot↔Jolt. - Cena de teste versionada — ✔ feita: os dois corpos + hinge em
Teste_junta/, com os prints do pêndulo no dossiê. - Comparativo Jolt × Godot — a partir de um sample: o que o Jolt entrega e o Godot não expõe, feature a feature.
- Sample replicado no Godot — a tentativa de reconstruir o cenário do Jolt, mais o paralelo GDChrono → Jolt via GDExtension.
- Posição escrita sobre a decisão arquitetural — com o dado novo: o Godot não expõe a
VehicleConstraintdo Jolt, e o próprio Jolt mistura raycast + constraint.