共用方式為


反射光線

反射光線會識別在光線照射物體表面並反射回相機時,所產生的明亮反射亮部。 反射光線的強度比擴散光線更高,且會在物件表面迅速銳減。 反射光線的計算時間比擴散光線更長,不過,使用反射光線的優勢,在於可為表面帶來大量的細節。

系統需要知道光線移動的方向,以及檢視者的雙眼朝向何處,才能為反射建立模型。 系統會使用 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)

這個設定比較無需進行大量的運算,但精確度也較低,因此最適合使用正交投影的應用程式使用。

範例

在這個範例中,物件會使用場景的反射光線色彩和材質反射色彩來進行著色。

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

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

灰色球體圖例白色球體圖例

所產生的反射亮部會如下圖所示。

反射醒目提示的圖例

將反射亮部和環境與擴散光線加以結合,即可產生下圖。 套用上述三種光線類型時,就能更貼近實際物件。

結合反射醒目提示、環境光源和擴散光源的圖例

反射光線所耗用的計算資源會高於擴散光源。 通常,他會用來提供與表面材質相關的視覺線索。 反射亮部的大小和色彩則會隨表面材質而異。

光線數學