【Unity Shader】Shadow Caster、RenderType和_CameraDepthTexture

本文探讨了Unity中_ShadowCaster Pass如何影响_CameraDepthTexture的渲染,以及RenderType在不同Unity版本中对_CamreaDepthTexture和_CameraDepthNormalsTexture的作用。在Unity5.x中,_CameraDepthTexture的渲染不再依赖于RenderType,而是通过Shadow Caster Pass完成,而_CameraDepthNormalsTexture的渲染则依据RenderType。通过实例展示了如何正确配置Shader以获取所需的深度和法线信息。
摘要由CSDN通过智能技术生成

当我们制作某些屏幕特效时,需要取到屏幕的深度图或法线图,比如ssao,景深等,另外像是制作软粒子shader,体积雾等也需要取到深度图,以计算深度差等。unity提供了两个内置的纹理_CameraDepthTexture和_CameraDepthNormalsTexture,使用时只需声明sampler2D _CameraDepthTexture、sampler2D _CameraDepthNormalsTexture,并修改需要渲染出深度图的Camera的depthTextureMode为Depth或DepthNormals就行了。

其中_CameraDepthTexture存储的是屏幕深度信息,而_CameraDepthNormalsTexture存储的还包括法线信息。

而接下来我需要研究的问题是,究竟怎样的物体会被渲染到_CameraDepthTexture这张图里,以及会以什么样的方式渲染(Unity中_CameraDepthNormalsTexture的渲染已经在上一篇文章中解释过了,链接:http://blog.csdn.net/mobilebbki399/article/details/50512059)。

研究这个的意义,我们可以想象,如果写了一个shader,其blend为srcalpha onesrcalpha,也就是普通的transparent效果,并且我们可以通过属性去修改它的alpha,但是我们将RenderType改成Opaque,那么这个物体会以实心的形式渲染到_CameraDepthNormalsTexture(5.x中_CameraDepthTexture不再由RenderType替代渲染得到)。

举个例子,注意下面两张图:


其中第一张图中黄色方块的shader中使用了blend srcalpha onesrcalpha,并给予一个_Alpha属性控制其alpha,也就是普通的transparent shader,区别就是其RenderType为Opaque,然后使用了一个景深屏幕特效,其实现屏幕特效的shader中用_CameraDepthNormalsTexture来解码得到的深度对原始图像和模糊后图像插值(4.x的版本应该用_CameraDepthTexture也一样有效),可以看到当把黄色方块的_Alpha改成0,但因为其RenderType为Opaque,也就是会渲染到_CameraDepthNormalsTexture,导致出现如第二幅图中的情况。</

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值