淺色類型 (Direct3D 9)
淺色類型屬性會定義您使用的光源類型。 光線類型是使用光線 D3DLIGHT9 結構之 Type 成員中 D3DLIGHTTYPE C++列舉的值來設定。 Direct3D 中有三種類型的燈光 - 點燈、聚光燈和方向燈。 每個類型都會以不同的方式照亮場景中的物件,並有不同的計算負荷層級。
點光
點燈在場景中具有色彩和位置,但沒有單一方向。 它們以同樣的方式向所有方向發出光線,如下圖所示。
點光圖例
燈泡是點燈的良好範例。 點燈會受到衰減和範圍的影響,並以頂點為基礎照亮網格。 在光源期間,Direct3D 會使用點光在世界空間中的位置,以及要點亮的頂點座標來衍生光線方向的向量,以及光線移動的距離。 兩者都會與頂點常態一起使用,以計算光線對表面照明的貢獻。
方向光線
方向燈只有色彩和方向,而不是位置。 它們會發出平行光線。 這表示方向燈所產生的所有光線都會以相同方向穿過場景。 想像一下方向光線作為接近無限距離的光源,例如太陽。 方向燈不會受到衰減或範圍的影響,因此您指定的方向和色彩是 Direct3D 計算頂點色彩時唯一考慮的因素。 由於照明因素很少,因此這些是最少的計算密集型燈光使用。
聚光燈
聚光燈具有發出光線的色彩、位置和方向。 從聚光燈發出的光線是由明亮的內錐和較大的外錐體所組成,兩者之間的光線強度會降低,如下圖所示。
具有內部圓錐和外圓錐的聚光燈
聚光燈會受到下降、衰減和範圍的影響。 當計算場景中物件的光源效果時,這些因素以及光線會移動至每個頂點的距離。 計算每個頂點的這些效果,讓聚光燈成為 Direct3D 中所有光線最耗時的焦點。
D3DLIGHT9 C++結構包含三個成員,這些成員僅供焦點使用。 這些成員 -Falloff、Theta 和 Phi - 控制聚光燈對象的內部和外部圓錐體的大小或小,以及它們之間的光線如何減少。
Theta 值是聚光燈內部圓錐的弧度角度,而 Phi 值則是光線外錐的角度。 Falloff 值會控制光線強度在內部圓錐的外邊緣與外圓錐內部邊緣之間的下降方式。 大部分的應用程式會將 Falloff 設定為 1.0,以建立兩個圓錐之間平均發生的遞補,但您可以視需要設定其他值。
下圖顯示這些成員值之間的關聯性,以及它們如何影響聚光燈的內部和外錐體。
聚光燈會發出有兩個部分的光錐:明亮的內錐和外錐體。 光線在內部錐體中最亮,且不在外錐體外,兩個區域之間的光線強度衰減。 這種類型的衰減通常稱為下降。
頂點接收的光線量是以頂點在內部或外錐體中的位置為基礎。 Direct3D 會計算聚光燈方向向量 (L) 的點乘積,以及從光線到頂點的向量(D)。 這個值等於兩個向量之間角度的餘弦值,並做為頂點位置的指標,可以與光線的圓錐角度進行比較,以判斷頂點可能位於內部或外錐體的位置。 下圖提供這兩個向量之間的關聯圖形表示法。
系統會比較這個值與聚光燈內側和外圓錐角度的餘弦值。 在光線的 D3DLIGHT9 結構中,Theta 和 Phi 成員代表內部和外部圓錐的總圓錐角度。 由於衰減發生在頂點離照明中心更遠(而不是橫跨總圓錐角度)時,運行時間會在計算餘弦之前將這些圓錐角度除以一半。
如果向量 L 和 D 的點乘積小於或等於外圓錐角的餘弦值,則頂點位於外錐體之外,而且不會收到光線。 如果 L 和 D 的點乘積大於內部圓錐角的餘弦值,則頂點位於內部錐體內並接收最大光線量,但仍考慮在距離上衰減。 如果頂點位於兩個區域之間的某個位置,則會使用下列方程序計算掉落。
頂點光線強度的
哪裡:
- 我 f 是下降后光線強度
- Alpha 是向量 L 與 D 之間的角度
- Theta 是內部圓錐角度
- Phi 是外錐角
- p 是倒退
此公式會產生介於0.0和1.0之間的值,以調整頂點的光線強度以考慮下降。 也會套用頂點距離光線的係數衰減。 下圖顯示不同的下降值如何影響下降曲線。
的頂點距離
各種落差值對實際光源的影響是微妙的,而利用1.0以外的落差值來塑造下降曲線,會產生較小的效能懲罰。 基於這些原因,此值通常會設定為1.0。
相關主題