<aside> 💡 在1.20版本之前,要讓使用其他非ASP Shader的材質接收人物陰影(即採樣ASP shadow map)的方式,只能透過手動修改各別shader內的程式碼來達成,詳見本頁第2點。 從1.20版開始,ASP shadow map renderer feature中提供了Screen Space Shadow的選項,這一個功能可以一鍵達成讓人物陰影顯示在其他材質上,且完全避免人物的自陰影,對於無法手動修改shader code的人來說是較為便利的選項。
</aside>
上圖為一個沒有正確顯示人物陰影(應採樣自ASP Shadow Map)的範例。
原因是人物下方的Terrain材質使用的Shader - Terrain/Lit本身並沒有去採樣ASP Shadow Map,我們可以使用下方的方法1或者方法2來使人物陰影顯示出來。
將當前的Universal Renderer Data中內的 - ASP ShadowMap feature下,將Use Screen Space Shadow Pass設為true。
ASP的Screen Space Shadow會在Opaque物件渲染完畢之後,透過深度緩衝重建世界座標,以此世界座標來採樣asp shadow map,同時利用material ID(在此時Material pass也已經渲染完畢)來替除掉人物自身的自陰影。
透過Screen Space Shadow Color參數也能夠調整陰影的顏色與透明度。
<aside> 💡 使用screen space shadow的好處是完全不需要手動修改其他shader,但缺點是顏色與跟其他PBR材質的陰影會有差異,原因是渲染screen space shadow到場景上時,並沒有當前其他材質的surface資訊,單純的是使用透明度混和。 不過這對高度風格化的動漫風格遊戲來說大多是可以接受的。
</aside>
請確保Hidden/ASP/ScreenSpaceShadows 有在 ProjectSettings中的Always Included Shaders內. 不然screen space shadow的shader並不會一併打包進專案的執行檔中。
如果你有手動在編輯器中開啟過ASP shadow map renderer feature(1.20版之後),這個shader會自動加入Always Included Shaders的清單內。