Introduction
Hey there, I'm Umar Muzammil, a veteran of the CG industry with 14 years of experience. Back in my gaming-obsessed youth, I decided to turn my passion into a profession. It all clicked when I caught a behind-the-scenes look at the making of Prince of Persia: TTT in 2009, and that's when my journey with 3ds Max began. Gaming inspired me, and now I'm here, bringing that inspiration to life in the world of 3D art.
Early in my career, I delved into 3ds Max and ZBrush, using them as my launching pad into the realm of 3D and digital art. Simultaneously pursuing a bachelor's in software engineering opened up the world of technical possibilities, blending creativity with technical finesse. As I progressed, I broadened my toolkit, incorporating Houdini, VEX, Maxscript, Python, and more. Rather than tethering myself to a specific tool or programming language, I prioritize problem-solving versatility, for example, recently, I crafted a texture dilation tool entirely in Python, a project I'm gearing up to share with the community, you can find it on my LinkedIn. You can catch intriguing demos of other tools, including ZScript tools for ZBrush and a Substance 3D Painter bridge with TKinter, on my YouTube channel.
In my current role as Senior CGI artist, I've been a key player in multiple 3D production teams for Megascans, contributing over 500 assets to the Megascans library and still counting. Beyond asset creation, I am always trying to write workflow tools to optimize and improve the asset production workflow for myself and my team as much as I can, using Houdini, Python, JavaScript, and more. Presently, I'm part of the Modular Production team, contributing to the creation of 3D content for demos like Rebirth, Valley of the Ancient, and the Unreal 5 Reveal demo – a truly exciting journey with Quixel and Epic Games.
Houdini
I stumbled upon Houdini in 2017 during my quest for a more dynamic and procedural approach to 3D art. Intrigued by its node-based workflow and powerful procedural capabilities, I decided to take the plunge.
I didn't have a specific motivation to learn Houdini initially. After years of using 3ds Max, I noticed some limitations, especially in grooming and scattering areas. Intrigued by Houdini's reputation as a procedural powerhouse, I began experimenting with small projects and tutorials. Over time, I managed to integrate Houdini into my toolkit. Now, it's a crucial component of my creative process, enabling me to explore new dimensions in digital artistry. For example, in my most recent environment artwork "Middle Eastern Road", I simply did some processing on various booleaned boxes coming from 3ds Max in Houdini to add a layer of detail with scattering, VDB, noises and simply exporting the OBJ back. Houdini helps you to do whatever you are doing but faster.
Houdini stands unrivaled in the realm of proceduralism. While Blender has made strides with its Geometry Nodes, it's a relatively new system still evolving. In contrast, Houdini's entire architecture is node-based, not just a part of it. In Houdini, everything is procedural, you either want it or not. The non-destructive workflow of Houdini makes it very special along with the robust tools it offers.
The initial challenges of mastering Houdini can be daunting, especially for those accustomed to tools like 3ds Max, Blender, or Maya, where user intuition often surpasses the sheer power of the toolset. However, the most effective approach to learning Houdini is to start with the basics and tackle problems that are relevant to you. For instance, I discover a new node practically every day, and I expect that learning journey to continue for years. Rather than attempting to learn Houdini node by node, solving production problems guides your exploration of the necessary nodes and functionalities.
The Snake Game
I initiated the Snake project as a convergence of learning and technical curiosity. The initial concept revolved around navigating a single point on a surface with primitives based on a given path. While generating the path itself was achievable using existing shortest path nodes or custom VEX scripting in Houdini, I focused on solving the navigation aspect and defining a newer path while it reaches the target and then also increasing the length of the snake. The challenge was developing a system that efficiently guided the point along the specified path.
The goal of the Snake project was twofold: to develop an engaging visual representation of the classic Snake game and to explore innovative navigation techniques in Houdini. The inspiration stemmed from a fascination with the timeless Snake game and a desire to reimagine it using procedural techniques. Being able to define a path yourself and let the snake run towards it while making the whole thing endless.
Parameters
The node network is surprisingly very concise as VEX scripting plays a crucial role. The algorithm begins by defining two random points on a grid: one as the snake and the other as the target. A wrangle adds attributes to these points, marking them as part of the initial iteration. The secret sauce here is to use the solver. The solver in Houdini moves these points, tracking their previous positions and paths.
In the first frame, the solver takes two inputs – the points and the grid, defining the navigation.
The shortest path node calculates the shortest path, with a crucial trick to keep track of the iterations, especially if the snake has reached the target. The first point wrangle identifies the first iteration, adding points to the group as initial and final path targets for the shortest node. Both points and the path are fed into the next wrangle to initiate point movement. This wrangle also manages iterations to avoid generating a new path each frame if the snake hasn't reached the target. Once that's all taken care of, we move on to the next problem, which is moving the point in a sensible way which I also solved using point wrangle/VEX.
To address the next movement challenge, you start by looking at the nearest primitive of the snake, then you find the points of that primitive along with positions of those points using primpoints and point function and calculate a direction vector for the movement along with the velocity. You move the point a certain distance each frame and check if the snake point is within a certain radius of the endpoint. If it is, you select the new primitive using the endpoint while making sure you are not selecting the previous one and repeat the same process until the point reaches the end and has moved through all the path primitives, which takes us back to the first wrangle where you check if the snake is close to the target radius or not.
If it is, you regenerate the new path and target. Additionally, you can also play with the path generation itself and make it versatile so it's not just the shortest path which I did, as there are lots of resources on it. Check out the GIF that shows you the point navigation primitive by primitive
Last but not least, you use the iteration parameter in the trail SOP to increase the length of the snake as we've been keeping track of that.
Also, as we have full control over the points, you can make the snake look interesting and not just boxes.
Houdini Digital Assets
The process of setting up the Houdini Digital Asset (HDA) for the Snake project primarily occurred once the project and tool reached completion. Using the interface editor in Houdini, the parameters were simplified and promoted to create an accessible and user-friendly interface. This is actually very common in the industry as you don't exactly start out by just creating the parameters first and then work on them, as you don't know how you will solve the problem and which parameters will be available to you. While the parameters were straightforward to promote and refine, the challenge always is to strike the balance between options and simplicity. Check out my procedural guitar demo, which has way more parameters as it was a requirement.
Tips for Artists
If you are just getting started, I would suggest learning Houdini just like any other DCC app. Try to do 3D modeling, scattering, grooming, or rendering. Using the basic nodes to get things done is the best way to make yourself familiar with the tool.
I learned mostly from "CGWiki by Matt Estela". Without a doubt, it's the best learning source for Houdini. Another great learning source is obviously Entagma, check out their amazing YouTube channel. Last but not least, if you are keen to learn VEX, check out Junichiro Horikawa (a VEX Monster).
Umar Muzammil, Senior CGI Artist
Interview conducted by Theodore McKenzie
Keep reading
You may find these articles interesting