共用方式為


光線類型

光線類型屬性會定義您正在使用的光源類型。 Direct3D 提供三種類型的光線:點光線、聚光光線和定向光線。 每個類型都會透過不同的方式照亮場景中的物件,並具備不同層級的計算負荷。

點光線

點光線會在場景中具有色彩和位置,但沒有單一方向。 它們會朝所有方向平均發出光線,如下圖所示。

點光圖例

燈泡為相當合適的點光線範例。 點光線會受衰減和範圍影響,而且會以頂點為單位來照亮網格。 在發出光線期間,Direct3D 會使用點光線在世界空間中的位置和所照亮的頂點座標,以衍生光線的方向向量,以及光線的移動距離。 兩者都會搭配頂點法線一起使用,以計算光線對表面照明的影響。

定向光線

定向光線只有色彩和方向,且沒有位置。 它們會發出平行光線。 這表示,定向光線產生的所有光線都會朝著相同方向穿越場景。 定向光線可以想像成位於無限距離之外的光源,例如太陽光。 定向光線不會受衰減或範圍影響,因此,由您指定的方向和色彩,皆為 Direct3D 計算頂點色彩時的唯一考量因素。 由於照明係數並不多,定向光線為使用上最不需進行密集計算的光線。

聚光光線

聚光光線具有色彩、位置和發出光線的方向。 聚光光線發出的光線是由明亮的內圓錐和較大的外圓錐所組成,而光線強度會在兩者之間減弱,如下圖所示。

具有內部圓錐和外錐的聚光燈圖例

聚光光線會受光衰、衰減和範圍影響。 為場景中的物件計算光線效果時,會將上述因素和光線移動至每個頂點的距離納入考量。 由於需要為每個頂點計算這些效果,因此,聚光光線為 Direct3D 中最需花時間計算的光線。

只有聚光光線會使用 Falloff、Theta 和 Phi 等值。 這些值會控制聚光光線物件內外圓錐的大小,以及光線如何在兩者之間減弱。 

Theta 為聚光光線內圓錐的弧度,而 Phi 值則為光線外圓錐的角度。 Falloff 會控制在外圓錐外側邊緣和內圓錐內側邊緣之間的光線強度會如何減弱。 多數應用程式會將 Falloff 設為 1.0,以便在兩個圓錐之間平均光衰,不過,您可以視需要而定,將其設為其他值。

下圖顯示了這些值之間的關係,以及它們如何影響聚光光線內外圓錐的光線。

phi 和 theta 值與聚光燈錐體關聯方式的圖例

聚光光線所發出圓錐型光線會包含兩個部分:明亮的內圓錐和外圓錐。 光線於內圓錐中最亮,且不會出現於外圓錐中,而光線強度則會在兩者之間衰減。 這類型的衰減通常會稱為「光衰」。

頂點收到的光線量,會以頂點在內圓錐或外圓錐中的位置為基礎。 Direct3D 會計算聚光光線方向向量的內積 (L),以及從光線到頂點的向量 (D)。 這個值會等於兩個向量之間的角度之餘弦值,且會做為頂點位置的指標,可與光線的圓錐角度進行比較,以判斷頂點位於內外圓錐中的何處。 下圖會透過圖形方式呈現這兩個向量之間的關聯性。

焦點方向向量的圖例,以及從頂點到聚光燈的向量

系統會比較這個值和聚光光線內外圓錐角度的餘弦值。 光線的 Theta 和 Phi 值代表內外圓錐的整體圓錐角度。 由於隨著頂點遠離照明中心 (而非跨越整個圓錐角度),光線將發生衰減,執行階段會先將這些圓錐角度除以二,再計算其餘弦值。

如果向量 L 和 D 的內積小於或等於外圓錐角度的餘弦值,則表示頂點位於外圓錐之外,且不會照射到任何光線。 如果向量 L 和 D 的內積大於外圓錐角度的餘弦值,則表示頂點位於外圓錐之內,且會照射到最大光線量,但仍需考慮距離所造成的衰減。 如果頂點位於兩個區域之間的任一處,則光衰會使用下列方程式計算。

頂點光線強度的公式,在掉落後

其中:

  • If 為光衰後的光線強度
  • Alpha 為向量 L 和 D 之間的角度
  • Theta 為內圓錐角度
  • Phi 為外圓錐角度
  • p 為光衰

這個公式會產生介於 0.0 到 1.0 之間的值,該值會調整頂點的光線強度,以反映光衰。 另外也會套用衰減,以做為頂點與光線的距離係數。 下圖顯示了光衰值如何影響光衰曲線。

光線強度與與光線頂點距離的圖表

實際光線的各種光衰值效果往往相當細微,而使用 1.0 以外的光衰值來形塑光衰曲線,則只會造成些許負面影響。 基於上述原因,這個值通常會設為 1.0。

光線和材質