¿Los motores de videojuegos usan ecuaciones físicas reales en sus algoritmos?

Si y no. Los motores de física creados para juegos usan ecuaciones físicas clásicas en la mayoría de las matemáticas involucradas en el cálculo de cómo deben moverse los objetos, pero no siempre usan esos resultados directamente y algunas veces se aproximan a esas ecuaciones.

El objetivo de un motor de física es actualizar el estado de los objetos en el juego para que parezcan realistas. Por lo tanto, emularán la física real involucrada tanto como sea posible. Desafortunadamente, con un poder de procesamiento limitado y memoria limitada para almacenar valores matemáticos precisos, nunca es perfecto e inevitablemente el código “engañará” para compensar estas limitaciones.

Un ejemplo es la resolución de colisiones (consulte este sitio para obtener una descripción general de una implementación simple). No importa cuánto intente el motor de física mantenerse fiel a las ecuaciones físicas, los errores en la precisión de los números utilizados en las matemáticas harán que los valores se desvíen de su valor “verdadero”. Cuando los objetos se mueven rápido y rebotan mucho, estos pequeños errores no se notan y todo se ve bien para los jugadores. ¿Quién va a notar que algo rebotó en una pared en un ángulo de 45.700001 grados en lugar de 45.7 grados?

Sin embargo, las cosas se complican cuando tienes una situación más estática, como un conjunto de cajas apiladas uniformemente. Debido a que las matemáticas en la computadora no son precisas, una esquina de una caja puede sumergirse muy ligeramente en la que está debajo al final de un cuadro. En el siguiente cuadro, el motor intentará resolver esa colisión, haciendo que la caja se mueva hacia arriba (y gire, porque el punto de colisión está en una esquina de la caja), lo que hace que la caja que se encuentra arriba se mueva hacia arriba (y gire), y así. Ese pequeño error matemático hace que toda la pila se vuelva inestable. Este pequeño error es mucho más notorio para los jugadores porque podemos decir fácilmente cuándo una caja se mueve en su lugar en lugar de no moverse en absoluto.

Para solucionar este problema, algunos motores usan un concepto que se llama poner objetos a “dormir”. Un objeto que está dormido no tiene ninguna física aplicada a menos que las fuerzas involucradas superen algún umbral. Entonces, en el caso de las cajas apiladas, incluso si las cajas se superponen ligeramente, si sus velocidades son muy cercanas a 0, las fuerzas que se aplicarían para separarlas y mantenerlas contra la gravedad son lo suficientemente pequeñas como para que el sistema físico decida no aplicar ninguno de ellos. ¡Y voilá! Las cajas permanecen apiladas y nada parece fuera de lugar para los jugadores. Hay números como el umbral de suspensión en todo el código de física para ajustar las cosas para que parezcan realistas cuando la física real no se puede aplicar exactamente.

Otro tipo de problema con el que tienen que lidiar los motores de física es el rendimiento. Los juegos deben ejecutarse a una velocidad de fotogramas razonable. Esto significa que durante un período de tiempo muy corto (generalmente alrededor de 30 milisegundos o menos) el motor necesita descubrir todo lo que cambiará sobre el estado del juego durante ese tiempo y mostrarlo todo en la pantalla. La física es solo una parte de toda esa lógica. Esto significa que, en la mayoría de los casos, el motor tendrá que cortar esquinas para decidir sobre algún estado antes de que se acabe el tiempo.

Nuevamente, usemos colisiones como ejemplo. Al determinar si hay una colisión, la forma correcta es resolver por el tiempo exacto que dos puntos en la superficie de dos objetos colisionarán y calcularán la normalidad de su superficie en ese punto. (Lo normal es la dirección perpendicular a una superficie. Para la parte superior de una mesa, lo normal sería apuntar hacia el techo … a menos que su casa tenga una arquitectura inusual. Lo normal es importante para colisiones porque las fuerzas de impulso se aplican a cada objeto será a lo largo de esa dirección.)

