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 }
}
}