February 23, 2017

Rhythm Game 'Music Inside' based on Unreal Engine 4

By Hyunuk Nam

Reality Reflection is a VR-focused startup which aims to accelerate the progression of virtual reality by generating attractive VR content. We`ve been developing several projects that showcase the possibilities VR provides in hopes of continually developing satisfying content for both core and casual players. In the end, our goal is to have more people become familiar with VR.

Music Inside is the first VR game that Reality Reflection has released and it is currently available for HTC Vive and Oculus Touch. Music Inside’s environment graphics provide an immersive experience; by hitting 10 notepad rhythms you can enjoy the music with your whole body. You can compete with your friends with the cross-platform multiplayer function and you can play any pieces of music you want with the auto note-generating algorithm.



Music Inside became a lot more attractive thanks to Unreal Engine, which allowed the team to implement key features and optimize the game. So, let’s talk about how we used Unreal Engine effectively through the production process of Music Inside.

UI - Implementing UI is complicated in VR. In Music Inside however, we developed the desired UI easily and quickly using Unreal Engine`s Widget Blueprint only. The function to handle the VR UI with motion controllers has been provided as the Widget Interaction Component since 4.13. However, as we have been using Unreal Engine since 4.12, we built our own function that controls UI with motion controllers thanks to having access to Unreal’s source code.

musicInside

Multiplayer - To reduce the complexity, Music Inside`s multiplayer mode was developed simply by tracking the current motion of the player. Through this, we built a multiplay mode by using Unreal Engine`s replication server.

musicInside

Multi-Threading - In the rhythm game genre, delayed responses can cause player dissatisfaction. Maintaining the game’s high responsiveness and speed is vital. Music Inside has implemented an auto note-generating algorithm that allows any music to be played within the game, but because the amount of computation required is increased by the sophisticated algorithm, it is difficult to maintain the game’s performance.

To solve this problem, Music Inside uses multi-threading to maintain the quality of both the auto note-generation algorithm and the performance of the game. Unreal Engine provides a number of multi-threading friendly features, so it was relatively easy to transform the algorithm to function for multi-threading. It was very helpful that high-performance with thread-safe data structures are convenient to use. Through these efforts, performance was increased so that the sophisticated algorithm was able to analyze music in real time. Music Inside can now quickly analyze songs in not only the music inside a local library, but also inside SoundCloud.

musicInside

Frame Rate - VR games need to maintain 90 fps in order to provide a pleasant gameplay experience. Unreal’s Instanced Stereo Rendering was instrumental in bringing rendering performance and optimization to this aspect of the project. In addition, the detailed profiling features for tracking the workload on frame units was very helpful to increase the performance in the final stages of development.

Music Inside has lots of IO operations, such as multiplay, browsing music on a local PC or SoundCloud, and downloading. We could easily track the frame-rate drops using the profiling features, and Unreal Engine’s exceptional multi-threading feature helped the optimization when the phase reduces the IO`s workload, by making each part asynchronous.

musicInside

So this is how Music Inside was born based on the Unreal Engine. Music Inside is now available on Steam and the Oculus store, and will also released on Mobile VR and PSVR.

Reality Reflection is currently working on the new VR game 'Code Name:T', utilizing Unreal Engine’s powerful and convenient features. So please keep your eyes open for upcoming information of ‘Code Name: T’!