Como as simulações físicas Box2d e Bullet funcionam internamente?

8

Eu vi box2d e bullet portados para JavaScript, mas nenhum deles me atraiu, exceto pelo código fonte. Tudo parecia bastante simples, uma vez que olhei para dentro.

O que eles estão fazendo em cada uma dessas bibliotecas para obter uma boa simulação de física? Não consigo encontrar nenhuma explicação.

Alegre
fonte
Acabarei respondendo a pergunta pessoalmente porque estou estudando as fontes. Se você conseguir diminuir o esforço, eu aprecio isso.
Animador

Respostas:

10

A física do corpo rígido é realmente bastante simples em conceito - ou seja, os comportamentos que um mecanismo está tentando criar não são muito complicados. É provavelmente por isso que as bibliotecas que você consultou parecem bastante simples para você.

O truque é que fazer um sim robusto , estável e rápido , mesmo na presença de coisas como erro de ponto flutuante e taxas de quadros baixas e variáveis, é bastante difícil e geralmente envolve muitos ajustes e mexidas. Para complicar ainda mais o problema, muitas pessoas extremamente inteligentes fizeram esforços heroicos para encontrar melhores soluções e criaram algoritmos bonitos e poderosos, mas difíceis de entender, que deram ao campo uma reputação de magia negra.

Em geral, um mecanismo de física se preocupa com três coisas (a ordem em que eles são executados no loop interno varia):

  1. Integração (aproximando as equações newtonianas de movimento),
  2. Detecção de colisão e
  3. Solução de restrições (atualização de posições e velocidades para satisfazer a não penetração ou outras restrições especificadas pelo usuário).

Para a maioria deles, existem algoritmos simples, mas não tão precisos, e algoritmos complexos, mas mais precisos. Para começar:

  1. Para a integração, a maioria das pessoas usa o Symplectic Euler ou o Verlet (que são realmente equivalentes. Você pode ler sobre integração numérica, se quiser, mas o consenso parece ser que métodos baratos de primeira ordem são bons.
  2. Você pode encontrar todas as referências de detecção de colisão que deseja na página de recursos de renderização em tempo real .
  3. Para a solução de restrições, o método dos impulsos seqüenciais é muito fácil de entender. Erin Catto (a autora do Box2D) faz uma apresentação na GDC todos os anos - os slides estão vinculados na página principal do Box2D . Os slides de 2006 cobrem muito bem os impulsos seqüenciais. Você também pode procurar métodos mais sofisticados, como Featherstone ou Gauss-Seidel projetado.

Há uma excelente introdução a métodos simples e o que pode dar errado nos primeiros capítulos do livro recém-publicado Game Physics Pearls.

Charlie
fonte
6

Leia a série de física de jogos de Glenn Fiedler: http://gafferongames.com/game-physics/

Além disso, Erin Catto (o autor do Box2D) tem um artigo sobre dinâmica restrita .

Para detecção de colisão, leia Detecção de colisão em tempo real de Christer Ericson

David
fonte
11
Esse primeiro link está quebrado, mas acho que os mesmos artigos agora podem ser encontrados aqui: gafferongames.com/game-physics/integration-basics (mas não posso ter certeza porque nunca vi os originais)
Justin
2

http://en.wikipedia.org/wiki/Rigid_body_dynamics pode ser um bom lugar para começar. Jogos diferentes dividem as coisas em corpos diferentes, mas, em geral, você tem vários corpos rígidos separados, ligados por juntas com propriedades específicas. A cada loop do jogo, você calcula as forças de cada corpo e calcula seus novos parâmetros (posição, velocidade, etc.). Você também deve transmitir forças de cada corpo para os outros com os quais compartilha articulações e fatorar as forças globais (gravidade).

Isso não cobre coisas como física de líquidos ou tecidos, essas são todas bobagens para mim. Existem equações diferenciais envolvidas e é sobre o ponto em que meus olhos brilham.

coderanger
fonte
Bem ... a wikipedia seria o primeiro lugar óbvio para procurar coisas. Além disso, todos até aqui sabem que tendem a simular movimentos corporais através de forças. Há muito mais no box2d do que isso. Aqui estão algumas coisas que me interessam: Solução de restrições e outras coisas que impedem a simulação de explodir. Algoritmos de detecção de colisão. Otimizações na resolução de restrições e detecção de colisões. Algoritmos de resposta de junta / colisão. Simulação do atrito.
Animador
Isso está chegando ao território "muito longo para uma resposta real". Por exemplo, amortecer para evitar artefatos de simulação é um pouco complexo de matemática . Quanto a coisas como transferência de força da articulação, a versão simples é que cada articulação tem eixos específicos, transferindo força com uma porcentagem da energia do corpo contando na junção, dependendo do ângulo entre os dois. A junta mais simples é um elo fixo, onde toda a força de ambos os lados é traduzida.
Coderanger
Como eu disse na pergunta: não há problema em dizer que há matemática complexa aqui e ali e fornecer um link para outras leituras.
Animador
Bem, lá vai você então :-)
coderanger
1

O OpenCloth detalha todas as técnicas de integração da maneira mais simples possível. Muito está no pipeline.

Detalhes: http://code.google.com/p/opencloth/

Mobeen
fonte
0

Uma coisa importante além das equações da física é rastrear todos os objetos, para que a verificação da detecção e interações de colisões seja o mais rápido possível. Hashing espacial é a técnica que o mecanismo de física Chipmunk usa.

AShelly
fonte