Sprint Blog

Sprint 6 Gobby/Robot Riot

This sprint, I started off in a new team! Gobby needed a new rig because the last one had a few issues that needed updates. I began from scratch with the pre-existing arm model by unbinding the ski  and replacing the joints. The previous rig had an inconsistent joint orientation that needed to be aligned because every time an axis was rotated, none of the fingers would follow in the same direction. Joint orientation is important because it will determine where the joint will translate/rotate based on its direction. After placing all of the joints, I skinned it to the mesh and smoothed out the weights so that the model moves accordingly to the bones. I also added an extra joint in the elbow so that the point of the elbow stays intact instead of getting lost in the arm whenever the arm bends. This is known as a corrective joint, which helps improve the deformation of the skin when it moves. 


The rig was functional now, but I wanted to make sure it was easy for the animator to use! I added controls for almost every joint, so they don't have to select individual joints to keyframe. Additionally, I included some set-driven keys in the attribute editor. Set-driven key is another way of linking one attribute to another. In the wrist control, there's an auto spread and curl action available to the animator if they are looking for a quick way to animate the fingers without having to individually manipulate each joint. That being said, Gobby's arm was ready for animation!


Back to Robot Riot! We finished all of the basic animations for all four robots. What else was there to animate now? An awesome sudden death cut scene of course. There was a Western style level in the game, and I was asked to animate a scene that would play right before Sudden Death happens between the players. I referenced a snippet of this clip for the animation. 


 They asked that I keep the scene brief (under 10 seconds). So I approached the animation using both methods I previously applied. In the first two camera shots, I went straight to spline when keyframing each pose. Spline is the process of smoothing out each curve between two keyframes. There wasn't much complex movement besides a slight hand twitch and a subtle hover. The most I had to do was offset the keyframe timing to get some overlapping action. In the last shot, I decided to block out the poses to establish key frames and be more precise with timing. I eventually splined the third shot and refined it once I was happy with the movement of Rem and Tanker pointing their guns at each other. 


Then it was time to get extra technical again! I added the weapons using constraints. I recently learned from another project that I could keyframe turning on and off constraints. Constraints will usually break if attached to more than one moving object at a time. But the gun had to float with the bots' root control at the same time, so it looked like it was attached to the hovering body rather than floating on its own. I created a hierarchy of three: the gun model at the bottom, a controller to adjust the gun's position, and a locator on top, which is the constraining object. The locator within the gun's hierarchy was attached to Tanker's body and hand simultaneously. Now the locator had two constraint values that could be keyframed. Once Tanker reaches the gun, the body constraint will turn off while the hand constraint turns on. I repeated the same step for Rem's gun and also gave Tanker a cowboy hat that one of the modelers made. 

Once it was finished, I imported the animation data into Unity. It was put together in a sequencer and recorded into a full scene. Then finalized in Premiere Pro to add the Sudden Death text.




Sprint 5 Robot Riot

This sprint, I finished off the rest of Tanker’s animations! I started off with bot mode since the rig only had 2 controls. It was extremely fast to animate since I only had to worry about the main body and thrusters. I animated a forward hover, backward hover, side strafes, a jump, and an idle. L3 bot mode from two sprints ago had the same actions, so I referenced what I had previously animated and incorporated that into Tanker. The main thing was timing, where I put each key frame and how long the animation itself was. 


Then it was time for something a little different! One of my cards asked for a transform animation for tanker to transition between bot mode and combat mode. I wasn’t exactly sure how to go about it at first, but with the help of the other animator on the team, he showed me a video of a human spinning into a wolf form. I tried to replicate the same effect for Tanker by animating both modes on top of each other so that they have the same timing to transition into the other. On top of that, there will be some glow or smoke vfx added so that the transform could look more convincing! Once I figured out the action, I applied the same thing to L3. 

 
At this point of the sprint, there were 4 cards left which I was speeding through. I animated combat Tanker shooting and swinging a sword by referring to the Flea animations I did awhile ago to get the general timing. Tanker’s arm did clip through his body when he swung the sword, but it was an easy fix by adding another key frame in between to make his hand follow an arc rather than a straight line. 


