Pular para o conteúdo principal
quinzena · 27 jul – 10 agoengine · Godot 4.6 · Joltparadigma · constraint (multicorpo)cena · TesteJunta (sandbox)escopo · entender, não construir
Estudo · rumo ao multicorpo

Quando quem calcula a força deixa de ser eu.

O protótipo raycast mantém o rover de pé porque eu calculo e aplico uma força a cada quadro. Esta quinzena foi entender o paradigma oposto — o multicorpo: corpos rígidos ligados por juntas, onde eu apenas declaro a relação e o solver do motor de física descobre sozinho o impulso que a mantém. O arco vai do conceito até duas caixas oscilando numa cena de teste, e termina no que o Godot não me deixa alcançar do Jolt.

Em resumo: no raycast eu empurro; no multicorpo eu amarro. E a conclusão que mais mudou minha cabeça na quinzena é que os dois não são rivais — o raycast é uma versão achatada (lumped) do multicorpo, e o próprio modelo de veículo do Jolt usa os dois juntos.
Norte
Entender o paradigma, não migrar o rover
Experimento
2 RigidBody3D + 1 HingeJoint3D
Achado
Exclude Nodes From Collision
Limite
Godot não expõe a VehicleConstraint
00

A quinzena, etapa por etapa

O roadmap desta quinzena está em 27 jul–10 ago · Rumo ao multicorpo. Ele foi montado pra semana de 27/jul e esticado pelas duas semanas seguintes — e foi assim que aconteceu na prática: quatro etapas de estudo espalhadas pelo período, e não um bloco por dia. Abaixo, o que cada etapa cobriu e quando.

semana 127–28 jul

O conceito: corpo rígido, junta, penalidade × constraint

Definir sistema multicorpo e situar o protótipo raycast dentro do quadro maior. Blocos 01 a 03.

semana 129–30 jul

Graus de liberdade e as cinco juntas do Godot

A régua que mede o que uma junta permite, e a assinatura de GDL de cada Joint3D. Bloco 04.

semana 131 jul

Experimento mínimo: dois corpos e uma dobradiça

A cena TesteJunta rodando — restrição de GDL funcionando sem uma linha de código. Bloco 05.

semana 203–07 ago

O Jolt por dentro e os limites do Godot

Solver de impulsos sequenciais, as lacunas da API Joint3D e a exploração do repositório oficial. Blocos 06 a 08.

semana 210 ago

Consolidação · esta entrada

Mapear as juntas pro rover no papel, escrever esta doc — e a reunião do dia, que abriu a segunda metade do roadmap.

em abertoa partir de 10 ago

A outra metade do roadmap

Comparativo Jolt × Godot a partir de um Sample, replicar esse sample no Godot, ler a doc do GDExtension e espelhar o GDChrono do professor pro Jolt. Nada disso entrou nesta entrada.

01

Os dois tijolos: corpo rígido e junta

27–28 jul

Antes de definir "multicorpo", dois conceitos que sustentam tudo o que vem depois — e um número que atravessa a quinzena inteira: seis.

Tijolo 1 · corpo rígido

Não se deforma — logo, 6 números bastam

Um corpo rígido é um objeto em que a distância entre quaisquer dois pontos nunca muda. Pra descrevê-lo por completo bastam duas informações: onde está (posição) e como está orientado (rotação) — três eixos cada. Daí os 6 GDL de um corpo livre no espaço 3D.

Tijolo 2 · junta

Uma conexão que proíbe movimento

Uma junta (joint, ou constraint) liga dois corpos e proíbe parte do movimento relativo entre eles. A dobradiça de porta é o exemplo direto: liga porta e batente e permite exatamente um movimento — girar em torno de um eixo.

3 translações · deslizarXYZ3 rotações · girar↻Y↻X↻Z
6 graus de liberdade. Não existe um sétimo modo: qualquer movimento, por mais complicado, é combinação destes seis. Toda junta é uma resposta à pergunta "quantos destes seis eu tiro?".

