Volumi: fumo, fuoco e liquidi

Un volume è un riquadro di voxel invece che una superficie: un pennacchio di fumo, una fiamma, un'esplosione, l'acqua. Pixor legge i file .vdb da Blender, EmberGen e Houdini, e ne ha alcuni propri per quando non hai uno strumento di simulazione.

Un volume non ha geometria. Viene disegnato percorrendolo con un raggio per ogni pixel, sul processore, e ciò che ne esce va nella stessa immagine del modello — così una fiamma sta davanti a una mano, un personaggio sta dentro il fumo, e le bande, le linee e la pulizia lo trattano esattamente come qualsiasi altra cosa.

Aggiungerne uno

Nella fase Scena, il menu + della Struttura, sotto Un volume:

Puff uno sbuffo di fumo rotondo
Fiamma caldo e stretto sotto, fresco e largo sopra
Nuvola largo, piatto sotto, bitorzoluto sopra
Foschia sottile, basso e uniforme
Da un file .vdb… una simulazione da Blender, EmberGen o Houdini

Un volume è un nodo Volume del grafo di Scena, e la sua riga nella Struttura è lo stesso nodo: una Riga dopo di esso è una fila di volumi, ognuno posizionato dalla sua copia, e uno non collegato a nulla non è nella scena. Anche le sue impostazioni sono sul nodo (pxr project scene game.pixor --set flame.voxels=48, con il nome del volume).

Sulla riga di comando: --volume flame:0.5,0.8,0.5:0,0.55,0, dove i numeri sono la dimensione e poi la posizione, in metri. Un percorso a un .vdb funziona nello stesso punto: --volume smoke.vdb:1.2.

Portato da un osso, un volume va dove va l’osso in ogni clip (la fiamma di una torcia in una mano) e resta dritto, come fa il fuoco; la sua posizione si misura allora dall’osso. Da riga di comando, @BONE alla fine: --volume flame:0.25:0,0.05,0@hand.r.

Portato dall’emettitore di un effetto, un volume fa parte di quell’effetto: viene disegnato sulle righe dell’effetto, dal primo fotogramma dell’effetto, ovunque sia l’emettitore (sul suo osso, o dove lo spostano le chiavi di una clip) e su nessun’altra riga. Il fumo di un’esplosione, il fuoco di un incantesimo. La sua posizione si misura allora dall’emettitore. Da riga di comando, @effect:N per l’N-esimo effetto del progetto: --effect explosion --volume puff:1.5@effect:1.

Come viene disegnato

Si trovano sotto Come viene disegnato nell’Ispettore del volume.

  • Spessore è quanto volume serve a un pixel prima di essere disegnato. Un valore più alto dà una forma più compatta e dura; uno più basso una più evanescente.
  • Bordo morbido è quanto è largo il bordo sfrangiato. Il bordo svanisce in dithering con un motivo ordinato ancorato al volume stesso, mai sfumato, così ogni pixel resta sulla palette e il motivo non striscia quando il volume ruota.
  • Autombreggiatura è quanto il volume si scurisce dove la luce deve attraversarlo.
  • Il Colore è quello del volume stesso, e da esso viene costruita la sua rampa. Colore caldo è il colore della parte che brucia; impostarlo uguale al colore significa che non brucia nulla, che è ciò che vuole il fumo. Brilla su dice quanto deve essere calda una parte prima di prendere il colore caldo indipendentemente dalla luce.
  • Voxel è quanto finemente il volume viene suddiviso lungo il suo lato più lungo. Un pixel di sprite vuole uno o due voxel: di più crea solo sfarfallio, perché a ogni fotogramma vince il pixel un voxel diverso. Una simulazione 256³ viene ridotta a questo al caricamento, ed è per questo che un pennacchio a 32 px resta fermo.
  • Campioni è quanti punti di un raggio vengono esaminati per voxel. Due bastano alle dimensioni degli sprite; di più è più morbido e più lento.

I volumi non prendono luccichio: una nuvola non ne ha, e la densità da cui sono ombreggiati è abbastanza irregolare da scintillare se gliene fosse concesso uno.

Sequenze: farlo muovere

Un .vdb è un volume fermo. Una simulazione scrive un file per fotogramma (fire_0001.vdb, fire_0002.vdb e così via), e puntare Pixor sul primo riproduce il resto.

Nella sezione Sequenza del volume:

Fotogrammi quanti file riprodurre, contando da quello che hai aperto
Ogni prendi un file ogni N: una simulazione di solito è scritta con più fotogrammi di quanti ne voglia uno sprite
Chiudi il ciclo su dissolvenza incrociata di questo numero di fotogrammi dalla fine all’inizio, così lo sprite si ripete in loop senza salti. Quei file diventano la dissolvenza e non vengono riprodotti: cinque file con una dissolvenza di uno fanno quattro fotogrammi

Sulla riga di comando la sequenza segue la dimensione e la posizione: --volume fire_0001.vdb:1.5::24,2,4: 24 file, uno ogni due, gli ultimi quattro sfumati di nuovo nel primo.

Una sequenza si riproduce insieme a qualsiasi movimento lo sheet abbia già: metti un fuoco accanto a un ciclo di camminata e i fotogrammi del fuoco sono quelli della camminata. Quando nient'altro si muove, la sequenza è il movimento e riceve un'azione propria, chiamata volume.

Ogni fotogramma è posizionato dalla stessa trasformazione, presa dal box che riempie l’intera sequenza, così un pennacchio che cresce non rimpicciolisce l’immagine a ogni fotogramma. Ciò significa anche che Dimensione è la dimensione dell’intera sequenza, non del suo primo fotogramma.

Una sequenza non è mai tutta in memoria: ogni file viene letto una volta per trovare quel riquadro, e poi di nuovo quando lo sheet o l'anteprima raggiunge il suo fotogramma, tenendo gli ultimi tre. Una simulazione lunga costa tempo di lettura, non memoria.

Cosa legge Pixor

File .vdb con griglie float o vettoriali nel solito albero, con valori salvati in chiaro, compressi con zip o impacchettati con Blosc-LZ4 (divisi o no in un flusso per byte, come li scrivono Blosc 1.14 e successivi), tutti o solo quelli attivi: è ciò che scrivono Blender, EmberGen, Houdini e gli strumenti di OpenVDB stesso. Pixela una griglia chiamata density, smoke, fog o d, poi temperature, flame, heat o fire per la parte calda, poi velocity per il movimento che usa il passaggio antisfarfallio. La superficie di un liquido (un level set) viene letta come uno spessore con un bordo netto, pieno da parte a parte.

Tutto ciò che Pixor non sa leggere viene segnalato per nome invece di uscire sbagliato: un altro compressore, un altro tipo di albero, una trasformazione con taglio. pxr inspect fire.vdb stampa le griglie di un file, la loro dimensione e la dimensione dei voxel.

Cosa non c’è ancora

  • I liquidi vengono letti e disegnati come un volume, senza schiuma né riflesso. Una distesa d’acqua con entrambi è il nodo Acqua del mondo (Mondi).

Quanto descritto in questa pagina è nella versione completa; la demo gratuita nel browser si limita al look predefinito e allo sheet PNG.

Prova nel browser Ottieni Pixor