¿Cómo se simulan las balas en los videojuegos?


86

He estado jugando juegos como MW2 recientemente y, como programador, tiendo a preguntarme cómo hacen que el juego sea tan inmersivo. Por ejemplo, cómo simulan la velocidad de la bala.

  1. Cuando un PNJ dispara una bala de su arma, ¿la bala realmente viaja de su arma al objetivo dado o ignoran por completo esta parte y simplemente ponen un agujero de bala en el objetivo?

  2. Si la bala realmente viaja del arma al objetivo, ¿a qué velocidad viaja realmente?


25
¡Pantalla sangrienta, tan real!
AttackingHobo

66
dispara : BOOOOORRRIIIING
mahen23

1
No estoy seguro de si puedes llamar a las balas de Megaman Legend una bala, pero en Megaman, usan proyectiles lentos para la bala. En esos, puedes ver claramente los disparos curvándose si corres en círculos mientras disparas (un efecto coriolis).
Lie Ryan

Respuestas:


84

La mayoría de los juegos de FPS utilizan la emisión de rayos para el juego real; las balas viajan instantáneamente y alcanzan el objetivo cuando disparan.

Pero la mayoría de los juegos también emplean el uso de trazadores "falsos". Cada 3 disparos, o algún otro intervalo, se disparará un marcador junto con la bala, el marcador será realmente rápido, pero no instantáneo. Esto se hace solo como un efecto visual, y no afecta el juego directamente, sino que ayuda a dar señales al tirador, al tirador y a los espectadores una referencia direccional a los disparos.

La mayoría de los juegos que usan este tipo de física de bala no son realistas, ya que no hay rebotes, ni fragmentos de bala, y si hay alguna penetración, generalmente es lineal.

Algunos juegos, como ARMA II, STALKER (serie completa) usan una física de bala más realista con tiempo de viaje, rebotes y penetración con ángulos de desviación. Creo que estos sistemas están utilizando la emisión de rayos, pero con un límite que está determinado por la velocidad de la bala. Con estos juegos, la velocidad del hocico puede ser realista como en ARMA II, o parece tan correcta como en STALKER.

Prefiero tener física de balas realista, ya que las armas disparan proyectiles, no láseres.


1
Al no haber jugado ninguno de los juegos mencionados, ¿cómo afecta esto al juego? Quiero decir, si empleas física de bala en un juego como Call of Duty, ¿realmente ves una diferencia notable? ¿Los ángulos de penetración cambian el juego? ¿Se darían cuenta los jugadores de que su personaje no se alinea con el agujero de bala en relación con el tirador? Es curioso qué beneficios hay para justificar los gastos generales. Gracias por adelantado.
Dutchie432

Agrega una capa de imprevisibilidad y profundidad a la mecánica de disparo que encuentro agradable. ¡Las balas no son instantáneas! chuckhawks.com/rifle_ballistics_table.htm Una bala que va a 2644 pies por segundo durante 600 pies toma más de .2 segundos para alcanzar el objetivo, sin tener en cuenta una ralentización adicional. Se perdería un objetivo en ejecución si apuntas directamente a él. Una distancia adicional permitiría que la bala vaya más lenta que la velocidad del sonido, lo que permitiría a las personas saltar al suelo u otro si escucharan el disparo.
AttackingHobo

Hay varias declaraciones inexactas hechas en esta respuesta y deben eliminarse. Mira mi respuesta a continuación.
EddieV223

1
Las balas en ArmA 2 son proyectiles simulados; pueden modificarse (cambio de velocidad, cambio direccional) en pleno vuelo y colisionar con objetos a medida que viajan. Si esto se hace mediante proyección de rayos o no es irrelevante, actúan como objetos físicos reales.
deceleratedcaviar

entonces mw2? Raycasting o no? Porque lo hacen claramente un gran trabajo en la simulación de agujeros de bala y conseguir ambientes destruidos por ella
mahen23

51

