UE4.25 Slate绘制优化

UE4.25 Slate绘制优化


1 概述


虚幻Slate基本绘制流程主要包含两步:

  • 预处理(SlatePrepass):预计算Slate绘制所需的信息。

  • 绘制(Paint):为渲染层填充绘制数据。

由于每帧都计算这些信息,会造成额外开销,因为UE4.25进行了重构,进行了按需绘制


2 优化方案


2.1 快速查找树


为了减少每次递归迭代的开销,UE4.25将Widget树存储到一维数组中(FastWidgetPathList),构建了快速查找树结构,每次变化时才重新构建该列表。

Fastpath

  • 新增WidgetProxy代理类,SWidget的Paint或Tick等操作由代理类转调。

  • BuildFastPath构建快速查找树,存储至列表FastWidgetPathList


2.2 绘制流程


Fastpath

预处理阶段:

  • 调用BuildFastPath构建快速查找树,存储至列表FastWidgetPathList中。

  • 将需要更新的Widget索引记得至WidgetsNeedingUpdate列表中。

  • 遍历WidgetsNeedingUpdate,查找FastWidgetPathList需要更新的代理,调用其ProcessInvalidation方法,里面调用对应SWidget的CacheDesiredSize方法。

绘制阶段:

  • 在预处理阶段会将需要更新的Widget索引,存储至FinalUpdateList中。

  • 在Paint阶段,遍历FinalUpdateList,查找FastWidgetPathList需要更新的代理,调用对应SWidget的Paint或Update。


Tags: UE4 Slate Vistied:
Share: Twitter Facebook LinkedIn