GPU Animation-01-初探

300 阅读2分钟

GPU Animation-01-初探

「这是我参与2022首次更文挑战的第6天,活动详情查看:2022首次更文挑战」。

作为一名优秀的开发者,对于技术的探求应该是永无止步的,如何让自己更进步,那就只有不停的学习,不停的充电.而这些都都是说起来容易做起来难,坚持才是难的地方 --蛙哈哈

在之前介绍 GPU Instancing 的文章中,我们发现GPU Instancing 有非常强大的能力,1万个sphere 只会有200多个 draw calls,但是之前所有的例子里面都是静物,很多同学都想在自己的游戏中有成千上万的角色,每个角色都带着华丽的武器和翅膀,咳咳,被韩国游戏毒害较深,哈哈.

如果想要角色动起来,可能我们第一时间想到的就是用Animator来控制角色动画,那么角色也要必须使用SkinnedMeshRenderer 这个组件,但是GPUInstancing是不支持 SkinnedMeshRenderer的,那么咱们有没有办法通过一些手段来通过Instancing技术来实现角色动画呢?

1.使用Animator和SkinnedMeshRenderer来渲染角色动画有什么问题

没啥问题,前提是量不能大,量大了会有两个问题:

  1. 骨骼动画的播放和蒙皮的计算,都是强烈依赖CPU的,尤其是蒙皮有极高的并行性,但这是GPU擅长的事情,CPU做起来很痛苦,就会慢.
  2. 角色数量多,会导致大量的DrawCall,会导致CPU和GPU的提交操作的变得非常频繁,压力又大了.

如果能想办法让GPU把蒙皮计算的事情做了,再用上GPU Instancing 的技术,岂不是就可以实现千军万马带大翅膀互砍的名场面了?

为啥骨骼动画的播放和蒙皮的计算都依赖CPU呢?下一期会讲,挖坑之王是我了!

2.如何实现GPU Animation

如果将动画的相关操作都放在GPU上, 那么就不需要CPU再来计算蒙皮.

如果CPU不再计算蒙皮,那么就可以不用蒙皮,而是普通的MeshRender.

如果使用了MeshRender,就可以使用GPU Instancing.

你真是个小天才.

正好春节也到了,先给大家来一个万虎(照猫画虎)跳舞.

我们可以看到一万个小猫咪,同时播放动画, 只有18的 draw calls, 而且帧率也很低.就实现了之前的猜想.

下一节,咱们就来探究如何实现GPU Animation

image-20220124233634287.png