实现效果
参考主要来源是Unite Copenhagen 2019关于Extending the Animation Rigging的介绍,用到里面的Jiggle Chain代码。给low poly风格的树木用MAYA加上简单的骨骼,在unity中绑上Jiggle Chain,再用动画修改Jiggle Chain参数,模拟了简单的树枝晃动。
另外沿用了以前写好的模拟衣物晃动的Shader,给场景的花草也做了晃动模拟,shader原理几乎一致。
Shader动画
与衣物晃动Shader同样是用噪声改顶点位置,这次是用模型的Y轴坐标控制噪声在竖直方向上的渐变,因为花草迎风摆动是越接近根部摆动幅度越小的。
Jiggle Chain运用
尝试Damped Transform
最初尝试使用了Animation Rigging Package自带的Damped Transform,结果发现对于弹性很大的物体用Damped Transform会体现不出回弹之后的抖动。
由上图可看出枝条只是延时做出“归位”动作,而没有因为回弹的残留速度造成“晃动”。
现实中树木的摇摆并不是树干带动枝条,相反地是面积较大的枝条受风力摇摆而带动树干晃动,如果用DampedTransform则是要根节点运动得比末端节点更剧烈,于是这并不适用。
Jiggle Chain特点
虽然Jiggle Chain也有Damped参数,但驱动它运作的并不必是根节点的运动,可以是外力。下图先用根节点的运动可以看出与Damped Transform的区别:
晃动幅度是越靠近末端越被扩大,更接近“抖动”这个概念。但是实际上运用的时候并不是对根节点做动画,因为要模拟的并不是剧烈撼树效果,而是缓慢的迎风晃动。Jiggle Chain的外力参数正好派上用场。
用动画Clip来动态修改JiggleChain的外力大小或方向,即模拟的风力忽大忽小,能做出树木摇摇晃晃的效果。