Note: Due to confidentiality agreements, the final product is not publicly available. The following content has been redacted and adjusted, and does not represent the entirety of the work. Most of the images used below are from early-stage work. The results can be seen at the bottom of the page.
❋ Experience Description
As a Gameplay engineer intern in Tencent’s Lightspeed Studio, I worked on PUBG Mobile, a globally popular battle royale game.
- TPS gameplay development: Developed a 5v5 TPS demo using Unreal Engine 5 and C++, gaining hands-on experience with the gameplay framework and architecture while mastering the principles and implementation of network replication. Introduced a drone feature, allowing players to switch to a first-person drone for tactical reconnaissance and offensive actions like self-destruction, or remotely control the drone behaviors.
- Runtime landscape modification: Researched and implemented a terrain modification system based on Landscape, supporting runtime modifications of customizable shapes such as explosion-induced craters and dynamic elevations.
- Performance optimization: Leveraged RenderDoc and Unreal Insights for in-depth profiling to identify bottlenecks. Implemented spatial hashing acceleration structure and asynchronous updates based on visibility and distance. Utilized performance analysis tools to validate optimizations, successfully reducing average execution time to within 2 frames.
- Network replication: Supported two network replication schemes, allowing flexibility in synchronizing either modification states for client-side simulation or sending modified data depending on network conditions and game phase.
❋ Details
This section provide more detailed information about the work I did during the internship.
When learning Unreal Engine 5, it is important to know what classes and functions are available and have a good understanding of the engine’s architecture since we need to modify in some ways to make games suited for our needs. Here is a simplified version of engine procedures, which really helped me to figure out where I should look at if I need to modify something.
I also get the hang of gameplay framework and the network replication mechanism behind it. Especially, how the clock synchronization works, how the latency affects gameplay (specifically in Shooters, but can be transferred to other genres), how to do client prediction and server reconcilation and why we need to do that. Though the summaries/docs of these parts can not be publicly disclosed, I’d like to talk with anyone face to face to dive into these topics.
After doing reasearch of how to do landscape modification, there are no reliable resources available. I had to figure out how to do it by myself. The following is the process I went through. I first need to figure it out where the height data is saved, how to write into it, how to re-render and how to update the collision. Some details cannot be disclosed due to confidentiality agreements, but here are some of the classes I used.
Along the ways, there are many pitfalls, like the different save ways in collision data/height data, the different precision/data structure. The following are two pitfalls that can be shown in picture.
I also did some scene destruction researches. Here is a chart that concludes a high-level method to do object destruction in games.
Chaos destruction is what Unreal Engine provides, but it is hard to modify and utilize where some systems inside have potential bugs as well. Physics replication is another field, which I did not have enough time to dive into. Here are some results I did using Chaos destruction.
❋ Showcase
The final system can be used in client-server architecture (i.e, Unreal’s dedicated server with clients). The modification updates the render and collision altogether at the same time.