¿Qué es exactamente un motor de física?

57

Un programa debe tomar entrada, procesarla y dar salida. Entonces, ¿qué toma exactamente un motor de física como entrada y proporciona como salida?

usuario91119
fuente
36
Mucha terminología cuestiona a las personas. No es necesario rechazar las preguntas básicas simplemente porque son básicas.
MichaelHouse
16
La descripción de un programa como algo que "debería tomar datos, procesarlos y dar resultados" es una manera tan absurdamente simplificada y reduccionista de pensar que es inútil. Piensa cómo responderías a la pregunta "Un programa debe recibir información, procesarla y dar salida. Entonces, ¿qué es exactamente lo que un juego toma como entrada y proporciona como salida?", Podrías responderla pero no es una forma útil de pensar en un juego.
Jack Aidley
10
@JackAidley Entiendo tu punto, pero realmente, un juego es muy parecido a eso: entrada: pulsaciones de teclas y movimientos del mouse / joystick, salida: imágenes divertidas en la pantalla y sonidos entretenidos de los altavoces. Es simplista, sí, pero ayuda a entender qué es un "juego" computacionalmente y, en mi experiencia, también es una forma extremadamente útil (pero, por supuesto, no la única) de pensar en la arquitectura de código, el diseño de activos, la gestión de proyectos, etc.
wjl

Respuestas:

58

Un motor de física es responsable de simular los movimientos y la reacción de los objetos como si estuvieran bajo las restricciones de la física del mundo real (o similar al mundo real). Es, debo señalar, no suele ser un programa independiente, sino más bien un componente de un programa más grande e interesante (como un juego).

La entrada a una simulación física es generalmente una colección de objetos ("cuerpos") con propiedades (como si son rígidos o blandos, sus masas, formas, etc.), así como la colección de fuerzas que actúan sobre esos cuerpos.

En base a esa entrada, el motor simula posiciones y orientaciones actualizadas de los cuerpos y las aplica ("salidas"). En general, cuando los objetos chocan o se superponen, eso se incluye en la salida de un paso de simulación en forma de una devolución de llamada que el código del cliente puede conectar para manejar la lógica de juego específica relevante para la colisión.

Josh
fuente
6

La entrada es velocidad, masa y tiempo, la salida es nuevas velocidades. A veces, la rotación / momento angular es una entrada y salida también.

Esencialmente, los motores de Física intentan simular los efectos de la gravedad y las colisiones. Para mejores motores de física, eso significa que incluyen la deformación permanente y temporal de los objetos, incluida la división de objetos en varios objetos, y el momento angular de los objetos. Idealmente, también simularían el estrés, por ejemplo, cuántos camiones pueden cruzar ese puente hasta que se derrumbe, pero eso es bastante raro. Otras variables de simulación como la resistencia del aire también contarían como motor de física, pero que yo sepa, todavía no han llegado a ningún juego.

La mayoría de los motores de física están especializados hasta cierto punto y simularán la física hasta un punto que sea necesario para el juego. Los motores de física para los juegos de automóviles a menudo son bastante diferentes de los motores de física para los tiradores 3D. Y el motor de física de un juego de golf puede tener cálculos excesivos de las interacciones de la pelota de golf y las hojas de césped individuales, mientras se pierde por completo el manejo de colisiones de alta velocidad y la deformación de un automóvil (en caso de que sea golpeado por una pelota de golf) .

Peter
fuente
1
Me gustaría señalar que la resistencia del aire es en realidad una característica bastante común de los motores de física. Cualquier juego que aplique una velocidad terminal a los objetos que caen está modelando la resistencia del aire.
Patrick Roberts el
@PatrickRoberts Terminal Velocity no es exactamente lo que estaba pensando al mencionar la resistencia del aire. Eso sería como decir que Pong tiene un motor de física que modela los impactos cinéticos.
Peter
12
bueno, para ser justos, en un sentido laxo lo hace. Modela colisiones perfectamente elásticas en un entorno sin peso. Entiendo que los modelos pueden ser simplistas, pero es por eso que se llaman modelos porque son aproximaciones prácticas de los fenómenos que experimentamos en la realidad.
Patrick Roberts el
4

Por lo general, se utiliza un motor de física para hacer que los objetos en un juego se comporten de manera realista en relación con su entorno sin tener que diseñar animaciones específicas para cada escenario posible.

Específicamente, un motor de física tomará un modelo con un conjunto de propiedades (masa, articulaciones, etc.) y lo representará en el juego de acuerdo con un conjunto de parámetros.

Un primer ejemplo de esto fueron los motores raggdoll (por ejemplo, en Unreal) que modelaron la forma en que los cuerpos flácidos caerían por escalones, etc.

En la tecnología actual, los motores de física a menudo se integrarán estrechamente en un paquete general de diseño de juegos junto con IA, IU en el juego, generación de escenas, etc.

Ciertamente, podría argumentar que los motores de física se remontan a los albores del diseño de juegos, por ejemplo, pong podría considerarse un motor de física burdo. Sin embargo, el punto principal es que un motor de física es capaz de generar puntos de animación sobre la marcha en función de un conjunto de parámetros en lugar de utilizar secuencias de animación predeterminadas de captura de movimiento o animación manual.

