71.GPU Skinning

71.性能优化-GPU-增强渲染性能-GPUSkinning


71.1 知识点

GPU Skinning 是什么

GPU Skinning(GPU 蒙皮)是 Unity 中提供的一个功能开关,可以在 Project Settings → Player → Other Settings → GPU Skinning 中进行设置。

它的设置决定了角色动画(带 Skinned Mesh Renderer 蒙皮网格渲染器的对象)里,顶点随骨骼运动的变形计算在 GPU 还是 CPU 中进行。

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 模式:
当模型顶点数 x 骨骼数很大时,CPU 负担会很重。每帧要传输大量顶点数据到 GPU,对内存带宽消耗也大。因此仅适合动画使用较少的项目。

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

选择建议:

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

71.2 知识点代码

Lesson71_性能优化_GPU_增强渲染性能_GPUSkinning.cs

public class Lesson71_性能优化_GPU_增强渲染性能_GPUSkinning
{
    #region 知识点一 GPU Skinning是什么

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

    #endregion

    #region 知识点二 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调用开销
    //  更适合场景中有很多相同或相似角色(比如群怪、士兵大军)的情况
    //  但是内存使用较高,并且部分低端设备可能不支持

    #endregion

    #region 知识点三 我们应该如何选择

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

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

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

    #endregion
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