¿Cómo funcionan internamente las simulaciones físicas de Box2d y Bullet?

8

He visto box2d y bullet portados a JavaScript, pero ninguno de ellos me atrajo, excepto el código fuente. Todo parecía bastante simple, una vez que miré dentro.

¿Qué están haciendo dentro de cada una de esas bibliotecas para obtener una buena simulación física? No puedo encontrar ninguna explicación.

Alegre
fuente
Eventualmente responderé la pregunta yo mismo porque estoy estudiando las fuentes. Si logras acortar el esfuerzo, te lo agradeceré.
Alegre

Respuestas:

10

La física del cuerpo rígido es en realidad bastante simple en concepto, es decir, los comportamientos que un motor está tratando de crear no son muy complicados. Probablemente por eso las bibliotecas que miró le parecen bastante simples.

El truco es que hacer un sim que sea robusto , estable y rápido , incluso en presencia de errores de coma flotante y bajas tasas de cuadros variables, es bastante difícil y generalmente implica una gran cantidad de ajustes y violines. Lo que complica aún más el problema es el hecho de que muchas personas extremadamente inteligentes han hecho esfuerzos heroicos para encontrar mejores soluciones, y han creado algoritmos hermosos y poderosos pero difíciles de entender que le han dado al campo una reputación de magia negra.

En general, un motor de física se ocupará de tres cosas (el orden en que las hace en el bucle interno varía):

  1. Integración (aproximando las ecuaciones de movimiento newtonianas),
  2. Detección de colisión, y
  3. Resolución de restricciones (actualización de posiciones y velocidades para satisfacer la no penetración u otras restricciones especificadas por el usuario).

Para la mayoría de estos, existen algoritmos simples pero no tan precisos como algoritmos complejos pero más precisos. Para comenzar:

  1. Para la integración, la mayoría de las personas usan Symplectic Euler o Verlet (que en realidad son equivalentes. Puede leer sobre integración numérica si lo desea, pero el consenso parece ser que los métodos baratos de primer orden están bien.
  2. Puede encontrar todas las referencias de detección de colisión que desee en la página de recursos de representación en tiempo real .
  3. Para la resolución de restricciones, el método de impulsos secuenciales es muy fácil de entender. Erin Catto (autora de Box2D) hace una presentación en GDC todos los años: las diapositivas están vinculadas desde la página principal de Box2D . Las diapositivas de 2006 cubren los impulsos secuenciales bastante bien. También puede buscar métodos más sofisticados como Featherstone o Gauss-Seidel proyectado.

Hay una excelente introducción a los métodos simples y lo que puede salir mal en los primeros capítulos del libro recién publicado Game Physics Pearls.

Charlie
fuente
6

Lea la serie de física de juegos de Glenn Fiedler: http://gafferongames.com/game-physics/

Además, Erin Catto (autora de Box2D) tiene un artículo sobre dinámica restringida .

Para la detección de colisión, lea Detección de colisión en tiempo real por Christer Ericson

David
fuente
1
Ese primer enlace está roto, pero creo que ahora se pueden encontrar los mismos artículos aquí: gafferongames.com/game-physics/integration-basics (pero no puedo estar seguro porque nunca vi los originales)
Justin
2

http://en.wikipedia.org/wiki/Rigid_body_dynamics podría ser un buen lugar para comenzar. Los diferentes juegos dividirán las cosas en diferentes cuerpos, pero en general tienes varios cuerpos rígidos discretos unidos por uniones con propiedades específicas. Cada ciclo a través del juego calcula las fuerzas en cada cuerpo y calcula sus nuevos parámetros (posición, velocidad, etc.). También debe transmitir fuerzas de cada cuerpo a los demás con los que comparte articulaciones y factorizar las fuerzas globales (gravedad).

Esto no cubre cosas como la física de los líquidos o las telas, para mí, todas son tonterías. Hay ecuaciones diferenciales involucradas y ese es el punto donde mis ojos se nublan.

coderanger
fuente
Bueno ... Wikipedia sería el primer lugar obvio para mirar las cosas. Además, todo el mundo probablemente sepa que tienden a simular movimientos corporales a través de fuerzas. Hay mucho más en box2d que eso. Aquí hay algunas cosas que me interesan: la resolución de restricciones y algunas otras cosas que evitan que la simulación explote. Algoritmos de detección de colisión. Optimizaciones en la resolución de restricciones y la detección de colisiones. Algoritmos de respuesta conjunta / colisión. Simulación de la fricción.
Alegre
Eso está llegando al territorio de "demasiado tiempo para una respuesta real". Por ejemplo, la amortiguación para evitar artefactos de simulación es un poco complejo de matemática . En cuanto a cosas como la transferencia de la fuerza de la articulación, la versión simple es que cada articulación tiene ejes específicos en los que transferirá la fuerza con un porcentaje de la energía del cuerpo contando hacia la unión dependiendo del ángulo entre los dos. La articulación más simple es un enlace fijo, donde toda la fuerza de ambos lados se traduce.
coderanger
Como dije en la pregunta: está bien decir que hay matemáticas complejas aquí y allá y proporcionar un enlace para leer más.
Alegre
Bueno, ahí tienes :-)
coderanger
0

Una cosa importante, además de las ecuaciones físicas, es rastrear todos los objetos, para que la detección de colisiones e interacciones sea lo más rápida posible. Hashing espacial es la técnica que utiliza el motor de física Chipmunk .

AShelly
fuente