Sistema multicorpo, em uma frase

Um conjunto de corpos rígidos conectados por juntas, em que cada junta restringe o movimento relativo entre os corpos que ela liga.

A analogia que fixa a ideia é o esqueleto (ou uma marionete): os ossos são os corpos; as articulações, as juntas. O joelho é quase uma dobradiça pura — um eixo só; o ombro é mais livre, girando dentro de um cone. E ninguém precisa "empurrar" o antebraço pra ele continuar preso ao braço: a articulação garante isso por construção, não por uma força aplicada o tempo todo.

ombro · conecotovelo1 eixojoelho · 1 eixo
Traduzindo pro rover (só no papel). O chassi seria um corpo; cada roda, outro; cada braço de suspensão, outro — todos ligados por juntas apropriadas: a roda gira em torno de um eixo fixo ao chassi, a suspensão desliza verticalmente. Essa imagem é o pano de fundo da quinzena, mas construir isso está fora de escopo.
02

O contraste central: penalidade × constraint

27–28 jul

Este é o núcleo conceitual da quinzena, e o que separa o protótipo raycast do paradigma que estudei aqui. As duas abordagens querem o mesmo resultado — manter uma relação física válida entre partes de um sistema — mas chegam nele por caminhos opostos.

Penalidade · o que já tenho

Eu meço o erro e aplico uma força

A cada quadro eu meço o quanto a situação está "errada" (o quanto a mola está comprimida além do repouso, o quanto a roda desliza em vez de rolar) e calculo uma força corretiva. Quem escolhe e dimensiona essa força sou eu — a relação vale de forma aproximada, na medida em que eu tenha acertado a intensidade.

Constraint · o que estudei

Eu declaro a relação e o solver resolve

Em vez de calcular força, eu declaro a relação geométrica ("estes dois corpos só giram um em relação ao outro em torno deste eixo"). O solver do motor calcula, a cada passo, o impulso exato que mantém a declaração verdadeira. A junta não tenta segurar — ela simplesmente não permite o movimento proibido.

elástico · força que eu escolhobatenteportaF corretivaerro de dimensionamento → oscila, divergedobradiça · relação por construção1 rotação permitidao resto nem existe
A distinção de autoria. Na penalidade o autor da força sou eu — por isso instabilidade se resolve com ajuste manual. No constraint o autor é o motor — não há "intensidade" pra calibrar.
Penalidade (raycast)Constraint (multicorpo)
Quem calcula a forçaEu, a cada quadroO solver do motor de física
Natureza da relaçãoAproximada — depende do ajuste da forçaExata, por construção
Risco característicoDivergência, se a força corretiva for mal dimensionadaNão há força a calibrar — a violação é impedida
AnalogiaElástico segurando a portaDobradiça de metal

Esse risco não é teórico — eu já vivi ele no protótipo raycast, na implementação do atrito lateral:

sintoma

O rover era ejetado da cena

Ao implementar o atrito lateral, o corpo saía violentamente arremessado em vez de assentar.

causa · e a lição

Integrador explícito divergindo

A força corretiva de um quadro cancelava mais velocidade do que existia: o erro invertia de sinal e crescia no quadro seguinte. A solução foi ancorar a força num limite físico real — o clamp do círculo de atrito (μ · N), que impede por construção que a correção passe do fisicamente possível. É a manifestação prática do risco da penalidade.

03

O raycast é um multicorpo achatado

28 jul

Uma correção conceitual importante, que evita um erro comum: o protótipo raycast não tem juntas escondidas. É o contrário — ele substitui as juntas por forças que eu calculo à mão.

multicorpo formal · 5 corpos + juntaschassi (corpo)r1r2r3r4◉ junta hinge (roda) · slider (suspensão)colapsa emraycast · 1 corpo + forças por rodaRigidBody3D único↑ mola-amortecedor · grip · tração
Cada tripla de forças por roda é uma aproximação, feita à mão, do que as juntas produziriam sozinhas num sistema multicorpo de verdade.

