Unity Shader 语义总结笔记

文章目录

1. Queue(渲染队列)

Queue 决定了物体的渲染顺序,数值越小,越先渲染。

常见渲染队列

渲染队列 值 说明
Background 1000 最早渲染,通常用于天空盒。
Geometry 2000 默认的,不透明物体。
AlphaTest 2450 透明测试(clip() 剪裁)物体。
Transparent 3000 透明物体(需要 ZWrite Off)。
Overlay 4000 UI、特效,最晚渲染。

示例

css 复制代码
Tags { "Queue"="Transparent" }

2. Blend(混合模式)

Blend 控制源颜色和目标颜色的混合方式,常用于透明、特效等材质。源颜色是当前片元颜色,目标颜色是帧缓冲中的颜色。

常见混合模式

源因子(SrcFactor) 目标因子(DstFactor) 说明
One Zero 直接覆盖(不透明)。
SrcAlpha OneMinusSrcAlpha 标准透明混合,适用于透明物体。
One One 叠加效果(加法混合,适用于光效)。
SrcAlpha One 半透明混合,常用于粒子系统。
DstColor Zero 乘法混合(适用于阴影、暗角)。

混合因子(SrcFactor 和 DstFactor)

源因子(SrcFactor)
  • One:源颜色的全部(1)。
  • Zero:源颜色的零(0)。
  • SrcAlpha:源颜色的透明度值。
  • OneMinusSrcAlpha:1减去源颜色的透明度值。
  • DstAlpha:目标颜色的透明度值。
  • OneMinusDstAlpha:1减去目标颜色的透明度值。
目标因子(DstFactor)
  • One:目标颜色的全部(1)。
  • Zero:目标颜色的零(0)。
  • SrcAlpha:源颜色的透明度值。
  • OneMinusSrcAlpha:1减去源颜色的透明度值。
  • DstAlpha:目标颜色的透明度值。
  • OneMinusDstAlpha:1减去目标颜色的透明度值。

混合模式示例

css 复制代码
Blend SrcAlpha OneMinusSrcAlpha // 标准透明混合

总结

混合模式是透明和特效渲染的核心,选择合适的混合模式能够优化性能并实现所需效果。

3. Cull(剔除模式)

Cull 控制是否剔除物体的背面或正面,以提高渲染效率。剔除决定了哪些面会被渲染,哪些面会被忽略。

常见剔除模式

值 说明
Cull Back 默认 ,仅渲染 正面,剔除背面。
Cull Front 仅渲染 背面,剔除正面。
Cull Off 不剔除任何面,渲染 双面。

剔除模式示例

css 复制代码
Cull Off // 双面渲染

总结

Cull 是提升渲染效率的一个重要参数,通常情况下,渲染 正面 面可以减少渲染负担,但有时需要根据效果需求渲染 双面 或 反面。

4. ColorMask(颜色通道控制)

ColorMask 控制片元输出到颜色缓冲区的颜色通道。可以用来禁用某些颜色通道的写入,常用于一些特殊效果,如只修改某个颜色通道或进行调色等操作。

常见的 ColorMask 设置

值 描述
ColorMask RGB 仅写入 RGB 颜色通道,不写入 Alpha。
ColorMask A 仅写入 Alpha 颜色通道,不写入 RGB。
ColorMask 0 不写入任何颜色通道(通常只进行深度或模板测试)。
ColorMask RGBA 默认,写入所有颜色通道(包括 RGB 和 Alpha)。

ColorMask 示例

css 复制代码
ColorMask RGB // 只写入颜色,不修改 Alpha 通道

总结

ColorMask 允许细粒度地控制哪些颜色信息可以被写入,从而对颜色输出进行灵活的管理,通常用于特效和调色。

5. Offset(深度偏移)

Offset 用于在渲染时调整片元的深度值,防止深度冲突或"Z-fighting"现象。通过在片元的深度值上添加一个偏移量,可以确保物体的深度顺序正确,尤其是在多个物体在相同的深度值上渲染时。

总结

设置 描述
Offset 0, 0 无深度偏移,适用于普通渲染。
Offset 1, 1 轻微的深度偏移,减少闪烁。
Offset -1, -1 轻微向前偏移,适用于描边和避免自遮挡。

Offset 主要用于处理 Z-fighting 问题,常见于需要确保物体层次分明的场景,如描边、特效等。

Offset 示例

css 复制代码
Offset -1, -1  // 适用于描边,确保描边不被自身遮挡

6. ZWrite(深度写入)

ZWrite 控制是否将片元的深度值写入深度缓冲区。开启深度写入时,片元的深度值会被更新到深度缓冲区,这对于正确处理物体的前后关系至关重要。关闭深度写入时,片元的深度不会被更新,但依然可以进行深度测试,用于一些特殊效果,如透明物体的渲染。

常见设置

值 描述
ZWrite On 启用深度写入,通常用于不透明物体。
ZWrite Off 禁用深度写入,通常用于透明物体或特效。

ZWrite 示例

css 复制代码
ZWrite On  // 启用深度写入,物体深度会更新

7.ZTest(深度测试)

ZTest 控制深度测试的方式,决定当前片元是否会被渲染。深度测试比较片元的深度值和深度缓冲中的已有值,以确定该片元是否在当前视图的前面。常见的深度测试有:Less、Greater、Equal 等。

常见设置