Para las balas, generalmente no se molestan en simular la bala que realmente viaja por el aire y simplemente colocan un agujero de bala en el objetivo en el instante en que se dispara. Otras cosas como los cohetes son más lentos * y el juego en realidad los muestra viajando por el aire.

En las distancias cortas, las balas viajarán, junto con el lapso de tiempo entre fotogramas, de todos modos llegarían del tirador al objetivo entre o dentro de 1 fotograma.

* Es decir, más lento que los cohetes en la vida real, para que el jugador los vea volar por el aire.


44

Escribí el código de bala para PlanetSide. Teníamos algunos proyectiles 'hitscan', pero en su mayoría simulamos los proyectiles lo mejor que pudimos, dadas las limitaciones de la CPU y la gran cantidad de balas en juego en cualquier momento.

En el caso de hitscan, el impacto se determina en el mismo marco en el que se recibe la entrada, a menudo usando un solo rayo. Esto es apropiado para armas como láseres u otros proyectiles extremadamente rápidos. Hicimos hitscan simplemente girando la velocidad inicial en el proyectil tan alto que cruzaría el tablero de juego en un solo tic.

Las balas sin hitscan se marcan, ya sea al tiempo del cuadro de gráficos o a un paso de tiempo fijo, con cálculos para la aceleración (pensar cohetes), la gravedad, la fricción del aire, la orientación (pensar en proyectiles de búsqueda de calor), etc. El objetivo es generar la posición terminal del proyectil para el paso de tiempo. Una vez que se establecen los puntos de inicio y finalización, se pueden lanzar uno o más rayos para aproximar la ruta de vuelo y detectar cualquier colisión que hubiera ocurrido durante el vuelo.

Tanto en proyectiles hitcan como no hitcan, lo que sucede en una colisión depende de sus propiedades de proyectil y de la superficie que impacta. Por ejemplo, puede golpear una superficie dura, en cuyo caso puede verificar su conteo de rebotes y ajustar la posición y la velocidad por un reflejo, o detonar el proyectil si ha alcanzado su conteo de rebote máximo. En este sistema, un cohete solo tiene un conteo máximo de rebote de 0. Puede golpear una superficie blanda y luego verificar su poder de penetración para determinar si el proyectil debe continuar a través del material, etc.

Fue divertido escribir código. Además, es súper útil escribir una buena visualización de depuración de lo que está sucediendo para que pueda inspeccionar visualmente las rutas de vuelo, eventos, etc.


2
Jugué Planetside antes de comenzar a programar un buen juego, y eso suena divertido.
Anthony

18

Depende del juego y del nivel de precisión / realismo.

Sincronizar los modelos de disparo y daño en la configuración multijugador es bastante difícil, ya que debes determinar con precisión dónde y cuándo se disparó exactamente una bala, si alcanzó un objetivo y si algo más pasó por el camino.

Por lo tanto, sospecho que, cuando sea posible, los diseñadores de juegos simplificarán las cosas al tratar algunos disparos como instantáneos (por lo que solo necesita considerar la ubicación de todos en un solo momento en el tiempo) o restringir el alcance de la bala. Afortunadamente, esto a menudo corresponde a la física de la vida real. Por ejemplo, los rifles de francotirador disparan rondas de alta velocidad.

Muchos juegos pueden simular una ruta de múltiples pasos y múltiples instantáneas de un objeto de movimiento lento (como artillería, bombas, rondas de marcadores, etc.) pero eso es muy costoso y los problemas de sincronización son más comunes, lo que lleva a divertidos videos de YouTube.

Otra preocupación es con los juegos que mantienen "entornos" más pequeños separados (por ejemplo, cada sala se simula por separado) para crear una ilusión de un espacio más grande. En estos casos, las cosas dentro de los límites de una "sala" pueden simularse correctamente para que todos en la sala se actualicen sobre la serie de transiciones en el espacio que realiza la bala, pero otros fuera de ese entorno no.


14

