最近通过朋友介绍,知道了一个叫做GPU Skinning的工具。这个工具的作用是同一种角色在同屏里面出现一大堆时,可以大幅度的降低DrawCall。我试了一下,感觉挺有意思的,各位可以试试。
它的原理实际上是把骨骼矩阵存在配置文件里面,然后通过特殊的shader,计算顶点的位置,直接在GPU端得到了网格模型的顶点在动画帧该在的位置。这一切由于是在GPU端直接得出结果,所以根本不会产生CPU的合并和DrawCall。这种做法,其实是很典型GPU骨骼动画做法,之前我在写AGAL的骨骼动画时,也是采用这种方式的。
下面来说说做法:
先去github下载最新的项目,该项目是开源的:https://github.com/chengkehan/GPUSkinning
然后打开项目,把之前做好的角色模型拖到场景里面,然后加上GPU Skinning Sampler脚本在模型的身上:

加完脚本之后,会看到具体的设置,先填入需要保存的模型的名称(Animation Name),设置RootBone,然后根据需要设置动画片段的fps、循环等信息。

接下来根据下面的步骤,点击Play Scene和Start Sample,插件会让你选择一个保存的地方。

保存完之后,会有4个文件生成出来。我们随便建一个新的Empty GameObject,然后挂上GPU Skinning Player Mono的脚本,然后把刚才保存的4个文件拖到相应的位置,然后空物体就很神奇的出现了角色的网格模型。可以把这个gameObject保存成Prefab,然后就可以直接用了。

下面是运行的结果,生成了100个角色,虽然角色模型一样,但动作都是随机播放的。这时候看SetPass Calls,只有6个。

可以看出,如果GPU能力还过得去的话,这个做法还是不错的。而且插件本身也实现了动画事件的功能,可以满足一定的功能。
之后我拿了一台配置非常低的手机(红米note1代)运行了上面的demo,在生成到同屏65人左右,还能保持60帧满帧。之后由于同屏面数的增多,慢慢开始掉帧,同屏100人时帧率为43左右。同屏145人降到33帧左右。我使用测试的模型就是上图所示的,面数1500,骨骼大概30左右。

接下来说说不足的地方:
1、角色刚实例化出来后, GPU Skinning Player Mono上面的Player变量是空的,也就是说不能在实例化后立刻调用播放动画的方法,不然会报错。
2、我试了3个模型,其中有一个使用了多个子网格模型的角色生成出来的数据是错误的,估计还有bug。
3、虽然插件实现了动画事件,但和Unity原生的动画事件并不是同一回事,而且也不能用动画状态机,都是直接通过Play方法来播放对应的动画的。当然我很喜欢这种做法,但如果是本身项目就已经用了动画状态机和自带的动画事件,似乎就有点难直接套用这套GPU Skinning了。
4、最大的缺点,同屏显示同一个动作的模型,动作将会是一模一样的,也就是说如果10个模型都播放跑步动作,他们的动作将会是完全一致的。当然了,如果是播放攻击动作,只要攻击的间隔不一样,攻击完之后播放待机动作,也只会是刚好攻击的几个模型动作一致。

通过以上的测试结果,可以得出GPU Skinning功能大概适合用在同屏小兵很多,而且小兵的模型都是基本相同的几个模型。如果用在主角身上,由于动作会同步到一模一样,会比较难看。如果是做带很多兵的割草类游戏、塔防类游戏等,这个方案还是不错的。

