When using Houdini's edit node with physics, default convex decomposition creates collision meshes that fail for complex or rounded shapes; the solution involves creating custom proxy meshes through convex decomposition with reduced max concavity, subdividing geometry with density-based scatter points, and segmenting the mesh using relative point bounding boxes and ramps to create proper collision geometry for RBD simulations.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
Messing with the Edit node in Houdini 22
Added:Hello everyone and welcome. So while I was working on this scene, Audini22 was released. So I had to try to implement something into my workflow for this current scene and I ended up using a lot the edit nodes and found a few problems with it that I was able to solve by investigating a bit and that's what I'm going to share in this video. Hope you enjoy.
So before we jump into the final scene, I wanted to give you a simple example.
So in lops I have been here a subreate where I create this this mesh where I start with a box and created an extrusion in here. Then just set a simple name and some normals. From there I just grafted in here a sphere to my scene. So we end up with this render mesh and with this sphere a component and a lit mesh. Uh what I'm going to do to to do now is to create the edit nodes and show you one issue we will have. So, I'm going to make sure I just translate these up so I can collide it later. And I'm going to select both and add physics physic mode and draw seam geometry. And as you can see, we can see from the green geometry, the seam geometry that we will have an issue. The sphere is fine because this creates by default convex holes and there's no way as far as I can tell to change that. So, this is for performance reasons probably.
And when I drag the sphere in the physics mode, as you can see, this will ramp up and will not collide with this simple wall we have in here. So, I had the same issue in my CD scene that I showed you in the intro. And I'm going to show you now how you can solve this.
Basically, you need to create a proxy mesh. And let's dive again into the subreate. And after the poly extrude, I'm doing a convex decomposition with the following set. Basically, just reducing the max concavity. and we get two different pieces. And I can show you that when I do an exploded view. Then from there, I just delete the name attribute. I don't want two different meshes for the proxy. And then just set the name. I'm I'm calling it proxy mesh.
And I'm going to merge it in. Now we will have one on top of each other. Then I can configure primitive, set the render geometry to the render purpose, and set the proxy geometry to the proxy uh purpose. And now I can iterate over render and proxy as you can see. So, let's leave it at final mesh. And we graph the sphere. And let's just for good measure drop another edit node.
And now let's do the following. Let's select this and this and add physics.
Uh, nope. Let's just grab this and move it up.
Oops. And now we we added a physics. So, physics mode and draw some geometry. And as you can see, now we have the proper collision mesh. And we can drag it against the wall as you can see.
So this is the core idea of u creating custom collision meshes for the edit node in uh lops. So I'm going to walk you through how I created a decent collision mesh for my CDs. So let's actually have a look at the final setup.
So as you can see I start by dragging the different variations I have. So I import the assets and in the variants I I set the different variant.
Uh from there this geometry will be too small. So I I did it uh not to scale but similar enough but it will be too small.
So I'm scaling it up quite a bit. And then I will scale it down to the original size. And in the edit node, as you can see, if we created convex cells, the limit the collision mesh of these open CD will be in here. And I wouldn't be able to drag the CD, as you can see, to this to to this edge in here. So that's why I did some custom collision mesh. So if I enable physics mode, as you can see, my collision mesh is properly set even for rounded shapes, as you can see. And now I'm going to show you how I did it.
So here's my initial mesh. So we have the CD and the case open. And now let's start simple. So in here I just split the case and the CD for the CD symbol. I just use a convex de composition or convex all and it will work fine. But as you can see we lose the all. And in case we want to do the holes, we need to work in a different way. So in the end I didn't use this mesh because this was just adding too much pieces. But that's definitely a way to to do it for RBD and whatnot. And in lops edit note is probably using RBD in the background. So [snorts] just for good measure, I'm going to show you how I did it. So let's say we start with this small piece. I'm going to need some subdivision. So I'm going to subdivide. And then I just create a density attribute that will add more scatter points here on the edges. And then I just scatter based on density, not too many pieces. And do over fracture that will look something like this. So as you can see we have more pieces defining the all in the in the edges as you can see and less in the middle. Then we just do a convex de composition and we get almost a perfect collision mesh that will work well for RBD or the edit nodes in Solaris. And I just did the same for the other part.
But as I was telling you this is just too much for what I needed. So I ended up just using this uh convex de composition simple one. Uh let's see next. Um, in here we have this shape.
And now if I do a convex de composition and as you can see we will have this.
And this will not work when I want to place the CD. If you remember from the final mesh, I placed the CD the CD only on that part of the mesh and it will it will not collide properly because this geometry extends to the to the bounding box. So, this is a bit being nitpicky, but I wanted to go that deep. So, you can actually try to do 0.1. This will take a second.
No, maybe less. 0.03.
And now we get uh a better representation, but still is not is not um a subdivided mesh, a subdivided um a divided mesh. So it doesn't have the the different bounding boxes. The ideal solution would be to have a let's get rid of this name and the UVs. The ideal scenario would be to have a single box in here, another box in here representing the different features of the object. So what I did in the end is create a cluster for each part of the mesh that looks something like this.
This might be a bit too much, but in the end it worked. Okay. And then I can iterate over each cluster and do a convex and we get a perfect representing or segmented geometry. So the way I'm doing that is actually pretty simple. We start with the relative point bounding box which is just uh value representing from 0 to one representing the bounding box of our object. So for y, for x and for z. Then I create a ramp for each axis. In this case I only use x and z.
So I didn't need it to sub to divide the mesh into sections on the Y- axis and we use that ramp. So for example, let me get rid of the Z bucket. And now I'm just taking the X mask, the relative bounding box X component. And uh I'm just positioning where I where I want those cuts as you can see. And I'm doing the same for Z. So let me get rid of this and go to Z. And as you can see, I'm doing the same in here. just positioning where I want. You can subdivide the mesh if needed. So that's it. So I'm just using the positions in here. So I take um the ramp the value of the ramp and multiply it by the different sections I want and round it to an integer. So let me combine now both make sure you add an offset so we don't have clusters uh being equal and then just uh assign it to an attribute.
Then we iterate over each piece, each index piece piece and just do in this case a convex, not even a uh convex de composition. And that's basically how I did for all the pieces. So for example, this one, this one was simpler. I just needed to do one Y to separate the rounded part and then do a convex. And then for this one, since it has this strange shape, I just uh place some points and do a veronoid fracture as you can see and do the convex de composition. And this will be more than enough. I don't even for my final scene I don't even needed this but again I wanted to go deep on this topic that's why I ended up doing all of this. Let's look at this one. This is just a convex hole. This one is again I do I divide it on the Y again using these constant ramps and do two convex holes. And for this one let's see this one ended up being a bit more complicated because I had these floating parts. So I did the same in here divided it into sections but in this case I also include the UI it's the same workflow and yeah that's basically how I've done all the segmentation of the geometry.
Uh this one is just the the CD.
Then we have the segmented geometry. I'm also doing a rig to close out the shape.
You can look uh on Patreon on how I did that. And I then combine the different variations. So the closed, the closed with CD, the open with CD and the CD only. And I merge back and I just uh merge from a different attribute I add to create the name attribute. And the name attribute will be pretty simple. So let's see the name attribute in this case is this one. So it either it starts with the variation then CD and overall name and then if it's the case or the disk. That's basically it.
And then we move into Solaris where I did the setup for creating the asset.
So basically I start with a single primitive. Let's actually do this and go in here. So I start with a single component then create oops then create the scopes. So proxy and render configure the primitives just like we did in the other example. So one for proxy one for render. Then in a for each iterating over each pream in the second input which is the variations of the render geometry and then we have the variations of the proxy geometry. I'm grafting the branches for for the the render geometry and for the proxy and just adding a variant and in the end we can come in here and switch the different variants. So cd closed. So let me actually go to with CD and then open and we can switch also for the proxy. So let me pick another one and pick final render. You can see we have the different variation then export it as an exit as an asset. Then in the final part so I just imported the different assets and position it more or less where I want and then with the edit node I can actually using physics place it when wherever I want. So basically what I do is to for example place this and then in physics mode I can just drag it and place it where I want. So that was basically it.
So another important thing is that if I used the original scale of this scene which is basically really small uh the collision geometry using the proxy. So let me actually go again to this. The collision geometry wouldn't work that well. So I had to scale up the scene as I told you before. And it's pretty simple to do. We just create a simple uh scale matrix. In this case, I created a matrix 4. And then we do USD at transform and use the print path which is the scene which is the which is at the top of the our hierarchy. And then I name it and do it by the X form. Then we do the edit nodes to put everything in place. You can see the difference. this one was intersecting and then we we revert the scale. So we just do the inverse one divided by the scale that we applied. And that's basically how I set all these up. So yeah, that's basically it. I will create a demo scene so I can so you can have a look on your own on Patreon. And yeah, if you enjoyed, please leave a comment and I will see you next time.
Related Videos