Before the build on Tuesday, I agreed to take on more animations. Turns out Flea bot mode didn’t have any animations! So I put tanker aside for the moment and made the same basic movements for Flea. That way he could be included in the build! 


It was now down to the final two cards which proved to be the most challenging. I animated Tanker holding the boombox weapon that acts like a flamethrower. Originally, I wanted Tanker to carry the weapon above his head, but we found that it would block the player’s vision in-game. So I moved it down and looked at how Nathan animated L3 and Flea holding the boombox. They held it right in front of them, but added a little personality to them both. Since Tanker is a bit bigger than the other bots, I constrained the boombox to one hand while the other hand was jamming out to the music. So he’s having a great time killing his enemies while grooving. Then I finally reached his Idle, which was the longest animation being about 12 seconds. It was a basic hover in place with a small emote if the player is still for long enough. I tried to make Tanker look sleepy and then his head falls off as a result. Timing his reaction and then picking up his head was difficult because there were a lot more actions to keep track of. I tried a different animation technique where I blocked out each pose rather then going straight to spline. That way I can time how long each pose goes for and then add on as I go.  



Sprint 4 Robot Riot

This sprint, I was kicked off to rig 3 characters! I started off with Rem, who appeared to have the most moving parts to rig. I referenced the previous rigger's characters, Flea and L3, to build a new rig for Rem and Tanker so that they all move similarly. I originally wanted to add some squash and stretch controls to the body and head for an even more cartoony effect in animation, but it was also important to keep all the animations consistent because the previous rigs did not have those. The only concern I had about this rig was the shoulders, which needed their own control because the arms would clip through when moving the hand control to a certain point. I also decided to rig the antenna on Rem's head so that there could be some overlap in animation to make him appear less stiff! Flea also had antennas, but they weren't rigged because the original plan was for each character to have the same bones and the same animation data. So that the animators don't have to animate for each individual character; they would only have to animate one action and apply it to all the models! But this method didn't work as planned, and it was decided that it'd be easier to make an asset list for each character and animate those actions. After combat mode, I worked on Rem's bot mode, which had fewer moving parts and was quick to rig! 


Tanker was the most fun to rig! He has a floating head, so he has a lot of potential to add overlapping animation. It's usually a good rule of thumb in rigging to constrain the head so that it doesn't stray away from the body, but this dude is an exception. I also tried something different with his thrusters so that there is a slight stretch effect whenever he moves. The edge vertices inside of the bigger thruster are connected to his chest as opposed to being an entirely separate body like most of the other parts of him are rigged. So when the thruster is moved, the posing could be pushed, as we won't see the inside of the mesh when it's moved!


Next up, I set up the rigs in Unity so that we could attach weapons to their hands. Thank goodness for the knowledge I learned in leggy because I found myself using the IK system in unity to be extremely helpful! I had to reimport Tanker a few times because his elbow would pop out of his arm socket. Mainly because the skin weights were on the wrong joints, so I quickly redid that. Tanker also has two root controls. The first one was so that Unity can reference it and stay in place, while the other can be used to animate and make him less stiff as he hovers. The reason for two root controls is that Unity will oddly move the player control camera if there is any data on the root. 


At this point in the sprint, I had finished all the cards I agreed to do at kick-off. The producer had some Tanker animations written out, and I was excited to animate my favorite robot of the bunch! Animation was smooth sailing from here.




Sprint 3 Robot Riot/Leggy

At the beginning of this sprint, there wasn’t much work for me to do on Leggy so I looked into other teams to work on. I talked to the animator on Robot Riot and found that they have a ton of animations to do so I thought I’d help out! I was kicked off to animate a couple actions: shoot, swing, hover forward, hover backward, jump, and side strafes with their character Flea. The main concern I had about animating was how to animate the jump. A jump action is usually split up into 3 parts, the jump itself, air time, and landing. I had to make sure the air time looped seamlessly and also remove the Y translate after animating so that the character wouldn’t move away from the controller in game. In Maya, I animated the jump as a whole then split them up into clips through the game exporter. 


