Luci e materiali (Direct3D 9)

Le luci vengono usate per illuminare gli oggetti in una scena. Quando l'illuminazione è abilitata, Direct3D calcola il colore di ogni vertice dell'oggetto in base a una combinazione di:

Nota

Questa sezione è solo per la pipeline a funzione fissa. Gli shader programmabili eseguono tutte le luci in modo esplicito.

 

  • Il colore del materiale corrente e i texel in una mappa delle trame associata.
  • Colori diffusi e speculari in corrispondenza del vertice, se specificato.
  • Il colore e l'intensità della luce prodotta dalle sorgenti di luce nella scena o dal livello di luce ambientale della scena.

Quando usi l'illuminazione e i materiali Direct3D, consenti a Direct3D di gestire i dettagli dell'illuminazione per te. Gli utenti avanzati possono eseguire l'illuminazione autonomamente, se lo si desidera.

Il modo in cui si lavora con l'illuminazione e i materiali fa una grande differenza nell'aspetto della scena sottoposta a rendering. I materiali definiscono il modo in cui la luce si riflette su una superficie. I livelli di luce diretta e ambientale definiscono la luce riflessa. È necessario usare i materiali per eseguire il rendering di una scena se l'illuminazione è abilitata. Le luci non sono necessarie per eseguire il rendering di una scena, ma i dettagli in una scena sottoposta a rendering senza luce non sono visibili. Al meglio, il rendering di una scena non illuminata comporta una silhouette degli oggetti nella scena. Questo non è abbastanza dettagliato per la maggior parte degli scopi.

Luce diretta e luce ambientale

Anche se sia la luce diretta che ambientale illuminano gli oggetti in una scena, essi sono indipendenti l'uno dall'altro, hanno effetti molto diversi, e richiedono che si lavora con loro in modi completamente diversi.

La luce diretta è solo questo: diretta. La luce diretta ha sempre direzione e colore ed è un fattore per gli algoritmi di ombreggiatura, ad esempio l'ombreggiatura gouraud. Diversi tipi di luci generano luce diretta in modi diversi, creando effetti di attenuazione speciali. Per creare un set di parametri di luce per la luce diretta, chiamare il metodo IDirect3DDevice9::SetLight .

La luce ambientale è effettivamente ovunque in una scena. È possibile considerarlo come un livello generale di luce che riempie un'intera scena, indipendentemente dagli oggetti e dalle relative posizioni in quella scena. La luce ambientale non ha posizione o direzione, solo colore e intensità. Ogni luce aggiunge alla luce ambientale complessiva in una scena. Impostare il livello di luce ambientale con una chiamata al metodo IDirect3DDevice9::SetRenderState , specificando D3DRS_AMBIENT come parametro State e il colore RGBA desiderato come parametro Value.

Il colore della luce ambientale assume la forma di un valore RGBA, dove ogni componente è un valore intero compreso tra 0 e 255. A differenza della maggior parte dei valori di colore in Direct3D.

È possibile utilizzare la macro D3DCOLOR_RGBA per generare valori RGBA. I componenti rosso, verde e blu si combinano per rendere il colore finale della luce ambientale. Il componente alfa controlla la trasparenza del colore. Quando si usa l'accelerazione hardware o l'emulazione RGB, il componente alfa viene ignorato.

Confronto tra modello di luce Direct3D e Natura

In natura, quando la luce viene emessa da una fonte, si riflette su centinaia, se non migliaia o milioni di oggetti prima di raggiungere l'occhio dell'utente. Ogni volta che viene riflessa, alcune luci vengono assorbite da una superficie, alcune vengono sparse in direzioni casuali e il resto va su un'altra superficie o all'occhio dell'utente. Questo processo continua fino a quando la luce non viene ridotta a nulla o un utente percepisce la luce.

Ovviamente, i calcoli necessari per simulare perfettamente il comportamento naturale della luce sono troppo lunghi da usare per la grafica Direct3D in tempo reale. Pertanto, tenendo presente la velocità, il modello di luce Direct3D approssima il modo in cui la luce funziona nel mondo naturale. Direct3D descrive la luce in termini di componenti rosso, verde e blu che si combinano per creare un colore finale.

