Blender Italia forums ArtWork Work in Progress Atmosfera Volumetrica

Status della richiesta: Non è una richiesta di supporto

Taggato: ,

Stai visualizzando 8 post - dal 1 a 8 (di 8 totali)
  • Autore
    Post
  • ender.saka
    Membro
    • Blenderista
    • Post sul Forum 33
    #767807

    Ciao, posto velocemente questo progresso avvenuto fra sta notte e sta mattina.

    Viewport Render of Atmosphere Material

    Anteprima nella 3D viewport dell’atmosfera volumetrica che avvolge sfera solida. Copyright 2019, Marco Frisan

    Si tratta di qualcosa a cui lavoro da anni (purtroppo mi manca sempre il tempo, poi magari mi metto li una giornata libera e risolvo tutto). L’obbiettivo era ottenere un materiale volumetrico che simulasse l’atmosfera terrestre con un grado di credibilità accettabile. Non vi voglio tediare sul perché il metodo (descritto da Andrew Price e poi ripreso e perfezionato anche da altri) col compositor non è sufficiente nel mio caso specifico. Inoltre, nonostante qualche raro caso, quasi nessuno si è mai troppo interessato all’argomento. Di certo, che io sappia, non sono mai riuscito a scovare un materiale o un tutorial che producesse un risultato di qualità accettabile.

    Fatto sta che, da che esistono i nodi e i volumi, in Blender, questa soluzione è virtualmente possibile. L’unica rogna è che ci vuole tanta matematica (non troppa) e per chi è all’asciutto di magnitudini, vettori, logaritmi e altro, questa strada è impraticabile. Fortunatamente io di queste cose mi “diletto” essendo programmatore.

    Viewport Render Atmosphere Cavity

    Anteprima dell’atmosfera con la cavità interna visibile in spaccato. Copyright 2019, Marco Frisan

    Così, ieri sera ho ripreso in mano questo vecchio materiale che avevo (già ben) abbozzato questa primavera (credo) ma che è il frutto di anni di esperimenti e ragionamenti. L’atmosfera, grazie alla matematica è “naturalmente” cava come potete vedere nello spaccato. Ma la funzione, che ne fa decadere la densità in modo esponenziale con l’aumentare della distanza dalla superficie, verso l’interno tende all’infinito per valori negativi dell’altitudine (x). Per cui è possibile che hai confini con la cavità la densità sia “infinita” (un buco nero insomma) ecco perché non si vede la luce. 😛

    Non ho sistemato questo piccolo problema (più sofistico che pratico) perché non mi interessa cosa succede sotto alla superficie. In compenso ho corretto altri due errori.

    Il primo sarebbe potuto diventare un potenziale bug (che in questo particolare caso non si sarebbe manifestato perché l’oggetto “Atmosphere” ha origine nell’origine degli assi) dovuto alle solite lacune nella documentazione di Blender. Infatti, l’output “Position” del nodo “Geomentry” è equivalente a P della specifica OSL e, quindi, le sue coordinate sono definite in World Space. Va fatta pertanto la conversione da World a Object (Local) Space perché i conti tornino in qualsiasi posizione si trovi la Terra nella scena.

    Funzione e^-x

    Funzione del decadimento della densità dell’Atmosfera dal suolo verso lo spazio.

    L’altro problema era che la funzione di decadimento della densità non porta la densità a zero per x = 1 ma continua tendendo all’infinito. Il che causava il fatto che si vedeva l’atmosfera tagliata di netto dai margini del cubo che la contiene in prossimità dei poli. La soluzione sta nel nodo “Atmosphere Object Radius in BUs” e nello scalare il cubo dell’Atmosfera in modo che sia almeno il doppio.

    Schermata Albero Nodi Materiale Atmosfera

    Albero dei nodi del materiale “Atmosphere”. Copyright 2019, Marco Frisan.


    Marco Frisan, fullpipeumbrella.com
    Harvester
    Moderatore
    #767808

    Interessante, ma tiene conto anche dell’effetto Rayleigh? Sarebbe utile vederlo applicato in un esempio pratico.

    ender.saka
    Membro
    • Blenderista
    • Post sul Forum 33
    #767811

    Ciao Harvester,

    teoricamente dovrebbe essere possibile tenerne conto giocando sulle lunghezze d’onda assorbite attraverso il Volume Absorption node o, forse, meglio ancora, attraverso il colore del Volume Scatering node (dispersione volumetrica, che poi è la stessa cosa della dispersione atmosferica). Al momento il volume disperde l’intero spettro luminoso (colore bianco).

    Il colore assorbito può essere regolato in funzione della densità e della lunghezza del raggio (anche se in questo preciso momento non mi sovviene l’esatto setup di nodi per farlo).

    Qui puoi vedere un render di test a bassa qualità (~ 100 samples) che avevo svolto tempo fa per simulare le nuvole. Questo lavoro sulle nubi è, infatti, collegato con quello dell’atmosfera. Lavoro a moduli, un pezzo alla volta. In questo caso la formula per il decadimendo della densità non era stata usata. Al suo posto avevo usato un normale gradiente.

    Rayleigh Scattering, Clouds and Atmosphere

    Rayleigh Scattering, Clouds and Atmosphere. Copyright 2019, Marco Frisan.


    Marco Frisan, fullpipeumbrella.com
    Harvester
    Moderatore
    #767813

    Per ora, non essendo Cycles un motore di rendering “spettrale” (che non ha nulla a che fare con i fantasmi) qualunque soluzione basata sui canali RGB può solo funzionare come approssimazione. Quindi, hai già provato a valutarne le prestazioni in termini di resa e carico su CPU/GPU? O è troppo presto?

    A puro titolo informativo, segnalo questo add-on di recente pubblicazione: https://blendermarket.com/products/physical-starlight-and-atmosphere

     

    ender.saka
    Membro
    • Blenderista
    • Post sul Forum 33
    #767817

    Ovviamente è un’approssimazione e ho già fatto moltissimi esperimenti. Per quanto riguarda gli scatering Mie e Rayleigh esiste già uno Shader OSL open source, realizzato appositamente per Blender, che implementa il calcolo Rayleigh (per tutt’altra applicazione ma il principio è lo stesso). Naturalmente se si procede, come dicevo, alterando la sorgente sull’input RGB, sarebbe un’approssimazione ma ci sono approssimazioni e approssimazioni. Anche questo materiale è un’approssimazione. Il fattore di decadimento della densità dell’atmosfera è esponenziale, similmente al falloff della luce, ma se avessi usato una formula “fisicamente perfetta” la resa non sarebbe stata adeguata. Sarebbe lecito chiedersi allora: perché non usare un Color Ramp per esempio per far decadere radialmente la densità? La risposta è che ci ho provato ma non è gestibile. La distanza fra la superficie della Terra e il punto considerato “fine dell’atmosfera” è talmente sottile rispetto all’intero raggio della Terra che non riuscivo a spostare le maniglie dei punti colore per ottenere un decadimento abbastanza morbido. Quanto poi alla parola “approssimazione” possiamo approfondire ulteriormente dicendo che il fattore di decadimento della densità è variabile. La densità stessa dell’atmosfera al suolo cambia di regione in regione. Dovremmo considerare anche le zone di alta e bassa pressione (influiscono sullo scatering ovviamente e in modo non poco importante). Quindi non escludo un’implementazione sempre più accurata ma per il momento proseguo un passo alla volta.

    Quanto ai tempi di rendering siamo altini ma io sto operando su un computer del 2013 con una scheda video ormai vecchiotta e quindi, fra l’altro, renderizzo in CPU. Tempi lunghi come vedi (e ancora qualche artifact, che ritengo di poter correggere) ma ora debbo scappare dopo appena ho tempo facciamo tutte le considerazioni del caso.


    Marco Frisan, fullpipeumbrella.com
    ender.saka
    Membro
    • Blenderista
    • Post sul Forum 33
    #767841

    Dato che mi sono svegliato presto intanto “consegno ai posteri” il primo test render con il materiale “corretto”.

    Considerazioni

    Ci sono degli artefatti indesiderati. Il primo so a cosa è dovuto e so come risolverlo. Potete infatti osservare degli anelli concentrici, specialmente nella zona di transizione fra la faccia esposta al Sole e quella in ombra. Questi anelli sono dovuti ad un numero di “steps” del “Volume Sampling” non sufficente. Per risolvere questo problema è necessario agire sulle proprietà del “Volume Sampling” (Properties editor -> Render tab -> Geometry panel), provocando naturalmente un aumento dei tempi di rendering (ahimé!). Il secondo è possibile osservarlo in corrispondenza dei vertici del IcoSphere. Credo sia risolvibile aumentando le suddivisioni della mesh o forse è un sotto prodotto del primo problema.

    In ogni caso è necessario agire per gradi. Converrete tutti che non posso aumentare gli steps indiscriminatamente. Certo se sapessi esattamente come vengono calcolati proverei a “predire” il valore più adeguato con un po’ di matematica (ecco una cosa in cui l’Intelligenza Artificiale spaccherebbe, vedere video di Andrew Price al BlenCon).

    Tempi di rendering

    Ho renderizzato l’immagine che vedete in 1 ora, 20 minuti, 30 secondi e 39 centesimi (01:20:30.93). Le dimensioni del PNG finale sono 1920 x 1080 pixel. Le impostazioni fondamentali sono 128 samples (Sampling panel, Samples); Clamp Direct e Clamp Indirect uguali a 4.0; Volume Sampling Step Size uguale a 0.025 e Max Steps uguale a 1024. Nel pannello Light Paths uso Transparency bounces Max uguale a 8; Bounces Max uguale a 12; Diffuse e Glossy uguale a 4; Transmission 12; e Volume 1 (ecco forse dove dovrei ritoccare, me l’ero perso). Nel pannello Performances ho impostato dei Tiles di 16 x 16 pixel e ho attivato Save Buffers.

    Da notare che il tempo non mi spaventa perché sfortunatamente per me ho questa configurazione:

    MacBook Pro (Retina, 15-inch, Early 2013)
    2,4 GHz Intel Core i7
    8 GB 1600 MHz DDR3
    Numero di processori: 1
    Numero totale di Core: 4
    Cache L2 (per Core): 256 KB
    Cache L3: 6 MB
    NVIDIA GeForce GT 650M 1024 MB
    Intel HD Graphics 4000 1536 MB

    Il tutto con Blender 2.79 ultima build credo (spero… verificherò). Non ho neppure provato col 2.8 perché l’ultima volta che ho tentato di renderizzare degli shader volumetrici non ho visto nulla. 😀 Proverò anche quello comunque visto che si parla di un 20% di aumento delle prestazioni di Cycles rispetto al 2.79 e forse nella 2.81 hanno risolto questo bug(?).

    La GPU non la uso quasi mai perché Blender sul mio particolare modello va frequentemente in crash quando uso la GPU e ormai credo sia inutile chiedere supporto al team di Blender… senza contare che mi beccherei il solito pippone sul Mac, che è una merda (perdonate il francesismo), bla, bla, bla… e che, probabilmente finirebbero per dirmi che è colpa dei CUDA drivers, che Nvidia ha sviluppato per Mac OS X… Per finire con Nvidia che accusa Apple… tutte cose che non posso escludere ma per l’utente che deve cuccarsi questa sequenza di “scarica barile” senza ottenere alcun risultato… be’, alla fine uno “abbandona ogni speranza” (scusate il rant)… Fatto sta che la GPU su questa macchina da problemi dal primissimo supporto in Blender… E, no! Altri software girano benissimo.

    Quindi mi accontento in attesa di tempi migliori (tanto fra poco Apple eliminerà del tutto OpenGL in favore di Metal quindi probabilmente: “Addio Blender!”).

    Poi condividerò il file con una scena di test inclusa (come giustamente chiedeva Harvester) e se qualcuno vorrà mi saprà dire come vanno le cose.

    A tal proposito, forse esiste un margine di miglioramento (minimo), ma ve lo farò sapere, dopo aver trovato il modo di applicare la particolare tecnica a cui stavo pensando.

    Atmosphere Material Test Render 09

    Test render del materiale Atmosphere. Copyright 2019, Marco Frisan.


    Marco Frisan, fullpipeumbrella.com
    ..
    Partecipante
    #767842

    con la gpu probabilmente ti va in crash perchè hai solo 1gb di vram? dovresti provareo la build avanzata della 2.79, quella dove puoi settare cpu+gpu per ovviare

    ender.saka
    Membro
    • Blenderista
    • Post sul Forum 33
    #768099

    Per il build di cui parli non c’era una versione per Mac tempo fa. Poi non ho più controllato. Per Mac non c’è quasi mai nessun fork precompilato. Tocca arrangiarsi e compilare Blender non è una passeggiata. Casomai controllerò e farò delle prove se la trovassi.


    Marco Frisan, fullpipeumbrella.com
Stai visualizzando 8 post - dal 1 a 8 (di 8 totali)
  • Devi essere connesso per rispondere a questo topic.