GeoWorld Tutorials
by Bruno Fanini
Home | GeoWorld Main Page | DOWNLOAD |
Generalmente, quando il programma viene lanciato, la camera si muove lungo un percorso prestabilito (cioè è attivata la modalità di percorso automatico, normalmente circolare) quindi per prendere il controllo diretto dal mouse (versione 1.5) è sufficiente premere 'spazio' per passare da questa all'altra modalità. Nella modalità libera, si può attivare/disattivare la forza di gravità con il tasto 'g'.
Quando si genera una qualunque perturbation (HILL, VALLEY, ecc...) il terreno viene modificato e necessita di essere "ricompilato" (rebuild). Dalla voce menu "ReBuild" è possibile sia ricomputare tutti i layer (tasto F1, consigliato) sia ogni layer singolarmente (normali, colorazione vertici, shadow buffer). Il tasto F2 invece ricompila tutta la vegetazione attiva, che quindi si adatta al nuovo terreno.
Normalmente per generare un nuovo terreno casuale con Perlin Noise, viene usato il tasto F3 (New Random Terrain).
Alcuni dei comandi presenti nel menu principale (tasto destro del mouse) sono script, cioè sono voci che fanno riferimento a files contenenti codice. Nell' Import Menu (tasto sinistro del mouse) invece sono TUTTI script. Un tasto utilissimo a questo proposito è F4 : riapplica l'ultimo script caricato, cioè dopo aver applicato uno script, posso richiamarlo iterativamente con questo tasto.
Allo stato attuale di GeoWorld, moltissimi parametri sono caricati da files, quasi l'intero programma si basa su questi script.
Nella stessa directory di GeoWorld, ci sono alcuni files testuali (gw_*.txt) che contengono environment (gw_env.txt), filtri (gw_filters.txt) ecc... Il più importante è gw_main.txt che inizializza molti parametri (che comunque potrebbero essere tranquillamente modificati da altri script). Ognuno di questi files contiene vari script. La struttura generale di un singolo script è questa:
<NOME-SCRIPT>
General
<parametri generali...>
END
Camera
<parametri camera...>
END
Terrain
<parametri terreno>
END
WorldEnvironment
<parametri ambientali...>
END
Vegetation
<parametri vegetazione...>
END
Physics
<parametri fisici...>
END
Generation
<lista sequenziale di perturbation>
END
ENDSCRIPT // Termina <NOME-SCRIPT>
<NOME-DI-UN-ALTRO-SCRIPT> // Un altro Script
contenuto nello stesso file...
...
ENDSCRIPT
GENERALITA' PERTURBATIONS
Le Perturbations sono comandi sequenziali che alterano il terreno. In
generale questi comandi sono immessi da file, all'interno di "Generation", del
tipo:
Generation
< Lista sequenziale di Perturbations >
END
Vedere il file di input primario "gw_main.txt".
La forma generale per una perturbation è:
<TYPE> <MODE> <Usize><Vsize> <Uvar><Vvar> <ITERATIONS>
Dove:
ESEMPI
Ad Esempio, il comando:
HILL > 30 20 3 5 300
Genera 300 perturbations di tipo HILL larghe 30(+-3)u x 20(+-5)v.
Quindi una possibile HILL generata potrebbe ricoprire un'area di 28
vertici in U e 23 in V.
FLAT % 20 20 8 15 400
Genera 400 "FLAT" generalmente ampie il 20% del terreno totale, sia
in U che in V, ma più variabili in V (15%) e meno in U (8%).
A meno di voler specificare esplicitamente l'ampiezza della perturbation, è molto meglio definirla in percentuale. Infatti in questo modo il mio script diventa più scalabile, se il terreno è grande 200u x 200v Vertici, una perturbation 30 x 50 (%) sarà ampia 60u x 100v, se un giorno, per qualche motivo, porto il terreno ad essere grande 400u x 400v ad esempio, l'ampiezza viene scalata automaticamente a 120u x 200v...
MAGNITUDO
La Magnitudo è un parametro "float" globale che incide sull' ampiezza
(riguardo l'altezza, o asse z) di una perturbation. Il valore standard è 1.0, ma
durante uno script è spesso modificata più volte per ottenere diverse forze
sulle varie HILL, VALLEY, ecc...
Uso : SETMAG <float>
Ad esempio lo script :
SETMAG 8
HILL > 25 25 0 0 50
Crea 50 Perturbation HILL, ognuna di 25u x 25v e di Magnitudo 8.0. E' anche possibile settare la Magnitudo con valori negativi, in questa ottica i 2 script seguenti :
SETMAG 5
HILL > 40 40 5 5 1
SETMAG -5
VALLEY > 40 40 5 5 1
Sono equivalenti, infatti entrambi generano una HILL di 40x40 (+-5). Questo perchè HILL e VALLEY sono complementari.
SAMPLE_GENERATION
Generation
// Viene abbassato l'intero terreno di 6 unità
SETMAG -6
RISE
// Impostata la Magnitudo a 8, vengono generate 50 HILL ampie
del 30% (Variazione del 10%).
SETMAG 8
HILL % 30 30 10 10 50
// Altre 100 HILL, ma con Magnitudo e ampiezza minori.
SETMAG 4
HILL % 15 15 10 10 100
// Stessa cosa, ulteriori HILL di ordine inferiore...
SETMAG 2
HILL % 7 7 3 3 600
END
ENDSCRIPT
Con questo filtro è possibile ottenere un'interpolazione cosenoidale dei valori di altezza già presenti sul terreno. Dal menu principale è possibile selezionare diverse wavelength (lunghezze d'onda) per impostare la "granularità" dell'interpolazione, ovviamente una lunghezza d'onda pari a 1 lascia invariati i valori (z).
Generation
// Si generano un pò di HILL e VALLEY.
SETMAG 6
HILL % 30 30 10 10 50
VALLEY % 15 15 10 10 100
// Si interpolano i valori (z) creati a questo punto con
lunghezza d'onda = 20.
INTERPOLATE_NOISES 20
END
Gli Height Filters vengono applicati ad ogni singola perturbation: prima di applicare la Magnitudo infatti, il valore di perturbazione per un singolo vertice è compreso nell'intervallo [0,1], a questo valore in uscita viene applicato il filtro selezionato. Tra questi, il più famoso e usato è il RIDGED.
![]() |
![]() |
![]() |
Nessuno Filtro applicato : Perturbation (in questo caso HILL) invariata. | Filtro Ridged a 50% (0.5) : la metà superiore è "ribaltata". In genere il valore standard per il Ridged è proprio 0.5. In GeoWorld si può settare a qualunque valore in [0,1] ottenendo risultati diversi. | Filtro Cut a 50% : La metà superiore viene "troncata". |
Esempio di script con uso di Height Filter RIDGED :
Generation
// Setta l'Height Filter RIDGED a 0.5 e genera un pò di HILL e VALLEY.
SETHEIGHTFILTER RIDGED 0.5
HILL % 30 30 10 10 50
VALLEY % 15 15 10 10 100
END
Per togliere un filtro precedentemente settato, basta il comando
SETHEIGHTFILTER NONE.
A differenza degli Height Filters, questi filtri sono applicati a TUTTO il terreno: si tratta di erosioni, effetti ambientali, ecc...
Segue la lista completa e aggiornata dei comandi di script :
INIT COMMANDS | |
INIT | Inizializza il terreno, tutti i valori in z = 0.0 |
SETSEED <int s> | Pone il seme random a "s" |
MAGNITUDO COMMANDS | |
SETMAG <float m> | Setta la Magnitudo a "m" |
RESETMAG | Resetta la Magnitudo ad un valore di default |
MULTMAG <float m> | Moltiplica la Magnitudo corrente per "m" |
PERTURBATION COMMANDS | |
HILL <mode> <float u, v> <float u_var, v_var> <int it> | Genera "it" perturbation larghe "u" x "v" con rispettive variazioni "u_var" e "v_var". "mode" può essere "%" o ">" per fornire i valori in u e v in forma percentuale o discreta. |
VALLEY """ | Genera una valle con gli stessi parametri sopra descritti. Comando complementare a HILL |
SMOOTH """ | Ammorbidisce la regione determinata (avvicina i valori in z al valore medio della regione) |
FLAT """ | Simile a SMOOTH ma porta direttamente tutti i valori in z della regione all'altezza media. |
RISE | Somma a tutti i valori z del terreno il valore corrente della Magnitudo. Se questa è positiva quindi provocherà un rialzamento del terreno altrimenti un ribasso... |
SCALE | Identico a RISE solo che i valori vengono moltiplicati per la Magnitudo. |
NOISE INTERPOLATION COMMANDS | |
INTERPOLATE_NOISES <int w> | Effettua un'interpolazione cosenoidale dei valori z correnti del terreno con WaveLength pari a "w" |
TERRAIN LAYER RESYNC COMMANDS | |
UPDATENORMALS | Aggiorna tutte le normali al terreno (in esecuzione tasto 'n') |
UPDATECOLORS | Aggiorna la colorazione del terreno + Deposition Maps (in esecuzione tasto 'u') |
UPDATESHADOWS | Aggiorna il Layer (Buffer) delle ombre (in esecuzione tasto 'R'). |
UPDATEHEIGHTBOUNDS | Aggiorna i limiti di minima e massima altezza (operazione inclusa nel comando UPDATESHADOWS). |
HEIGHT FILTER COMMANDS | |
SETHEIGHTFILTER <HF> <float p> | Pone il filtro corrente di perturbation a "HF" con parametro associato "p". HF può essere : NONE (senza parametro, nessun filtro), RIDGED, CUT, LOG. |
TERRAIN FILTER COMMANDS | |
TERRAINFILTERPARAMS <int n> <float p1, p2, ..... pn> | Carica n parametri per il Terrain Filter. |
APPLYTERRAINFILTER <TF> | A seconda dei parametri caricati in precedenza con TERRAINFILTERPARAMS, applica il filtro "TF" che può
essere :
|