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 // 启用雾效相关的编译
相关推荐
丝斯201120 分钟前
AI学习笔记整理(26)—— 计算机视觉之目标追踪‌
人工智能·笔记·学习
('-')25 分钟前
《从根上理解MySQL是怎样运行的》第二十五章笔记
数据库·笔记·mysql
m0_6896182828 分钟前
会“变形”的软3D电磁结构,让4D电子、柔性机器人迎来新可能
笔记·学习·机器人
雍凉明月夜43 分钟前
c++ 精学笔记记录Ⅰ
开发语言·c++·笔记
自不量力的A同学2 小时前
FreeFileSync 14.6 发布
笔记
可可苏饼干2 小时前
ELK(Elastic Stack)日志采集与分析
linux·运维·笔记·elk
AllBlue3 小时前
unity调用安卓方法
android·unity·游戏引擎
s1ckrain3 小时前
数字逻辑笔记—组合逻辑电路
笔记·fpga开发·嵌入式
郝学胜-神的一滴3 小时前
Horse3D游戏引擎研发笔记(十):在QtOpenGL环境下,视图矩阵与投影矩阵(摄像机)带你正式进入三维世界
c++·3d·unity·游戏引擎·godot·图形渲染·unreal engine
可可苏饼干4 小时前
NoSQL 与 Redis
数据库·redis·笔记·学习·nosql