Si bien es posible hacerlo de la manera correcta, las matemáticas involucradas requieren mucho tiempo. Una forma simplificada que utilizan muchos motores es verificar las colisiones de forma discreta, en cada paso de un cuadro. Sin embargo, esto tiene algunos problemas. Si en t = 0 dos objetos no se superponen, pero en el tiempo t = 1, sí lo están, ¿cómo debe decidir en qué punto del espacio realmente colisionaron? ¿Y cómo calcularía cuál es la normalidad en el punto de contacto si en realidad no tiene un solo punto donde colisionan? Esto es especialmente complicado cuando los objetos son más detallados que los círculos:

Si bien un motor que usa detección de colisión discreta todavía usa las mismas matemáticas para aplicar fuerzas y actualizar las velocidades del objeto, no usará valores físicamente precisos para las variables en las ecuaciones. Serán aproximados, como en el ejemplo anterior (tomado del sitio que he vinculado anteriormente).

Entonces sí. Los motores de física usan ecuaciones físicas reales, pero no siempre, y nunca con un 100% de precisión.


Editar: si está buscando más ejemplos, hay muchos que no podría encajar en una sola respuesta de Quora. Este documento es un gran ejemplo con la dinámica de fluidos y la ecuación de Navier-Stokes si está dispuesto a sumergirse en más matemáticas. (Idealmente, conocería algunos cálculos en 3D y álgebra lineal, pero tome una lectura independientemente. La introducción es especialmente relevante para esta pregunta).

La respuesta de Andrew es realmente buena.

La “física” cubre mucho terreno. La física de Newton y la resolución de colisiones han sido bastante moderadas por varias bibliotecas de física que utilizan técnicas como las que él ha descrito. Sin embargo, apoyarse en esos motores si la simulación física tiene ramificaciones importantes para la mecánica de su juego puede ser arriesgado.

Por ejemplo, si estás haciendo un juego de estilo Sonic the Hedgehog, podrías pensar que sería genial usar fricción estática y de rodadura y usar la gravedad y la resistencia al viento para simular su vuelo por el aire. Sin embargo, probablemente te equivocarás. Este tipo de cosas afectarían drásticamente el control y la sensación del juego, y estarían fuera de tu alcance si los llevaras a una biblioteca de física. Desea poder ajustar cosas así, y ser fiel a la física generalmente es secundario a ser divertido y sentirse increíble.

Por otro lado, si estás haciendo un juego como Foldit, donde los desafíos en realidad se correlacionan con la ciencia real para aprender cómo se pliegan las proteínas, en realidad estás contribuyendo a la ciencia básica, chico, ¿alguna vez quieres obtener esa física? tan sólido como puedas La diversión sola no hará el trabajo.

El programa espacial Kerbal y los simuladores de vuelo son otros buenos ejemplos de juegos en los que ponen mucho amor en lograr que la física sea lo más precisa posible.

Un gran problema son los sistemas de control. En la mayoría de los juegos, cuando especificas el destino en el que quieres terminar, generalmente no hacen ciencia de cohetes y descifran los sistemas de control para obtener los vectores de empuje correctos para un vuelo estable y un aterrizaje suave. Simplemente lo envían a su meta deseada de una manera que parece físicamente plausible. Si conduce y gira la rueda de un vehículo con demasiada fuerza, volcará el vehículo. ¿Con qué frecuencia te ha sucedido eso en un juego? No a menudo, porque tiende a no ser divertido. Si estás caminando, que es un acto de equilibrio / caída extremadamente complicado, chico, no vas a simular eso en absoluto. Simplemente lo vas a animar a mano en general.

Permítanme agregar una historia a la extensa respuesta dada por Andrew.

Soy un estudiante de física y mi hermano es un estudiante de ciencias de la computación, así que he visto el programa a través de ambos ojos 😀

A veces se acerca a mí y me dice: usted es físico, así que puede ayudarme con algo.

Entonces voy a su computadora y miro el programa. Después de un tiempo, reconozco algunas partes de las ecuaciones que son algo similares a las que tengo en mi cabeza. Pero hay términos adicionales que no tengo idea de por qué. Entonces, le pregunté una vez qué es una variable allí y dijo que es solo un número que se usa para cambiar la escala de los vectores para que no se apoderen de toda la pantalla. Y había un término que nadie sabía por qué, pero el profesor dijo que debería estar allí, etc.

Entonces, sí, usan la física, pero hasta cierto punto, ya que todavía tiene que verse bien en la pantalla y tiene que funcionar rápido.