Documentation for automation toolkit
This is the documentation for the Houdini automation toolkit, which is an automation toolkit that takes high-polygon rough photogrammetry as input and automatically performs clean-up, mesh-reducing, UV-unwrapping, and baking to produce a low-poly game-ready output.
Table of contents
Houdini Automation toolkit is a workflow that consists of all different types of nodes that perform different processes. The image on the right shows all the nodes we have in the Houdini Automation toolkit to automate the process. Overall, we have divided all the nodes into five parts, which are preprocessing , low-poly processing, high-poly processing, color-id grouping, and baking&exporting. Each of the four parts is labeled by a different color on the image.
"M71WestMask" is the "File" node where we import our raw mesh, which is a high-poly .obj file that is produced by photogrammetry.
We use three nodes to remove the unnecessary part in the original raw mesh and clean it up. Specifically, we first use a "Labs_Straighten"("straighten 2") node to define an up-vector so that the mesh is facing the correct direction (this is actually an optional step). Then we use the "Group_Create"("keep") node to specify which part of the original input is redundant and use the "blast" node to remove the redundant parts. Specifically, we used a "square box" in the "Group_Create" node to specify which parts should not be removed because we had a square-shaped input mesh. You can pick other shapes in the "Group_Create" node, such as spheres, to adjust to different inputs. (We added an additional node "Labs_delete_small_part" ("delete_small_parts1") at the end to further fine-tune our result. )
With a "transform" node , we are able to make our mesh stay at the origin of the houdini. (Hint: use "-centroid(0,D_X)","-centroid(0,D_Y)","-centroid(0,D_Z)" as parameters for "Translate" 's values.)
The nodes in the smaller gray box on the right are nodes we did not use but are alternatives to the nodes that we used. These nodes are from Houdini's sideFXLabs extension. Some may find the sideFXLabs nodes are easier to use, which are "labs_straighten", "Match_Size","Transform","Labs Box Clip" nodes.
We use a "PolyReduce"(Reduce_Poly_Count) node to automatically reduce the poly count of our input. You may specify how many polygons you want to remove in this node. You can specify either by counts or percentiles.
We use a "Labs Auto UV"(UV) node to automatically UV unwrap our mesh. This node is from the extension "sideFXLabs". You have to install this extension to use this node. You can install the extension by first clicking the "+" notation at the top-left menu, and then search for "sideFXLabs". Don't forget to "Update Tookit" after installing "sideFXLabs".
We first use a "Labs merge small islands" ("merge_small_islands1") node to merge the small islands in the mesh to further reduce the polygons. You can specify the number of iterations. Then we use "Labs Calculate UVDistortion"("calculate_uv_distortion1") node to find UV distortions and then connect it to a "Labs Remove UVDistortion"node ("remove_uv_distortion1") to remove the UV distortaions. Finally, we use the "UV Quick Shade"("uvquickshade1") node to shade our unwrapped UV and use a "Labs UV Visualize"("visualize_uvs0") to visualize the unwrapped UV.
As the final step to prepare for the baking, we use a "Normal"("normals_LORES") node to compute normals.
We don't need to make additional steps for high-poly processing. We simply use a "Normal"("normals_HIRES") node to compute normals to prepare for baking to Low-poly.
We use a "Labs Maps Baker"("maps_baker2") node to bake high poly onto low poly. There are many parameters in this step where you can specify what you want to bake, such as Diffuse, Normal and Opacity.
Unfortunately, the free version of Houdini does not support .fbx format output. If you have an Indie version, you can use an "FBX output" node to export the result
To prepare for the texture rendering in the Substance automation toolkit step, we also have this additional workflow to assign different colors to different parts that should be rendered different textures.
We use "Group_Create"("ColorID_FaceMask","ColorID_CaveWall") nodes to specify different parts that should be rendered different textures( in our case, "cave wall" and "face mask")
We use "Color"("color1","color2") nodes to render different colors to different output from the previous two "Group_Create" nodes.