Away3d ---------------------------------------------骨骼动画优化
来源:互联网 发布:s7300编程电缆 编辑:程序博客网 时间:2024/05/16 16:59
用过Away3D的朋友估计都会发现,在Away3D里面使用超过一定骨骼数量的角色,当场景里面角色的数量稍微多一点,整个场景就会很卡。 对于这个现象,有两个层次的原因:1.Stage3D的VC缓存器数量的限制,造成了对需要占用VC的骨骼信息有限制。对于超过了限制数量的骨骼部分,Stage3D会把数据退回CPU计算。
一方面 通过对AnimationSetBase.cancelGPUCompatibility断点,发现了在SkeletonAnimator.testgpUCompatibility方法里面有检查是否需要退回CPU的判断。其判断的条件是:
if (!_useCondensedIndices && (_forceCPU || _jointsPerVertex > 4 || pass.numUsedVertexConstants + _numJoints * 3 > 128))
可以看出:
除了_useCondensedIndices ==false,还需要
1._forceCPU == true
2.一个顶点受到大于4个骨骼的影响。
因为每个va只能存xyzw四个数,按照Away3D的顶点着色器的处理,就只能最多一个顶点受到4根骨骼的影响。
3.已经使用的Vc,加上骨骼占用的VC,要少于128个。
由于Away对于骨骼 Transform推入GPU的计算是三个基向量,也就是占用3个缓存器,所以需要 骨骼数*3
因此为了避免骨骼动画由GPU计算被退回到CPU计算应该对最大骨骼数量及每个定点收到的骨骼影响数做限制,当骨骼数不够用时(例如为了实现较为复杂的动作效果所需骨骼数较多时 可对模型进行拆分保证每次渲染不被退回CPU计算)
另一方面 由于毎帧CPU都会计算每个动作所处的关键帧 权重值并根据这些数据重新计算 每根骨骼的矩阵信息并传给GPU做蒙皮,因此此处CPU计算仍然会是一个性能的重要影响。此处可优化的方向有两个: 1. 由于骨骼动画中经常使用的是相对父骨骼的位置旋转信息,基本不会对骨骼进行缩放,因此可将向GPU传入两个四元数(或者两个向量)代替传输矩阵,减少CPU GPU传输数据的总线带宽。 2. 对关键帧信息预计算并保存到内存,毎帧直接从内存中取得当前帧对应的关键帧信息,避免毎帧的CPU计算。
经过以上方面的优化,本人经历的项目中同屏人数可由140人增加190~200人左右
- Away3d ---------------------------------------------骨骼动画优化
- 【Away3D代码解读】(五):动画模块及骨骼动画
- ActionScript 3.0 学习(十八) away3D学习3 away3d骨骼动画相关笔记
- 【Unity】骨骼动画如何优化资源
- 【Unity3d】优化裁剪Unity骨骼动画,减少动画文件容量
- 骨骼动画
- 骨骼动画
- 骨骼动画
- 骨骼动画
- 骨骼动画
- 骨骼动画
- 骨骼动画
- 骨骼动画
- 骨骼动画
- 骨骼动画
- 骨骼动画
- 简单的骨骼动画、骨骼动画理论
- 骨骼动画(Skeletal Animation)
- 考试维护总结
- 图片延迟加载的实现
- Interpolator——各种插入器效果图
- @XmlElement与@XmlAttribute区别
- 怎样才能快速成为优秀的程序员
- Away3d ---------------------------------------------骨骼动画优化
- linux系统 安装jboss服务器
- 扩展Coroutine:自定义YieldInstruction
- 静下心来,寻找自我
- Activity的生命周期,BACK键和HOME键生命周期
- Java-帮助文档的制作
- android 常用小知识
- 【设计模式】学习笔记之设计原则
- C的函数声明和形参