Morten: My name is Morten Olsen, lead environment artist on Hitman 3 and Hitman 2. In the production of Hitman 3, I was lucky enough to also be very hands-on in the creation process, but a lot of my time is spent managing our environment art team and outsourcing partners, developing our pipeline, and giving feedback.
Carl: Hello readers, my name is Carl-Lewis Saunders, and I have the pleasure of working as an environment artist at IO Interactive. I have been involved in the development of the entire Hitman trilogy and most recently Hitman 3, which is available at all good retailers. My role on Hitman 3 was as a primary artist on the Dubai track; responsibilities included fleshing out the initial foundation of the level with our level design team, delegating tasks to both our in-house and extended art teams, and working alongside our tech art team to ensure the level can achieve acceptable performance levels.
Emil: Hello, I am Emil Skriver, and I work as an environment artist at IO Interactive. I started at IOI on Hitman 2 as an intern, and later got hired while working on Hitman 3. I have mainly been doing weapons, props, and level art, and, very recently, have been trying out concepting a bit.
Dag: Hi, my name is Dag Bjärum Bengtsson, I have been working with technical art at IOI for both Hitman 2 and Hitman 3. My focus areas have ranged from visual effects work such as the Rain system, destruction, creating and maintaining shaders, profiling performance, and working closely with our render team to research, develop, and optimize features like Screen Space Reflections for our in-house engine, Glacier.
New goals and challenges on Hitman 3
Morten: As with most game sequels, we wanted to do more in less time than what we did on the last two games in the series. We also wanted to push the quality of our art further. On the content side that meant better and more consistent textures and better adherence to PBR (physically based rendering) rules. All three games in the trilogy have been using PBR, but with the number of assets going into a Hitman game, it has been a constant challenge to keep things consistent. A streamlined texture creation process with Substance Designer and Substance Painter that we have utilized since Hitman 2 is a key component in achieving this quality and consistency.
We have a huge library of assets from the previous games that we can re-use, and that saves us a lot of time. With each iteration the library grows and becomes more and more valuable to us. The attention to detail and the amount of variation in the propping of environments in Hitman is like nothing else in the industry. The nature of the game lets the player really dwell on each area and revisit the same places many times, while the locations need to feel believable and look realistic.
For Hitman 3 we also wanted to strengthen the mood and atmosphere of each location and make sure they support the tone of the story. More thought has been put into the lead-in to each mission, so you do not always start in the middle of the sandbox. For example, we start you outside the skyscraper in Dubai, where you climb far above the clouds in the strong wind before you find your way in, allowing the player some time to feel the vertigo and a sense of danger, and really take in the setting before the real gameplay challenge begins.
In the Berlin mission, you start quite far from your objective and find yourself isolated on an empty road in the middle of the woods, and you, the player, must find your way to the action. Again, we allow more lead-in time to emphasize a sense of isolation and loneliness supporting the story at this point.
Overall, we have become better at controlling the pace and spacing in our layouts. The confidence we have in our level design — and how that helps us build more believable and atmospheric levels — really shows in Hitman 3. A huge part of the development of a Hitman location is the mockup stage where we define the overall areas and shape of the layout — a close collaboration between level designers and environment artists.
We also wanted to be better at managing the performance of the game. These large, detailed environments are very demanding on CPU and GPU. Most often the CPU becomes our bottleneck as it deals with an insane amount of information from AI and animation with the large number of NPCs in a Hitman level. We have learned a lot about how to build with performance in mind, both when it comes to level layouts, but also how we construct assets and LODs, and how we build to minimize the number of draw calls.
The most important development in building a better performing game is our Performance Graph, which we developed during the end of Hitman 2. It is a system where we place cameras all over our levels — now from the very beginning of production — and each night a performance capture is taken from every camera and from all the different platforms we support. The FPS is then plotted onto a graph so we can follow the development of the performance of all areas in each level and immediately spot if we have any problems, instead of finding out near the end of the project, when it is a lot less convenient and much harder to fix. These nightly screenshots have the added benefit of providing an interesting timelapse of the development of the game, and for each camera shot we can access a microprofile so we can quickly diagnose the issue.
The better control we have of the performance and the better we optimize our content, the more we can put into our game — more detail and complexity and fewer compromises on the visuals. You will see a significant improvement in the overall visual quality of Hitman 3.
Morten: When I started at IOI back in 2015, Substance was already a thing that a lot of artists at the studio talked about, but it wasn’t used in development yet. I came from Insomniac Games, where we had just started using Substance on the pre-production of Spiderman, and I loved it. Substance offered solutions to so many of the problems we were facing as a game artist. Substance Painter particularly helping with reducing the time it takes to make great textures for props. I have not yet forgotten the work that went into placing chipped edge detail and painting dirt into the cracks of a worn asset in Photoshop. A lot of smart layer-effect and selection-mask tricks were invented over the years, but it was always painful, and always a destructive workflow. Substance Painter gave us access to a non-destructive, procedural workflow with tools tailormade for the industry.
Obviously, Substance Designer and Painter go together as the Substance materials made in Designer is what feeds into Painter, but Designer also works for us as a texture creation tool for tileable textures of all sorts. Anything with a pattern — corrugated metal, bricks, floor tiles, etc. — is so much easier to make in Designer, as well as it being my go-to utility for quickly generating AO or heightmaps from normals or creating a quick gloss map, etc., when enhancing photogrammetry or old textures.
At the beginning of the Hitman 2 production, we moved over to a Substance workflow for our asset pipeline — and on a large production with a lot of outsourcing, that is easier said than done. Before you know it, if you are not careful, you will have a complete mess of files and formats in your folder structure. Our assets switch hands a lot, and we need to always be able to go to the source of any prop and make changes. We did not have any support for plugins or scripts to help with this, but we found a robust manual solution.
Export of our textures to our Glacier Engine still goes through Photoshop, where we have our own plugin to set up all the channels, formats, and texture types we want to export based on named Photoshop layer-folders. All we do for the Substance files is to put them in a folder next to the Photoshop file. This will hold the Painter or Designer file and all the exported maps. These maps are then alt-dragged into Photoshop as linked layers. Once this is set up, any re-export from Painter automatically updates the Photoshop file. This allows us fast iteration between Painter and our engine and ensures that the new files introduced with the Painter workflow are tidy and easy to find.
To share Substance resources between everyone on the project, we simply have a custom Shelf pointing to a folder on our Perforce server. Here we can share anything: masks, materials, smart materials, lighting environments, etc. But the most important component for us is our IOI_Basematerials, a collection of Substances made to cover most of our needs for props — metal, wood, plastic, rubber, leather, etc. — all with sliders to control edge wear, age, color-variation, cracks, and any parameter important for that type of material. Having all artists, including outsourcing vendors, build their prop textures with these materials offers better consistency to the look and quality of our assets as well as a boost to production speed. It also ensures consistency in the work files, which is an important factor on a large production.
These IOI_basematerials used in combination cover the vast majority of our material needs.
An “Ultimate Trim” sheet textured with a mix of our IOI_basematerials — a killer combination! Here you can see how the materials are layered for this look: a metal base, then two layers of slightly peeling paint, finished off with a dirt and a rust material.
Here you can see an example of a prop textured with our IOI_basematerials in Painter, using a metal base, paint, plastic, and a dirt layer.
Morten: As I have already touched upon, Substance helps us in several different areas. Perhaps the most fundamental improvement is that it speeds up the creation process and eliminates a lot of the tedious work we had to deal with before. Being able to see the final material on your 3D model update in real-time as you work on your textures in Substance Painter is also a huge advantage. It is hard to imagine how we made it work before even though it is not that long ago.
Part of being a good texture artist before revolved around being technically strong, being good at juggling advanced Photoshop tricks, and being patient. With Substance Painter all these hurdles are gone, and the artists can focus on being artists — and have a lot more fun doing it. Making changes to your texture in Substance Painter is so easy that you can iterate, try things, and address feedback much faster, without having to rebuild things from the ground up. With our IOI_Basematerials, you can usually find the look you want by tweaking a few sliders, or perhaps quickly dropping a Smart-Material on your model that another artist already made and shared on our IOI Shelf.
Basing the Substance Painter workflow on a set of existing materials not only speeds up the texturing process, it also lifts the baseline quality instantly. This is particularly important when you have a lot of different artists working on assets in-house and in outsourcing: It ensures a consistent quality as a starting point, and a consistent look. Of course, there is still plenty of room for the individual artist to make an impact within this framework, but it provides a good starting point for anyone.
Carl: The basis of any good prop is a clean and precise bake, which Substance Painter handles beautifully. A good bake is key here, as many of the properties in our custom materials do rely on the outputs (normals, curvature, AO, etc.) Once I achieve a bake that I am happy with, I then can go ahead with assigning the custom IOI materials.
I found using our library of custom materials is the fastest way to get a good base for the asset I am working on. The library has a set of base materials such as metal, wood, plastic, etc., that we can easily add to the layer stack as you can any other Substance material. What works in our favor: Once the art team has created a good number of assets, we will have modified enough base materials to begin saving out presets to the shelf that can be used for future use.
Generally, the next step would be adding and masking out the base materials or one of these previously created presets. Once the desired materials have been assigned, I modify the numerous properties we have exposed on the materials that cover aspects like color, color variations, edge wear, and overall wear.
The environmental story is incredibly important in the Hitman games. Objects, like anything in the world, lead different lives, which means it is incredibly important to consider the wear and tear of an object. Having these wear sliders easily accessible means adding that extra level of detail to the assets takes very little time but pays off greatly in the history of the asset.
The speed at which we can quickly assign these presets and modify the exposed properties in an easy-to-understand slider-based system means, we (the artists) can more quickly get to the point of utilizing the more intricate and powerful Substance Painter features like normal stamps, height map painting, and procedural masks. Of course, all of this is viewable in real time.
A collection of some of the new guns in Hitman 3
Emil: Early on, when making the first guns, it became clear that if I were to make the number of guns we had in mind and achieve a higher quality bar than in the previous games, it was necessary for me to come up with a smart and fast pipeline. Making complicated, design-heavy assets require a certain approach; especially since the firearm concepts created by Rasmus Jørgensen all were side views, we went through a lot of collaboration and iteration on each asset. Making sure it looked good in 3D and in the engine was crucial for the final output. I find that developing an effective pipeline is as much about technical solutions as it is collaboration and communication.
Hackl Leviathan Sniper rifle concept art
Hackl Leviathan sniper rifle test, texture has been extruded on a plane
Design/Mid polygonal model used in ZBrush to create high poly and base for low poly.
To combat the rigid game asset pipeline, I make sure to test every step in the process in-engine. The first part would be making a rough cut out of the concept and make a 3D approximation, running around and shooting with it in-game to check how it fits 47’s animations and whether or not it looks right. Secondly, when making the actual model, I created a mid poly asset, not worrying about sharp edges and poly counts, but getting the design elements in place. Here it was crucial that the relation between shapes was working as in the concept, and especially finding a good thickness/width since that is extremely important in how the weapon reads in-game. Even though the concept has a lot of answers, I still gather a lot of reference to aid in the creation of elements, avoiding making things that do not exist on real guns. There are a lot of unanswered questions in a concept that will be rather trivial to solve when you have a good grasp of the reference material. The reference will also be very helpful in the texturing phase.
When my design model is finished, and I have settled with the concept artist that we are satisfied, I can progress. Getting into Substance as quick as possible is always a priority for me, so to shorten the high poly creation, I am using a script called ‘Crease Smooth Groups’ in ZBrush, allowing me to quickly use dynamesh and polish to get a high poly model. When making the low polygon model I prefer not altering the design model too much. The closer the low poly and high poly models are the better the bake is going to be. If I need to optimize it later, it is not a big issue.
High poly model in ZBrush dynameshed and smoothed out using the polish sliders.
A lot of the weapons for Hitman 3 were very modern, sleek looking, and therefore absent of severe wear and tear. Using a combination of reference and testing in-engine, I came up with a couple of smart materials that had the material detail I needed to quickly make the guns look realistic. Using a combination of fine grain in the spec and glossiness, various surface imperfection textures, and color variation in the diffuse, I try to find a balance between interesting information and cleanliness. It is much simpler to create good textures for a gun that has a well-functioning design, therefore the first thing I do is to get the base values in and create the main textural elements before checking it in-engine. Hopefully, the design is working well, and it already looks good in-game. After that, I use my smart materials, tweak them to work properly, and go back and forth between Substance Painter and the game engine. Once I am happy, I try out the gun in a few maps to make sure its values work and nothing seems out of place. With a game like Hitman where players can potentially take the gun to 15+ levels, it is crucial that the PBR values are in order. This process often leads to some problematic compromises, but that’s how game development works.
Breakdown of smart materials used on the Leviathan.
Final result of the Leviathan in-engine. Keeping a clean textural look clarifies the design elements.
Using the same smart material from the Leviathan but modified to work on another asset.
Breakdown of wood material on the hunting shotgun.
Metal material on the hunting shotgun. I am using an alpha created by the concept artist to make the golden pattern on the receiver.
I have learned how important a role Substance plays in a tight pipeline where a lot of assets must be created and still maintain good quality. Not having to make model high poly models has been a huge timesaver and meant we could push through much more content. Stamping and projecting 2D data onto the meshes resulted in a strong collaboration with concept to utilize alphas and textures they used in the concepting phase. Slowly bridging the gap between concepting and final game asset is something I have utilized substance greatly to achieve.
Carl: Most recently I have been using Substance Designer for the creation of trim materials such as this marble with multiple tile designs on it. It is reasonably easy to make these tiling patterned trims within Substance Designer, as you can make use of the Tile Random or Tile Generator nodes to perfectly tile the shapes you input, then simply crop it using the blend node.
Substance Designer is incredibly useful when it comes to creating intricate geometric designs thanks to the suite of shapes included in the shape node. When used in conjunction with the host of manipulation and blend nodes, you can create almost any geometric shape or pattern you can imagine. However, for those not overly comfortable with creating patterns or complex shapes using nodes, you are able to input images you have created in Photoshop. Having both options available helps the accessibility of what can be somewhat a daunting software.
There is no second guessing if your materials are going to tile perfectly as the tile nodes within Substance Designer generally work without fail.
My goal when beginning a new material is usually to create a decent height map from which I will generate several maps (Normal, AO, Curvature). Second to this is usually creating a solid albedo or diffuse map — I tend to make this first using a basic black-and-white map that does not have too much contrast and run this through a Gradient Map node. When using the Gradient Map node, I try to find an image in Google image search with the approximate color values I want as a base for my albedo; this can be sampled using the eye dropper tool. Following on from this, it is all about layering your albedo details. With a strong height map created, it is easy to start utilizing the generated maps (normal, AO, etc.) to begin adding dirt and wear details to the glossiness map. However, I tend to only use this as a base and then continue layering on grunge separate from this as nodes such as the Dirt Generator can add detail in a noticeably procedural manner.
What makes Substance Designer’s node-based system more beneficial than the more traditional 3D modeled or sculpted bakes is the ability to easily iterate on these designs in real time — should all your outputs be hooked-up correctly — without the need for remodeling and rebaking. This way of working can be extremely liberating because you can iterate and test quickly while you are in the flow, without having to switch between different software and waiting for bakes, hand-painting masks, photobash details, exporting to a renderer, because all of this can be done within Substance Designer.
When creating materials such as this with multiple bespoke sections with differing patterns, it is easy to create a humongous erratic spider web. This can make it a lot harder to manage and work in. A handy feature to assist you in taming the beast is the frame tool, which gives you the ability to name parts of your node graph so that you or another artist can easily make alterations in the future and should generally be considered best practice.
Dag: The rain system I created for Hitman 3 combines a lot of different shader and particle effect techniques to achieve the final result. One of the essential techniques I chose to use is based on creating a TimeMask texture, which contains a randomized 0-1 value per raindrop (which refers to the different timing for when the raindrops should blend in and out to simulate the raindrops hitting and sticking to different surfaces before fading away).
When working with effects like this it is useful to be able to quickly iterate and edit your base texture in a non-destructive and quick way, which Substance Designer definitely provides. By simply using the Tile Sampler node with a combination of disc patterns (used for the TimeMask above) and paraboloid to create the heightmap that then easily is converted to a normal map, you quickly get a result you can start working within the shader and go back and forth iterating with settings quickly.
In Hitman 3 we did not only want to use rain interaction on some objects and characters in the level but also on the screen itself, making the drops refract the whole scene and enhance the player immersion further. Something that is essential when working with on-screen effects is to make them intrusive enough to convey a feeling or effect but not obscure the game view to the point where it just becomes annoying for the player and distracting from the experience. To iterate on the intrusiveness, I utilized the option for different manipulating masks on the tile sampler and ended up only retaining the raindrops in the outer perimeter of the screen, making the effect more of a subtle vignette that adds just the right amount to the overall feel.
Hitman for PS VR
Morten: This might be surprising, but all the textures and models are the same in the VR version as in the regular version of the game. When I first heard about the idea of running all the Hitman levels on PSVR I thought it would be impossible. I knew how hard the team worked to make the two previous games run a consistent 30 FPS on Xbox One and PS4, and we didn’t have a lot of milliseconds as a buffer. Now we needed to render the game at 60 FPS, not once, but per eye! That is the equivalent of 120 FPS. Not everything has to be recalculated for each frame, but still. I can’t give you all the details, and I think this accomplishment warrants a long article about the programming and game design needed to make this work so well.
We had a small team dedicated to VR throughout the production of Hitman 3 and they had to make sure that all levels from all three games worked in VR, but we knew we could not build new content for this. Instead, the render quality is drastically optimized on parameters such as LOD distances and draw distance. Particularly the crowds are optimized a lot, so you will not see them from far away, but when you are in the middle of it all, it works beautifully. When you put on that headset, the complexity of the game world feels super convincing, and you still get the high-quality textures and geometry detail up close. We were very happy to see how some of our assets are much more detailed than you get to appreciate in the normal game, but when you hold items and weapons up in front of you in the VR version you really get to see the work that went into creating these assets.
Morten: There are so many memorable moments, it is hard to highlight just a few, but I can try.
I think with a lot of games, but perhaps with Hitman, in particular, you work on a level for a very long time before it starts to really show its potential. When things are just in mockup, and the scripting and AI is not complete, there isn’t really anything to play, so we have to trust that the ideas are good. But when everything comes together — environment and character art, FX, audio, story, and gameplay — it’s magical. The first time I experienced the dancefloor in the Berlin nightclub with music, crowd, and FX I was blown away! It felt so convincing. Even the feeling of walking down through the club and hearing the pumping beat grow stronger as you work your way to the dancefloor is awesome.
Another very cool moment was the first time I saw a Hitman level in VR. This was very early in the development of Hitman 3, before you could really play the game in VR, but I just stood in the Marrakech level from Hitman 2 and looked around. The way VR can transport you into the game — it was awesome. Suddenly, I stood there — in the middle of the environment that I was so familiar with from my PC monitor. It really tricks your brain into believing you are there, and Hitman is perfect for this kind of experience because the game is all about creating a believable, living, breathing world around you.
Combine the Berlin dancefloor and VR and you are in for a treat.
Carl: A memorable moment for me was when the render department began making strides in the implementation of SSR in the engine. Obviously, this was not an overnight transition, but we did get submits from render every so often. There was a clear, night-and-day difference part way through developing Dubai, when a significant drop came from render, which really aided in selling the location due to its large expanses of glossy materials.
Emil: The first and second time I tried VR was crazy, something I will never forget. Experiencing the levels in a new perspective and holding my own guns was amazing! Also, I will never forget our Friday afternoon wine tastings, where the lead level designer on the Mendoza level would bring malbec wine from Argentina — what a bunch of wonderful pre-COVID drinks we had!
All images courtesy of IO Interactive.