May 2022

Disclaimer

This specific devblog will be made available for everyone.

As a reminder, devblogs will be available only for Patreon patrons until the next game update. After which, every devblog posted prior to this update release date will be publicly posted, one by one, on the game’s website.

It seems that phone web browsers cannot properly read GIFs in some cases.

Unreal Engine 5 Update

Most of this month’s focus was on updating the game’s graphics engine. I updated it from Unreal Engine 4 to Unreal Engine 5 and not without problems.

The graphics engine, or game engine, is more or less the software that makes every component of a game work together as a whole: graphism, code, 3D models, animations, artificial intelligence, and so on.

I had to update configuration files regarding how the game engine works while making sure it still works both in VR and non-VR. Some options and features were deprecated, and others were unstable, or even were making the game engine crash outright. That is, without even mentioning incompatibilities with newer technologies.

There also was the need to work on a good chunk of the C++ and BluePrint (Visual Scripting) codes to ensure these obsolete features are fixed. The game currently works, but still displays a good amount of issues and bugs from that game engine update.

I also lost plenty of time trying to dodge game engine issues that appeared with UE5, such as reflections that won’t work under DirectX 12, nor with the Two Sided Lighting.

Reflection HDRI Break

Some crashes occurring from basic options, localized text variables that can’t be replaced, or even from official plugins that disable basic features and functionalities even though it should not have any impact at all.

UI Localizated Texts Break

Render Doc  Plugin Break

To sum things up: I still have a lot of work to do. I am planning the next MMVS update for July 2022. As you read through this devlog, you will notice that I end up explaining some systems with more complexity and more details.

I took adavantage of the game engine’s update to try out new technologies on MMVS and noticeably added an option to enable Lumen for experimental purposes. (See further below)

Nanite seems to be fairly performant as well, unfortunately, like Lumen, these two technologies are not VR compatible.

I am relatively eager to see Nanite compatible in VR as it would severely improve performance and allow me to add more geometry to models without hurting said performances.

Lumen (Ue5 Tech)

I added an option to test Lumen for experimentation purposes. Lumen is Unreal Engine’s 5 Global Illumination and dynamic reflections system.

More info: Lumen Global Illumination and Reflections

Pawday 2022 Lumen

Tweet 1 #PawDay2022 (Picture)
Tweet 2 #PawDay2022 (Video)

Talas’ house went through numerous modifications, specifically on item placement and indentation. Visually, this does not change anything to the player, but these objects have been placed like unified blocks to help Lumen calculate shadows and lighting without too much restraint.

Mesh Distance for Lumen use

I am insisting on the fact that this is experimental because, in order to reach acceptable results, several hours of work must be spent to turn every light dynamic and no longer static. This would make MMVS use up more resources than it needs to, and would require a stronger hardware to run it smoothly.

Static VS Lumen

Full video: MMVS - Comparison Static lighting vs Lumen (UE5)

While dynamic reflections and lighting would offer a much better graphic rendering, the end result for indoors would be much worse.

This is due to Lumen’s quality per resource that deteriorates depending on the number of light sources in a single area, and from how difficult it seems to be for Lumen to deal with indoors lighting since light must bounce on so many surfaces. This issue is near non-existent with static lighting calculated through CPU.

Static VS Lumen Enviro

Static VS Lumen Talon

Talas’ house mainly revolves around indoors environments and plenty of light sources help to enhance lighting, which is perfect for static lights, but not for a system revolving entirely around dynamic lighting...

The other main issue regarding Lumen is VR, as this technology not only uses way more resources, it also is not VR compatible.

I’m saddened that it is not possible to have a hybrid rendering between static lighting and Lumen, like Unreal Engine 4 could do. I would have been able to have Lumen’s reflections, Lumen’s global occlusion, static lighting and some dynamic light sources using Lumen’s Global Illumination (for example, the Sun)

It would also have been possible to add interactions such as turning lights on and off and to see light interact with dynamic items such as doors, drawers...

Despite all, I am planning to add, in MMVS v0.4.2.1, a small bonus level that will heavily rely on Lumen’s potential.

