Questions about Houdini Bullet

   30931   21   4
User Avatar
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 :-)
User Avatar
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 ! :?
https://www.youtube.com/c/sadjadrabiee [www.youtube.com]
Rabiee.Sadjad@Gmail.Com
User Avatar
Member
47 posts
Joined: Jan. 2014
Offline
Thanks! :-)

Does that relationship set up work per body? And does it work with packed primitive rbd objects as well?

Also, I didn't see the deforming geometry check box on the rbd packed object. Is that not available for packed primitives? That would be pretty weird.
User Avatar
Staff
4159 posts
Joined: Sept. 2007
Offline
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!

Attachments:
emitted_different_collision_shapes.png (282.6 KB)
animated_static_collider.png (211.3 KB)
animated_packed_prim.png (143.6 KB)
bullet_solutions_for_ben.hip (639.9 KB)

I'm o.d.d.
User Avatar
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!
User Avatar
Staff
4159 posts
Joined: Sept. 2007
Offline
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!
I'm o.d.d.
User Avatar
Staff
727 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.
User Avatar
Staff
4159 posts
Joined: Sept. 2007
Offline
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!

Attachments:
per_prim_compound.hip (225.5 KB)
2014-05-07--1399527755_screenshot.png (193.1 KB)

I'm o.d.d.
User Avatar
Staff
727 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.
User Avatar
Staff
4159 posts
Joined: Sept. 2007
Offline
Oh my goodness, primitive attributes! Thanks so much! This is super cool

Here's a working hip file, for anyone else who's curious.

(thanks for letting me hijack the thread Ben)

Attachments:
per_prim_compound_0508.hip (239.4 KB)

I'm o.d.d.
User Avatar
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!
User Avatar
Staff
727 posts
Joined: Oct. 2012
Offline
Newly emitted objects should work the same way - the intersection check is performed whenever the Bullet solver sees a new object.
User Avatar
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 :-)
User Avatar
Staff
4159 posts
Joined: Sept. 2007
Offline
Re: disappearing Packed Prim anim: inside of the RBD Packed Prim object, you need to toggle on Allow Caching on emptyobject1, then you can see the cached geometry.
I'm o.d.d.
User Avatar
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.
User Avatar
Staff
727 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.
User Avatar
Member
102 posts
Joined: March 2013
Offline
Hi guys
Could I ask more information about collide relationship and nocollider? I just trying to let the box2 only collide with box0, but it don't work. is the setting wrong?
thanks!

Attachments:
no_collider.hipnc (317.3 KB)
setting.jpg (41.5 KB)

User Avatar
Member
102 posts
Joined: March 2013
Offline
Ooops! I just notice the “Make Objects Mutual Affectors”is turn on in Bullet solver, this is why no collision relationship don't work.
User Avatar
Staff
727 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]
User Avatar
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.
  • Quick Links