Alexander Asmus from Crytek talked about the creation of procedural PBR-materials for VR-game Robinson The Journey.
My name is Alexander Asmus, and I’m currently employed as a 3D Artist at Crytek in Frankfurt, Germany. In my last two years at Crytek I focused on hard surface modeling for weapons and hero assets and had the chance to help create Crytek’s internal substance library.
When I finished school, I studied Media Computer Science. That taught me a lot about math, programming, and computer graphics, which proved useful for authoring shader networks and substances. In 2006 I did an internship at 4Head in Hanover and worked on my first game — The Guild 2: Pirates of the European Seas—creating ships and buildings. I finished my studies in 2009 and got a job as a 3D Artist for Funatics in Oberhausen, a small game developer focusing on browser games, where I also contributed to Ubisoft’s Panzer General Online. I joined Crytek as a 3D Artist in 2015, working on Robinson: The Journey and another unannounced title.
As a 3D Artist, realistic texturing and material definition are very important when finishing an asset. Even the best model will not hold up without good texture work. So practicing realistic texturing was always very important to me.
When we started the preproduction for Robinson: The Journey in early 2016, my Lead, Stefan Heinrich, had already investigated the possibilities of Substance Designer for our pipeline. At the time I was just starting with substances, and I learned a lot by assisting with the creation of our internal substance library. It is what got me started on procedural materials.
Natural and Human-made Materials
Human-made materials are often built modularly. For example blocks of tiles, bricks, planks, patterns, and other repeating elements are quite common. Most human-made materials show clear signs of their production process, as well as signs of use and aging.
I think the most important thing is to understand a material’s purpose and how its components are constructed. For example, when creating a brick wall, it really helps to research brick wall patterns from different eras and the rules that apply to each pattern. The same principal applies to any related materials, like the mortar used in a wall.
When creating a human-made material, I usually start by reading about the material, its purpose, and its production process. That helps me understand the big picture. For example, brass is an alloy made mainly from copper and zinc. Depending on the proportion of these ingredients, brass will vary significantly in its tone and oxidation. Another example would be space shuttle heat shield tiles. These are extremely fragile silica ceramic tiles with heat-resistance to temperatures up to 1300°C (for black tiles) and 650°C (for white tiles). Each tile is unique, with its own serial number and position. How often and which tiles are replaced depends on that position and the number of reentries into Earth’s atmosphere the tile has experienced.
All this information helps to guide your search for references, but even more so it helps you to judge and truly understand the references you are using.
Natural materials, on the other hand, display uncountable variety of form. Here the main challenge is to carefully select your references and set clear goals. Mud, lava, or soil come in so many different forms that a single procedural material can’t completely cover it. In those cases it’s best to make a decision about what kind of conditions, forms, and shapes you want to cover with your material and to really focus on those aspects instead of trying to cover everything, while mastering nothing.
For me this usually leads to more realistic results. Also, in nature you usually have much more chaotic and less repetitive patterns than in a human-made material. This makes repeating details or patterns a much bigger issue, whether it be repetition inside your substance or how your substance tiles on larger areas.
Depending on the complexity and the briefing for the task, I might start by speaking to the person requesting the material. Especially with complex materials it really helps to understand what the material is supposed to do in the level. For the tar and lava substances in Robinson I started by talking with the Environment Artist to find out what he had in mind and how he wanted to use the substances in his level.
The next step is to gather references and do research on the material. As I said before, it is really helpful to understand the theory of how materials are created, which effects apply to them, and so on. This knowledge helps guide my search for reference material. When gathering references, I start by collecting as many references as I can. These are usually high-resolution photos or video material. Video footage often provides more insight on how a surface reacts to light when viewed from different angles. Finally, I carefully pick between one and four main reference images. These show the main features that I want to achieve with my material. Additional images serve more as secondary references. At this point I usually have a clear understanding of what I need and what my substance needs to be capable of.
At this point I create my base PBR values for the substance. Then I will usually focus on the generation of a realistic and believable height map. This is especially important for materials where shapes and normal map shading play a key role in the material’s appearance. Examples for this would be mud, bricks, tiles, or maybe fabric. But there are other materials that might rely more on realistic color values and not every albedo detail requires heavy representation in your height map, e.g. wood or marble. In those cases starting with the albedo graph can be very beneficial.
Anyway, at the very beginning I focus on the large shapes or the defining aspect of the material. For my mud or tar substance, these were the large blob shapes and shapes that suggest a slow flowing movement. I then identify all the aspects of my reference material: large pores, small pores, medium blobs, bubbles, puddles, etc. I try to integrate each of these aspects into my substance separately, focusing only on one aspect at a time. I think this is a very important step because it requires you to analyze and dissect your reference. This is a divide and conquer strategy, going from large to small, from major features to small subtle nuances.
As soon as I have a solid foundation in my main graph (usually it’s height) I start doing the albedo and gloss values. For this I rely on previously created masks and effects in my height graph. Usually there are still a few effects that I add exclusively in my albedo and gloss to add an additional layer of variation.
When I’m happy with my results, I expose the parameters to control the substance. I spend some extra time testing all the parameters to make sure that everything works as expected and is clearly named and grouped. Finally, the substance gets tested in Painter to see if there are still some bugs or missing parameters. This last step is very important for me because it can happen that a substance requires more control over certain features or that some aspects don’t work as expected on a test asset, so there is still some tweaking and optimization going on in this last step.
Advantages of Procedural Materials
For the environments in Robinson: The Journey we mainly used 3D scan data, especially for ground textures and the exterior levels. During the last few years, we already invested time on doing 3D scans and thus had access to a nice library of scanned ground, stone, or vegetation assets. For arranging and scattering the scan data, Substance Designer was also our tool of choice. We created some custom substance nodes that helped us with the blending of scanned data. Unfortunately I can’t go into too much detail about it as this part of the pipeline was handled by other artists.
In general, building up a 3D scan library in-house is a time consuming task. You have to take a lot of field trips, sometimes to exotic locations, to get what you want. In the coming years this will surely become much easier. Megascans and other 3D scan services will provide an ever growing library of assets. So even smaller teams can easily make use of scanned data.
Our substance library for Robinson was mainly made up of human-made materials and focused on materials that would be used for texturing assets in Substance Painter. For exterior environments we used substance to blend scan data or add additional effects on top of the scans. Only in situations where we were not able to get proper scans or needed a lot of flexibility, did we use full procedural materials (tar, mud, or lava).
I think the main benefit of using procedural materials is flexibility and that you can create very specific materials. Scanned data will usually look much more realistic, but lacks that flexibility. It can be hard o find the exact real-world materials that you need for your library. So it comes down to what you need for your project and being clever about combining both approaches.
Building Materials Faster and More Efficiently
With the creation of our Robinson library we learned a lot about how to do things and how not to do them. In our first iteration we thought it would be a good idea to keep all our materials centralized in one single substance package. While this allowed quick access to all our materials, it proved to be a nightmare as our library grew larger and larger. Publishing our .sbs package took far too long and only one person could work on the package at a time. So while the library still sped up art production, this decision made maintenance of the substances inefficient. Only after we shipped Robinson did we find the time to reorganize everything. Every material now has its own package, and it works like a charm.
The substance library made in-house art production much faster. We prepared a set of base materials that covered all human-made materials in our game. As most human-made objects in Robinson come from the same fictional manufacturer (DSEV) and use a repeating set of base materials, we could make sure that the DSEV white plastic material, for example, looked exactly the same on all assets. With substances and smart materials we were able to ensure that the values for the base materials were consistent. Even material effects like dirt or moss followed predefined values. Our prop artists were able to texture their assets faster and with more consistency. Another cool thing is that we were able to provide our exported library to our outsourcing partners, which ensured that their results were very close to our expectations and improved their production time as well.
When it comes to building materials faster in substance, we created support nodes that can be reused in various graphs. If in one substance you have created nice sub-graph for scratches, some denting effects, or rust, etc, we capsuled those sub-graphs so they can be reused. Also maintaining those effects is centralized and any changes made will propagate to all other substances.
For exporting tileable textures from substances, I tend to use Substance Painter instead of exporting directly from designer. In designer, a substance needs to be writable out to adjust resolution or settings and so on. In painter I can make quicker iterations when tweaking a substance in lower resolutions. If a certain part of the procedural substance doesn’t fit the texture I’m looking for, I can paint, mask, or erase certain effects or add additional material effects that might not be present in the main substance. For exports I can do a 4k or 8k export without setting the whole document to that resolution, which also saves some time. Finally, even if a substance gets updated or changed in designer, I can still use my painter file to get the exact same texture output I had before, but I can also decide to switch to the updated version of my base substance.
To minimize errors during material creation or asset texturing, we decided to have custom presets for Substance Designer and Substance Painter, so that the shader settings, cubemap, light setup, and post processing were identical for every artist. With different artists authoring substances or texturing assets, the results will be more consistent if they use the same viewport settings and cubemaps.
I think it is most important to always work with the right references and to have a clear goal of what your material needs to accomplish. Especially when it comes to more complex substances it is really helpful to plan ahead. When you recreate a real-world material you have to train your eye to really see what is there. Real-world materials can be a total mess with a lot of different effects and features, all of them together create the fidelity and richness of a believable material. You have to identify each of those features on its own, recreate them, and balance those features in the global context of the material. I think it’s best to not cut corners in this stage.
I also think that for beginners it might be beneficial to not go for the regular brick or tile substances that nearly everyone starts with. It is fairly easy to get some half-decent results with the pattern generators of substance, but creating an outstanding brick or tile substance is actually not easy. Instead I found it very helpful to try to recreate base materials that don’t rely on patterns too much. Just pick one interesting high-res texture and try to recreate it as closely to the reference as possible.
Keeping it simple and maintainable is something you should always have in mind when creating substances. Noises should be reused, and your graph should be documented. Exposed parameters should give clear indication of how they alter the material. Sometimes you might end up with a much too complicated graph for a rather simple or subtle effect; ask yourself how this could be improved. Often you can get to the same results with less complexity.
One last piece of advice would be that people shouldn’t be too obsessed with procedural solutions while ignoring the potential of using photo-sourced material that could be scattered, adjusted, or tweaked procedurally. Creating certain effects fully procedurally can require significant time and can result in very complex graphs. In a production environment treat Substance Designer and its procedural aspects as tools to create materials with a certain degree of flexibility. So being pragmatic in some situations by using photo-sourced or scanned elements can save a lot of time and can even improve a material in the end.