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.
- En la ecuación 3x ^ 2-6x + 3, ¿cómo afecta -6x a la gráfica?
- Cómo resolver la ecuación tan ^ 2xsinx-sinx / 3 = 0
- Cómo construir un solucionador de ecuaciones de imagen en iOS
- ¿Cómo cambian las raíces de ‘x ^ 2 + bx + c’ cuando b se mantiene constante y c cambia?
- Si dejo caer una pelota que pesa 0.5 kg y la dejo caer en un pozo de 126.5 metros, ¿qué ecuación debo usar?
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).