RBD Bullet Solver Collider Initial Velocity Start Frame

   3943   5   1
User Avatar
Member
27 posts
Joined: April 2020
Offline
Hello,

Using rbdbulletsolver with multiple colliders that each have different initial velocities and different start frames. So one collider drops down into a floor at a certain frame and another shoots up from below at a different frame.

Keyframing the Active to Add Velocity from 0-x in a PointVeloicty node on the collider doest seem to work. Looks like everything is evaluated at Frame 1 and everything else is ignored for velocity.

Im assuming the velocity needs to be set in a wrangle inside the solver, but dont know a way to specify each collider with a wrangle inside the solver.

Any ideas?
User Avatar
Member
2657 posts
Joined: June 2008
Offline
Have you set your collider to a deforming object? Even if the topology is not deforming, a collider in motion is considered deforming. Also, check the Inherit Transform box if you have animated the collider at the top level transform.
Edited by Enivob - Aug. 9, 2023 15:24:42
Using Houdini Indie 20.5
Windows 11 64GB Ryzen 16 core.
nVidia 3060RTX 12BG RAM.
User Avatar
Staff
443 posts
Joined: Feb. 2008
Offline
The RBD Bullet Solver provides a handy way to know when an object has been activated for cases like this, so you don't need to make non-deforming RBDs deforming to avoid unnecessary costs.
In the Output tab, under Attributes, enable the Age Attribute, enable the Add Active Age, give the Just Activated group a name. Dive inside the RBD Bullet Solver and add a geometry wrangle, set its group to use the just activated group and read the velocity from the first input's corresponding point.

Here's a hipfile that shows this in action.

Attachments:
JustActivated.hip (561.4 KB)

User Avatar
Member
2657 posts
Joined: June 2008
Offline
That's nice, kind of like a C4D effector type approach.

It also looks like you can directly assign packed primitives to the __static_grp for more precise control on any given frame.
if(@ptnum==5){
    // Make cube six jump on frame 48.
    if(@Frame>=48){
        i@group___static_grp = 1;
    }
}
Edited by Enivob - Aug. 11, 2023 09:04:52

Attachments:
rbd_vel_activate.gif (30.1 KB)
ap_sidefx_rbd_group_activated.hiplc (563.2 KB)

Using Houdini Indie 20.5
Windows 11 64GB Ryzen 16 core.
nVidia 3060RTX 12BG RAM.
User Avatar
Member
9236 posts
Joined: July 2007
Online
Enivob
I also looks like you can directly assign packed primitives to the __static_grp for more precise control on any given frame.
you could as long as you make sure that on Rbdconfigure Active is checked and set to 1 and it's Bounds is checked
(and as long as you are aware what are the internal implications of using __static_grp)

less confusing and more direct way would be to directly set i@active = 1 yourself and either uncheck it in rbd configure
or just use such wrangle below Rbdconfigure to override specific pieces from their configured value
Edited by tamte - Aug. 10, 2023 12:01:50
Tomas Slancik
CG Supervisor
Framestore, NY
User Avatar
Member
27 posts
Joined: April 2020
Offline
Thanks everyone.

I actually got it to work using attribute wrangles on each collider object with i@active = @Frame >= xx; and setting their rbdconfig to active=0 and animated =1
  • Quick Links