Consejos necesarios para un motor de física

12

Recientemente comencé un proyecto, construyendo un motor de física. Esperaba que me pudieran dar algunos consejos relacionados con alguna documentación y / o las mejores tecnologías para esto.

En primer lugar, he visto que Game-Physics-Engine-Development es muy recomendable para la tarea en cuestión, y me preguntaba si podría darme una segunda opinión. ¿Debería obtenerla? Además, mientras navegaba en Amazon, me topé con Game Engine Architecture y, dado que quiero construir mi motor de física para juegos, pensé que esta también podría ser una buena lectura.

En segundo lugar, sé que simular física es muy intensivo en computación, por lo que me gustaría usar CUDA o OpenCL. En este momento me estoy inclinando hacia OpenCL, porque funcionaría en los conjuntos de chips NVIDIA y ATI. ¿Qué sugieren ustedes?

PD: implementaré esto en C ++ en Linux.

adivasile
fuente

Respuestas:

10

Así es como aprendí a escribir un motor de física, todo es gratis y muy recomendable:

  1. Los documentos de David Baraff, particularmente Introducción a la modelización física

  2. Tesis de Brian Vincent Mirtich Simulación dinámica basada en impulsos de sistemas de cuerpo rígido

  3. Kacic / Bullock "Un sistema dinámico dinámico" SIGRAPH 2003, EDITAR: Enlace agregado .

Esos documentos fueron mencionados en otro gran artículo de Nick Porcino (LucasArts) en uno de los libros de gemas Gemas 4 "Escribir un motor de física basado en Verlet". No es gratis, pero vale cada centavo.

También eche un vistazo a otros motores, aquí está la fuente del motor Bullet Physics .

Acerca de la implementación de CUDA / OpenCL: haga que se ejecute primero en la CPU, es lo suficientemente complicado :)

Tenga en cuenta que lo más probable es que arroje su motor después de un tiempo, ya que es demasiado difícil hacer un motor de física estable y bien integrado con una lista de características competitivas por su cuenta, sin embargo, ¡es una gran experiencia de aprendizaje!

Tan pronto como tenga un motor simple en funcionamiento, mi consejo es: haga escenarios de prueba donde compare el resultado de su motor con el resultado de otro motor. Esto me ayudó a encontrar muchos errores y mejorará su interfaz; algo así como aplicar una fuerza similar durante 1 segundo en el mismo cuerpo en ambos motores.

Por último, pero no menos importante: ignore las colisiones cuando comience, concéntrese primero en una simulación estable.

Maik Semder
fuente
Parece una gran respuesta, pero es posible que desee formatearla un poco.
El pato comunista
Gracias por los comentarios. Estoy de acuerdo en que no podré hacer un motor competitivo, pero mi objetivo principal con esto es la parte de aprendizaje.
adivasile
1
@The Communist Duck gracias por la pista, era nuevo a un lado y admito que era demasiado vago para ver las opciones de formato, lo arreglé :)
Maik Semder
1
Se agregó el enlace al documento de Kacic, espero que sea el correcto :)
Ray Dey
5

Maik tiene razón, los documentos de Baraff son un excelente comienzo, pero no olvides la reseña de Chris Heckers sobre la dinámica del cuerpo rígido: http://chrishecker.com/Rigid_Body_Dynamics .

También su consejo sobre "[..] tirarás tu motor" es completamente cierto. ¡Pero aprenderás mucho!

Con respecto a la parte de CUDA / OpenCL de su pregunta: Si conoce CUDA, cambiar a OpenCL se vuelve muy fácil. Recomiendo aprender CUDA primero, porque hay muchos buenos tutoriales, código de ejemplo y bibliotecas de computación. Por ejemplo:

Pero tenga en cuenta: comenzar con CUDA es fácil, comenzar con la simulación física es un poco más difícil, ¡pero combinar ambos es todo un desafío!

Jonas Bötel
fuente
tienes toda la razón, ese es otro gran recurso que debe mencionarse, +1 para el artículo de Chris Hecker
Maik Semder
4

Empecé con Baraff también, pero ya está un poco anticuado. Lo que necesita son solucionadores iterativos y la mejor información sobre el papel es Dyanmics iterativos de Erin Catto . Tienes todo lo que necesitas para implementar tu motor de física. Puede profundizar un poco en la tesis doctoral de Erleben si necesita más detalles (como articulaciones y más cosas de matemáticas), pero eso es todo. Desearía haberlo encontrado desde el principio: revisa un poco el foro Bullet, hay mucha información allí (tal vez demasiado).

En cuanto a los libros, muchos de los libros son decepcionantes, pero recomiendo la animación basada en física de Kenny Erleben o Game Physics Pearls.

No sé mucho sobre CUDA / OpenCL (aunque siempre quise hacerlo) pero definitivamente deberías ver el trabajo de Takahiro Harada.

Mihai F
fuente