19.Profiler窗口VirtualTexturing

19.Unity性能分析工具-Profiler窗口VirtualTexturing


19.1 知识点

Virtual Texturing是什么

Virtual Texturing(虚拟纹理)是一种按需加载纹理数据到 GPU 的技术。它会把大纹理(比如 4K、8K)切成小块切片(tile),只加载相机可见部分,大幅减少显存占用,提高性能和纹理细节表现。它是为了解决高分辨率纹理带来的性能和内存瓶颈问题而设计的,允许你只加载和渲染屏幕上可见的纹理切片(tile),从而显著节省内存并提升加载效率。

使用场景:

  1. 超大贴图资源的场景
    使用了非常大的纹理(如 4K、8K、16K 甚至更大),比如地形贴图、世界地图或大场景地表材质、巨型角色或建筑贴图。VT 只会加载屏幕上当前可见的部分纹理 tile,大大降低内存占用

  2. 开放世界类或需要流式加载的游戏
    地图分区或区域化渲染需要按需加载纹理。使用 VT 可以只加载当前区域的纹理数据,减少载入延迟

  3. 希望减少 GPU 显存压力
    普通纹理会完整上传到 GPU。VT 可以只上传可见 mip 和 tile,降低显存压力,避免卡顿

  4. 次世代 / 大型项目渲染质量要求高时
    次世代美术资源中,常用高分辨率贴图 + 多通道 Mask(如 ORM、Normal、AO 等)。使用 VT 可以灵活地管理各个通道贴图的加载与呈现

一般在 Unity 中,地形(Terrain)系统、静态模型(背景建筑、大型静态 Mesh)、角色服装(高精度贴图)适合使用它。

但是,UI 贴图、小地图、动态贴图、实时生成的贴图、实时更新或频繁变化的纹理不适用。

注意:

  1. 虚拟纹理功能目前在 HDRP(高清渲染管线)中使用,不支持内置渲染管线和 URP,并且也只支持少量的平台
  2. 想要使用虚拟纹理功能,需要在 Project Settings → Player → Virtual Texturing(Experimental)中开启虚拟贴图模块

Profiler 中的 VT(虚拟纹理)模块就是专门用来监视它的性能开销问题的。

Virtual Texturing中各参数功能的含义和作用

虚拟纹理模块

  • Required Tiles(所需瓷砖):当前视图中、相机可见区域所需要的 tiles 数量。它表示为了正确显示当前画面,虚拟纹理系统“要求”加载到 GPU 中的所有纹理 tile 数量。该值反映了场景中可见区域内纹理数据的需求量,如果数量较多,则说明当前相机视野内需要更多细节
  • Max Cache Mip Bias(最大缓存贴图偏移):缓存中最大的 mip 级别偏差。虚拟纹理系统会在不同的分辨率层级之间根据视角距离和细节要求进行选择。“Mip Bias”指的是一个偏差值,表示缓存中的 tile 与最佳 mip 级别之间的差异。这个值越高,说明在缓存中可能存在更低分辨率的 tile,用于应对带宽或内存限制。因此,“Max Cache Mip Bias”提示你目前在缓存中存在的最大 mip 等级偏差,反映了系统在降低分辨率以节省缓存资源的程度
  • Max Cache Demand(最大缓存需求):当前帧下,对缓存 tile 需求的最大值。当场景中大量纹理 tile 需要加载时,“Cache Demand”就表示相机视野中所需要的 tile 数量,超过了当前缓存容量时就会出现需求过剩的情况。“Max Cache Demand”告诉你当前时刻系统最需要多少 tile 来满足画面显示要求,值较高时可能暗示缓存容量不足或流式加载无法及时跟上需求
  • Missing Streaming Tiles(缺失的流媒体图块):由于流式加载原因,当前所需但尚未加载到缓存中的 tile 数量。这部分指标显示的是在 Required Tiles 中,有多少 tile 尚未通过流式传输成功上传到 GPU。如果这个数值较高,说明虚拟纹理的流式传输存在瓶颈,可能导致相机视野中部分区域显示不全或临时使用低分辨率 tile 替代,影响画面质量
  • Missing Disk Data(磁盘数据缺失):当前所需的 tile 中,有多少 tile 数据还没有在磁盘或外部中找到。这种情况一般出现在虚拟纹理系统需要从磁盘读取数据但磁盘上还没有相应的 tile 数据,可能是由于磁盘数据未生成、数据损坏或者加载路径问题。如果 Missing Disk Data 数值较高,会导致画面缺失,系统可能会使用默认色或低分辨率替代,影响显示效果和细节

