son que motor las juego havok fisicas engines physics-engine

physics-engine - que - physics engines



¿Cómo simula realmente un motor de física la física? (3)

Esta pregunta puede ser una pregunta estúpida, pero tengo mucha curiosidad.

Después de jugar juegos como HL2, GMod o Angry Bird, y usar bibliotecas de física como Box2D, comencé a preguntarme "¿cómo un motor de física simula la física?"

Al igual que lexer y el analizador se utilizan para entender el código cuando se usa la compilación y el trazado de rayos para renderizar una escena 3D, creo que hay algunas nociones (además de la detección de colisiones) que se usan en el motor de física para simular la física, como calcular el torque y la velocidad de un pentágono realizando barril.

¿Cómo simula realmente un motor de física la física? ¿Qué nociones se utilizan? ¿Hay algún ''tutorial'' en la web sobre cómo hacer un motor de física como este , que demuestre el trazado de rayos?



Crear un motor de física (robusto) es mucho más complicado de lo que parece al principio. El truco es falsificar todo lo posible en lugar de calcular los valores exactos. Como punto de partida, esta publicación de blog tiene una gran introducción. Creo que este artículo de Thomas Jakobsen también es una buena lectura e introduce ciertos conceptos. Este blog también tiene algunos artículos interesantes que explican los detalles de los integradores y cómo administrar la física de los juegos en línea.

Pasar por el código fuente de los motores de física como Box2D es una buena idea para ver la implementación, pero si no conoce la teoría de lo que están haciendo, puede resultar confuso. La razón de esto se debe al hecho de que la teoría a menudo es demasiado ineficiente para implementarla en un juego en tiempo real, por lo que se utilizan algoritmos y técnicas para lograr un equilibrio entre el realismo y la velocidad.

Si está creando su propio motor de física porque quiere usarlo en un juego comercial, sugiero que elija una solución ya existente. (Por ejemplo, Angry Birds usa Box2D). Sin embargo, si lo haces por la experiencia y por aprender sobre motores de física, es algo que te enseñará un poco sobre eficiencia y técnicas inteligentes.


En principio, todos los motores de física son simplemente una aplicación directa de la segunda ley del movimiento de Newton:

aceleración = fuerza / masa

Al integrar la aceleración en el tiempo, obtienes velocidad. Al integrar la velocidad, obtienes las posiciones del objeto en el espacio. Las integrales se realizan numéricamente, utilizando algo como Runge-Kutta.

Las principales complicaciones surgen de:

  • Manejando el movimiento de rotación
  • Manejo de eventos de impulso, como colisiones y explosiones.
  • Detectando colisiones en los extremos de la velocidad. A altas velocidades, los objetos pueden terminar penetrando o incluso atravesando entre ellos antes de que se detecte la colisión. A bajas velocidades, es un desafío manejar de forma robusta un objeto que descansa sobre otro sin temblar o deslizarse.
  • Enlaces cinemáticos, donde los objetos están parcialmente limitados entre sí (como una bisagra o un control deslizante)
  • Cálculo de fuerzas y pares de torsión para objetos complejos como automóviles o aviones.
  • Haciendo todo esto eficientemente en tiempo real para cientos o miles de objetos.

Un buen lugar para comenzar es simular una sola partícula rebotando en una caja bidimensional bajo la influencia de la gravedad. Luego, asigne un radio a la partícula, agregue más y calcule las colisiones entre ellas. En ese momento, tienes un motor de física básico que es suficiente para usar en juegos simples.