UE5——UMG——分析3

一些优化手段
1.UI贴图关掉MIPS,可以省掉3分之一内存,一般ASTC4x4压缩肉眼看不出变化,大色块图可以更激进

2.当布局开销过重时,可以使用无效盒或重绘盒,有额外内存开销

3.在逻辑很明确时,可以override对应函数,直接给出布局结果,避免递归子Widget
比如背包系统,能明确知道行列个数,每个ltem固定大小,可以在背包的容器层直接给出计算结果。

4.绘制的element也可以改为自定义绘制的方式,自行缓存顶点索引等数据,避免每帧重新计算

5.尽量保证同级layerid一致,打图集,为合批创造最大可能
必要时可以继承对应控件强行修改Layerld

InvalidationBox无效盒
1.优化布局开销的重要容器,减少CPU调用
2.缓存Paint产生的所有DrawElement,通过PaintFastPath快速完成绘制提交
3.标记了Volatile的Widget不会被缓存
4.CheckBox,滑动列表都可能有不刷新问题,需要手动刷新
5.Slate.InvalidationDebugging 可以显示出Volatile控件

RetainerBoX重绘盒
1.定时重绘的容器,内部会使用RT保存绘制的结果
2.有额外的内存占用
3.频繁更新的U不适合用

这两种缓存容器在播WidgetAnimation时都可能有问题

在UI上显示模型
SceneCaptureComponent2D+RT+lmage控件显示
1.先将场景中的模型Capture到一张RT上,再在UI上绘制RT贴图
2.优点:直接在场景中绘制,有全部的光影,材质效果
3.缺点:有额外的Capture,drawcall,RT内存消耗,分辨率对帧率影响非常大

SMeshWidget
1.UMG的一个用于直接显示Mesh和Instance的组件,支持多pass
2.优点:直接在UI上绘制模型,没有额外RT内存消耗,也没有额外Capture消耗
3.缺点:需要封装UMG才可以在蓝图使用,只能用UI材质
虚幻商城和github都有第三方封装过的UMG组件,包括网格,粒子,Niagara等版本

从性能角度考虑,推荐项目使用SMeshWidget方案或参考源码,自行实现绘制

将Slate控件导出到UMG使用
0verride四个函数,并用共享指针引用对应Slate控件
1.SynchronizeProperties,当属性改变时触发,同步数据给Slate控件
2.RebuildWidget,创建Slate控件
3.ReleaseSlateResources,释放Slate控件
4.GetPaletteCategory,UMG蓝图中控件面板需要显示的文字

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值