Suspensão ⇄ slider joint

A força de mola-amortecedor faz, de forma aproximada, o papel de um SliderJoint3D: restringir o movimento relativo entre chassi e roda a um único eixo de translação.

Tração e grip ⇄ hinge joint + contato pneu-solo

As forças longitudinal e lateral fazem o papel de um HingeJoint3D no eixo da roda somado a um modelo de contato pneu-solo.

O VehicleBody3D é da mesma família

Testado e descartado antes do raycast atual, ele também é — por baixo da abstração — um veículo raycast: corpo único, raios nas rodas, modelo de pneu embutido como caixa-preta. A diferença é só o nível de exposição: ele esconde a física dentro do nó; o ground_contact.gd a deixa à vista.

A frase que fecha o bloco. Raycast e multicorpo não são paradigmas opostos ou competidores — o raycast é uma aproximação concentrada (lumped) do multicorpo. Implicação prática: se um dia eu migrar pra juntas, nada do que fiz no raycast vira lixo. O processo de implementar as forças na mão — inclusive o episódio de instabilidade — construiu exatamente a intuição física que o solver passa a executar sozinho.
04

Graus de liberdade e as cinco juntas do Godot

29–30 jul

O bloco 01 disse que a junta restringe o movimento relativo, mas deixou em aberto: restringir como, exatamente? A resposta é a régua do grau de liberdade — e ela transforma "escolher como limitar" e "escolher qual junta usar" na mesma decisão.

6 GDL relativos − travados = o que a junta permitea palavra-chave é relativos: a junta não age sobre o movimento absoluto de cada corpo, e sim sobre o de um em relação ao outro

Uma dobradiça de porta não impede a casa inteira de se mover; ela impede que a porta se mova em relação ao batente, exceto pela única rotação que permite. Com essa régua, cada junta do Godot vira uma assinatura fixa de GDL:

PinJoint3Drótula · sobram 3 rotações — ponto de articulação sem restrição de giro
HingeJoint3Ddobradiça · sobra 1 rotação — eixo da roda; braço de suspensão pivotando
SliderJoint3Dprismática · sobra 1 translação — curso vertical da suspensão
ConeTwistJoint3Dombro · rotação limitada (cone + torção) — juntas com batente angular
T·XT·YT·ZR·XR·YR·ZGeneric6DOFJoint3Dconfigurável · eixo a eixo — trava, libera ou limita cada GDL, com motores opcionais
Junta (Godot)Análogo mecânicoGDL que sobramUso no rover
PinJoint3Drótula / junta esférica3 rotações livresarticulação sem restrição de giro
HingeJoint3Ddobradiça / revoluta1 rotaçãoeixo da roda; braço de suspensão
SliderJoint3Dprismática1 translaçãocurso vertical da suspensão
ConeTwistJoint3Dombro / esférica limitadarotação limitada (cone + torção)juntas com batente angular
Generic6DOFJoint3Dconfigurávelescolhido eixo a eixocasos gerais; combinações; motores
Dois detalhes de precisão. O SliderJoint3D pode opcionalmente liberar também a torção ao longo do mesmo eixo — pro caso da suspensão, o uso pretendido é translação pura. E o ConeTwistJoint3D, diferente das duas anteriores, não deixa um GDL totalmente livre: restringe a uma faixa.

Esclarecimento: junta é nó, não função

Ao ver PinJoint3D ou HingeJoint3D pela primeira vez, a dúvida natural é se são funções do GDScript. Não são: são nós — classes que a engine oferece pra pendurar na árvore da cena, da mesma família de RigidBody3D e RayCast3D, que eu já uso no rover. Joint3D é a classe-base; as cinco são subtipos que herdam o "ligar dois corpos" e acrescentam seu padrão próprio de travamento.

