抖音开放平台Logo
开发者文档
“/”唤起搜索
控制台
  • 开发指南
  • 游戏引擎
  • 基础能力
  • 开放能力
  • 性能优化
  • Unity 小游戏性能优化
  • 性能优化总览
  • 启动性能
  • 运行性能
  • 优化Unity WebGL的内存
  • 开发阶段内存调优
  • Unity WebGL 运行时优化建议
  • WebGL2.0渲染支持说明
  • 优化Unity WebGL的渲染性能
  • iOS Metal 渲染模式
  • 普通小游戏性能优化
  • 安全指引
  • 针对小游戏情况,可能存在较多中低端机型,因此对于渲染的优化非常必要,以下是几个可能会有帮助的建议
    关于渲染的优化,可以参考官方

    一. 渲染管线

    1.1 Built-in 渲染管线

    内置渲染管线功能较为全面,且各平台移植性强,但是相较于URP在图形质量和渲染特性上有所缺失,如对渲染没有太大的要求,内置渲染管线基本可以应对大多数情况,适用小游戏

    1.2 URP 渲染管线

    针对URP渲染管线的优化可以参考官方的视频
    URP渲染管线是Unity官方提供的轻量级渲染管线,提供了良好的性能和平台移植性,同时支持自定义配置来选择启用或禁用某些渲染特性,适用小游戏
    但是对于小游戏而言,URP的许多高级渲染特性还是过于冗余,小游戏的体量无法承载如Fog,Motion_Vector,和一些高级的后处理效果等高消耗的渲染特性。一种优化方向是定制精简版的,适用于小游戏的URP渲染管线。

    1.2.1 定制URP渲染管线

    针对小游戏情况,需要对渲染性能做尽可能的优化,而URP管线中许多复杂特性并不会在小游戏中应用,因此需要定制精简版的适合小游戏的URP管线。

    1.3 HDRP 渲染管线

    HDRP通常用于创建高质量的渲染效果,包括实时光线追踪,全局光照等,开销极大,不适用小游戏

    1.4 SRP 自定义渲染管线

    SRP是一种可编程的渲染管线,它允许开发者根据项目需求自定义和扩展渲染管线的各个阶段,为项目提供更高的自定义性和可扩展性。需要注意的是,SRP的开发和配置相对复杂,需要一定的渲染编程知识和经验。因此,在选择SRP时,开发者需要权衡项目需求、开发资源和时间限制,自行评估决定是否使用

    二. 光照

    光照是渲染中非常昂贵的一个环节,对于小游戏情况,应在大多数情况避免使用光照相关功能
    如果游戏中无法避免使用光照,需要做较大的取舍和精简,尽量少使用实时光照,对于shading,尽量避免使用PBR-BRDF计算量较大的光照模型
    为了尽可能保留渲染效果,通用的做法是,预计算相关的光照信息,如Light Map预计算光照信息存为一张纹理,在运行时采样纹理获取光照信息,或者基于预计算的实时全局光照Light Probe,通过预计算探针位置光照信息,在运行时对于需要光照信息的物体,插值计算距离最近的探针。预计算可以极大地减少运行时消耗,但是对于Light Map和Light Probe得到设置上仍然有很多可以优化的地方。
    对光照的优化可以参考:

    2.1 Light Map

    Light map的限制是只能应用于静态的物体和静态的光源。
    Light Map的优化可以参考官方的文档
    关于光照贴图烘焙各个参数详细解释,及合适的配置,可以参考
    几个通用的优化建议
      设置较低的光照贴图的分辨率。
      在Renderer组件的Lightmap Parameters选项中单独指定烘焙预设参数,建议使用较低配置。

    2.2 Light Probe

      尽可能的少放置探针,只在对光照要求比较高且光线变化密集的地方放置探针。只在对实时全局光照有要求的区域考虑放置探针。
    对于光照探针的优化可以参考

    三. 阴影

    和光照相似,阴影也是渲染中性能消耗较大的一环节,大多数游戏对于阴影的处理基本上都是另起一个额外的pass来渲染实时阴影。对于小游戏情况而言,要做到尽可能避免实时计算
    对于静态的物体,使用阴影贴图,对于动态的物体,选用基于shadowMap的开销相对较小的方案。
    对于阴影方向的优化可以参考
    针对小游戏情况,几个通用的阴影优化方向:
      增加阴影距离裁剪的范围,可以在摄像机组件上进行设置。

    四 .shader代码优化

    对于shader代码上的优化策略可以参考
      减少使用if,else,或者循环等可能会导致分支的代码,if 语句 可以尝试使用 step 内置函数替代,原因是分支可能会打断GPU并行。
      尽可能使用低精度的浮点值,如 fixed/lowp 的计算速度是 float/highp 的四倍以上。
      优先使用Swizzle,而非独立操作单个通道,合理运用Mul_Add以减少不必要的移动指令。