live2dmesh渲染优先级_Live2D 性能优化

随着Live2D在项目研发中被广泛使用,其性能优化的需求已经不容忽视。笔者通过模型资源、Mesh、RenderTexture、Material和CPU耗时这5个方面来阐述优化的过程,并且最终实现了低端机上6个模型30帧的效果,值得大家参考。

优化结果

测试机型:低端机——红米4X

测试样例:同样的6个模型(游戏中同屏最多6个模型)

版本:3.2.05

CPU优化主要在CubismModel.Update、CubismModel.OnRenderObject;

内存优化主要在Texture2D、Mesh、RenderTexture、Material以及Mono内存分配。

接下来介绍从模型资源、Mesh、RenderTexture、Material和CPU耗时5个方面来优化性能。

1、模型资源

项目前期没有制定Live2D美术规范,美术导出文件的时候,直接使用自动布局顶点的方式,而Live2D自动生成Mesh的时候对于每个部件的内外边界各生成一份顶点,发现如下问题:

1、模型Mesh数量太多

2、模型的总顶点数达到6K左右

后续跟美术沟通之后,对Live2D模型(后续的模型都指Live2D模型)的导出规定如下:

1、手动布局顶点

2、ArtMesh数量控制在100以内(之前的模型由于改动的工作量太大,暂时不做修改)

3、模型顶点数控制在2k面以内(游戏最多有6个模型)

4、Edit Texture Altas中贴图大小1024*1024,自动布局且Margin为5px

5、为了避免多贴图导致DrawCall升高,一个模型只使用一张贴图

2小时后,通过Live2D Cubism Editor->File->Model Statistics查看优化结果如下:

性能数据测试结果如下:

2、Mesh

测试发现游戏一个模型的Mesh数量在80-200之间,同屏最多有6个模型,通过UWA GOT测试发现Mesh峰值达到107MB(27380个),Material数量达到10.2MB(14968个),其中Unlit(Instance)数量14563个明显异常。

研究CubismRenderer.cs发现如下问题:

1、运行时创建了两份Mesh内存

2、Mesh资源未销毁,导致内存泄漏

3、顶点色每帧都会重新赋值

针对问题1,经测试发现,改成一份Mesh并没有明显的CPU变化,Mesh内存减少一半,由于每一帧都有顶点变化,_meshFilter.mesh = FrontMesh每帧700次的CPU消耗也可以省去。

针对问题2,可以在OnDestroy中调用Destroy接口销毁Mesh。

针对问题3,使用标记控制是否更新顶点色,减少顶点色赋值的0.5ms左右CPU消耗。

另外值得一提的是,Mesh中使用了顶点色处理透明和颜色变化,但是同一个Mesh的顶点色全部相同,可以想到在Shader中控制颜色,实际上为了动态合批不得不使用顶点色,合批之后控制在10个DrawCall左右,不合批每个模型DrawCall数量达到上百个。

3、RenderTexture

CubismMaskTexture.cs中创建的Rend

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值