注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

穷到掉渣的超级奶爸阿赵

阿赵的博客

 
 
 

日志

 
 

最后谈谈stage3D的骨骼动画性能问题  

2014-02-20 22:28:34|  分类: Flash3D技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
先来看看成果:
最后谈谈stage3D的骨骼动画性能问题 - 阿赵 - 穷到掉渣的超级奶爸阿赵
 为了避免别人说我拿很简单的模型配很简单的骨骼来达到同屏数量很多,我用了游戏《三国无双》里关平的模型,自己修改了模型和贴图,蒙皮然后调了站立、跑步、4个攻击动作,最后这样同屏的渲染每个模型播放不同的动画。。现在是250个人同屏,能保持60帧每秒,加多点也可以,大概极限是270个左右吧。
这次使用了自己定制的azhao格式模型文件。还是使用Away3D框架,不过对于骨骼动画方面做了比较大的修改,所以达到了这样的性能。这个结果已经是2、3个月之前做出来的了,这样的测试对于实际项目的意义不算太大,因为没有加入场景物体,没有特效,也没有通讯和各种游戏逻辑处理,所以一直没有拿出来和大家分享。不过这次有可能是我最后一次纠结stage3d骨骼动画的性能问题了,所以最终还是拿出来说一说,毕竟比起之前写过博客介绍优化的时候,性能是大幅度的提升了。
之前曾经分析过很多种的优化可能,包括了减少推送agal的矩阵数据,把大部分的工作交给gpu做运算等。后来那些测试全部都做过了,发现实际的优化效果并没有想象中的明显,但为了把矩阵拆分成几个向量来提升骨骼支持数,还加重了cpu方面的运算。所以后来找了一条新的路来走,使用drawcall来换取骨骼支持数,在可以忍受的时候同个网格只包含支持数目以下的骨骼,如果实在要超出,那么就单独某些部分单独蒙皮。这样做,可以在正常情况下忽略了骨骼支持数。然后在单个网格的骨骼动画方面,先用bindpose把顶点相对于骨骼的相对坐标算好,保存在模型的网格信息里面,然后把骨骼动画的关键帧矩阵分别求逆矩阵然后存起来,最后的事情就简单了,每一帧只需要把对应的骨骼找出来,然后用相对坐标乘以保存好的关键帧矩阵,再乘以权重,就可以直接得出动画时顶点应该出现的位置了。
由于求相对坐标和关键帧矩阵的步骤在解析的过程就已经做了,而最后乘以坐标和权重得出最终结果那一步是在AGAL做的,所以实际上整个过程cpu只需要简单的查找数组然后提取相关数据推送给GPU就行了,没有任何的运算过程。这样整个动画的实现过程就变得非常的快了。用性能测试软件看了一下,最后到达性能瓶颈时,基本都是卡在等待进入下一帧时了,也就是都是硬件性能的瓶颈了。
估计这是最后一次纠结stage3D的骨骼动画性能了,之后如果还有机会继续做stage3D,需要解决的问题还很多。不过对于我自己来说,我更愿意去做Unity3D,那个做起了轻松愉快很多。
  评论这张
 
阅读(1131)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016