6. 读取动画

本贴最后更新于 2461 天前,其中的信息可能已经时移俗易

流星的动画架构还是相当的精炼的。他共用了一部分动画。然后每个角色还有自身的特色动画。
要说动画,至少有 4 个组成部分
1,骨骼
2,模型与骨骼绑定的蒙皮数据-骨骼权重
3, 骨骼的帧
4,动画定义 多少帧-多少帧 是否循环
骨骼 就是 p0.bnc 文件 bnc 文件,保存的是 TPOSE 下,每根骨骼的姿势
模型与骨骼绑定的权重 p0.skc 文件 此文件即第一章里加载的,只是那时候是读取静态文件,而这里还需要读取骨骼权重
骨骼的帧 p0.amb character.amb 文件,前者是角色特有的动画,后者是招式动画,招式动画是全角色公用的
动画定义 p0.pose 文件
有了这四者,那么动画就可以出来,无法使用 u3d 的动画格式(要使用就必须自己写 max 脚本转换,之前写过一个脚本提取了 character.amb 里的 17071 帧动画,电脑开了一天跑那个 max 脚本),所以直接用代码实现自己的动画读取播放等,虽然简陋。

有几点基础要首先讨论
1 骨骼动画的坐标系,原流星是右手坐标系,要换到左手坐标系,不光模型要换,连骨骼的 位置,旋转,也需要相应的转换
这里的转换原则是
位置 转换后的坐标(x,y,z) = 转换前的坐标(x, z, y) y 和 z 互换
旋转 转换后的四元数(w,x,y,z) = 转换前的四元数(w, -x, -z, -y) x = -x ;y = -z ;z = -y

2 动画间的过渡
说动画间的过渡,其实意思应该是 2 个关键帧之间插入一些普通帧,让 2 个关键帧看起来不是瞬间就发生了变化,这部分也是有一定麻烦的
因为插入多少帧,多了很平滑但是动作看起来缓慢,少了普通帧缺少细节,类似防御,刚一点,就从 Idle 切换到了 Defence 姿态,中间的普通帧都没有了
还有一点是插入的普通帧姿态怎么算的,一般位移就用 vector.lerp,旋转就用 quaternion.slerp 来从 2 个关键帧中按播放了多少普通帧读取

3 动画的位移
有些动画,是带位移的,并且播放完之后自身的位移就是动画的位移后的位置了,类似匕首的大招,这个位移,在原本 U3D 内的动画系统可设置的时候,点一个 apply root motion 就可以了。可是这里却得自己去实现。
而且有些动画,类似大刀和双刺的绝招,我不知道他是怎么实现的,好像在动画中还可以参照敌人的位置,进行一个修正,导致后续的招式会不断的朝目标去攻击,这一点是目前没有做到的(可能原系统不是这么做的)

4 角色的重力
重力这部分涉及到角色跳跃的一些物理反馈,类似在墙壁上飞檐走壁时,有一个向下的加速度,导致角色不能无限飞檐走壁,这部分比较复杂,也还未解决

5 角色的阻挡
带位移的动画会遇见有阻碍的情况下,应该是无法穿透阻碍的,比如正对着墙壁,使用匕首的绝招,应该是抵着墙壁发出大招,而不会穿越墙壁,由于动画没办法得自己写弄的异常麻烦,这里直接使用 characterController 控制角色,当动画发生位移的时候,调用
characterController 的 move 函数,即可被阻挡

代码是在太多无法一一讲解,还是贴视频吧
点击查看武器绝招动画
源工程就不贴了,这部分内容需要兴趣,这里只提供各种文件格式的解释,如果有兴趣也可以给我留言,实在需要源工程,之后会提供。

