
3D Artist
鲁力
Li Lu
AN ARTIST FOR GAMES!
CHARACTER ARTIST, ANIMATOR, MAYA RIGGER, UE SHADER...
artistlilu@gmail.com
luli0810@qq.com
WeChat:18571848810

Characters & Animations




















Intro animations for above characters
Intro animation is the opening animation for each boss in the boss battle.
Boss的出场动画
Droid
Boss_PoisonCannon

This boss has 2 modes during the battle.
Tank mode is the default state. The boss uses his body to stick armors and gears and compose a tank.
Ooze mode is all armors and gears were completely shot down by players, the boss with a naked body.
这个boss在战斗中有两种模式。
1 坦克模式,boss的默认状态,boss用身体黏住零件和大炮来组装成坦克。
2 Ooze模式,boss在战斗中被玩家击落身上的零件后的状态。
When creating the tank mode animations, the character's body and chimney need to keep shaking to simulate the tank engine started. Every time for each clip, the animator needs to set a bunch of keyframes for several controllers to create animations, and it is hard for iterations in later work. In order to simplify the work, I created some expressions for controllers to auto-animate the chimney and armors shaking. I use the sin(X) multiply time and controller's transition and scales in the expression. For the secondary animations when it's shaking, I added some delay values in expressions for each bone.
当为坦克模式创建动画时,每个坦克模式下的动画角色身上的零件会一直抖动来模拟坦克引擎发动的状态。而创建这些动画会花大量的时间重复的给控制器设置关键帧,且为后续的修改产生大量的工作。为了减少工作复杂度,我用了表达式来简化工作量。在表达式中我将时间函数乘以控制器的位移和缩放属性,然后再乘以sin函数。并对每根子骨骼在表达式上添加了延迟系数来创建跟随的次级动画。


Expression
FKChimney_07_R.translateX = Pipe_ctl.translateX*0.2 + (1 *Pipe_ctl.bounce) * sin(2*3.1415*time*Pipe_ctl.Scale_frequency+Pipe_ctl.Scale_cache*2);
FKChimney_06_R.translateX = FKChimney_07_R.translateX*2 + (0.8 *Pipe_ctl.bounce) * sin(2*3.1415*time*Pipe_ctl.Scale_frequency+Pipe_ctl.Scale_cache*1.5);
FKChimney_05_R.translateX = FKChimney_06_R.translateX*2 + (1 *Pipe_ctl.bounce) * sin(2*3.1415*time*Pipe_ctl.Scale_frequency+Pipe_ctl.Scale_cache*1);
FKChimney_04_R.translateX = FKChimney_05_R.translateX*0.5 + (0.4 *Pipe_ctl.bounce) * sin(2*3.1415*time*Pipe_ctl.Scale_frequency+Pipe_ctl.Scale_cache*0.5);
FKChimney_07_R.translateY = Pipe_ctl.translateY*0.5;
FKChimney_06_R.translateY = FKChimney_07_R.translateY;
FKChimney_05_R.translateY = FKChimney_06_R.translateY;
FKChimney_04_R.translateY = FKChimney_05_R.translateY;
FKChimney_07_R.translateZ = Pipe_ctl.translateZ*0.5;
FKChimney_06_R.translateZ = FKChimney_07_R.translateZ;
FKChimney_05_R.translateZ = FKChimney_06_R.translateZ;
FKChimney_04_R.translateZ = FKChimney_05_R.translateZ;
FKChimney_07_R.rotateZ = Pipe_ctl.rotateZ*0.3;
FKChimney_06_R.rotateZ = FKChimney_07_R.rotateZ;
FKChimney_05_R.rotateZ = FKChimney_06_R.rotateZ;
FKChimney_04_R.rotateZ = FKChimney_05_R.rotateZ;
FKChimney_07_R.rotateY = Pipe_ctl.rotateY*0.3;
FKChimney_06_R.rotateY = FKChimney_07_R.rotateY;
FKChimney_05_R.rotateY = FKChimney_06_R.rotateY;
FKChimney_04_R.rotateY = FKChimney_05_R.rotateY;
FKChimney_07_R.scaleY = 1+(0.4 *Pipe_ctl.Scale_amplitude) * sin(3.1415*time*Pipe_ctl.Scale_frequency-Pipe_ctl.Scale_cache*0.8);
FKChimney_06_R.scaleY = 1+(0.3 *Pipe_ctl.Scale_amplitude) * sin(3.1415*time*Pipe_ctl.Scale_frequency-Pipe_ctl.Scale_cache*0.7);
FKChimney_05_R.scaleY = 1+(0.2 *Pipe_ctl.Scale_amplitude) * sin(3.1415*time*Pipe_ctl.Scale_frequency-Pipe_ctl.Scale_cache*0.6);
FKChimney_04_R.scaleY = 1+(0.1*Pipe_ctl.Scale_amplitude) * sin(3.1415*time*Pipe_ctl.Scale_frequency-Pipe_ctl.Scale_cache*0.5);
FKChimney_07_R.scaleZ = 1+(0.4 *Pipe_ctl.Scale_amplitude) * sin(3.1415*time*Pipe_ctl.Scale_frequency-Pipe_ctl.Scale_cache*0.8);
FKChimney_06_R.scaleZ = 1+(0.3 *Pipe_ctl.Scale_amplitude) * sin(3.1415*time*Pipe_ctl.Scale_frequency-Pipe_ctl.Scale_cache*0.7);
FKChimney_05_R.scaleZ = 1+(0.2 *Pipe_ctl.Scale_amplitude) * sin(3.1415*time*Pipe_ctl.Scale_frequency-Pipe_ctl.Scale_cache*0.6);
FKChimney_04_R.scaleZ = 1+(0.1*Pipe_ctl.Scale_amplitude) * sin(3.1415*time*Pipe_ctl.Scale_frequency-Pipe_ctl.Scale_cache*0.5);
chest_Ctl.translateY = chest_Ctl.A_translateY + (1 *ArmorVisibility_Grp|ArmorVisibility.BodyShake_Bounce) * sin(3.1415*time*ArmorVisibility_Grp|ArmorVisibility.BodyShake_frequency+ArmorVisibility_Grp|ArmorVisibility.BodyShake_Cache*1);
skirt_03_Ctl.translateY =skirt_03_Ctl.A_translateY + (0.8 *ArmorVisibility_Grp|ArmorVisibility.BodyShake_Bounce) * sin(3.1415*time*ArmorVisibility_Grp|ArmorVisibility.BodyShake_frequency+ArmorVisibility_Grp|ArmorVisibility.BodyShake_Cache*1.5);
skirt_02_Ctl.translateY =skirt_02_Ctl.A_translateY + (0.4 *ArmorVisibility_Grp|ArmorVisibility.BodyShake_Bounce) * sin(3.1415*time*ArmorVisibility_Grp|ArmorVisibility.BodyShake_frequency+ArmorVisibility_Grp|ArmorVisibility.BodyShake_Cache*2);
Boss_PoisonCannon animations
Tank mode

Intro animation

Idle

Walk


QuickShoot

PowerShoot

Summon

Assemble

Faint
Ooze mode

Grab

Faint

Recoil
