Featured image of post 纹理流送概述

纹理流送概述

用于在运行时在内存中加载和卸载纹理的系统。

纹理流送系统或流送器是引擎的一部分,负责增大和减小每个纹理的分辨率。该系统使您可以拥有良好的视觉质量, 同时有效地管理可用内存。这在一定程度上是通过Mip或Mipmap实现的,Mip或Mipmap是为您的纹理分辨率预先计算的图像序列。您可以将它们视为纹理的LOD。 有关Mip的更多信息,您可以在我们的纹理支持和设置页面上加以了解。

流送器有自己的场景视图,它的更新周期包括

  1. 更新场景视图
  2. 计算每个纹理的理想分辨率
  3. 根据流送池大小选择哪个分辨率实际上是可行的
  4. 选择要更新的纹理
  5. 生成加载/卸载请求

为完成这些任务,流送器使用异步工作线程来降低游戏线程上的工作负载,这样上述只有第一个和最后一个任务需要在游戏更新循环中完成。 场景视图包含每个Primitive组件使用的所有纹理列表以及每个纹理的场景边界和纹素场景大小。根据该信息和给定视点,可以计算出 获得良好的逐像素比率纹素所必需的分辨率。然后还会考虑一些额外的信息,例如该组件实际上是否可以在屏幕上看到。 这最终会定义每个纹理的理想分辨率。然后流送器会计算流送内存池是不是足够大,能容纳这些分辨率。如果不够,流送器会降低所选纹理的计划质量, 一次降低一个mip,直到计划的分辨率降低到预算之下。

降低mip时处理纹理的顺序由保留时间优先级来定义,请按以下顺序遵循这些规则:

  1. 保留地形纹理、强制加载纹理和已经缺失分辨率的纹理
  2. 保留在屏幕上可见的mip
  3. 保留角色纹理和不占用过多内存的纹理
  4. 删掉不可见的mip,先删掉最新看到的mip

流送器确定针对每个纹理加载的分辨率后,就会根据加载顺序优先级计算先更新哪个纹理。优先级根据按照以下顺序评估的多个条件定义:

  1. 先加载可见mip
  2. 先加载强制加载纹理、地形纹理和角色纹理
  3. 先加载远离目标分辨率的纹理
  4. 对于不可见的纹理,先加载最新看到的

最后一步是为了生成一批更新请求,每个请求增大或降低当前纹理分辨率。针对一批更新的内存量 受到内存池大小的限制,以便保持较低的动态请求数量。