Uso 1 · no editor

Adicionar o nó e preencher dois campos

Adiciono o nó à árvore e preencho, no Inspector, node_a e node_b, apontando pros dois RigidBody3D. Toda junta do Godot liga exatamente dois corpos — é a implementação literal do "linkar dois corpos rígidos".

Uso 2 · em GDScript

Como tipo instanciável

Em código o nome aparece como classe, instanciada da forma usual. GDScript é a linguagem; HingeJoint3D é um tipo que a engine disponibiliza — não uma função embutida.

GDScript · instanciando uma junta
# HingeJoint3D é a classe; .new() é o construtor
var junta = HingeJoint3D.new()
Onde a conta acontece. O cálculo físico — resolver a restrição a cada passo — roda dentro do motor, em C++. No Godot 4.6 quem executa é o Jolt: escolher a junta certa aqui é escolher qual constraint do Jolt vai ser acionada.
05

Experimento mínimo: dois corpos e uma dobradiça

31 jul

Hora de sair da teoria. Objetivo: ver uma restrição de GDL funcionando de verdade — dois RigidBody3D ligados por um HingeJoint3Dsem escrever código e sem aplicar nenhuma força. A cena não tem relação nenhuma com o rover; o isolamento é deliberado, no mesmo espírito de ter separado o ground_contact.gd.

◉ TesteJuntaNode3D · raiz da cena de sandbox
├─ Camera3Dsó pra enxergar (F6)
├─ DirectionalLight3Dsó pra iluminar
├─ AncoraRigidBody3D · Freeze = on · pos (-1, 3, 0)
│  ├─ CollisionShape3DBoxShape3D · o que a física sente
│  └─ MeshInstance3DBoxMesh · o que aparece na tela
├─ PenduloRigidBody3D · livre · pos (1, 3, 0)
│  ├─ CollisionShape3DBoxShape3D
│  └─ MeshInstance3DBoxMesh
└─ HingeJoint3Dpos (0, 3, 0) · ponto de pivô · Node A = Ancora · Node B = Pendulo
Raiz — Node3D vazioCorpos rígidos — o que a junta ligaJunta — filha da raiz, não dos corposColisão — a forma físicaMalha — só o visual

A Âncora é um corpo congelado, não um tipo especial de nó

Usei um RigidBody3D com Freeze ligado: ele deixa de ser afetado pela simulação (não cai, não se move), mas continua sendo um corpo físico válido, apto a servir de ponto fixo pra junta — o "prego na parede", sem o Godot precisar de um nó dedicado a isso.

Física e visual são dois nós distintos em Godot: CollisionShape3D é a forma que a física reconhece; MeshInstance3D é a que é desenhada.

O Pêndulo é idêntico, menos o Freeze

Mesmo par de filhos, posição espelhada em X, mesma altura. A única diferença relevante: sem freeze — livre e sujeito à gravidade.

A junta não mora dentro de nenhum dos corpos

O HingeJoint3D é filho direto da raiz, posicionado no ponto médio entre os dois corpos — o ponto físico em torno do qual a rotação relativa acontece. Sua função inteira é apontar pros dois corpos, via Node A e Node B no Inspector.

Conferir o motor antes de rodar

Em Project Settings → Advanced → Physics → 3D → Physics Engine, confirmei Jolt (padrão no Godot 4.6) — garantindo que quem resolve a restrição é mesmo o motor que estudei na quinzena.

Ao rodar (F6): o Pêndulo caiu por um instante, foi contido pela junta e passou a oscilar em torno do pivô, como um pêndulo físico real.

