Approfondimenti
di Michael J. Hammel traduzione di Antonio Cartelli


indent
indent

Un esempio da manuale per apprendere l'uso di RenderMan e di BMRT

      Uno dei motivi per cui ho impiegato tanto a mettere giù le pagine della Musa della Grafica di questo mese è stato il grande impegno richiestomi da ciò che ho presentato all'IRTC, la gara Internet sulla traccia di raggi, che mi ritrovo ad aiutare a gestire. Ho sempre partecipato attivamente all'IRTC fin dal suo ripristino nel maggio 1996 ma ho partecipato soltanto ad una gara per cui questa tornata ha avuto per me un significato particolare. Non mi capita spesso di avere il tempo da dedicare ad una gara almeno che non decida che qualche altra cosa deve aspettare. In questo caso ne ha patito gli effetti il numero del mese scorso della Musa della Grafica. A voler dire tutta la verità, però, ho utilizzato la gara anche per apprendere di più su RenderMan, BMRT e, più in particolare sul linguaggio degli ombreggiatori RenderMan. Non c'è migliore insegnante dell'esperienza e la partecipazione all'IRTC si è rivelata un insegnante meraviglioso.
      Di seguito riporto il file di testo che accompagna la mia partecipazione alla competizione IRTC. Tutti i lavori in gara devono essere accompagnati da tale file. Esso descrive chi/che cosa/come ecc. relativamente ad ogni partecipante.
Lascerò che il file di testo descriva ciò che ho fatto, chi mi ha aiutato a farlo ed alcune delle difficoltà incontrate. Mi auguro che tali informazioni possano rivelarsi utili a tutti i lettori.
EMAIL: mjhammel@csn.net
NOME: Michael J. Hammel
ARGOMENTO: Scuola
TITOLO: Post Detention (Al termine della reclusione)
RAPPRESENTATORE UTILIZZATO: BMRT
SOFTWARE USATO: Linux, AC3D, BMRT, Gimp 0.99.8, wc2pov, xcalc, xv
TEMPO DI RAPPRESENTAZIONE: circa 4 ore
HARDWARE UTILIZZATO: Cyrix P166 (133Mhz) sistema basato su Linux, 64M di Ram
Post Detention - thumbnail
Post Detention (Al termine della reclusione)
L'immagine a tutto schermo è 800x600 / 102k
DESCRIZIONE DELL'IMMAGINE:
      In effetti è quasi banale. Si tratta di una classe, vista al termine delle lezioni (al termine della detenzione). Ci si può convincere che le lezioni sono finite da quanto è scritto sulla lavagna e dall'ora riportata sull'orologio alla parete. Il sole è bassissimo sull'orizzonte e proprio per questo è causa delle ombre che si possono vedere sullo scaffale. A tutti gli studenti presenti in aula è stato chiesto di leggere l'ultimo bestseller del New York Times intitolato "Post Detention". È stato scritto dallo stesso autore che si dice abbia realizzato la rappresentazione grafica tridimensionale dell'ambiente. Il libro in questione è visibile sul tavolo, nell'angolo in basso a destra dell'immagine.

