7.6.8.8.1 Buco
Nero
Il warp 'buco nero' si chiama
così perché è simile ai veri buchi neri. Così
come questi, non è realmente possibile vederlo. L'unico modo per
intuirne la presenza è quello di osservare l'effetto che ha sugli
oggetti che lo circondano. Diversamente da un vero buco nero, non può
inghiottirti e comprimerti a dimensioni, diciamo, di 10-20 micron di diametro
(ipotesi molto ottimistica, N.d.T.) se ti avvicini troppo (su questa parte
stiamo ancora lavorando J ).
Prendiamo per esempio le venature di una texture legno. Usando la normale
turbolenza di POV-Ray ed altri modificatori di texture, possiamo ottenere
delle belle venature, ma nella sua casualità, la texture è
regolare, è 'regolarmente casuale' ! Aggiungendo un 'black
hole' creeremo un disturbo localizzato in una o più posizioni. Il
buco nero può avere l'effetto sia di 'risucchiare' la texture che
lo circonda, sia di respingerla. Nel secondo caso, se applicato ad un legno,
può simulare i nodi delle venature. In questo esempio parleremo
di una texture 'legno' perché è l'ideale per spiegare il
funzionamento di black_hole.
Ad ogni modo, questa funzione può essere usata in qualunque tipo
di texture.
L'effetto che il 'buco nero' ha sulla texture può essere specificato.
Per default risucchia il colore con una forza calcolata esponenzialmente
(inverso del quadrato esattamente come l'attrazione gravitazionale), ma
può essere cambiata. I buchi neri possono essere usati ovunque sia
permessa una frase warp{...}.
La sintassi è :
warp
{
black_hole <CENTER>, RADIUS
[falloff VALUE]
[strength VALUE]
[repeat <VECTOR>]
[turbulence <VECTOR>]
[inverse]
}
Alcuni esempi sono...
warp
{
black_hole <0, 0, 0>, 0.5
}
warp
{
black_hole <0.15, 0.125, 0>, 0.5
falloff 7
strength 1.0
repeat <1.25, 1.25, 0>
turbulence <0.25, 0.25, 0>
inverse
}
warp
{
black_hole <0, 0, 0>, 1.0
falloff 2
strength 2
inverse
}
Per capire completamente come funziona
black_hole
è importante conoscerne le basi teoriche. Un buco nero (o qualunque
warp) funziona prendendo un punto e spostandolo in un'altra posizione.
La quantità di perturbazione dipende dalla forza del buco nero nel
punto in cui si applica ed è direttamente connessa alla quantità
di spostamento che vedi avvenire nella texture. Più forte è
il buco nero alle coordinate del punto su cui agisce, più questo
sarà spostato. Lo spostamento avviene sempre lungo il vettore che
collega il centro del buco nero ed il punto sul quale influisce. I buchi
neri si suppongono sferici. Perché un punto subisca l'effetto del
buco nero, deve trovarsi all'interno del volume della sfera. Supponendo
di avere un buco nero a <1,1,1> ed un punto a <1,2,1>, se questo
punto è perturbato di una quantità totale di +1 unità,
la sua nuova posizione sarà <1,3,1>, che si trova sulla congiungente
i punti <1,1,1> ed <1,2,1>. In questo caso il punto è
allontanato dal buco nero ; questo non è il suo normale comportamento,
ma è utile per un esempio. I parametri di un buco nero sono i seguenti :
Centro il centro
del buco nero
Raggio il suo raggio
Falloff la potenza
di 2 con la quale l'effetto decade (default 2)
Strenght la quantità
della trasformazione
Inverted se impostato
allontana i punti invece di risucchiarli
Repeat se impostato,
avremo molti buchi neri invece di uno
Turbulence se impostato,
la posizione di ognuno dei buchi neri (se viene usato repeat)
è casuale.
Repeat_Vector il
vettore <x,y,z> lungo il quale ripetere i warp.
Turbulence_Vector il valore massimo in tre dimensioni di turbolenza
casuale.
Ciascuno di questi parametri viene discusso di seguito :
Centro un vettore che definisce il centro della sfera che rappresenta
il buco nero.
Raggio un numero che indica la lunghezza
in unità del raggio della sfera
Se un punto non è all'interno del raggio non sarà influenzato
dalla presenza del buco nero.
Falloff la potenza di decadimento
dell'effetto. Il valore predefinito è 2. La forza del punto nero
in un punto qualunque, prima di applicare il modificatore della forza,
è come segue.
Primo, converti la distanza dal centro ad un valore da 0 a 1 proporzionale
al raggio. Un punto sulla superficie della sfera avrà valore 0,
un punto al centro avrà valore 1.
Chiamiamo questo valore c ed eleviamolo alla potenza specificata
da falloff.
Per default falloff
è 2, quindi otteniamo c^2 (c al quadrato).
Il valore che otteniamo è la forza del buco nero in quella posizione
che, dopo aver applicato il fattore strenght
determina la perturbazione del punto nello spazio. Ad esempio se c è
0.5 la forza è 0.5^2=0.25. Se c è 0.25 la forza è
0.125. Ma se c è esattamente uguale ad 1, la forza è
1. Usando la potenza di 2 possiamo vedere che via via che c diminuisce
la forza cala in modo esponenziale con un decadimento geometrico (secondo
la potenza di -2). In parole povere la forza è molto più
forte vicino al centro di quanto non lo sia verso l'esterno. Aumentando
falloff
si può aumentare questa differenza. Un valore alto significa che
i punti sulla superficie della sfera saranno appena influenzati e che quelli
vicini al centro saranno fortemente perturbati. Un valore di 1 per il falloff
significa che l'effetto è lineare. Un punto che si trovi a metà
strada tra il centro e la superficie subirà una forza uguale a 0.5.
Un valore di falloff
tra 0 e 1 significa che avvicinandosi alla superficie la forza aumenta
invece di diminuire. Questo può avere qualche utilità ma
ha un effetto collaterale : l'effetto di un buco nero cessa al di
fuori del suo perimetro, questo significa che i punti appena all'interno
del perimetro saranno fortemente perturbati, mentre quelli appena fuori
non saranno perturbati e questo darebbe un bordo visibile di forma sferica.
Un valore di falloff
uguale a 0 significherebbe che la forza sarebbe uguale a 1 per tutti i
punti all'interno del buco nero poiché ogni numero diverso da zero
elevato alla potenza 0 dà 1.
La dimensione dello spostamento del punto è data fondamentalmente
dal valore della forza dopo il ridimensionamento. Facciamo un esempio :
supponiamo di avere un buco nero di raggio 2 ed un punto ad un unità
dal centro, questo significa che si trova esattamente tra il centro e la
superficie e che c sarebbe esattamente 0.5. Se usiamo il valore
di 2 per falloff
la forza su quel punto sarebbe 0.5^2=0.25. Questo significa che dobbiamo
spostare questo punto della sua distanza dal centro moltiplicata per 0.25,
in questo caso la distanza è di una unità e quindi spostiamo
il punto di 1*0.25=0.25 unità. Questo ci dà una distanza
dal centro di 1.0-(1.0*0.25)=0.75 unità dal centro, sulla congiungente
dal centro alla posizione originaria del punto. Se i punti fossero parte,
diciamo, della venatura di un legno, questa venatura sembrerebbe convergere
verso il centro (invisibile) del buco nero. Se fosse impostata la parola
chiave inverse
sarebbe invece respinta dal buco nero e la posizione finale del punto sarebbe
1.0+(1.0*0.25)=1.25 sulla retta congiungente il centro con la posizione
originaria del punto.
Strenght (forza). La forza da un po' più di controllo su quanto un punto viene perturbato dal buco nero. Fondamentalmente la forza del buco nero come calcolata sopra viene moltiplicata per il valore di strenght che di default è 1.0. Se imposti strenght a 0.5 per esempio, tutti i punti all'interno del buco nero verranno spostati solo della metà di quanto sarebbero spostati normalmente. Se imposti strenght a due verranno spostati del doppio. C'è una limitazione all'ultimo esempio : lo spostamento può essere al massimo la distanza originaria dal centro del buco nero. Questo significa che un punto lontano 0.75 unità dal centro può essere spostato di un massimo di 0.75 unità, indipendentemente dal valore di strenght. Il risultato di questa limitazione è che si avrà una zona vicino al centro del buco nero in cui tutti i punti il cui valore finale della forza era maggiore o uguale a uno vengono spostati.
Inverted se si inserisce la parola chiave inverted i punti sono respinti dal centro invece di venirne attratti.
Repeat : repeat
permette di simulare l'effetto di molti buchi neri senza doverli dichiarare
esplicitamente. Repeat
è un vettore che dica a POV-Ray di usare il buco nero definito in
più posizioni. Se non ti interessa la teoria dietro a tutto questo
salta il testo seguente e usa i valori riassunti più avanti (non
osate saltarlo, altrimenti perché abbiamo fatto la fatica di tradurlo !
N.d.T.).
Usare repeat divide
la scena in parallelepipedi, il primo dei quali si estende dall'origine
al punto specificato dal vettore repeat.
Supponiamo che il vettore sia <1,5,2>. Il primo parallelepipedo si
estenderebbe tra <0,0,0> e <1,5,2>. Questo parallelepipedo
si ripete quindi ce ne sarebbero tra <0,0,0> e <-1,-5,-2>,
tra <1,5,2> e <2,10,4> e così via in tutte le direzioni
all'infinito. Quando usi repeat
il vettore che specifica il centro del buco nero non specifica una posizione
assoluta rispetto agli assi, ma relativa ad ogni parallelepipedo. Si possono
usare solo valori positivi, valori negativi darebbero risultati indefiniti.
Supponiamo che il centro sia <0.5,1,0.25> e che il vettore repeat
sia <2,2,2>. Questo ci dà un parallelepipedo tra <0,0,0>
e <2,2,2> ecc. i centri dei buchi neri per questi blocchi sarebbero :
<0,0,0>+<0.5,1,0.25>=<0.5,1,0.25> e <2,2,2>+<0.5,1,0.25>=<2.5,3.0,2.25>.
A causa del metodo con cui vengono eseguiti i calcoli c'è una restrizione
sui valori che si possono specificare per il vettore repeat.
Fondamentalmente, ogni buco nero deve essere racchiuso totalmente all'interno
del rispettivo parallelepipedo, senza incrociare le pareti di quelli adiacenti.
Questo significa che in tutte e tre le dimensioni, la posizione del centro
non deve essere minore del raggio e che il valore del vettore repeat
per ogni dimensione deve essere maggiore o uguale della somma di raggio
e posizione del centro, poiché altrimenti permetterebbe ad un buco
nero di incrociare le pareti di un parallelepipedo. Semplicemente, per
x, y e z deve essere
raggio <= centro <= repeat - raggio
Se il vettore repeat
è troppo piccolo per soddisfare questo criterio, verrà aumentato
e sarà visualizzato un messaggio di avvertimento. Se la posizione
del centro è minore del raggio, esso verrà spostato, ma non
verranno visualizzati messaggi di avvertimento.
Nota che nessuna delle regole viste sopra significa che non puoi sovrapporre
i buchi neri. Questo è possibile ed anzi può essere molto
utile. La restrizione si applica solo ad elementi dello stesso buco
nero che viene ripetuto. Puoi dichiarare un secondo buco nero che si
ripete e i cui elementi possono tranquillamente sovrapporsi a quelli del
primo causando le interazioni appropriate.
Si può attribuire il valore zero a una qualunque delle dimensioni
del vettore repeat,
col significato che il buco nero non sarà ripetuto in quella direzione.
Turbulence. La turbolenza può
essere utilizzata solo con repeat.
Permette di inserire un elemento di casualità nel metodo con cui
i buchi neri si ripetono, per dar loro un aspetto più naturale.
Un buon esempio sono i nodi nel legno : sarebbe artificioso se i nodi
si ripetessero tutti ala stessa distanza.
Il vettore turbulence
viene sommato alla posizione del centro di ogni buco nero, dopo che ogni
sua coordinata viene moltiplicata per un valore casuale che va da 0 ad
1.
Ad esempio, supponi che un black_hole
sia a <2,2,2>. Hai specificato un vettore turbolenza di <4,5,3>,
che significa che non vuoi che la posizione del buco nero possa variare
più di quattro unità nella direzione delle x, cinque nella
direzione delle y e tre nella direzione delle z. Le possibili nuove posizioni
sono le seguenti :
x può variare tra 2 e 6
y può variare tra 2 e 7
z può variare tra 2 e 5
La posizione del centro del buco nero che ne risulta è casuale (ma
coerente, in modo che i rendering possano essere ripetibili) e posta all'interno
di quell'intervallo.
C'è una limitazione nell'uso della turbolenza, che riflette quella
sull'uso del vettore repeat.
Non si può specificare un valore che farebbe uscire un buco nero
dal suo parallelepipedo. Poiché POV-Ray non sa in anticipo di quanto
verrà spostato il buco nero a causa della natura casuale dello spostamento,
inserisce una regola simile a quella valida per repeat,
tranne che aggiunge la variazione massima possibile al centro. Ad esempio,
supponi di avere un buco nero centrato ad <1.0,1.0,1.0>, di raggio
0. 5 e turbolenza <0.5,0.25,0>. Normalmente, il valore minimo di
repeat
sarebbe <1.5,1.5,1.5>, ma se teniamo conto della turbolenza, il minimo
diventa <2.0,1.75,1.5>.
Riassunto di Repeat : per tutti e tre gli assi x, y, z il centro deve essere spostato almeno del raggio ed il valore del vettore repeat deve essere almeno maggiore della somma di centro, raggio e turbolenza. L'eccezione è che repeat può essere 0, col significato che non ci sono ripetizioni su nessuno degli assi.