A renderização em nuvem é uma tarefa difícil. Mas essas nuvens no vídeo são apenas algumas partículas "nubladas". Eu não acho que isso seja algo legal :)
Para nuvens agradáveis, o problema não é a simulação da nuvem, mas a renderização da nuvem, que é impossível manipular para ser foto-realista em tempo real para cenas com iluminação dinâmica. O que acontece nas mídias participantes, como a nuvem, é:
A emissão de luz existe apenas quando a mídia participante emite luz (como gás quente ou fogo) ou quando é iluminada (isso é parte similar à renderização normal); absorção significa que a luz é absorvida e a dispersão é o maior problema computacional. A luz está espalhada dentro do volume. Então você quer ter auto-sombreamento e sombra que emite no chão e cena opaca. Como fazer isso?
Onde obter nuvem?
As nuvens podem ser simuladas pelo ruído permanente. É muito comum e parece legal. O ruído Perlin pode ser 4D, onde a quarta dimensão é hora de criar boas nuvens dinâmicas. Se você deseja especificar formas de nuvens: é necessário realizar a volumetrização sobre as formas desejadas, salve-a como grade 3D de densidade e multiplique-a com perlin.
Como renderizá-lo
Ao renderizar partículas? . Nuvens de partículas são possíveis. É o método mais simples. No entanto, a simulação de qualquer propagação de luz entre as partículas é bastante difícil. É muito típico que você precise classificar partículas na direção da visão da câmera (ou no chamado meio eixo entre o dir e o dir. Da câmera). Isso é impossível no aplicativo em tempo real, a menos que sua plataforma de destino não suporte o modelo de sombreador 4 ou melhor, o modelo de sombreador 5 - e a computação gpgpu (como cuda, openCl ou computação direta) - para que você possa escrever classificação de radicais paralelos e classificar partículas em todos os quadros (que será em tempo real). A classificação é necessária para a mistura alfa e também para o mapeamento de sombra inteligente.
Vou guiá-lo para alguns artigos:
Por radiodifusão volumétrica . A radiodifusão volumétrica significa que você tem uma grade onde fez a simulação de fluidos (normalmente Navier-Strokes, mas o formato da nuvem voxelizada também é bom). E dispare raios para cada pixel através do volume e integre a radiação através do raio. Isso é surpreendentemente bom para aplicativos em tempo real . Raycasting no wiki. Você não precisa ter computação gpgpu. A transmissão de raios volumétrica pode ser feita no pixel shader, porque não precisa de nenhuma sincronização entre os threads (raios). Ter grade em textura 3D é perfeito no hardware gráfico, porque você pode se beneficiar da interpolação tri-linear nativa da unidade de textura. O auto-sombreamento pode ser feito disparando raios de todas as amostras para a luz e contando a densidade do volume de sombreamento da luz. Isso é lento. Você pode usar algum mapeamento de sombra com transições (como mapas de sombras profundas). A dispersão da luz também não é possível em tempo real (com gpgpu).
A transmissão de raios volumétrica é rápida e é mais fácil de implementar do que a classificação de partículas e trabalha rápido mesmo em HW mais antigo.
Algo para estudar:
Não posso falar com os detalhes do Cloud, mas as nuvens são geralmente implementadas usando o ruído Perlin tridimensional . A partir do vídeo e da minha lembrança, o Cloud "mescla" as nuvens apenas aumentando sua nuvem e removendo a outra.
A apresentação de ruído original de Ken Perlin usa nuvens como exemplo .
fonte