Wojciech Chalinski talked about his Max Payne Roscoe Street Station made in UE4: grid, modeling, textures, lighting and more.
Hi, my name is Wojciech Chalinski and I’m a student at the University of Derby, UK. At the moment I’m also hired by Bulkhead Interactive – the developer of Battalion 1944 – as an environment/prop artist. In this project, I was responsible mainly for creating buildings and props as well as set dressing levels.
I started my career from indie/not profitable modifications for the Gothic game, which gave me the opportunity to learn basics of modeling and texturing. With that knowledge, I moved forward and found Game-Artisans (unfortunately it is down now) where people shared their models and allowed everyone to texture them. It helped me to develop my skills.
Start of the Project
As we all know, Max Payne is quite an old game and technology back in those days had a lot of limitations in texturing and modeling. But even with that, Remedy managed to create a believable experience in dark, atmospheric, noir environment of New York. In this particular project, I wanted to combine a few different styles. First of all, my goal was to keep the original layout of the station from the game and mix it with references of actual NYC metro I found. The reason behind it is that most of the surfaces in the game are quite boring and flat, so to get a more interesting look I had to break it down and swap it with something more realistic and complex.
I started with my moodboard by gathering references from actual game as well as references of metro stations. In this case, PureRef was really helpful.
In this stage, I tried to plan which walls, ceilings, and pillars may fit the environment and what materials I would need to prepare to make them.
Modularity & Blockout
The natural choice for me was to make the environment modular so that I could execute tweaks and adjustments fast and efficient. The first thing I had to figure out was the right scale of the modules.
With this simple trick, I knew that the height of the metro is approximately 2 times higher than the character. Obviously, it is not a very accurate method of measurement but it gives you a very rough feeling of scale and proportions.
The next step was to build the blockout based on the level from the game and split everything to basic modules. To make that, I used the Unreal 4 BSP system, which is a very efficient method to greybox the main forms and details. At this point, I also played around with lighting and post-processing to get a more immersive effect.
While planning I tried to keep all my modules with the size that’d be a multiple of 2. It helps to snap it to the grid and build levels faster (so make sure you have a correct grid size in your 3D software). However, it doesn’t mean I didn’t have any issues with snapping my modules.
Blocking out materials/colors also gives a little bit more feeling of the level so I applied basic materials from the engine content.
Another thing to do was to break down the scene into individual materials and trim sheets. Most of the references came from textures.com.
Working on the Meshes
For 90% of my props in the scene, I used high to low poly method with normal map baking. In my opinion, in most of the cases, it gives the best visual results and keeps everything quite optimized. To make my high polys, I used traditional SubD modeling combined with creasing and Hard Mesh plugin for Maya.
Hard mesh usage examples:
Floating geometry baked on a flat surface:
The A-Board I did is fully done with SubD technique. During the baking, I faced some issues with shading my low poly, especially when there are some sharp angle triangles. It is not visible in programs like Marmoset Toolbag or Substance Painter (as they are quite tolerant towards gradients and triangles on the normal map) but once I put it into the engine, it appeared.
To reduce this bad triangle/shading effect I used the legacy version of Hand-plane baker. It has a very useful way of re-calculating the tangent normal map based on vertex normals orientation and world object space normal map.
All the inscriptions were projected in Maya which allowed reducing distortion on the model.
Even though I implemented basic spline in Unreal 4, some of the models are modular, for example, pipes. Sometimes it is just easier to make a model modular rather than try to fix all weird twists on the spline. With just 7 different pieces I managed to build the whole pipe system in my level.
Sometimes I used mid poly versions of my models like the gate. It was pointless to make every single piece in high poly so I added bevels on the edges and basic texture on it. With my vertex paint material in Unreal Engine, I added rust variation so that the repetitions on the texture were not that obvious.
I also had a fun time with designing cans and cups scattered all around the level. To achieve a believable result, I prepared a small moodboard.
I split all the meshes to parts so that I could use them separately (cans, lids etc.) with the Foliage tool in the engine.
Textures were done in Substance Painter (including normal map details). For most of the tiling textures, I used Substance Designer. In 99% of the times, I created my textures with basic nodes like tile sampler, directional warp, flood fill, etc. However, in one case, I used custom nodes called Floodfill pebbles and Density Distance developed by Adam Pasek.
It was perfect for a texture like stone rubble, because masking and making color variation was much easier, and it created nice size and height variation based on noise input in the Density Distance node.
Substance Designer is a must for every environment artist because all adjustments and tweaks can be done with just a few clicks. It’s definitely worth learning this software solution.
The lighting is one of the major things in the environments and describes the mood and atmosphere of the scene. My goal was to create something between Max Payne movie and The Matrix, so these movies became my main reference.
I watched a few tutorials on how to set up lightmass correctly and during the research, I found a tutorial made by Kemal Günel, where he explains principles of lighting in Unreal 4.
I think one of the best things to do is change the environment color from black to grey: it will reduce the darkness of the shadows after the bake. Also, based on the tutorials I mentioned before, you can easily increase values of light bounces without changing the baking time.
Several times I faced an issue with visible seams between my modules. The solution was super easy: just weld your meshes into one. You can do it directly in Unreal 4.
Another source worth mentioning is IES profiles:
Rectangular lights with IES profiles:
It is super easy to change the profile of your light just by drag-and-dropping it on IES slot.
All major lights are static instead of one dynamic flickering light. It was done with one simple light function material. You can find the graph below.
The texture I used was a simple cloud texture generated in Photoshop.
The last touch for the lighting was post-processing and tinting the scene with greenish color.
You can notice that I used some color grading LUT, it can be downloaded here .
A Few Words About Remakes
Most of the environments in Max Payne game seem to be modular. However, games developed nowadays push the boundaries and quality bar quite high, so it is obvious that someone responsible for a remake of the game would have to re-design most of the levels and give them more realism and more complex modules and textures. At the same time, lots of games have cover-up systems, so I guess this aspect would change the gameplay and level design in the remastered games a little bit.