Amazing talk from Ben Wilson on ways to approach to material design in games with Megascans, SD, Zbrush and 3ds Max.
Amazing talk from Ben Wilson on ways to approach to material design in games with Megascans, SD, Zbrush and 3ds Max.
Introduction
Hey, I’m Ben Wilson and currently work as a senior environment artist at Machine Games. I am originally from the UK but moved to snowy Sweden a few years ago and have been doing game development professionally for nearly 7 years. I think I was quite fortunate in knowing I wanted to make games from a very young age and spent much of my teens making maps and working on various mod projects. At the time, the modding community was quite small and I found myself with a group of people who would hop from mod to mod, making content and practicing art together. I was really excited when you contacted me for this interview because so much of the reason I managed to pursue this career in the first place is because of all the free resources and documentation available out there. The Polycount wiki was my go to for any problems back then and with sites like this one only getting better over time, it makes me very proud of our industry.
My first foray into serious game development though was during university where I joined the team making medieval warfare (now Torn Banner Studios); I was lucky to only have a part time course at university, meaning I had time to freelance on the side. After I graduated, I started applying to studios and somehow managed a job at Playground Games, working on the first Forza Horizon! I moved to Crytek UK after that, working on Homefront the revolution before going to Splash Damage for the Gears of War remake. Massive Entertainment lured me to Sweden with the promise of semlar and kanelbullar, where I worked on the Division for a few years, after which I joined Machine Games!
Materials
Most of the games I have worked on so far have been based in the real world, so I think it is also very important to research how the particular material is created and the environment it sits in. The sidewalks in New York will be very different to those in Rome, for example; not only in terms of stone used, but also the trash and debris that litters them. With that I like to begin like most people by collecting reference. I find Pinterest to be particularly useful as well as the regular Google search/Flickr. I look for images that include overall context for the material, as well as extreme close ups for fine detail. At the beginning I tend to collect as much as possible but will cut my reference down to a few key images that I wish to replicate. For me personally, I can get stuck if I have too much reference. Nature is so varied and unique that it is almost impossible to replicate every given scenario of the materials behavior and instead find it better to focus on a hand full of features you like about it. Where possible I try to collect other in-game and finished materials too, especially scanned data, in order to have some reference of values and a gauge on how the various maps should look.
Seamless Art
Creating seamless art is very tricky but I think this comes down to re-using assets and being smart about how you build it. Lets take some brick rubble materials for example. If you really want the rubble to sit in the environment well, you need to use the same brick as is used in the wall. Textures are always just one part of the whole scene, so when I plan out the texture requirements, it’s usually happening at the same time as planning the models. Once I have identified the different types of brick I need, I start small with building what I call component pieces, things like the individual high poly bricks and then texturing those. From there I can move onto creating low poly versions or tileable wall and rubble textures, all baking down from the same high poly assets. I just love doing this kind of stuff at work especially, because you have access to so many other artists awesome work. Before I start any texture that requires other environmental pieces, I walk around the office stealing all the high poly’s I can get in order to build a library of components to use.
It can be very challenging to actually transfer this information down sometimes, especially when dealing with very high poly meshes. Unless you have some killer machine, its just not possible to simulate and bake 2000 high poly brick assets into a tileable in one scene. In these cases I will usually assign material ID’s to the high poly instead and create/texture a medium resolution asset in place of the high. That asset will most likely hold the main details you need and is a good compromise between quality and scene management. The nice thing about texturing using materials ID’s is that the same file can also be used for all the other assets you create at very little additional production time. All you need is to bake down your material ID’s from the high to your new asset and paste them into the texturing file!
Fighting Repeats
I think it largely comes down to tech solutions. Obvious and unnatural repeats is definitely one of the main culprits for an artificial look. If you want believability, the aim is to get unique and subtle details in every possible pixel, even if its incredibly subtle. There are some wins you can make when authoring the texture itself, trying to reduce very large or unique features for example, but sometimes you actually want those features and removing them just defeats the point of the texture. I actually built my corridor scene to try to tackle this problem specifically; How do I texture large empty surfaces while keeping to texel density and avoiding obviously repeating tiles. One solution could be to create another version of the texture intended to blend into the other, which tiles much better or has very different features. Another technique could be to use wang tiling for your material or what about introducing decals into the mix?
For the corridor, I used a second uv set to overlay a mask texture across the whole wall. In the shader I then used that mask to apply some subtle color variation and roughness changes. As a result I found the base materials themselves needed to be very clean and simple in order to not fight against the overlay mask. Currently for my Samorost scene, I am using two solutions. The one described above and a 3-way texture blend driven by a second UV set texture mask. It really all depends on what tech you have available and I would argue that no matter how good your texture is, if you slap it onto a 50 meter wall, tiled 25 times, it will never look good. However, I think the biggest win comes from playing with the geometry itself. If you do have a large stretch of wall, why not put a support beam, or picture frame on it? Propping assets to help draw the eyes attention away from the repeats is something that gets used in production all the time. Most art styles in games are intentionally designed to avoid these problems to begin with, not many games feature huge, stark, flat surfaces and those that do tend to be ground breaking in tech, stylized or intentionally portraying that artificial look. A large part of environment world building is about trying to hide repeats through the use of clever propping. It all becomes a game about tricking the eye in the end.
Tools
I strongly believe that you should use each tool for their strengths and the idea of locking yourself into one toolset when there are so many awesome things available just seems counter productive to me. Especially now when all the major software have free options available or really solid free alternatives. One of the things Substance Designer really struggles with is intersections between different pieces. Going back to the good old rubble example (I really love concrete!), the tile sampler nodes just can’t compete with proper physics simulations and being able to remove all the intersections between pieces and fine tune the meshes just adds to that believability. Of course you could run into the problem of managing high poly assets as mentioned before but why not use designer to then handle the smaller debris that would be so troublesome to do in mesh?
I still use ZBrush a lot to create high poly assets and find it very useful to bake all that information down into atlas’s which can then be used by the tile sampler nodes. My warped rock material could be a good example of this. I built the entire thing inside Designer because I knew it would be very sensitive to tiling and would need a lot of iteration to get right. I am just not that proficient in Zbrush and Designer is very fast at iterating . Foliage is another thing incredibly difficult to do fully procedurally, so I used some Megascans atlases for the leaves and parts of the foliage debris, skipping the high poly creation phase entirely and leveraging the awesome scan data they have. To get it working inside designer, I only needed to crop out the parts I liked and run them through the tile sampler nodes like any other input! I love designer and feel it is one of the strongest texturing tools out there. It is a lot of fun to try to tackle those really complicated shapes so these crazy things people do in it shouldn’t scare people off. Most of the time itэs about the challenge and in real production, you really just want quick and solid results, regardless of the method.
Forest Textures
One of the main reasons I decided to start that texture in 3ds Max was because Substance could not produce the same quality ambient occlusion maps at the time. Allegorithmic introduced a new AO node in 5.6 which really changed that and had that node existed then, I may have done more inside of Designer. I have used this workflow on a few textures during production and would say it doesn’t always have to take more time; It really depends on the situation. If the components you make will be used for other things then it’s totally worth it. On the other hand, if you need to be scattering foliage in a lot of textures, then maybe making a leaf generator (be it with scans, high poly, or not) would be faster. In my experience, some studios are scared to adopt designer because it is hard to understand unless you work with it. It is very front heavy in workload. Slow at the start until you build up a good tool set and library but gets exponentially quicker. The tool is generally considered a procedural tool too, but doesn’t have to be and I find it useful as a sort of container to manage all my files. For me, I found the best results by combining scan/high poly data with the procedural tools.
The Complexity of Substance Designer
Some materials just need nice noise masks and Designer already has a bunch of great ones built in. No need to reinvent the wheel if you can just export that one node! I think base metals are a nice example of this. A chrome material really just wants some nice light play, certainly no crazy height maps and normals. It can actually be hard to feel like your finished when you only took a few minutes to plug in a couple of nodes. A lot of the interest from metals comes from its interactions with other materials but when you really look, is that rust much more than some nice color variety and rough noise? How much can you add to a glossy plastic before it no longer reads as glossy plastic? These base materials can be very simple, it’s more about the application of them. Between Substance Source, Textures.com and the scan databases, so many of these base materials are already done now too!