what als why als
als是解决了这样一个痛点:用一套程序非常自然和流畅的模拟人(二足)在地面上的基础运动(走跑蹲翻滚攀爬脚步手部ik简称locomotion),并且在各种情况下不同动作之间自然流畅的融合在一起。同时支持相对自由的定制化。这里说的定制化就是扩展性。
育碧的motion matching跟als是同样的作用,只不过自由度更高点,实现原理也不一样。
als在动画pipline所处的位置:
内容产出者(比如动画美术用maya等)做出很多个动画序列文件。程序开发者需要一个动画处理系统(als,motion matching,自己写的等),在玩家各种操作的情况下,做出最正确的动作给与玩家反馈。这个过程中要求角色在各个动作切换期间给玩家的感觉是自然流畅的。
优点:性价比高(能达到顶级的效果,技术和人力投入少,结构简单清晰,门槛低),免费。
缺点:定制化不是那么自由。locomotion运动的风格很难改变(强硬改变某些动作会引起和其他动作融合不自然流畅的现象),有点像固定渲染管线。
als每帧更新流程和原理
简单点讲,als先把locomotion做的非常完美,就是你操作起来看起来和真人差不多,这个就是als厉害的地方,很多人融合不好这个。有这个底子了,再把我们想要定制化的融合到locomotion中。就是这个原理会限制定制化的自由度。因为如果想用als的locomotion只能和它blend。
上面讲到的完美的locomotion是由base layer完成的,base layer减去base pose 得到一个差值,我们想要的overlay pose再aditive这个差值,就把als的locomotion融合到我们想要的姿势中了。
在overlay pose和locomotion融合的过程中,als引入了curve,一个curve就是一个权重,代表overlay和locomotion融合的比重。一个curve管理一个部位。
然后身体各个部位之间融合,按骨骼融合的,以leg为例
上图中1就是curve,用来决定是用als的动作还是overlay的动作,或者两者按权重融合。接下来就是身体各个部位融合,比如leg就是我拿layering_legs决定的动作和Layering_Pelvis决定的动作,这个两个动作的pelvis骨骼之间融合,深度是0混合,这个Blend Depth -1代表这个骨骼所有孩子孙子都参与blend,0代表只有自己融合,1代表我和我下一级的孩子参与融合,以此类推。
以上过程每帧都执行,而且每帧的locomotion的动作是不一样的。
注意观察,这里有个leg的slot,可以利用这个slot 去播放一个腿部的montage,这时候这个montage是融合到als的locomotion中的,比如在奔跑的时候播放一个踢腿的montage,就会跑着突然踢腿一下。这个也是als可定制化的一方面。
懂了以上的更新流程,就可以达到能灵活运用als的水平了。
als难点base layer
这个部分就是locomotion的部分。是als各种基本动作之间融合的逻辑所在,是als的核心竞争力所在。如果说个人重写,超越不超越als就看这一部分写的好不好,同时还要保证一定的定制化能力。
base layer 倒着看,是从大块往小块更细分的看,base layer 主要就是状态机嵌套状态机,先确定大的块,再确定这个大块中的某个小块直到,能确定某个animation sequence或者blend space。
base layer是由数据驱动的,这些数据是跟人物的运动数据,比如加速度,转角等物理数据。每帧都更新。
base layer逻辑过于复杂,以后单开个章节一块一块的详细介绍。
如果懂了base layer 同时您具有动画专业的能力,具有观察人物动作切分的观察能力,就可以自己写出一个类似的locomotion,我打算写一个四足版本的als。
(我建的als QQ群号 922318447)