Un programa debe tomar entrada, procesarla y dar salida. Entonces, ¿qué toma exactamente un motor de física como entrada y proporciona como salida?
Un programa debe tomar entrada, procesarla y dar salida. Entonces, ¿qué toma exactamente un motor de física como entrada y proporciona como salida?
Respuestas:
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.
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) .
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.
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:
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.
Un motor de física es básicamente un simulador de cuerpos de física.
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.
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.
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í.