Como posso criar facilmente mapas de textura de nuvem?

16

Estou fazendo planetas 3D no meu jogo; estes serão vistos como "globos". Alguns deles precisarão de camadas de nuvens. Eu olhei para vários tutoriais do Blender para criar "terra" e, pelas camadas de nuvens, eles usam mapas de nuvens da NASA .

No entanto, vou criar um universo ficcional com muitos planetas gerados proceduralmente. Então, eu gostaria de usar muitas variações.

Espero que exista uma maneira de gerar mapas de nuvens procedurais, como o link da NASA. Também precisarei criar gigantes gasosos, portanto também precisarei de outros tipos de mapas de textura de nuvens .

Se isso for muito difícil, eu poderia voltar a criar várias variações de mapas em nuvem. Por exemplo, 3 para terrestre, 3 para gigantes de gás, etc.

Então, como criar estaticamente ou gerar programaticamente esses mapas de nuvem?

EdwardTeach
fonte

Respostas:

19

A geração de nuvens é divertida! Vou abordar os métodos offline e de tempo de execução.

Nuvens pré-renderizadas

Se você deseja pré-renderizar suas texturas na nuvem off-line, não procure além do Photoshop (ou Gimp , se preferir). Ambos os programas podem gerar facilmente padrões de nuvem. Os itens de menu tendem a se mover entre os lançamentos, mas a partir do Gimp 2.8.2, o comando principal que você está procurando é Filters -> Render -> Clouds -> Solid Noise. Você precisará criar uma nova imagem em branco antes que o comando seja ativado. Convido você a experimentar os parâmetros de ruído, mas, como exemplo, veja o que acontece se você definir "Random Seed" como 1, "Detail" como 4, "X Size" para 4.0, "Y Size" para 8.0, desativar "Randomize" e "Turbulent" e ative "Tilable": Saída bruta do comando "Solid Noise" do Gimp

Definitivamente, mais um passo que recomendo é editar os níveis da imagem ( Colors -> Levels...no Gimp). Ao arrastar os pontos de extremidade, é possível alterar efetivamente o nível de cobertura de nuvens de "totalmente encoberto" para "não uma nuvem no céu". Nuvens limiares

Outras possibilidades interessantes:

  • Use as ferramentas "Esquivar" e "Gravar" para clarear / escurecer manualmente as partes da imagem.
  • Entortar a imagem da nuvem para sugerir padrões de vento. Tente o Filters -> Distorts -> Whirl and Pinch...comando do Gimp ou, para obter mais controle, use Filters -> Distorts -> IWarp...o Deform Mode definido como "Swirl". Porém, mantenha-o sutil - muita distorção tende a desfocar os detalhes de alta frequência da imagem.
  • Adicione várias camadas independentes de nuvens para simular diferentes tipos de nuvens, de finas e finas a grandes e grossas (tenho certeza que elas têm nomes científicos adequados, mas caramba, Jim, sou programador, não meteorologista!). Nesse caso, você provavelmente desejaria salvar cada camada como uma imagem separada, para poder animá-las independentemente em tempo de execução.

Realmente depende da sua visão artística. Enlouquecer! Quando terminar, lembre-se de exportar a textura como uma imagem em escala de cinza de canal único, para que você possa usar os mesmos dados da nuvem para seu canal de cores e alfa em tempo de execução.

Geração de nuvem de tempo de execução

A geração ilimitada de padrões de nuvem em tempo de execução é um pouco mais envolvida, mas ainda totalmente viável. É um tópico enorme, e isso só cobrirá os traços gerais.

Basicamente, você replicará o comando "Solid Noise" do Gimp em seu código de sombreador, usando uma função de ruído como o canônico Perlin Noise para gerar volumes de ruído periódicos infinitos, suaves, determinísticos e (opcionalmente). Sua pergunta não especificou qual API de renderização você está segmentando, por isso não posso ser muito específico aqui; o capítulo 26 de "GPU Gems 2" cobre uma variante do ruído Perlin em (um pouco datado) HLSL e CgFX, ou você pode usar esta função de ruído drop-in GLSL. Ao amostrar uma fatia 2D de um volume de ruído 3D, você obtém algo como o comando Gimp "Solid Noise" com Detail = 0. Quanto menor a distância entre as amostras de volume de ruído, menor será a frequência ("mais suave"). Para aumentar o nível de detalhes de alta frequência, comece com um padrão de ruído de baixa frequência e adicione "oitavas" adicionais de ruído de alta frequência, onde cada "oitava" é uma fatia diferente do volume de ruído 3D com uma maior distância de amostragem e menor amplitude. Um exemplo visual desse processo (que encontrei no Google "ruído Perlin com várias oitavas") pode ser encontrado aqui .

Como um bônus adicional enorme, as texturas em nuvem geradas dessa maneira podem ser animadas com muita facilidade! Adicione um deslocamento com base no tempo às coordenadas de amostra da função de ruído 3D e você obterá um movimento de nuvem extremamente convincente (como visto neste vídeo , por exemplo). Isso ocorre porque a função de ruído é suave em todas as três dimensões; rolar a textura na direção U / V faz com que as nuvens se movam ao redor do planeta, enquanto rolar na direção W (perpendicular) tem o efeito de "evoluir" lentamente as nuvens.

Também é possível distorcer as nuvens em tempo de execução, para efeitos semelhantes a furacões. Os resultados podem realmente ter uma qualidade muito mais alta do que os ingênuos filtros Gimp warp, que (como mencionado anteriormente) podem levar a uma textura excessivamente embaçada. Uma técnica que você definitivamente deseja analisar é "mapas de fluxo", conforme descrito por Alex Vlachos da Valve ( slides do SIGGRAPH 2010 ) ou Carlos Gonzalez da Naughty Dog ( slides da GDC 2012 ). A idéia básica é pintar um campo vetorial (o "mapa de fluxo") e usá-lo para distorcer e rolar a textura da nuvem em tempo de execução, enquanto desbota periodicamente entre duas texturas de nuvem diferentes quando a distância de distorção fica muito alta.

Qual método usar?

A pré-renderização de texturas em nuvem no Gimp / Photoshop é extremamente fácil; você pode gerar uma nova textura em alguns segundos depois de pegar o jeito. O código de tempo de execução é trivial e muito rápido. No entanto, texturas de nuvem mais exclusivas significam requisitos mais altos de espaço em disco (também, um download maior / mais lento) e mais uso de VRAM em tempo de execução.

A geração da nuvem em tempo de execução é muito mais difícil no começo, mas, uma vez que você a trabalha, ela tem várias vantagens claras sobre as texturas da nuvem pré-renderizadas. Você pode gerar uma variedade infinita de padrões de nuvens animadas realistas sem usar espaço em disco adicional ou VRAM. No entanto, o custo de tempo de execução da avaliação de várias funções de ruído 3D por pixel pode ser alto; seus sombreadores de pixel da nuvem serão muito mais lentos do que no caso pré-renderizado.

TL; DR: comece definitivamente usando nuvens pré-renderizadas e alterne para nuvens procedurais de tempo de execução se precisar de uma variedade extra (ou desejar um desafio extra de programação).

pós-bomismo
fonte
1
Esta é uma ótima resposta: muito abrangente e fácil de seguir. Vejo que você mencionou "distorcer as nuvens para sugerir padrões de vento". Isso é algo que definitivamente vou precisar fazer, então você pode elaborar um pouco? Assim que tiver isso, aceitarei sua resposta.
EdwardTeach 10/09/12
@EdwardTeach Concluído; espero que ajude!
postgoodism