Come posso creare facilmente mappe di texture cloud?


16

Sto realizzando pianeti 3d nel mio gioco; questi saranno visti come "globi". Alcuni di essi avranno bisogno di livelli cloud. Ho esaminato vari tutorial di Blender per creare "terra" , e per i loro livelli di nuvole usano le mappe di nuvole di terra della NASA .

Tuttavia, creerò un universo immaginario con molti pianeti generati proceduralmente. Quindi vorrei usare molte varianti.

Spero che ci sia un modo per generare proceduralmente mappe cloud come il collegamento NASA. Avrò anche bisogno di creare giganti gassosi, quindi avrò bisogno anche di altri tipi di mappe di trama delle nuvole .

Se questo è troppo difficile, potrei ricorrere alla creazione di diverse varianti di mappe cloud. Ad esempio, 3 per la Terra, 3 per i giganti gassosi, ecc.

Quindi, come posso creare staticamente o generare programmaticamente tali mappe cloud?

Risposte:


19

La generazione di cloud è divertente! Tratterò sia i metodi offline che quelli di runtime.

Nuvole pre-renderizzate

Se vuoi pre-renderizzare le tue trame cloud offline, non cercare oltre Photoshop (o Gimp , se preferisci). Entrambi i programmi possono facilmente generare modelli cloud. Le voci di menu tendono a spostarsi tra le versioni, ma a partire da Gimp 2.8.2 il comando principale che stai cercando è Filters -> Render -> Clouds -> Solid Noise. È necessario creare una nuova immagine vuota prima che il comando sia abilitato. Ti incoraggio a sperimentare i parametri del rumore, ma solo come esempio, ecco cosa succede se imposti "Seme casuale" su 1, "Dettaglio" su 4, "Dimensione X" su 4.0, "Dimensione Y" su 8.0, disabilita "Randomizza" e "Turbolento" e abilita "Piastrellabile": Output non elaborato del comando "Solid Noise" di Gimp

Un ulteriore passo che consiglio vivamente è la modifica dei livelli dell'immagine ( Colors -> Levels...in Gimp). Trascinando gli endpoint in giro, è possibile modificare efficacemente il livello di copertura nuvolosa da "completamente coperto" a "non una nuvola nel cielo". Nuvole con soglia

Altre possibilità interessanti:

  • Utilizzare gli strumenti "Scherma" e "Brucia" per schiarire / scurire manualmente parti dell'immagine.
  • Deforma l'immagine della nuvola per suggerire modelli di vento. Prova il Filters -> Distorts -> Whirl and Pinch...comando di Gimp , o per un maggiore controllo usa Filters -> Distorts -> IWarp...la Modalità Deformazione impostata su "Vortice". Mantenerlo sottile, però: troppe deformazioni tendono a sfocare il dettaglio ad alta frequenza fuori dall'immagine.
  • Aggiungi più livelli di nuvole indipendenti per simulare diversi tipi di nuvole, da sottili e sottili a grandi e grossi (sono sicuro che abbiano nomi scientifici adeguati, ma dannazione Jim, sono un programmatore, non un meteorologo!). In questo caso, probabilmente vorrai salvare ogni livello come immagine separata in modo da poterli animare in modo indipendente in fase di esecuzione.

Dipende davvero dalla tua visione artistica. Andare fuori di testa! Al termine, ricorda di esportare la trama come immagine in scala di grigi a canale singolo, in modo da poter utilizzare gli stessi dati cloud per il colore e il canale alfa in fase di esecuzione.

Generazione del cloud di runtime

La generazione di modelli cloud illimitati in fase di runtime è un po 'più complicata, ma è ancora del tutto fattibile. È un argomento enorme, e questo coprirà solo le grandi linee.

