- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实时骨骼合并介绍
方案选择 骨骼合并最终方案 添加创建Merged CharModel的中间流程。 增加Merged CharModel的Cache管理池。 * 骨骼合并流程 Rope配置方案 装备配置数据中添加MergeSkeleton键值 确保Rope绑定的骨骼在模型数据中的存在 骨骼命名按装备部位区分,防止同名骨骼冲突 * 骨骼合并流程 预解析流程 换装时,获得绑定装备组合。 解析每个装备数据定义文件(.cdf),获得MergeSkeleton键值。 键值为1时,将该数据文件加入骨骼合并列表中。 当收集的骨骼合并列表不为空时,进入下个合并数据环节,否则直接跳过骨骼合并流程。 * 骨骼合并流程 骨骼合并流程主要包括: Rope配置数据合并 Rope骨骼结构数据合并 骨骼合并在创建角色模型(CharModel)的时候进行。 骨骼合并基于文件预处理数据 Rope配置:CDF文本数据 骨骼数据:CContentCGF数据 * 骨骼合并流程 合并Rope配置数据 * 骨骼合并流程 合并骨骼数据流程 基于骨骼名字(Hash码)检索。 寻找共同的父(Parent)节点。 如父节点存在,则在主骨架的父节点下添加新的子(Child)节点树。 不存在则继续向上检索,并扩展子节点树。 * 骨骼合并流程 骨骼合并图解 * 骨骼合并流程 创建新的合并角色模型(CharacterModel) 动画数据共享 创建新的合并角色实例(CharacterInstance) 创建Skeleton Pose和Skeleton Anim 物理化Rope Entity 代替原来的角色实例 * 优化方案 骨骼合并流程留下的坑 破坏模型数据的共享机制 重新创建角色实例导致的换装流程性能下降 模型数据拷贝导致的内存增长 ….. 这只是开始…… * 优化方案 内存问题分析 由于基础角色模型数据共享机制被破坏。每创建一个角色实例(Character Instance)就有可能产生和维护新的角色模型数据,内存压力大。 如何优化角色模型数据内存 角色模型数据分析: 骨架结构数据:必须保留 动画数据: 共用数据,可考虑共享 蒙皮网格数据:基础骨骼数据不需要蒙皮数据 * 优化方案 模型动画数据共享机制 CE原有框架 CharacterModel与AnimationSet(动画数据)是一一对应的 CharacterModel是可共享的,对应的动画数据也是可共享的 骨骼合并之后 CharacterModel的共享被破坏,动画数据成为内存占用的重灾区。采用动画数据共享机制尤为重要。 * 优化方案 模型动画共享机制 动画模型数据改为智能指针形式。 在创建第一个基础骨架数据模型时初始化对应动画数据。 此后创建的数据里只需要使用智能指针引用动画数据即可。 限制条件 需要合并的骨骼必须是Rope骨骼。 * 优化方案 不做SkinMesh的合并 简化模型合并算法: 由于基础骨骼模型不包括Skin Mesh,仅涉及骨骼合并,装备模型上的Skin Mesh不需要参与合并。 SkinMesh可以通过Skin Attachment(即换装流程)绑定角色实例,避免不必要的内存开销和数据拷贝。 * 优化方案 性能问题分析 创建角色流程中增加了骨骼合并流程,增加了CPU开销。 例如:城镇中大量角色的进入和退出。 换装流程会涉及到重新创建角色的流程。 例如:角色在商城/锻造都涉及到频繁的装备切换。 骨骼合并流程导致创建角色的流程开销更大,执行更频繁,导致客户端卡顿。对应的优化不可避免。 * 优化方案 优化的着眼点: 减少创建角色实例的次数 城镇角色频繁进出的情况 角色实体缓存功能 (Entity Cache) 角色频繁换装的情况 装备数据预处理,剔除不必要的骨骼合并流程 减少创建角色流程的开销 骨骼合并阶段 合并模型数据缓存机制。 * 优化方案 合并模型数据缓存机制 以一套装备为单位,缓存Merged Model数据。 每套装备的键值取自装备内每个模型文件名的Hash码列表。 换装时,先从缓存中寻找已创建的模型数据,跳过骨骼合并流程。 * 优化方案 其他优化手段: 多线程后台加载 减少主线程骨骼合并的开销。 在角色未创建之前,只显示默认内衣套。 延迟换装 主要是针对城镇其他玩家的换装 控制换装的频率,减少单位时间内创建次数。 优化永无止境。。。 * 总结 好处 解决了原框架内rope配置的数量限制。 减少了rope骨骼的资源占用。 多出来的骨骼资源用于捏脸,表情动画。 扩大了rope骨骼的使用范围。 用于头发,袖子,裙摆等。 美术制作Pipeline更加方便快捷。 * 总结 坏处 破坏了CE原有的模型共享机制,带来一系列内存开销和性能下降的严重问题。 改变了模型加载框架结构,造成暂时的功能后退和大量bug。对项
文档评论(0)