【Unity Shader 中SubShader相关介绍】

简介: 【Unity Shader 中SubShader相关介绍】

Unity Shader 中SubShader相关介绍


每个Shader都会包含至少一个SubShader。Unity显示物体时候,它会去检测这些SubShader,然后选择一个能够在当前显卡运行的SubShader。


通常,SubShader的大致结构如下:

Shader "Unlit/NewUnlitShader"
{
    Properties
        {***}
    SubShader
    {
        //Tages=标签:可以设置一个或多个Tages
        Tags { "RenderType" = "Opaque" }
        //标签语法:
        Tags { 
          "TagsName1" = "Value1"
          "TagsName2" = "Value2"
          "TagsName3" = "Value3"
          ...//没有数量的限制
         }
    //渲染状态和标签放在Subshader之下Pass之外的意思是对下面所有的Pass做影响,放在Pass内的意思是只对这一个Pass做影响。
    Cull Back
        {***//子着色器}
        
        Pass//Pass可以设置多个,但是会消耗性能,也就是尽可能的用在一个Pass里面进行效果实现。
        {***//第一个Pass}
        Pass
        {***//第二个Pass}
            ENDCG
        }
    }
}

SubShader的分支结构。

image.png

在SubShader中用Queue(队列)标签确认物体的渲染顺序,Unity定义了五种渲染队列,如下

渲染队列名称 描述 队列号
Background 最先执行谊染,一般用来谊染天空盒(Skybox)或者背景 1000
Geometry 非透明的几何体通常使用这个队列,当没有声明渲染队列的时候,Unity 会默认使用这个队列 2000
AlphaTest Alpha 测试的几何体会使用这个队列,之所以从 Geometry 队列单独拆分出来,是因为当所有实体都绘制完之后再绘制 Alpha 测试会更高效 2450
Transparent 在这个队列的几何体按由远及近的顺序进行绘制,所有进行 Alpha 混合的几何体都应该使用这个队列,例如玻璃材质、粒子特效等 3000
Overlay 用来叠加渲染的效果,例如镜头光晕等,放在最后渲染 4000

除了使用 Unity 预定义的渲染队列,也可以自己指定一个队列,例如:Tags { “Queue” = “Geometry + 1” }

这个队列的队列号其实是 2001,表示在所有的非透明几何体绘制完成之后再进行绘制。使用自定义的渲染队列在某些情况下非常有用,例如:透明的水应该在所有不透明几何体之后,透明几何体之前被绘制,所以透明水的渲染队列一般会使用{ “Queue” = “Transparent-1” }。

除了在SubShader中指定渲染队列,也可以在材质面板中进行设置,也可以选择一个Unity预设的队列。还可以自已在输入框输入一个队列号。


如图:


渲染类型


RenderType(渲染类型)标签可以将Shader划分为不同的类别,用于后期进行Shader替换或者产生相机的深度纹理,归纳整理后如下:

类型名称 描述
Opaque 用于普通Shader,例如:不透明、自发光、反射、地形Shader
Transparent 用于半透明 Shader 例如:透明、粒子
TransparentCutout 用于透明测试Shader,例如:植物叶子
Background 用于Skybox Shader
Overlay 用于UGI纹理、Halo、Flare Shader
TreeOpaque 用于地形系统中的树干
TreeTransparentCutout 用于地形系统中的树叶
TreeBillboard 用于地形系统中的Billboarded树
Grass 用于地形系统中的草
GrassBillboard 用于地形系统中的Billboarded草
相关文章
|
图形学 Android开发 iOS开发
|
4月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
308 0
|
4月前
|
C# 图形学 C语言
Unity3D学习笔记3——Unity Shader的初步使用
Unity3D学习笔记3——Unity Shader的初步使用
50 0
|
4月前
|
数据可视化 图形学
小功能⭐️Unity2018 Shader Graph——全息影像、物体消融
小功能⭐️Unity2018 Shader Graph——全息影像、物体消融
|
6月前
|
图形学
【实现100个unity特效】shader实现3D物品闪光和描边效果
【实现100个unity特效】shader实现3D物品闪光和描边效果
94 0
|
6月前
|
开发工具 图形学
【推荐100个unity插件之11】Shader实现UGUI的特效——UIEffect为 Unity UI 提供视觉效果组件
【推荐100个unity插件之11】Shader实现UGUI的特效——UIEffect为 Unity UI 提供视觉效果组件
461 0
|
6月前
|
图形学
【实现100个unity特效之2】使用shader和shader Graph实现2d图片描边效果(附源码)
【实现100个unity特效之2】使用shader和shader Graph实现2d图片描边效果(附源码)
312 0
|
6月前
|
图形学 开发者
【实现100个unity特效之1】使用Shader Graph实现动物森友会的世界弯曲效果(带源码)
【实现100个unity特效之1】使用Shader Graph实现动物森友会的世界弯曲效果(带源码)
129 0
|
7月前
|
图形学 异构计算
【Unity Shader 中Pass相关介绍_第四篇】
【Unity Shader 中Pass相关介绍_第四篇】
|
7月前
|
缓存 图形学 异构计算
【#Unity Shader#Amplify Shader Editor(ASE)_第二篇】
【#Unity Shader#Amplify Shader Editor(ASE)_第二篇】