Conselho necessário para um mecanismo de física

12

Recentemente, iniciei um projeto, construindo um mecanismo de física. Eu esperava que você pudesse me dar alguns conselhos relacionados a alguma documentação e / ou melhores tecnologias para isso.

Antes de tudo, vi que o desenvolvimento de motores de física de jogos é altamente recomendado para a tarefa em questão, e fiquei pensando se você poderia me dar uma segunda opinião. Além disso, enquanto navegava na Amazon, encontrei a Game Engine Architecture e, como quero criar meu mecanismo de física para jogos, achei que poderia ser uma boa leitura também.

Em segundo lugar, eu sei que a simulação de física é altamente intensiva em computação, então eu gostaria de usar o CUDA ou o OpenCL. Agora, estou me inclinando para o OpenCL, porque funcionaria nos chipsets NVIDIA e ATI. O que vocês sugerem?

PS: Vou implementar isso em C ++ no Linux.

adivasile
fonte

Respostas:

10

Aqui está como eu aprendi a escrever um mecanismo de física, é tudo gratuito e altamente recomendável:

  1. Os artigos de David Baraff, particularmente Uma Introdução à Modelagem Baseada em Física

  2. Tese de Brian Vincent Mirtich Simulação dinâmica baseada em impulso de sistemas de corpos rígidos

  3. Kacic / Bullock "Um sistema de dinâmica prática" SIGRAPH 2003, EDIT: Link added .

Esses documentos foram mencionados em outro ótimo artigo de Nick Porcino (LucasArts) em um dos livros de gemas Gems 4 "Writing a Physics-Based Engine of Verlet". Não é grátis, mas vale cada centavo.

Também dê uma olhada em outros mecanismos, aqui está a fonte do Bullet Physics Engine .

Sobre a implementação CUDA / OpenCL: faça com que seja executado primeiro na CPU, já é bastante complicado :)

Lembre-se de que você provavelmente jogará fora seu motor depois de um tempo, pois é muito difícil criar um mecanismo de física estável e bem integrado com uma lista de recursos competitiva por conta própria, no entanto, é uma ótima experiência de aprendizado!

Assim que você tiver um mecanismo simples em funcionamento, meu conselho é: faça cenários de teste em que você compare o resultado do seu mecanismo com o resultado de outro mecanismo. Isso me ajudou a encontrar muitos erros e melhorará sua interface; algo como aplicar uma força semelhante por 1 segundo no mesmo corpo nos dois motores.

Por último, mas não menos importante: ignore as colisões ao iniciar, concentre-se em uma simulação estável primeiro.

Maik Semder
fonte
Parece uma ótima resposta, mas você pode querer formatá-la um pouco.
The Duck Comunista
Obrigado pelo feedback. Concordo que não serei capaz de criar um mecanismo competitivo, mas meu principal objetivo é a parte do aprendizado.
Adivasile
1
@The Pato graças comunistas para a dica, eu era novo para o lado e eu admito que eu era muito preguiçoso para verificar as opções de formato, fixa-lo :)
Maik Semder
1
Adicionado o link para o artigo de Kacic, espero que seja o caminho certo :)
Ray Dey
5

Maik está certo, os papéis de Baraff são um excelente começo, mas não se esqueça de escrever sobre a dinâmica do corpo rígido de Chris Heckers: http://chrishecker.com/Rigid_Body_Dynamics !

Também o conselho dele sobre "[...] você jogará seu motor fora" é inteiramente verdadeiro. Mas você vai aprender muito!

Em relação à parte CUDA / OpenCL da sua pergunta: Se você conhece o CUDA, é muito fácil mudar para o OpenCL. Eu recomendaria aprender o CUDA primeiro, porque existem muitos bons tutoriais, exemplo de código e bibliotecas de computação por aí. Por exemplo:

Mas lembre-se: é fácil começar o CUDA, começar a simulação de física é um pouco mais difícil, mas combinar os dois é um grande desafio!

Jonas Bötel
fonte
você está absolutamente certo, que é outro grande recurso que deve ser mencionado, um para o papel de Chris Hecker
Maik Semder
4

Também comecei com Baraff, mas já está um pouco datado. O que você precisa é de solucionadores iterativos e o melhor artigo sobre isso é o Dyanmics Iterative de Erin Catto . Você tem tudo o que precisa para implementar seu mecanismo de física. Você pode se aprofundar um pouco na tese de doutorado de Erleben, se precisar de mais detalhes (como juntas e mais material matemático), mas é praticamente isso. Eu gostaria de tê-lo encontrado desde o início - entre no fórum do Bullet, há muitas informações lá (talvez demais).

Quanto aos livros, muitos dos livros por aí são decepcionantes, mas eu recomendo a animação baseada em física de Kenny Erleben ou a Game Physics Pearls.

Você não conhece muito o CUDA / OpenCL (embora eu sempre quisesse fazer isso), mas você definitivamente deveria conferir o trabalho de Takahiro Harada.

Mihai F
fonte