Thank you Richard. If I find some more ways to improvise for optimization, then I'll tell you definitely
would love to see the substance graph.
The visual shader system will be great for modular asset pack makers. You see some incredibly high quality modular asset packs on the Unreal store, whilst the ones for Unity are so-so, which I think is down to the ease of creating shaders on Unreal vs Unity. Alternatively you have to make your shaders in something like Uber Shader system which immediately splits your customer base.
Environment artist Maarten Hof showed how he modeled and painted an incredibly detailed environment.
Hey! My name is Maarten, I was born and raised in the Netherlands. At the moment I am graduating as a “Multimedia specialist”. I chose 3D as a minor and started focussing on environment modelling, texturing and lighting. My first experience with 3D was about 3 years ago, during a group project at school.
I had an internship at Triangle Studios here in the Netherlands where I worked on Uphill Rush and Real Farm. After my internship ended I worked there for a bit as well. Those are my only professional titles so far but I am planning to add a lot more!
Cyberpunk Environment Blockout
First of all, thank you! And thanks to Helio Frazao for this awesome concept art. It was one of my main goals to show that Unity is a really powerful engine graphics wise. The new post-processing stack really pushed its capabilities.
The first step was to get my camera at a fixed position as early on as possible. It was a bit of playing around with the field of view and the early block-out but because I got my camera right early on, it gave me a good view/perspective of where I had to put my priorities.
When blocking out the environment I looked for strong straight lines to position my camera and frame the block-out. See the picture below:
I looked at where these straight lines intersected with the frame of the picture and tried to get this the same in Unity. Notice the right sign that is cut through the half and the red sign at the top of the image. These are all indicators of where I should place my camera. Also, I noticed that the horizon is not straight and adjusted my camera to that.
This is my first block-out. These guys are there for spacial reference. I call these my “ref-guys” and everyone should have them.
Once I had my camera right I could basically make a list of which assets I had to make first based on how prominent they were in the frame. The first thing I needed to establish were the buildings because they were a major part of the concept art.
In order to keep these kind of projects fun for myself I like to make some assets in between major parts. For instance, when I finished the blocking I really wanted to make a prop or an asset because that is what I enjoy the most. The ATM was the first asset I created and it served as a benchmark for all the other assets that had to be made.
I also wanted to make sure I could achieve this typical neon glow with emissive textures. A major part of the concept art is neon signs so I wanted to make sure these came out nice.
First neon sign test.
Production of Assets
Making all these assets was pretty straight forward. First of all, reference is key. For every single asset I made I used google pictures or one of Helio’s call out sheets as reference.
My workflow for assets with a dedicated texture goes like this: Model > Highpoly > UV map > Bake > Texture. This goes through various iterations. I only used ZBrush for the garbage bags. The rest of the high-poly models are made in Blender with the subdivision modifier and adding bevels. Other models such as the cables and the pipes share the same tiling material to save time and since it is quite a dark scene I could get away with this. For the cables I used two different sets of variations that I could position everywhere and one set of cables fixed to a position in the scene.
Looking back on how many assets I actually made, it doesn’t feel like many, probably because it’s my favorite part. Blocking out this environment and its lighting were definitely the most difficult parts of this concept art & challenge.
Key elements prop wise where the ATM, the CTC network point, and all the garbage. All the signs, of course, play a major part in the overall look of the scene. These took the most time to make.
Once I got all the elements in place I started experimenting with some humans, more or less… Only one survived and made it to the final post. These humans were made with MakeHuman and I tweaked the textures a little in Photoshop.
Assembling The Environment
My Blender scene and Unity scene are actually synced through one fbx file I named “blockout”. This was initially for the block-out of the scene but I later on modeled all my assets in the same scene. This way I could model them at exactly the right scale. I could even model it in the right place (where it would end up in the final scene). Once I got the model down, I zero it out, set the pivot right and export it to Unity. In Unity I arranged all the individual models such as the container, the ATM, the garbage etc. Once I get the scale and position right I make a high-poly model, which I UV map and texture.
The block-out and the buildings were the only things I arranged in Blender. I chose to not go with a modular approach since the scale of the scene is not that big and I didn’t see the benefits of it. Also this way I could make some nice dedicated textures for the building.
Working on Materials
For this environment I made 3 different materials in Substance Designer, the other materials are made or are standard in Substance Painter. As far as I know Unity doesn’t support decals natively so I just painted all the decals in the texture. I could justify this to myself knowing that Naughty Dog didn’t use decals until Uncharted 4 (correct me if I am wrong).
My standard workflow in painter goes like this: Getting my bakes right. This is one of the most important things and if not done right it can ruin your whole texture. Once I got that down, I add little details in the normal map with stamps and bake everything in the other maps. (e.g ao map, world space normal map, position map etc.)
When I am satisfied with my maps I start texturing. Most of the time I take standard materials and tweak these until I’m satisfied. After that I add some wear and tear along with some dirt. One smart material that really works great for me is the “sand” smart material from Substance Share. I could really tweak this smart material to how I wanted it to look. As one of the last layers I often add a fill layer, mask it and add a generator for some extra details, noise, dirt and tear.
If the asset has decals I also add these in Substance Painter. It is worth noting that I only used the standard shader from Unity, no fancy stuff there!
Creating The Lighting
I am really interested in how 3D environments are lit and I wanted to use this challenge as a good learning opportunity to better my skills in lighting. It really comes down to using your eyes. I looked at all the little difference in colors and values of the concept art and tried to mimic this in Unity. Every time I added a new asset I also tweaked the lighting. One trick I used was to apply a lot of saturation to the concept art in photoshop so I was able to see the colors and the way the lighting bounced better. To check my values I made a thumbnail of my scene and put it next to the original concept art. Making it black and white made it even clearer where my values were compared to the original concept art.
Here is a picture of the lighting without the materials.
Unfortunately I was not able to bake the lights (my laptop can’t handle this) so all the real-time lights had a pretty big impact on the frame rate. As you can see on the screenshot I used a lot of lights the get all the different colors and the way it “bounces” from the light sources. I don’t have any experience lighting a scene for a real game but my guess is that I went a bit overboard.
First of all I didn’t add any post effects in photoshop after that the screenshot was taken.
Everything you see is rendered and captured directly from Unity.
I used 2 different post-processing effects. The Unity “post-processing stack” and “Beautify”. I could easily go with only the post-processing stack of Unity but I wanted to add a little more to it. Something that I really like about Beautify is that I can sharpen the image a little. This really added a lot to the overall quality of the render. It’s subtle but noticeable.
The neon signs that are made up of an alpha texture with emission don’t use mipmaps, this reduced the blockiness significantly. Especially in the far away neon signs. Also what really helped in pushing this environment to the next level was to add small bevels on the hard corners. It doesn’t seem to make a big difference in the first place, but when all the hard corners bend the light nicely, it adds a lot to the overall quality of your environment.
One trick/cheat I use for capturing screenshots for my portfolio is capturing at double the resolution and scale this down in Photoshop with bicubic sharpener enabled. This way you get some really clean shots with a little bit of nice anti-aliasing.
Tip: This also works really well for normal maps that don’t have anti-aliasing yet.
The biggest challenge was to get the mood that the concept art had right. And with mood I mostly mean the lighting. All these neon signs and different light-sources are super cool to have in such a scene but getting it right was the biggest challenge. Also keeping the quality consistent through the whole challenge was quite a challenge, this is my biggest personal project so far but all the different assets and stuff kept me motivated. In total it took me about 7 weeks to build minus 2 weeks vacation. I didn’t work full time on this environment, there were days that I didn’t come near my computer and there were days that I worked till deep in the night.