1.四种Shader
(1)Standard Surface Shader
产生一个包含普通光照模型的表面着色器
(2) UnlitShader
产生一个不包含光照的基本的顶点/片元着色器
(3) Image Effect Shader
屏幕后处理效果的模板
(4) Compute Shader
旨在利用GPU的并行性来进行一些于常规渲染流水线无关的计算
2.ShaderLab
UnityShader:Unity为了开发者提供的高级层的渲染抽象层。
ShaderLab:UnityShader用的语言。
3.结构
属性:Name("Displace Name",Type) = DefaulValue
4.SubShader
至少要一个SubShader。Unity会扫描所有的SubShader语义块,然后选择第一个能够运行的SubShader。如果都不支持,就会使用FallBack中的。
(1)状态:提供了一系列渲染状态的设置指令。可以在SubShader中设置,会应用到所有Pass,也可以在Pass中设置,只会应用到当前Pass。
状态名称 | 设置指令 | 解释 |
Cull | Cull Back|Front|Off | 设置剔除模式:剔除背面|正面|关闭 |
ZTest | ZTest Less Greater|LEqual|GEqual|Equal|NotEqual|Always | 设置深度测试时使用的函数 |
ZWrite | ZWrite On|Off | 开启|关闭深度写入 |
Blend | Blend SrcFactor DstFactor | 开启并设置混合模式 |
SubShader标签
标签类型 | 说明 | 例子 |
Queue | 控制渲染顺序,指定物体属于哪一个渲染队列。也可自己定义 | Tags{“Queue”=“Transparent”} |
RenderType | 对着色器进行分类 | Tags{“RenderType”=“Qpaque”} |
DisablBatching | 设置批处理。把在模型空间下进行顶点动画就需要关闭 | Tags{“DisablBatching ”=“True”} |
ForceNoShadowCasting | 控制该物体是否会设置投影 | Tags{“ForceNoShadowCasting ”=“True”} |
IgnoreProjector | 如果为“True”,则不会受到Projector的影响。一般用于半透明物体 | Tags{“IgnoreProjector ”=“True”} |
CanUseSpriteAtlas | 当该SubShader是用于精灵时,将其设置为“False” | Tags{“CanUseSpriteAtlas ”=“True”} |
PreviewType | 材质面板如何预览该材质 。默认是球 | Tags{“PreviewType ”=“plane”} |
Pass标签
类型 | 说明 | 例子 |
LightMode | 定义该Pass在Unity的渲染流水线中的角色 | Tags{“Light Mode”=“ForwardBase”}Tag |
RequireOptions | 用于指定当满足某些条件才渲染该Pass。 | Tags{“RequireOptions ”=“SofftVegetation”} |
其他Pass:
UsePass:复用其他的Pass;
GrabPass:该Pass负责抓取屏幕并且存储在一张纹理当中,以便后续的使用
5. 着色器
表面着色器:实质是顶点和片元着色器
顶点/片元着色器:核心
固定函数着色器:不可编程管线。
注意:如果光源比较多,则可以使用表面着色器,但得注意效率。如果光源少,则使用顶点/片元着色器。如果有很多自定义得渲染效果,则要使用顶点/片元着色器。