Unity Built-in Shader详解二

本文介绍了Unity中用于半透明和全透明物体的Shader家族——Transparent Shader Family。共有7种Shader,支持半透明效果,并通过主纹理的Alpha通道实现透明度调节。文章还探讨了使用半透明物体时可能遇到的排序问题及解决建议。

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

       这次主要讨论Unity自带的Shader中Transparent Shader Family

       这个家族的Shader一共7种,原理和类型与Normal中的上差不多,只不过这些Shader是用在半透明或者全透明的物体上面的。他们的主纹理接受RGBA4个通道。如果你的模型一部分是半透明,一部分是不透明的。请分开使用两张材质,半透明的材质这个家族的Shader。这个家族的Shader的内容和Normal中同名的几乎一样,只是添加了半透明效果,因此不再做重复介绍。

 

       通过读取纹理中的alpha值,这个Transparent家族的shader可以让模型变成半透明或者全透明的。在alpha中,0表示全透明,255表示全白。如果你的主纹理不包含alpha通道,那么这个物体将会变成不透明的。

       在游戏中使用半透明的物体是比较有技巧性的,因为他们经常会导致排序问题。比如说,如果你透过两个窗口观察物体,发觉物体很异样,恭喜你,你正在经历着每个人都会遇到的使用半透明对象的问题。一条具有普遍性的规则是:有些时候一个半透明的对象会很诡异的绘制在另外一些对象前面,尤其当这些对象是互相交叉的,或者一个把另一个包围的抑或是。为此,当你需要半透明对象的时候,你应该使用它们,但是不要太过于依赖半透明对象(考虑到性能问题)。你也应该让你的设计者们了解到排序可能会出现问题,让他们做好为此调整的准备。

 

       (1)Vertex-Lit

           这个家族中最简单的Shader,同样有固定管线和可编程管线两个SubShader,适用于所有的硬件。所有的光只在顶点计算。除了支持半透明,其他特性和Normal里面的Vertex-Lit一致。

           Unity Shader/Transparent/Vertex-Lit

 

 

          (2)Transparent Diffuse

           同Normal中的Diffuse,支持了alpha。

           Unity Shader/Transparent/Diffuse

 

 

          (3)Transparent Specular

          同Normal Specular,支持了半透明

          Unity Shader/Transparent/Specular

 

 

          (4) Transparent Bumped Diffuse

          同Normal中的Bumped Diffuse

          Unity Shader/Transparent/Bumped Diffuse

 

          (5) Transparent Bumped Specular

          同Normal里面的Bumped Specular,支持半透明

          Unity Shader/Transparent/Bumped Specular

 

          (6)Transparent parallax Diffuse

          同Normal parallax Diffuse,支持半透明

          Unity Shader/Transparent/Parallax Diffuse

 

          (7) Transparent Parallax Specular

          同Normal Parallax Specular,支持半透明。

          Unity Shader/Transparent/Parallax Specular

Unity中,Tags是一种特殊的关键字,用于在Shader中指定一些渲染相关的信息,例如渲染类型、渲染队列、渲染器名称等。Tags通常被用于告诉Unity如何处理Shader,以及如何在场景中使用该Shader。 下面是一些常用的Tags及其含义: - RenderType:指定渲染类型,例如Opaque(不透明)、Transparent(半透明)、TransparentCutout(半透明带透明贴图)等。 - Queue:指定渲染队列,用于控制Shader的渲染顺序。具有相同队列的Shader将按照其在场景中的顺序进行渲染。 - DisableBatching:禁用批处理,用于控制是否对多个物体使用相同的Shader进行批处理。如果禁用批处理,则会为每个物体单独进行渲染,可能会影响性能。 - RenderPipeline:指定渲染管线,用于控制Shader在哪个渲染管线中使用(例如Built-in或Universal Render Pipeline)。 - ShaderLOD:指定Shader的LOD级别,用于控制Shader在不同距离下的细节程度。较远的物体可以使用较低的LOD级别以提高性能。 Tags通常出现在Shader文件的SubShader块中,用于告诉Unity如何处理该SubShader。例如,在以下示例中,我们使用RenderType标签指定该SubShader渲染类型为Opaque: ```ShaderLab SubShader { Tags { "RenderType"="Opaque" } // ... } ``` 除了在Shader文件中使用Tags之外,我们还可以在Unity Editor中使用Tags进行场景配置。例如,在设置相机的渲染路径时,我们可以使用Tags来指定渲染管线: ```C# Camera.main.depthTextureMode = DepthTextureMode.Depth; Camera.main.renderingPath = RenderingPath.Forward; Camera.main.actualRenderingPath = RenderingPath.Forward; Camera.main.clearFlags = CameraClearFlags.SolidColor; Camera.main.backgroundColor = Color.black; Camera.main.allowHDR = true; Camera.main.allowMSAA = true; Camera.main.allowDynamicResolution = true; Camera.main.SetReplacementShader(Shader.Find("MyShader"), "RenderType=Opaque"); ``` 使用Tags可以为我们提供更多的灵活性控制权,使得Shader在不同的场景中都能够得到良好的表现。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值