October 2024
General note
The October and November development diaries were produced at the same time.
Started bug fixing
After the 0.4.5 update, I started to sort and fix the bugs that were reported on the game's Discord.
I focused first on the most annoying bugs or the ones that were easiest to fix.
Like Tala's gray tongue, user interface bugs, and deeper ones like the VR laser pointer or teleport sound in multiplayer.
I fixed about a dozen bugs, but I won't go into detail here because I plan to release version 0.4.5.1 soon.
You can find the details directly on GitHub or in the bug section of Discord.
I'll be doing some more bugfixing before the 0.4.5.1 release.
New Talas Rig
Version 0.4.5.1 is a follow up to the Vore update and should add some teasing animations with Talas and especially his tongue.
I thought it would be much quicker to get this done, but the Talas Rig really needed to be updated in order to animate his tongue properly.
As a reminder, a rig is a 3D toolbox that allows you to animate an object or character with controllers placed around it.
For example, I could have a controller at the level of the character's hand, allowing me to close and open the fingers of the hand according to its position, without having to move all the friendly parts of the fingers myself.
So a good rig should be complex enough to animate everything possible, but simple enough to animate easily without having to touch too many controllers.
Originally, Talas' tongue only had 4 bones (animatable parts), which is fine for small animations where the tongue moves.
But it's not enough for high quality tongue animations, especially considering the size of the player.
So I decided to rebuild the entire rig section specifically for Talas' tongue, making it fully animatable and future-proof.
And here comes another problem. To create Talas' rig and the other characters or objects in the game, I use a rig generator I created myself.
It worked in version 4 with a layer system like in Photoshop. Each layer adds one or more functions to a rig, allowing me to make the creation of a rig non-destructive.
If I want to change something, I can edit the parameters of a layer and I can easily add complex functionalities that would take a lot of time to do by hand with a simple layer.
The problem was that the rig contained a huge number of layers, which made modifications increasingly difficult.
Thus, I had to switch from a layer system to a nodal system in version 5, which allows greater flexibility, before updating the part of the rig for Talas' tongue.
I started by rewriting most of the source code used to create and use nodes for rig generation.
"Root Chain Character" was the first functional node in version 5.
I then migrated all the layer types to the new node system one by one.
From then on, the nodes are not functional when I run the generation, but this allows me to recreate in the new node system the configurations I had in the old layer system.
Since a rig configuration can be quite complex and I'm bound to make mistakes if I try to copy each parameter one by one, I've been working on an import-export system similar to the layer system, but this time in the nodal system.
This allows me to easily use the same rig configuration for multiple characters without having to recreate the configuration by hand.
At the same time, I make sure there is no data loss.
If data interpretation changes between two versions, rig configurations in Blender files can become obsolete or corrupted.
This is exactly what happens when you switch from the layer system to the node system.
Now that my rig generator can export and import nodal configurations, I had to work on backwards compatibility.
This allows me to import configurations created with the old layer system and import them in nodal form.
For example, I was able to re-import the Talas configuration in nodal format with 86 nodes for rig and 9 nodes for skinning.
As a note: Skinning is what allows the character's geometry to correctly follow the various animatable sections.
Here, each layer has been re-imported as a node with the correct parameters.
It's important to note that the user interface for each node will perform checks to see if the parameters are consistent and avoid potential errors.
With the old layer system, the interface had to check all layers for the slightest change. This made the UI extremely slow.
With the new node system, this is much smoother because each node only updates its interface when its own parameters are updated.
Now I just have to make all the nodes functional.
I will use Talas' configuration when it comes to testing since it uses every node and functionalities of my generator.
I hook up the nodes, execute the generation, troubleshoot, and make sure everything is working properly. Then I connect another node, execute the generation once more, then fix any potential new issue.
I do this for every node until I can generate the entire rig for Talas without any problem showing up.
During this process, I had to undo changes several times to improve a few things, delete nodes that had become obsolete, or replace them with new nodes that could do more things.
I also had to review the source code several times.
From this point on, the fifth version of my Rig generator was complete!
- This allows me to generate a rig with 79 nodes in 2,63 seconds,
- And the Skinning with 12 nodes in 5,26 secondes.
Here's what Talas’ configuration looks like.
I have a basic trigger that runs multiple branches with the different nodes and features that shall be added to the rig.
It's much more organized and modular than the layer system, and I can instantiate certain parts and reuse them in other Blender files.
Such as node geometries or shaders.
New Talas Tongue Rig
For Talas' tongue, I first had to prepare the rig so as not to go in blind.
The goal is to have a rig that's flexible enough to allow me to fully animate the language in different ways, depending on the context.
I also wanted the rig to be future-proof and easy to modify if I wanted to use it on other characters later without having to redo the base.
Now that the rig uses the nodal system, I started working on a curve system.
The bones (animated sections) of the tongue will line up along this curve. And the rig's controllers will move this curve.
As stated above, the tongue can be animated in a number of different ways, so I have to overlay several functionalities.
I have to be careful that one feature doesn't interfere with the operation of another, which means I've had to refactor some nodes to make them compatible with others.
This is particularly true of my snap/follow system, which took a lot of time because it's used a lot by different types of nodes, but not in the same way.
As a result, I had to do a lot of standardisation of its operation and re-testing of all its uses.
Snaps and Follows allow certain controllers to follow other controllers without the animator having to recreate constraints.
I can create organic movements like this with the neck, or utilities when I want to move the camera with the head.
If you work in 3D animation, you can understand how useful this is. You don't have to worry about constraints because it's already part of the rig.
It's something I use a lot in my animations.
I then fine-tuned the Curve controllers and added new ones so that I can animate the tip of the tongue independently of the Curve.
The next step is to make the various Curve controllers animatable along an FK chain.
This will allow me, for example, to make a pendulum movement with the tongue without having to move each Curve controller individually.
You can see internally how each controller can animate the tongue independently or in addition to the other functions.
The hardest part is keeping this stable without creating cycles in the computation steps.
The next steps are to be able to stretch the tongue and to constrain certain controllers to a controller that can move independently of the head.
This will be useful if the tongue needs to stick to something during an animation.
I started doing a few poses and tests just for fun.
I also added more bones to the sides of the tongue to get a better, more organic shape.
One thing I hadn't thought of was that blender doesn't support the management of twists along a curve for Rigs.
Thus, I had to improvise and create my own twist system:
From there I have all the elements I wanted to add to my Rig to be able to animate Talas' tongue properly.
But I need to make sure that I can get the same result in Blender as in-game.
Unreal Engine doesn't handle non-uniform relative scales, if you can call it that, and Blender does so by default when you change the scale of a bone.
So I have to pay attention to that when I'm working on the Rig and the bone deformations to make sure I get the same result in Unreal Engine.
With the Tongue Rig I use a lot of scaling to maintain the volume of the tongue and keep the animations organic.
- Here the grey Talas is a raw geometry exported from Blender.
- And the one on the right is the animated character in Unreal Engine.
As you can see, I get exactly the same result, so it's a success.
Now I need to work on the deformations of the tongue itself.
I added controllers to be able to deform certain parts, but the result wasn't convincing enough.
I had to do several tests.
The problem is that I need enough deformation points to get good quality,
but I also need to keep the in-game optimisation good and the controls simple enough for the Rig animations.
Initially I wanted to add curves on the sides of the tongue to be able to control certain deformations, but it was unmanageable.
Too many useless controllers and difficult to animate.
I therefore used lateral bones that follow the main curve with rotation and stretching to maintain the volume of the tongue. (Pic1)
The additional controllers let me move the bones. This worked well, but not when I tried to animate the sides of the tongue.
I then tried to place the deformation points along the curve like a snake's rib cage. (Pic2 & Pic3)
It's easier to animate, but I can't get the poses right and the end result is much less organic.
So, I did more tests and eventually I went back to the side deformation points with rotation and stretching and added more central deformation points to control the top of the tongue.
And I added more central deformation points to control the top of the tongue. (Pic4)
This is what it looks like in use.
New Far Out Bound Camera and Game Master Camera
I did a section on camera animation scripts.
My camera system is very modular, I have configuration files and embedded code according to each context.
As far as animated values are concerned, it's less modular, but it allows me to animate and mix the different camera modes.
I have four predefined modes:
- FPV
- TPV
- TPV (Arms)
- TPV Game Master
And I had three, now four distance modes:
- Close
- Base
- Far
- And now I added Far Out Bound.
The new ‘Far Out Bound’ distance mode lets you move the camera 20 times further away than the default.
Useful if you like to play with the nano micro scale.
The distance speed is exponential, so you won't need to scroll endlessly to reach a very large distance.
I consider this option to be cheating, so by default it's deactivated, but you can activate it in the game control settings.
I also took a look at the Game Master cameras.
You can now go through obstacles and see under the ground.
What's more, the camera distance is more exponential than with the character. So you have better precision when you're close.
New Look Sensitivity and Look Smooth.
I've added some new settings, so you can now change the sensitivity and smoothness of the look (mouse or controller).
New Quest 2 for development
Version 0.4.5 contains a bug that produces a fatal error for VR users with Quest 2.
I was unable to reproduce this problem myself.
I bought the Quest 2 from the friend who lent it to me in the past, so that I could test directly on the Quest 2 and correct the bugs.
With the Quest 2 I was able to reproduce the error from the first launch, so now I know why.
By default, Pimax and the Steam Index via Steam VR send finger tracking data via Open XR.
With this data, I know whether the controller supports finger tracking or not. Same on the Quest 3
With the Quest 2, the Oculus application doesn't send anything to Open XR about finger tracking. And in some contexts even via Steam VR.
So when the game code tries to access the finger tracking data, it crashes.
I only worked on v0.4.5 with Steam VR so I hadn't seen this problem, I think it's the same for HTC.
This bug has now been fixed for v0.4.5.1
So now that I've got a Quest 2 I'll make sure I test the game on it so I can find out what the potential problems are.
Side work
During this month I've had to work on other things that don't directly concern the game.
The fact is that I've had to update my addons for version 4.2 of Blender, which in the meantime has completely changed the support and management of addons and extensions.
And I had to work on my add-on Blender for Unreal Engine for Unreal Engine 5.5 support
The addon lets you export assets from Blender to Unreal Engine.
This took me a long time because I had to use the new ‘Interchange Framework’ to import the assets but the python API for Unreal wasn't fully accessible.
And I had to reverse-engineer the C++ code to find out which functions to call from python.
As you may have seen if you've been following the Wips, I've created several Blender Addons. I have about twenty of them for different tasks.
With the Blender 4.2 update I created a new BBAM library that allows me to manage addons more easily and in particular to generate different builds.
On Blender 4.2 or older versions. The advantage now is that I only have to update my library if I need to.
The library is mainly developed for my use.
But you are free to use it if you are interested and do development on blender. BleuRaven Blender Addon Manager (BBAM)
Build and download manager
I've updated my build file manager to add support for Mega.
It allows me to check the game's builds and data before it's released and to manage the various download links.
When you download a copy of the game the link will open a page on my site with a download counter before redirecting you to the real download link.
My manager creates the links to BleuRaven.fr, Dropbox.com and now Mega.nz using the Web API.
Then it creates the redirect link for BleuRaven.fr with the download counters.
It also generates the HTML page with the download links. https://www.bleuraven.fr/mmvs/download
This will also be used to create the game launcher in the future.
See more: Devblogs - Wips Telegram Chanel - Discord Chanel - Support the game - MMVS game