【Unity Shader】浅析Unity shader中RenderType的作用及_CameraDepthNormalsTexture

本文详细解析Unity Shader中的RenderType标签及其在材质替代渲染中的作用,结合_CameraDepthNormalsTexture,探讨如何使用SetReplacementShader和RenderWithShader函数,并通过实例展示RenderType对透明和不透明物体的影响,以及深度纹理的解码和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初学Unity ShaderLab的时候,一定有接触过Unity Shader中的Tags标签块,比如:

<span style="white-space:pre">	</span>"LightMode"="Vertex"
	"Queue"="Transparent" 
	"IgnoreProjector"="True" 
	"RenderType"="Transparent" 
	"PreviewType"="Plane"

其中LightMode标签指定该pass的渲染路径,Queue指定渲染顺序,IgnoreProjector指定是否忽略Projector的影响,PreviewType一般用于UIshader,PreviewType=Plane的话在材质面板看到的就是一个平面而不是材质球。

但是很多人对RenderType的了解可能相比其他标签要稍微淡薄一些,只知道比如渲染不透明物体使用Opaque,渲染透明物体使用Transparent等,而官网上有提到RenderType会用于材质替代渲染(RenderWithShader   SetReplacementShader),但究竟是如何去使用的,今天我总结下自己的理解。


首先,关于材质替代渲染,其主要就是Camera类的两个函数SetReplacementShader和RenderWithShader,其形参完全一样,第一个参数是用于替代的shader,以下记为RPShader,后一个参数是个字符串,表示用于替代的标签,包括自定义标签,以下记为mType,也就是假如我们调用SetReplacementShader(RPShader,"mType"),这个摄像机会检查所有渲染到的物体的shader,检查其是否包含mType标签,如果不存在则这个物体将不渲染,如果存在,在看这个标签的值,假如"mType"="A",则在RPShader中找到"mType"="A"的subshader并用它来替代这个物体,假如RPShader中不包含"mType"="A"的标签,那么这个物体也不会渲染。


接下来,我们需要去unity的内置shader中找一个shader,(内置shader请去官网下载源码)。

我们找到内置shader源码路径下这个文件夹:\DefaultResources,在里面可以找到这个shader:Camera-DepthNormalTexture.shader,(PS:5.x之前的版本还能找到Camera-DepthTexture.shader,从内容上看,其似乎会在UNITY_MIGHT_NOT_HAVE_DEPTH_TEXTURE这个宏条件成立的情况下渲染深度,之前尝试使用这个shader做替代渲染但没有成功得到和_CameraDepthTexture一样的效果,后来官网上看到这句:

  • UNITY_MIGHT_NOT_HAVE_DEPTH_TEXTURE - defined if a platform might emulate shadow maps or depth textures by manually rendering depth into a texture.
不过在5.x新特性中可以看到这个内容:

所以5.x中我们已经找不到Camera-DepthTexture.shader这个shader了)

(补充:后来在5.x中研究了_CameraDepthTexture的渲染,写到这篇文章里了:http://blog.youkuaiyun.com/mobilebbki399/article/details/50559732


打开Camera-DepthNormalTexture.shader,其内容如下:

Shader "Hidden/Camer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值