Unity大规模骨骼动画优化方案

1. 需求出现

  最近项目有了新的需求, 需要敌我双方英雄各自带领数十(百)个小兵对冲, 乱战. 在之前的方案基础上去掉特效后效等进行测试, 发现性能开销简直惨不忍睹, 帧数只能勉强维持15-20的样子, 200个英雄+小兵的情况下CPU大概有40ms的耗时, DrawCall200多个. 分析后发现开销基本在处理动画和drawcall上.
在这里插入图片描述

2. 解决方案

  针对上面的两个问题, DrawCall过多很容易联想到GPU Instancing, 因为小兵的mesh和材质都一样, 不过有一个问题, 小兵使用了SkinnedMeshRender渲染, 而GPU Instancing不支持SkinnedMeshRender. 同时骨骼动画也没有想到好的解决方案= =. 这时经过大佬指点, 知道了有一种叫动画贴图的东西, 可以(稍微, 还有很多坑)解决这个问题.

1. 动画贴图

  传统骨骼动画都是在模型上面挂Animator或Animation上, 骨骼, 动作,蒙皮什么的都是CPU计算. 动画贴图的核心思想就是把这部分计算移植到GPU去计算, 毕竟GPU的强项就是计算, 肯定会大大减少计算时间. 同时SkinnedMeshRender也可以换成MeshRender, 为后面开启GPU Instancing做了铺垫.

  动画贴图实现逻辑和顶点动画差不多, 都是要在vertex shader中改变顶点信息来实现动画. 于是我们要做的就是把之前的动作信息烘焙成一张贴图, 并且把之前Mesh重新烘焙. 具体实现的就是贴图的颜色值和顶点信息的对应, 不细说了, 根据动作精度要求往里塞就好, 记得塞的时候做一下数值转换就好.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值