Learn to Make Procedural Dragon Eye in Houdini

Marcelo Souza, also known as Kumodot, showed us how he used Houdini as a "super-powered Substance 3D Designer" to set up a fiery procedural dragon eye using elements of 2D texture workflows.

Introduction

I started using 3D Apps back in 1993, with Crystal Topas on an Intel 386 PC. Soon I moved to 3D Studio 1.0 and I got my first professional job in 3D in 1995. No internet, YouTube, or schools were available at that time, so I grew up in my career as a self-taught artist. There’s no glamour in that, just pain and tears. Hitting my head on many walls and roadblocks. On the positive side, that made me savvy under diverse situations like having to learn a bit of "everything" on different software and areas. So I am a generalist "by nature". I started as a generalist in 3ds Max and kept adding other packages to my toolbox over the years, like Substance 3D Designer, Painter, Maya, ZBrush, Cinema 4D, and I "found myself" again in Houdini. And this feels like a never-ending fun journey. 

I am very curious about how things work and how to use them in different scenarios. I also have a background in electronics, and as a hobby, I like to design and 3d print gadgets and portable video games. On top of that, I also love photography, so my strongest skills are related to making things look cool to see. Like texturing, lighting, and rendering. I am not a coder, but I love coding to create small tools and automate tasks.

I have worked in many different roles in my career. From TV networks, through advertisement studios, VFX, Motion Graphics, printing, and design. Worked some long years in movies and became a VFX Supervisor, working for 7 years in that role. Finally, in 2017 I moved to Canada to work at Tendril Studio as a Tech Lead and Senior 3D Generalist, working on projects like American Gods, American Horror Story, and an infinite number of amazing motion graphic pieces for many brands like Nike, Hublot, Samsung, Huawei, NIO, Riot, Microsoft, Mercedes Benz, and many more.

Houdini

The challenge of doing everything as procedurally as possible always amazes me. And 3ds Max gave me a good start on that matter with its modifier stack workflow. So, like a puzzle game, I like to challenge myself to create/recreate stuff with that kind of thinking. So back in 2001, I took a picture of two bolts over a table and gave myself a briefing. To try to recreate that image as best as possible just with 3ds Max. No plugins allowed, no textures allowed. So I had to build everything inside 3ds Max as realistically as possible. Long story short, the resulting image of this challenge can be found today in the amazing article by Mike Seymour "The Art of Rendering."

Fast forwarding to 2017, when I moved to Canada and started working at Tendril, I also had to learn Maya and C4D. Not being a generalist in those two, I became specialized in texturing and lookdev. So, naturally, I had to learn texture tools like Substance 3D Designer and Painter. Working in Substance 3D Designer "shaped" my brain to think even more procedurally. Not only procedural and parametric, but the idea of making "tools" and dynamic assets started to make more sense to me than just doing static stuff for specific tasks or jobs. That is what finally gave me the spark to dive into Houdini, as this is the type of workflow where it shines.

And after more than 25 years in 3D, getting out of my comfort zone again, now into the uncharted waters of Houdini, is so rewarding! Especially after you break the first roadblocks, when the puzzle pieces start to fit together. I also realize that learning Houdini is like learning chess. The rules and logic are not that hard, but you must master them to know what you’re doing. You have to reset yourself to the fundamentals of 3D and build up your skills over a more stable and open structure. You only get better by understanding the basics and with more flight hours, not just with tutorials.

The fun part is that Houdini skills feel like superpowers more than any other software. You don’t need to rely much on plugins or third-party tools. You can finally do your own tools and ever-growing collection of custom setups for numerous tasks, effects, and situations. Everything is dynamic and evolves over time as you do. It's like a game where you acquire new skills and make your character stronger every day, able to face more and more challenging stuff, at your own pace.

Procedural Dragon's Eye

Before Houdini, some years ago when I was studying Substance 3D Designer, I was doing random exercises almost every day and started doing an eye/iris texture in Substance 3D Designer during one of those studies. It generates all the displacement map/texture procedurally to make something that looks like an eye without having to model anything. And with parameters to dynamically change some aspects of it. I never finished it but when I started learning Houdini, I also started a procedural setup using roughly the same idea as in Substance 3D Designer, but now in 3D.

