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ΔTimeVelocityTimeΔPosition

优点

  • 物体移动(Transform.Translate、动画、路径移动)即可计算速度
  • 无需 Rigidbody 组件
  • 适用于动画控制的飞弹、脚本移动的飞镖、UI 跟随特效

缺点 / 问题

  • 物理驱动物体(Rigidbody.AddForce)速度不平滑(FixedUpdate 与 Update 帧差异导致)
  • 瞬移(直接设置 position)会产生极大瞬时速度 → Rate over Distance 瞬间喷发大量粒子 / Inherit Velocity 粒子飞射速度异常

对比:Rigidbody 模式

项目TransformRigidbody
速度来源每帧坐标差直接读取 Rigidbody.velocity
适用对象动画/脚本移动物理驱动(赛车、抛接物体)
瞬移影响会爆粒子/速度异常无影响(物理速度未突变)

物体是靠脚本写坐标、播动画移动的(如魔法子弹、特效): 选 Transform 模式。

物体是靠物理引擎(重力、加力、刚体速度)移动的(如赛车、碎石): 选 Rigidbody 模式。