日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

unity3d软阴影和硬阴影的原理_Unity3D中两种默认阴影的实现

發布時間:2023/12/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity3d软阴影和硬阴影的原理_Unity3D中两种默认阴影的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Unity3D中兩種陰影的實現

傳統的ShadowMap

ShadowMap說起來十分簡單,把攝像機和光源的位置重疊,那么場景中該光源的陰影區域就是那些攝像機看不到的地方,主要應用在前向渲染路徑中。

具體實現分以下幾個步驟:

  • 如果有平行光開啟了陰影,Unity就會為該光源計算它的ShadowMap(只會計算一個平行光),這張ShadowMap其實就是深度圖,記錄了從該光源的位置出發、能看到的場景中距離它最近的表面位置(深度信息)。
  • Unity中實現了一個額外的Pass來專門更新光源的ShadowMap,這個Pass就是LightMode標簽被設置為ShadowCaster的Pass。
  • 然后在正常渲染的Pass中把頂點位置變換到光源空間下,以得到它在光源空間中的三維位置信息。然后根據坐標信息對ShadowMap采樣,得到該點在ShadowMap中的深度信息。比較后,判斷該點是否應該在陰影中。
  • 注意:利用Receive Shadows的開關可以控制物體是否顯示陰影,但是不影響渲染。而Cast Shadows的開關則控制該物體是否會加入到Shadowmap的渲染。

屏幕空間的陰影

延遲渲染中的光照計算絕大部分都是在屏幕空間里進行的,同樣也包括陰影。這種屏幕空間的陰影實現主要有這么幾個步驟:

延遲渲染中的光照計算絕大部分都是在屏幕空間里進行的,同樣也包括陰影。這種屏幕空間的陰影實現主要有這么幾個步驟:

  • 首先得到從當前攝像機處觀察到的深度紋理。在延遲渲染里這張深度圖本來就有,如果是前向渲染的話就需要把場景整個渲染一遍,把深度渲染到深度圖中。
  • 然后再從光源出發得到從該光源處觀察到的深度紋理,也被稱為這個光源的ShadowMap。
  • 然后在屏幕空間做一次陰影收集計算(Shadows Collector),這次計算會得到一張屏幕空間陰影紋理,也就是說這張圖里面需要有陰影的部分已經顯示在圖上了。這個過程概括來說就是把每一個像素根據它在攝像機深度紋理中的深度值得到世界空間坐標,再把它的坐標從世界空間轉換到光源空間中,和光源的ShadowMap里面的深度值對比,如果大于ShadowMap中的深度距離,那么就說明光源無法照到,在陰影內。
  • 最后,在正常渲染物體為它計算陰影的時候,只需要按照當前處理的fragment在屏幕空間中的位置對步驟3得到的屏幕空間陰影圖采樣就可以了。
  • Unity3D中開啟不同陰影的情況

    截止到Unity 5.4,當項目工程的目標平臺是Mobile的時候,就不會使用屏幕空間的陰影映射技術,即使用原始的Shadows Map方法。在代碼里,Unity會定義內置宏UNITY_NO_SCREENSPACE_SHADOWS來控制。而當項目工程的目標平臺是支持屏幕空間陰影的話,例如PC, Mac & Linux Standalone平臺時,會開啟屏幕空間的陰影映射技術。

    我們可以通過幀調試器(Frame Debugger)來分辨當前是否使用了屏幕空間的陰影映射技術:

    整理自 《Unity Shader入門精要》

    總結

    以上是生活随笔為你收集整理的unity3d软阴影和硬阴影的原理_Unity3D中两种默认阴影的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。