unity-shader-后处理-景深
unity-shader-后处理-景深
相关资料
- Unity Shader-后处理:景深 - https://blog.csdn.net/puppet_master/article/details/52819874
前置条件
- 相机开启深度渲染,
GetComponent<Camera>().depthTextureMode |= DepthTextureMode.Depth;
- 需要写入深度缓冲的必须是 不透明 物体. 也就是 shader tags 为
Tags { "RenderType"="Opaque" }
- 保证场景中希望写入深度图的gameobj,它们上色的shader必须有
FallBack "Diffuse"
代码块,否则深度图不会将他的深度数据写入
参考
- 项目内的 DepthOfFiled.cs
流程
- 显示用高斯模糊 横向,竖向 各模糊一次. 模糊到一个 rt 上
- 把模糊后的 rt 丢到 shader 中, 在 frag 中 根据 深度图 中的深度值, (0 ~1 空间) 给原图, 和 模糊图 做个混合.
踩坑
为什么有些物体在写入不了深度中? 即使物体的shader中指定
"RenderType"="Opaque"
目前知道的是 使用 unity 中的 standard shader 就可以写入到深度缓冲区中.
加入 fallback 就可以写入到深度了.
FallBack "Diffuse"
原因是: 简单来说内置深度数据来自shadow map计算时使用的一个特殊pass,我们必须设置这个pass才能让内置depth buffer完成数据填充,**FallBack “Diffuse”在这个时候就起到了作用,貌似自己写的其他pass时不会在获取内置深度时调用。大坑一个,所以自己写的shader结构应该保留FallBack “Diffuse”**: