光線的數學

Direct3D 光線模型涵蓋環境光線、擴散方縣、反射光線和放射光線。 這可提供足夠的彈性來解決各種光線情況。 場景中的光線總量又稱為全域照明

全域照明的計算方式如下:

global_illumination = ambient_lighting + diffuse_lighting + specular_lighting + emissive_lighting;

環境光線為固定的光線。 環境光線在所有方向皆為固定,而且會使用相同的色彩為物件的所有像素著色。 環境光線計算起來相當快,卻會讓物件看起來平板且不真實。

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

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

放射光線為物件發出的光線,例如光暈。 放射會讓轉譯物件看起來像自行發光。 放射會影響物件的色彩,例如讓暗色材質變亮,並成為所發出色彩的一部分。

只要將這些類型的光線套用至 3D 場景中,即可營造栩栩如生的光線。 環境、放射和擴散元件計算得出的值會輸出為擴散頂點色彩;反射光線元件的值則會輸出為反射頂點色彩。 環境、擴散和反射光線值可能會受指定的光線衰減和聚光光線係數影響。 請參閱衰減和聚光光線係數

您可以新增更多光線,以營造更加栩栩如生的光線效果;但這樣一來,場景可能需要花費更長的時間轉譯。 為了營造設計人員想要的所有效果,有些遊戲使用的 CPU 效能會比一般遊戲更高。 這類型的情況經常會使用光線對應和環境對應將光線新增至場景,同時使用紋理對應,以盡可能減少光線計算的數量。

光線會在相機空間中計算。 詳情請參閱相機空間轉換。 如果存在特殊條件,則可在模型空間中計算出最佳化的光線:法向量已正規化、不需進行頂點混合,而且轉換矩陣為正交。

所有光線計算都會在模型空間中進行,並使用世界矩陣反轉,將光源位置和方向及相機位置轉換至模型空間。 因此,如果世界或檢視矩陣導入非統一的縮放,所產生的光線可能會不準確。

本節內容

主題 說明

環境光線

環境光線會為場景提供固定的光線。 由於環境光線與其他任何光線係數 (頂點法線、光線方向、光線位置、範圍和衰減) 無關,因此,它會以相同的方式照亮所有物件。 環境光線在所有方向皆為固定,而且會使用相同的色彩為物件的所有像素著色。 環境光線計算起來相當快,卻會讓物件看起來平板且不真實。

擴散光線

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

反射光線

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

放射光線

放射光線為物件發出的光線,例如光暈。 放射會讓轉譯物件看起來像自行發光。 放射會影響物件的色彩,例如讓暗色材質變亮,並成為所發出色彩的一部分。

相機空間轉換

相機空間中的頂點,會透過使用世界檢視矩陣轉換物件矩陣的方式來計算。

衰減和聚光光線係數

全域照明方程式的擴散和反射光線元件會包含用來描述光線衰減和聚光燈圓錐的詞彙。

 

光線和材質