值 描述
ZTest Less 仅当片元的深度值小于当前深度缓冲中的值时,才通过深度测试并渲染。
ZTest LEqual 仅当片元的深度值小于或等于当前深度缓冲中的值时,才通过深度测试并渲染。
ZTest Greater 仅当片元的深度值大于当前深度缓冲中的值时,才通过深度测试并渲染。
ZTest GEqual 仅当片元的深度值大于或等于当前深度缓冲中的值时,才通过深度测试并渲染。
ZTest Equal 仅当片元的深度值与当前深度缓冲中的值相等时,才通过深度测试并渲染。
ZTest Never 从不通过深度测试,所有片元都会被丢弃。
ZTest Always 总是通过深度测试,所有片元都会被渲染。

ZTest 示例

css 复制代码
ZTest LEqual // 允许深度值小于或等于当前深度缓冲的值时通过深度测试

综合示例

css 复制代码
ZWrite Off:禁用深度写入,防止遮挡其他物体。
ZTest Always:让此物体无视深度缓冲,始终通过深度测试。
Queue = Overlay:让该对象的渲染顺序在 Transparent 之后,确保最前渲染。

这样就可以让物体一直显示在最上方

8.Stencil(模板测试)

Stencil 用于控制模板缓冲区的测试和操作,它允许基于某些条件对像素进行选择性渲染。通过模板测试,可以在渲染过程中对不同区域进行掩蔽,或者仅在满足特定条件时渲染物体。这对于复杂的渲染效果,如镜像、轮廓、特殊区域遮罩等非常有用。

常见的 Stencil 设置

操作 描述
Stencil CompFunc 控制模板测试的条件,决定何时进行模板测试。
Stencil PassOp 控制模板测试通过后的操作。
Stencil FailOp 控制模板测试失败时的操作。
Stencil ZFailOp 控制深度测试失败时的模板操作。

常见的模板比较函数(CompFunc)

值 描述
Always 总是通过测试。
Equal 仅当当前模板值与给定值相等时通过测试。
NotEqual 仅当当前模板值与给定值不相等时通过测试。
Less 仅当当前模板值小于给定值时通过测试。
LessEqual 仅当当前模板值小于或等于给定值时通过测试。
Greater 仅当当前模板值大于给定值时通过测试。
GreaterEqual 仅当当前模板值大于或等于给定值时通过测试。
Never 永远不通过模板测试。

常见的模板操作(PassOp, FailOp, ZFailOp)

值 描述
Keep 保持模板值不变。
Zero 将模板值设置为 0。
Replace 用新值替换模板值。
Increment 增加模板值。
Decrement 减少模板值。
Invert 反转模板值。

Stencil 示例

css 复制代码
Stencil {
    CompFunc Always       // 始终通过模板测试
    PassOp Replace       // 测试通过时替换模板值
    FailOp Keep          // 测试失败时保持当前模板值
    ZFailOp Keep         // 深度测试失败时保持模板值
}

Stencil 逻辑可以配合 UI 做高级遮罩。

9.Fog(雾效支持)

Fog 是一种视觉效果,用于模拟远处物体被雾气遮挡的效果,使得场景看起来更有深度。雾效通常用于大规模场景中,帮助模拟环境中的大气散射效应,增加真实感,或者创造某种氛围。Unity 支持在材质中启用雾效,通过着色器中的 Fog 设置来控制雾的外观。

常见的雾效类型

  1. 线性雾(Linear Fog)
    FOG_LINEAR根据物体与相机的距离,逐渐增加雾的强度,近处较清晰,远处逐渐被雾气遮挡。

  2. 指数雾(Exponential Fog)
    FOG_EXP雾气随着距离的增加而指数增长,距离越远,雾气越浓,通常用于模拟更加浓烈的雾霾效果。

  3. 指数平方雾(Exponential Squared Fog)
    FOG_EXP2与指数雾相似,但雾气的增长更为快速,适用于极端的雾霾环境。

启用雾效的设置

在 Shader 中启用雾效,通常使用 Fog 关键字和雾类型相关的设置。

css 复制代码
#pragma multi_compile_fog // 启用雾效相关的编译
相关推荐
FakeOccupational5 小时前
【电路笔记 信号】DBPSK 波形查找表+脉冲成形(升余弦+根升余弦滤波)
开发语言·笔记
Horn Still Sounds8 小时前
IMX6ULL裸机|I2C通信协议 + ADC模数转换学习笔记
arm开发·笔记·单片机·嵌入式硬件
WarPigs11 小时前
Unity在Create菜单添加创建自定义脚本模板选项
unity
有范先生11 小时前
这次户外断粮危机后,我更在意主食能不能扛住极端环境了
笔记
喜欢打篮球的普通人12 小时前
MiniMind 学习笔记(十二):Pretrain 实操——从版本梳理到 8GB 显卡上的真实训练
人工智能·笔记·学习
郝学胜-神的一滴13 小时前
C++ Templates 01:拨开迷雾,读懂C++模板经典著作
开发语言·c++·程序人生·游戏·游戏引擎·软件构建
坤坤子吖14 小时前
算法学习——高精度加减乘除
c++·笔记·学习·算法
Answer1st14 小时前
【HAL库】嵌入式思路(一)
笔记
AOI小白新手上路14 小时前
深度学习模块缝合方法论 · 人物蒸馏笔记
人工智能·笔记·深度学习
AOI小白新手上路15 小时前
韦东山 3-5 I.MX6ULL 的 LED 编程 · 学习笔记
arm开发·笔记·单片机·学习·架构·硬件架构