Cena TesteJunta rodando: a caixa da Âncora à esquerda e o Pêndulo à direita, inclinado no ponto alto da oscilação, com uma seta indicando o sentido do giro.
Ponto alto da oscilação — o Pêndulo já inclinado, girando em torno do pivô (seta).
Cena TesteJunta rodando: o Pêndulo na parte baixa da oscilação, pendurado abaixo e à direita da Âncora.
Ponto baixo — pendurado abaixo da Âncora, mantido pela junta, não por uma força que eu escrevi.
A confirmação prática do bloco 02. Nenhuma linha de código, nenhuma força aplicada por mim — e o movimento correto aparece. No paradigma de constraint, quem resolve a restrição e produz o movimento é o motor.

Achado: por que os dois corpos se atravessam

observação

O Pêndulo atravessa a Âncora

Durante a oscilação os dois corpos se interpenetram em vez de colidir. Parece bug — não é.

causa · e é intencional

Exclude Nodes From Collision, ligada por padrão

Toda junta derivada de Joint3D tem essa propriedade ligada por padrão: os dois corpos que ela conecta deixam de colidir entre si, mesmo com as formas sobrepostas.

no ponto de pivô, dois solvers querem coisas opostasAncoraPendulosobreposição no pivôjunta: mantenha o pivô juntocolisão: separe os corpos sobrepostos= travamento e vibração
Verificado na prática: desliguei a opção, rodei de novo e o comportamento alternativo apareceu exatamente assim — o Pêndulo travando e vibrando perto do pivô.
Por que isso importa direto pro rover. Numa junta real — uma dobradiça — as partes se tocam no pivô, por definição. Chassi e roda ligados por um HingeJoint3D no eixo vão, quase com certeza, ter formas de colisão sobrepostas ali. O comportamento desejável é justamente o padrão do Godot: excluir a colisão mútua e deixar só a junta governar a relação.
Pendência desta sessão. O escopo do dia previa ainda dois testes que não fiz: girar o eixo do HingeJoint3D no editor pra ver o plano da oscilação mudar, e ativar o Angular Limit (lower/upper) pra restringir ainda mais o único GDL que a junta permite. Fica registrado como pendência — não considerar concluído.
Organização do repositório. A cena .tscn fica isolada dentro do projeto Godot (Teste_junta/, na raiz do repo, fora do Docusaurus); o registro visual do experimento vive junto desta doc, em src/components/DossieMulticorpo/img/. Optei deliberadamente por não criar uma página só pro experimento — ele é uma seção desta entrada consolidada.
06

Como o Jolt resolve um constraint

03–07 ago

O experimento produziu a restrição funcionando; a semana 2 foi investigar o que acontece por dentro desse resultado — e a primeira coisa é que o mecanismo nem sequer é uma força.

Força · o que o raycast faz

Age ao longo de um intervalo

Uma força atua continuamente durante o passo de tempo. É o que eu faço a cada quadro: calculo uma força e deixo ela agir por delta. O efeito na velocidade é indireto — vem da integração.

Impulso · o que o solver faz

Muda a velocidade de uma vez

Um impulso é uma mudança instantânea na velocidade. O solver não empurra aos poucos: pergunta quanta velocidade na direção proibida existe, e remove exatamente isso. Não há parâmetro de "intensidade" — a pergunta tem uma resposta matemática.

0penalidade · força ao longo do passosobrecorrige, oscila, pode divergirconstraint · impulso instantâneopasso 1passo 2passo 3passo 4a proibida volta a zero, passo a passo
Eixo vertical: a velocidade na direção que a restrição proíbe. À esquerda ela é combatida por uma força que eu dimensionei; à direita, removida por um impulso derivado da própria formulação da restrição.

O loop iterativo — e por que é "sequencial"

Dentro de um único passo de física o solver refaz esse cálculo várias vezes — tipicamente de 4 a 10 iterações — antes de avançar. Isso só é necessário quando um corpo participa de mais de uma constraint ao mesmo tempo: corrigir a junta 1 perturba de leve a relação que a junta 2 já tinha corrigido. A técnica se chama solver de impulsos sequenciais e é o que praticamente todo motor de jogo usa — Jolt, Bullet, PhysX.