DESCRIZIONE DI COME È STATA CREATA QUESTA IMMAGINE:
      Ho utilizzato questa immagine per imparare ad usare RenderMan e BMRT. Trovo questi pacchetti più gradevoli di POV-Ray soprattutto perché se voglio posso scrivere del codice C per creare modelli (sebbene almeno per questa scena non lo abbia fatto) ed il linguaggio dell'ombreggiatore consente un controllo dell'immagine leggermente superiore a quello del POV stesso. In ogni caso devo ancora imparare a fare un buon uso delle caratteristiche di questi pacchetti.
      Ho iniziato con alcuni modelli riprodotti da 3DCafe: una sedia, un paio di librerie ed alcuni testi. Ho dovuto convertire il formato della sedia da 3DS in DXF per poterla importare in AC3D. Una volta importata nel modellizzatore ho scomposto la sedia in due parti - il bracciolo ed il resto della sedia. Ho fatto questa scelta per poter procedere ad una retinatura separata dei due elementi (si noti che i due componenti potevano essere ottenuti anche nel formato 3DS, una volta effettuata la conversione in DXF, però, avrebbero costituito una singola entità). Ho anche provveduto a modificare le dimensioni della sedia per ottenere un'unità di dimensione standard e l'ho posizionata nel centro degli assi coordinati. Questa dimensione dell'unità è stata poi utilizzata su tutti i modelli in modo da poter procedere ad un dimensionamento e ad un posizionamento realistici nel file RIB.
      La libreria ha richiesto un semplice ridimensionamento mentre i testi hanno dovuto essere scomposti in una copertina e "pagine di testo". Queste ultime rappresentano una singola entità retinata con un retino opaco (matte). Le copertine sono state retinate singolarmente. I vari testi, che provengono tutti dallo stesso volume dimensionato in maniera diversa a seconda delle circostanze, sono stati disposti nella libreria dall'interno di AC3D; questo ha fornito la possibilità di disporre i testi nella libreria l'uno in posizione relativa rispetto all'altro, dopo di che ogni ulteriore traslazione ha mantenuto il posizionamento relativo che avevano acquisito. Anche i testi sulle sedie o sul pavimento sono stati realizzati nella stessa maniera.
      Le mura sono dei semplici poligoni o delle pezze romboidali. La parete con la finestra mi ha dato seri problemi, a causa delle modalità con cui AC3D predispone i poligoni per l'output mediante RIB, tant'è che ho dovuto convertire il muro da poligoni ad un insieme di pezze romboidali (si veda il numero di maggio della Musa della Grafica per come realizzare un buco in un muro utilizzando delle toppe romboidali) per poter applicare il retino su tutte le varie parti. Lo stesso problema si è ripresentato allorché ho cercato di applicare dei retini alla lavagna; sembra che la causa di tutto sia da ricondurre all'ordinamento dei vertici. In ogni caso ho dovuto trasformare anche la lavagna in una toppa romboidale. In futuro penso che, anziché utilizzare AC3D, dovrò scrivermi i miei modelli per qualunque cosa utilizzi dei retini. Per la verità devo dire che non ho ancora detto nulla di quanto accaduto ad Andy (l'autore di AC3D), anche se penso che sarà ben lieto di farsi carico di tutti i problemi che ho incontrato per tentare di risolverli.
      Una cosa notevole riguardo questa immagine è stato l'enorme aiuto che ho avuto da Larry Gritz, l'autore di BMRT, il quale mi ha offerto alcuni ombreggiatori particolari, anche se poi io ne ho utilizzato solo uno (quello per la piastrellatura del soffitto). L'aiuto maggiore mi è venuto soprattutto da critiche molto costruttive e da suggerimenti sul modo di realizzare le cose mediante il codice che ho scritto. Ad esempio mi ha fatto notare che, molto probabilmente, stavo utilizzando i parametri dei riflettori in maniera scorretta, per cui la mia scena era molto sovra-illuminata: gli angoli dei vertici dei coni dei riflettori vanno espressi in radianti mentre io li specificavo in gradi, ne veniva un incremento spropositato della luminosità dell'intera immagine.
      Tutti gli ombreggiatori utilizzati, eccettuati quelli per la piastrellatura del soffitto e per le carte sui tavoli, provengono dall'archivio degli ombreggiatori di Guido Quaroni. Questo archivio comprende ombreggiatori provenienti dalla "Guida RenderMan" di Steve Upstill, da "Retinature e Modelli" di Ebert, Musgrave, e altri, da Larry Gritz e da vari altri posti ancora. È una fonte utilissima per i neofiti che muovono i primi passi con ombreggiatori e RenderMan. Le carte sui tavoli sono retinate con un ombreggiatore che ho scritto io che crea linee orizzontali e verticali. Esso realizza anche tre fori che però non si percepiscono chiaramente dall'immagine. Questo ombreggiatore è l'unico che ho allegato con il sorgente [Ed. l'IRTC permette di caricare insieme al codice sorgente delle scene le immagini JPEG ed i file di testo]. Le sedie sono retinate mediante un ombreggiatore stile metallo arrugginito, le ammaccature sono rese con un ombreggiatore di spostamento. Gli ombreggiatori di spostamento sono gradevoli poiché spostano realmente i punti della superficie (al contrario delle applicazioni bump [a bernoccolo] che modificano soltanto le normali di quei punti). Le superfici dei braccioli sono retinate con un ombreggiatore stile legno cui ho apportato qualche piccola modifica (per ottenere un miglior controllo della direzione delle venature del legno) e mediante un ombreggiatore di spostamento che è responsabile di irregolarità, graffi e schegge nel legno. Quest'ultimo avrebbe potuto essere sicuramente migliore ma non avevo altro tempo da dedicarvi.
      La lavagna è un'applicazione creata nella versione 0.99.8 per sviluppatori del Gimp. Questo è un pacchetto molto ricercato per piattaforme linux e Unix, molto simile a Photoshop (all'apparenza anche migliore, secondo quanto asserito da gente che ha utilizzato entrambi - per quanto mi riguarda non ho mai usato Photoshop).
      L'immagine fuori della della finestra è un'immagine applicata su un semplice piano presentata secondo una certa angolazione rispetto alla finestra. I pannelli della finestra sono stati ammaccati mediante un'applicazione di spostamento. Mi sono ricordato che nella scuola superiore che ho frequentato c'erano finestre con ammaccature ed ho cercato di riprodurre lo stesso effetto; ci sono andato abbastanza vicino ottenendo come ulteriore vantaggio il fatto che l'immagine al di fuori della finestra non è troppo sbiadita.
      Il globo sullo scaffale è uno di quelli sospesi mediante magneti. Anch'esso ha subito l'applicazione di una funzione di spostamento, per cui se lo si guarda da vicino si scopre che la luce che lo colpisce non è più morbida allorché si entra nella zona d'ombra. Il globo e la sua base sono stati interamente modellati con AC3D, ed è stato facile e veloce realizzarlo. Tutti gli oggetti sullo scaffale in prossimità della finestra sono contenuti in un singolo file modello ma esportati come oggetti individuali in maniera da poter essere ombreggiati adeguatamente. Lo stesso accade per la libreria al di sotto dell'orologio.
      È meravigliosa; sicuramente è stata la migliore immagine tridimensionale che abbia mai fatto. Ed è anche la prima che contiene qualcosa di riconoscibile (contrariamente a navi spaziali e pianeti che nessuno ha mai visto).
      NOTA: Una cosa che ho dimenticato di dire nel mio file di testo originario inviato per la gara è che ho dovuto editare tutti i file RIB esportati che ho creato con AC3D per rimuovere tutte le porzioni di RIB che facevano di ciascun file un oggetto rappresentabile indipendentemente. Normalmente AC3D genera una scena completa, una scena che può essere passata a rendrib (il rappresentatore di BMRT) direttamente per la visualizzazione. Il fatto è che mi serviva che i file generati fossero solo parzialmente delle scene complete, nel senso che non dovevano esserci camera da ripresa o illuminazione e così via. In tal modo potevo utilizzare questi file in righe ReadArchive di file RIB, come i file di #include per POV. Considerato il numero di oggetti che ho esportato con AC3D è stato un lavoro di redazione manuale non da poco. Per converso ho scritto una e-mail a Andy Colebourne, l'autore di AC3D, e ne ho avuto in risposta l'assicurazione che farà tutto il possibile per far sì che sia possibile ottenere output parziali di file RIB da poter utilizzare come file di include in ReadArchive.

indent

[ La pagina della Musa ] [ Indice ]


Per l'articolo originale: © 1997 Michael J. Hammel - Pubblicato sul n. 17 della Linux Gazette
Per l'edizione italiana: © 1997 A. Cartelli - Pubblicato sul n. 6 anno II di LGEI a cura del LUGBari