We stream high end result to hololens from Unity so imagine this through an AR HMD!
Very informative thread, thank you! Inspiring and reassuring to see the process behind such amazing renders. I started using UE4 a month ago, for a work in my firm and I'm still struggling with some concepts! I wish to see more article like this! Thibault (from France)
Your post is very good and meaningful. How long will it take you to write and post? thank you for sharing slither io
Luiz Kruel from SideFX talked about Reality Capture plugin and other tools that help dealing with geometry, UV, baking, and export inside Houdini.
Challenges of the Asset Preparation
The main challenges we’re seeing in production is the quality bar and the number of assets that need to be generated. This has led to the rise of the super specialized small package. There are tools for only UVing, only retopologizing, only baking, only reducing polygons, etc. These assets do a single part of the pipeline very well. The biggest hurdle, aside from remembering how to use all the different software, is shoveling the data back and forth between the apps. The other problem is keeping all of the working files around, so other people can see what path the asset took to generate the final result, so you have a predictable standard pipeline and consistent quality bar.
Reality Capture for Gamedev
Photogrammetry is a great solution to generate a lot of realistic assets fast. The same jump that happened a few years ago when we went from hand-authored textures to photo-based textures is now happening to models because of Photogrammetry. DICE definitely has set the bar high with their Battlefront presentation where they showed their workflows and Megascans is now the other impressive example of how good scanned assets can look. The other thing to note here is that the hero work will still need to happen, but photogrammetry saves people from spending months sculpting rocks.
We actively reached out to both DICE and Megascans with our Reality Capture plugin to make sure the pipeline and the workflows were as good as they could be. We respect them for their critical eyes and we wanted to make sure the plugin stood their tests.
Speaking of the Reality Capture Plugin. It is now in Open Beta, it’s a free download, but you will need a Houdini License and a Reality Capture license, which most studios already have.
Reality Capture Plugin
Everything is running inside of Houdini. We use Reality Capture’s libraries to run their code inside of Houdini, so you don’t even need the standalone installed on the user’s machine.
Of course, you can process things in Reality Capture and bring them in like any other mesh, but the power really comes from having the user stay in the same place and not have to keep switching contexts.
Inside of Houdini, there are a few new nodes once you install the plugin. But the general workflow is Registering the Images > Aligning them > Generating the final model. You can watch the full video to grasp the workflow. Find the full article about the plugin here.
How Houdini Helps Dealing with Geometry
Houdini has several different tools to help you automate the decimation and clean up of the models. The heart of it is the PolyReduce node, that got rewritten for version 16.5 of Houdini.
It does the reduction based on collapsing edges, which is pretty standard. The areas where it shines is in the accuracy (if you say you want 1,000 triangles you’ll get 1,000 triangles, not 1,032), the speed (once it’s done some initial calculations you can update the triangle count almost at realtime speeds) and the level of control (you can paint areas that you want to be retained, you can control how much the edges should try to stay the same size, controls over quad topologies and a lot more).
The tool that works with the voxel/polygon conversion is called the VoxelMesh node. Houdini has a lot of really powerful voxel tools, a common workflow is to convert polygons into voxels and then back to polygons. The VoxelMesh node wraps around that workflow and adds a couple of more features.
The main usage is similar to ZBrush’s Dynamesh, where you can to delete all of the interior geometry of a mesh and generate a new shell over the whole thing. It’s great if you have a lot of models kitbashed together in your high res and want to generate a clean optimal game res.
It also has some extra tools to expand and contract the voxels as well, and reproject it back onto the surface. So if you have a lot of small holes that you want to get a thick mesh around it, it can help you with those.
Mike Pavlovich did a wonderful series for us on this whole pipeline and has a great video on this node:
UV Layout Tools
In Houdini there are 2 main UV nodes, UV Flatten and UV Layout. UV Flatten is used for pelting or flattening the UVs based on seams. Some apps call this unfolding. Historically, UVs weren’t Houdini’s strong area, but over the past couple of years, we’ve been systematically rewriting all of the UV related nodes to make them the best in class.
Here’s a comparison between UV Flatten 1.0 and 2.0. We used to get a lot of texel inconsistencies and distortions where we shouldn’t be getting them.
And UV Layout is exclusively for packing UVs. It is incredibly efficient and super fast. A few customers are actually using Houdini Engine inside of Maya and Max to just bring this node across and let them use it in the other packages.
We use those as the foundation to other tools, like the Auto UV SOP.
The goal for the automatic UVs is for them to not need any touch-up, but we realize we still have a little bit to go. For organic objects like rocks and trees we get pretty close, but for something like a character or gun you’ll want to go in and clean it up.
The main idea behind this whole automated pipeline is not to generate final quality assets (although that’s the long-term goal). But to enable you to get an asset into a game engine in under 5 minutes to where you can make good decisions about the asset in context. So instead of spending hours manually retopoing and UVing an asset just to bring it in the game and realize that the proportions are wrong, you can quickly get something representative in the game and make your decisions.
Auto UV SOP
The Auto UV Sop is our most popular tool in the Games Development Toolset. Its main purpose is to, well, generate automatic UVs. There are very few people that actually enjoy UVing. In an ideal world that’s a task that goes away entirely, similar to generating LODs and Lightmap UVs. We’re hoping the Auto UV Sop is a step in the right direction.
It currently has 3 modes.
- Shortest Path. The node will identify areas of high curvature in the mesh and then draw the seams by finding the shortest path in between each of those points.
- Clusters. This node does a simple mesh chunking based on similar normals and proximity, it gives you pretty decent islands based on faces are similar.
- UV Unwrap. This is your traditional automatic unwrapping that generates hundreds of small shells, but we have a better way of handling those now.
The game changer for the Auto UV SOP has been the addition of the Merge Small Islands tool into it. Which allows you to weld together all of the smaller disconnected islands. That combined with the new UV Flatten tool, lets you combine shells together and pelt them perfectly.
We’ve heard from a lot of customers that they’re shipping assets that have run through the auto UV tool. Especially if you’re using a Substance Painter or baking workflow, there is very little need for perfectly oriented and placed UVs. As long as there’s minimal distortion (UV Flatten) and efficient UV space (UV Layout) it’s generally good enough to ship. If you’re still painting textures in photoshop with a UV grid overlay, first, I’m sorry, and second, there are a lot of great new workflows that could drastically improve your production.
We still have more work to do on the Auto UV tool, and we have more features coming in the next version of Houdini that will help it a lot. But even as it stands, it’s a HUGE help to artists, even if all you do with Houdini is bring your models in, auto UV them and export them out.
We’ve have a bake texture node in Houdini for quite a while now. But historically it was a bit confusing to work with. There were a lot of settings that were advanced mixed in with settings that you’d want to change per bake, you needed to be pretty familiar with how it all worked to get your bakes out the way you wanted to.
So we decided to make a Games Baker, that sits on top of the Bake Texture node, but looks more like a regular baker like xNormal or Substance, and simplifies a lot of the options.
After that, we built the Simple Baker, that actually lives in the same context as your geometry and simplifies things even more. In the simple baker, you simply wire your high res and game res into the 2 inputs and hit bake. It will run through the bake process, then load the textures back in and apply it on your game res.
The main advantage here is that you’re still in your modelling app, so if you can quickly iterate on your model (high or low) to get cleaner bakes. You can use the GoZ bridge to quickly send the model back and forth or modify your UVs to make sure you’re getting good results.
The other advantage that our baker has is the Rounded Edge feature. A couple of software have this, but very few have the option of baking that to a texture, and even fewer are easy/intuitive to use. This allows you to add a microbevel on your final normal maps based on some threshold defined in your material. It’s great for adding some extra detail on your models without having to carry that extra geo around.
And the final advantage is that Mantra (our renderer) is CPU based, so even if you have very large models, you’re not likely to run out of memory, like you do in GPU based bakers. Even though we’re technically slower than that GPU bakers, we’re still as fast as xNormal, which another CPU baker.
That being said, we are planning on doing integrations with other bakers, like xNormal and Substance so you can use the Simple Baker interface/workflow and still use the baking app you’re familiar with.
Custom Exporters Generation
Even though with Houdini you already have a bunch of exporters ready, you can also create custom ones for different engines. Generating custom exporters is pretty simple. We ship with a python based CSV exporter that has some basics on how to write out a CSV file after looping through the geometry. This was the basis for our Niagara exporter for Unreal 4. So it’s pretty easy for a tech artist to script something together.
Some exporters are also based on regular file formats with some extra python sugar on top. This is the case for the Quixel Bridge, Marmoset and Sketchfab exporters that just write out OBJs and FBXs and then also handle the sending of the data in/out. It’s pretty easy to add integrations to different softwares and as you can see we’re constantly adding more.
If you’re more into C++ you can also add a new file type pretty easily to Houdini, this is how the GoZ plugin is implemented. We simply wrote the translator of GoZ files into Houdini Geometry and the file IO is handled for you in our regular geometry exporters as simply another file format you can choose to export in. This one is slightly more involved, but still relatively easy.
Thanks for reading! I was glad to share some of our work here.