Como criar trilha de plasma para nave espacial

13

Eu já vi muitos jogos espaciais incríveis que usam efeitos semelhantes. Estou realmente interessado em descobrir como alguns desses efeitos geralmente são realizados.

Em particular, quero saber como algumas das trilhas atrás de naves espaciais ou mísseis são realizadas sem o uso de todos os recursos disponíveis.

Para exemplos do efeito, quero dizer, veja as capturas de tela do Gimbal e até o vídeo no mesmo link. Também o míssil é rastreado no Ether Vapor .

Essas duas técnicas são as mesmas? Estou interessado principalmente em 2D, mas não consigo imaginar que seria muito diferente.

Então, como eu iria criar esse tipo de efeito? Estamos falando de pixel shaders, modos de mistura / filtros, efeitos de bitmap, sistemas de partículas ou o quê? Não é realmente específico da plataforma. Estou apenas procurando a teoria, mas exemplos ou links específicos seriam ótimos. E mais detalhes, melhor.

Adam Harte
fonte

Respostas:

7

Então, como eu iria criar esse tipo de efeito? Estamos falando de pixel shaders, modos de mistura / filtros, efeitos de bitmap, sistemas de partículas ou o quê? Não é realmente específico da plataforma. Estou apenas procurando a teoria, mas exemplos ou links específicos seriam ótimos. E mais detalhes, melhor.

Tudo acima.

A menos que você vasculhe o código fonte, talvez não saiba exatamente como eles o fizeram.

No entanto, pela aparência dos dois jogos, ambos têm o que parece ser uma geometria que está conectada e segue o navio. Pode não ser necessariamente um sistema básico de partículas pontuais, mas também não é tão difícil assim.

Alguns jogos usam um algoritmo de linha curvada e geram uma lista de vértices a partir disso e fazem algumas texturas com texturas diferentes aplicadas nos dois pontos finais da trilha, para que em um ponto o escape pareça quente e no outro seja mais frio e trilhas para o espaço.

O navio de um jogador é um caso interessante, porque os movimentos são imprevisíveis, e você pode precisar atualizar os pontos de controle do seu algoritmo de curva ou acabar amostrando a posição mais recente do navio e gerar posições de vértice com base nisso.

Dê uma olhada nesta resposta de uma pergunta anterior, se você quiser algo que funcione fora dos pontos de controle. Porém, para as suas necessidades, amostrar a posição dos jogadores provavelmente funcionaria muito melhor e seria mais fácil de entender.

Aqui está algo para você pensar:

Comece a amostrar a posição do jogador. Esses pontos formarão os segmentos do corpo de sua trilha, a partir dos quais a geometria pode ser construída. É uma boa idéia manter um segmento de cauda separado que tenha uma textura separada. Você pode detectar quando um jogador está girando e aumentar a frequência desses segmentos, caso contrário, você terá curvas em blocos. A menos que seja esse o efeito que você deseja :)

Em certos eventos, os segmentos precisam parar de gerar e os existentes devem começar a diminuir lentamente, começando pelo segmento do corpo mais próximo da cauda (mas não a cauda em si). Isso ocorre no caso de o jogador ficar mais lento. Mas, se a velocidade na qual os segmentos são reduzidos corresponder à velocidade de embarque do jogador, um novo segmento será formado bem a tempo de ser retirado. Portanto, isso também funciona bem para um navio em movimento total. O comprimento da trilha será sempre o mesmo - o que fornece um fluxo consistente e fluido.

O segmento da cabeça deve sempre estar na posição atual do jogador. Se forem detectadas curvas, o segmento da cabeça existente será adicionado a um segmento da carroceria e um novo segmento da cabeça será iniciado. Repetir. Dependendo das texturas, cada segmento também pode ter um comprimento máximo.

Isso nos dá uma maneira fácil de modelar esse efeito: trabalhando com a idéia de que o efeito sempre estará diminuindo / diminuindo por si só, a menos que mais segmentos sejam fornecidos, e brincando com velocidades para impedir que ele diminua.

Jovan
fonte
4

Existem muitas possibilidades diferentes para criar essas trilhas. Você pode usar linhas simples, polígonos, nuvens de pontos etc.

Todos eles geralmente são baseados em um dos dois conceitos:

  • Acompanhe as posições anteriores e use-as para desenhar a cauda.
  • Acompanhe a velocidade / direção e ajuste a cauda com base nisso.

A primeira é mais adequada para coisas como mísseis, enquanto a segunda abordagem é melhor para algum tipo de coisa anexada que segue algo (como a cauda de um dragão).

Uma implementação simples para caudas de mecanismo não é tão complicada. Você precisará apenas de um buffer para armazenar posições anteriores. Não sei qual idioma você está usando, mas para isso eu usaria um buffer de anel ou algum tipo de buffer semelhante (exclusões e inserções rápidas nas extremidades).

A cada x-ésimo quadro / atualização (você não precisa fazer isso cem vezes por segundo), você basicamente solta o elemento mais antigo / último no seu buffer e adiciona a posição atual à sua frente (somente se o buffer estiver cheio; certifique-se de que ele sempre contém n elementos, onde n determina o comprimento de sua cauda).

Então, durante o desenho, você apenas começa na sua posição atual e desenha um conjunto de linhas em todos os pontos do seu buffer, enquanto diminui sua opacidade com cada vértice adicional.

Dessa forma, você deve acabar com uma cauda agradável e limpa. Com base na sua plataforma, você pode estender isso, por exemplo, usando sombreadores ou inserindo algum bom gráfico de cauda nesse caminho.

Mario
fonte