Duolatera - My Capstone Project

Scroll down to see my contribution to this project.

Or go back to main page

Play the game here!

Unreal Online Subsystem

I implemented and maintained Unreal Online Subsystem into our game with the listen server model so that two players are synced together.
As our development went further, I kept optimizing the Online Subsystem’s reliability and efficiency. For example, I optimized syncing players’ physical movement to each other bypassing the server's validation. In my next semester, the validating phase will be added to the reciever player side.
I also kept expanding more gameplay stories like grabbing, triggers and laser tools. Making sure that all states are synced is a challenge, i.e. if the host picks up a cube before the client joins the session, the client still needs to see that the cube right now is in the host's hand.
We had some trouble when spawning and initializing all game objects in the level, so I spent some time examing the Unreal Engine source code on initialization phase, and overrode some default functions to suit our game.
Now I am confident with multiplayer gaming, and willing to take on more projects on different platforms.

Some useful notes:
For syncing to be reliable and quick, use replicated variables instead of Remote Procedure Calls (RPC). Because replicated variables are well optimized synced in Unreal Engine, which takes less traffic, and is synced by an internal interval, and can also work with net cull distance.
Even I'm using listen-server model, all authority are still kept in the host, and the client can't do anything without validated by the server. However, there's a workaround by using net role of autonomous proxy, which gives some freedom to the client to send data on their own (like their own movement).

Predicting & mapping player movement

With standard VR game devices, I had only three motion trackers (the head and two hands) to play with, while the goal is to map the player's physical movement as accurate as possible.
With some research on Kinesiology, I managed to predict the player's physical movement and map that into in-game avartar with the support of Unreal Engine IK system.
For prediction, the player's torso is assumed to be uplifted straight, and determined by the head's position. The player's height is measured at the start of the game, and all body part's are scaled based on standard human body porpotions. So the pin points like shoulders and hips are fixed.
During the process, I have learned a lot on IK retargeting, as well as human body.
Predicted joints are hips, knees, ankles, and elbows. The elbows are still work in progress.

Asset Production Pipeline

With my background in 3D modeling, I designed the asset production pipeline for our game. Instead of letting artists make the full material, I only asked them to mask out different areas with single RGBA channels.
In this way, we have much more flexibility for tweaking all material properties inside the engine and getting the accurate result in real time.

Play the game here!

Go back to main page