Bob would have been proud
Congratulations Lukas:) Amazing piece of 3D parametric shader:) thank You for sharing Your knowledge:)
Great studio. Great game will be.
Senior Environment Artist at Ubisoft Massive Johannes Böhm described the production techniques, which helped the studio to build Manhattan for The Division. The article was first published in “Making Games Magazin” 06/2016. This is the second part of the article, which deals with snow usage, templates and a pretty cool piece of technology called The Levelanalyzer. You can find the first part of the article here.
At this point, level design started nailing down their set up more and more, so it was time for me to start dressing the scene.
One of the things that we pay attention to a lot at Massive is that everything in our world has to make sense and has context. We don’t just place wooden boxes as covers randomly in the world, but rather look at the environment and then choose objects that would fit in it. Furthermore, we try to connect them so it doesn’t just look like they have fallen from the sky.
For example, we use drag marks in the snow around crates to show the have been moved into position.
We also rarely place a single trash bag, but always have some small litter around it that has fallen out when they were dropped on the street.
In the case of this street, I had the construction of the Dark Zone walls on the southern side, so I could use a lot of construction assets as covers , scaffoldings as elevated sniping positions and construction cranes as view blockers.
I continued those Dark Zone walls on the eastern side to block off the roads.
I chose police cars that would have formed the end of the attacked convoy as covers in the middle of the street. The same police cars were also used to construct the roadblock on the northern road that the Rikers had built to cut off the convoy. I hung a car on one the construction cranes to show how they used it to construct the barricade. Forklifts (that had been taken from the construction site) were placed close to the barricade to show that the Rikers also used those to move cars around.
Construction cranes were used as a major element in the composition
Templates are a premade arrangement of assets that are saved out as an object in the content browser to be used in a level. Sort of like a more advanced version of a prefab in Unreal Engine 3.
They can be set up with the possibility of changing certain aspects of them, for example if small litter should turned on or not and how much snow should be on the assets.
Furthermore, there is the possibility of randomizing parameters of assets such as colors or even the position of assets.
If that isn’t sufficient, the Artists can also edit every single asset in a template in the level after it has been placed.
We have created hundreds of those for The Division, ranging from a tipped over trash can with spilled garbage to an entire roadside with cars and litter.
Using those templates saved us enormous amounts of time.
One of the things I iterated on a lot was the construction cranes in the scene. They were used to frame the scene and to create triangles in the composition that would lead the players eye towards the end of the road where the enemies would be spawning. Getting those angles right in a way that would work from every direction the players could approach from was a bit challenging, but in the end it worked out nicely.
At this point, the major story of the scene as well as the cover setup was established, so I could start looking at smaller details. Dead and hanging bodies were a large part of giving the morbid flair to the scene and to establish the Rikers even more as a cruel and relentless enemy. But instead of just randomly placing those bodies, I came up with a plan of how the battle would have gone, from what positions the Rikers would have attacked etc.
I illustrated this in the scene with bullets on the floor, bullet holes on cars, dead bodies, blood, drag marks and footprints.
The fight also includes a mortar that shoots at the players. I used burned out cars and craters in the street to show that it had also been during the initial assault on the convoy.
Another major thing was the snow painting. It is one of the most important steps in the production and can really make or break your scene.
Again, it is important to think of the logic of where you would find snow, where it would be melted and where it would be slushy. For example, you wouldn’t see snow collecting under cars that have been standing there for a long time and the snow would melt around warm objects such as running generators or manholes. Whenever snow melts, the snow around it gets wet and the water looks for a direction to flow in.
Part of the snow painting is also placing tire tracks and painting footprints. If used correctly, these can be enormously helpful in telling the stories in your scenes.
Because Snow is such a big part of the the visual aesthetics of The Division, our tools team came up with a solution that allows us to paint the snow directly in the engine.
Basically all the roads and sidewalks have a certain shader applied to them that activates this functionality.
We can choose to paint in three different channels(which represent RGB on a mask that is laid out in XY over the entire world):
- Imprint (I.e. Footprints or tire tracks, can be chosen per object)
When painting those on top of each other, we can create quite interesting effects. Painting Snow and Wetness in the same place for example, will result slushy snow and if you add footprints on top, it starts looking more icy.
Additionally, we can set the amount of snow on every object in the game and use other special objects that we can place that influence the snow (such as ice puddles, drag marks or tire tracks) and that give us more resolution than the normal snow painting mask would.
We also place 3D Snow pile objects that blend very well with the 2D painted snow to give more depth to the snow and to cover up sharp 90 degree angles in the environment.
A birds eye view of the scene, showing the snowpainting
At this point, I felt like I had a very solid scene, so it was time to start polishing it. Part of that is getting a lot feedback from all sides. The scene needs to be tested a lot to see if cover positions are obvious enough to the player, if the movement around the environment works well and if the combat works as intended. If not, adjustments need to be made with the Level designers.
After doing a first pass on the snow painting, I started looking at the distribution of details as a final step of the artistic process.
Just plastering the entire scene with tiny details is a sure way to wreck performance and it is also not desirable from a compositional standpoint. Having areas in your scene that the players eyes can rest on is important and help lead it to where you want to the them to look.
The requirement for every area in The Division is that they run completely fluently without major noticeable frame drops, no matter on which platform.
Snowdrop is an amazing engine and without it, this goal would not be achievable, considering we have large amounts of NPCs from different factions and four players all with their own skills with lots of bullets, explosions and weather effects on screen at the same time.
Techart is involved in every step of building a scene, giving feedback on potential problems and possible workarounds from the before the first asset is placed.
They also keep an eye on performance during production to make sure nothing becomes too costly.
Despite this constant checking by TA and the power of Snowdrop, most areas require some tweaking after the art pass to make them run at the target frame rate.
The optimizations in this scene were done by our Artists Nils Lind, Oskar-Johannson Möller and our TAs Kunal Luthra and Valentin Sergeev because I had already moved to another project at this point.
In the case of this scene, what needed to be optimized was unique object count, culling cost and overall object count.
Unique Object count is mostly an issue for the streamer. When they player moves around in the world, the streamer needs to load objects, textures, sound files etc. of the surrounding areas from the hard drive into the ram to be able to show them on screen.
If there are too many unique objects in the area, the hard drive can’t load the objects quickly enough. Objects that pop into existence, lower displayed LODs on meshes and low resolution textures are the result.
To make sure the streamer is able to stream in everything in time, we have a helpful tool in Snowdrop:
This tool shows a grid in the world and how many unique objects are being used in that particular area. You can sort objects by how many times they are used and select them from within the tool.
That makes it quite easy and fast to decide which assets to replace (for example that you might not need five different sorts of trashbags, but only three).
A shot of the level analyzer. The number and colors are showing how much unique objects each sector uses.
Culling Cost is related to objects not being rendered due to them being hidden behind other objects. The renderer only renders whatever the player can see. If an object is hidden behind another object (from the players perspective), it won’t be rendered. The problem is that this isn’t free. The engine needs to figure out which objects are in the players view and which ones aren’t and then cull those that are not.
If the number of hidden objects is very high, it can slow down performance.
The way this was fixed for this particular scene was to deleted objects that were hidden under or behind other objects. One area that was especially challenging in this regard was the huge trashpile that was blocking the road in the west. I had used a lot of templates to quickly create this barrier and all of them had a bunch of small trash that were hidden under other trashbags (since I placed the templates on top of each other).
A lot of them had to be deleted by hand which took quite some time and could have been avoided had I been more careful with the placements from the start.
Overall object count simply means how many objects are being used in a particular scene.
Most of the time Snowdrop handles an insane amount of objects really well, but in this scene I had overdone it a bit with how much detail I put on the street.
The way this was fixed was by exported a lot of objects of the same type (such as trash piles, snow piles etc.) and combining them into a new asset. That way, instead of 25 small snow piles, the engine would only have to load 1 big one. It was a bit of a cumbersome process doing this for a lot of objects in the scene and you also lose some advantages that come from reusing smaller objects such as instancing, but it worked in this case.
It also has the advantage that we didn’t have to sacrifice any visual fidelity or details.
Creating a scene for a game like The Division isn’t easy. It requires a lot of skill, knowledge, experience and teamwork. It is hardly ever a single person’s work that makes it look and play great, but rather the successful collaboration of many different disciplines and individuals.
Luckily, at Massive, we have an exceptionally talented team that makes it fun to come to work and give your best every day.
I hope with this article I could give you a good impression of what it is like working as an Environment Artist on The Division.
If you want to see more of my work, please find me on Artstation.
The article was first published in “Making Games Magazin” 06/2016