System Statistics(系统统计)面板

用于显示当前帧虚拟纹理系统的总体运行状态。

  • Tiles required this frame(当前帧所需瓷砖):当前帧所需的纹理 tile 数量。表示当前相机视野中需要加载多少个 tile 才能正确显示虚拟纹理资源,是衡量本帧纹理需求的关键指标
  • Max Cache Mip Bias(最大缓存贴图偏移):最大 Mip 等级偏移。衡量缓存中使用的 tile 分辨率与理想分辨率之间的最大差距,值越大,说明显示效果越模糊,反映了系统在牺牲质量以保证性能
  • Max Cache Demand(最大缓存需求):最大缓存需求百分比。表示当前帧中,对缓存资源的最大占用比例,用于衡量当前缓存压力(接近 100% 说明缓存紧张,可能触发 tile 驱逐)
  • Total CPU Cache Size(CPU 缓存总量):分配在 CPU 端的缓存内存总量(单位:字节)。记录 CPU 用于管理 tile 数据结构和调度系统的缓存占用,用于评估 CPU 端 VT 的内存使用情况
  • Total GPU Cache Size(GPU 缓存总量):分配在 GPU 端的缓存内存总量(单位:字节)。显示 GPU 当前用来存储 tile 纹理数据的显存量,是评估 GPU 资源压力的重要依据
  • Atlases(图集量):当前使用的虚拟纹理图集数量。每个图集(Atlas)是用来存放多个 tile 的 GPU 纹理容器,数量多可能说明 tile 零散或使用不合理,也可能是使用了多个 VT 材质

主要关注点:

  1. 对 VT 的 tile 请求负载
  2. 判断 GPU/CPU 的缓存使用量与压力
  3. 查看系统是否在降 mip 质量
  4. 分析虚拟纹理图集(Atlases)是否配置合理
  5. 识别性能瓶颈(如 tile 需求量激增 vs 缓存不足)

Player Build Statistics(玩家构建数据统计)面板

  • Missing Disk Data(磁盘数据缺失):缺失的磁盘数据大小(单位:字节)。表示运行时请求了某些 tile,但构建出来的包中找不到对应磁盘数据,可能是构建设置或 Streaming 配置问题,用于发现构建遗漏或资源打包失败
  • Missing Streaming Tiles(缺失的流媒体图块):缺失的可流式 tile 数量。表示本应通过 Streaming 加载的 tile 没有找到,用于检测 Streaming Virtual Texturing 的 tile 丢失问题,比如加载顺序、路径错误、资源未打入 AssetBundle 等
  • Read From Disk(磁盘中读取):当前从磁盘读取的 tile 数据总量(单位:字节)。表示本帧中为满足渲染需要,实际从磁盘中读取了多少 tile 资源,用于评估磁盘 I/O 开销和加载时延迟风险

Per Cache Statistics(缓存统计信息)面板

  • Cache Format:缓存格式,表示此缓存存储的 tile 格式类型(如 R8、BC7、RGBA32 等)。用于区分不同类型的纹理 tile 格式,每种格式会有独立的缓存池,利于资源管理与调优
  • Demand:当前帧对该格式的 tile 请求数量(即需要多少个 tile)。评估当前帧该格式 tile 的使用强度,帮助判断某些格式是否过多使用或分配不均
  • Bias:当前格式的最大 Mip 偏移(Mip Bias)。用于反映系统为了满足性能而对该格式使用的降级渲染程度(越高表示画质越低,越模糊)
  • Size:当前该格式 tile 占用的缓存大小(字节)。用于评估该格式纹理实际占用的缓存空间,帮助优化内存分配策略或合并格式

