Sorgenti di luce, proprietà dei materiali


Illuminazione in VRML


Un nodo Shape viene illuminato, e diventa quindi visibile, in base alla somma di tutte le luci che lo influenzano, ovvero:
N.B.
negli esempi visti finora, abbiamo utilizzato un'unica sorgente di luce (bianca) posizionata sulla testa dell'avatar. È possibile disattivarla ponendo a FALSE il campo headlight nel nodo NavigationInfo

Tipi di sorgenti di luce


DirectionalLight
emette raggi di luce paralleli da una distanza virtualmente infinita (simula una sorgente di luce distante)
PointLight
emette raggi di luce in ogni direzione da un punto
SpotLight
emette un cono di luce da un punto

Campi comuni delle sorgenti di luce


SFBool on
luce accesa/spenta (default: TRUE)
SFFloat intensity
intensità della luce diretta emessa, da 0 (nessuna luce diretta) a 1 (default 1)
SFFloat ambientIntensity
intensità della luce ambientale emessa, da 0 (nessuna luce ambientale) a 1 (default 0)
SFColor color
colore della luce (default 1 1 1)

Con

DirectionalLight


SFVec3f direction
la direzione da cui proviene la luce (default 0 0 -1)

La luce emessa non si attenua con la distanza e illumina solo i nodi nel gruppo in cui il nodo DirectionalLight viene inserito
image

PointLight


SFVec3f location
punto da cui la luce viene emanata in tutte le direzioni (default 0 0 0)
SFFloat radius
massima distanza a cui la luce illumina un oggetto (default 100)
SFVec3f attenuation
coefficienti che indicano quanto la luce si attenua con la distanza (default 1 0 0).
Il fattore di attenuazione è (r e' la distanza della luce dalla superficie):
1/max(attenuation[0] + attenuation[1]×r + attenuation[2]×r2, 1)

N.B. illumina i nodi indipendentemente dalla loro posizione nel file

SpotLight


location radius direction attenuation
come per le luci precedenti
SFFloat cutOffAngle
ampiezza massima del cono di luce (default 1.570796)
SFFloat beamWidth
ampiezza della regione interna del cono con intensità di luce costante (default 0.785398)

N.B. illumina i nodi indipendentemente dalla loro posizione nel file

image

Luci e materiali


L'aspetto di un solido in una scena VRML dipende, oltre che dalle luci, dal materiale di cui è composta la sua superficie

Le proprietà del materiale vengono determinate:
Appearance
{
  exposedField SFNode material NULL
  ...
}

Material
{
  exposedField SFFloat ambientIntensity 0.2
  exposedField SFColor diffuseColor     0.8 0.8 0.8
  exposedField SFColor emissiveColor    0 0 0
  exposedField SFFloat shininess        0.2
  exposedField SFColor specularColor    0 0 0
  exposedField SFFloat transparency     0
}


diffuseColor
colore riflesso dal materiale (l'effetto finale dipende anche dall'angolo di incidenza della luce con la superficie del materiale e dal colore della luce)
ambientIntensity
quanta luce ambientale viene riflessa dal materiale (NON dipende dalla posizione delle luci rispetto alla superficie). Il colore ambientale viene calcolato come ambientIntensity × diffuseColor
emissiveColor
permette di modellare solidi che "brillano" (oppure oggetti "pre-illuminati")
specularColor shininess
controllano la lucentezza del materiale (la presenza di punti in cui la luce viene riflessa completamente), nel caso l'angolo tra l'utente e la superficie sia vicino all'angolo tra la sorgente di luce e la superficie. Valori più bassi di shininess producono riflessioni più diffuse.
transparency
controlla il grado di trasparenza del solido (0 = opaco, 1=trasparente, valori intermedi=parzialmente trasparente)

Modello VRML dell'illuminazione


Idealmente, i valori di illuminazione andrebbero calcolati per pixel (Phong Shading). Nella maggior parte dei browser, i valori di illuminazione vengono calcolati SOLO nei vertici, e vengono poi interpolati per calcolare il valore di illuminazione nei punti interni (Goraud Shading)

I solidi NON ostruiscono il passaggio della luce, e NON generano ombre

Le luci vengono mescolate attraverso operazioni di moltiplicazione, es. rosso * blu: (1 0 0) * (0 0 1) = (0 0 0)

Considerazioni sull'uso delle sorgenti di luce


La complessità dei calcoli che il browser deve effettuare cresce notevolmente con il numero di luci nella scena

Se, per un nodo Shape, diffuseColor, specularColor e ambientIntensity valgono zero, vengono saltati i calcoli di illuminazione e viene usato solo il valore di emissiveColor

In termini di tempo di CPU, le DirectionalLight sono le meno costose, le SpotLight le più costose

Se il browser usa Goraud Shading, si ottengono effetti migliori su poligono con molti vertici e facce piccole.
There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki