UPL9-1——GPU Skinning

GPU Skinning

GPU Skinning(GPU 蒙皮)是 Unity 中提供给我们的一个功能开关
可以在 Project Settings ——> Player ——> Other Settings ——> GPU Skinning 中进行设置
它的设置 决定了 角色动画(带 Skinned Mesh Renderer 蒙皮网格渲染器的对象)里顶点随骨骼运动的变形计算 在 GPU 还是 CPU 中进行

image

GPU Skinning 的三种模式

  1. CPU

    所有蒙皮运算都在 CPU 中完成,完成后,CPU 把最终的顶点位置传给 GPU
    这种方式虽然兼容性好,但是 CPU 压力很大,大量角色存在时可能导致 CPU 成为瓶颈

  2. GPU

    CPU 只算部分内容,比如骨骼矩阵,顶点变形由 GPU 顶点着色器来做
    这种方式可以大幅减少 CPU 运算和数据传输
    GPU 会对每个模型单独计算蒙皮,如果 DrawCall 较高,会带来一定开销

  3. GPU (Batched)

    GPU Skinning 的批处理版本,Unity 会把多个 Skinned Mesh Renderer 的蒙皮运算 合并在一次 GPU Pass 里
    这种方式极大减少 DrawCall 和 API 调用开销,更适合场景中有很多相同或相似角色(比如群怪、士兵大军)的情况
    但是内存使用较高,并且部分低端设备可能不支持

我们应该如何选择

  • CPU:

    当 模型顶点数 * 骨骼数 很大时,CPU 负担会很重
    每帧要传输大量顶点数据到 GPU,对内存带宽消耗也大
    因此仅适合动画使用较少的项目

  • GPU 和 GPU (Batched):

    通过使用这种模式可以有效减少 CPU 负担
    减少 CPU 到 GPU 的数据传输量,特别适合有 大量角色 或 高顶点数模型 的场景

如果目标设备性能中高,优先选 GPU (Batched)
如果目标是低端移动设备,角色数不多,GPU 更稳,兼容性更好
只有在 GPU 端顶点计算已经成为瓶颈时,才考虑回退到 CPU 或优化模型和骨骼(甚至不考虑回退,直接从优化 GPU 入手)