For the past few weeks I've been trying to find a way to "retarget" motion capture animations onto the 3D skeleton the Taipii characters use. Unfortunately both approaches I tried hit a roadblock, and in my frustration I turned to solving my animation woes the only other way I know.
Antilia Patreon has been Paused
Before I get into the updates for this week I'd like to mention that Antilia's Patreon billing has been placed on pause (by now backers have likely seen a message from Patreon confirming as much). I appreciate and continue to need the support of the community and Patreon backers, but clearly it's been a while since I was able to deliver on my end with video updates and developer meetings. I don't like the idea that I'm a creator that is accepting money for the project but not delivering on my end of the agreement, or that the game is perpetually in development without providing something back in return. Creating video updates and holding developers meetings won't going development moving any faster right now, and the videos in particular take a considerable amount of time away from development.
In the meantime Patreon backers will continue to have the access they do now, including access to the discord channel - nothing besides the billing will change. I don't plan to resume Patreon billing until Antilia is ready for community testing and I can offer a better set of backer rewards that are more tied to the game itself and less to development content.
Again, thank you very much to all of our Patreon backers. Your support is greatly appreciated, and I hope you will be patient with me as I continue development.
For those who missed the "quick" updates on Discord recently, here is a recap.
|Warning:||Tedious technical details follow! Feel free to jump to the "Animation Editor" section when you've had enough. :) |
TLDR: I'm having a terrible time sorting out the animation stuff, and will probably come back to revisit this after approaching animation from another angle.
After developing a working content path to load complete character meshes including the skeleton and animation data, the next animation challenge I set out on was to improve the character animations. There are large libraries of motion capture data available for free or under a commercial license for exactly this purpose, so it made sense to give one of those a try. If I could get those to work, I might also be able to import animations from a basic motion capture system I have built around my VR setup.
Where this becomes difficult, however, is that the Taipii meshes you see in game are built around a custom skeleton that isn't an exact match to the skeletons that are used by motion capture systems or their libraries. This is a common problem, and there are solutions available to handle this "animation retargeting" step.
The goal is to get animations recorded on the skeleton on the right to play correctly on the skeleton on the left.
My preferred path (Plan A) was to implement my own animation retargeting system directly into Antilia's Mesh Importer. The math seemed relatively straightforward - calculate the difference in bone angles between two skeletons and account for it while importing the animation keyframes. I would need to build a small tool to render the two skeletons at the same time and align them, but once this was done I could easily import as many animations as needed using the same "retargeting" file.
Unfortunately I didn't get close to a good result with this system in the first week. After 2 days what had to be almost 100 attempts at fixing the algorithm, if one animation started to look better another another animation would start to look worse. It didn't made much sense.
The first week working on Plan A was very frustrating, with a lot of this to deal with.
Plan B, C...
Plan B was to use a free plugin for Blender that could perform this conversion. With the plugin I had a bit more immediate success. I was quickly able to get the skeletons to align in a way that Plan A failed to do. Seeing that the plugin worked, and it was open source... that led to an impromptu Plan C - study the algorithm from the plugin and make my algorithm match. The plugin even saved it's configuration in a json format that was extremely close to the one I was using - so I might even be able to use Blender as the alignment tool and skip needing to build a tool for it.
But again, I ran into problems. The math in the plugin was doing exactly what I had tried to do. After several more attempts to adjust my math to work exactly the same I found a little success, but there were still issues to sort out. At that point I also noticed both my Plan B with Blender and Plan C had hit a new roadblock - drift.
Some initial success with Plan B - the skeletons align and animations play mostly correct.
Small differences in the skeleton, such as the Taipii's digitigrade legs cause the animation to drift in a very noticeable way. The feet were especially noticeable against the terrain - they would constantly slide around on the ground. The Blender plugin comes with a solution for this built-in - setup inverse kinematic (IK) constraints on the mesh to try to fix the feet and hands to the correct positions. But at this point Plan B starts to become less appealing as it means even more time and setup work in required in Blender, some of it for every animation file.
Plan D - Misplaced Nostalgia
This brought me to Plan D - which was to go back into my old MMO editor and make the animations I need so I can move on with combat. Which... kinda worked.
Ahhh, my old comfy MMO Mesh Editor. It doesn't work quite as well as it used to, but at least I know it's technically possible to get the job done with this. Is this my path forward? I sure hope not.
The resulting animations just aren't very good. Part of me really wants to get back to working combat and move on, except... I haven't really solved my animation woes, at least not for Taipii characters. For them I'm still depending on an old piece of software that provides only the most rudimentary of animation tools (forward kinematics) and the result just isn't good.
It was around this point that I start asking myself "How else can I solve this? Where can I at least make some progress improving this situation?"
If you guessed "Oh no, he's going to build another editor" then you know me well.
If I'm honest, I don't really believe this is the path forward for the Taipii animations either. It is just something I can do and find success at while I lick my wounds from battling wild quaternions for too long. I started developing the "Pose and Animation Editor" back when I was first getting fishing to work (you might recall seeing animations of a character in Ariiel surrounded by coral reefs.) At the time I only implemented the "Pose" section, as that was the only functionality I needed for fishing.
On Saturday morning I started adding in the animation functionality and by Sunday evening I had all the basics working. I was able to create and organize new animations with the editor, I had a working channels view at the bottom, a list of bones on the right to make selection a little easier, and the basics of selecting a frame and creating and deleting keyframes. At this point I've caught up with the MMO editor's animation editor and shouldn't need it anymore.
A shiny new editor. Is this the path forward? Probably not the whole solution, but a part of it.
I expect I'll still have to go back and work on that animation retargeting stuff more, but for now this feels like a more productive use of my time. This tool allows me to hand edit existing animations - including animations that are imported into the game in the future. This already fills a gap for me by allowing me to adjustment animations outside of Blender, which even after years of using never feels comfortable or productive.
Next week I'd like to continue working on this a bit more and see if I can add some features that I have been wanting since the MMO editor. Adding inverse kinematics is my next goal (I've been watching videos on the topic for a week now), as well as tying in the new effects system and creating "triggers" that C++ code can listen for and react to. Being able to cue effects directly in the animation editor would be extremely useful - imagine being able to play a footstep effect on the exact frame where the foot touches the ground, or a Sakii animation could play a fire breath effect connected directly to the head bone and all set up in the animation editor.
While working on the animation stuff I was sure to take a break now and then from those frustrating math problems to work on some more enjoyable world building tasks. Recent improvements to the world include:
- 7 new sets of ruins across the Isle of Kasau
- Redesigned the peak of Mt. Gajoi
- Continued working on the cavern system and "thieves cove" area around Gajoi's claw
- Improvements to the tangled lands
- Added treasure boxes to several areas including the tangled lands
The pathway to the Isle of Mist is slightly improved, and I am experimenting with some lanterns to make it a bit easier to find while stumbling around at night.
There are a few new ruins in the Tangled Lands. With each landmark I add the tangled lands become a little easier to navigate, and around some landmarks a bit more mysterious.
And finally we have a few new entries to Antilia's lore this week:
That's all for this week, thanks for reading!