共用方式為


Direct3D 9 (光源和材質)

光線可用於照亮場景中的物件。 啟用光源時,Direct3D 會根據下列組合計算每個物件頂點的色彩:

注意

本節僅適用于固定函式管線。 可程式著色器明確執行所有照明。

 

  • 相關聯紋理貼圖中的目前材質色彩和紋素。
  • 若有指定,為頂點的擴散和反射色彩。
  • 色彩和光線強度由場景光源或場景環境光線層級製造。

當您使用 Direct3D 光源和材質時,您可以讓 Direct3D 為您處理照明的詳細資料。 如有需要,進階使用者可以自行執行照明。

您如何使用照明和材質,會使可呈現的場景外觀大不相同。 材質決定光線對表面的反映。 直接光線和環境光線層級定義反映的光線。 如果已啟用照明,您必須使用材料來呈現場景。 不需要用光線呈現場景,但沒有光線呈現的場景細節是無法顯現的。 呈現無光的場景,充其量會使場景中的物件產生剪影。 對大部分的用途而言,這仍不夠詳細。

直接光線與環境光線

雖然直接和環境光線會使場景中的物件亮起來,它們彼此之間各不相干,而且使用的是非常不同的效果,所以您最好以完全不同的方式來使用。

直接光線只是:直接。 直接光線一定有方向和顏色,它是陰影演算法的係數,例如 Gouraud Shading。 不同類型的光線以不同方式發出直光,以建立特殊衰減效果。 您可以呼叫 IDirect3DDevice9::SetLight 方法,為直接光線建立一組光線參數。

環境光線對場景各處都能有有效作用。 您可以將它視為填滿整個場景的一般光線層級,不論物件及其在該場景中的位置為何。 環境光線沒有位置或方向,只有色彩和強度。 每個光線加入場景中的整體環境光線。 使用 呼叫 IDirect3DDevice9::SetRenderState 方法設定環境光線等級,將D3DRS_AMBIENT指定為 State 參數,並將所需的 RGBA 色彩指定為 Value 參數。

環境光線的形式為 RGBA 值,其中每個元件是 0 至 255 的整數值。 這與 Direct3D 中大多數色彩值不相同。

您可以使用 D3DCOLOR_RGBA 宏來產生 RGBA 值。 紅色、綠色及藍色元件組合成最終環境光線的色彩。 Alpha 元件控制色彩的透明度。 使用硬體加速或 RGB 模擬時,會忽略 alpha 元件。

Direct3D 淺色模型與本質

在自然界,當從來源發光時,就算沒有數千或數百萬計的物件,在到達使用者的眼睛前,也會有數百種反映。 每次反映時,有些光會被表面吸收,有些隨機分散,而其餘部分不是移至另一個表面,就是移至使用者的眼睛。 這個程序會繼續,直到光線縮小變沒有,或使用者感受到光線。

很明顯的,需要經過計算才能完美模擬光線的行為,用於即時 Direct3D 圖形太耗時。 因此,記住速度的同時,Direct3D 光線模型近似光線在自然界運作的方式。 Direct3D 描述光線的紅色、綠色及藍色元件結合並建立最後色彩。

在 Direct3D 中,當光線反映表面,淺色與表面以數學方式互動,終而建立最後顯示在螢幕上的色彩。 如需 Direct3D 使用演算法的特定資訊,請參閱 光源 (Direct3D 9 的數學)

Direct3D 光線模型可以將光線概括成兩種類型︰ 環境光線和直接光線。 每一個都有不同屬性,而每一個會用不同的方式與表面材質互動。 環境光線是已經分散到方向和來源都變得不確定的光線︰ 它在各處會維持低強度。 攝影師間接使用的照明是使用環境光線的範例。 Direct3D 的環境光線如自然界光線一樣沒有真實方向或來源,只有色彩和強度。 事實上,環境光線等級與產生光線之場景中任何物件完全無關。 環境光線不會有反射反映。

直接光線是由場景內的來源產生的,永遠具有色彩和強度,並以指定方向行進。 直接光線與表面材質互動來建立反射高光,而其方向在陰影運算中被當成係數來使用,包括 Gouraud shading。 當反映直接光線時,並不會作用成場景中的環境光線等級。 場景中產生直接光線的來源具備不同特性,影響他們照亮場景的方式。

除此之外,多邊形的材質具有會影響多邊形如何反映接收到的光線的屬性。 您設定單一反射率特徵,其描述材質如何反映環境光線,而您設定個別特徵來判斷材質的反射和擴散反射率。 如需詳細資訊,請參閱 Direct3D 9 (材質)

光源和材質的色彩值

Direct3D 會以四個元件-紅色、綠色、藍色和 Alpha 結合來建立最終色彩來描述色彩。 D3DCOLORVALUE C++ 結構會定義為包含每個元件的值。 每個成員都是浮點數,通常範圍從 0.0 到 1.0,包含。 雖然光線和材質都使用相同的結構來描述色彩,但結構中的值會以稍微不同的方式使用。

光源的色彩值表示其發出的特定光線元件量。 由於光線不使用 alpha 元件,只有紅色、綠色和藍色的色彩元件相關。 您可以在投影電視上視覺化三個元件,分別為紅色、綠色和藍色濾鏡。 每個濾鏡可能會關閉 (適當成員的 0.0 值),可能會非常亮 (1.0 值),或介於之間。 透過濾鏡將色彩結合成光線的最終色彩。 R(1.0)、G(1.0)、 B(1.0) 組合成白光,R(0.0)、G(0.0)、B(0.0) 完全無法發光。 您可以發出只有一個元件的光線,例如產生純紅色、綠色或藍色光;光線無法使用組合來發出像黃色或紫色的色彩。 您甚至可以設定負片色彩元件值,建立「深色光」,實際上是將場景的光線移除。 或者,您可能設定元件的值大於 1.0 以建立非常亮的光。

另一方面,在使用材質時,色彩值代表使用該材質的表面反映出多少光線元件。 色彩元件為 R(1.0)、G(1.0)、B(1.0) 和 A(1.0) 的材質,反映了所有的光線。 同樣地,R(0.0)、G(1.0)、B(0.0)、A(1.0) 反映出所有照射而來的綠光。 材質有多個反射值,可建立各種效果。

其他資訊包含在: Light Types (Direct3D 9) Light Properties (Direct3D 9)

快速入門