|Project Aero: Procedural Aircraft Design Toolkit for SideFX Houdini
I find Houdini a very powerful tool for 3D modeling. In fact, this aspect was largely motivational for me to choose it as a primary 3D application. And talking procedural modeling I mean not just fractal mountains, instanced cities and Voronoi-fractured debris (which all can be made look quite fascinating actually), but efficient creation of 3D assets in general. Any assets.
Thus lately I have taken some of the not-so-free time (a bit over 3 months, to be more accurate) to develop (or rather prototype) a toolkit for procedural aircraft creation, which I am happy to showcase today. Please welcome Project Aero.
And most of those 4-5 hours was spent on design decisions – not smoothing edge loops, or laying out UVs, or drawing countless layers of rivets and scratches – those kinds of things got automated during the toolset development months. So technically, a new model could have been created in minutes – the time it takes to lay down few nodes (see screengrabs below) and set the basic parameters up.
The resulting models are completely procedural: every pixel and polygon are generated by the system from scratch tailored to a particular vehicle design; textures are generated either at render time or from the scene geometry to the preset resolution – no photo-textures or other disk-based samples are used. Bolts and rivets are randomly turned and micro-shifted on an individual basis. The generator tries to preserve consistent detail scale and proportions across any curvature and size. Controls are designed in a hierarchical fashion, so that user could work from big, conceptual adjustments (like main contours, forms and surface styling) down to tuning individual element's bolting when required. Plus more perks inside, and of course standard Houdini tools can be used at any stage for any manual design adjustments.
|A new design can be created in few hours from scratch
The skeleton of the system and each design are interactively placed profiles which are skinned into NURBS surfaces with flexible shape controls. The resulting design is then fed into the detalization nodes that create the necessary geometry around the surfaces and generate textures using a variety of techniques. Final models are rendered as subdivision surfaces with displacement; bolts and rivets (which an airplane has quite a few of) are stored as packed primitives.
|Profiles form the backbone of each design
|Only few more nodes are required for finalization
|Texture preview mode
By no means Project Aero is complete or flawless, but hopefully it takes the concept far enough to illustrate the benefits and possibilities of procedural creation of 3D assets. Getting another individual version of the same model is a matter of seconds. Automatic non-identical symmetry and procedural surface aging controlled by few high-level sliders also help to escape “the army of clones” issue that 3D models sometimes suffer from. Deeper variations like repainting or restyling the skin and panels are done in a breeze. The set of detail modules is easily extendable and parts of the existing design can be swapped and reused. Depending on the toolset's design objectives, generated models could be automatically prepared for integration into a particular pipeline (Like textures could be baked out, LODs automatically created and parts named in a chosen convention, exhausts and moving parts marked with special dummy locators or attributes, etc).
|A new unique copy of an existing model is literally "on a button"
And of course the workflow is non-linear from both design and development perspectives. The first means that you can always go back and change/adjust something at the previous stages of work without having to redo the later steps (like a change in the wing position on a hull of a finished model will make all the related surfaces recalculate to allow for the new shape). And the second refers to the ability to use the toolset while it's being developed, which means that in a production environment artist wouldn't have to wait for a TD to finish his work – the tools would be updating in parallel, automatically adding new features to the designs already being worked on.
Hopefully, there is no need to say that the approach used in this demonstration is only one of many-many others, each fitting some objectives better than the other. I might touch upon the topic later in case of available time and/or public interest, and so far those interested in procedural cooperation are more than welcome to email me (link at the top of the page).
Keep having fun!