GPU Skinning介绍
最近通过朋友介绍,知道了一个叫做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介绍相关推荐
- GPU Skinning旋转指定骨骼
1)GPU Skinning旋转指定骨骼 2)关于UGUI画布重建以及动静分离 3)如何设定游戏内存的峰值来保证不闪退 4)使用UsePass遇到Keyword丢失的问题 5)Unity Shade ...
- gpu服务器各硬件的全面认识ppt,GPU服务器介绍.ppt
文档介绍: --杨跃江2018.3.29宝德GPU服务器介绍Q4'18Q3'19Q2'18Q3'18Q1'18Q2'19Q1'19通用双路服务器Q4'19PR4764GW双路4U4GPUPR2764G ...
- 计算机显卡(GPU)基础介绍
1.介绍:GPU全称是Graphic Processing Unit,中文翻译为"图形处理器".GPU是相对于CPU的一个概念,由于在现代的计算机中(特别是家用系统,爱打游戏的)图 ...
- gpu virtio_virtio-gpu介绍
背景: 显卡的提升在虚拟化场景下一直是一个难以解决的问题.目前qemu中提供的显卡有2种:一种是cirrus显卡,一种是vga显卡.这两种显卡都是通过qemu来进行模拟的,也仅仅达到了能够让虚拟机使用 ...
- Adreno gpu相关工具介绍
大家好,今天小白给大家简单分享几款Adreno gpu相关的开发工具,欢迎一起交流学习. 摘要:今天的移动计算设备,其性能之强大,是我们在几年无法预料到的.在几年前,我们仅仅能在PC和主机平台上享受到 ...
- GPU基本介绍与各GPU性能、价格比较
1 GPU基本概念 1.1 CUDA CUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA™是一种由NVIDIA推出的通 ...
- NVIDIA vGPU vApps/vWS/vCS适配GPU版本介绍
NVIDIA vGPU 12.0版本-vGPU版本名称变化 - 注: 2021年1月生效 最新名称 NVIDIA Virtual PC (vPC) -曾用名称 NVIDIA GRID Virtual ...
- GPU Skinning 一:骨骼动画原理
最近在为引擎升级64位的过程中GPU蒙皮也出现了异常,平常骨骼动画和网格蒙皮用的还是非常多的,但是底层的原理并没有深究过,想着还是有必要好好整理下这部分内容. 骨骼蒙皮动画 一般我们称为骨骼动画(Sk ...
- GPU instancing介绍
从Unity5.4开始,多了一个叫做GPU instancing的功能.这个功能是做什么用的呢?下面做一个小例子来说明一下: 还是之前做 MaterialPropertyBlock的例子,在屏幕上面做 ...
最新文章
- 辛苦了一个下午和晚上,给Blog换了个新皮肤
- HDU1020 Encoding
- 电脑安装android2.0,电脑上怎么安装使用安卓系统
- 模仿黑产破解12306验证码,验证码产品的未来是?
- 基础知识回顾——异常处理
- CF989E A Trance of Nightfall(概率+矩阵快速幂优化+倍增)
- 如何使用Wondershare Recoverit for Mac从崩溃的 Mac 恢复数据?
- IDA工具各个功能总结
- Jenkins中执行batch和Python
- monkey_使用_脚本编写
- 各大浏览器的最小字体与默认字体
- 利用IDEA模板快速生成swagger注解
- python读写文件——文件指针操作
- 国家图书馆认证中国长峰制定的《婴幼儿血管瘤临床路径》
- 赢在2022,面试官常问的软件测试面试题总结
- Android开发动态的监听网络状态的变化
- 安迪的第一个字典(Andy‘s First Dictionary,UVa10815)
- 1.2 SpringBoot构建Docker镜像并推送到Harbor
- win7防火墙端口开放
- 利用MODIS TOOL批量重投影MODIS