Illuminazione diffusa (Direct3D 9)

Dopo aver modificato l'intensità della luce per eventuali effetti di attenuazione, il motore di illuminazione calcola la quantità di luce rimanente riflette da un vertice, dato l'angolo del vertice normale e la direzione della luce imprevista. Il motore di illuminazione passa a questo passaggio per le luci direzionali perché non attenuano la distanza. Il sistema considera due tipi di reflection, diffusi e speculari e usa una formula diversa per determinare la quantità di luce riflessa per ognuna. Dopo aver calcolato le quantità di luce riflessa, Direct3D applica questi nuovi valori alle proprietà di riflessione diffusa e speculare del materiale corrente. I valori dei colori risultanti sono i componenti diffusi e speculari usati dal rasterizzatore per produrre l'ombreggiatura e l'evidenziazione speculare di Gouraud.

L'illuminazione diffusa è descritta dall'equazione seguente.

Illuminazione diffusa = sum[Cd*Ld*(N.Ldir)*Atten*Spot]

Parametro Valore predefinito Tipo Descrizione
Sum N/D N/D Sommazione del componente diffuso di ogni luce.
Cd (0,0,0,0) D3DCOLORVALUE Colore diffuso.
Ld (0,0,0,0) D3DCOLORVALUE Colore diffuso chiaro.
N N/D D3DVECTOR Vertice normale
Ldir N/D D3DVECTOR Vettore di direzione dal vertice dell'oggetto alla luce.
Atten N/D FLOAT Attenuazione della luce. Vedere Attenuazione e Fattore di evidenza (Direct3D 9).
Spot (Contante) N/D FLOAT Fattore di evidenza. Vedere Attenuazione e Fattore di evidenza (Direct3D 9).

 

Il valore per Cd è:

  • vertex color1, se DIFFUSEMATERIALSOURCE = D3DMCS_COLOR1 e il primo colore del vertice viene fornito nella dichiarazione del vertice.
  • vertex color2, se DIFFUSEMATERIALSOURCE = D3DMCS_COLOR2 e il secondo colore del vertice viene fornito nella dichiarazione del vertice.
  • colore diffuso del materiale

Nota

Se viene usata una delle opzioni DIFFUSEMATERIALSOURCE e il colore del vertice non viene fornito, viene usato il colore di diffusione del materiale.

 

Per calcolare l'attenuazione (Atten) o le caratteristiche di evidenza (Spot), vedere Attenuazione e Fattore di evidenza (Direct3D 9).

I componenti diffusi vengono bloccati da 0 a 255, dopo che tutte le luci vengono elaborate e interpolate separatamente. Il valore di illuminazione diffuso risultante è una combinazione dei valori di luce ambiente, diffusi ed emissivi.

Esempio

In questo esempio l'oggetto viene colorato usando il colore diffuso chiaro e un colore diffuso del materiale. Il codice è illustrato di seguito.

D3DMATERIAL9 mtrl;
ZeroMemory( &mtrl, sizeof(mtrl) );

D3DLIGHT9 light;
ZeroMemory( &light, sizeof(light) );
light.Type = D3DLIGHT_DIRECTIONAL;

D3DXVECTOR3 vecDir;
vecDir = D3DXVECTOR3(0.5f, 0.0f, -0.5f);
D3DXVec3Normalize( (D3DXVECTOR3*)&light.Direction, &vecDir );

// set directional light diffuse color
light.Diffuse.r = 1.0f;
light.Diffuse.g = 1.0f;
light.Diffuse.b = 1.0f;
light.Diffuse.a = 1.0f;
m_pd3dDevice->SetLight( 0, &light );
m_pd3dDevice->LightEnable( 0, TRUE );

// if a material is used, SetRenderState must be used
// vertex color = light diffuse color * material diffuse color
mtrl.Diffuse.r = 0.75f;
mtrl.Diffuse.g = 0.0f;
mtrl.Diffuse.b = 0.0f;
mtrl.Diffuse.a = 0.0f;
m_pd3dDevice->SetMaterial( &mtrl );
m_pd3dDevice->SetRenderState(D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL);

In base all'equazione, il colore risultante per i vertici dell'oggetto è una combinazione del colore del materiale e del colore chiaro.

Le due illustrazioni seguenti mostrano il colore del materiale, che è grigio e il colore chiaro, che è rosso brillante.

illustration of a gray sphereillustration of a red sphere

Nella figura seguente viene visualizzata la scena risultante. L'unico oggetto nella scena è una sfera. Il calcolo dell'illuminazione diffusa accetta il colore materiale e la luce diffusa e lo modifica dall'angolo tra la direzione della luce e il vertice normale usando il prodotto punto. Di conseguenza, il retro della sfera diventa più scuro come la superficie della sfera si allontana dalla luce.

illustration of a sphere with diffuse lighting

Combinando l'illuminazione diffusa con l'illuminazione ambientale dell'esempio precedente, l'intera superficie dell'oggetto. La luce ambientale ombreggiatura l'intera superficie e la luce diffusa aiuta a rivelare la forma 3D dell'oggetto, come illustrato nella figura seguente.

illustration of a sphere with diffuse lighting and ambient lighting

L'illuminazione diffusa è più intensa per calcolare l'illuminazione ambientale. Poiché dipende dalle normali del vertice e dalla direzione della luce, è possibile vedere la geometria degli oggetti nello spazio 3D, che produce un'illuminazione più realistica rispetto all'illuminazione ambientale. È possibile usare evidenziazioni speculari per ottenere un aspetto più realistico.

Matematica dell'illuminazione