Getting Faster and Leaner on Mobile: Optimizing Roblox with Vulkan

Arseny Kapoulkine
2 min readJun 10, 2020

--

Roblox runs on millions of Android devices, and it’s important for us to be able to achieve good performance where possible. Rendering performance in particular is challenging — we target many different hardware architectures, many different types of devices on the power/performance curve, and of course many versions of wildly different drivers.

In 2018, we’ve launched our Vulkan renderer and since then it has been steadily growing in market share compared to our OpenGL renderer, with ~40% of our Android userbase using Vulkan today.

After the initial launch, with the growing popularity of the Vulkan backend we had to invest a lot of time in analyzing performance and improving it. Doing this required a lot of investigation and experimentation — with minimal performance-focused optimization or code available at the time, we had to try different approaches to each particular problem and find what works best for us.

At Reboot Develop Red 2019, we gave a combined talk with ARM to cover the performance optimization challenge from two different angles:

  • There’s now a growing collection of performance-focused sample Vulkan code that was developed by ARM and donated to Khronos, which you can read about here: https://www.khronos.org/blog/vulkan-releases-unified-samples-repository. Joe Rozek from ARM talked about the general structure of the samples and the framework used.
  • To help other developers optimize Vulkan code and give some insights into the problems and solutions we encountered at Roblox, I talked about several concrete problems we encountered while optimizing our renderer, tradeoffs we had to examine and solutions we implemented.

At GDC 2020, we collaborated with ARM again to cover the aspects of the subject that were omitted from Reboot talk, focusing on the GPU performance optimization for ARM and covering multithreaded command generation in more detail; this talk can be viewed at GDC Vault

The video for the talk is posted on YouTube , and you can download the slides here (https://zeux.io/data/reboot2019.pdf).

Arseny Kapoulkine has worked on game technology for the past decade. Having worked on rendering, physics simulation, language runtimes, multithreading and many other areas, he is still discovering exciting problems in game development that require low-level thinking. After helping ship many titles on PS3 including several FIFA games, he joined Roblox in 2012 and has been working on the in-house engine ever since, helping young game developers achieve their dreams.

Neither Roblox Corporation nor this blog endorses or supports any company or service. Also, no guarantees or promises are made regarding the accuracy, reliability or completeness of the information contained in this blog.

--

--

Arseny Kapoulkine

Technical fellow at Roblox. Previously: FIFA 13, FIFA Street and a dozen PS3 games before that. https://github.com/zeux