December 2023

General

This month I worked on the character workflow and file management.

I then focused on updating Talas' digestive tract, mainly on collision management.

 

Character Pipeline

As you may have read in previous development diaries, I've been making quite a few changes to character management in general.

This month I've updated many of the tools I've created and use to standardise certain parts and automate certain repetitive tasks.

I also took the opportunity to update my pose libraries for Blender 4.0.

MMVS_PoseLib.png

 

It also takes a lot more work to prepare the assets now that the characters are much more modular with different parts.

To save time, I've created tools to automate what can be automated. I've already talked about contact collision, and the same goes for empty mesh:

 

I've made some changes to the way I structure assets, customisation scripts and character configurations.

The aim is to make it easier to migrate customisation assets and to avoid unnecessary dependencies between assets.

This will allow me to use personalities in other projects. Here, you can see Cobble with a Zashawa skin in the Electric Dreams demo for Unreal Engine 5:

CobbleInElectricDreams.jpg

For v0.4.5, if you want to keep your skins, you'll have to extract and import them again (I'm trying to add an automatic fix so you don't have to do this).

 

Talas Digestive System

I've modelled all the basic parts of Talas' entire digestive system.

TalasDigestiveSystem.png

The player will be able to move from the oesophagus to the anus.

To facilitate gameplay and optimisation, the environment of the digestive system will not be naturally arranged.

It will be completely invisible to the player.

At the moment, I'm focusing on the technical side, as the graphic quality is far from finished.

 

Character Physical Interaction

I've reworked some elements to improve the interaction between characters and physical objects.

Later on, I'd like to do a lot more with physics.

 

Dynamic Mesh Collision

MMVS uses 2 main types of collisions:

  • Physical collisions with simple static shapes.
  • And the much more detailed and dynamic contact collisions, but only for contact with surfaces without physical interaction.

I talk a lot more about this hybrid system than in previous development diaries.

SoleContactCollision.png

 

For the digestive system, because I need something very organic and dynamic, I've done some R&D to create a new system that manages physical collisions, but with fully dynamic surfaces.

 

I can animate geometry through materials in Unreal Engine with a little bit of maths, but that's at the GPU level and it's not possible to manage collisions and physics with that.

So I used collision boxes that were animated via the CPU using the same calculation as the material.

The concept works, but it is very resource intensive.

 

After some testing and tweaking, I decided to use a simplified skeletal mesh and animate each bone independently via the animation script, just like with contact collisions.

This way the collision is handled directly by the geometry.

GenerateColSkeletalMesh.png

It's much more optimized, but it causes a lot of issues regarding physics.

 

I finally decided to create a dynamic mesh and animate each vertex.

It's more efficient, gives me more control and allows me to correct certain physics problems.

From now on, I know this is what I'm going to use in the game.

 

I'm making the collision system usable in multiplayer.

The calculation used to make the walls move is deterministic, so if the inputs are the same, I'll always get the same output.

I just need to make sure that I calculate the geometry around each player and synchronize the input values on each machine, such as time and amplitude of movement.

 

One of the main physical problems was that the player could intersect and pass through collisions.

This is because the geometry intersects with the physical actors without pushing them, and the vertexes "teleport" to their new positions every frame.

Since it's possible to compute vertex position deterministically, it's also possible to compute velocity deterministically with a little math.

From there I can calculate the potential velocity of the actors and push them away.

That will now keep the player stable on the ground as the collision moves from left to right.