Unity Shader Graph
UV通道
在 Shader 中,UV0 到 UV7 是 8 个独立的纹理坐标通道(或者叫坐标槽位)。
它们的作用是告诉渲染器:如何把 2D 的贴图(纹理)正确地包裹、贴在 3D 模型的表面上。
它们最常见的用途分类:
- UV0(最常用): 基础纹理通道。用来映射模型的主贴图,比如角色的皮肤、衣服颜色、基础材质(Albedo/Base Color)。
- UV1(次常用): 烘焙光照通道。在 3D 游戏中,通常用来存储烘焙的阴影和光照信息(Lightmap)。它的展开方式通常和 UV0 不同,确保模型每个面都不会重叠。
- UV2 - UV7(高级/特效通道): 备用通道。通常用于复杂的视觉特效或高级材质,例如:
- 多层纹理混合: 比如给地面加上一层苔藓(苔藓用 UV2 缩放,地面基础砖块用 UV0)。
- 顶点动画/特效: 比如让某些特效贴图单独沿着另一个方向平移。
- 存储额外数据: 技术美术(TA)有时会把模型的特定几何数据(如高度、动态风吹的权重)塞进 UV3-UV7 里当作数据读取。
简单来说,它们就像是 8 个不同的“涂鸦图层坐标”,最常用的第一层(UV0)贴主图,第二层(UV1)贴影子,剩下的备用图层用来做各种酷炫的特效。
气流效果
参考图片

Unity 粒子系统:Start Color 与 Color over Lifetime 的关系
1. 概念
| 参数 | 作用 | 特点 |
|---|---|---|
| Start Color | 粒子出生时的初始颜色 | 固定值或随机区间;不开启其他模块则全程不变 |
| Color over Lifetime | 粒子生命周期内的颜色渐变 | 渐变条(Gradient),左端(0%)为出生,右端(100%)为死亡 |
2. 核心数学关系
最终颜色=Start Color×Color over Lifetime(当前时间点的颜色)最终颜色=Start Color×Color over Lifetime(当前时间点的颜色)
- 相乘关系 → Color over Lifetime 相当于“滤镜”,Start Color 相当于“底色”
- 每个通道(R, G, B, A)独立相乘
示例:
- Start Color = 红色
(1, 0, 0, 1) - Color over Lifetime = 白色(0%) → 灰色(50%) → 黑色(100%)
- 出生时:红 × 白 = 红
- 50%:红 × 灰 = 暗红
- 死亡时:红 × 黑 = 黑(消失)
3. 常见误区(为什么粒子变黑/隐形?)
| 错误 | 原因 | 结果 |
|---|---|---|
Start Color 为黑色 (0,0,0) | 0 × 任何颜色 = 0 | 粒子始终黑色 |
| Start Color 的 Alpha = 0 | 透明度为0,乘积永远为0 | 粒子完全透明(不可见) |
| Color over Lifetime 某通道为0 | 该通道被乘零 | 对应颜色通道消失 |
4. 最佳实践
若希望完全由 Color over Lifetime 控制颜色:将 Start Color 设为 纯白色
(1, 1, 1, 1),相当于数学中的“1”,不会干扰渐变条的任何颜色。
5. 快速检查清单
- Start Color 不是黑色
- Start Color 的 Alpha = 255(不透明)
- 如需渐变完全生效,Start Color = 白色
- 确认 Color over Lifetime 渐变条各点的 Alpha 值非零(如需要可见)
Unity 粒子系统 Scaling Mode(缩放模式)
三种模式
1. Local
- 自身缩放:影响粒子大小和发射形状
- 父物体缩放:不影响
- 粒子大小:随自身缩放改变
- 场景:独立特效预制体(如火把火焰)
2. Shape
- 自身缩放:影响发射形状/区域
- 父物体缩放:影响发射形状/区域
- 粒子大小:绝对不变
- 场景:天气效果(雨雪)、范围光环、迷雾
3. Hierarchy
- 自身缩放:影响(范围、大小、速度等比缩放)
- 父物体缩放:影响
- 粒子大小:随整体层级改变
- 场景:角色技能、载具尾气(随模型缩放)
对比表
| 模式 | 受自身缩放影响 | 受父物体缩放影响 | 粒子本身大小变化 | 适用场景 |
|---|---|---|---|---|
| Local | 是 | 否 | 随自身缩放改变 | 独立特效 |
| Shape | 是(仅形状) | 是(仅形状) | 绝对不变 | 天气、范围效果 |
| Hierarchy | 是 | 是 | 随整体层级改变 | 角色/载具绑定特效 |
Unity 粒子系统 — Emitter Velocity Mode: Transform
核心原理
通过计算当前帧与上一帧之间 GameObject 的 Transform 位置和旋转变化量 得出发射器移动速度。
计算公式
Velocity=ΔPositionΔTimeVelocity=ΔTimeΔPosition
优点
- 物体移动(Transform.Translate、动画、路径移动)即可计算速度
- 无需 Rigidbody 组件
- 适用于动画控制的飞弹、脚本移动的飞镖、UI 跟随特效
缺点 / 问题
- 物理驱动物体(Rigidbody.AddForce)速度不平滑(FixedUpdate 与 Update 帧差异导致)
- 瞬移(直接设置 position)会产生极大瞬时速度 → Rate over Distance 瞬间喷发大量粒子 / Inherit Velocity 粒子飞射速度异常
对比:Rigidbody 模式
| 项目 | Transform | Rigidbody |
|---|---|---|
| 速度来源 | 每帧坐标差 | 直接读取 Rigidbody.velocity |
| 适用对象 | 动画/脚本移动 | 物理驱动(赛车、抛接物体) |
| 瞬移影响 | 会爆粒子/速度异常 | 无影响(物理速度未突变) |
物体是靠脚本写坐标、播动画移动的(如魔法子弹、特效): 选 Transform 模式。
物体是靠物理引擎(重力、加力、刚体速度)移动的(如赛车、碎石): 选 Rigidbody 模式。
- UV通道
- 它们最常见的用途分类:
- 气流效果
- Unity 粒子系统:Start Color 与 Color over Lifetime 的关系
- 1. 概念
- 2. 核心数学关系
- 3. 常见误区(为什么粒子变黑/隐形?)
- 4. 最佳实践
- 5. 快速检查清单
- Unity 粒子系统 Scaling Mode(缩放模式)
- 三种模式
- 对比表
- Unity 粒子系统 — Emitter Velocity Mode: Transform
- 核心原理
- 计算公式
- 优点
- 缺点 / 问题
- 对比:Rigidbody 模式