这个工具的作用是同一种角色在同屏里面出现一大堆时,可以大幅度的降低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 结合 Instanced 高效实现大量单位动画

    GPU Skinning 与 Instance 蒙皮动画 计算骨骼信息 蒙皮 GPU Skinning CPU Skinning 与 GPU Skinning 实现方式 Skinning 类型 优点 ...

  2. GPU Skinning不生效问题

    1)GPU Skinning不生效问题2)勾选凸包报的警告问题3)Unity 2019 图片压缩格式选择4)Android Export打包对压缩的影响5)Android内存中的Unknown部分泄漏 ...

  3. U3D GPU蒙皮

    在U3D中默认情况下是使用CPU蒙皮的,在BUILDING SETTING中的others中可以设置为GPU skinning

  4. Unity3D安卓打包参数配置与兼容性的关系分析

    前言 在使用Unity3D工程导出安卓安装包的时候,往往会遇到兼容性的问题,针对某些机型,要么无法打开游戏,要么会出现卡机的现象.面对这种情况,我们可以调节相关的参数来提高兼容性. 为了了解在打包时候 ...

  5. Unity 5.4大赞:HTC Vive经典The lab渲染器开源

    HTC Vive提供了一个不错的免费VR demo,最近1周仔细体验了一番. 仔细看了其安装文件,竟然是Unity 5.4beta版本(通过查log,知道Valve公司用的是最新的5.4.0b11版本 ...

  6. FPS手游如何脱颖而出?看《CF手游》的性能突破之路

    WeTest导读 俗话说:用户体验不谈性能就是耍流氓. 在PC游戏上的性能问题并没有那么明显, 加个内存换个CPU或者刷个主频就能轻松搞定:到了手游时代后情况则显得比较严峻,捉襟见肘的内存使得资源加载 ...

  7. Unity 5 Game Optimization (Chris Dickinson 著)

    1. Detecting Performance Issues 2. Scripting Strategies 3. The Benefits of Batching 4. Kickstart You ...

  8. Unity Optimization UNITY优化关注列表

    这里主要罗列Unity引擎进行开发的应用或游戏,可以进行优化的各个关注点.(此文会持续更新) C# GC alloc Update LateUpdate Serialize String ToStri ...

  9. Unity MMORPG游戏优化经验分享

    https://mp.weixin.qq.com/s/thGF2WVUkIQYQDrz5DISxA 今天由Unity技术支持工程师高岩,根据实际的技术支持工作经验积累,分享如何对Unity MMORP ...

  10. Unite 2017 | 基于Animation Instancing的大规模人群模拟

    在Unite 2017的国内技术专场,Unity技术团队为参会者们带来了Unity引擎功能相关的技术分享.今天这篇文章,将由Unity技术支持工程师金晓宇为大家分享基于Animation Instan ...

随机推荐

  1. stm32f030 模拟IIC

    #define read_SDA (GPIOA->IDR&GPIO_Pin_10) >>10 //PA10 SDA#define set_SDA GPIO_SetBits(G ...

  2. bootstrap-select使用、relation-graph使用

    bootstrap-select 这里要实现的是带有搜索功能的select框, bootstrap 官网没有可以直接拿来用的.如下是官网给出的解释,带搜索功能的select需要自定义. 在网上找到了有 ...

  3. Excel Vlookup用法和常见报错#REF! #Value!

    VLOOKUP(E2,$A$2:$C$5,2,FALSE) E2 为选中查找的条件 $A$2:$C$5 1为需要查找的区域,这个区域一般是固定的,所以要加上$符号 2这个区域可以在前面加上SHEET2 ...

  4. 简介Hadoop

    Hadoop 简介 Hadoop 是什么 Hadoop 是一个提供分布式存储和计算的开源软件框架,它具有无共享.高可用(HA).弹性可扩展的特点,非常适合处理海量数量. Hadoop 是一个开源软件框 ...

  5. python 操作MongoDB pymongo

    python操作MongoDB 1.安装pymongo pip install pymongo 2.连接数据库 启动mongodb服务: 包含mongod.exe文件夹bin :shift+鼠标右键, ...

  6. .netcore 跨域问题

    CORS(跨域资源共享)是一种W3C标准,允许服务器放宽同源策略.使用CORS,服务器可以在显式允许某些跨域请求时拒绝其他跨域请求.CORS是相比其他跨域技术(比如JSONP)更安全.更灵活. ASP ...

  7. SAP ABAP 验证与替代

    1.校验与替代的作用 校验(Validation):在凭证保存前根据设置条件判断此凭证是否有效,其中可以按抬头.行项目或完全凭证来判断,然后再根据Validation设置的消息类型决定凭证是否允许保存 ...

  8. swift 应用内切换语言

    1:在project info中的locations添加需要的语言 2:创建Localizable.strings文件 点击右边的localization勾选需要的语言 3:创建InfoPlist.s ...

  9. #PHP #MySQL数据操作 #在线聊天 PHP实现在线聊天与MySQL的“增查删改”

    目录 1.目标图 2.项目简介 3.目录结构 4.建立MySQL表 5.实现过程 5.1 index.php 5.2 data.php 5.2 method.php 5.3  case.php 5.4 ...

  10. .net core 接收并存储客户端上传的文件

    1 文件是上传到Host,非上传到阿里云OSS 2 在Program.cs或StartUp中使用静态文件的中间件 public void Configure(IApplicationBuilder a ...