GPU Skinning介绍相关推荐

  1. GPU Skinning旋转指定骨骼

    1)GPU Skinning旋转指定骨骼 ​2)关于UGUI画布重建以及动静分离 3)如何设定游戏内存的峰值来保证不闪退 4)使用UsePass遇到Keyword丢失的问题 5)Unity Shade ...

  2. gpu服务器各硬件的全面认识ppt,GPU服务器介绍.ppt

    文档介绍: --杨跃江2018.3.29宝德GPU服务器介绍Q4'18Q3'19Q2'18Q3'18Q1'18Q2'19Q1'19通用双路服务器Q4'19PR4764GW双路4U4GPUPR2764G ...

  3. 计算机显卡(GPU)基础介绍

    1.介绍:GPU全称是Graphic Processing Unit,中文翻译为"图形处理器".GPU是相对于CPU的一个概念,由于在现代的计算机中(特别是家用系统,爱打游戏的)图 ...

  4. gpu virtio_virtio-gpu介绍

    背景: 显卡的提升在虚拟化场景下一直是一个难以解决的问题.目前qemu中提供的显卡有2种:一种是cirrus显卡,一种是vga显卡.这两种显卡都是通过qemu来进行模拟的,也仅仅达到了能够让虚拟机使用 ...

  5. Adreno gpu相关工具介绍

    大家好,今天小白给大家简单分享几款Adreno gpu相关的开发工具,欢迎一起交流学习. 摘要:今天的移动计算设备,其性能之强大,是我们在几年无法预料到的.在几年前,我们仅仅能在PC和主机平台上享受到 ...

  6. GPU基本介绍与各GPU性能、价格比较

    1 GPU基本概念 1.1 CUDA CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA™是一种由NVIDIA推出的通 ...

  7. NVIDIA vGPU vApps/vWS/vCS适配GPU版本介绍

    NVIDIA vGPU 12.0版本-vGPU版本名称变化 - 注: 2021年1月生效 最新名称 NVIDIA Virtual PC (vPC) -曾用名称 NVIDIA GRID Virtual ...

  8. GPU Skinning 一:骨骼动画原理

    最近在为引擎升级64位的过程中GPU蒙皮也出现了异常,平常骨骼动画和网格蒙皮用的还是非常多的,但是底层的原理并没有深究过,想着还是有必要好好整理下这部分内容. 骨骼蒙皮动画 一般我们称为骨骼动画(Sk ...

  9. GPU instancing介绍

    从Unity5.4开始,多了一个叫做GPU instancing的功能.这个功能是做什么用的呢?下面做一个小例子来说明一下: 还是之前做 MaterialPropertyBlock的例子,在屏幕上面做 ...

最新文章

  1. 辛苦了一个下午和晚上,给Blog换了个新皮肤
  2. HDU1020 Encoding
  3. 电脑安装android2.0,电脑上怎么安装使用安卓系统
  4. 模仿黑产破解12306验证码,验证码产品的未来是?
  5. 基础知识回顾——异常处理
  6. CF989E A Trance of Nightfall(概率+矩阵快速幂优化+倍增)
  7. 如何使用Wondershare Recoverit for Mac从崩溃的 Mac 恢复数据?
  8. IDA工具各个功能总结
  9. Jenkins中执行batch和Python
  10. monkey_使用_脚本编写
  11. 各大浏览器的最小字体与默认字体
  12. 利用IDEA模板快速生成swagger注解
  13. python读写文件——文件指针操作
  14. 国家图书馆认证中国长峰制定的《婴幼儿血管瘤临床路径》
  15. 赢在2022,面试官常问的软件测试面试题总结
  16. Android开发动态的监听网络状态的变化
  17. 安迪的第一个字典(Andy‘s First Dictionary,UVa10815)
  18. 1.2 SpringBoot构建Docker镜像并推送到Harbor
  19. win7防火墙端口开放
  20. 利用MODIS TOOL批量重投影MODIS

热门文章

  1. RAID磁盘阵列、mdadm、群晖软RAID
  2. php代码优化思路,PHP优化思路 Web程序 - 贪吃蛇学院-专业IT技术平台
  3. 50条经典(学生,课程,成绩,教师)表SQL语句~~值得一看!
  4. 摩托车闪光控制器专用芯片MST1172
  5. 【Python】python数据库编程
  6. Redis设计与实现——对象
  7. 《Linux驱动:Nor flash驱动看这一篇就够了》
  8. QT中QVector的使用
  9. 常用的服务器响应的状态码
  10. 【python学习】-字典学习(访问字典所有键与值、修改与更新字典、删除字典)