chassij1j2j3j44 juntas compartilhamo mesmo corpoerro residual por iteraçãoit. 1it. 2it. 3it. 4
No meu experimento — uma junta, dois corpos — isso praticamente não aparece: converge de imediato. Vira relevante num chassi ligado a quatro rodas por quatro HingeJoint3D.
Por que não diverge, ao contrário do meu atrito. Lá, a força corretiva cancelava velocidade ao longo de um quadro inteiro sem limite matemático embutido — superestimou, o erro cresce no quadro seguinte, e foi preciso enfiar o clamp do círculo de atrito na mão. No solver de impulsos a correção não é escolhida por ninguém: é derivada da formulação da própria restrição, sempre exatamente a necessária. Não existe um parâmetro equivalente pra calibrar — a estabilidade vem da formulação. Referência concreta: a doc de migração do Godot 4.6 pro Jolt registra 4 como o valor padrão de Solver Iterations, ajustável — mais iterações, mais estabilidade, menos desempenho.
07

O que o Godot esconde do Jolt

03–07 ago

O Godot 4.6 tornou o Jolt o motor 3D padrão — mas o que chega até mim, pela API de nós, é bem menos do que a biblioteca oferece. Vale entender por quê.

Caminho 1 · módulo embutido (core)

O que estou usando

Incorporado ao motor a partir da 4.4 e padrão na 4.6. É o mais conveniente — e, hoje, o mais limitado dos dois.

Caminho 2 · godot-jolt (GDExtension)

Mais completo, mas em manutenção

Extensão da comunidade, anterior à incorporação, hoje mantida só pra correção de bugs. O próprio repositório afirma que o módulo do motor ainda não tem paridade com ela — faltam, por exemplo, os nós de junta específicos do Jolt (JoltHingeJoint3D e equivalentes).

Jolt · 11 constraints + veículos (rodas, esteiras, motos)API genérica Joint3Dcriada antes do Jolt, pra qualquer motor por trás5 nós de juntafixed · distance/molagear · rack & pinionpulley · pathVehicleConstraint
A raiz técnica. Os cinco nós fazem parte de uma API genérica de Joint3D, criada pro GodotPhysics3D e reaproveitada pro Jolt. O sistema de constraints do Jolt, mais rico, precisa caber num molde que não foi desenhado pra ele.
Não é só o que falta — é o que funciona errado. Uma discussão da própria equipe do Godot expõe que vários parâmetros da API genérica não funcionam corretamente com o Jolt por trás, porque não deu pra mapear o significado de todos pro modelo dele. Exemplo citado: o Jolt não implementa limites suaves pro PinJoint3D (por design, é uma junta propositalmente barata) — então o módulo recorre, silenciosamente, a uma junta 6DOF por baixo sempre que esses limites são configurados.

Não existe junta fixa nativa

Sem forma direta de criar uma fixed constraint. A solução de contorno documentada é montar uma Generic6DOFJoint3D com os seis eixos travados na mão. Há PR em aberto propondo suporte nativo.

Não dá pra fazer juntas quebráveis

A API não expõe forma de ler a força ou o torque que uma junta está sofrendo — o que impede juntas que se rompem ao passar de um limiar. As funções existem no Jolt em C++, mas não chegam nem ao GDScript nem ao PhysicsServer3D.

A VehicleConstraint não é exposta

O modelo de veículo pronto do Jolt — reconhecido pela própria comunidade como bem superior ao VehicleBody3D nativo — não existe como nó. Há discussão aberta propondo incorporá-lo, com o autor relatando ter implementado por conta própria.

Implicação direta pra decisão arquitetural do rover. Mesmo que eu vá integralmente pro caminho multicorpo — hinge nas rodas, slider na suspensão —, não existe, no Godot atual, um modelo de veículo pronto do Jolt pra me apoiar. A estrutura de juntas continuaria sendo montada na mão, e o contato pneu-solo continuaria sendo um problema em aberto, a resolver separadamente — dentro ou fora do paradigma de constraint.
08

