there is no need to create a vdb, but it works yes
Super taf! ;)
Ted Bundy's car? :D
Scott Pearce did a greatly detailed breakdown of his incredible project Cities of Death inspired by Warhammer 40K: style, sub-d modeling, UE4 blueprints, lighting and much more!
Hi, I’m Scott Pearce. I am an environment artist living in Melbourne, Australia. I’ve been working in the game development for over a decade, having landed my first job at a studio called Transmission Games who developed flight and sports titles. I’m old enough to remember playing Wolfenstein 3D, Prince of Persia and the very first Unreal when they were released. These all made a very big impression upon me! Like a lot of artists from that period, I got into the industry through modding. In my case, it was an RTS called Dawn of War, which I’m sure you’re familiar with. When I was at university studying an Interior Architecture and Design Degree, I had some friends who were studying art and using game engines as a medium. They were doing some really interesting and cool work and some had gotten jobs in the industry. I was lucky enough to have one of them help land me a job.
The first project I worked on was for PS2 back in 2006, called Heatseeker: an arcade flight game that used the film Top Gun as an influence. I then went on to work on a World War 2 flight game called Heroes over Europe. It was developed for PS3 and Xbox 360 and it was a huge leap: I went from texturing environments with only 4-bit colors to now having full color, spec, and normal maps to play with.
Game dev can be a volatile career and I’ve worked for a few companies that have closed their doors or have let the staff go. Transmission Games was one of them: they ran into financial difficulties and closed. After Transmission, I worked at a small indie studio called End Game Studios as an environment artist, before doing a brief stint at Visceral Games’ Melbourne Studio who were working on a third person console title. Unfortunately, the project was canceled and the studio closed. Since then, I’ve worked at EA’s Firemonkeys on a couple of mobile racing titles, Need for Speed: No Limits and Real Racing, as a level artist. Most recently I worked at a small Melbourne studio doing console sports titles.
One thing that I’ve learned from working in the game dev is the importance of folio and staying up to date with current tools and game art practices. Since I was out of work I wanted to dive into using UE4, work on my highpoly and normal mapping skills, as well as tackle subject matter that I didn’t normally work with. That gave rise to my Cities of Death project.
Cities of Death: Style
Warhammer 40K has a very distinctive style. To make the scene look as 40K as possible, I made extensive use of referencing the scenic miniatures that were created for the tabletop game, along with gathering a lot of concept art, both fan and professional, that was based around the 40K universe. There are also a lot of 40K games that have been made: screenshots from the canceled Dark Millennium provided a great source of inspiration.
Stylistically, The Imperium or mankind and its galactic civilization as it is known in the 41st Millennium has a bunch of features that make it readily recognizable. Broadly, this can be thought of as ‘gothic church meets steampunk’ or even more crudely as ‘knights in space’. Upon looking at all the reference material, identifiable tropes start to emerge such as arched gothic windows, arched gothic recesses, buttresses, spikes, cylindrical vents, big bolts, large pipes. The architecture tends to have this vertical thrust to it. And then there are the decorative elements, chains, books, scrolls, padlocks, candles, eagles and all the skulls. In 40K you can never ever forget nor have enough skulls.
My Cities of Death project grew out of converting one of the modular scenic miniatures, the Basilica Administratum, into a game model. I stuck pretty closely to how Games Workshop presents the model. I think that having such an identifiable 40K designed building as a focal point helps signal the universe in which this environment belongs. In designing any features that were unique to this scene, I took into account the aesthetic that I’ve just outlined.
Most of the modeling for this project was approached by using a combination of SUB-D modeling for the architectural/hardsurface pieces and ZBrush for the sculptural elements. These were then baked down to game meshes. I took this approach as there is a lot of relief or extrusions that appear in the scenic miniatures: the surfaces are rarely flat and are loaded with detail. I also wanted the edge highlights and surface detail that baking normal maps brings! Bearing this in mind, I tried to break down each mesh into small modular components that I could reuse. This meant I had a bit of a kitbash library that helped maintain visual consistency across the project.
The brass skulls that appear a lot in this scene are all variants of one original brass skull mesh. I would export out the highpoly SUB-D mesh to which the skull (or skulls) would be part of to ZBrush. With this model in ZBrush, I would then append the base skull as a subtool and move it into position. I’d then use DynaMesh and manipulate the skull through the use of various trim brushes, the clay build up brush, and the move brush. I’d make sure that the resolution that I’d set DynaMesh to was high enough to preserve the large and the mid forms. When needed I’d disable dynamesh and add extra subdivisions to the mesh for sculpting in any extra details.
Another technique that I used involved setting up a decent base mesh in 3ds Max, before exporting to ZBrush. I’d make sure that I had the correct form and proportions of this base mesh and any needed SUB-D geometry to which the overall sculpt would be part of. Yet again dynamesh would be used on a high setting, ensuring that the overall form of this base mesh was preserved and that there was enough geometry to support the level of detail that I wished to add to the sculpt.
These sculptured elements were then re-imported back into d 3ds Max, ZBrush’s decimation master being used if the vert count was too high. In 3ds Max, I’d then ‘draw’ a lowpoly mesh via edge extrusion over the sculpt. This was done by using the Freeform tab found in the ‘Ribbon’ within 3ds Max. By choosing a surface when in this mode, the faces that are created conform to the topology of the selected mesh: very useful. In regards to the SUB-D meshes and the creation of their lowpoly meshes, I would simply duplicate the highpoly mesh and then remove any unnecessary edges, ensuring that I selected the appropriate Turbosmooth iteration value beforehand. The lowpoly meshes then had 2 UV sets assigned to them: one for the purpose of baking the lowpoly, the other for UE4’s lightmass.
For the purposes of baking the lowpoly meshes, I made, towards the end of the project, extensive use of Marmoset Toolbag 3. It had the advantage of being really quick with its baking– especially with AO, and also the added advantage of being able to paint out skewing or waviness in the bakes. While this could be done in Substance Designer, the process was a bit convoluted and a bit too slow. The cage that Toolbag created was more often than not suitable, however on the few occasions when I didn’t get the desired results, I’d end up creating my own and using Substance Painter for the purposes of baking.
I wanted to make both the process of creating baked maps from my highpoly and the layout of the lightmass UVs more manageable and decided that the easiest way would be to ‘explode’ my game meshes into manageable chunks and then re-assemble these via UE4’s socket snapping system as a blueprint. The way that Games Workshop have constructed their scenic miniatures lent itself to this approach. Doing this enabled me to have somewhat high vert count game meshes with relatively large texture sheets, but made it easier to handle. Given that this was a folio piece, I decided to indulge myself as these are luxuries that cannot always be afforded in development!
I found working with UE4’s blueprints pretty amazing and flexible. I only really touched the surface of this system, but I do hope to delve a bit more into it in the future. To give a bit of an overview, sockets are basically locators that have position/rotation/scale values attached to them and that can be setup within UE4’s static mesh editor or exported out with a game mesh as a locator (Maya) or dummy (3ds Max) with SOCKET_socketnamehere as a prefix. By creating a blueprint in the ‘actor’ class, and placing the static mesh with the sockets at the top or root, I was able to snap and assemble hierarchies of static meshes. You can even utilize one blueprint’s socket, within another blueprint. This was great, because not every mesh that I created was designed to snap to the grid and it helped reuse a variety of assets in various configurations.
Substance Painter was used to texture everything in the scene along with a few materials that I created in Designer. I had a few master materials that I used in UE4. One was a very basic ‘no frills’ PBR: standard Base Colour/Metallic/Roughness/Normal/Ambient Occlusion inputs were used. I did, however, start to create a few custom master materials specifically for the purpose of the lights and some of the emissive surfaces that were used on the control interfaces. Material Functions were combined into a master Layered Material for the purpose of creating the leadlight glass – one function being the glass, another being the lead window frame and the another being the dirt and grime.
I’m not a wizard when it comes to making materials in UE4, but I did find that with both searching the internet and a little bit of trial and error, I was able to come up with materials that met my needs. Using both a combination of masks and parameters (be they scalar or vector) and when needed material functions, I was able to very quickly tweak material instance values in UE4. Take the leadlight glass – it was set up in such a way that I could manipulate its colour, opacity, roughness, the amount of specular highlight, and the amount and the opacity of the dirt. The ability to do this in UE4 saved a huge amount of time.
A feature that I really noticed in some of the 40K art and in some of the cities and scenic miniatures is a collision of large industrial features sitting alongside gothic architectural elements, with a few monumental structures thrown in. The scale of this stuff tends to be huge. As stated earlier, these designs have a really big vertical element to it, which gives the overall form a kind of thrust.
While I couldn’t go ahead and build an entire 40K city for this project (although I think Erasmus Brosdau did an awesome job!) I could create the impression of one by strategically placing assets. Having the tower and the large vertical pipes in the foreground, with the flight of stairs creates the impression of there being something below the balcony. The smokestacks and the continuation of the large pipes gives the impression of some kind of industry behind the administratum building.
The lens flares are a very simple particle emitter, made in Cascade. All I did was create a material that had a mask to simulate the lens flare effect and a parameter that controlled the emissive amount and the colour of the lens flare. I simply manually placed them where I thought they’d be needed and set the emissive and colour values to match the light source.
The use of blueprint actors came to the fore in helping me light the scene. Beyond a directional light that I’d set up to simulate a moon (I used an intensity of 0.3), and some orange coloured lights that I’d used along the more peripheral parts of the scene, the environment is primarily lit through a bunch of street lights, bulkhead lights and candles. Setting up a blueprint for each light type gave me the ability to edit variables of one light blueprint within the editor and then have these changes propagated and applied to all blueprint actors of that type. This made the reiteration of the lighting a pretty quick process. To have had to have individually tweaked each light in a scene of this size would have taken ages and have been incredibly tedious, given the amount of lights.
These blueprints contained both the static mesh along with a light, be it spot or point. The construction script allowed me to do things like have a variable that controlled both the static mesh’s colour and emissive components along with the light source’s colour, all through one control. Other variables added included a control for multiplying the emissive amount of a material (also very useful for tweaking the bloom around the light) along with light specific controls such as intensity/attenuation/inner cone/outer cone values.
Baked lighting was used in this scene, so I had great fun giving every mesh a second UV set! Tilmann Milde’s Unreal Lighting Academy videos were a fantastic source of information and provided a really great overview as to how to go about getting the most out using UE4’s lighting systems.
I used a lot of reflection captures in this environment, probably going a bit overboard with my placement of them. They did though, make a big difference to how the scene looked, given that there were a lot of smooth and metallic surfaces. Beyond that, I made use of UE4’s post processing features to make the scene appear cooler and more blue, as the lighting looked too warm, and made some big adjustments to the auto exposure values so they suited a night time scene. There were a few other tweaks I made with the Post Processor, but they were pretty subtle. I ended up using some volumetric fog in the scene, as well as some of smoke and steam effects that were made by Epic.
Project Goals & Feedback
At this point, I’m happy to leave the environment as is. Initially, I planned just to build the administratum building and leave it at that, but I decided to turn the project into an environment. I could easily have kept adding more but I think there does come a point at which it is time to move on and tackle something new. I set out to further develop my modeling skills, gain a greater understanding of UE4 and build something cool. I’d like to think I achieved all three. That being said, I plan to take what I’ve learned on this project and continue to build upon it.