This update was originally going to have more content, but the main feature I wanted for it took slightly longer than I had originally intended. Since I now refer to this game as a ‘waifu simulator’, I should explain that aside from being a free-roaming sandbox based upon living your day to day life as a Japanese high school student in an anime-inspired setting, the main focus of the game will be on deep simulated interactions with several datable heroines. As such, a large amount of focus will be dedicated to making these characters feel as detailed and believable in their environment as possible. One of the features I felt was really necessary and wanted to get implemented early on was to provide a better way of performing facial animation which does not rely on skeletal mesh bones. To this end, I’ve modified the Godot engine to allow for a new memory-efficient implementation of mesh morphing. This is an animation technique different from skeletal animation since it allows direct manipulation of the vertices. While not suitable for full character animation, it can be very effective for facial animation which is demonstrated here.
Godot actually already had an implementation of mesh morphing, but it was implemented in a way which was practically useless for the type of facial animation I’m attempting to do. This new system is actually based off my experiences of writing a parser and renderer for the popular Miku Miku Dance formats which stores only the vertices relevant to a particular mesh morph rather than attempting to copy the entire mesh as the Godot workflow originally did. My implementation also now uses index-based triangle optimization which originally had to be disabled for meshes utilizing morph support. This engine modification is still somewhat a proof of concept though, as it depends on a custom hacked version of the Collada format. I am currently undecided on how this workflow should be handled in the future, it could be through actual Collada extensions, a separate custom file format loaded alongside Collada, or maybe something completely different like OpenGEX if the specification supports this style of storing morphing information efficiently (it’s somewhat ambiguous to this effect). Autodesk’s FBX actually does support this style of storing morphing information, but it’s a locked-down proprietary format which, due to the lack of documentation, makes it hard to implement without incurring licensing problems.
I’ll have some more interesting updates out very soon now that this task is out of the way. I have actually had the great fortune to have met a very talented 3D modeller who is helping me out with creating new art for the game. Unfortunately, due to my focus on solving the particular technical issue described, I am unable to show off his work as of this update, but expect some exciting developments coming very soon.