Pro Rocks - Procedurally generating rocks in Houdini

Pro Rocks

Pro Rocks is a Unity Asset Store product that contains an assortment of 3D rock assets to be used in any Unity game. The rocks come in 3 texture varieties, and I've included a custom shader for further customization.

This page is a blog post describing my creative process.

A brief history

I've always loved the the forms of rocks, boulders, cliffs, mountains, and landscapes. Growing up, I spent my days painting and drawing the rocky beaches of my hometown. In college, I spent my days hiking, camping, and skiing the breathtaking ranges in Montana. 


Now that I'm living and working in New York City, I don't get to spend as much time hiking in the mountains (though there are some pretty cool rock formations in Central Park). That's why I decided to explore capturing the forms of rocks, cliffs, and boulders in my latest procedural generation project - Pro Rocks 1.


I began experimenting with procedurally generated rocks as part of game project that has since gone on hiatus. While designing my game world, I wanted a rich variety of rocky landscapes for the player to explore. I took the visual aspect of the game seriously, so I wanted to be able to create a pipeline that would allow me to crank out hundreds of unique, high-quality assets using a 100% procedural process.


And what an awesome challenge it's been! The process of generating rocks was so captivating to me that it's sort of become it's own project altogether. I'm pretty happy with my rock generator at this point, and I'm proud to say that it can generate high quality meshes and PBR textures completely procedurally. The only caveat (for now) being that a single production-ready rock asset takes a very, very, long time to process on my current PC. So definitely not ready for a procedural game experience akin to the likes of No Man's Sky  or other real-time procedural games. But maybe after some optimizations, (and maybe a new multi-core CPU... ) I'll be able to cut down on processing time for Pro Rocks 2. That being said, my pipeline is fully capable of pre-rendering static assets that are ready to use in any Unity project. 

An early draft of one of my fully procedural boulders. This screenshot was taken in Houdini.

Another draft, this time of a mossy variety.

One of the unique aspects of my pipeline is that I procedurally generate all my textures in Houdini using vertex data. A lot of 3D artists in the industry might cringe at the thought. Yes, I know that procedural texturing tools like Substance Painter exist, and could do the job a lot more quickly and efficiently. Still, I wanted to challenge myself to try and keep the entire pipeline in Houdini. This reduces the number of manual steps needed to follow through on a production-ready asset. I pretty much just have to tweak a few simple parameters in Houdini, then hit a button and let it cook! No need to pass off the mesh to another program, as I can generate beautiful, high-quality UVs and 4k textures right in Houdini.


There's another great advantage to this approach - which is that I'm able to store vertex data in my high-poly mesh while I'm building it, and then use that data directly in the texturing process. I'll try to explain this idea with an example - I tried to generate lots of cracks in my boulders. To do so, I actually store data in each vertex that makes up the cracked areas, and use that extra geometry data later on to drive the texturing process. That's just one example, but the gist is that the mesh generation process is inextricably linked to the texturing process. I believe this produces more natural-looking results, and helps me to avoid the problem of having the textures be an after-thought. Although separating modeling from texturing is important for the 3D industry, I believe that working this way actually detracts from the quality of the work. If you were to go outside with a canvas and easel, with the goal of capturing a rock formation, would you first paint a completely white boulder, then apply a second pass for the "texture"? Probably not, because the process of capturing the form of something is implicitly linked to it's color, light, and shadow. It is only the technical requirements of 3D that have caused us artists to to have to build monotone geometry that is completely separated from the nuanced color and lighting of our work. This is what I have tried to solve for with Pro Rocks 1.


With this approach, I had a lot of fun making multiple texture varieties for each mesh. I settled on desert, mossy, and snowy as the three texture choices in Pro Rocks 1, but I really wanted to create a lot more. I had to narrow it down to 3 choices that would be able to plug right in to a variety of existing game environments, and I'm super happy with the results! In a future iteration, I might experiment with some other color and texture themes. For now, these three options hopefully capture the spirit of some common game worlds that we inhabit. The mossy variety was loosely inspired by the Legend of Zelda series, where I often find myself exploring green pastures and mossy forests. The snow environment was inspired by the critically acclaimed Skyrim, where I've climbed snowy peaks and explored frozen tundras - not unlike the real life experiences I've had winter-camping in the Rocky Mountains. The desert environment is a little closer to my heart, as those textures were originally designed for my aforementioned shelved game project. More on that to come in a future blog post! But I really hope that indie studios, solo projects, and other content creators will be able to find homes for these rocks in their game projects, and I would love to see how people use these to populate their worlds.