Fondamentalmente hai intenzione di replicare il comando "Solid Noise" di Gimp nel tuo codice shader, usando una funzione noise come il Canlin Noise canonico per generare volumi infiniti, fluidi, deterministici, (opzionalmente) periodici. La tua domanda non specifica quale API di rendering stai prendendo di mira, quindi non posso essere troppo specifico qui; il capitolo 26 di "GPU Gems 2" copre una variante del rumore Perlin in (un po 'datato) HLSL e CgFX, oppure puoi usare questa funzione di rumore GLSL drop-in. Campionando una porzione 2D di un volume di rumore 3D, si ottiene qualcosa come il comando Gimp "Solid Noise" con Detail = 0. Più bassa è la distanza tra i campioni di volume del rumore, più bassa sarà la frequenza ("più uniforme") del rumore. Per aumentare il livello di dettaglio ad alta frequenza, iniziare con un modello di rumore di bassa frequenza di base e aggiungere ulteriori "ottave" di rumore ad alta frequenza, in cui ogni "ottava" è una porzione diversa del volume di rumore 3D con una distanza di campionamento maggiore e ampiezza inferiore. Un esempio visivo di questo processo (che ho trovato su Google "rumore di Perlin a più ottave") può essere trovato qui .

Come enorme vantaggio aggiuntivo, le trame cloud generate in questo modo possono essere facilmente animate! Aggiungi un offset basato sul tempo alle coordinate di esempio della tua funzione di rumore 3D e otterrai un movimento della nuvola estremamente convincente (come visto in questo video , ad esempio). Questo perché la funzione noise è fluida in tutte e tre le dimensioni; lo scorrimento della trama nella direzione U / V fa muovere le nuvole intorno al pianeta, mentre lo scorrimento nella direzione W (perpendicolare) ha l'effetto di "evolvere" lentamente le nuvole.

È possibile anche deformare le nuvole in fase di esecuzione, per effetti simili a uragani. I risultati possono in realtà essere di qualità molto superiore rispetto ai filtri ingenui di ordito Gimp, che (come menzionato in precedenza) possono portare a una trama troppo sfocata. Una tecnica che vorresti assolutamente esaminare sono le "mappe di flusso", come descritto da Alex Vlachos di Valve ( diapositive SIGGRAPH 2010 ) o Carlos Gonzalez di Naughty Dog ( diapositive GDC 2012 ). L'idea di base è quella di dipingere un campo vettoriale (la "mappa di flusso") e utilizzarlo per distorcere e scorrere la trama della nuvola in fase di esecuzione, mentre si dissolve periodicamente la dissolvenza incrociata tra due diverse trame della nuvola quando la distanza di distorsione diventa troppo elevata.

Quale metodo usare?

Il pre-rendering delle trame cloud in Gimp / Photoshop è estremamente semplice; puoi generare una nuova trama in pochi secondi dopo averne capito. Il codice di runtime è banale e molto veloce. Tuttavia, trame cloud più uniche significano requisiti di spazio su disco più elevati (anche un download più grande / più lento) e un maggiore utilizzo della VRAM in fase di esecuzione.

La generazione del cloud di runtime all'inizio è molto più difficile, ma una volta che funziona, presenta diversi chiari vantaggi rispetto alle trame cloud pre-renderizzate. È possibile generare una varietà infinita di modelli di cloud animati realistici senza utilizzare spazio su disco aggiuntivo o VRAM. Tuttavia, il costo di runtime della valutazione di più funzioni di rumore 3D per pixel può essere elevato; i pixel shader del cloud saranno molto più lenti di quanto non siano nel caso del rendering predefinito.

TL; DR: inizia sicuramente usando cloud pre-renderizzati e passa ai cloud procedurali di runtime se hai bisogno di una varietà extra (o desideri una sfida di programmazione extra).


1
Questa è un'ottima risposta: molto completa e facile da seguire. Vedo che hai menzionato "deformare le nuvole per suggerire modelli di vento". Questo è qualcosa che dovrò assolutamente fare, quindi puoi approfondire un po '? Una volta che avrò questo, accetterò la tua risposta.
Edward:

@EdwardTeach Fatto; Spero possa aiutare!
postgoodism
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.