之前看了Crytek一个talk讲他们终于要慢慢换掉让备受诟病的Mannequin动画系统,着手研发新的更有拓展性和灵活性的新的animation graph。
https://www.youtube.com/watch?v=J0eCJ2cAChI&t=1s
前者确实比起UE4和Unity3D的动画系统更不太 user friendly,
首先命名法则不是显而易见:
- fragmentId 指的是一个State或一个Action(走,跑,跳)
- FragTag指的是这个state或Action中的一种变化(欢快走,喝醉走,受伤走)
- 还有Scope相当于一个抽象概念部位,如上半身,下半身
- ScopeContext对应一个asset文件,entity/char/anim db
(Mannequin指的是卖衣服那种假人,但是飞机大炮什么的也是这么model;Character指的是人吧,但是枪支武器也是modeled as character,乍一听是有点怪)
State Machine的维护和代码的职责范围不是非常明确,很多flags散作一团那丢给程序员。当然德国人大脑memory是比较大的,喜欢把很多东西先load在大脑里,然后再在很多东西里头reason。他们的桌游就可以反映这个特色,rule非常形式化。所以这样的构架在追求elevator pitch的美国商业化社会会被看作意大利面代码,当然稍微用不好确实是非常混乱,效率低下的。
当然本质上这些动画引擎都是在解决相同的问题:
- 状态转换和其过程中的blending
- 和其他模块的沟通和sync up(比如物理模拟的结果)
- Attach其他物体, propagate状态,局部的或者是整体的
- 具有一定的灵活性,同时有不同高度的抽象性定义和组织管理(gameplay level?上下文level?动画状态Level?源文件level?)
Crytek的解决方式,有点类似UE4 的BP。工作流程类似shader,但不仅仅是通过一系列数学变换改变数据,又多了一维时间轴做各种blending
为此他们发明了一个DSL,一个新的functional langauge。
前一阵子和某火箭公司接触,也闲聊到他们在做一个内部语言,这样可以让其他学科的人方便操控火箭。这听起来很胆大,但是想想应该复杂程度不会比一套脚本语言控制xbox box controller复杂太多吧。都是一些列的sensor和控制输入。
去年开始就在业余写一个新的游戏引擎,用vulkan PBR + glTF格式。动画这个方面是一直感兴趣的。
刚好最近也在看UE4 BP虚拟机, compiler和一些6502的东西,感觉似乎可以come together着手写一个新的语言?
https://www.cnblogs.com/ghl_carmack/p/6060383.html
https://www.unrealengine.com/en-US/blog/unreal-property-system-reflection
https://www.youtube.com/watch?v=qJgsuQoy9bc&t=243s
https://www.youtube.com/watch?v=fWqBmmPQP40&t=887s