In questo terzo tutorial della serie su fuoco e fumo con il simulatore Fluid in Blender 4.5, parleremo delle modalità con cui Blender effettua e memoria il Bake, ossia la simulazione fisica di fuoco e fumo.
Questo tutorial fa parte di una miniserie di 10 puntate sulle basi di Fuoco e Fumo in Blender 4.5. Per l'elenco completo delle puntate, clicca qui.
La versione video di questo tutorial non è attualmente disponibile in questa lingua.
Trascrizione del video
Salve a tutti! In questo terzo tutorial della serie su fuoco e fumo con il simulatore Fluid in Blender 4.5, parleremo delle modalità con cui Blender effettua e memoria il Bake, ossia la simulazione fisica di fuoco e fumo. Tra le altre cose, vedremo come far calcolare la simulazione una volta per un Domain così da duplicarlo e posizionarlo in altri punti della scena senza dover ricalcolare le simulazioni per tutte le copie. Infine, vedremo come impostare un Offset per la riproduzione della simulazione, così da far iniziare l'animazione con un fuoco già acceso, anziché con l'accensione della fiamma.
La scena iniziale di questo tutorial è composta da un braciere con all'interno alcuni ceppi di legna da ardere. Si tratta di due mesh separate, con i ceppi che costituiscono un'unica mesh. Il braciere è poggiato su un Plane rettangolare, che fa da pavimento, sul quale in seguito disporremo altri bracieri. L'universo virtuale ha intensità 0 e non ci sono fonti di luce, per cui in modalità Rendered la scena ci apparirà completamente nera.
Dalle puntate precedenti sappiamo che per far produrre le fiamme ad un oggetto dobbiamo dargli un componente Fluid di tipo Fire And Smoke Flow. Fornisco quindi un componente Physics Fluid alla legna da ardere, impostando Inflow come comportamento del componente, per cui la legna produrrà fiamme ad ogni frame.

Creo poi un Cube, assegnandoli un componente Flow di tipo Domain, facendogli racchiudere inizialmente tutto lo scenario. Da subito, possiamo notare un problema: la risoluzione di default è troppo bassa, nel senso che produce dei Voxel di grandi dimensioni, per cui le fiamme saranno troppo grandi rispetto agli oggetti che le emettono.
Portando la risoluzione a 64 la situazione non migliora ancora molto e, tra l'altro, la simulazione inizia a richiedere più tempo. Non voglio nemmeno provare ad aumentare ulteriormente la risoluzione, perché è chiaro che non è questa la strada da seguire.

La soluzione più ovvia consiste nel ridimensionare il Domain in modo da fargli inglobare solo il braciere e un po' di spazio in alto per far sviluppare le fiamme e il fumo. Adesso la risoluzione va anche fin troppo bene, anzi forse è addirittura eccessiva, per cui possiamo riportarla a 32 ottenendo comunque delle fiamme ben definite. Il problema, semmai, è che la legna sta producendo davvero troppo fuoco.

Per ridurre l'entità del fuoco prodotto possiamo agire sul parametro Fuel dell'oggetto Inflow. Intuitivamente, maggiore sarà il valore di Fuel e più carburante verrà bruciato ad ogni fotogramma. Non ci resta quindi che abbassare questo valore fino ad arrivare ad avere delle fiamme di dimensioni adeguate.
Come anticipato nelle puntate precedenti, i dati relativi al Baking, ossia al calcolo della simulazione fisica, vengono memorizzati in una cartella dedicata, il cui percorso è specificato nella sezione Cache dell'oggetto Domain. Prima di creare il Domain ho salvato il file su disco, per cui la cartella della cache si trova nella stessa cartella del file Blender della scena.
Nella sezione Cache del Domain possiamo impostare il range di fotogrammi nel quale far calcolare la simulazione del Domain. Questo non deve necessariamente coincidere con il range di fotogrammi dell'animazione della scena. Ciò può essere utile per effettuare il Bake di un numero ristretto di fotogrammi giusto per farsi un'idea dell'aspetto del fuoco prima di avviare il Bake completo. Un altro caso di utilizzo si ha quando gli oggetti Fluid non sono inquadrati dalla telecamera, per cui in quei fotogrammi non è necessario calcolare la simulazione fisica.
Prima di esaminare gli altri parametri della sezione Cache, vediamo cosa succede realizzando delle copie dell'insieme costituito da Domain, braciere e ceppi, con i ceppi che sono oggetti Inflow, e disponendo le copie nella scena. Come abbiamo visto poco fa, un unico Domain grande quanto la scena avrebbe bisogno di una risoluzione incredibile per realizzare delle buone fiamme, per di più con molto spazio inutilizzato, per cui per inserire più bracieri non ci resta che duplicare tutto l'insieme.
Il problema è che, alla pressione del tasto Play nella Timeline, Blender utilizzerà la stessa cartella cache per tutti i Domain, che quindi avranno tutti gli stessi dati condivisi. Se siete sicuri di voler mantenere gli stessi parametri per tutte le simulazioni, allora forse potete provare ad ingannare lo spettatore ruotando un po' i Domain oppure dando a ciascun Domain dei Materials diversi, per variare un po' la resa delle fiamme durante il rendering.
Il vero problema sorge però se cambiamo la risoluzione o qualche altro parametro di un Domain e avviamo nuovamente il Bake. Ad esempio, sto abbassando la risoluzione dei Domain più lontani, perché non ci serve una risoluzione alta per oggetti in secondo piano. Adesso Blender sta proprio facendo confusione tra i dati, perché si tratta dello stesso insieme di dati volumetrici condiviso però da oggetti che hanno caratteristiche diverse.