amb 文件
5 字节文件头
4 字节骨骼数量 bones
4 字节虚拟体数量 dummy
4 字节帧数 frames
4 字节 FPS(估计)
//对每一帧有如下代码读取
for (int i = 1; i < frames; i++)
{
4 字节标志位
4 字节帧序号
4 字节 x float 型
4 字节 z float 型
4 字节 y float 型
//这个 pos 是每一帧根骨骼的 localposition 其他骨骼在动画帧中是只有旋转,而无移动的。
//循环中嵌套循环
//每一帧的每一个骨骼
for (int j = 0; j < bones; j++)
{
//四元数的开始
4 字节 w float 型
4 字节 x float 型 取负,坐标系转换为左手
4 字节 z float 型 取负,坐标系转换为左手
4 字节 y float 型 取负,坐标系转换为左手
//读取完了后 Quaternion = new Quaternion(x,y,z,w)
}
//每一帧的每一个虚拟体
for (int j = 0; j < dummy; j++)
{
流从当前位置往后移 5 字节
4 字节 x float
4 字节 z float
4 字节 y float
4 字节 w float
4 字节 x float 取负
4 字节 z float 取负
4 字节 y float 取负
localposition = new vector3(x,y,z)
localrotation = new Quaternion(w,x,y,z)
}
}
其他文件都是文本行文件
实际上创建一个空对象 meteorUnit 放到原点,并且置 0(位置圆点,旋转 Quaternion.identity,缩放 v3.one) 加入 skinmeshrenderer 组件然后把骨骼和虚拟体从 bnc 文件里读出来并且创建到一个树目录上(树的根是 meteorUnit),让 skinmeshrenderer 的 bone 指定到这个骨骼数组,不包括虚拟体
然后通过 skc 加载顶点数据 mesh 以及贴图和 uv,并且设置好权重,之后把所有骨骼的 worldtolocalmatrix 取出得到 bindpose 数组,也即世界到本地变换矩阵
如果不用 skinmeshrenderer 就没有这些东西了,也就是一个顶点,受到数个骨骼影响,每个的权重 × 其旋转矩阵 × 顶点坐标=经过骨骼影响后顶点的坐标,没有太仔细写过细节,大致就是顶点经过几个矩阵 每一个矩阵代表一个骨骼,1-4 个骨骼,每个不同的权重,就可以计算出某一个帧下,全部顶点的坐标,这样看起来就是模型动起来了
然后读取 pose 文件,pose 文件类似一个文本的动画列表文件,其没有名称只有序号,内部定义了从哪一帧开始到哪一帧结束,而且指定了源文件是 从 p0.amb 里读还是 character.amb 里读,source 0 表示 character.amb source 1 表示 p0.amb
类似 p0.pose 中的
Pose 0
{
source 1
Start 1
End 65
LoopStart 1
LoopEnd 65
}
这个指的是 Idle 动画 使用 p0.amb 文件,从第一帧开始 到第六十五帧结束 而且是循环类型的动画。
如此,就可以读取动画了

相关帖子

3 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • someone

    我的QQ:365082218,倒是有个MAX脚本可以提取任意动画,到时候给你吧

  • 其他回帖
  • someone

    一直在找流星.net的amb文件相关信息,直到看到了博主的pos。比我想象中的复杂很多,也与现代游戏的动画很多不一样。非常感谢博主的分享了,眼界开阔了不少。本人空余的时候摆弄下ue4,一直想把流星.net的动作资源应用上,现在暂时用剑灵的资源,恳求博主可以分享一下相关的max脚本或者是amb导出的fbx动画文件,感谢感谢

    同时也希望可以获得博主的qq号码,同是流星.net爱好者期盼可以交流交流。鄙人书读的少,如言语有不当之处还望多多包涵与指教。:smile:

  • someone

    感谢博主的分享,居然能把一堆二进制分析出格式和规律来,佩服。这个文件一直是修改盲区,别的大都能懂但就是这个找不到资料。

    我和一楼情况差不多,特别希望能提取到流星的动作文件做下游戏复刻或者改善,所以特别希望楼主能够分享下提取后的动作文件,或者提取脚本。

    尝试加您QQ后一直没有通过,所以只好在此打扰您,希望不要介意。

推荐标签 标签

  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖 • 1 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    5 引用 • 15 回帖 • 224 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    169 引用 • 799 回帖
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    164 引用 • 594 回帖 • 1 关注
  • Swagger

    Swagger 是一款非常流行的 API 开发工具,它遵循 OpenAPI Specification(这是一种通用的、和编程语言无关的 API 描述规范)。Swagger 贯穿整个 API 生命周期,如 API 的设计、编写文档、测试和部署。

    26 引用 • 35 回帖 • 12 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖 • 1 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 10 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 11 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 46 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    164 引用 • 407 回帖 • 526 关注
  • abitmean

    有点意思就行了

    21 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    180 引用 • 447 回帖 • 2 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 317 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 7 关注
  • danl
    61 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 682 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 53 关注
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖 • 1 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 132 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖
  • sts
    2 引用 • 2 回帖 • 146 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    940 引用 • 1458 回帖 • 156 关注