光源數學(Direct3D 9)
Direct3D 光模型涵蓋環境、擴散、反射和反射光源。 這有足夠的彈性來解決各種光源情況。 您會將場景中的光線總量視為全域照明,並使用下列方程式加以計算。
Global Illumination = Ambient Light + Diffuse Light + Specular Light + Emissive Light
環境光源 (Direct3D 9) 是固定光源。 它是所有方向的常數,而且會為物件的所有圖元著色相同。 計算速度很快,但讓物件看起來平淡而不切實際。 若要查看 Direct3D 如何計算環境光源,請參閱環境光源(Direct3D 9)。
擴散光源 (Direct3D 9) 取決於光線方向和物件表面正常。 由於光線方向和表面法向量的變化,物件表面的特性會有所不同。 計算擴散光源需要較長的時間,因為它會變更每個物件頂點,但使用它的好處是,它會遮蔽物件,並提供三維(3D)深度。 若要查看 Direct3D 中擴散光源的計算方式,請參閱擴散光源(Direct3D 9)。
反射光源(Direct3D 9) 識別光線擊中物件表面並反射回相機時所發生的明亮的反射亮點。 它比擴散光更強烈,在物件表面更快速地掉落。 計算反射光源的時間比擴散光源要長,但使用反射光源的好處是,它會增加表面的顯著細節。 若要查看 Direct3D 中如何計算反射光源,請參閱反射光源(Direct3D 9)。
Emissive Light (Direct3D 9) 是由對象發出的光線:例如,光暈。 若要查看 Direct3D 中如何計算 Emissive 光源,請參閱 Emissive 光源 (Direct3D 9)。
將每種類型的光源套用至 3D 場景,即可完成逼真的光源。 針對環境、輻射和擴散元件所計算的值會輸出為擴散頂點色彩:反射光源元件的值會輸出為反射頂點色彩。 環境、擴散和反射光線值可能會受到指定光線衰減和聚光燈因數的影響。 如需衰減運作方式的詳細資訊,請參閱 衰減和聚光燈因數 (Direct3D 9)。
若要達到更逼真的光源效果,您可以新增更多燈光:不過,場景需要較長的時間才能轉譯。 為了實現設計師想達到的所有效果,某些遊戲使用的處理器資源超過了一般的使用範圍。 在這種情況下,通常會透過使用光源地圖和環境地圖來將光源加入場景,並在使用紋理地圖的同時,將光源計算減少到最少。
光源會在相機空間中計算。 若要檢視光源轉換的計算方式,請參閱 相機空間轉換 (Direct3D 9)。 優化光源可以在模型空間中計算,當特殊條件存在時:正常向量已經正規化(D3DRS_NORMALIZENORMALS為 True),不需要頂點混合、轉換矩陣為正交等。
相關主題