Normal Map Create Marvin Landis - by basilio noris aka dies-irae
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Introduzione Le moderne applicazioni in tempo reale hanno oramai una buona qualità, ma sono ancora ben lungi dalle animazioni pre-renderizzate in quanto a qualità dell'immagine, complessità dei modelli e a tecnica d'illuminazione. Un grave handicap per la grafica in tempo reale è il numero di poligoni. I motori grafici riescono a rendere soltanto un numero limitato di fotogrammi al secondo ( 25-30 ). Si è tentato in vari modi di ridurre il numero di poligoni, ma fino ad ora i modelli semplificati (lowpoly) non sono belli quanto i modelli originali (hipoly) Si usano textures di colore e mappe di rilievo, ma I risultati non sono ancora soddisfacenti. Una tecnologia recente (che apparirà nella prossima generazione di videogiochi) utilizza mappe di normali per simulare le forme di un modello hipoly su modelli più semplici. Questa tecnica ha ancora molti difetti ma la qualità dei modelli ha fatto un grande balzo pur mantenendo basso il sempre problematico numero dei poligoni. Nascendo come un esportatore per NormalMapper di ATI (una suite di utilità per sviluppatori per generare e testare le mappe di normali) questo plugin e' diventato una soluzione interamente in LW per rendere modelli lowpoly sfruttando le mappe di normali dei modelli hipoly.
Incominciamo Se siete come me, state leggendo questo documento solo per sapere COME LO FACCIO. domandandovi quanto tempo ci si metterà per arrivarci. Tenterò di rendere la cosa il più veloce ed indolore possibile. STEP 0: Aggiungere i plugins Per ora aggiungete semplicemente i 4 plugins ( Modeler \ Plugins \ Add Plugins ) spieghero' piu' tardi cosa fa ciascuno di loro STEP 1: Preparare il modello Avrete bisogno di 3 cose. Il modello HIPOLY Il modello LOWPOLY Una mappa UV per il LOWPOLY Mettete il modello LOWPOLY nel Foreground Layer e quello HIPOLY nel Background Layer. Se avete delle mappe di morph, assicuratevi che (base) sia selezionata (il bottone M in basso a destra dello schermo). Rendete SMOOTHED la/ superfice del modello HIPOLY (a meno che non vogliate espressamente che il modello LOWPOLY resti flatshaded) Lanciate il plugin NormalMapCreate.
STEP 2: Esportare la N-Map Potete lasciare i settaggi come sono, potete cambiare la risoluzione della Normal Map. (1024 é già buona ). Spiegherò più tardi l'utilizzo delle bump map e delle altre opzioni. Schiacciate su ok e salvate l'immagine, dovreste ottenere qualcosa del genere: potete chiudere modeler ora e caricare il modello LOWRES in layout.
STEP 3: Caricare la N-Map In layout, aprite il surface editor e selezionate la superficie dell'oggetto. nel tab shaders aggiungete il plugin NormalMapShader (1), e doppio cliccateci sopra. Nel texture editor che si apre selezionate l' UV Map desiderate (2), la N- Map che volete usare (3) e cliccate su use texture.
STEP 4: Il Render Ecco fatto, premete F9 e godetevi il risultato… una nota importante riguardo alla bump map. Il canale del rilievo è calcolato utilizzando le normali dei punti dell'oggetto, ma ora il motore legge questi dati dalla N-Map anziché dai poligoni dell'oggetto, quindi ignorerà completamente il canale bump. Per usare le bump map, dovrete usare BumpMapCreate ed usare l'opzione di bumpmap in NormalMapCreate. Andate nella sezione BumpMapCreate qui sotto per saperne di più.
Approfondimento BumpMapCreate (Layout) Questo plugin viene utilizzato per trasformare il canale di rilievo in un immagine utilizzabile come texture. Dal momento che il bump non influisce sulle superfici che usano N-MapShader, bisognerà applicare questa texture PRIMA della creazione della N-Map. Create una UVMap per il modello HIPOLY se non ne avete ancora una. Aggiungete il plugin alla superficie e aggiungete pure surface baker. Aprite le opzioni di surface baker e checkate soltanto BAKE SHADERS. Selezionate la UVMap e renderizzate. Otterrete una "cottura" (baking) del canale di bump. L'immagine risultante potrebbe essere troppo chiara o troppo scura e perdere perciò dettaglio. Potete usare i controlli di esposizione dell'ImageViewerFP o più facilmente, cambiare il valore del DIFFUSE per la
superficie. Potete sempre cambiare l'immagine una volta che vorrete usare la mappa. (Quest'immagine e' stata resa con un DIFFUSE del 50%, al 100% l'immagine era completamente bianca) Per ora la modalità ALPHA blend non é supportata, i layer che l'utilizzano non vengono presi in considerazione. (sembrano esserci alcuni problemi con layers che utilizzano valori negativi) Se avete bisogno di usare l'ALPHA blending, potete usare un altro metodo che non necessita di questo plugin. STEP 1: Copiate tutti I layers dal bump channel STEP 2: Incollate tutti I layers nel color channel
Dopodiché mettete il colore di base della superficie su Nero e il colore dei vari layers su Bianco (o vice versa se state usando dei rilievi negativi). Il texture value di ogni layer può essere riprodotto usando diverse gradazioni di grigio. (per esempio, un texture value al 30% diventa un grigio a 76 76 76) STEP 3: Aggiungete Surface Baker e checkate soltanto BAKE COLOR, inserite la UVMap corretta per il modello HIPOLY. Potete rendere la texture, se usate AntiAliasing, il render può metterci molto tempo. NOTA:Il method é elastico, potete usare la luminosity o diffuse invece del colore, ogni metodo ha bisogno di un po' di aggiustamenti. Per ottenere buoni risultati.
N-MapCreate (Modeler) Lo-res Model Parameters Unica cosa da notare, l'opzione "Export lo-res model to NMF". Questo esporta un file .nmf che può essere utilizzato con i tools della ATI. Usatela se volete giocare un po' con quelle utilities. Il resto é abbastanza evidente. Hi-res Model Parameters Abbiamo appena visto come creare un'immagine di bump. Dal canale di rilievo. Selezionate la mappa desiderate (dovrete caricare l'immagine in modeler PRIMA di poterla usare qui ) La "bump map scale" é usata per affievolire o aumentare l'effetto di rilievo. Se avete una vostra mappa probabilmente potrete lasciare questo valore intatto. Se il rilievo e' troppo forte, dovrete mettere valori piu' piccoli. Beninteso, sono accettati valori negativi. NOTA: le immagini di bump create con BumpMapCreate hanno bisogno normalmente di un Bump Map scale di 0.2 Ancora una volta, potete esportare l'oggetto per i tools della ATI. Advanced Parameters La maggior parte di questi valori sono interessanti soltanto se volete giochare con le utilities della ATI, altrimenti non avrete probabilmente bisogno di cambiare questi valori.
Ecco una veloce descrizione delle opzioni: NORMALS: decide che spazio di coordinate usare (TANGENT serve per NMFView di ATI, (vedere più in basso). BOX FILTER: applica un blur all'immagine finale. COMPARISON TOLERANCE: rimuove imprecisioni nei calcoli con la virgola. EXPAND BORDERS: espande la regione delle normali. Può causare un po' di artefatti con le mappe di tipo ATLA, ma migliora un po' la qualita' della mappa. CUTOFF ANGLE: determina se la normale di una faccia del HIPOLY ha più o meno la stessa direzione di quella del LOWPOLY. Elimina alcuni difetti in alcuni casi ma rischia di causarne di nuovi. Più é piccolo l'angolo, più simile dovrà essere il modello HIPOLY al modello LOWPOLY. MIPMAP CHAIN CREATION: Per sviluppo di giochi, se volete implementare il mip mapping. RECAST ricalcola l'immagine per ogni livello di mip mao. FILTER fa un semplice blur dell'originale. SAMPLES PER TEXEL: Più campioni sono utilizzati per ogni pixel, risultando in una sorta di antialiasing. Il tempo di calcolo cresce in modo lineare. Può causare artefatti. NORMAL SELECTION: decide quale normale scegliere quando piu' normali del HIPOLY sono disponibili (più informazioni sono disponibili nella documentazione del tool NormalMapper di ATI) N-MapShader (Layout) Non molto da dire, aggiungere ed aprire, funziona esattamente come il Texture Editor standard di LW. Scegliete la N-Map e l'UVMap per il modello LOWPOLY ed é tutto. N-MapColor (Layout) Questo plugin é un metodo rapido per creare una N-Map per un oggetto. Aggiungetelo tra gli shaders e usate Surface Baker per salvare la texture, esattamente come per il plugin BumpMapCreate. La mappa appena creata non dipende dall'oggetto LOWPOLY, (dovrete perciò aggiustare a mano l'UVMap del modello LOWPOLY per farla corrispondere con la N-Map) e I risultati sono ben lontani da quelli ottenuti con NormalMapCreate. Un vantaggio resta nell'estrema rapidità del plugin.
ATI Normal Mapper ATI's Normal Mapper é all'origine di questo set di plugin, potreste quindi essere interessati a provarlo. Potete scaricarlo da http://www.ati.com/developer/tools.html Guardate assolutamente la presentazione NormalMap.ppt (potete scaricare PowerPointViewer da www.microsoft.com) e il file readme.txt file Creare una nuova mappa. Se volete provarlo, usate N-MapCreate e checcate le opzioni di "export to NMF options". Questo creerà due files .NMF, per esempio lores.nmf and hires.nmf. Aprite una shell di dos (win+r "cmd") e scrivete "normalmapper lores.nmf hires.nmf 1024 1024 normalmap.tga" "1024 1024" e' la dimensione della texture e "normalmap.tga" é il nome dell'immagine. Vedere gli oggetti. Potete vedere i files .nmf più la normal map in tga (creata con il programma di ATI o con N-MapCreate) utilizzando NMFViewer. Una nota se avete creato la mappa con N-MapCreate: Lightwave salva I TGA usando un ordine di righe dall'ultima alla prima. Se volete usarli con NMFViewer, dovrete flipparli. Se aprite I TGA e li risalvate subito in photoshop ( o psp o qualunque altra applicazione di fotoritocco) l'immagine sarà salvata con ordine dalla prima all'ultima riga e il viewer funzionerà correttamente. Limitazioni e Problemi Una nota importante, le ombre mappate o tracciate, non tengono conto delle normali dei pixels, perciò l'ombreggiatura verrà calcolata in funzione del modello LOWPOLY, il che può causare incongruenze, soprattutto con ombre molto nette. La specularità, la riflessione e la luce diffusa vengono calcolate usando le normali dei poligoni, sono quindi questi i parametri che traggono vantaggio delle informazioni della N-Map. Come già detto, il canale di bump smette di lavorare quando NormalMapShader é attivato. Se cambiate la bumpmap, dovrete ricalcolare la N-Map, processo alquanto noioso ma non c'é altra soluzione. NormalMapShader non renderzza Sembra esserci un problema con alcune installazioni di LW. NormalMapShader sembra non funzionare e rende soltanto dei modelli piatti. Il problema è di LW, e una reinstallazione sembra risolverlo. Tuttavia, c'è un'altra soluzione: basta aggiungere la N-Map al canale di bump e il plugin comincerà a funzionare. Non so dire perché questo dovrebbe funzionare ma lo fa ; )
Links Utili La pagina del Plugin http://amber.rc.arizona.edu/lw/normalmaps.html I plugin di Marvin Landis http://amber.rc.arizona.edu/lw/ Questo documento http://www.dies-irae.com/NMCManualITA.pdf LA pagina dei plugin di LW http://www.flay.com Home page ATI http://www.ati.com ATI's Normal Mapper http://www.ati.com/developer/tools.html Forum CGTalk http://www.cgtalk.com StrokeIt http://www.tcbmi.com/strokeit/ Il vostro umile servitore dies-irae@dies-irae.com (in caso aveste bisogno di qualsiasi cosa) Ringraziamenti Marvin Landis, per aver scritto questo magnifico plugin! Michael Blackbourn, per le immagini d'esempio Sil3, per la soluzione al problema di NormalMapShader PJ, per aiutarmi in questo documento Geng@, idem Voi, per aver letto fin qui… Sam, per aver cucinato quando stavo davanti al pc. Kino, per avermi insegnato a giocare a Rocket Arena
Alcuni esempi gramps model by David Maas. Renders by Marvin Landis
images courtesy of Michael Blackbourn
Puoi anche leggere