I finished up the animations much faster than anticipated. Coincidentally, Leggy was looking for me to rig the clamps so that it would be easier to code it to the player controller. Instead of adding a two bone IK system I used a chain IK system to rig the clamps because they behaved differently than an arm. But I ran into a problem that turned my 1 point card into 3, which was to add in another joint to the bones. In order for the clamps to work they needed an extra joint that I had forgotten to add. So I had to reimport from Maya with a new FBX that had the new joints. And with reimporting, the whole rig had to be recreated in Unity because the skinned mesh and joints were different. It didn’t take as long since I’ve already done it before, but finding the right constraining order for the clamps to work properly was a tedious challenge. 


In the last few days of sprint 3, I took on more animation work from Robot Riot. I animated L3 in bot mode doing more basic actions. There were only 2 controllers on the rig so the animations went by even faster than the first character. 



Sprint 2 Leggy

This Sprint was definitely an interesting experience. I continued to work on more glyphs with Abbey still being our producer at the kick-off. But at this time I was not on the Jira board so I communicated in direct messages with the producer to clarify a few things. I was blocked from rigging Leggy as he was being remade to be 40k Polygons instead of 600k...my current task was to make an animated glyph of Leggy drawing :D.

In the middle of this sprint, Brad took over as producer. Instead of Leggy being 40k polygons, he was going to be 10k polygons. With Leggy being less polys, it makes him even more functional and easier to rig overall. But I was blocked again from rigging with the model being remade again. In the mean time, I asked the producer and designer what else I could work on besides more busy work. I started on some research on how to use Unity and its rigging system because I am not familiar with this game engine. I found a couple videos that told me that Unity requires an already skinned mesh with bones. I can’t create bones in Unity, which cleared up a lot of confusion I had prior. After I had finished my research I asked for more work. The producer and I came to a consensus that I look for work in other teams since there was not much else to do on Leggy. But as soon as going to search for work, the Leggy model was ready! 

This would be my third time rigging Leggy. His joint positions were already set up from earlier versions so only thing I had to worry about was skinning the model to the joints and binding the skin to make sure the mesh follows the joints correctly when rotated. He was officially ready for Unity now. In Unity I had to set up constraints and an IK system. These can be made in Maya too but these specific features don’t transfer between programs. I put a constraint on the wrist and base of the arm so that it doesn’t rotate on none other than the X axis. And I rigged an IK two-bone constraint so that Leggy has a target to follow for the player to eventually control. IK stands for Inverse Kinematics which is a system that will calculate where the joint chain/linkages will move based on an end effector (target). By the end of this sprint, Leggy was ready to be hooked up to the player controller!




Sprint 1 Leggy

As an animator/rigger for this game there wasn’t a lot I could initially do. I went around the team to get an idea of what kind of tasks everyone was up to and see how I could help. The designer mentioned that the robot arm was going to be built with an IK rig system in Unity. The coders had no clue what IK (Inverse Kinematics) was, so my first task was to do research on the rigging system and figure out how the coders could link it to the player controller. I sent them a couple videos that would explain the mechanics and hopefully help the coders understand what they’re working with.

Over the weekend, I received a placeholder file of Leggy so I could begin the rigging process. The model was not completely done at the time, but the designer and modeler decided to give me a model blockout. That way I’m not on standby waiting for the model to be finalized. 

Luckily it was a fast and easy rig! Weight painting was smooth since it’s all hard surface as opposed to blending skin shapes. The controls made in Maya were mainly made to demonstrate the joint movements, which will be driven solely by the player in Unity instead of being animated.


My next job was to create animated glyphs of Leggy. I hand drew 6 separate animations on procreate to  display Leggy moving a certain way or completing tasks. They seemed to have a difficult time assigning me work since there isn’t a lot of animation in the game. So it was mostly busy work, but the glyphs are nice to haves :)