LWita 
Home
Articoli
Forums
Gallery
Tutorials
Downloads
Links
Competizioni
Archivio News
About

Tutorials

 Ottimizzazioni Stampa/Print
by Carlo Macchiavello


Biglie Stavo facendo un lavoro semplice, ma con tempi di calcolo decisamente troppo alti, dopo qualche esperimento per ottimizzare i tempi di calcolo, ho deciso di buttar giù due righe sui tentativi e i risultati nell'ottimizzazione della scena.

 Il progetto era un'animazione in cui sono coinvolte delle semplici sfere (che rappresentano delle perle colorate) che si muovono su di un piano, inizialmente pensavo a tempi di calcolo irrisori.

  Stavo lavorando con un'area light come luce principale per avere una luce più morbida e ombre sfumate, ma contrariamente alle mie previsioni, i tempi di calcolo erano oltre i 20 minuti per una manciata di poligoni, meno di 32.000...

 Anche sostituendo l'Area light con una spotlight i tempi non scendevano in modo produttivo, non andavo sotto i 12 minuti, con una qualità decisamente inferiore di ombre e di resa nello shading.

 La creazione delle ombre morbide è uno dei task che porta via più tempo nel rendering di Lightwave, e quindi dovevo aggirare l'ostacolo, soprattutto visto che qui non avevo necessità di ombre portate, ma semplicemente ombreggiature per dare la distanza tra il piano e le perle.

 Ho provato a spegnere le luci e abilitare il radiosity in modalità Backdrop, questo ha tagliato i tempi alla metà, il che era ironico visto che il radiosity è un metodo dispendioso a livello di tempi di calcolo; le nuove tecnologie implementate con la release 9.2 hanno accelerato molto il rendering del radiosity, ma non era sufficientemente ottimizzato e non mi dava una resa tanto differente da giustificarlo come scelta di rendering.

 Ho iniziato a sperimentare i nodi di Occlusion per aggiungere l'ombreggiatura necessaria senza però arrivare al radiosity, e dopo aver sperimentato con i due nodi di serie con LightWave 9.2, e il nodo free Poms, ho ritrovato un vecchio classico, già molto efficiente come shader, il nodo SG_ambient occlusion, che mi offriva una buona resa, con circa 4 minuti di rendering a fotogramma.

 Per ottimizzare ulteriormente ho utilizzato la Real lens camera e i nuovi algoritmi di antialiasing, in modo che la granulosità dell'occlusione ambientale venisse ridotta non con un maggior numero di campionamenti nell'occlusione, ma con più passate di antialiasing, il che mi avrebbe fatto guadagnare ulteriormente nei tempi di calcolo.

  Per capire come funziona il nuovo antialiasing si deve dare un minimo di spiegazione:
I parametri di controllo principali sono antialiasing (che controlla numericamente il numero di passate) e Adaptive sampling threshold (che indica la soglia entro la quale il pixel viene ricampionato più volte).

 In pratica per ogni passata di antialiasing adaptive sampling analizza il pixel e determina quante volte deve essere ri campionato per raggiungere l'antialiasing ottimale, per ogni ricampionamento abbiamo una serie di passaggi che crescono in modo incrementale al doppio, cioè se un pixel si discosta poco dal valore di soglia, l'adaptive sampling fa ricampionare 2 volte il pixel per ogni passata di antialiasing, se è un po' di più lo fa ricampionare di 4 volte, 8 volte, 16 volte e così via, a seconda del valore impostato nel threshold (soglia di antialiasing).

Il valore parte da 1, praticamente nullo come effetto.
0.1 comporta già un discreto lavoro di antialiasing,
0.05 che fornisce già una buona resa senza avere tempi troppo lunghi.
0.01 è già un ottimo antialiasing ma talvolta tende ad essere troppo lento.

 Il trucco in questo caso è trovare la giusta combinazione del numero di passate con la soglia ottimale, perché alle volte è più efficiente fare più passate con un threshold più alto, che fare poche passate con un threshold più basso che costringe infinite o quasi passate di antialias sulla scena.

 In questo caso per esempio, la scelta ottimale è stata 2 passate di antialias con 0.05 di threshold, con una soglia come questa l'occlusione sotto le perle è sufficientemente ammorbidita per non mostrare granulosità, ma rapida da svolgere per ogni passata di antialiasing, e con 2 passate pulisce tutte le imperfezioni.

  Non dimenticate che ogni passata si somma alla precedente, per cui si ha il vantaggio che se riusciamo a “pulire” l'ombra e le imperfezioni con la prima passata di antialiasing, la seconda e la terza passano e lavorano meglio e più rapidamente, perché devono concentrarsi solo sui dettagli e non sulle macro aree dei difetti su aliasing e ombre in generale.

Nota bene: il controllo adaptive sampling threshold lavora in modo completamente diverso nelle nuove camere rispetto alla classic camera.

 Nella classic determina SE un pixel ha uno scostamento di contrasto sufficientemente alto da essere incluso o no nella passata di antialiasing, ma il numero di passate finali è quello relativo al tipo di antialiasing (low, medium, high, estreme), non oltre.

  Il nuovo Adaptive sampling che agisce nelle nuove camere definisce il numero di passate per far si che il pixel raggiunga quella soglia di contrasto, praticamente l'opposto del vecchio.

  Il classic indica il contrasto per applicare o no l'antialiasing, il nuovo invece indica il contrasto da raggiungere, con un numero x di passate aggiuntive finché non si raggiunge quel valore di Antialiasing.

Esperimenti suggeriti:

  1.  Sg_ambient occlusion ha anche una modalità directional dal quale calcola i raggi, provate ad usare le coordinate dell'area light, però ribassando il valore della Y, potreste avere delle interessanti sorprese per simulare ombre sfumate con SG_Ambient Occlusion

  2.  Provate a usare alternativamente lo shader e il nodo, notando come siano possibili diverse applicazioni di entrambi, sfruttando uno o l'altro a seconda dei casi.

  3.  Provate ad aggiungere un 10% di luminosità e abbassare di un 5% la diffusione del materiale, questo vi aiuterà ad avere meno contrasto sul materiale e quindi avere immagini più pulite e meno tempo di antialiasing, perché la luminosità aggiunta darà un minor contrasto ai pixel.

Sperando che queste riflessioni vi possano essere utili per migliorare i vostri tempi di calcolo, vi auguro buon lavoro.



www.lwita.com

LightWaveŽ and LightWave3DŽ are registered trademarks of NewTek, Inc.