纹理流送总览

纹理流送系统(又称流送器)是引擎的一部分,负责增加或减少每个纹理的分辨率。它能在维持良好视觉效果的情况下有效地管理可用的内存。

流送器拥有其自身的世界视图。其更新周期为:

  1. 更新世界视图

  2. 计算每个纹理最理想的分辨率

  3. 基于流送池大小选择实际可用的分辨率

  4. 选择需要更新的纹理

  5. 生成加载/卸载请求

为完成这些任务,流送器使用一个异步工作线程减少游戏线程上的工作量,因此只有第一个和最后一个任务需要在游戏更新循环中执行。 世界视图由每个基元组件所使用的全部纹理的列表构成(这些纹理用于世界边界和纹素世界大小)。获得以上信息和给定视点后,即可计算获得良好纹素逐像素比所需要的分辨率。然后将考虑到额外的信息,如此组件是否实际显示在屏幕上。 最终定义每个纹理的最佳分辨率。之后流送器将计算流送内存池是否足以容纳这些分辨率。如不能容纳,流送器将减少所选纹理的预期精度、一次删除一个 mip,直到能够容纳下预期分辨率为止。

删除 mip 时纹理处理的顺序由保留的优先级所定义,并按顺序遵循以下规则:

  1. 保留地形纹理、强制加载纹理,以及已缺失分辨率的纹理

  2. 保留屏幕上可见的 mip

  3. 保留角色纹理和不占用太多内存的纹理

  4. 删除不可见的 mip,首先从最近可见的一个开始删除

流送器决定好为每个纹理加载的分辨率后,它便会根据加载顺序优先级计算哪些纹理应该先被更新。将依次对数个标准进行评估,定义优先级:

  1. 首先加载可见的 mip

  2. 首先加载强制加载纹理、地形纹理和角色纹理

  3. 首先加载与目标分辨率相差大的纹理

  4. (对不可见的纹理)首先加载最近可见的纹理

最后一步是生成一批更新请求,这些请求是增加或降低当前的纹理分辨率。一个批次更新的内存量受临时池大小的限制,目的是将进行中的请求数量保持较低。