共用方式為


擴散光線

擴散光源需視光線方向和物件表面法線而定。 只要變更光線方向和曲面法向量,物件表面的擴散光源就會有所變化。 擴散光源需要較長的計算時間,原因在於,它會隨著每個物件頂點改變,不過,使用擴散光源的優勢之一,就是它能為物件著色,並賦予其三維 (3D) 深度。

調整任何衰減效果的光線強度後,光線引擎就會計算在指定的頂點法線角度和事件光線方向下,要從頂點反射多少剩餘的光線。 針對定向光線,光線引擎會跳過這個步驟,因為定向光線不會隨著距離衰減。 系統會考慮擴散和反射這兩個反射類型,並使用不同的公式來判斷每個類型要反射多少光線。

計算得出反射的光線量後,Direct3D 就會將這些新的值套用至目前材質的擴散和反射屬性上。 所產生的色彩值,就是轉譯器用來產生 Gouraud 著色和反射亮部的擴散與反射元件。

擴散光源會透過下列方程式描述。

擴散光源 = sum[Cd*Ld*(N.Ldir)*Atten*Spot]

參數 預設值 類型 描述
sum N/A N/A 每個光線的擴散元件總和。
Cd (0,0,0,0) D3DCOLORVALUE 擴散色彩。
Ld (0,0,0,0) D3DCOLORVALUE 光線擴散色彩。
N/A D3DVECTOR 頂點法線
Ldir N/A D3DVECTOR 物件頂點到光線的方向向量。
Atten N/A FLOAT 光線衰減。 請參閱衰減和聚光光線係數
Spot N/A FLOAT 聚光光線係數。 請參閱衰減和聚光光線係數

 

若要計算衰減 (Atten) 或聚光光線特性 (Spot),請參閱衰減和聚光光線係數

擴散元件會在所有光線都已個別處理和插捕之後,限縮為介於 0 到 255 之間。 所產生的擴散光源值是由環境、擴散和放射光線值組合而成。

範例

在這個範例中,物件會使用光線擴散色彩和材質擴散色彩來上色。

根據方程式,所產生的物件頂點色彩是由材質色彩和光線色彩組合而成。

下方兩張圖片顯示了材質色彩 (灰色) 和光線色彩 (亮紅色)。

灰色球體圖例紅色球體圖例

產生的場景會如下圖所示。 場景中的唯一一個物件為球體。 擴散光源計算會取得材質和光線擴散色彩,並使用內積,依照光線方向和頂點法線之間的角度來加以修改。 因此,球體背面隨著表面朝光線的反方向延伸而變暗。

具有擴散光源的球體圖例

將擴散光源和上一個範例中的環境光線予以結合,就能為物件的整個表面著色。 環境光線會為整個表面著色,而擴散光源則有助於顯示物件的 3D 形狀,如下圖所示。

具有擴散光源和環境光源的球體圖例

擴散光源所耗用的計算資源會高於環境光線。 由於它取決於頂點法線和光線方向,因此,您可以看到 3D 空間中的物件幾何,而這能產生比環境光線更逼真的光線。 您可以使用反射亮部來營造更栩栩如生的外觀。

光線數學