Log into your account to keep track of your progress. You can work through the lessons without logging in but your progress will be lost when you refresh the page.

The Stacking tool makes it possible to quickly populate your environment with stacked objects. In this lesson, learn how to create an asset stacker that can scan your scene then pack the chosen assets into a predefined volume. Learn how to work with Unreal’s data tables, use Houdini’s UV packer for geometry, set up vertical stacking with feedback loops and add in simulation to settle the assets.

Project Titan is an in-house tech demo designed to production test Houdini's procedural workflows while creating a 3D environment that leverages the latest technologies in Unreal. Click Here to learn more.



Thomas is a Sr Technical Artist at Unity Technologies. His goal is to smooth out art pipelines and create seamless transitions between DCC's with Houdini tools.

More from Thomas Tobin


  • ztyqaz111 2 years ago  | 

    Great job!

  • 360482208 2 years ago  | 

    Nice!!!!Great job!

  • paveltsyupra 2 years ago  | 

    Awesome tutorial!
    Thank you

  • Ferdinand13 1 year, 11 months ago  | 

    Hi Thomas, thanks for the tutorial. Super-basic question though, which version of Unreal and Houdini (that includes the version of Houdini Engine) are you using for this? As far as I can tell this is UE5, but there doesn't seem to be an official release for Hengine for that one yet. Or am I mistaken? On the GitHub repository, all I can find is Houdini 18.5 versions for UE5. Just want to make sure, I know what's going on :-)

    • Thomastobin 1 year, 11 months ago  | 

      Yep. 18.5 and UE5 from the github repo.

  • Danila479 1 year, 11 months ago  | 

    Hello. How was HDA configured and how to put the path to the data table (0:44)?

  • tewilson 1 year, 11 months ago  | 

    Hello How Do you Reference the data table you mention very early in the videos?

    • Thomastobin 1 year, 11 months ago  | 

      You can use an object merge and expose that for the HDA, in unreal you just have to select data table as the data type to merge in.

      • mackinder 1 year, 10 months ago  | 

        Whenever I try to expose this in houdini it doesn't show up in Unreal/save properly. I edit the parameter interface for the HDA network, drag the Object Merge node into the 'Existing Parameters' under root, and rename 'group' to 'Data Table In'. But despite the cook notification, nothing appears in Unreal. If I resave the HDA in houdini and unlock it again, the alterations in the parameter interface are no longer there either. Are you able to break down this part any more? Despite using houdini for a while I'm new to HDAs. Thanks!

        • mackinder 1 year, 10 months ago  | 

          You can ignore this. A little while spent going over the HDA documents on this site helped a lot.

  • KieranLatham 1 year, 11 months ago  | 

    Has anybody else ran into an issue with Unreal Engine 4/5 crashing when you assign a data table to a HDA?

    Has anybody found a workaround?

    • KieranLatham 1 year, 11 months ago  | 

      For the time being, i'm just exporting the data table as a CSV and importing it using a "Table Import" node, which works pretty well for the time being. Seems to do the job.

      • Thomastobin 1 year, 11 months ago  | 

        Never seen this before but good workaround.

        • KieranLatham 1 year, 11 months ago  | 

          What's interesting as well, is if you export as csv, it actually omits the unreal_data_table string you have to remove from the attribute when you load it in via HDA, so you don't need to rename the attribute!

        • KieranLatham 1 year, 11 months ago  | 

          Enjoying the tutorial by the way! really interesting stuff, especially using the UV layout tool to scatter based on the island!

        • aits 1 year, 10 months ago  | 

          I'm also getting the crash when assigning a data table to the HDA in unreal.
          I'm currently in UE5 early access build 5.1.0.
          Houdini version 19.0.498

  • mackinder 1 year, 10 months ago  | 

    You can ignore this. A little while spent going over the HDA documents on this site helped a lot.

  • metalman123456123 1 year, 9 months ago  | 

    Is there a point where you show how to use the tool in unreal? I built the tool but no idea how to use it in unreal

  • metalman123456123 1 year, 9 months ago  | 

    Ya Im really struggling with this one I have followed this exactly and even downloaded the tool it just doesnt seem to work it processes the data table then doesnt scatter anything

  • metalman123456123 1 year, 9 months ago  | 

    Ok now after I shut unreal down the tool is kind of working accept its putting all of the actors upside down, I downloaded this one off the tutorial so I have no idea whats going on with it

  • Zieba90 1 year, 7 months ago  | 

    How to expose data table from unreal to the HDA? Maybe for sr tech this is simple, but when some newbie is trying to follow steps on tutorial and fails in very first thing is really stupid and frustrating.

  • Alphaivan 1 year, 7 months ago  | 

    Maybe this tutorial can be a little more detailed, especially the beginning part feels like a lot of things are missing, which confuses me. I created a Table in Unreal, but there are only points in Houdini, no points data, I don't know what happened.

  • solodev 1 year, 6 months ago  | 

    Odd. So I'm very close. I have a cloud of points going to the output, and in the geometry spreadsheet its got attributes for position, pscale, orient, and unreal instance, I even made sure to include unreal_object_path just in case I needed that one too, though it had no effect. So, it makes sense that those are the only attributes I'd need, but in Unreal it's just not picking up on that instance attribute. I've even double checked the asset paths in unreal to make sure they're still valid. In the sidefx documentation on instancing in unreal via attribute there's a note:
    "In order to be detected properly, attribute instancers need to be in a separate Part of the Geometry. Attribute instancer won't be detected if the points that they are assigned to is part of the main geometry."
    I find this pretty confusing and not very specifically spelled out, but I've got a hunch that this is where my problem lies.

    • solodev 1 year, 6 months ago  | 

      I fixed it, way back in the beginning when renaming the data table attributes, I capitalized "Unreal_Instance" and so that attribute stayed like that all the way to the end and the engine plugin just didn't pick up on that. So I switched it to all lowercase, and also made that switch on the clean node as well to keep the attribute and it works like a charm. now. So note to all, that unreal_instance attribute is definitely case sensitive.

  • solodev 1 year, 6 months ago  | 

    So I noticed something interesting after adding simulation in, and it looks like you can actually see it in the video too at around 8:20. For some reason after simulating, the "center low" code starts acting funny, where the point it produces doesn't match up to the actual geometry, so the proxy geometry is totally fine, its just the point cloud thats getting output by the tool gets messed up. Further, in unreal, while having the houdini geometry, (that ordinarily gets blasted away after making the point) still visible and kinda overlaid over the instances, I noticed the rotation was way off too. I did three things to fix this, I went back to the RBD solver and set it to NOT output the orient value, for some strange reason this fixed the rotation issue, then I went back to that center low code and basically made it to where it made a point in the absolute center of the geometry and not even trying to aim for the "bottom", by setting the y component of that combo vector to the y component of the center vector, just like the other 2 components there. Now that I have a point cloud that tells me where the center of each instance is supposed to be, I then had to go into unreal and adjust my actual meshes to where the local origin was in the center of the mesh, all I did was go into the import transform and subtract half of the height of the mesh from the translate z, then reimported the content. After all of that, the instances match up perfectly with the geometry seen in houdini's viewport and theres no more cases where things appear to be clipping through other things.

  • alessioV 1 year, 6 months ago  | 

    In the lesson n. 4 "Add Support for Data Tables" of PROJECT TITAN BUILDING TOOL (https://www.sidefx.com/tutorials/project-titan-building-tool/) it's explains in detail how to connect data tables from unreal to houdini

  • Jack_Carlisle 1 year, 4 months ago  | 

    It seems the partition node has been removed from the lastest version of Houdini. Does any one know a work around in the for loop?

    • Lumanron 1 year, 4 months ago  | 

      you can create a string attribute with vex (use the "sprintf" function) and then convert it to groups using the "groups from name node", that should do the same than partition node.

  • zildjian278 6 months, 2 weeks ago  | 

    To fix some of the issues I ran into, I ended up just remaking the rbd solver in a new dop net. The orient was being applied twice because the rbd packed input object was reapplying the pscale and orient that we had transferred over. I deleted the orient before the copy to points (it will look incorrect), and then transferring the attribute before sending it to the RBD sim. This allows for the RBDpackedobject to do whatever it does with an orient attribute.

    Also instead of using the partition node, I used a wrangle with a relpointbbox that takes the top % of the tops to build on top of. However, in order for that to stack properly you need to make sure it only runs over the most recent feedback iteration, so I used the meta import node to create an attribute and then check it right after the split node and delete what wasn't from the most recent feedback iteration.

    For the ending point cloud, I converted orient to N&up, then pushed the point along the Up axis by height *pscale.

Please log in to leave a comment.