當您使用 Direct3D 光源時,允許 Direct3D 為您處理照明的詳細數據。 進階使用者如有需要可以自行進行燈光調整。
啟用光源時,Direct3D 會根據下列組合計算每個物件頂點的色彩:
- 相關聯紋理地圖中的紋素。
- 頂點的擴散色彩和反射色彩,如果有指定的話。
- 場景中光源或場景環境光線等級所產生的光線色彩和強度。
您如何使用光源和材質,在呈現的場景外觀上有很大的差異。 材質會定義光線如何從表面反射。 直接光線和環境光線等級會定義反射的光線。 如果已啟用光源,您必須使用材質來渲染場景。
不需要光線來渲染場景,但沒有光線時渲染的場景中細節不可見。 在最佳情況下,渲染一個未點亮的場景會使場景中的物件呈現剪影。 對於大部分用途而言,這還不夠詳細。
直接光線與環境光線
雖然直接和環境光線都會照亮場景中的物件,但它們彼此獨立,但效果非常不同,而且它們要求您以完全不同的方式與他們合作。
直接光線 直接擊中物件。 直接光線一律具有方向和色彩,而且它是陰影演算法的一個因素,例如 Gouraud 陰影。 不同類型的燈光會以不同方式發出直接光線,產生特殊的衰減效果。
環境光線 實際上在場景中無處不在。 環境光線是填滿整個場景的一般光線層級,不論物件及其在該場景中的位置為何。 環境光線沒有位置或方向,只有色彩和強度。 每個光線都會增添場景中的總體環境光線。
環境光線色彩採用 RGBA 值的形式,其中每個元件都是從 0 到 255 的整數值。 這與 Direct3D 中的大多數色彩值不同。
紅色、綠色和藍色成分結合,形成環境光的最終色彩。 Alpha 元件會控制色彩的透明度。 使用硬體加速或 RGB 模擬時,會忽略 Alpha 元件。
Direct3D 光模型與自然
自然界中,當光線從來源發出時,它會經由數百個,甚至數千或數百萬個物體反射,然後才到達使用者的眼睛。 每次反射時,一些光線被表面吸收,有的分散在隨機方向,其餘部分則移至另一個表面或使用者的眼睛。 此過程會持續進行,直到光線減少至無,或使用者感覺到光線為止。
顯然,完美模擬光線自然行為所需的計算太耗時,無法用於即時 Direct3D 圖形。 因此,考慮到速度,Direct3D 光模型會近似自然世界中光線的運作方式。 Direct3D 使用紅色、綠色和藍色元件來描述光,它們結合起來形成最終的色彩。
在 Direct3D 中,當光線從表面反射時,光的顏色會以數學方式與表面本身互動,來產生最終顯示在螢幕上的色彩。 如需 Direct3D 使用演算法的特定資訊,請參閱 光源數學。
Direct3D 光線模型會將光線一般化為兩種類型:環境光線和直接光線。 每個都有不同的屬性,而且每個屬性都會以不同的方式與表面材質互動。 環境光線是分散的光線,以至於其方向和來源不確定:它在任何地方保持低濃度。 攝影師使用的間接光源是環境光線的良好範例。
Direct3D 中的環境光線與自然一樣,沒有真正的方向或來源,只有色彩和強度。 事實上,環境光線等級完全獨立於產生光線的場景中的任何物件。 環境光線不會對鏡面反射產生影響。
直接光線是場景中來源所產生的光線;它一律具有色彩和強度,而且會以指定的方向移動。 直接光線會與表面材質互動,以形成鏡面高光,其方向被用作著色算法的一個因素,包括 Gouraud 著色。 當直接光線反射時,它不會對場景中的環境光線水準造成貢獻。 產生直接光線的場景中的來源具有不同特性,會影響其照亮場景的方式。
此外,多邊形材質的屬性會影響該多邊形如何反映其接收的光線。 您可以設定單一反射特徵,描述材質如何反映環境光線,並設定個別特徵來判斷材質的反射和擴散反射。
光源和材質的色彩值
Direct3D 以四個成分(紅、綠、藍和 Alpha)來描述色彩,這些成分結合成最終色彩。 每個元件的範圍從 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) 的材料反射了所有照射到它的綠光。 材質有多個反射值,可建立各種類型的效果。
相關主題