该面板的信息可以帮助我们:

  1. 分析不同压缩格式或通道数的纹理 tile 占用资源情况
  2. 判断是否存在某一格式缓存占用异常高的情况
  3. 找出因频繁降 mip 而造成画质下降的格式(高 Bias 值)
  4. 精准调优虚拟纹理格式分配、Tile Cache 配置

Virtual Texturing对于我们的意义

虚拟纹理是一种将超大纹理拆分成小块(tile)并按需加载的技术。

VT 模块可以帮助我们:

  1. 查看请求加载频率
    判断是否有纹理切片加载频繁,可能是摄像机过度抖动、流缓存过小等原因

  2. 查看 Mip 偏移
    Unity 会在显存压力大时自动提升 Mipmap Level(强制模糊)。这个字段越大说明系统在降级纹理质量,以维持性能,可用来检测设备是否出现“低分辨率纹理”退化问题

  3. 分析 GPU 缓存使用大小
    缓存太小可能导致频繁 tile 加载、画面模糊、带宽压力大;缓存太大则可能浪费 GPU 显存

  4. 辅助判断显存压力是否过高

  5. 配合其他模块进行综合分析

  6. 等等

总之,VT 模块帮助你诊断虚拟纹理的切片加载状态、缓存使用、模糊原因以及显存是否配置合理,是排查图片质量与贴图加载性能问题的核心工具之一。


19.2 知识点代码

Lesson19_Unity性能分析工具_Profiler窗口VirtualTexturing.cs

public class Lesson19_Unity性能分析工具_Profiler窗口VirtualTexturing
{
    #region 知识点一 Virtual Texturing是什么

    /*
     * Virtual Texturing(虚拟纹理)
     * - 一种按需加载纹理数据到 GPU 的技术
     * - 会把大纹理(比如 4K、8K)切成小块切片(tile),只加载相机可见部分
     * - 大幅减少显存占用,提高性能和纹理细节表现
     * - 为解决高分辨率纹理带来的性能和内存瓶颈问题而设计
     * - 允许只加载和渲染屏幕上可见的纹理切片(tile),显著节省内存并提升加载效率
     *
     * 使用场景:
     * 1. 超大贴图资源的场景(地形、世界地图、巨型角色或建筑贴图等)
     * 2. 开放世界类或需要流式加载的游戏
     * 3. 希望减少 GPU 显存压力
     * 4. 次世代 / 大型项目渲染质量要求高时
     *
     * 一般在 Unity 中:地形、静态模型、角色服装(高精度贴图)适合使用
     * 不适用:UI 贴图、小地图、动态贴图、实时生成或频繁变化的纹理
     *
     * 注意:
     * - 虚拟纹理功能目前在 HDRP 中使用,不支持内置管线和 URP,仅支持少量平台
     * - 使用需在 Project Settings → Player → Virtual Texturing(Experimental)中开启
     *
     * Profiler 中的 VT 模块专门用来监视其性能开销
     */

    #endregion

    #region 知识点二 Virtual Texturing中各参数功能的含义和作用

    /*
     * 界面参数功能:
     * - 在思维导图中讲解
     */

    #endregion

    #region 知识点三 Virtual Texturing对于我们的意义

    /*
     * 虚拟纹理是将超大纹理拆分成小块(tile)并按需加载的技术
     *
     * VT 模块可以帮助我们:
     * 1. 查看请求加载频率(纹理切片是否加载频繁,如摄像机抖动、流缓存过小)
     * 2. 查看 Mip 偏移(显存压力大时 Unity 会提升 Mipmap Level 强制模糊,可检测“低分辨率纹理”退化)
     * 3. 分析 GPU 缓存使用大小(过小易模糊/带宽压力大,过大浪费显存)
     * 4. 辅助判断显存压力是否过高
     * 5. 配合其他模块进行综合分析
     * 等等
     *
     * 总结:VT 模块帮助诊断切片加载状态、缓存使用、模糊原因及显存配置是否合理,
     * 是排查图片质量与贴图加载性能问题的核心工具之一
     */

    #endregion
}


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

×

喜欢就点赞,疼爱就打赏