O que o repositório do Jolt revela

06–07 ago

Por fim, uma exploração direta do jrouwe/JoltPhysics — sem compilar nada, só reconhecendo o que a biblioteca entrega além do que chega ao Godot.

PastaConteúdo
Jolt/todo o código-fonte da biblioteca
Docs/documentação, incluindo o catálogo de demonstrações
Samples/aplicativo de demonstração, com um teste por funcionalidade
HelloWorld/exemplo mínimo de integração
UnitTests/testes de validação do comportamento físico
Assets, Build, JoltViewer…infraestrutura de apoio

E a seção "Features" do README, cruzada com os cinco nós do Godot, torna a lacuna numérica:

Constraint no JoltExposta como nó no Godot?
Point✓ PinJoint3D
Hinge✓ HingeJoint3D
Slider✓ SliderJoint3D
Cone / Swing-twist✓ ConeTwistJoint3D (parcial)
6 DOF✓ Generic6DOFJoint3D
Fixed✕ contorno: 6DOF com tudo travado
Distance (com molas)
Gear · Rack and pinion · Pulley
Path (trajetórias suaves)
Veículos (rodas, esteiras, motos)✕ VehicleConstraint não exposta

O catálogo de demonstrações (Docs/Samples.md)

Categoria · Constraints

A lacuna, em vídeo

Demonstrações de constraints que o Godot não expõe — Path, Swing-Twist, Gear, Rack and pinion, Pulley. Confirmação visual direta do bloco 07.

Categoria · Rig (Ragdolls)

O esqueleto de volta

Estruturas articuladas com hinge e swing-twist — a mesma analogia do esqueleto do bloco 01, agora rodando.

O achado mais importante da exploração · categoria Vehicles. A descrição oficial do Jolt diz que os veículos são criados via VehicleConstraint e que eles usam raycasts ou shapecasts pra detectar o solo, simulando o veículo completo com motor, câmbio, diferenciais e suspensão. Ou seja, com fonte primária: o próprio modelo de veículo do Jolt combina raycast (contato pneu-solo) com o solver de constraints (estrutura do chassi, suspensão, transmissão). Raycast e multicorpo não são concorrentes — coexistem dentro do motor que fundamenta a quinzena inteira.
09

Síntese e o que ficou em aberto

10 ago

O paradigma

Corpo rígido livre = 6 GDL. Junta = travar parte dos 6 GDL relativos entre dois corpos; o que sobra é o que ela permite. Escolher a junta é escolher como restringir.

A autoria da força

Penalidade: eu calculo e aplico; relação aproximada; risco de divergência (caso concreto: a ejeção por atrito, resolvida com o clamp). Constraint: eu declaro; o solver calcula o impulso exato; relação exata por construção.

O raycast não foi trabalho perdido

Ele é uma versão lumped do modelo multicorpo formal — e o próprio veículo do Jolt mistura os dois. Migrar pra juntas no futuro não invalida nada do que já construí.

O experimento

TesteJunta rodou: pêndulo oscilando sem código nem força. Achado de bônus: Exclude Nodes From Collision — relevante direto pra futura junta chassi-roda.

O limite da ferramenta

O Godot expõe o Jolt por uma API Joint3D genérica e anterior a ele: implementa errado vários parâmetros e deixa de fora recursos inteiros — junta fixa, juntas quebráveis e, sobretudo, a VehicleConstraint.

Esta entrada cobre metade do roadmap da quinzena. Fecha o arco conceitual (conceito → GDL → experimento → Jolt por dentro). Segue em aberto, pra próxima etapa: o comparativo Jolt × Godot a partir de um Sample, replicar esse sample no Godot com nós Joint3D, ler a doc do GDExtension e espelhar o GDChrono do professor pro Jolt. Também ficaram pendentes os dois testes do bloco 05 (girar o eixo do hinge e ativar o Angular Limit).

Fontes