Como posso criar um nevoeiro volumétrico baseado em altura?

10

Recentemente, eu tenho procurado técnicas para fazer nevoeiro volumétrico em algum nível de posição Y do mundo do jogo. Mas tudo o que eu encontrei é um pouco de neblina feita usando o sistema de partículas ou a neblina do motor embutida que realmente não se encaixa no que estou procurando.

No meu caso, preciso de um nevoeiro eficiente e denso. Ele deve estar em todo o mundo do jogo, mas obviamente, por razões de desempenho, ele pode ser renderizado apenas como parte de uma câmera ou sombreador e parecer que está se movendo, embora seja apenas uma ilusão. Eu poderia definir um sistema de partículas se for a melhor escolha, conectá-lo à câmera e fazê-lo se mover.

Portanto, a principal questão permanece: como implementar uma névoa volumétrica que é densa e com desempenho eficiente?

Como um mecanismo específico que estou usando, é o Unity.

Como exemplo, o que quero dizer, aqui está o link para um jogo com o efeito que estou procurando: Astromike

Exemplo de captura de tela de um jogo usando um denso nevoeiro baseado em altura.

Lua Espontânea _Max_
fonte
Um pouco de um GLSL noob aqui, mas e quanto a pintar os pixels no shader de fragmento, com base na coordenada Y que você recuperaria do shader de vértice?
Quentin
2
Você revisou a palestra do Unity sobre "Efeitos especiais com profundidade" ? Embora tenha vários anos, os princípios ainda se aplicam. Eles abrangem tanto o nevoeiro baseado na altura quanto o "nevoeiro fofo" que se acumula em espaços vazios e se afina em torno de obstáculos, e como todos os exemplos são o Unity, deve ser fácil de aplicar.
DMGregory
@ Quentin sim, boa ideia, mas será shader por objeto, certo? Então seria necessário trocar muitos shaders. Também sou um noob na programação de sombreadores, por isso devo ter escrito algumas bobagens. Mas, tanto quanto eu sei, os sombreadores de vértices se aplicam aos objetos. E a coloração pode não dar efeito de movimento. Entendo que, se quero movimento, tudo que se move para dentro deve ser um objeto, para que o sistema de partículas seja o melhor caminho a percorrer.
Candid Moon _Max_
@ Wondra Sim, essa pode não ser a melhor abordagem, se for verdade, a transparência é forte no desempenho.
Candid Moon _Max_
1
As listas também não são adequadas para o nosso formato de perguntas e respostas, porque quando uma lista está completa? Quantas "situações diferentes" são suficientes? Por quais métricas julgamos "melhores"? Geralmente, esse formato funciona melhor com perguntas claramente focadas, com respostas que você pode validar. Portanto, se você acha que tem uma resposta que atenda às suas necessidades, é melhor editar sua pergunta para reduzi-la ao que você realmente precisava, em vez de deixá-la excessivamente ampla e incompleta. Outros usuários sempre pode fazer outras perguntas específicas a outros aspectos, obtendo respostas mais focalizadas relevantes para o seu caso
DMGregory

Respostas:

24

Eu sou o criador do Astromike. :)

Na verdade, estou usando um truque bem simples para parecer neblina. Estou desenvolvendo o Astromike usando o Unity, portanto, se você usa o Unity, pode fazer o mesmo. Mas suponho que você também pode recriar o mesmo sombreador para outros mecanismos.

O que faço é montar um avião para o nevoeiro e adicionar um material com o sombreador Particle / Alpha Blended com um shader Soft Particle Factor (0,32 no meu caso). É isso aí.

Plano de nevoeiro: http://imgur.com/a/MAEFW

Configurações: http://imgur.com/NJVAaIQ

Funciona para mim devido ao ângulo da câmera e pode não funcionar para outras pessoas.

O resto é apenas uma pilha pós-efeito (Bloom, Vignette, etc.) Espero que isso ajude. Felicidades.

Mikea15
fonte
1
Uau! Legal, obrigado por compartilhar! O jogo é incrível :)
Candid Lua _Max_
Parece incrível e tão simples, tentei fazê-lo no meu projeto. Parece funcionar apenas com uma câmera em perspectiva (nosso jogo é ortográfico).
7117 Jeff
isso é muito bom para ser verdade um haha bom
Lestat
Oi @ Mikea15, jogo muito bonito! Infelizmente, falhei em recriar o efeito que você mencionou - adicionei Bloom à pilha de pós-processamento, mas ela se espalha nos objetos, mesmo que o plano de neblina esteja atrás deles (não surpreendentemente), enquanto na sua demonstração parece que as bordas verticais do as colunas estão limpas do efeito bloom. Além disso, no meu Soft Particle Factor não altera nada, independentemente do valor. Seria ótimo se você pudesse fornecer uma pequena cena demo que mostrasse isso. Obrigado!
Dawid
@Dawid eu sei que isso é tarde, mas você precisa definir sua câmera caminho de renderização para diferido e fazer partículas certeza macios é verificada a qualidade em configurações do projeto
Rito Ramos