Para los proyectiles que viajan más rápido de lo que el ojo puede ver, a menudo se emplea la emisión de rayos: se calcula un rayo desde el hocico con la dirección adecuada y se prueba contra posibles objetos objetivo para determinar qué fue golpeado. Esto puede ser complicado con múltiples rayos y algunos cálculos adicionales si desea simular cosas como la caída de bala y tal. También puede darles velocidad a los proyectos y usarlos para agregar realismo adicional al cálculo (para que las viñetas no sean instantáneas).


11

Depende de la implementación, pero sé que el motor de origen no usó balas físicas (objetos de proyectil), solo hizo un lanzamiento de rayos del jugador al objetivo con un círculo aleatorio de "zona de impacto" (los radios más grandes o más pequeños dependían de qué tan rápido disparó el arma y si el jugador mantenía presionado el botón de disparo) cuál era su centro en el punto al que apuntaba el jugador, luego de determinar el rayo real lanzado por el jugador hasta el punto determinado al azar y dependiendo de otros factores (como "peso" de la bala y velocidad del hocico (todos los números internos), golpe de objeto, etc.) el lanzamiento del rayo se lanzó a través de múltiples objetos o hasta que tocó el terreno.

Por otro lado, el motor Torque 3D DID utilizó objetos de proyectiles reales y el diseñador podría afectar sus modificadores individuales de velocidad, masa y gravedad. Todo lo que hizo el motor fue actualizar los valores cada 32 milisegundos.

EDITAR

Además de usar objetos de proyectil, el motor Torque 3D también permitía el uso de rayos como alternativa. (He hecho varios juegos donde el "proyectil" es en realidad un efecto de partículas que no tiene el soporte que los objetos de proyectil tenían, por lo que se requería un lanzamiento de rayos).


increíble historia hermano. Sin embargo, estoy seguro de que el motor Torque 3D requería más potencia de procesamiento para calcular toda esta física.
mahen23

@ mahen23 Te sorprenderías. Tenía MENOS cálculos físicos que el Motor de origen, en parte porque no manejaba las colisiones de Softbody en absoluto, solo simples cajas de límites y colisiones.
Casey


6

En realidad, muchos juegos usan un algoritmo de prueba de éxito de representación de gpu. Aquí está la forma básica en que funciona:

1) Fuera de la pantalla, cree una representación de la vista actual donde todo el terreno es negro, y cada personaje es de color no negro 2) Obtenga el color del píxel debajo de la cruz 3) Si no es negro, busque el color- > mapeo de jugadores y aplica un golpe a ese objetivo.

Este método se ha utilizado durante años en juegos principalmente porque es perfecto en píxeles. Si un píxel del sombrero del jugador sobresale detrás de una pared, puedes golpearlo. Es decir, si puedes verlo, puedes golpearlo. Este tipo de precisión es casi imposible con técnicas simples de fundición de rayos. Y en segundo lugar, este tipo de prueba es extremadamente rápido y se puede realizar en la GPU.


¿La búsqueda de color-> jugador suena dolorosa? Si lo proyectara con rayos, ¿no sería esa la misma eficiencia?
Caviar desacelerado

En realidad, es extremadamente rápido. La mayor parte del tiempo dedicado al renderizado proviene del sombreado de los polígonos reales. En el caso de renderizar la prueba de impacto, solo se utilizan polígonos de color sólido. Además, esta prueba de éxito se puede hacer completamente en la GPU, y es perfecta para píxeles. Nada molesta más a un jugador que dar un golpe perfecto a un objetivo, y luego hacer que la prueba de golpe le diga que fue un fallo.
Timothy Baldridge el

Pero, ¿cómo convierte el espacio de píxeles en espacio mundial al objeto correspondiente que golpeó?
desaceleratedcaviar

@Daniel: Como dice la respuesta, el objetivo que recibe el golpe se identifica por color. Cada personaje se representa como un color diferente (sólido), por lo que puede verificar el color y negro = omitir, cualquier otra cosa = buscar quién se renderizó en ese color, porque fueron golpeados.
Dave Sherohman el

@Dave Sherohman, debo haberlo leído mal originalmente, después de leer su explicación, parecía muy claro lo que quería decir ... aplausos
desacelerado

4

