unity3d软阴影和硬阴影的原理_Unity3D中两种默认阴影的实现
生活随笔
收集整理的這篇文章主要介紹了
unity3d软阴影和硬阴影的原理_Unity3D中两种默认阴影的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Unity3D中兩種陰影的實現
傳統的ShadowMap
ShadowMap說起來十分簡單,把攝像機和光源的位置重疊,那么場景中該光源的陰影區域就是那些攝像機看不到的地方,主要應用在前向渲染路徑中。
具體實現分以下幾個步驟:
- 如果有平行光開啟了陰影,Unity就會為該光源計算它的ShadowMap(只會計算一個平行光),這張ShadowMap其實就是深度圖,記錄了從該光源的位置出發、能看到的場景中距離它最近的表面位置(深度信息)。
- Unity中實現了一個額外的Pass來專門更新光源的ShadowMap,這個Pass就是LightMode標簽被設置為ShadowCaster的Pass。
- 然后在正常渲染的Pass中把頂點位置變換到光源空間下,以得到它在光源空間中的三維位置信息。然后根據坐標信息對ShadowMap采樣,得到該點在ShadowMap中的深度信息。比較后,判斷該點是否應該在陰影中。
- 注意:利用Receive Shadows的開關可以控制物體是否顯示陰影,但是不影響渲染。而Cast Shadows的開關則控制該物體是否會加入到Shadowmap的渲染。
屏幕空間的陰影
延遲渲染中的光照計算絕大部分都是在屏幕空間里進行的,同樣也包括陰影。這種屏幕空間的陰影實現主要有這么幾個步驟:
延遲渲染中的光照計算絕大部分都是在屏幕空間里進行的,同樣也包括陰影。這種屏幕空間的陰影實現主要有這么幾個步驟:
Unity3D中開啟不同陰影的情況
截止到Unity 5.4,當項目工程的目標平臺是Mobile的時候,就不會使用屏幕空間的陰影映射技術,即使用原始的Shadows Map方法。在代碼里,Unity會定義內置宏UNITY_NO_SCREENSPACE_SHADOWS來控制。而當項目工程的目標平臺是支持屏幕空間陰影的話,例如PC, Mac & Linux Standalone平臺時,會開啟屏幕空間的陰影映射技術。
我們可以通過幀調試器(Frame Debugger)來分辨當前是否使用了屏幕空間的陰影映射技術:
整理自 《Unity Shader入門精要》
總結
以上是生活随笔為你收集整理的unity3d软阴影和硬阴影的原理_Unity3D中两种默认阴影的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: arraylist从大到小排序_程序猿面
- 下一篇: C++ 学习杂谈:sizeof和size