Creando mi propia cámara de asesinatos

15

Planeo crear mi propio sistema kill cam para un conjunto de herramientas sandbox. Sin embargo, después de pensar en la mecánica de la cámara de matar, estoy bastante perdido. Estoy tratando de recrear los que se ven comúnmente en los juegos de Call of Duty que muestran, desde el punto de vista del asesino, la escena de la muerte real.

Mis pensamientos:

-No puedo guardar memoria cuando la gente mata a otros porque no sabría cuándo comenzar el 'proceso de grabación'. Hay un camino para que yo pueda determinar con precisión cuándo alguien está "a punto" de matar a alguien.

-Mi única idea real hasta ahora es tener un duplicado completo de todo lo que está cargado a un lado copiando todo el movimiento del mundo original pero con un retraso de 10 segundos. De esa manera, todas las cámaras de matar durarían 10 segundos y la cámara de las personas sería trasladada al segundo mundo de su asesino.

Mis preguntas:

¿Existe ya una forma aceptada de hacer esto? ¿Alguien tiene alguna buena idea para algo como esto? Gracias si puedes!

Freesnöw
fuente

Respuestas:

10

Almacene los últimos segundos de datos de movimiento de objetos dinámicos relevantes .

Estos datos deben ser lo suficientemente completos como para que puedan usarse para reconstruir una escena de killcam si es necesario, pero lo suficientemente incompletos como para permitirse recuperarlos y almacenarlos a intervalos lo suficientemente cortos.

Ejemplos de cosas que puede que desee rastrear:

  • De qué manera se mueve / mira un jugador visible
  • Si el asesino se acerca al alcance de la pistola

Cosas que probablemente quieras optimizar:

  • Datos sobre jugadores que el asesino no puede ver
  • La salida de pantalla real de cualquiera
Anko
fuente
Hay un gran problema en su respuesta, normalmente no puede predecir la muerte de nadie y tampoco puede predecir quién recibirá la próxima muerte. entonces, al optimizar los datos sobre algunos jugadores, podrías terminar perdiendo la habilidad de repetir algunas muertes.
Ali1S232
2
@Gajet Creo que en este caso, quiere decir eliminar todos los objetos relevantes y solo almacenar datos para aquellos posteriores. En otras palabras, ya querría tener algún tipo de mecanismo de almacenamiento / actualización para realizar un seguimiento de las posiciones de todo y sus entidades, pero por un tiempo limitado. Digamos que solo quieres los últimos 10 segundos para una cámara asesina. Solo necesitaría una estructura de datos lo suficientemente grande como para almacenar los últimos 10 segundos y todo lo anterior que sea reemplazado al final, como en una cola de doble finalización.
ChrisC
Simplemente confirmando que la respuesta de Ricer es lo que quise decir. De hecho: cuando no pueda predecir el futuro, prepárese para ello. :)
Anko
1
Es importante mencionar que los juegos en línea en tiempo real nunca muestran a los jugadores lo que realmente sucedió; el juego siempre está haciendo conjeturas sobre cuál podría ser la verdad, pero debido a las latencias y otros problemas de red, los juegos no descubrirán cuál era la "verdad objetiva" hasta mucho más tarde, si es que lo hacen. Por lo tanto, si no tiene datos de "kill cam" disponibles para poder volver a crear el punto de vista de otra persona, no debería sentirse mal por inventar datos plausibles de kill cam en aquellas situaciones donde lo necesita.
Trevor Powell
0

No tengo idea de cómo se implementa esto normalmente, pero puede hacer que cada viñeta guarde un clip desde el momento en que se dispara, hasta que golpea un objetivo. Si el disparo se realiza solo con un hitcan, puede calcular si se generará o no el video de la cámara de interrupción en el mismo ciclo cuando realice el hitcan.

CuervosKrag
fuente
0

Puede guardar la transformación de un objeto cada dos segundos más o menos. Haga esto para todos los objetos dinámicos aplicables. Alterne el guardado de modo que en cada cuadro solo esté guardando un par de matrices. ahorre tan atrás en el tiempo como desee.

Durante la reproducción, en realidad usa estas transformaciones en un motor de renderizado para animar a través de una escena, interpolando entre transformaciones por tiempo para cada fotograma según sea necesario.

No es un duplicado exacto, pero está muy cerca y le permite darle al jugador la opción de controlar la cámara durante la reproducción para que pueda elegir desde dónde ver la escena.

Steve H
fuente
¡Hay un problema con almacenar solo matrices de transformación, no guardar nada más! por ejemplo, si solo guardas matrices de transformación para los jugadores, las animaciones pueden salir mal, no podrás ver cuánto daño recibió el enemigo antes de matarte y cuándo disparó su arma. hay una larga lista de detalles que echas de menos usando tu método que puedes pensar fácilmente sobre ellos.
Ali1S232
Vuelva a leer, guarda transformaciones para todos los objetos dinámicos apropiados, no solo matrices para jugadores. También es bastante fácil guardar datos de salud o puntos de vida y otros elementos también. El punto es que guardar demasiados datos consume recursos de tiempo de juego (malo). Ahorra lo menos posible y deja que tu motor de renderizado haga la mayor parte del trabajo pesado por interpolación durante la reproducción como sea posible. Es un compromiso, pero ¿qué no lo es?
Steve H
0

puedes implementar alguna función de repetición en tu juego. usando la función de repetición, killcam es solo una repetición que se juega desde un tiempo de juego específico y desde el punto de vista de algún jugador. más tarde, puede guardar las repeticiones y dejar que otros revisen los juegos una vez que hayan terminado.

También su idea de ejecutar un mismo juego con entradas de 10 segundos de retraso es un buen enfoque si su juego no consume una gran potencia de cálculo.

Ali1S232
fuente
0

Qué tal esto...

Solo registre cuando existe la posibilidad de matar.

Piénselo desde la perspectiva de un AIM-BOT. Solo apuntará / disparará cuando matar sea una posibilidad. Por lo tanto, solo debe registrar cuando un enemigo está dentro del alcance matable / visible.

waterwizard11
fuente
¿Qué pasa en situaciones que involucran disparar a través de un objeto? Ray casting tanto seguramente será más intensivo de CPU que algunas de las otras ideas establecidas. Buena idea, sin embargo, podría considerar eso como parte de una solución.
Freesnöw
0

Establezca un radio alrededor del jugador y si otro jugador ingresa al radio, entonces comienza la grabación de pantalla para ambas personas. Luego espera para ver si alguien es asesinado. Si es así, encuentra al asesino y toma su grabación y rebobina la cantidad de tiempo transcurrido desde la muerte más la duración que desea que tenga el video y rebobine y reproduzca para el que fue asesinado. Si no se mata a nadie y nadie más está en el radio alrededor del personaje, elimine o detenga la grabación. Si el asesino se acerca a una mira telescópica, eche un rayo hacia donde apunta y cree otro radio de disparo. Si hay alguien dentro, entonces graba la pantalla de quien está en el radio donde apunta el personaje objetivo y del personaje objetivo. Si alguien muere por el personaje que apunta, entonces te tomas el tiempo transcurrido desde la muerte más la longitud que deseas que tenga la cámara de matar y rebobinas y juegas esto para el que fue asesinado. Si se alejan, detén la grabación. Este es un concepto, así que no lo he probado.

Ethan Smith
fuente