Shader 入门笔记(三) ShaderLab 初识
Unity中,Unity Shader 都是ShaderLab 来编写的。ShaderLab 是Unity提供的编写Unity Shader 的一种说明性语言。
1)Properties :定义了着色器所需要的各种属性。这些属性讲会出现在Inspector。
2) SubShader:每一个Unity Shader文件可以包含多个SubShader语义块,但最少要有一个。
SubShader{
//可选的
[Tags]
//[RenderSetUp]
Pass{
}
//Other Passes
}
Pass:每个pass定义了一次完整的渲染流程,但是pass数目过多,往往会造成渲染性能的下降。因此尽量使用最小数目的Pass。
3)渲染状态设置指令:设置显卡的各种状态。
状态名称 设置指令 解释
Cull Cull Back | Front | Off 设置剔除模式;剔除证明/背面/关闭剔除
ZTest ZTest Less Greater | LEqual | GEqual |Equal |NotEqual |Always 设置深度测试时使用的函数
ZWrite ZWrite On/Off 开启/关闭 深度写入
Blend Blend SrcFactor DstFactor 开启并设置混合模式
当在SubShader快中设置了上述渲染状态,将会应用到所有的pass;如果我们不想,可以再pass中单独进行上面的操作。
4)SubShader 的标签
键值对(Key/Value Pair),它的健和值都是字符串类型。这些键值对是SubShader和渲染引擎之间的沟通桥梁。
告诉Unity的渲染引擎:SubShader希望咋样以及何时渲染这个对象。
Tags {"TagName1" = "Value1" "TagName2" = "Value2"}
标签类型 说明 例子
Queue 控制渲染顺序,指定该物体属于哪一个渲染队列,通过这种方式可以保证所有的透明物体可以在所有不透明的物体后面被渲染 Tags {"Queue" = "Transparent"}
RenderType 对着色器进行分类。 Tags {"RenderType" = "Opaque"}
DisableBatching 一些SubShader在使用Unity的批处理功能会出现问题。这时可以通过该标签直接指明是否对该SubShader使用批处理 Tags{"DisableBatching"= "True"}
ForecNoShadowCasting 控制使用该SubShader的物体是否会投射阴影。 Tags {"ForceNoShadowCasting" = "True"}
IgnoreProjector 如果该标签值为“true”,那么使用该SubShader的物体将不会受Projector的影响。通常用于半透明物体。 Tags {"IgnoreProjector" = "True"}
CanUseSpriteAtlas 当该SubShader用于精灵(Sprites),将该标签设为“false”
PreviewType 指明材质面板将如何预览该材质。默认情况下,材质将显示为一个球形,我们通过把标签的值设为“Plane” “SkyBox”来改变预览类型 Tags {"PreviewType" = "Plane"}
上述标签仅可以在SubShader中声明,而不可以在Pass块中声明。Pass块虽然也可以定义标签,但这些标签不同于SubShader的标签类型。
Pass 块
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?