反射光線
反射光線會識別在光線照射物體表面並反射回相機時,所產生的明亮反射亮部。 反射光線的強度比擴散光線更高,且會在物件表面迅速銳減。 反射光線的計算時間比擴散光線更長,不過,使用反射光線的優勢,在於可為表面帶來大量的細節。
系統需要知道光線移動的方向,以及檢視者的雙眼朝向何處,才能為反射建立模型。 系統會使用 Phong 反射模型的簡化版本,該模型會採用半程向量來提供近似的反射強度。
預設光線狀態並不會計算反射亮部。
反射光線方程式
反射光線會透過下列方程式描述。
反射光線 = Cₛ * sum[Lₛ * (N · H)P * Atten * Spot]
變數、變數類型和變數範圍會如下所示:
參數 | 預設值 | 類型 | 描述 |
---|---|---|---|
Cₛ | (0,0,0,0) | 紅色、綠色、藍色和 Alpha 透明度 (浮點值) | 反射色彩。 |
sum | N/A | N/A | 每個光線的反射元件總和。 |
否 | N/A | 3D 向量 (x、y 和 z 浮點值) | 頂點法線。 |
H | N/A | 3D 向量 (x、y 和 z 浮點值) | 半程向量。 請參閱有關半程向量的小節。 |
P | 0.0 | 浮點 | 反射功率。 範圍為 0 到 + 無限大。 |
Lₛ | (0,0,0,0) | 紅色、綠色、藍色和 Alpha 透明度 (浮點值) | 光線反射色彩。 |
Atten | N/A | 浮點 | 光線的衰減值。 請參閱衰減和聚光光線係數。 |
Spot | N/A | 浮點 | 聚光光線係數。 請參閱衰減和聚光光線係數。 |
Cₛ 的值可以是:
- 頂點色彩 1,前提為反射材質來源為擴散頂點色彩,而且已在反射宣告中提供第一個頂點色彩。
- 頂點色彩 2,前提為反射材質來源為反射頂點色彩,而且已在頂點宣告中提供第二個頂點色彩。
- 材質反射色彩
注意:如果沒有提供所使用的反射材質來源選項和頂點色彩,就會使用材質反射色彩。
反射元件會在所有光線都已個別處理和插捕之後,限縮為介於 0 到 255 之間。
半程向量
半程向量 (H) 會存在於下列兩個向量中間:從物件頂點到光源的向量,以及從物件頂點到相機位置的向量。 Direct3D 會提供兩種方式來計算半程向量。 當相對於相機的反射亮部 (而非正交反射亮部) 已啟用時,系統會使用相機位置和頂點位置來計算半程向量和光線的方向向量。 這會如下列公式所示。
H = norm(norm(Cₚ - Vₚ) + Ldir)
參數 | 預設值 | 類型 | 描述 |
---|---|---|---|
Cₚ | N/A | 3D 向量 (x、y 和 z 浮點值) | 相機位置。 |
Vₚ | N/A | 3D 向量 (x、y 和 z 浮點值) | 頂點位置。 |
Ldir | N/A | 3D 向量 (x、y 和 z 浮點值) | 頂點位置到光線位置的方向向量。 |
透過這個方式判斷半程向量,可能需要進行大量的運算。 如需替代方案,可以使用正交反射亮部 (而非相對於相機的反射亮部) 來向系統發出指示,好讓其透過視角位於 z 軸上無限遠處的方式運作。 這可透過下列公式反映。
H = norm((0,0,1) + Ldir)
這個設定比較無需進行大量的運算,但精確度也較低,因此最適合使用正交投影的應用程式使用。
範例
在這個範例中,物件會使用場景的反射光線色彩和材質反射色彩來進行著色。
根據方程式,所產生的物件頂點色彩是由材質色彩和光線色彩組合而成。
下方兩張圖片顯示了反射材質色彩 (灰色) 和反射光線色彩 (白色)。
所產生的反射亮部會如下圖所示。
將反射亮部和環境與擴散光線加以結合,即可產生下圖。 套用上述三種光線類型時,就能更貼近實際物件。
反射光線所耗用的計算資源會高於擴散光源。 通常,他會用來提供與表面材質相關的視覺線索。 反射亮部的大小和色彩則會隨表面材質而異。
相關主題