It will be the opportunity to toy with lights over Talas’ talons, so feel free to share any recommendation you may have.

I’ve published several videos to display comparisons, don’t hesitate to take a look!

Comparison

Render

Enhanced Input

I took advantage of the game engine’s update to use the Enhanced Input Plugin.

With the old system, the character receives raw player input and if I want to add modifications such as dead zone, smoothing, sensibility, delay, etc... I need to do so through the character’s code.
The new system is more modular, allowing me to create scripts and specific code for player inputs, and to inject context.

Here is an example with mouse sensitivity that would take into account user preferences.

Input system

For the time being, I may have updated the system, I still have yet to create functionalities using it properly. I will work into it when I add new options such as mouse sensitivity and smoothing.

More info: Enhanced Input

Open VR to Open XR

The Enhanced Input Plugin does not work well with Steam VR’s plugin. Unreal Engine’s classic input list used to generate a set of mapping detected and used by Steam VR when playing the game. This list does not exist anymore with the Enhanced Input, so Steam VR cannot generate this mapping itself.

Steam VR Mapping Inputs

In order to fix this issue, I will need to edit the plugin myself. Thankfully, I had planned to give up on using Steam VR’s plugin and fully move onto Open XR. This was to be used from another future update, but it will be much simpler to do this now.

Regarding Steam VR, since the very first version, MMVS has been using Open VR (Steam VR)

Open VR is similar to Open XR : it’s an open norm allowing to manage several platforms and devices at once without having to code a separate integration for every single one. No matter if you are using the Index, Oculus, HTC or Pimax, if it’s taken into account by Steam VR then it’s compatible with MMVS !

However, I still find that Steam VR’s usage is too heavy by itself, on top of me having problems with Unreal Engine’s plugin that were not fixed still despite being found years ago. I thus decided to switch to Open XR, much lighter and also a more compatible norm to use.

Solving XR fragmentation

More and more hardware creators are turning to Open XR, especially in order to make them compatible with Steam VR. Thus, I am confident that MMVS will remain compatible with most, if not all, VR headsets to come.

Steam VR Transitioning To OpenXR: Transitioning To OpenXR

Users with devices or platforms natively supporting Open XR will be able to play MMVS without going through Steam VR. They, of course, can still use Steam VR to use its features, such as custom input mapping.

In my case, I am using a Pimax that does not natively support Open XR. I am thus forced to use Steam VR that will work with MMVS through Open XR.

Example :

  • Steam Index -> Steam VR -> Open XR -> MMVS
  • Oculus -> MetaApp -> Open XR -> MMVS (Without Steam VR)
  • Oculus -> MetaApp -> Open XR -> Steam VR -> Open XR -> MMVS (With Steam VR)
  • Pimax -> PiTool -> Steam VR -> Open XR -> MMVS
  • Varjo -> Open XR -> MMVS

Now that MMVS uses Open XR, I had to do lots of code modifications to delete or update every dependency with Steam VR’s plugin. Some functionalities are still in the works or don’t even work anymore. I will have to continue fully integrating Open XR in MMVS. My main problem currently is that finger tracking from the Steam Index controllers don’t work anymore currently.

Open VR OpenVR (Documentation Steamworks)
Open XR OpenXR Overview

Shoe model

I started modelling shoes for version 0.4.2. To begin with, I made a basic model on ZBrush to get some training and practice.

Training Model

Then, I worked on concept art.

Shoe Concept 1

Shoe Concept 2

Eventually, I started working on the final shoe.

Talas Shoe

Of course, this is far from being finished. I got feedback regarding the shoe’s leather not being realistic enough, and I still have to work on retopology, the rig, the textures, animations, and that’s not even counting all the time I will have to spend integrating these shoes to make them usable in game.

Animation

I added more poses for Cobble’s labial synchronization.

Lips Poses

Some poses are used in Psyhodelik’s animation.
Video: Psyhodelik’s animation (This animation isn’t canon with MMVS.)

Thank you for reading!