7.6.2.1 Mappe
Slope
Slope_map
è un modificatore dei motivi delle normali che ti da una grande
possibilità di controllo riguardo all'esatta forma delle irregolarità
della superficie. E' meglio illustrato con delle normali a gradiente. Supponi
di avere...
plane{ z, 0
pigment{ White }
normal { gradient x }
}
Questo dà un motivo a dente
di sega che ricorda delle piccole creste che salgono dal punto di ascissa
0 al punto di ascissa 1 e poi cadono bruscamente di nuovo a zero per ricominciare
a salire dal punto di ascissa 1 al punto di ascissa 2. Una slope_map
modifica questo motivo a dente di sega in (quasi) ogni forma d'onda desiderabile.
La sintassi è la seguente :
normal{
TIPO_DI_PATTERN Valore
slope_map {
[ NUM_1 POINT_SLOPE_1]
[ NUM_2 POINT_SLOPE_2]
[ NUM_3 POINT_SLOPE_3]
...
}
MODIFICATORI...
}
E' da notare che le parentesi quadre
sono parti integranti della frase. Non sono simboli che denotano parti
facoltative. Le parentesi delimitano ogni singolo componente della mappa.
Ci possono essere da 2 a 256 componenti.
I vari NUM_1,
NUM_2...
sono valori decimali compresi tra 0.0 ed 1.0 inclusi. POINT_SLOPE_1
e POINT_SLOPE_2
sono vettori a due componenti come <0,1> dove il primo valore rappresenta
l'altezza apparente dell'onda e il secondo valore rappresenta la pendenza
dell'onda in quel punto. L'altezza può variare tra 0.0 ed 1.0 ma
qualunque valore può essere usato. Il valore della pendenza rappresenta
il cambiamento in altezza per unità di distanza (dz/dx).
Per esempio, una pendenza di 0 significa che non c'è irregolarità
nella superficie, una pendenza di 1 significa che la pendenza arriva a
45° ed una pendenza di -1 significa che la pendenza sarà di
45°, ma rivolta in senso opposto. Teoricamente, una pendenza verticale
avrà un valore di inclinazione infinito. In pratica i valori di
inclinazione devono variare entro un raggio che va da -3.0 a +3.0. E' bene
ricordarsi che questa è solo una pendenza apparente. Un modificatore
di normali non cambia la superficie dell'oggetto.
Per esempio, ecco come ottenere un onda triangolare :
normal {
gradient x // questo è il TIPO_DI_PATTERN
slope_map {
[0 <0, 1>] // inizia in basso e sali
[0.5 <1, 1>] // a metà continua a salire
[0.5 <1,-1>] // scendi bruscamente
[1 <0,-1>] // termina la pendenza in fondo
}
}
La funzione del motivo è stata
calcolata e il risultato è un valore tra 0.0 e 1.0. Il primo elemento
imposta che a valori x=0 l'altezza apparente sarà 1 e l'inclinazione1.
A x=0.5 saremo sempre ad altezza 1 e inclinazione 1. Il terzo elemento
specifica che a x=0.5 ( e per alcune frazioni di poco superiori a 0.5)
avremo altezza 1 e inclinazione -1. Infine a x= 1 siamo ad altezza
0 e la pendenza sarà ancora -1.
Questo esempio connette fra di loro i vari punti usando linee dritte anche
se il calcolo viene effettuato per mezzo di una spline cubica. Questo esempio
crea una linea ondulata.
normal {
gradient x // questo è il TIPO_DI_MOTIVO slope_map {
[0 <0.5, 1>] // inizia al centro e sale
[0.25 <1.0, 0>] // al centro si ha una pendenza piana
[0.5 <0.5,-1>] // dal punto centrale inizia a scendere
[0.75 <0.0, 0>] // inclinazione piatta in fondo
[1 <0.5, 1>] // finisce al centro e cresce di nuovo
}
L'esempio inizia all'altezza di 0.5
e cresce fino ad 1, ad un quarto della funzione siamo ad altezza 1 e inclinazione
0. Lo spazio tra questi due punti è delimitato da una curva che
sale lentamente perché il valore iniziale e finale della pendenza
sono diversi. A metà siamo a mezza altezza, la curva sta scendendo
e arriverà in fondo a ¾ del suo percorso. Bisognerà
arrivare fino al valore 1 per completare il ciclo. Ci sono molti esempi
nella scena di esempio slopemap.pov.
Una slope_map
può usare qualunque motivo eccetto brick,
checker,
hexagon,
bumps,
dents,
ripples,
waves,
wrinkles
e bump_map.
Si possono dichiarare e poi usare identificatori di slope_map.
Per esempio :
#declare Fancy_Wave =
slope_map { // ora iniziamo a inventare
[0.0 <0, 1>] // fai un triangolino
[0.2 <1, 1>] // giù
[0.2 <1,-1>] // fino a
[0.4 <0,-1>] // qui.
[0.4 <0, 0>] // area piatta
[0.5 <0, 0>] // passando da qui.
[0.5 <1, 0>] // primo spigolo dell'onda quadra
[0.6 <1, 0>] // secondo spigolo
[0.6 <0, 0>] // di nuovo piatto
[0.7 <0, 0>] // qui.
[0.7 <0, 3>] // inizia a salire
[0.8 <1, 0>] // piano in cima
[0.9 <0,-3>] // qui finisce.
[0.9 <0, 0>] // il resto è piano fino a 1.0
}
object{ Coso
pigment { White }
normal {
wood
slope_map { Fancy_Wave }
}
}
![]() |
![]() |
![]() |