Wiktor Öhman, Lead Artist at Quixel recently paid tribute to Counter-Strike’s iconic Dust II map and recreated it with Unreal Engine and Megascans.
In this detailed breakdown we’ll go through every step in that process to give you a good idea of how and why these solutions can be game-changing for artists.
Blocking Out the Level
When working on a remaster/homage, finding the right references is always the first step. In this case, the reference was extracted directly from Counter-Strike, by taking a set of pictures of the level from all possible angles, then creating a low-resolution scan model with the help of RealityCapture from that data.
High-resolution scene in RealityCapture
Low-resolution scene within Autodesk Maya
The next step is to build a blockout with primitive geometry (cylinders, cubes, etc…), then overlay them on the scanned map to get a 1:1 match with the original environment.
The blockout geometry made in Autodesk Maya
For the final step in this chapter, all we have to do is import these primitives into Unreal Engine and start working on the environment itself.
The blockout geometry in Unreal Engine
Creating the Building Structures
The building structure is generally just a set of cubes that are extruded.
As you can see on the screenshot below the geometry has a lot of edge loops that may seem unnecessary at first, but they’re actually used later on in the engine for vertex painting.
The unwrapping process was fairly simple as well, and since we’re gonna be using a lot of decals, trim sheets and other objects on top of this structure, there won’t be any seams problem.
House created and unwrapped in Autodesk Maya
House imported in Unreal Engine
From there you can repeat the same process for the remaining buildings. They all use really basic geometry, so the entire map could be covered in an hour or two; which is drastically faster than the usual process.
Instead of baking, texturing and importing the buildings into Unreal Engine, this process goes straight from basic geometry to the final texturing stage.
This is done thanks to the Megascans library, which has the ideal construction plaster for the structure:
Preview of surfaces in Quixel Bridge
The last step of the usual process would be to manually export all the textures of this asset into UE4, then create the material, its material instance and finally apply it to the structure. This step is also completely automated with Quixel Bridge, which is used not only as an asset browser, downloader, and manager, but also an exporter.
The export process goes like this: with that plaster material selected in Bridge, you hit ‘Export’ and the asset with all its textures and material instance will be imported into Unreal, and the next step is just a simple drag and drop on your building.
This doesn’t look like your latest Battlefield game yet, and that’s because we need to add more detail to the structure itself before working more on the texture.
Speaking of details, something to keep in mind when doing an environment for games is that you shouldn’t slap displacement-heavy textures all over your map. It’s a trend nowadays to create “material balls” with displacement all over, but that just isn’t good for performance sake, so in this case we’ll rarely use such techniques.
One detail that would work just great on this structure is a set of wood boards, and just like with the construction plaster we don’t have to create anything from scratch. By just typing “wood boards 3D” in the Bridge search bar we have exactly what we need. Hit export and let the fun part begin.
Do the same thing with a few other assets and within minutes you’ll start seeing the potential behind every structure you work on. This allows you to change things on the fly without ever spending hours creating something only to have to replace it later on.
Since these meshes are placed at the corners of the walls, we get rid of seams in this step.
Creating Сustom Assets
The structure is starting to look promising, so let’s add more details on the walls to make them look realistic. In this section we’ll be exploring the creation of custom assets, which is always an option when you don’t find the exact asset you’re looking for in the Megascans library.
The first step in that effort is to use trimsheets, a workflow that allows you to overlay details around any given object, all without breaking the performance budget.
This starts with basic geometry that is overlaid on top of the wall:
Then you create your material in Quixel Mixer. This step takes just a few minutes to set up, and in this case three layers were enough to create this material.
The textures are automatically imported with the help of Bridge as well, which means you get the end result right after a drag and drop on your geometry:
This basic “geometry > Mixer material” process was also used to create a crate. The process is different from the trimsheets workflow, as you basically make one texture, import it in Maya then start building your mesh around it.
The UVs in this step need careful attention to avoid stretching, but again nothing that’s too complex. This approach offers a lot of flexibility with speed and no compromise.
Spicing Things Up with Decals
At this point, we’re really just having fun and overlaying detail on the structure while keeping an eye on performance. The next step here is to add some damage/leaks to the walls, and decals are perfect for that.
The idea behind a decal-based workflow is that you only use a basic texture (like we did with the construction plaster) on your base structures, then stamp all the needed details on top of your structure in order to make it unique.
As always, the process is extremely simple: find the decals in the Megascans library, hit export with Bridge, and start stamping them in Unreal Engine.
There are over a thousand decals in the Megascans library
And that’s it for the structure. As you can see the entire process has been a fun challenge from the start, with no minute wasted out of the zone.
Usually, this may not seem like a big deal, but every time you have to wait 10 minutes to an hour for some textures to bake or if you’re doing UVs for hours, you start losing the momentum in your creative flow, which is what we as an industry should strive to maintain constantly.
We can go back and swap every asset imported to a higher or lower texture resolution, or higher or lower level of detail on the geometry. Bridge takes care of that process as well.
The Road and Beyond
With the main structure detailed, we can finally focus on the road.
For the road, we first need a set of concrete curbs, which are already available in the library. The road itself is created with simple geometry and a set of asphalt materials that are blended together through vertex painting.
These asphalt textures were made within Mixer.
To give it a little bit more life, we then scatter a set of plants and debris with the help of the Foliage tool, and that should be it.
From there it’s just a matter of tweaking, polishing and applying the same logic to the other buildings. You can select a set of assets like the decals and trimsheets, then duplicate them on other buildings, rotate slightly to create some variation, etc.
The end result is a breathtaking scene that was fun to work on from start to finish.
Sharing the Experience
We’ve learned a lot from this project, and while you can already get a good idea of the process with the breakdown video, we wanted to give you more than that with this blog post and an upcoming series of livestreams.
These livestreams will provide further details on all the techniques used in this environment, and will be a good opportunity for you to ask any questions you may have.
Tune in on Wednesday, 12th of June at 7PM CET on Youtube for the first in-depth livestream of this Counter-Strike project.
We’ll be covering the overall project but also go in-depth into how trim sheets can be used in to create broken details, and also enrich any given wall with little work.