In Direct3D, quando la luce si riflette su una superficie, il colore della luce interagisce matematicamente con la superficie stessa per creare il colore visualizzato alla fine sullo schermo. Per informazioni specifiche sugli algoritmi usati da Direct3D, vedere Matematica dell'illuminazione (Direct3D 9).For specific information about the algorithms Direct3D uses, see Maths of Lighting (Direct3D 9).

Il modello di luce Direct3D generalizza la luce in due tipi: luce ambientale e luce diretta. Ognuno ha attributi diversi e ognuno interagisce con il materiale di una superficie in modi diversi. La luce ambientale è la luce che è stata sparsa così tanto che la sua direzione e sorgente sono indeterminato: mantiene un basso livello di intensità ovunque. L'illuminazione indiretta utilizzata dai fotografi è un buon esempio di luce ambientale. La luce ambientale in Direct3D, come in natura, non ha direzione o fonte reale, solo un colore e un'intensità. Infatti, il livello di luce ambientale è completamente indipendente da qualsiasi oggetto in una scena che genera luce. La luce ambientale non contribuisce alla riflessione speculare.

La luce diretta è la luce generata da una sorgente all'interno di una scena; ha sempre colore e intensità, e viaggia in una direzione specificata. La luce diretta interagisce con il materiale di una superficie per creare evidenziazioni speculari e la sua direzione viene usata come fattore negli algoritmi di ombreggiatura, tra cui l'ombreggiatura gouraud. Quando la luce diretta viene riflessa, non contribuisce al livello di luce ambientale in una scena. Le sorgenti in una scena che generano luce diretta hanno caratteristiche diverse che influiscono sul modo in cui illuminano una scena.

Inoltre, il materiale di un poligono ha proprietà che influiscono sul modo in cui il poligono riflette la luce ricevuta. Si imposta un singolo tratto di riflessione che descrive il modo in cui il materiale riflette la luce ambientale e si impostano i singoli tratti per determinare la riflessione speculare e diffusa del materiale. Per altre informazioni, vedere Materiali (Direct3D 9).

Valori di colore per luci e materiali

Direct3D descrive il colore in termini di quattro componenti, rosso, verde, blu e alfa che combinano per creare un colore finale. La struttura D3DCOLORVALUE C++ è definita per contenere valori per ogni componente. Ogni membro è un valore a virgola mobile che in genere è compreso tra 0,0 e 1,0 inclusi. Anche se sia le luci che i materiali usano la stessa struttura per descrivere il colore, i valori nella struttura vengono usati in modo leggermente diverso da ognuno di essi.

I valori di colore per le sorgenti di luce rappresentano la quantità di un particolare componente di luce generato. Poiché le luci non usano un componente alfa, sono rilevanti solo i componenti rosso, verde e blu del colore. È possibile visualizzare i tre componenti come lenti rosse, verdi e blu su un televisore di proiezione. Ogni obiettivo potrebbe essere disattivato (un valore 0,0 nel membro appropriato), potrebbe essere il più luminoso possibile (un valore 1,0) o potrebbe essere un livello compreso tra. I colori che arrivano attraverso le lenti si combinano per rendere il colore finale della luce. Una combinazione come R(1.0), G(1.0), B(1.0) crea una luce bianca, dove R(0.0), G(0.0), B(0.0) non emette luce. È possibile fare una luce che emette un solo componente, con conseguente pura luce rossa, verde o blu; o, la luce potrebbe usare combinazioni per emettere colori come giallo o viola. È anche possibile impostare i valori dei componenti di colore negativi per creare una "luce scura" che rimuove effettivamente la luce da una scena. In alternativa, è possibile impostare i componenti su un valore maggiore di 1,0 per creare una luce estremamente luminosa.

Con i materiali, invece, i valori di colore rappresentano la quantità di un componente di luce riflessa da una superficie di cui viene eseguito il rendering con tale materiale. Materiale i cui componenti di colore sono R(1.0), G(1.0), B(1.0), A(1.0) riflette tutta la luce che arriva. Analogamente, un materiale con R(0.0), G(1.0), B(0.0), A(1.0) riflette tutta la luce verde diretta. I materiali hanno più valori di riflessione per creare vari tipi di effetti.

Altre informazioni sono contenute in: Tipi di luce (Direct3D 9) e Proprietà luce (Direct3D 9).

Per iniziare