Sometimes you need to remove an RBD from a sim completely. Eg, you're using a block to push something and then need it to get out of the way...
Make sure you have a group for it on SOP level. It will probably be a point group, as you're most likely using packed geo.
Now use a SOP solver in your DOP network. Attach it to a multisolver, alongside your Bullet/RBD solver..
Inside the SOP solver, blast the group that you created earlier. Use a switch node or some other timing device (you could use a point wrangle with removepoint I think) to trigger the group's deletion.
Eg. Switch node could use $F>1000. Here it will switch from "all the geo" to "all the geo minus the group" input.
Friday, 12 April 2019
Select a random point from a group each frame
Some code snippets from Walter to use points from a group randomly, for emission (or other things)
In a Detail Attribute Wrangle-
int npts = npoints(0);
float keep = rand(@Time + 235.624) * npts;
i@keep = int(keep);
Every time step, a random point id is chosen as the "keep" point.
Then in a blast, we kill everything but the kept point
`detail(0, "keep", 0)`
Don't forget to invert the blast selection
In a Detail Attribute Wrangle-
int npts = npoints(0);
float keep = rand(@Time + 235.624) * npts;
i@keep = int(keep);
Every time step, a random point id is chosen as the "keep" point.
Then in a blast, we kill everything but the kept point
`detail(0, "keep", 0)`
Don't forget to invert the blast selection
Saturday, 6 April 2019
Bullets solver, setting or changing attributes
Bullet solver is a bit strange in Houdini. It might not update values as you expect. Eg, you're trying to change the @active value using a sop-solver.
One solution is to use the Bullet mode in the RBD Solver. This usually works..But it might be slower? I think it has a multi solver built into it..
Another way to make it work is by utilising a multi solver and the Geometry Wrangle. This will let you access the SOP level stuff (there is an input tab you can mess around with)
So, your input RBD goes into the first input of the multi solver, then your Bullet Solver and any Geo Wrangles go into the purple input of the multi solver..
One solution is to use the Bullet mode in the RBD Solver. This usually works..But it might be slower? I think it has a multi solver built into it..
Another way to make it work is by utilising a multi solver and the Geometry Wrangle. This will let you access the SOP level stuff (there is an input tab you can mess around with)
So, your input RBD goes into the first input of the multi solver, then your Bullet Solver and any Geo Wrangles go into the purple input of the multi solver..
Friday, 5 April 2019
V IS FOR..............
"v" is for RBD and pops.. "vel" is for volumes...
Wednesday, 3 April 2019
match, finding a string in a wrangle. Wildcards.
in Blast nodes you can use wildcards * all over the place
eg. @name=*something
will kill anything with "something" in it's name attribute. It's a little different when you want to select things in this manner in a wrangle. We use the "match" function to do this-
if(match("*stick*",@name)){
s@value="yeah!";
}
Here we look for the string "stick" in the attribute "name". On success, we make "value" equal to "yeah!".
eg. @name=*something
will kill anything with "something" in it's name attribute. It's a little different when you want to select things in this manner in a wrangle. We use the "match" function to do this-
if(match("*stick*",@name)){
s@value="yeah!";
}
Here we look for the string "stick" in the attribute "name". On success, we make "value" equal to "yeah!".
Tuesday, 2 April 2019
separating objects for booleans/other things
Case example - you have a
To separate out an object, maybe for booleaning, or to avoid intersections when doing some other sort of calculation, make a point class attribute (connectivity)
then in a point wrangle do something like this-
@P.x+=@class;
@P.y+=@class;
This should separate the pieces enough. If not, use a multiplier.
Then promote the class to a primitive attribute - for some reason Boolean Fracture doesn't carry across the class attr to any newly generated points when it is left as a point attr.
Do your booleans...you might want to scatter some points on the surfaces or copy some turbulent grids onto the object points.
Bring the class attribute back to point level and then do the reverse transformation
@P.x-=@class;
@P.y-=@class
link any multipliers you might have to save time changing values in multiple boxes!
To separate out an object, maybe for booleaning, or to avoid intersections when doing some other sort of calculation, make a point class attribute (connectivity)
then in a point wrangle do something like this-
@P.x+=@class;
@P.y+=@class;
This should separate the pieces enough. If not, use a multiplier.
Then promote the class to a primitive attribute - for some reason Boolean Fracture doesn't carry across the class attr to any newly generated points when it is left as a point attr.
Do your booleans...you might want to scatter some points on the surfaces or copy some turbulent grids onto the object points.
Bring the class attribute back to point level and then do the reverse transformation
@P.x-=@class;
@P.y-=@class
link any multipliers you might have to save time changing values in multiple boxes!
Saturday, 30 March 2019
constraints between two different objects refresh redux ultra
I've probably made a post about this before. Or I thought I did. .. anyway. I only make notes about things as I actually do them :) Repetition is the key to learning !
If you're trying to create constraints between two different objects, say a bunch of bricks and a big big of plaster wall you have to approach your primitive constraints generation a little differently than usual.
Normally you would put a Connect Adjacent Pieces node down and this would draw lines between your closest points. However if you were to merge the bricks and plaster together and do this, you still end up with lines being generated between brick bits and plaster bits..when all you actually want are the lines exclusively between brick & plaster. Whew.
To achieve this you have to hijack the name attribute of your brick and plaster geometry so that Houdini thinks there are only two names to connect between. Instead of having "brick01,brick02,brick03,plaster01,plaster02,plaster03" you will have "brick,plaster". that's it.
In a Point Wrangle(for packed geo) or a Primitive Wrangle(if you are working with unpacked geo) for each of your objects do something like this -
s@original_name=@name;
s@name="objectA";
where objectA might be "brick", object B might be "plaster". Now merge these two mono-named objects together , promote the name attribute to point level (if it isn't already) and apply the Connect Adjacent Pieces node to them. Now you should only see lines being generated between the two seperate groups of objects. Brick to Plaster. Plaster to Brick.
Finally you must bring back your original name, so use an attribute rename node for this..
Plug your nice sparkly constraints into the rest of your network!
If you're trying to create constraints between two different objects, say a bunch of bricks and a big big of plaster wall you have to approach your primitive constraints generation a little differently than usual.
Normally you would put a Connect Adjacent Pieces node down and this would draw lines between your closest points. However if you were to merge the bricks and plaster together and do this, you still end up with lines being generated between brick bits and plaster bits..when all you actually want are the lines exclusively between brick & plaster. Whew.
To achieve this you have to hijack the name attribute of your brick and plaster geometry so that Houdini thinks there are only two names to connect between. Instead of having "brick01,brick02,brick03,plaster01,plaster02,plaster03" you will have "brick,plaster". that's it.
In a Point Wrangle(for packed geo) or a Primitive Wrangle(if you are working with unpacked geo) for each of your objects do something like this -
s@original_name=@name;
s@name="objectA";
where objectA might be "brick", object B might be "plaster". Now merge these two mono-named objects together , promote the name attribute to point level (if it isn't already) and apply the Connect Adjacent Pieces node to them. Now you should only see lines being generated between the two seperate groups of objects. Brick to Plaster. Plaster to Brick.
Finally you must bring back your original name, so use an attribute rename node for this..
Plug your nice sparkly constraints into the rest of your network!
Subscribe to:
Posts (Atom)