How Pete Sekula Built Rome in (almost) a Day with Substance Designer
When developing our software, we make sure to provide the right tools for producing high-quality textures regardless of the scale of your project. Therefore, any artist can produce more content while preserving the best-looking results. Pete Sekula’s latest project perfectly illustrates this philosophy: With his Rome Fantasy Pack 1 (and the upcoming 2), he produced an exhaustive asset collection all by himself. And as you may have guessed, 95% of the texturing process was done with Substance Painter and Substance Designer.
Let’s see what we can learn from this one-man-band artist, and how he used our tools to boost his texturing pipeline.
Hey Pete, thanks for your time! Before we start, could you introduce yourself to the community?
Sure thing. My name is Peter Sekula and I’ve enjoyed working as an Environment Artist for most of my life. When I was in school learning 3D Studio Max version 3 (a long time ago!), I started to realize that if I was to succeed in starting a career in the game industry, I had to consider specializing. Despite schools teaching you a variety of disciplines, I decided that I wanted to go all-in with environment art. That turned out to be a good decision since almost a year after I graduated I became an Environment Artist at Ubisoft Red Storm.
It was around the 10-year mark that I began to see opportunities online to share my skills through the Unity Asset Store and Epic Marketplace. With the explosion of mobile and VR, and the multitude of small, successful 1 to 3-person game dev teams, I saw that people with my skillset were welcome and could be successful. I started my own company, “Quantum Theory”, to deliver high-quality art content to the masses and soon left Ubisoft to focus on the company full-time.
You have been developing the Rome Fantasy Pack 1, and the second iteration is on its way: what was the motivation behind these projects and using the Substance workflow?
I think everyone has some project in the back of their mind that they know will be immensely challenging but will transition them into becoming better in their discipline.
“If I could learn how to do X, I won’t need to do Y ever again.”
If I could completely immerse myself for months in Substance Designer and Painter, I won’t need to rely on Photoshop and CGTextures.com ever again. Painting materials on a 3D mesh would guarantee a seamless, high quality model. A whole new world of shader options and surface fidelity would open up. With carefully constructed heightmaps, you can do a lot of really cool stuff in a game engine. For example, the concrete damage and the bricks in this image are all alpha cutout normal-mapped decals capable of parallax occlusion mapping.
Using similar techniques, if you use the heightmap as an alpha mask, then bias it with vertex color, you can essentially paint the density/visibility of surfaces. The stones are a single square material decal which lie on top of that mosaic floor.
In terms of growing my company, it was about making a commercial asset pack for Unity and Unreal in the hopes that it would really impress customers. I had to make an investment in something that would last. My hope is that the user base of both engines could look at the pack 5-10 years from now and think it still looks stellar, thanks to the flexibility the Substance workflow provides.
Rome: Fantasy Pack I illustrates the lower/middle class life of those who lived in Rome during the 4th and 5th centuries. Rome had the first multi-floor apartments to house the millions of people living in the crowded city. So in terms of materials, lots of brick walls (free one below!), concrete, pottery, wood, plaster. Typical fantasy stuff but with some specific characteristics. But I also authored several mosaic substances which will be featured in Pack 2.
This mosaic pattern contains a few bitmap masks to get me started, but the bulk of it was done in Substance Designer.
Since I can’t really distribute shapes along a path in Designer, I decided to author tiling mosaic masks inside 3DSMax to serve as a base for the material. If you should render your masks from a 3D app like this, make sure to turn off antialiasing in the renderer. The smoothness of the antialiasing will prevent you from gradient mapping and randomizing the mask properly in Substance Designer.
As an example, the mosaic layout of the upper left and right images were just quads I made in Max, then colored them certain ways so I can control them better in Designer. The upper right mask is the standard grayscale variation map which is great for controlling tile visibility, value variance (making some tiles darker), making some tiles higher than others, etc. In almost all my substances, there will be a variation map because it’s just so handy. I think it’s safe to say that most Substance artists rely on it for some aspect of their material.
The upper-left map is an RGBA map to control color placement. I would first take that mask and use a series of Safe Transform nodes to tile it and blend it to the box layout. Then, with a set of Color to Mask nodes, I’ll sample the Red, Green, Blue, and White pixels to generate individual masks where I can then blend in my own albedo color. Here is an example of taking the green pixels, converting it to a mask, then using it to blend two colors.
To get the rest of the mosaic pattern, I just replicated the same workflow with Substance Designer’s own nodes.
I made the circular mosaic patterns in the middle with Splatter Circular nodes. The pointed mosaic, the face, and the interlocked ring patterns are image masks made in Max just like above.
A more complete breakdown, as well as breakdowns for wicker, cypress bark, burlap/canvas, and more is found on my my Artstation site.
Also, for those interested in seeing the Substances I authored for Rome: Fantasy Pack I up close, there is a free, playable demo in the Unreal Engine (VR too!) on my website.
Making such gigantic projects all by yourself should have taught a thing or two about organization and pre-production: any tips to share on this topic?
Source control is vital. I have a separate machine setup as a Perforce server. Granted it has a steep learning curve, but Perforce is free for small teams, so why not? I store my Max files, Unity and Unreal projects, etc. on there. I also take advantage of Dropbox and OneDrive to store my Substances since the files are small.
I tend to author a lot of modular Substance nodes; ones that combine an entire tree into a single node with sliders and tweakable parameters. I’ll pack them up and put them into the correct Substance Designer folder so I can reference them by hitting the spacebar inside the graph.
Learn how to construct your levels in a modular fashion. I never know what the end result of my level is going to be until it’s done, so I feel it’s important to produce content that encourages iteration. The cornerstone of the Substance workflow is being non-destructive, so constructing modular 3D meshes certainly goes in tandem.
Do you have any Substance Painter/Substance Designer quick tricks that save you some time on a daily basis?
- In Substance Designer, if you have a string of nodes that don’t fork, select them and hit “D.” They all collapse into a neater, smaller stack. If you have a node that has more than one input, you can easily swap the wire inputs by selecting two wires and hitting “X.” This is super handy when swapping inputs on the Blend node. Move all the wire ends to another node by holding Shift and clicking on the little circle input/output icons and dragging. Duplicate a wire end by holding CTRL-click (on PC). Pressing ALT-Click deletes the wire input.
- Dropping the output size (width and height) of nodes during heightmap or mask creation is something I do quite often. It’s a cheap blur, but it’s also great to combine a low-res mask with a high-res one, then distort, to get a brand-new “non-stock” Substance noise map. Or, Max/Lighten the low-res heightmap on top of the high-res version to get a pseudo-erosion effect.
- Taking the time to learn the interoperability of Substance Painter and Substance Designer really pays off. I’ve developed special generators and filters that have been super handy for the way I like to work. At one point I needed a stone wall with plaster slopped all over it. But, the mask I would paint in Substance Painter needed to be manipulated as I painted so the plaster would have thickness and caking. Then, I could tweak all that effect after the layer was painted to get the precise look I wanted. Here’s the result: https://youtu.be/PhTrlxhk8mc
- Need to make tiling materials in Substance Painter? Just make a 3 quad x 3 quad plane where each quad is mapped 0 to 1 in UV space, then do your painting in the middle quad.
- Finally, the biggest increase to my Substance Designer workflow is through binding node placement to shortcut keys. Substance Designer doesn’t allow for this yet, but by making a simple small script using AutoHotKey, I bound the sequence of hitting the spacebar, typing “levels,” and hitting enter, all to the key combination of “Alt-1.”. You can of course do this with any node. It’s so good that it’s gotten to a point where I can’t work without it :)
“Perhaps the best aspect of Substance Designer, is the ability to iterate in a non-destructive fashion.”
What is you favourite feature for each software (Substance Designer & Substance Painter)?
It’s super handy that you can open most of the native Substance nodes and see how they work. I’ve learned a lot by just doing that. While it’s not technically a feature, I realize most software packages don’t share their secret sauces. I really appreciate Allegorithmic doing this.
I love everything about Substance Designer so it’s hard to nail one feature. Perhaps the best aspect is the ability to iterate in a non-destructive fashion. Sometimes when I’m working, inspiration for an effect may strike. I can investigate the idea right there in the graph and branch without negatively affecting what I’ve already done.
With Substance Painter, by far the best feature is using your own custom Substances, generators, and filters. When the realization hit me that I can take the strokes I just painted and have them processed in a custom Substance, the scope of the software became immeasurable.
Now it’s time to share with us some tricks that make you so efficient ;-)
Instead of making a big huge tutorial, I figured it may be better to offer this free, 100% procedural brick wall Substance from my Rome pack to the community! Documentation explaining how and why I did things is inside the SBS file. You can download it here on Substance Share!