Again, as I study, my goal is just to learn or test something, so I don’t usually finish or polish projects to the point of being production-ready. I just save it so I can use it later in a project.

That’s what happened with the Dragon’s Eye. I was booked as a Lookdev and Texturing Artist to rebuild the textures and shaders of this dragon model to make it hold up a close-up shot in the eye area. I quickly found out that the original dragon’s eye model was very low poly and its original texture was less than 100px wide, so it would not work for the shot.

That was my chance to pull out my unfinished Houdini study and make it production-ready. I changed the setup so we could art direct the aspects of it, like a control to change from circle to slit-shaped pupils and some other controls.

As I was using VDB to make everything look more organic, the resulting mesh was a bit heavy to deal with. I could work on optimizing it, but then I tried something else. Based on my experience with Substance 3D Designer and how good a displacement map can look with the Subsurface shader, I got the idea to treat my eye setup as a displacement generator, not as a final model.

And once again, the great thing about being inside Houdini is that I can also automate this process. So inside the same project, I made a simple “tool” that applies a gradient texture, from white to black, on the depth of my resulting eye mesh, and extracted ZDepth texture from it to be used as a displacement map on a much simpler version of the same eye (basically a sphere). It worked like a charm!

So what I called “unusual workflow” was to move “back” into the basics of using 2D texture workflows, combining the best of the two worlds based on my previous experience, instead of moving into a more complex rigging for the eye and probably doing a LOT of extra work using a heavy model, hard to deal with, and to not make a big difference on the shot. That probably saved me a lot of headaches and production time.

An old study of a procedural eye made entirely in Substance 3D Designer

Testing the Dragon’s Eye as a displacement map generated from the Houdini setup

Procedural Iris System

The iris in my setup is just based on a set of curves arranged using a Copy to Points node around another curve that represents the pupil (center hole). All the curves have noises applied that vary over their length and also in the radial direction. In the end, I have two sets of curves shaped by a gradient ramp to shape it. This way I have some depth control with two independent layers of tangled fibers. After distributing all the fibers, I turned them into tubes with a Sweep node, also controlling its scale along each curve length and varying its thickness to add a more organic touch to it.

Then I put all that over a plane and merged everything as a single VDB using the VDBFromPolys node. This heavy VDB mesh was then exported and reimported into Houdini (this can be done all in the same setup). With this dense mesh in, I did a small little setup in Houdini that reads the height from 0 of this imported mesh and maps a float attribute value from 0.0 to 1.0 representing the height (or depth) of each vertex of the mesh. (This is made in real-time in Houdini).

This attribute is fed into the material as an emissive, and by positioning a camera from the top view, and rendering it I finally have my “depth/displacement” mesh. Sounds like a lot of steps, but to rig it up took less than 5 minutes, and once set, any update on the eye parameters affects the whole system generating an updated map on render. Testing the Dragon’s Eye as a displacement map generated from the Houdini setup to be used on the final eye. The depth render is pretty much like a ZDepth pass (I could also set and extract it from the depth, but the way I did is more error-proof and easier to tweak).

For the diffuse color, I got it rendered from the same camera I rendered the depth map. Each fiber strand is mapped with a value attribute to control a gradient color along it.

In a nutshell, I used Houdini as if it were a super-powered Substance 3D Designer, to generate the iris texture.

Veins

It's very hard to find good textures to create the tiny veins that I need to use on the membrane lid of the eye. So, once again, as I am already in Houdini, why not do it procedurally? Houdini has a handy node for this called FindShortestPath. In a nutshell, what this node does is obvious. It traces curves over a surface, connecting points of this surface that are closer to the next connection. You can also feed some parameters and attributes to drive the direction, and also set start and ending point goals. The result of this process is a bunch of curves. So using those curves, I used a Sweep to transform those curves into tubes with scale control to make all ends pointy. With this quickly done, I rendered that bunch of tiny veins spread over a plane as textures and again a depth map to use as displacement on the shaders. Of course, the system is not made with a single node. It looks more complex because I have mixed in a Pyro solver to spread some attributes around to make shorter and longer veins controlling the setup.

Marcelo Souza, Senior 3D Generalist & Lookdev Artist

Interview conducted by Theodore McKenzie

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