Questions about Houdini Bullet
31897 21 4- ben-andersen
- Member
- 47 posts
- Joined: Jan. 2014
- Offline
Hi – I'm new to Houdini's bullet implementation and I have some questions about it. Thanks very much for any help :-)
1) If objects begin the simulation penetrating each other, is it possible to turn off collisions between those two bodies until they separate? Other implementations of bullet that I've used can do this, but I'm not sure how to turn this on.
2) How do I make an animated collider? It seems like my options are 100% static or dynamic. I want to pull in transform information for my packed primitives and use them as collision objects.
3) How can I get an animated collision object switch over to being an active dynamic body based on something I've set up in SOPs?
4) Can I have an object become active once it reaches a collision threshold, dynamically? I.e. do I get access to the current impact data and correlate that with which packed primitive to set to active? Inside of the sop solver, the impacts data doesn't seem to give me data that I can correlate to actual packed primitive points for me to set their active state.
5) Speaking of the sop solver, the dop_geometry and relationship_geometry don't seem to be pointing to the right stuff by default? I can't see either one, and they have a warning that says that “relnode” is unknown. What's going on here?
6) I was looking at the tutorial for emitting new teapot geometry into the bullet solver. How can I set the collision mesh type (Bullet Geometry Representation) for newly emitted geometry? Is that always set on the RBD packed object/RBD object? Or can I set it later for new geometry I'm adding to the simulation after the start frame?
Thanks again :-)
1) If objects begin the simulation penetrating each other, is it possible to turn off collisions between those two bodies until they separate? Other implementations of bullet that I've used can do this, but I'm not sure how to turn this on.
2) How do I make an animated collider? It seems like my options are 100% static or dynamic. I want to pull in transform information for my packed primitives and use them as collision objects.
3) How can I get an animated collision object switch over to being an active dynamic body based on something I've set up in SOPs?
4) Can I have an object become active once it reaches a collision threshold, dynamically? I.e. do I get access to the current impact data and correlate that with which packed primitive to set to active? Inside of the sop solver, the impacts data doesn't seem to give me data that I can correlate to actual packed primitive points for me to set their active state.
5) Speaking of the sop solver, the dop_geometry and relationship_geometry don't seem to be pointing to the right stuff by default? I can't see either one, and they have a warning that says that “relnode” is unknown. What's going on here?
6) I was looking at the tutorial for emitting new teapot geometry into the bullet solver. How can I set the collision mesh type (Bullet Geometry Representation) for newly emitted geometry? Is that always set on the RBD packed object/RBD object? Or can I set it later for new geometry I'm adding to the simulation after the start frame?
Thanks again :-)
- Sadjad Rabiee
- Member
- 1391 posts
- Joined: Dec. 2010
- Offline
About your first question ,I think your meant is to use “Collide Relationship” and “No Collider” nodes :?
Just you should append “Collide Relationship” node after your RBD Objects and connect “No Collider” node to subdata of the “Collide Relationship” ,Also you should turn on “Make All Objects Mutual Affectors” option in the “Collide Relationship”.
About your second Q ,Why you don't use simple “Static Object” with turning on “Use Deforming Geometry” option !?
In this case you can collide your animated geometry to each other dynamic objects ! :?
Just you should append “Collide Relationship” node after your RBD Objects and connect “No Collider” node to subdata of the “Collide Relationship” ,Also you should turn on “Make All Objects Mutual Affectors” option in the “Collide Relationship”.
About your second Q ,Why you don't use simple “Static Object” with turning on “Use Deforming Geometry” option !?
In this case you can collide your animated geometry to each other dynamic objects ! :?
- ben-andersen
- Member
- 47 posts
- Joined: Jan. 2014
- Offline
- goldleaf
- Staff
- 4200 posts
- Joined: Sept. 2007
- Online
Hey Ben!
1) Not directly, but you might be able to write a Python DOP to do something for this. The penetration threshold is how much to let object penetrate before resolving the collision, that might be helpful for mid-sim penetrations; but probably not for objects which start out intersecting.
2) I put an example in the hip file
3) These two links should help, the first has an example for keyframe rbd: http://www.sidefx.com/docs/houdini13.0/nodes/dop/rbdkeyactive [sidefx.com] http://www.sidefx.com/docs/houdini13.0/dyno/keyframe [sidefx.com].
4) It's possible, but I can't remember/figure out how to count impacts, since the impacts data is just for the current frame.
5) No idea, sorry
6) There is an example in the hip file for emitting objects of different shapes (it uses the RBD Point Object and the Compound collision type, with BakeODE SOPs on the different collision objects).
The hip file also contains a way to get animated packed pieces; however, I've noticed that once cached, the geometry disappears from my viewport. Just a scene view bug, the collisions are still there. You may not encounter it though
And as for setting which objects collide with which, you can see that in the Affector Matrix. Here is a page with info (missing for H13 for some reason? or it's just move/been renamed):http://www.sidefx.com/docs/houdini11.1/dynamics/relationships [sidefx.com]. You can set relationships different ways, though I haven't yet figured out how to disable specific objects from interacting. Maybe with the Apply Relationship DOP, somehow?
Hope that helps!
1) Not directly, but you might be able to write a Python DOP to do something for this. The penetration threshold is how much to let object penetrate before resolving the collision, that might be helpful for mid-sim penetrations; but probably not for objects which start out intersecting.
2) I put an example in the hip file
3) These two links should help, the first has an example for keyframe rbd: http://www.sidefx.com/docs/houdini13.0/nodes/dop/rbdkeyactive [sidefx.com] http://www.sidefx.com/docs/houdini13.0/dyno/keyframe [sidefx.com].
4) It's possible, but I can't remember/figure out how to count impacts, since the impacts data is just for the current frame.
5) No idea, sorry
6) There is an example in the hip file for emitting objects of different shapes (it uses the RBD Point Object and the Compound collision type, with BakeODE SOPs on the different collision objects).
The hip file also contains a way to get animated packed pieces; however, I've noticed that once cached, the geometry disappears from my viewport. Just a scene view bug, the collisions are still there. You may not encounter it though
And as for setting which objects collide with which, you can see that in the Affector Matrix. Here is a page with info (missing for H13 for some reason? or it's just move/been renamed):http://www.sidefx.com/docs/houdini11.1/dynamics/relationships [sidefx.com]. You can set relationships different ways, though I haven't yet figured out how to disable specific objects from interacting. Maybe with the Apply Relationship DOP, somehow?
Hope that helps!
I'm o.d.d.
- ben-andersen
- Member
- 47 posts
- Joined: Jan. 2014
- Offline
Awesome! Thanks so much, Goldleaf!
1) I heard something about objects getting an automatic glue constraint if they start out intersecting. Do you know if that's true? I suppose that would also be fine. I just don't want things to blow up too much if they're procedurally becoming active, but there are small intersections with the surrounding geometry when it becomes active. Do things normally just explode if they intersect? I'll try it out in the morning, when I'm more awake :-)
2) Thanks! These examples are fantastic! What exactly did you change about the SOP Geometry node that you colored red? All I can see is that Time is set to “Set Always” and SOP Path is set to “Set Initial”. What about that makes animated packed primitives work? Also, I see that weird problem where the geometry disappears when it's cached as well. Ha ha. Weird!
3) I'll check those out. Those look like great resources.
4) I just watched the H13 bullet example again and the last example shows that the force attribute is calculated per piece, and that you can release the constraints based on that attribute. So I can probably get away with just not counting the number of impacts and doing any release based on force (which would probably be better anyway)
6) So the emitter business is using ODE? Not packed primitives and bullet? Is ODE much slower than bullet? I haven't used an ODE solver in about seven years :-)
Thanks again! I really appreciate it!
1) I heard something about objects getting an automatic glue constraint if they start out intersecting. Do you know if that's true? I suppose that would also be fine. I just don't want things to blow up too much if they're procedurally becoming active, but there are small intersections with the surrounding geometry when it becomes active. Do things normally just explode if they intersect? I'll try it out in the morning, when I'm more awake :-)
2) Thanks! These examples are fantastic! What exactly did you change about the SOP Geometry node that you colored red? All I can see is that Time is set to “Set Always” and SOP Path is set to “Set Initial”. What about that makes animated packed primitives work? Also, I see that weird problem where the geometry disappears when it's cached as well. Ha ha. Weird!
3) I'll check those out. Those look like great resources.
4) I just watched the H13 bullet example again and the last example shows that the force attribute is calculated per piece, and that you can release the constraints based on that attribute. So I can probably get away with just not counting the number of impacts and doing any release based on force (which would probably be better anyway)
6) So the emitter business is using ODE? Not packed primitives and bullet? Is ODE much slower than bullet? I haven't used an ODE solver in about seven years :-)
Thanks again! I really appreciate it!
- goldleaf
- Staff
- 4200 posts
- Joined: Sept. 2007
- Online
1) I've never heard of auto-constraints for intersecting objects. Sounds like a different bullet-based solver, as far as I know. derek or cwhite would know for sure I think. The split impulse setting makes resolving intersections move the objects without adding velocity, to avoid explosions. Not that it eliminates them, but its useful (on by default I think).
2) Choosing ‘Set Always’ on the Time node, for some reason, cooks every frame, rather than just the initial frame. Even though the initial value is an expression, I don't think it's updating the Geometry data. But Set Always does. That Set Initial on the SOP Path was an accident, and doesn't do anything since the default is also Set Initial.
I'll file a bug with SESI about the disappearing geometry. Something to do with Packed Prims for sure. Thanks for confirming it!
6) The BakeODE SOP just add attributes for the Bullet and ODE Solvers. It was created when ODE was the only alternate solver to the RBD Solver, for Houdini 10; it was modified to work with Bullet, but has kept the same name. That is confusing though, and I wonder if/when they'll rename it. But yeah, Bullet solver only in the hip file; I did a test a few years ago, when Bullet wasn't part of Houdini, v10, and lots of stacking would cause ODE to explode after a while, while Bullet just kept chugging along. I'd be curious if anyone outside of proprietary studio tools is really using it.
Glad to help!
2) Choosing ‘Set Always’ on the Time node, for some reason, cooks every frame, rather than just the initial frame. Even though the initial value is an expression, I don't think it's updating the Geometry data. But Set Always does. That Set Initial on the SOP Path was an accident, and doesn't do anything since the default is also Set Initial.
I'll file a bug with SESI about the disappearing geometry. Something to do with Packed Prims for sure. Thanks for confirming it!
6) The BakeODE SOP just add attributes for the Bullet and ODE Solvers. It was created when ODE was the only alternate solver to the RBD Solver, for Houdini 10; it was modified to work with Bullet, but has kept the same name. That is confusing though, and I wonder if/when they'll rename it. But yeah, Bullet solver only in the hip file; I did a test a few years ago, when Bullet wasn't part of Houdini, v10, and lots of stacking would cause ODE to explode after a while, while Bullet just kept chugging along. I'd be curious if anyone outside of proprietary studio tools is really using it.
Glad to help!
I'm o.d.d.
- cwhite
- Staff
- 750 posts
- Joined: Oct. 2012
- Offline
1) Since Houdini 12.5, the Bullet solver automatically detects objects that are initially overlapping and prevents them from colliding/exploding until they separate. If you're running into a case where this isn't working, then I'd suggest submitting a bug report [sidefx.com]
6) In Houdini 13, the “Create Convex Hull per Set of Connected Primitives” option is a much easier (and more powerful) way of setting up compound objects for the Bullet solver. It creates a collision shape for each set of connected primitives (using a box/sphere/tube/capsule shape if appropriate, and a convex hull shape otherwise) and then creates a compound collision shape with those child shapes. Unlike the BakeODE SOP, you don't need to do any extra work to set up the input geometry, and it isn't limited to only boxes, spheres, or tubes.
6) In Houdini 13, the “Create Convex Hull per Set of Connected Primitives” option is a much easier (and more powerful) way of setting up compound objects for the Bullet solver. It creates a collision shape for each set of connected primitives (using a box/sphere/tube/capsule shape if appropriate, and a convex hull shape otherwise) and then creates a compound collision shape with those child shapes. Unlike the BakeODE SOP, you don't need to do any extra work to set up the input geometry, and it isn't limited to only boxes, spheres, or tubes.
- goldleaf
- Staff
- 4200 posts
- Joined: Sept. 2007
- Online
Thanks for that info cwhite! Didn't realize that about either of those!
I can't seem to get compound shapes using Convex Hull per Connected Primitive. Do you have an example of how this works? I tried it with spheres, but they just behave as individual spheres. I even added a name attribute for each group of primitives, but it seems I'm missing something…
BTW, the doc page for RBD Packed Object is excellent! As are the examples; very informative! My rbd knowledge is definitely out of date!
I can't seem to get compound shapes using Convex Hull per Connected Primitive. Do you have an example of how this works? I tried it with spheres, but they just behave as individual spheres. I even added a name attribute for each group of primitives, but it seems I'm missing something…
BTW, the doc page for RBD Packed Object is excellent! As are the examples; very informative! My rbd knowledge is definitely out of date!
I'm o.d.d.
- cwhite
- Staff
- 750 posts
- Joined: Oct. 2012
- Offline
The name attribute is important, since each packed primitive is processed separately when creating the compound shapes. You just need a couple modifications to your file:
- The ‘name’ attribute that was set up by the copy1 node should be a primitive attribute, not a point attribute (similar to the output of a voronoi fracture node)
- The “Create Name Attribute” parameter on the Assemble SOP should be disabled, since that will overwrite the ‘name’ primitive attribute based on connectivity (this was part of the reason why you were getting a separate collision shape for each sphere). Normally you wouldn't need to modify this parameter, since the RBD Fractured Object shelf tool automatically disables that parameter if detects a ‘name’ primitive attribute on the geometry.
- The ‘name’ attribute that was set up by the copy1 node should be a primitive attribute, not a point attribute (similar to the output of a voronoi fracture node)
- The “Create Name Attribute” parameter on the Assemble SOP should be disabled, since that will overwrite the ‘name’ primitive attribute based on connectivity (this was part of the reason why you were getting a separate collision shape for each sphere). Normally you wouldn't need to modify this parameter, since the RBD Fractured Object shelf tool automatically disables that parameter if detects a ‘name’ primitive attribute on the geometry.
- goldleaf
- Staff
- 4200 posts
- Joined: Sept. 2007
- Online
- ben-andersen
- Member
- 47 posts
- Joined: Jan. 2014
- Offline
Awesome. I love the compounding.
for 1) Do you know if newly emitted geometry gets the same collision delay treatment as stuff that is in the scene on the first frame? i.e. if I emit geometry that is intersecting already dynamic geometry, will those two bodies still behave nicely?
I'll check out the rbd packed object documentation for that example of animated rbd packed objects :-)
Thanks everyone!
for 1) Do you know if newly emitted geometry gets the same collision delay treatment as stuff that is in the scene on the first frame? i.e. if I emit geometry that is intersecting already dynamic geometry, will those two bodies still behave nicely?
I'll check out the rbd packed object documentation for that example of animated rbd packed objects :-)
Thanks everyone!
- cwhite
- Staff
- 750 posts
- Joined: Oct. 2012
- Offline
- ben-andersen
- Member
- 47 posts
- Joined: Jan. 2014
- Offline
Oh great. That's terrific.
I just got a chance to look at the activate body example on the rbd packed object page, and I see that it's activating them.
So I just tried combining your trick of setting the time attribute on the sop geo object to “set always” to get SOP animation. Unfortunately, setting the packed primitives to active then has all of the new position data overwritten.
Any ideas for how to combine them outside of deleting the animated object and then emitting a new one that is active when the active flag is set? I'm comfortable doing that technically, but it just seems so hacky and untidy :-)
I just got a chance to look at the activate body example on the rbd packed object page, and I see that it's activating them.
So I just tried combining your trick of setting the time attribute on the sop geo object to “set always” to get SOP animation. Unfortunately, setting the packed primitives to active then has all of the new position data overwritten.
Any ideas for how to combine them outside of deleting the animated object and then emitting a new one that is active when the active flag is set? I'm comfortable doing that technically, but it just seems so hacky and untidy :-)
- goldleaf
- Staff
- 4200 posts
- Joined: Sept. 2007
- Online
- Nima
- Member
- 471 posts
- Joined: Nov. 2013
- Offline
hey guys….
in houdini's bullet you need in many case set geometry representation for your object on concave.
in this case you take unstable result in houdini.
i send this problem to side fx support and they tell me to add reverse sop node to fix this problem can anyone explain for me how can i do that?
because i think we can get concave geometry representation with convex hull if we add reverse sop node.
thanks.
in houdini's bullet you need in many case set geometry representation for your object on concave.
in this case you take unstable result in houdini.
i send this problem to side fx support and they tell me to add reverse sop node to fix this problem can anyone explain for me how can i do that?
because i think we can get concave geometry representation with convex hull if we add reverse sop node.
thanks.
- cwhite
- Staff
- 750 posts
- Joined: Oct. 2012
- Offline
If you're using the Concave collision representation, you need to ensure that you have correct face normals on your geometry (in order to e.g. allow the Bullet solver to compute a correct volume for the collision shape). The Reverse SOP is useful if you have a model where the orientation of the polygons is reversed.
- igou
- Member
- 102 posts
- Joined: March 2013
- Offline
- igou
- Member
- 102 posts
- Joined: March 2013
- Offline
- cwhite
- Staff
- 750 posts
- Joined: Oct. 2012
- Offline
Also note that in H14 you can use the ‘collisionignore’ point attribute to filter collisions against specific DOP objects, or against groups of packed primitives based on the ‘collisiongroup’ attribute (these are documented under the Collision Attributes section of https://www.sidefx.com/docs/houdini14.0/nodes/dop/rbdpackedobject) [sidefx.com]
- wlvl
- Member
- 23 posts
- Joined: July 2015
- Offline
Hi!
I'd like to use the collisionignore pt attribute to select what object my collider should affect, but im not sure how to set it up in DOP! ops: I couldn't find any application example online.
Im doing a building destruction, i have a main collider that destroy everything, i want a second collider to impact only on certain RBD packed objects.
Thanks so much for helping!!
I'm new to houdini. I love it. Using H_14.0.361.
I'd like to use the collisionignore pt attribute to select what object my collider should affect, but im not sure how to set it up in DOP! ops: I couldn't find any application example online.
Im doing a building destruction, i have a main collider that destroy everything, i want a second collider to impact only on certain RBD packed objects.
Thanks so much for helping!!
I'm new to houdini. I love it. Using H_14.0.361.
-
- Quick Links