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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

unity 半透明混合问题_Unity 实时 半透明 阴影 shader

發布時間:2023/12/1 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unity 半透明混合问题_Unity 实时 半透明 阴影 shader 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單陰影制作思路:

1:在角色腳底 放置一塊平板

2:shader中 根據平板傳入的矩陣 以及 光照 對角色進行變換

3: 得到投影在地面上的陰影

4:陰影直接渲染到 屏幕上

缺點:

上面的陰影無法 增加半透明陰影效果,因為如果直接設置渲染陰影的 pass 為半透明,就會導致陰影不同面片的陰影 之間重疊的部分顏色加深,導致半透明陰影顏色不均勻。

因此采用另一種思路,將陰影作為獨立的渲染層, 增加一個相機只用于渲染玩家陰影,使用

Camera.RenderWithShader 接口來渲染,

將陰影渲染到一個 RenderTexture 上面,

接著在主鏡頭的 OnRenderImage 接口中,將渲染的陰影 renderTexture 和 主鏡頭渲染的正常場景進行alpha混合。

上面混合主要問題是 如何處理 陰影 renderTexture和 主鏡頭渲染對象的 深度問題,防止陰影遮擋住其它對象。

Unity中可以設置鏡頭 Camera.depth 深度模式為 depth,我們設置主鏡頭深度模式depth,這樣主鏡頭就會產生一個 depthTexture;

這個depthTexture 在shader里面可以通過 _CameraDepthTexture 來訪問;

接著我們在陰影渲染shader里面,通過這個_CameraDepthTexture 得到陰影所在位置的深度信息,如果比陰影靠近鏡頭,我們就將陰影裁減掉。

這樣陰影就不會遮擋住其它對象了。

但是再人物腳底可能會因為存在浮點數誤差,導致的一些問題,可以在人物腳底增加黑色圓圈,來彌補這個缺陷。

shader中從_CameraDepthTexture 中獲得深度信息的核心代碼是:

vert(){

v.pos = mul(MVP, vertex);

v.screen = CameraScreenPos(v.pos);

EyeLinear(v.screen.z);

v.uv = v.pos.xy;

}

frag() {

d = SAMPLE_DEPTH_PROJ(_CameraDepthTexture, v.uv);

EyeLinear(d);

clip(d, v.screen, 1e-2f)

}

參考 Unity Image Effect 代碼中的:

MotionBlurClear.shader

需要注意問題:

深度計算需要根據根據 投影的平面陰影來計算 不要用 原始模型計算,因此需要 ComputerSceenPos 代碼調整

總結

以上是生活随笔為你收集整理的unity 半透明混合问题_Unity 实时 半透明 阴影 shader的全部內容,希望文章能夠幫你解決所遇到的問題。

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