TOP 15 Data compression Interview Questions and Answers 2019 Part-2 | Data compression | Wisdom jobs
wisdomjobs
281 views•2019-06-28

CTS 158: 802.11w Management Frame Protection
ClearToSend
4K views•2019-02-04

NDSS 2019 Send Hardest Problems My Way: Probabilistic Path Prioritization for Hybrid Fuzzing
NDSSSymposium
496 views•2019-04-02

How realistic is Cities: Skylines?
CityBeautiful
159K views•2019-02-14

GUIs & TUIs: Choosing a User Interface for Your Python Project | Real Python Podcast
realpython
2K views•2025-04-04

The OSI Model - Explained by Example
hnasr
225K views•2019-05-12

Cloud Computing - Introduction
elithecomputerguy
98K views•2019-10-07

From Traveler's Dilemma to Dynamic Routing | Demystifying Networking
IITBombayJuly
5K views•2019-08-04
Trending

WOW! Judge TURNS THE TABLES on Trump in His OWN $10B LAWSUIT!!!
MeidasTouch
197K views•2026-07-23

Playstation NO DISC/NO BUY Fight Is Over...
DavidJaffeGames
4K views•2026-07-23

Steam and Xbox Just Dropped The Hammer On PlayStation
OhNoItsAlexx
9K views•2026-07-23

Americans Confused in Australia for 17 Minutes Straight
IWrocker
17K views•2026-07-23