Se volete che ciascun Domain abbia i suoi dati ben separati dagli altri, dovete specificare delle cartelle cache separate per ciascun Domain, per poi avviare la simulazione. Neanche a dirlo, questo farà aumentare moltissimo lo spazio occupato su disco dai dati dei vari Domain. Giudicate voi, in base alle vostre esigenze, quale strategia adottare, scegliendo tra uno o più Domain molto grandi, oppure la duplicazione di una stessa simulazione, oppure la creazione di cache separate per i vari Domain.
Ad ogni modo, finora abbiamo fatto calcolare a Blender il Bake della simulazione ad ogni pressione del tasto Play nella Timeline. Questa non è l'unica modalità possibile ed anzi ne esiste un'altra che ci consente anche di utilizzare un altro strumento molto utile. Per semplificare le cose, sto lasciando un solo braciere con il suo Domain nella scena, eliminando gli altri. Attenzione, però, perché l'eliminazione dei Domain non comporterà l'eliminazione dei loro dati da disco. Questa in effetti è una buona cosa, perché così possiamo salvare e riutilizzare i dati della simulazione in altri momenti, ma in questo caso quei dati non mi servono più, per cui vado ad eliminarli manualmente.
Nella sezione Cache del Domain troviamo il menù Type che, di default, è impostato su Replay. Questa è la modalità che abbiamo utilizzato finora, che consiste nel fare effettuare a Blender un nuovo Bake ogniqualvolta torniamo al frame 1 e premiamo Play, sovrascrivendo i dati precedenti.

La modalità Modular consente di effettuare Bake separati per vari aspetti delle simulazioni. Può essere utile in alcuni casi, per esaminare o rimpiazzare certi strumenti singolarmente, senza rifare tutta la simulazione.
La modalità All consente infine di effettuare il Bake di tutta la simulazione ma calcolandolo dietro le quinte, non nella Timeline. Per avviare il Bake bisognerà cliccare sul pulsante Bake All presente nella scheda. Blender mostrerà una barra di avanzamento del processo. Al termine dell'elaborazione, potremo premere il pulsante Play della Timeline per visualizzare il risultato in maniera molto più fluida, in quanto precalcolato da Blender.
Per modificare le impostazioni della simulazione, dovremo prima cancellare i dati esistenti mediante click sul pulsante Free All. A questo punto i parametri torneranno ad essere modificabili e potremo cambiarli. Ovviamente dovremo poi cliccare su Bake All per far fare i nuovi calcoli a Blender.
Un'occhiata alla cartella utilizzata vi farà fare un'idea dei vari moduli o passaggi di Baking che vengono calcolati e memorizzati separatamente con le modalità Modular e All.

La modalità All rende disponibile il parametro Offset, che ci aiuta a risolvere un problema che forse avrete già notato. Le simulazioni del fuoco viste finora avvenivano tutte con l'accensione della fiamma al primo frame dell'animazione. Questo però non è sempre un risultato desiderabile, perché a volte potremmo voler far partire l'animazione con un fuoco già acceso.
Per risolvere questo problema, possiamo impostare un numero negativo nel campo Offset. Il tooltip ci informa che questo non significa che il Baking partirà prima, ma solo che la simulazione verrà riprodotta già iniziata di quel numero di fotogrammi al primo fotogramma dell'animazione. La durata in fotogrammi dell'animazione sarà comunque quella specificata tra Frame Start e Frame End. In questo caso, quindi, gli ultimi 25 fotogrammi della Timeline resteranno senza simulazione, perché con il campo Offset noi abbiamo detto a Blender di riprodurre il venticinquesimo fotogramma della simulazione al primo fotogramma della Timeline.

Per risolvere questo problema, non dobbiamo far altro che far calcolare più fotogrammi al Baking, in modo da coprire tutta la Timeline. Imposto quindi Frame End a 275 nella sezione Cache del Domain, clicco su Free All e successivamente faccio nuovamente il Bake mediante click su Bake All.