4.8.3.2        Fondere le Normali



Le normali possono essere stratificate in maniera analoga ai pigmenti, ma i risultati possono essere inattesi. Proviamo, modificando la sfera come segue :

sphere { <0,0,0>, 1
pigment { Gray75 }
normal { radial frequency 10 }
normal { gradient y scale .2 }
}

Fig. 118-Normali sovrapposte

Come possiamo vedere, il motivo risultante nelle normali non è né radiale, né un gradiente. E' invece il risultato che si ottiene prima calcolando un motivo radiale e poi sovrapponendogli additivamente un gradiente. Questo metodo può essere difficoltoso da controllare e così POV-Ray fornisce all'utente altri modi per unire insieme normali diverse.
Un metodo possibile è usare una mappa delle normali. Una mappa di normali funziona nello stesso modo in cui funzionano le mappe di pigmenti che abbiamo usato prima. Modifichiamo la texture della nostra sfera come segue :

sphere { <0,0,0>, 1
pigment { Gray75 }
normal {
gradient y
frequency 3
turbulence .5
normal_map {
[0.00 granite]
[0.25 spotted turbulence .35]
[0.50 marble turbulence .5]
[0.75 bozo turbulence .25]
[1.00 granite]
}
}
}

Renderizzando questo esempio

Fig. 119-Mappa di normali

Vediamo che la sfera ha ora una superficie molto irregolare. La disposizione delle normali lungo un pattern a gradiente le separa in fasce, ma queste sono irregolari, dando alla superficie un aspetto caotico. Ma questo ci da un'idea. Supponiamo di usare lo stesso motivo che abbiamo usato per creare gli oceani del nostro pianetino, per creare una mappa di normali e di applicarla alle zone emerse. Ne segue che se usassimo gli stessi motivi e gli stessi modificatori su una sfera della stessa dimensione, la forma del motivo sarebbe la stessa ? Renderebbe le zone di terraferma irregolari lasciando gli oceani lisci ? Proviamo. Per prima cosa, renderizziamo le due sfere una di fianco all'altra in modo da poter vedere se il motivo è veramente lo stesso. Leviamo il commento dal pianetino e lo modifichiamo nel seguente modo :

sphere { <0,0,0>, 1
texture { LandArea }
texture { OceanArea }
//texture { CloudArea } // <-commenta questa riga
translate -x // <- aggiungi questa trasformazione
}

Ed ora, cambiamo la sfera grigia come segue :

sphere { <0,0,0>, 1
pigment { Gray75 }
normal {
bozo
turbulence .5
lambda 2
normal_map {
[0.4 dents .15 scale .01]
[0.6 agate turbulence 1]
[1.0 dents .15 scale .01]
}
}
translate x // <- aggiungi questa trasformazione
}

Renderizziamo per vedere se il motivo è lo stesso.

Fig.120-Le due sfere affiancate

Vediamo che sono uguali. Allora, commentiamo la sfera grigia ed aggiungiamo il blocco di normali che contiene alla texture che abbiamo assegnato alla terraferma del nostro pianetino. Eliminiamo le trasformazioni in modo da centrare nuovamente nella scena il pianeta.

#declare LandArea = texture {
pigment {
agate
turbulence 1
lambda 1.5
omega .8
octaves 8
color_map {
[0.00 color rgb <.5, .25, .15>]
[0.33 color rgb <.1, .5, .4>]
[0.86 color rgb <.6, .3, .1>]
[1.00 color rgb <.5, .25, .15>]
}
}
normal {
bozo
turbulence .5
lambda 2
normal_map {
[0.4 dents .15 scale .01]
[0.6 agate turbulence 1]
[1.0 dents .15 scale .01]
}
}
}

Fig.121-Abbiamo applicato le normali alla terraferma

Guardando l'immagine risultante, vediamo che la nostra idea funziona ! Le zone di terraferma sono irregolari, mentre gli oceani sono piatti. Rimettiamo a posto lo strato di nuvole ed il nostro pianetino è completo.

Fig. 122-Il pianeta completo

C'è molto di più di quanto non abbiamo esposto qui per motivi di spazio. Da soli, dovremmo prenderci il tempo di esplorare mappe slope ( vedi § 7.6.2.1), mappe bump ( vedi § 7.6.2.3) e average ( vedi § 7.6.7.2).