Cómo crear rastro de plasma para nave espacial

13

He visto muchos juegos espaciales geniales que usan efectos similares. Estoy realmente interesado en descubrir cómo se hacen generalmente algunos de estos efectos.

En particular, quiero saber cómo se logran algunos de los senderos detrás de naves espaciales o misiles sin utilizar todos los recursos disponibles.

Para ver ejemplos del efecto, me refiero a ver las capturas de pantalla de Gimbal , e incluso el video en ese mismo enlace. También los senderos de misiles en Ether Vapor .

¿Son ambas las mismas técnicas? Estoy principalmente interesado en 2D, pero no puedo imaginar que sea demasiado diferente.

Entonces, ¿cómo haría para crear este tipo de efecto? ¿Estamos hablando de sombreadores de píxeles, modos de mezcla / filtros, efectos de mapa de bits, sistemas de partículas o qué? No es realmente plataforma específica. Solo estoy buscando la teoría, pero ejemplos o enlaces específicos serían geniales. Y más detalles, mejor.

Adam Harte
fuente

Respuestas:

7

Entonces, ¿cómo haría para crear este tipo de efecto? ¿Estamos hablando de sombreadores de píxeles, modos de mezcla / filtros, efectos de mapa de bits, sistemas de partículas o qué? No es realmente plataforma específica. Solo estoy buscando la teoría, pero ejemplos o enlaces específicos serían geniales. Y más detalles, mejor.

Todas las anteriores.

A menos que revise su código fuente, es posible que no sepa con precisión cómo lo hicieron.

Sin embargo, por el aspecto de los dos juegos, ambos tienen lo que parece ser la geometría que está conectada y sigue al barco. Puede que no sea necesariamente un sistema básico de partículas puntuales, pero tampoco es tan difícil.

Algunos juegos usarán un algoritmo de línea curva y generarán una lista de vértices a partir de eso y realizarán un poco de texturización con diferentes texturas aplicadas en los dos puntos finales del camino, de modo que en un punto el escape se vea caliente y en el otro esté más frío y se arrastra hacia el espacio.

El barco de un jugador es un caso interesante porque los movimientos son impredecibles, y es posible que necesites actualizar los puntos de control de tu algoritmo de curva o terminar probando la última posición del barco y generar posiciones de vértice basadas en eso.

Eche un vistazo a esta respuesta de una pregunta anterior si desea tener algo que funcione fuera de los puntos de control. Sin embargo, para sus necesidades, probar la posición de los jugadores probablemente funcionaría mucho mejor y sería más fácil de entender.

Aquí hay algo para que pienses:

Comience a muestrear la posición del jugador. Estos puntos formarán los segmentos del cuerpo de su rastro, a partir de los cuales se puede construir la geometría. Es una buena idea mantener un segmento de cola separado que tenga una textura separada. Es posible que desee detectar cuándo un jugador está girando y aumentar la frecuencia de estos segmentos, de lo contrario, terminará con curvas en bloque. A menos que ese sea el efecto que buscas :)

En ciertos eventos, los segmentos deben dejar de generar y los existentes deben comenzar a reducirse lentamente, comenzando desde el segmento del cuerpo más cercano a la cola (pero no la cola en sí). Esto es en caso de que el jugador disminuya la velocidad. Pero, si la velocidad a la que se reducen los segmentos coincide con la velocidad de la nave del jugador, entonces se formará un nuevo segmento justo a tiempo a medida que se saca uno. Entonces esto también funciona bien para un barco que está en pleno movimiento. La longitud del sendero siempre será la misma, lo que proporciona un flujo fluido y constante.

El segmento de la cabeza siempre debe estar en la posición actual del jugador. Si se detectan giros, el segmento de cabeza existente se agrega a un segmento de cuerpo y se inicia un nuevo segmento de cabeza. Repetir. Dependiendo de sus texturas, cada segmento también puede tener una longitud máxima.

Esto nos da una manera fácil de modelar este efecto: a partir de la idea de que el efecto siempre disminuirá / disminuirá por sí solo a menos que se suministren más segmentos, y jugando con velocidades para evitar que se reduzca.

Jovan
fuente
4

Hay muchas posibilidades diferentes para crear tales senderos. Puede usar líneas simples, polígonos, nubes de puntos, etc.

Todos se basan generalmente en uno de dos conceptos:

  • Sigue las posiciones anteriores y úsalas para dibujar la cola.
  • Siga la velocidad / dirección y ajuste la cola en función de eso.

El primero es más adecuado para cosas como los misiles, mientras que el segundo enfoque es mejor para algún tipo de cosas adjuntas que siguen algo (como la cola de un dragón).

Una implementación simple para las colas del motor no es tan complicada. Solo necesitará un poco de búfer para almacenar posiciones anteriores. No sé qué idioma está usando, pero para esto usaría un búfer en anillo o algún tipo de búfer similar (eliminaciones e inserciones rápidas en los extremos).

Cada x-ésimo tick frame / update (no tiene que hacerlo cien veces por segundo), esencialmente suelta el elemento más antiguo / último en su búfer y agrega la posición actual al frente (solo si el búfer está lleno; asegúrese de que siempre contenga n elementos, donde n determina la longitud de su cola).

Luego, durante el dibujo, simplemente comienza en su posición actual y dibuja un conjunto de líneas a través de todos los puntos en su búfer, mientras reduce su opacidad con cada vértice adicional.

De esta manera deberías terminar con una cola bonita y limpia. Según su plataforma, puede ampliar esto, por ejemplo, usando sombreadores o ajustando un bonito gráfico de cola a lo largo de ese camino.

Mario
fuente