Sin duda, algunos juegos utilizan una física de bala realista, teniendo en cuenta el tiempo de viaje y la caída de la bala, pero supongo que la mayoría de los juegos no lo hacen, al menos para los NPC.

Para un juego que realiza un viaje de bala directo (sin caída) que es instantáneo, el juego traza una línea imaginaria (vector) desde el punto del barril hacia adelante. Luego calcula con qué se cruza esa línea y registra un "golpe" de bala en ese punto. Podría ser un objeto sólido como una pared donde un impacto desencadena un efecto como una calcomanía de bala y una "nube" de humo / escombros. Puede impactar un objeto rompible y provocar que se rompa, o puede impactar un objeto físico y darle una "patada". O, por supuesto, podría golpear al jugador u otro NPC y causar un golpe de salud. Las simulaciones de núcleo duro modelarán la bala que penetra a través de las paredes y desencadenará un efecto de golpe en el lado de salida, probablemente disminuyendo el daño de la bala al salir.

Solo para que los NPC no tengan un objetivo perfecto, muchos juegos agregan algún tipo de aleatorización al vector para modelar la propagación de balas. Esto es lo que verías en la vida real, donde las balas no todas golpean justo donde apuntas, sino en un patrón centrado alrededor del punto de puntería.

Para visualizar la propagación de la bala, imagine un cono saliendo de la pistola en lugar de una línea recta (vector). La dirección real de la bala se aleatoriza para estar en algún lugar dentro de este cono. Si el tirador está realmente cerca del objetivo, la extensión es pequeña y la precisión alta. Si el objetivo está muy lejos, el cono agrega más dispersión, por lo que es menos probable que el tirador golpee el objetivo.

Esta idea del cono de disparo se puede utilizar para modelar la precisión del tirador (habilidad), la precisión del arma y otras condiciones. Por ejemplo, un NPC de bajo nivel podría recibir un cono de disparo de baja precisión, mientras que un NPC altamente calificado tendría una precisión de alto nivel. Un jugador que corre con una ametralladora disparando desde la cadera tendría un cono de tiro ancho, que se reduciría si deja de correr o apuntar. Los rifles de francotirador tendrían conos de tiro más estrechos por naturaleza que una pistola.


+1 buena información. Pero creo que podría ser visualmente más agradable si la IA es realmente mala para apuntar al jugador, en lugar de un cono más grande. O si quieres agrandar el cono, hazlo de tamaño variable en función del retroceso y da a los enemigos de nivel inferior una tasa de aumento de tamaño más rápida, para que parezcan inexpertos.
AttackingHobo

1

Hablando del código fuente de Nexuiz desde el momento en que eché un vistazo, en realidad no enviaron un objeto 'bala' desde el punto A al punto B. Si recuerdo correctamente, y esto es específico solo para algunas armas, otras armas no son Cuando se disparan armas de impacto instantáneo, el código mira hacia dónde apunta su arma. Si está dirigido a una persona (y es un arma de golpe instantáneo) cuando haces clic en 'disparar', entonces hiciste un golpe.

También es notable cómo Nexuiz tenía la opción del lado del servidor de calcular los hits en el cliente o en el servidor. Si sospecha que los clientes están haciendo trampa, puede cambiar a los cálculos de aciertos del lado del servidor en un intento de ayudar a mitigar eso.


1

Otra estrategia es un híbrido de renderizar todo y rastrear todo. No necesariamente tiene que renderizar cada viñeta. Como ejemplo, si su arma dispara 30 disparos / segundo, un ataque puede generar unos cientos de partículas ... puede reducir el renderizado mediante el uso de un "efecto marcador", renderizar cada tercer disparo, rastrear los otros dos. El jugador todavía ve 10 disparos / segundo disparando al enemigo.

Ajusta tu situación específica, rinde más por una menor tasa de armas de fuego, menos por mayor.


