Hello Squaddies, and welcome to the first installment of our Devblog “The Journey to Unreal Engine 5”.
As you might guess from the title, this is our official announcement that Unreal Engine 5 is coming to Squad! We have been cooking this for a little while now, and it will need to stay in the oven until we are happy with it! But today, we would like to show off some of what we have been doing and talk to some of our Dev team about what they are working on with their teams!
Let’s look at today's topics:
- Worlds Team - Al Basrah
- Factions
- Vehicles
- AA & CAS
- Quality Assurance Testing
- Optimization and Performance
- New Tools and Features
- Risks and Challenges
But before we get into the topics, here’s a word from our Project Lead, Howitzer!
Howitzer: "Hi all. I wanted to put a short foreword in this Devblog to talk about what we are hoping to accomplish with the Unreal Engine 5 migration. We want this transition to help secure the game's sustainability far into the future. As Epic updates its engine, new advanced features become available that we want to be capable of using. The closer we are to the latest engine version, the easier it will be for us to use new tech, should we need it."
"One of the biggest challenges so far with our UE5 migration has been the new physics engine. It's a huge programming effort, with Design needing to set up all our vehicles again, mostly individually! We are also implementing new sound tech, so all our weapon audio is being set up and retested currently. It’s all very exciting, but time-consuming work."
"This is going to set us up for the future, giving us a new foundation, if you will, for the future of Squad to take off from. A foundation that has been years in the making."
Worlds Team
Ceeg: "So what made the team decide that Al Basrah was the map to introduce with UE5?"
Zeno: "It was one of our oldest maps with extremely outdated visual quality, yet also one of the most played maps, a pretty consistent favourite in Invasion. This is why we chose to revitalize it with the latest production pipelines and current quality standards. We also wanted a “Classic” Squad map to showcase the strengths of the new UE5 workflow and features, which acts as a proof of concept for how we want to make Squad maps moving forward."
Ceeg: "I know the players want to know… Were all the previews of Al Basrah in UE5? Did you do that deliberately to see if anyone would notice?"
Zeno: "Ha! Yes they were. All of the preview images and videos that have been released since we showcased the Al Basrah remake a couple of months ago have been from inside the UE5 engine. We were conscious that we still had not announced UE5 at the time, so we tried showcasing the current state of the map that we could have achieved in UE4. But in the future you will be able to see how far we have been able to progress the map in UE5. And it is looking amazing!"
Factions
Ceeg: "So, Factions have been working on some updates to the INS faction; tell me a little about that!"
Fuzzhead "Right! So, the Factions team has been working on a number of things for UE5, but no major independent content will be included from us. However, we are working on redesigning the INS Factions models and textures! This will be mainly to facilitate the creation of purchasable weapon skins for their kits. These weapons are very old assets and currently don't meet the minimum standard to use the model with our weapon skin system, hence why they are getting the rework."
"Our designers are also hard at work on the UE5 Vehicle Handling, which I think you got to see in the Live Stream on Remembrance Day."
Ceeg: "So are the vehicles using a different system than before in UE4?"
Fuzzhead: "Vehicles in current live Squad use UE4 PhysX as a middleware for physics simulation. This is an aging physics engine and Epic chose to no longer support this for UE5. We are now using the native “Chaos” physics which is new in UE5 and developed by Epic. We are evaluating other middleware options as well, to ensure we have a robust system in place to meet the demanding needs of Squad. The main differences between PhysX and Chaos is that our engineering team has more control over the simulation, which allows us to take advantage of more granular details, which is particularly helpful when it comes to designing tracked vehicles."
[previewyoutube=JEsCtycrVzw;full][/previewyoutube]
Ceeg: "Has it been difficult to update all the vehicles? Maybe you could walk us through some of the processes behind changing one class of vehicles or one vehicle?"
Fuzzhead: "Our engineering team has been working for a long time to ensure Chaos physics meets the needs of Squad, and carries all the necessary features of PhysX, while purging the quirks that can sometimes make Squad vehicles behave in strange ways. The road has been long but we are starting to see some good results now. In the first UE5 builds, our vehicles sat on the ground, sad, lonely and unable to move (no physics). Our engineers have been bringing as many parameters as possible into Chaos, and adding new parameters to help designers create more robust vehicles. They have moved many of the variables that used to live on the blueprint before, onto a vehicle config data asset. These variables include values for the Engine, Transmission, Wheel setup, etc. Designers start with some baseline values, loosely based on the UE4/PhysX values, then tune accordingly. Lots of testing in PIE (Play In Editor) occurs in this process to ensure each vehicle behaves as intended. Common issues arise during this process, and improvements and fixes are implemented. Here’s an example of a vehicle config, specifically the M1A2, and some of its variables."
AA & CAS
Ceeg: "Before we get to the questions, I know I wanted to ask you both about the timeline for AA & CAS extras that are coming to UE5. What are we able to share with everyone today?"
Crush Depth: "Well, first, the goal with AA & CAS is to have it come in an update some time AFTER the initial migration to UE5. So MANPADS and additional CAS helicopters will be added at some point after the launch. That's our current plan, at least."
Ceeg: "What is AA going to look like in UE5? Will there be a Class available to each faction that gets Anti Air kits?"
Crush Depth: "Shoulder-fired MANPADS will be available to most factions as part of a new soldier role. Other factions will forgo the mobility of MANPADS and instead build fixed FOB emplacements which any player can fire powerful missiles from, similar to how emplaced ATGMs work now."
[previewyoutube=TWY8YDudN_E;full][/previewyoutube]
Ceeg: "Will the factions that get MANPADS all have their own unique launchers?"
Crush Depth: "Some factions will share launchers, but we will do our best to ensure there is a wide variety of launchers and variants so that every faction is using an authentic system. We also aim to include some unique pieces of hardware which don't play like the others, to introduce some interesting gameplay twists and faction asymmetry where it makes sense to."
Ceeg: "Was it easier to create the feature in UE5 instead of UE4? Why or why not?"
Censer: "To be honest, it has been mostly the same. UE5 has some nice quality of life things like code hot reloading that makes iteration faster, but that has been about it. We just felt it was time to making the skies of Squad not as safe as they are currently!"
Ceeg: "So right now, what are the AA & CAS team working on?"
Censer: "We are currently working on playtesting our prototypes with the CPT members, making sure we are hitting our design goals for the feature."
Crush Depth: "The testing is mainly focused on refining the featureset, and analyzing how the new gameplay affects the flow of 100-player matches. With each playtesting cycle we test our assumptions, look for dominant strategies and exploits, and iterate quickly. Our CPT group have been integral in helping us with this, and continue to be!"
Quality Assurance Testing
Ceeg: "We all know that QA takes time on any project, but what have been some of the most time-consuming things that the team has been working on for UE5?"
Karm: "One thing that has been taking a lot of time is the swap to a new (vehicle) physics system. There is a lot of work left to be done on the development side, and each iteration needs to be tested. Another thing is that an engine upgrade means that the entire game needs to be tested, because things can break anywhere. Obviously, after 10+ years of development, that’s a very large amount of stuff! Like Crush said, the Closed Player Test group has been great at helping us in our Bi-Weekly (sometimes weekly) tests. The larger groups of people playing frequently allows us to find the issues and document what needs to be done much faster than us relying on finding them on our own!"
Ceeg: "Are there any tools in UE5 that make your job any easier?"
Karm: "Nothing NEW, but the tools are significantly improved for us to be able to provide more in-depth investigations into performance. I think Patrick will be able to tell you more about that though!"
Optimization and Performance
Ceeg: "You’re going to get technical with me, aren’t you?"
Patrick: "Yep! Buckle in."
Ceeg: "So you and your team came back to Squad to help with Optimization. Tell me a bit about what that has looked like for you and the team."
Patrick: "Well, we’ve known that Squad has had some performance issues, and in the past we’ve just had to patch things in place due to time constraints and different feature priorities. This has led, over time, to things being done in non-optimal ways. This is commonly known as Tech Debt. The first thing my team did was to have an Unreal Insights profile taken on our minimum spec machine and my team went over that for about 2 weeks, documenting all the issues we found, and what was costly. Once we had that list of problem items, we dug into each one briefly to get an understanding of the scope of fixing them. Once everything was said and done, we had around 43 pages of notes documenting the various performance issues with Squad. However, having a list of issues is just the start, we also needed to come up with a technical plan on how to deal with these issues, some of them are quite heavily involved. While we’re a small team of 6 people (including me), we’ve split up the work accordingly and have already made some decent headway into the performance issues that Squad has had with various systems for years."
Ceeg: "So with this 43-page document, how do you intend on prioritizing different aspects of the optimization process?"
Patrick: "Generally, we’re targeting the more costly items first, for example animations, which are quite costly for a lot of reasons. Part of our solution is taking advantage of the Thread Safe animation update that was introduced in UE5, and ensuring we don’t have any wacky bugs. As a further step, we only toss things on another thread, in general, if the work would be done faster on another thread. We’ve found a few cases where it was spending more time considering putting work on other threads, than it would be to just do the work in the first place.Performance issues that are more involved, for example UI issues, are not quite as easy to address, even if they are costly. To circumvent these kinds of issues, we’ve dialed more into the Significance Manager in order to help adjust client side performance."
Ceeg: "Is Squad likely to receive optimization to issues that have persisted from UE4, or will this all be fixing issues with UE5?"
Patrick: "Our goal is to optimize Squad itself. Certain engine features UE5 introduced helps us in that, but the engine itself isn’t necessarily the problem, it’s our code. We are being careful to not fully lean into some of the heavier systems that UE5 brings, at least without a solid plan in place. That said, we are experimenting with some UE5 features, such as utilizing Iris, Epic’s new replication system, which uses Delta change based replication rather than iterating over all actors to determine what needs to be replicated. We’re still in the early stages of testing that, as quite a bit of Squad code has to change in order to make sure we don’t colossally break things!"
"I have a whole list of things we have already worked on to share:"
- Audio Optimizations[list]
- Animation Notify Play Sound improvements We have found that the engine will create an audio component each time a notify wants to be played, or any sound is played from a non-audio component. This is costly, and our solution is to have a lightweight audio system that can play sounds without having to worry about updating the location of the component each frame.
- Physics SyncingWe have noticed that the engine needs to sync Physics quite often, but it doesn’t appear to have any gameplay impacts from our disabling of it on Starship Troopers: Extermination. We’re still in the investigation stage of this and are waiting for the final bits of the new Vehicle system to be finalized. [list]
[/list]
- Ticks happen every frame of the game. Since we’re targeting 60 FPS, this gives us a frame budget of 16.6667ms of frame time per second in order to hit that. This is mainly on the Game and Render threads that we need to worry about.
- This audit is mainly targeting going through all of our game code and blueprints and checking to see if something is ticking. If it is ticking, then we look into why, and if it doesn’t need to tick, then we rewrite that code and dependent code to not rely on a tick. This usually means migrating it to an event based update approach rather than checking something on tick.
- A specific example of this is the “SoldierHasShovel” check, which was firing on tick. Now that boolean is set when a player equips or unequips a shovel. There are hundreds of these kind of examples throughout the entire code base and fixing them all is not a small task. This is also known as “Death by a thousand cuts”.
- Unreal uses a system called Unreal Motion Graphics, or UMG for short. As with any kind of system, it’s easy to do non-performant things and not realize it until some time later. One big culprit of this is Canvas panels, which cause loads of performance overhead, and at most a game should only have 1 per level if possible.
- Additionally, there’s other optimizations that can be done with UI, similar to the tick audit above, where we have stuff in the UI getting updated very frequently, despite not needing to.
- A fix we’ve already done seems silly, but our main menu button was ticking every frame, even when not visible. While it’s not costly and is easy to fix, there’s also quite a few of these kinds of things littered throughout the UI in Squad.
- Underneath UMG is Unreal's actual UI system, Slate. Slate itself has performance issues. Thankfully, we solved some of these issues on Starship Troopers: Extermination and will be bringing over as many of these fixes as possible for Squad.
- This is a catch-all for systems that are costly for various reasons and need to be optimized as a whole.
- As mentioned above, Animation fits into this category.
- Here’s a brief list of what we’ve worked on so far: [list]
- VOIP Optimizations - Fixed various issues with VOIP, such as array iteration, registry calls on Windows, etc
- Animation Optimizations - Move animation updates to separate threads
- Replication Optimizations - Investigating Iris and improvements
- Character Movement Component - Move to multi-threaded solution, we did this on Troopers and it worked fairly well.
- Object Pooling - Spawning actors is expensive, having a “pool” of already spawned actors that we can swap in and out to bypass this performance hit will save quite a bit of performance each frame.
New Tools and Features
Dynamic time of day and randomized weather
Zeno: "We are working towards a full rework of how lighting works in UE5. This includes the addition of a new progressive time of day and weather system, that allows us to accurately simulate the real passage of time. One of the most striking features of this system is the addition of dynamic and ever changing weather conditions, so just because you are starting with a nice sunny day, does not mean it will stay like that throughout a whole round of gameplay. We are still working on the details of how this will be fully integrated, but our vision is a dynamic world, where players will need to adapt to what nature throws at them and use it to their advantage."
[previewyoutube=c0-301mvrfI;full][/previewyoutube]
Nanite and Virtual Shadow Maps (VSM)
Zeno: "These 2 features are one of the most striking features of UE5, and will allow us to have much more flexibility in how we create our levels. For players, the visual changes will be noticeable as much higher quality of assets at distance, by both improving Levels of Detail (LODs) as well as letting us drastically increase drawdistance. VSM will also do the same, but for shadows. Where you before might have noticed a drastic decline in shadow quality at distance, as well as shadows disappearing for certain objects, VSM allows us to render very high quality shadows out to extreme distances, as well as sharper, more detailed shadows up close."
[Nanite Foliage Conversion example]
Our Risks and Challenges
As a team, we have been assessing and managing the challenges of Unreal Engine 5 from before many of them even arose. We knew this upgrade would be time-consuming, taking away time and content from our current live game. And we knew that if we really wanted it to succeed, we would be taking a hit on the previous release timeline we had planned for Squad in 2025. So, it’s an investment that we are excited to share more of in the coming weeks and months. It won’t be rushed, and we will be inviting you all to come test Unreal Engine 5 Squad with us when the time comes.
This is the end of our first Devblog on the migration to Unreal Engine 5. We plan on releasing more of these as the months go by to let you all know of our current progress, but it will likely be into 2025 before you hear more from us regarding Unreal Engine 5.
Special thanks to Oat Bread and Katt from the CPT, whose screenshots were used in today's Devblog!
Until next time.