A showcase interactive event called WHOLELAND, Primal Rave to promote The Fabricant products powered by Cornerstone cloud-rendered metaverse with Unreal Engine 5. The goal was to host a series of online multiplayer events to enable invited users to interact with the products and with each other in visually compelling experience.
In my role as Tech Lead on Cornerstone team, I was responsibly to support features that were already implemented in previous phases of the project, implement a system of user nameplates and chat bubbles, improve and add new animations to the avatar and improve gameplay and multiplayer mechanics.
The experience begins in an offline lobby, allowing players to customize their avatars. By clicking the "Enter the world" button, they will join a multiplayer session within the event world. In this event, players can freely explore the environment, interact with various products, and engage with other participants.
Chat bubbles and user nameplates
I joined the project during its later stages, with most of the experience already in place. However, there were still some features that needed to be added, including chat bubbles and user nameplates.
Users logged in with external credentials, and their usernames were sent to their game instances through specific protocols. I coded the parsing function and storage of this information in a replicated variable in Player State upon connecting to the multiplayer session. Usernames were then displayed above avatars, with an added feature to hide nameplates when necessary through periodic Raycasting checking for occlusion between players.
The experience's web layer already had a chat system for in-session communication. Additionally, there was a request to display the latest messages above the users heads to enhance social interaction within the 3D world. These messages were sent as Pixel Streaming events, then replicated and added to widgets similar to nameplates. I also implemented a feature to truncate longer messages (3 or 4 lines) and replace them with a three-dot bubble when users were too far from the camera to prevent screen clutter. After a 5 seconds timeout, the bubble would disappear from screen.
Avatar animations
When I joined the project, the Avatar in its current version featured only walk, run, and jump interactions. I introduced a dancing option to align with the event's rave party theme, allowing players to enjoy and experiment with dance movements.
I searched for suitable dancing animations in libraries that would align with the avatar and the theme context. I incorporated a collection of 15 distinct dance movements, which are randomly selected by the animation blueprint when a specific key is pressed. As long as the player holds down the key, the avatar continues to perform the selected dance animation in a loop.
Furthermore, I enhanced the standing animation using Inverse Kinematics to ensure that the avatar's feet adjusted appropriately to ground irregularities. I refined the transitions between walk, run, and jumping animations for a smoother experience. Lastly, I implemented an animation blend space, enabling seamless transitions between the female and male versions of standing, walking, and running animations, in accordance with the gender slider customization.
Multiplayer disconnection handling
During our tests, we encountered issues where connection instability could lead to the disconnection of specific players from the multiplayer session, redirecting them to the offline lobby where the application restarts. To prevent player frustration and the loss of avatar customization settings, I introduced a feature that saved the avatar customization data into a savegame file after the first connection to the session.
In the event of a disconnection and the player being sent back to the offline lobby, the level blueprint checked for the existence of a savegame file. If it was found, the game automatically loaded the information, displayed a "trying to reconnect" popup, and attempted to rejoin the multiplayer session.
To further enhance the player's experience, I placed specific trigger volumes in various map regions within the multiplayer level. Every time a player entered a specific region, the savegame file was updated with that information. This allowed players to respawn closer to their previous location after experiencing a disconnection.
Since the application utilizes Pixel Streaming sessions, each login initiates a clean virtual machine without a savegame file. Consequently, the offline lobby skips the reconnection step, allowing players to customize their avatars anew.
Animated Companions
As a final touch, I incorporated Cornerstone Companions into the level to engage users. I positioned trigger blueprints with overlapping radii near these Companions. When players approached them, an interaction message would appear. Upon pressing the interaction key under these conditions, a Pixel Streaming event was dispatched to the web layer, providing the necessary information to open specific windows and menus, showcasing product details, videos, and links.
This concept extended to other items within the experience, connecting both the Cornerstone world and The Fabricant products. To enhance the experience, I introduced animation features to the Companion Blueprint, which had initially been static, serving to visualize and render still images. Now, the Companions dynamically follow players, maintaining eye contact, blinking, and adjusting their body orientation to align with the player's movements.
Other tasks
In addition to those specific tasks, I have also fixed bugs, revised and refactored code and blueprints for most of the gameplay mechanics and interactions in the project. Additionally, I conducted performance optimizations.
Credits:
Cornerstone Team from Zoan Group (cornerstone.land | zoan.com)
The Fabricant Team (thefabricant.com)