光源概觀

使用 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) 的材質,則會反射朝向它照射的所有綠色光線。 材質具有多個反射值,可用來建立各種類型的效果。

詳情請參閱光線類型光線屬性

光線和材質