I translated this function graph which is node-based into C++ code in the top right corner. Substance Designer is quite amazing as we can literally code on how the parameters react in a very similar way to Houdini.

For the random generation, I had to code each parameter which can be changed by hand with a “Global Random” node. This node is driven by a custom parameter which is modified by a set of operations such as square roots, multiplication, etc. to make each “Global Random” node output number different in each function.

Furthermore, the “Global Random” takes a float as an input which defines the range in which the number will be generated. This is very practical since clamping the output of a randomly generated number is not optimal. Let’s say you clamp it to have a minimum of 3 and a maximum of 9, everything above 9 will return 9 and that’s a lot of numbers. It will have repercussions on how the pattern will repeat since it will return 9 very often.

Also, I had to keep in mind that the way we see the generated content is very different from how it is built. For example, from a code perspective, a 0, 0, 0 black is different than a 1, 1, 1 black, but from a visual perspective, it’s indistinguishable. That’s why I had to implement steps for colors, so I could only generate colors that are perceived as different (even if the changes are very subtle) rather than just using 255^3 colors.

Another feature is that you can still change some shield parameters such as metal color or pattern number after it has been randomly generated.

One of the not planned features that just ended up being possible is that the seed number can be large enough to fit a birthdate like DDMMYYYY which is what I used to test if I didn’t have redundancy in my random parameters. It’s actually quite exciting to have something entirely unique in front of your eyes.

Proceduralism in Game Development

I see this project more as a lab experiment rather than a viable workflow since it’s less optimized than handmade props, and you have less control over what you doing. However, I think that the growing interest in proceduralism in game production is a good thing. In my opinion, it will allow artists to spend more time on pure artistic creation and less on boring stuff like retopology, UV unwrapping, etc. Ubisoft proved it a few times with Far Cry 5 and Ghost Recon Wildlands where they used Houdini to generate the whole world entirely procedurally. It gave the artists a solid base to create a realistic world. To me, the downside of such methods is that it requires a deep knowledge of procedural packaging and it’s quite complex but in the right hands can create beautiful results. Whereas it’s a good idea to generate terrains as Ubisoft did, I think it’s more time-consuming to create a generator for props than to create 2-3 props that you need manually since a simple generator can only produce one specific range of objects.

To my mind, the best workflow is already used in some studios which is a combination of handcrafted art and proceduralism to get the job done very quickly and with high quality.

Overall, I’d say Houdini and Substance Designer are essential software solutions for creating open worlds with a lot of content.

Afterward

I hope I helped someone with this article. Here is my artstation where I will post my new projects and where you can send me questions if you have any.

Also, I would like to say thank you to Sofie Chabrol for her pertinent feedbacks and help.

Lucas DZIURA, 3D Artist