Como se mencionó en otras respuestas, en algunas clases o juegos, como la conducción o la simulación de vuelo, el motor de física puede ser fundamental para el juego y, como tal, será la entrada principal para impulsar la animación en pantalla. Aunque generalmente el término se usa para una herramienta de propósito general que se puede aplicar a una variedad de situaciones sin requerir un conocimiento o análisis muy específico del contexto en cuestión por parte del desarrollador, en lugar de un simulador muy específico construido desde el suelo para una aplicación específica.

Chris Johns
fuente
4

Un motor de física es responsable de simular el movimiento de los objetos en "el mundo" (lo que sea que eso signifique en el contexto del motor). La mayoría de los motores de física hoy en día usan la mecánica newtoniana para hacer esto, ya que son relativamente simples de simular y "lo suficientemente precisos" para la mayoría de los propósitos a menos que esté haciendo un simulador espacial.

En teoría, un motor de física "pura" tomaría tres entradas:

  • El estado del mundo (los objetos, sus posiciones y sus velocidades) a partir del último "tic" (el último instante en el tiempo que el motor tuvo que modelar)
  • Cuánto tiempo ha pasado desde que sucedió el último tic
  • Una lista de las fuerzas que han estado actuando sobre varios objetos en el mundo desde la última marca

Teniendo en cuenta la inercia y las fuerzas, el motor mueve los objetos. La salida del motor de física es simplemente el nuevo estado del "mundo" , que el juego puede leer y modificar según sea necesario.

En la práctica, los motores de física no son necesariamente tan "puros" . Los objetos deben crearse y destruirse, y a veces necesitan moverse de una manera que las leyes del motor de física no lo permitan. Esto a veces se puede hacer fuera del motor, pero a veces se hace dentro, y para hacer eso, el motor necesita más entradas. Pero las tres entradas mencionadas anteriormente cubren lo básico.

Por ejemplo, supongamos que necesita mover un personaje en un juego con un joystick. Si no está utilizando un motor de física, esto es bastante sencillo: cuando ve que el usuario mueve el joystick, mueve el objeto en consecuencia. Con un motor de física, no mueves el objeto directamente: le aplicas una fuerza, correspondiente a la dirección en la que quieres que vaya el objeto, y dejas que el motor maneje realmente moviéndolo .

¿Cual es la diferencia? Incluso si no hay nada más en el mundo, es poco probable que el objeto se mueva de la misma manera, porque el motor de física manejará cosas como la aceleración realista. Pero también es posible que otras fuerzas actúen sobre el objeto al mismo tiempo, como podría ser la inercia, y el motor las tendrá en cuenta a todas . Por ejemplo, si aplica una fuerza hacia el norte sobre el objeto, pero algo más está aplicando una fuerza hacia el oeste (o el objeto ya se estaba moviendo hacia el oeste y nada lo está desacelerando), entonces el motor moverá el objeto hacia el noroeste.

Eso es lo que te consigue un motor de física: realiza un seguimiento de los objetos, sus posiciones y velocidades, y las fuerzas que actúan sobre ellos. Gracias a las leyes de la mecánica, incluso puede crear algunas fuerzas por sí solo, para manejar automáticamente cosas como colisiones, fricción y gravedad, todo sin que usted, el desarrollador del juego, tenga que hacer nada más.

El más cuchara
fuente
1

Un motor de física es básicamente un simulador de cuerpos de física.

Entrada

Le permite crear un cuerpo (o varios) especificando sus propiedades físicas como masa, tamaño, densidad, etc.

También le permite definir las propiedades del mundo de la física donde se produce la simulación (por ejemplo, la gravedad).

Finalmente, le permite aplicar fuerzas o crear articulaciones entre los cuerpos.

Salida

Una vez que haya definido todas estas cosas puede iniciar la simulación y el motor de física le dirá donde cada cuerpo será colocado en el siguiente paso de tiempo (que por lo general se corresponde con el siguiente fotograma de su juego). Y el siguiente, y así sucesivamente ...

Ves a los Sprites moviéndose en la pantalla porque cada cuadro del Game Engine le pregunta al Physics Engine

¿Dónde está este cuerpo ahora?

y Game Engine actualiza la representación gráfica en consecuencia.

Consideraciones

Por lo general, me gusta ver el motor de física como una herramienta para aplicar las leyes de física de manera declarativa .

De hecho, en lugar de escribir código para describir qué cálculos se deben realizar para determinar dónde estará un cuerpo en el próximo paso de tiempo, simplemente describo el mundo de la física estableciendo los atributos de los cuerpos (y del mundo de la física en sí) y dejo que el motor de física responda Esa pregunta para mí.

Luca Angeletti
fuente
Su sección de "consideraciones" no está realmente clara en absoluto (para mí). Si mejora eso para que sea más claro y concreto / práctico (por ejemplo, proporcione ejemplos de sistemas reales que haya observado, construido, etc.), le daré un +1.
code_dredd
@ray: Gracias por tu sugerencia. ¡Lo arreglaré lo antes posible!
Luca Angeletti
Asegúrate de enviarme un comentario una vez que hayas terminado y no lo apures. Debería ser útil para otros más adelante.
code_dredd