1
Debe incluir información sobre por qué cada tercer tiro tendría el marcador. No es un desarrollo para desarrolladores de juegos. Fueron los militares. Balas trazadoras que tienen fósforo incrustado en la parte posterior de la babosa. Cuando se dispara la ronda, la pólvora enciende el fósforo creando un rastro brillante detrás de la bala. Las balas trazadoras son más caras que las balas normales, por lo que solo se usan en X disparos para ahorrar dinero, mientras que tienen el efecto deseado de poder apuntar más fácilmente.
AttackingHobo

Además, no desea dividirlo en el renderizado y la actualización como usted dice. Desea que toda la física de la bala se realice por completo con el método de actualización. Desea que cada disparo X más o menos genere también un efecto de trazado que sea mucho más lento que la bala para mostrar movimiento y dirección.
AttackingHobo

@AttackingHobo No estaba pensando específicamente en las rondas de fósforo, sino en alguna señal visual de que las balas están volando. La idea era utilizar la compresión selectiva ... eliminando un nivel de detalle que el jugador nunca registraría como "perdido", pero eso alivia la carga del sistema. El bit "cada 3a viñeta" es arbitrario ... tendrías que experimentar para ver qué funcionó bien. En su respuesta usted dijo "rastreadores falsos", lo que también tiene mucho sentido.
Stephen

1

No olvide que la velocidad de fotogramas frente a la velocidad de la bala puede ser un problema, en algunos casos, si no codificó su motor de física lo suficientemente bien, la bala puede atravesar el objeto sin golpearlo. Hay una solución para ese asunto, que no recuerdo muy bien ...

De todos modos, creo que puede ser muy problemático compensar las balas realistas en un entorno multijugador, si no imposible si la latencia comienza a ser más larga que 30 o 50 ms.

Sin embargo, un día, el ISP puede preocuparse un poco más por la latencia y ofrecer diferentes ofertas ... pero sin FTTH, sigue siendo un sueño ...


1

En juegos como mala compañía, Battlefeild 3 y acosador, creo que la bala es una entidad individual real disparada como un "cohete". Solo creo que el trazado de rayos es necesario si la bala alcanza instantáneamente el objetivo. Cuando la entidad en sí misma en balas realistas solo estará marcando para ver si golpea a alguien.


0

En realidad, si miras las repeticiones de video en Call of Duty, puedes ver débilmente un bípedo naranja volando por el aire hacia el objetivo deseado, y atacar ahobo realmente tiene la respuesta correcta en su mayor parte.

Si quieres un efecto richochet como dijo Hobo, solo ve a jugar a cualquiera de los juegos de Halo. Si disparas a una pared de metal desde una posición más cercana, puedes ver las balas resonando del metal. El francotirador en él deja un rastro hacia donde golpea.

Respuesta reiniciada terminada, puedo volver más tarde para arreglar.


-5

Las viñetas y toda la física en la serie de juegos de acosadores usa una biblioteca de código abierto llamada "Open Dynamics Engine".

http://en.wikipedia.org/wiki/Open_Dynamics_Engine

Las balas caen con gravedad e incluso rebotan alrededor de las paredes y cosas con mucha precisión si eres lo suficientemente inteligente como para que puedas doblar una bala para dispararle a alguien que no puedes ver pero que conoce su posición. La viñeta es un modelo de objeto real. Esta es la forma más realista que he visto, el método de trazado de rayos no es práctico cuando comienzas a moverte en espacios grandes. Sin embargo, estaría bien disparar una pistola láser.

Otros juegos que lo usan BloodRayne 2, Call of Juarez, World of Goo, X-Moto y OpenSimulator.

Otra buena opción sería la biblioteca de física "Bullet". http://en.wikipedia.org/wiki/Bullet_%28software%29

Fue utilizado en Grand Theft Auto 4, Red Dead Redention y más.

ps arma 2 usa un motor de física interno, su próximo juego arma 3 usará un motor de física physX


3
Es engañoso enumerar los juegos que usaron ODE para fines que no tienen nada que ver con balas.
jhocking

44
También es engañoso decir que el acosador usa ODE para las balas, cuando de hecho el juego usa sus propias pruebas de colisión patentadas, pero solo usa el solucionador ODE.
AttackingHobo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.