Self Construct: Procedural Environment Production in Houdini

Mohamad Salame did a breakdown of his 3D scene Self Construct and talked about the approach to procedural asset creation and animation using Soft VAT (Vertex Animation Textures).

Introduction

Hi! I’m Mohamad Salame, a Technical Artist from Lebanon currently living in Toronto Canada (2020).

The first time I ever made digital art was in middle school with PowerPoint! I used to group shapes (square/ circle…) to make stick men and animate them.

Even though I didn’t realize that I was animating at the time, the key point here is that there’s no wrong or right way, or any limits to what you should and shouldn’t do when it comes to the CG world! Use whatever to make whatever as long as you get there.

Some techniques are better than others though, and I believe that Houdini will be a big part of the game industry in the future.

So Why Houdini?

This is like asking why would you use a car when you have a horse! Are you kidding me? With Houdini, the progress at the beginning would be slow, but it'll grow exponentially with time whereas in traditional production, it would start at a high speed then stagnate with time due to the destructive constraints of the workflow.

The systems you build can generate lots of content and those systems can be used to make subsequent systems. The more intelligent your systems are the more versatile they can be, giving you more room to iterate even at the end of a production cycle.

Quick note: The fact that you’re using a procedural program doesn’t mean you’re working procedurally, you could totally use Houdini in a destructive manner.

How I Got into Houdini

Last year, I dared to walk into Ubisoft’s Toronto studio with a portfolio filled with uniquely textured assets and YOU DON’T DO THAT IN AAA! Open-world games are made with Tileables/Trims/Atlases/Decals which is a shocker for most students out there. 

Billy Matjiunis, a Senior Artist at Ubisoft, told me to learn Houdini since companies are really hungry for Technical Artists, and that’s what I’ve been doing since the summer of 2019.

I started by consuming whatever content I could find (YouTube, Vimeo, SideFX, Gumroad, Udemy…) to the gist. I asked people such as Robert Wilinski, Simon Verstraete and Anastasia Opara "Where do I even begin?" and they were kind enough to steer me in the right direction.

I first messed around with SOPs for about two months then began learning Vex, “Houdini’s coding language”. Though I had 3 years of Environment Art experience with no coding background, it took 20 days of “CgWiki Joy of Vex” to get prepared nonetheless. It was hard at the beginning and it felt like I wasn’t doing any progress, but I was stubborn enough to plough through that phase.

1 of 4

Self Construct: Approach to the Project

The environment fits on 3 2k Atlases.

I didn’t get into UE4 up until the last month! A risky move, but with Houdini, I can copy and instance meshes into whatever layout I want and it translates well into UE4, I don’t have to rebuild my scene all over again!

The project took me 5 months to make, with the first 4 months spent in Houdini and Substance Designer. I would occasionally test things in UE4 such as "How many bevels does an edge decal need?", "How much pixel dilation do I need for an Atlas to be seamless?", etc.

I wanted to make the whole thing with nodes and no unique textures to challenge myself, but I ended up using ZBrush to sculpt a base mesh for the robot to later retopo in Houdini.

FPS averages around 110 in play mode on a GTX 1080. If I remove the dynamic lights and lower the World Settings quality it caps at 120, but I need that sweet extra bit of detail for the cinematic.

Procedural Asset Creation  

Not everything should be made procedurally! But if the task is repetitive and you can spot a pattern it might be a good idea to automate it.

Think of it as if you’re making a rule for everyone to follow, but Bob won’t listen and no one knows where Mary is. See, it can quickly get out of hand!

Instead of diving right in, take a step back and think about how you can split the problem into sections that won’t affect each other.

In the case of the book pile, I split it into 3: Vertical, Horizontal, and Slanting stacks. Afterward, I placed them next to each other and used a lattice to deform the whole thing.

Another Way to Create Assets Procedurally

Barn structures were all modeled in 2 HDAs, one for the first floor and the other for the roof. I exposed parameters to control the shape and used switches to add or remove doors/ windows.

Materials

All the textures were made in Substance Designer combined into 3 Atlases to optimize for draw calls. The Atlas above was used for the barn structures. UVs were then stacked onto the appropriate portion of the atlas to texture all assets.

All the barn modular structures use that one texture Atlas above and are instanced into the correct positions with Houdini copy to points node, then brought into the engine as an HDA and baked into a Blueprint.

Animation

The animations were done in Houdini and translated into the engine using VAT (short for “Vertex Animation Textures”), in particular Soft VAT, the kind that doesn’t change topology/ UVs when it's being animated.

I used DOPs (Dynamic Operators) for the Robot animation. It’s a falling simulation playing backward.

How it works on the Technical Level:

In short, you’re storing the position data of the mesh points for each frame of the animation in horizontal strips in a texture map, so each pixel (RGB) holds XYZ values. The UVs of the animated object would be a flat horizontal line that pans down to grab a different position at each frame so the object can move in the engine. Luiz Kruel has done lots of tutorials on it, but don’t bug the guy he’s busy saving the world!

How to use Soft VAT:

Animate an object either in SOP level with transforms/deformation, with Vellum or with DOPs.

Link the output to a VAT lab tool in the OUT context and export.

If you expand the VAT node options you'll find the text for the UE4 shader. Copy and paste it into a new material in the engine (Literally Ctrl-C, Ctrl-V).

Import the asset into the engine with the position texture and plug it into a material instance (you might have a normal texture, too).

Copy and paste the frame count, min and max positions, and speed from the VAT node into the engine.

There you go, you got an animated object in the engine using VAT.

Final Words

This is the part where I say something cheesy…

There’re so many interesting things to create, learn and share and the more I know the more possibilities I can see. I don’t think I’m going to ever retire and I’ll rest when I’m dead.

If you're interested, I shared the Houdini Project Files on the Marketplace. If you have any questions you can contact me through Artstation.

Mohamad Salame, Technical Artist

Interview conducted by Kirill Tokarev

Keep reading

You may find this article interesting

Join discussion

Comments 0

    You might also like

    We need your consent

    We use cookies on this website to make your browsing experience better. By using the site you agree to our use of cookies.Learn more