3D Material Artist Niki Marinov shared the working process behind the Leica Lens project, explained how the maps for the asset were set up, and spoke about procedural modeling in Substance 3D Designer.
Introduction
My name is Nikolay Marinov, and I’m 25 years old. I’m still working as a Material Artist at Frontier Developments, where I worked on Jurassic World Evolution 2 and F1 Manager 2022. I am currently working on a very exciting unannounced project!
I have recently gotten into film and digital rangefinder-style cameras and the manual lenses that come with them. The feel of the photos is also unique, so I tried to capture that in my presentation as well. I think those cameras are an artistic masterpiece, a timeless piece like a good watch, so naturally, I wanted to make a project related to that. I try to add more unusual and challenging projects to my portfolio, on the one hand, to stand out and, on the other, to be something different than the stuff I do at work.
Procedural Modeling
I refer to my approach as hard-surface modeling in Substance 3D Designer, although it's not quite that. I work with assets inside Substance 3D Designer quite a lot at work, and, in some regards, I prefer it quite a lot to working with Painter.
SD, for example, allows you to experiment with shapes and your height information to iterate quite quickly, allowing you to try out different designs without worrying about topology or UVs, which makes the process much faster. Although the lens isn't an ideal example of how that would be useful in production, it shows how we can build complex shapes with simple geometry, and if we want to use that in production, we can add supporting geometry after we're done making our design.
I first start with our mesh and UVs, trying to keep it as simple as possible.
After that, I always try to start with building the silhouette of the shape and avoid sharp 90-degree angles while doing so. The Curve node is incredibly powerful for this, allowing you to take a simple gradient and shape it up to the silhouette you require.
The next important step is layering your height. The best way to achieve this is with the Shape Splatter node, which is a very powerful tool in the arsenal of a Material Artist.
The node lets you conform objects to the ones underneath and then lets you pick them out with a flood fill at the output of it, which will give you a lot of control over the blending, unlike using blends and height blends.
Setting Up the Maps
One of the main things about working on a material like this one is that the color is going to be very monochromatic, so your only option is to work with Roughness and Normal. We want the macro normals to help sell the height information, but we don’t want the micro information to be in the height, so we have to treat them as two separate things. A very powerful node that really helps accentuate the shape and the bevels is the Metal Edge Wear node, which creates very interesting bevels and brings realism to the macro normals.
This will curl the edges and give a nice bevel to your edges.
In terms of adding the numbers, I’m going to have to disappoint you. There is no easy way of doing it, so the way I approached it was to find a similar font to the one Leica uses, theirs is trademarked, so it isn’t publicly available. The other option is to create the font from scratch but that would have taken me too much time when I found a pretty similar one. The one I found is called F5_6-Regular. Then, I adjusted it letter by letter in Substance 3D Designer using Transform 2D nodes and a lot of Blends.
Getting the right surface information for a monochromatic surface like this is essential. We need to study the grain and the way these surfaces are created. A lot of people start by using noises like Fractal Sum Base or White Noise Fast, which are too big and uniform and the results are often unsatisfactory. The right way to do this is by combining Grunge Maps (I personally really like to use the Splatter Circular node and the Make It Tile Patch node) and using slope blurs to get a high-frequency non-uniform noise with a few break-ups so that it is more interesting.
We can then use masks and Histogram Select or Slope Select To highlight what we need for our Color and Roughness Maps. In terms of our Metallic Map, we only need it to have values that are either 0 or 1 – anything between these two values is nonsense and goes outside of PBR. The only notable exception is Silk, where the metallic can be set to around 50% to get the proper sheen, but that is assuming you don’t have a proper shader built for it.
The Roughness Map
The glass of the lens is pretty straightforward! We need to have most of our Information inside the Roughness Map, mainly where we want to have a nice dirt map with high-contrast areas so we can have more interesting specular reflections. The Opacity Map should look like it is pure white for everything except the lens element where we want to keep the values between 0.25 and 0.50.
We then set up or Index of Refraction in Marmoset Toolbag somewhere between the values of 1.4 and 1.5. We can then add a green tint to the refraction parameters since the glass of old lenses tends to get a greenish color with time. The only thing left to get us a nice reflection is having a nice contrasty HDRI and a good fill light to highlight the roughness details and give us that specular reflection.
Working With UVs
Tessellation and Displacement are always tricky. Avoiding sharp 90-degree angles and having an Antistrophic Blur set to 0.03 at the end of our height definitely helps with all of the artifacts. We want our Height Map to only have the micro detail and let the normal do the heavy lifting if we want clean results with our displacement. I also like to separate the parts of the mesh that are on different UV islands into their own material IDs, so that in Marmoset I can have different materials set up with them which would allow me to control the scale of the displacement a lot more accurately.
It is not foolproof, so on my lens where the body meets the bayonet, I have a sharp angle which results in some artifacts that are occluded by a shadow in my renders which makes them unnoticeable.
Conclusion
Everything took me about a week of spending a few hours after work, going at it at my own pace. I believe my best advice for people is to try to make different and unusual materials as that will make them stand out and make them learn really fast. Substance 3D Designer is a really good gateway into technical art in terms of understanding how shaders work and helping you understand Unreal's node tree or even Houdini.
My final advice would be – presentation is king, try to focus your efforts on lighting and presenting your materials in unique ways, let them have a story behind them, why is something a certain way, and what happened here so that the surface is in such a condition. Use light to guide the viewer's eye towards points of interest and let the roughness highlight what's important in your scene.