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 默认,写入所有颜色通道(包括 RGBAlpha)。

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 控制深度测试的方式,决定当前片元是否会被渲染。深度测试比较片元的深度值和深度缓冲中的已有值,以确定该片元是否在当前视图的前面。常见的深度测试有:LessGreaterEqual 等。

常见设置

描述
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 // 启用雾效相关的编译
相关推荐
君莫愁。34 分钟前
【Unity】搭建基于字典(Dictionary)和泛型列表(List)的音频系统
数据结构·unity·c#·游戏引擎·音频
PinkandWhite2 小时前
MySQL复习笔记
数据库·笔记·mysql
肥肠可耐的西西公主2 小时前
前端(AJAX)学习笔记(CLASS 4):进阶
前端·笔记·学习
我是大咖4 小时前
c语言笔记 一维数组与二维数组
c语言·笔记·算法
傍晚冰川4 小时前
【江协科技STM32】ADC数模转换器-学习笔记
笔记·科技·stm32·单片机·嵌入式硬件·学习
无情大菜刀6 小时前
/***************************所有笔记汇总目录***************************/
笔记
唐小墨同学6 小时前
Pico 4 Enterprise(企业版)与Unity的交互-打包运行及UI交互篇
ui·unity
虾球xz7 小时前
游戏引擎学习第143天
学习·游戏引擎
豪门土狗7 小时前
渗透测试之利用sql拿shell(附完整流程+防御方案)【上】
数据库·笔记·sql·网络安全
new出对象7 小时前
C++文件读写操作笔记
开发语言·c++·笔记·文件