\\ Home : Articoli : Stampa
Luci Speculari
Di robydx (del 13/05/2007 @ 10:50:33, in Direct3D10, linkato 1778 volte)

Passiamo ora ad un nuovo modello di illuminazione, il Phong , quello di default per le vecchie DirectX (con la differenza però che noi calcoliamo tutto nel pixel shader evitando i difetti dell'interpolazione lineare ed ottenendo una qualità molto più elevata).

Il modello di illuminazione phong riprende il modello lambertian inserendo però l'effetto speculare (il bagliore delle auto è un esempio di specular).

La luce speculare dipende sia dall'oggetto, attraverso le normali, sia dalla posizione dell' osservatore.

La formula di illuminazione è la seguente 

 

Float4 D= lightDiffuseColor *  dot(N,-L);

float3 V=normalize(eyePosition - vertexPosition);

float3 R=normalize(2.0F * N * dot( N, L) - L);

float4 S= lightSpecularColor * pow(max(0.0F,dot(R,V)),power);

Float4 finalColor = A + MaterialDiffuseColor *  D + MaterialSpecularColor * S; 

  • D è la diffuse light, calcolata come nel precedente tutorial.
  • L è la direzione della luce
  • V è il vettore EyeDirection che si ottiene come direzione tra la posizione della telecamera e quella del vertice
  • R è il vettore riflessione
  • S è la specular light che si ottiene elevando a potenza il prodotto fattoriale tra R e V. L'esponziale è il valore scalare power, che definisce l'intensità.
  • A è la luce ambientale, ossia un incremento nel valore per simulare la presenza di luce diffusa
  • MaterialDiffuseColor e MaterialSpecularColor sono i colori che l'oggetto emetto a contatto con la luce diffuse e specular

 

La somma tra la luce ambientale, diffusa e speculare è la phong light, probabilmente il modello di illuminazione più diffuso.

Notare infine che in caso di più sorgenti luminose il valore D ed il valore S sono le somme dei medesimi valori calcolati singolarmente per ogni sorgente.

Vi lascio al demo

 

Demo