Estensione al Progetto : Una scena completamente parametrizzata
Progetto di Grafica in XCmodel
Bruno Fanini #123157

Questa scena aggiuntiva del progetto "Persistence of Liquids" mostra cosa si può ottenere utilizzando in modo massiccio il Descriptor. La scena di questo colonnato con piastrelle è completamente parametrizzata, infatti nel file descriptor extra.c che genera il modello extra.md, vengono effettivamente usate solo poche superfici - tra cui la colonna "column.db" usata nel progetto originale - disposte però in modo iterativo e seguendo alcuni parametri pseudo-casuali.

Il colonnato è un array columns[i][j] di ITEMS, dove ogni ITEM è una lista di 3 superfici: la colonna e i 2 blocchi (inferiore e superiore, semplici superfici ottenute per Swinging). Le piastrelle sono un array di ITEMS (pavement[i][j]), dove ogni ITEM è la superficie "pave.db" ottenuta sempre per Swinging. Per questa scena le colonne sono state impostate a 16 e le piastrelle a 64.

Tra i vari parametri di mia "fantasiosa" creazione, si può gestire l'invecchiamento delle colonne (columnAging), quello delle piastrelle (pavementAging), la percentuale di colonne presenti in scena, quella delle piastrelle, la percentuale di similarità delle colonne, ecc...

Per applicare le diverse trasformazioni pseudo-casuali, il descriptor include un generatore di numeri casuali random.c (lo stesso usato nel progetto OpenGL). Variando il seme "seed" è possibile ottenere sempre scene diverse. Una volta cambiati i parametri desiderati nel file .c, è necessario effettuare il rebuild del modello .md lanciando lo script "./rebuildmodel extra" durante il quale verrano mostrate su stdout i vari coefficienti di perturbazione. Una volta fatto questo, bisogna semplicemente caricare la scena in XCrayt e lanciare il Rendering.

Queste immagini mostrano cosa si può ottenere modificando i vari parametri (con seme=123) dal Descriptor :

Scena con parametri di perturbazione principalmente nulli. ColumnAging = 6.0. Notare come sia aumentata la pendenza delle colonne. ColumnAging = 6.0, PavementAging = 4.0. Notare come alcune piastrelle siano parzialmente sotterrate e non allineate... Stessi parametri precedenti, con similarità colonne al 50%. Si notano infatti lievi differenze architettoniche tra una colonna e l'altra.
ColumnAging = 90.0, PavementAging = 8.0. Notare come il colonnato sia totalmente in rovina... Stessi parametri precedenti, ma utilizzando un seme diverso (seed = 123157)... Stessi Parametri, con PavementAging = 30.0. Seed = 321 Seed = 54321

In conclusione, il decriptor può essere ottimo per parametrizzare quasi totalmente una scena di questo genere, modellando in questo caso solo 3 o 4 superfici diverse. Alcuni limiti di memoria però (array di ITEMS più grandi di 4x4 per le colonne ad esempio danno segmentation fault) impediscono scene più complesse.

Bruno Fanini ( bfanini #123157 ) - Giovedì 18 Maggio 2004