Tacticool
2024-12-15
Animation of Tacticool
After 5 years of working as Lead Animator (and a bit of VFX Artist and Tech Artist) on Tacticool, I wanted to share some of my work and also dive a little into some insights into our animation pipeline and the solutions I helped develop to handle one of our biggest challenges: managing a large number of character meshes with shared animation sets.
This was (and still is) a very fun and interesting project to work on and a great team. I learned a lot from my experience here, and even though my full time involvment on this project comes to and end, I am not saying a goodbye to this project just yet.
https://www.panzerdog.com/tacticool
Work Examples
Skinning and Export pipeline
With over 400 operative skin meshses and growing you could say that this game is very heavy on the amount of character meshes created. New operatives and skins were released quite often, but they all use the same skeleton and mostly the same set of animations, with exception of operative-specific animations.
To address this I developed a number of scripts and tools for Maya to allow anyone with even basic Maya knowledge to skin new meshes and export them into the game engine.
Worflow was as follow:
- Open Maya
- Open Tacticool Rigging Toolbox
- Click Open Rigging scene
- Import new meshes
- Select one of the example skinned meshses, then the new mesh
- Click Copy Skin
- This uses the best available tool and algorithm to transfer skins from old mesh to the new one
- Optinally - check and tweak the skinning in places
- Open Rig Exporter
- Select your new mesh and all related meshses, and hit export
- Everything is exported directly into the project folder with proper naming schemes
After that our Unity Importer tools kick into play, where you can select a mesh, texture and other related assets, and it creates all the necessary data files and settings for the new skin to appear in the game.
The whole process of adding a new operative can be as quick as 15 minutes (if it does not require a lot of manual tweaking, and not counting possible Unity load times or git updates or branch swithcing which can sometimes take a while).
. This presented several interesting technical and artistic challenges: - Managing consistent animation across different character meshes - Optimizing the skinning process for multiple characters - Maintaining animation quality while ensuring good performance
Working with and storing animations
I always strive to optimize and improve workflows. And for this project I decided to try and build the pipeline around the idea that project files are the "source of truth". Meaning that all those animation FBX files should be all that is required to start editing them, but without losing the comfort of Maya and a custom animation rig.
So for that I developed all the necessary import tools. Any character or animation can be directly imported from the project FBX files into Maya, attached to the existing animation rig, animated and exported right back into the engine.
Streamlining all repetitive work
I also tried to optimize as much of the repeated work as possible. On export a second UV is generated automatically for every character mesh, a frontal projection used in shaders to create various animated effects on characters. LODs are also generated within Maya prior to export, with ability to tweak and adjust them or their skinning if required.
All of these tasks may not necessarily require a lot of time on their own, generating a LOD can take maybe 5-10 minutes manually. But when it's done with a single click reducing that time to just a couple seconds - it can add up and save a lot of time and energy. And it also does not require any knowledge or extra training if someone less familiar with these tools of Maya or Maya at all has to do it, it can be done quickly and easily.
Adding Life with BroDynamics
Well, obviously as a developer of BroDynamics I am biased. But this also shows that I use this tool myself on regular basis.
One of my favorite aspects of the project was finding ways to use BroDynamics to enhance our animations. Here's some of the use cases I found for the project:
- Adding dynamics to animations. Natural and obvious use case for BroDynamics - adding secondary motion and overlap to animations to make them more realistic. Mostly used on arms and head.
- Adding life into simple animations. I found that applying procedural Noise to otherwise relatively simple animations can make them feel much more lifelike and real, sometimes giving an impression of them being mocapped.
- Making entire animations with Noise. This was also quite fun, especially for zombies! Just make a few poses, then add random jerking and flailing using Noise, and then use Chain simulation to make it look even more natural.