¿Cómo reproduzco el efecto warp de Geometry Wars?

12

Estoy tratando de lograr el efecto warp que ves en juegos como Geometry Wars .

Captura de pantalla de Geometry Wars incluyendo el efecto warp

¿Alguien puede ayudar a explicar lo que está pasando aquí? Siento que el eje z de la cuadrícula es manipulado de alguna manera por el programador, pero ¿hay alguna ecuación matemática conocida para obtener realmente el efecto de deformación correcto?

Editar: para ser más específicos, me refiero a la deformación de la cuadrícula. Cómo se ve todo tirado hacia el eje z negativo y luego rebota.

Joey Green
fuente
1
¿Te refieres al fondo que se dobla? Como se trata de Geometry Wars , hay mucho caos en la captura de pantalla, lo que me ha hecho rascarme la cabeza por un tiempo para tratar de decir a qué te referías.
Grace Note
Sí, el fondo se dobla.
Joey Green

Respuestas:

12

Una implementación de 10 minutos de un sistema de resorte simple (o eso dice en su blog ;)). El sistema puede manejar múltiples deformaciones y otras cosas que distorsionan la red.

Actualizado para agregar algunos detalles menores de adición:

Algunos otros detalles. De una entrevista que solía estar alojada en el sitio web de Bizarre Creations (ese sitio ahora ha desaparecido debido al cierre de la compañía) hubo una pregunta:

P: Una de las nuevas características gráficas más llamativas del juego es el área de juego "grid de gravedad". ¿Cómo hiciste que esto se viera tan genial? ¿Cada objeto en el juego realmente tiene su propia gravedad? La cuadrícula en sí se compone de 60,000 puntos, cada uno ejerciendo una pequeña cantidad de fuerza sobre su vecino. ¡La simulación en sí se encuentra al borde de la estabilidad, que es lo que hace que gire tanto cuando uno de los objetos del juego le da un pequeño empujón! Solo unos pocos tipos de objetos afectan la cuadrícula. Como el sistema de cuadrícula es bastante costoso de calcular, en realidad se ejecuta en el segundo núcleo junto con el sistema de audio (el primer núcleo está dedicado al juego y las partículas, el tercero se usa para reproducir el audio).

Roger Perkins
fuente
1

No sé si hay una forma "correcta" de hacerlo, pero es probable que solo sea una transformación lineal estéticamente agradable aplicada con una caída calculada desde la distancia hasta un punto.

Entonces, para cualquier elemento con el que esté trabajando, usted:

  • encontrar la distancia al centro de la urdimbre (d)
  • calcule 1 - d / la distancia máxima del efecto que desea (i para intensidad)
  • sujetar eso a [0-1]
  • transformar el elemento por lerp (identidad, transformar, i)

Iirc, las guerras de geometría aplicaron eso como una deformación distorsionadora a algunos elementos, mientras que otros elementos como las partículas fueron simplemente afectados por la "fuerza", sin ser distorsionados. Puede aplicar la distorsión en un sombreador de vértices, suponiendo que tenga suficientes vértices para muestrear suavemente el efecto. Alternativamente, podría representar todo lo que necesita afectar a un búfer fuera de la pantalla primero, y luego representar los resultados en un quad bien teselado al que aplica la distorsión, antes de agregar todos los elementos no distorsionados en la parte superior.

En cuanto a la transformación, la escala le dará la apariencia de succión. Si no recuerdo mal, también hubo algunas torsiones, lo que sería una pequeña rotación.

Puede ser más elegante y más elegante con sus cálculos del factor de intensidad para obtener efectos más extravagantes. Podría, por ejemplo, calcular el ángulo (a) de que un elemento es relativo al centro, y factorizar eso. Tome cos (a) y puede hacer ondas radiales en el efecto. Lo que desea hacer es configurar el código de andamiaje necesario y luego ir a la ciudad experimentando con diferentes combinaciones de factores.

Chris Subagio
fuente
Genial, gracias. Intentaré esto. ¿Es el algoritmo que describe básicamente un efecto de resorte?
Joey Green
No, no describí cómo variaría con el tiempo, así que no es un manantial. Acabo de describir cómo obtener la forma de distorsión que buscas. Animarlo en el estilo GW requeriría agregar otro factor allí, modulando i con el tiempo. Intente implementar todo y debe quedar claro para usted que puede escalar i para relajar o intensificar su efecto. Pase una onda sinusoidal a través de ese valor de modulación, o bótela como un resorte 1D y efectivamente rebotará todo. Una vez más, una vez que tenga un arnés con un montón de variables flotando, la experimentación será su amiga.
Chris Subagio