When you create a shelf-tool Pyro effect such as “billowy smoke” where is the shader? According to the help docs on http://www.sidefx.com/docs/houdini12.0/nodes/shop/pyro [sidefx.com] it says that “ (The tools on the Pyro FX shelf tab apply customized Pyro materials to the simulations they create with the proper settings already turned on.) ”
However the shop network is empty when I looked, so it's not really clear to me where it is. Kind of a noob question, but any help here would be appreciated. Thanks!
Found 21 posts.
Search results Show results as topic list.
Houdini Indie and Apprentice » Where is the h12 pyrofx shader?
- mattv
- 21 posts
- Offline
Houdini Lounge » mesure angle between 3 points
- mattv
- 21 posts
- Offline
I'm not really a math guy, so here's my artists explanation.
The first thing you want to do is get the two vectors that form the edges of the angle you are measuring. A vector can be found by subtracting one points position from another one. The direction the vector is pointing is dependent on the subtraction order of operations. So for example:
A - B points from B to A.
B - A points from A to B.
When doing this for points in 3D space you need to subtract all of the X/Y/Z positions to get a 3D vector. So that looks like this:
Bx - Ax
By - Ay
Bz - Az
Then you make a vector out of those 3 floats. This is pretty easy in Houdini because you can add a float vector 3 parameter to just about any node. After this you can plug in these vectors into the formula above. You have to account for Houdini's syntax which can be a little weird, so I've attached an example .hip file where I'm finding the angle between the edges 0->1 and 0->2
Here is some explanation of the syntax used in my example. Look at the “measure_angle” node to see the values and formulas.
point(“../single_triangle”, 1, “P”, 0) - point(“../single_triangle”, 0, “P”, 0)
This subtracts the X position of point 1 from the X position of point 0. You can read more about point() here http://www.sidefx.com/docs/houdini12.0/expressions/point [sidefx.com]. I do this for X, Y and Z in my example to get the vectors from 0->1 and 0->2.
acos(dot(normalize(vector3(ch(“vec_p0_p1x”), ch(“vec_p0_p1y”), ch(“vec_p0_p1z”))), normalize(vector3(ch(“vec_p0_p2x”), ch(“vec_p0_p2y”), ch(“vec_p0_p2z”)))))
This looks like a lot, but what I've done is what sanostol posted above, acos(dot(v1, v2)) where v1 and v2 are normalized vectors. I'm referencing the channels where I stored the output of the vectors to make the expression smaller and easier to read.
The first thing you want to do is get the two vectors that form the edges of the angle you are measuring. A vector can be found by subtracting one points position from another one. The direction the vector is pointing is dependent on the subtraction order of operations. So for example:
A - B points from B to A.
B - A points from A to B.
When doing this for points in 3D space you need to subtract all of the X/Y/Z positions to get a 3D vector. So that looks like this:
Bx - Ax
By - Ay
Bz - Az
Then you make a vector out of those 3 floats. This is pretty easy in Houdini because you can add a float vector 3 parameter to just about any node. After this you can plug in these vectors into the formula above. You have to account for Houdini's syntax which can be a little weird, so I've attached an example .hip file where I'm finding the angle between the edges 0->1 and 0->2
Here is some explanation of the syntax used in my example. Look at the “measure_angle” node to see the values and formulas.
point(“../single_triangle”, 1, “P”, 0) - point(“../single_triangle”, 0, “P”, 0)
This subtracts the X position of point 1 from the X position of point 0. You can read more about point() here http://www.sidefx.com/docs/houdini12.0/expressions/point [sidefx.com]. I do this for X, Y and Z in my example to get the vectors from 0->1 and 0->2.
acos(dot(normalize(vector3(ch(“vec_p0_p1x”), ch(“vec_p0_p1y”), ch(“vec_p0_p1z”))), normalize(vector3(ch(“vec_p0_p2x”), ch(“vec_p0_p2y”), ch(“vec_p0_p2z”)))))
This looks like a lot, but what I've done is what sanostol posted above, acos(dot(v1, v2)) where v1 and v2 are normalized vectors. I'm referencing the channels where I stored the output of the vectors to make the expression smaller and easier to read.
Edited by - Jan. 4, 2013 18:38:11
Houdini Lounge » Wood Splinter
- mattv
- 21 posts
- Offline
sl0throp
While you can find sequence importers for both .bgeo and .obj for Maya it is slow and clunky- a much better option would be to use .FBX or Alembic which works really well in most cases. You should use an attributePromote to promote your points to vertices with a facetSop to give the geometry good normals. You can change your normals in Maya but usually have to unlock them.
If your mesh came in from Maya originally though, I'm guessing a facetSop is going to mess up all the original normals, correct?
Technical Discussion » custom detail attribute display
- mattv
- 21 posts
- Offline
It appears you can set custom attribute displays for point, vertex and primitive but not detail. Am I missing something?
I'd really like a way to simply place a label of the group name over top of a piece of grouped geometry. The closest I can get is using the group name on primitives, but that can be really messy on a dense mesh. I know that meshes can be in multiple groups, but for my specific cases that will not happen.
Thanks in advance!
I'd really like a way to simply place a label of the group name over top of a piece of grouped geometry. The closest I can get is using the group name on primitives, but that can be really messy on a dense mesh. I know that meshes can be in multiple groups, but for my specific cases that will not happen.
Thanks in advance!
Houdini Lounge » Otl scan Path
- mattv
- 21 posts
- Offline
soooooooooo, 10 seconds after I posted my message I found a thread that solved my problem.
Heres the solution if anyone looks for this in the future, found from this thread: http://www.sidefx.com/index.php?option=com_forum&Itemid=172&page=viewtopic&t=11496&sid=5791fadd3eb15a67cee447196260a0ad [sidefx.com]
I had to add a reference to the default OTLs in order to avoid the error, so
HOUDINI_OTLSCAN_PATH = “$HSITE/otls;&”
becomes
HOUDINI_OTLSCAN_PATH = “$HSITE/otls;&;$HFS/houdini/otls”
Heres the solution if anyone looks for this in the future, found from this thread: http://www.sidefx.com/index.php?option=com_forum&Itemid=172&page=viewtopic&t=11496&sid=5791fadd3eb15a67cee447196260a0ad [sidefx.com]
I had to add a reference to the default OTLs in order to avoid the error, so
HOUDINI_OTLSCAN_PATH = “$HSITE/otls;&”
becomes
HOUDINI_OTLSCAN_PATH = “$HSITE/otls;&;$HFS/houdini/otls”
Houdini Lounge » Otl scan Path
- mattv
- 21 posts
- Offline
Interestingly enough, I get the same bad operator type errors on startup of Houdini but my OTLs are working correctly and the HOUDINI_OTLSCAN_PATH is showing correctly in shell. Not sure why, I guess something with Windows that I can ignore?
error:
Warning: Bad operator type when binding handles: Object/path
Warning: Bad operator type when binding handles: Object/pathcv
Warning: Bad operator type when binding handles: Sop/platonic
Warning: Bad operator type when binding handles: Cop2/emboss
Windows environment variable:
HOME > Epath/to/project/
houdini.env file:
SITE = “Epath/to/project/houdini12.0”
JOB = “$HSITE/files”
HOUDINI_OTLSCAN_PATH = “$HSITE/otls;&”
error:
Warning: Bad operator type when binding handles: Object/path
Warning: Bad operator type when binding handles: Object/pathcv
Warning: Bad operator type when binding handles: Sop/platonic
Warning: Bad operator type when binding handles: Cop2/emboss
Windows environment variable:
HOME > Epath/to/project/
houdini.env file:
SITE = “Epath/to/project/houdini12.0”
JOB = “$HSITE/files”
HOUDINI_OTLSCAN_PATH = “$HSITE/otls;&”
Technical Discussion » Procedurally fuse pairs of points
- mattv
- 21 posts
- Offline
Awesome! Many thanks, I think this will do the trick perfectly. Some useful expressions I didn't know yet. Thanks again.
Technical Discussion » Procedurally fuse pairs of points
- mattv
- 21 posts
- Offline
I'm looking to find a way to take a polygon and fuse pairs of verts on the mesh based upon their unique point attributes. It's unfortunately not as simple as fusing all points with a value over X, it's fusing unique pairs of verts without leaving holes in my polygon.
It's easy enough to do manually but I'm having trouble wrapping my head around ways to do it procedurally, since the input polygon could have multiple unique pairs. I'll want to find a way to skip points that have the ‘fuse’ attribute set to 0 as well.
Does anyone have any tips for this? Thanks much in advance!
It's easy enough to do manually but I'm having trouble wrapping my head around ways to do it procedurally, since the input polygon could have multiple unique pairs. I'll want to find a way to skip points that have the ‘fuse’ attribute set to 0 as well.
Does anyone have any tips for this? Thanks much in advance!
Technical Discussion » Select objects by material
- mattv
- 21 posts
- Offline
Seems like you could look at the shop_materialpath primitive attribute and do a string comparison? Group the geometry using an expression to select all primitives that match the correct string pattern?
http://www.sidefx.com/docs/houdini12.0/expressions/strcasematch [sidefx.com]
http://www.sidefx.com/docs/houdini12.0/expressions/strcasematch [sidefx.com]
Technical Discussion » procedural cleanup degenerate primitives
- mattv
- 21 posts
- Offline
Thanks Edward, that makes sense. I should have actually looked inside the clean sop to see what was going on, didn't occur to me that they would be using different thresholds to delete degenerate prims.
Thanks Ndickson, that's a pretty cool trick. May or may not use that for exactly this, but I'm filing it away for future use!
Thanks Ndickson, that's a pretty cool trick. May or may not use that for exactly this, but I'm filing it away for future use!
Technical Discussion » procedural cleanup degenerate primitives
- mattv
- 21 posts
- Offline
Yeap, I've been using the clean sop to remove the degenerate primitives but that's really only part of the problem. If I remake the degen prims with a divide SOP, the new prim is still degenerate.
I've looked at polydoctor but I'm unsure how to use it to help with degenerate prims specifically. It doesn't act the same as Clean as far as I can tell. By that I mean if I use a Clean SOP it removes a triangle from my example but if I use Polydoctor and have it set to “Mark Ill-Formed” it does not mark the triangle that Clean removes.
So apparently Polydoctor does not believe that same triangle to be ‘ill-formed.’ So I'm a little confused there.
I've looked at polydoctor but I'm unsure how to use it to help with degenerate prims specifically. It doesn't act the same as Clean as far as I can tell. By that I mean if I use a Clean SOP it removes a triangle from my example but if I use Polydoctor and have it set to “Mark Ill-Formed” it does not mark the triangle that Clean removes.
So apparently Polydoctor does not believe that same triangle to be ‘ill-formed.’ So I'm a little confused there.
Technical Discussion » procedural cleanup degenerate primitives
- mattv
- 21 posts
- Offline
So I've been working through some SOPs to procedurally cleanup low polygon collision meshes that need to remain convex and cannot have degenerate prims. This kind of work could be done manually, but for my purposes I'm also generating the collision meshes procedurally so I'm trying to automate everything.
I have an example file I wouldn't mind some feedback on. I have a generated mesh where one triangle was degenerate, so my thinking was that I should procedurally merge the shortest edge of that triangle to collapse the triangle into the overall mesh. Because this is a low-poly collision mesh, losing a triangle like this isn't really a big deal for my application. I was able to figure out a way to do it with expressions and SOPs but it seems overly complex and messy. There has to be a better way than how I did it. I'm still fairly new at this and it seems like I took a sledgehammer to a simple issue. Any feedback is appreciated. Thanks!
I have an example file I wouldn't mind some feedback on. I have a generated mesh where one triangle was degenerate, so my thinking was that I should procedurally merge the shortest edge of that triangle to collapse the triangle into the overall mesh. Because this is a low-poly collision mesh, losing a triangle like this isn't really a big deal for my application. I was able to figure out a way to do it with expressions and SOPs but it seems overly complex and messy. There has to be a better way than how I did it. I'm still fairly new at this and it seems like I took a sledgehammer to a simple issue. Any feedback is appreciated. Thanks!
Houdini Lounge » Gaps in Voronoi output
- mattv
- 21 posts
- Offline
Thanks man, that is very helpful feedback. One point I'm a little unclear on is “With some increase in the fuse points parameter in the fracture sop.”
Where in the fracture sop is there a setting for fuse points? Is this a custom tool you are referring to? I don't see anything for this in the standard voronoi fracture sop. It's weird because I see fuse points as a setting I can alter on the help docs: http://www.sidefx.com/docs/houdini12.0/nodes/sop/voronoifracture [sidefx.com] - but this parameter is missing from my voronoi sop in Houdini12. Was this removed?
Where in the fracture sop is there a setting for fuse points? Is this a custom tool you are referring to? I don't see anything for this in the standard voronoi fracture sop. It's weird because I see fuse points as a setting I can alter on the help docs: http://www.sidefx.com/docs/houdini12.0/nodes/sop/voronoifracture [sidefx.com] - but this parameter is missing from my voronoi sop in Houdini12. Was this removed?
Houdini Lounge » Gaps in Voronoi output
- mattv
- 21 posts
- Offline
Just realized I should have posted this in the technical forum. If any mods see this can you kindly move this post? Might stand a better chance getting answered there, my mistake!
Houdini Lounge » Gaps in Voronoi output
- mattv
- 21 posts
- Offline
Does anyone have any tips or tricks to help with gaps in Voronoi mesh output? I have an example file, made in Maya originally as a cylinder with some twist and flare deformers added.
Not all meshes give me this problem, seems like most are fine but a few troublesome tests like this make me want to really figure out what is going on before I try to fracture a bunch of content!
I disabled creation of interior surfaces so it was easier to debug. Anyone have any ideas or solutions?
Thanks,
-Matt
Not all meshes give me this problem, seems like most are fine but a few troublesome tests like this make me want to really figure out what is going on before I try to fracture a bunch of content!
I disabled creation of interior surfaces so it was easier to debug. Anyone have any ideas or solutions?
Thanks,
-Matt
Technical Discussion » Piece* rename merging
- mattv
- 21 posts
- Offline
Ah hah, my hero. I had actually tried FORIDXVALUE but I used “0” and my path was “..” still.
Thanks again!
Thanks again!
Technical Discussion » Piece* rename merging
- mattv
- 21 posts
- Offline
Hmmm, I'm actually still super confused. I thought I had it because the first entry in my multiparm asset works with what you said. As I add more values to my multiparm, it only works for the “0” case.
It seems to me that instead of hardcoding “+0” I need to access the FORVALUE to add in a number. I've tried the following without much success:
chs(“../../attrib_name_group1” + stamp(“..”, “FORVALUE”,0))
chs(“../../attrib_name_string1” + stamp(“..”, “FORVALUE”,0))
I can't figure out how to access the FORVALUE integer from within my foreach. I want to iterate over specific groups so I've set the FOR mode to be ‘each group’ and the group mask to be piece*. Seems like this should be super simple. If I add 3 elements to my multi parm I should have channels ‘attrib_name_group10’, ‘attrib_name_group11’, ‘attrib_name_group12’. I should also have similar variants for my string.
Not sure why stamping the FORVALUE doesn't seem to build those channel names. Seems like it can't access the actual value because when I change the default from 0 to something like 1 or 2, it changes which of my multiparm assets work, which tells me that its falling back to the default.
It seems to me that instead of hardcoding “+0” I need to access the FORVALUE to add in a number. I've tried the following without much success:
chs(“../../attrib_name_group1” + stamp(“..”, “FORVALUE”,0))
chs(“../../attrib_name_string1” + stamp(“..”, “FORVALUE”,0))
I can't figure out how to access the FORVALUE integer from within my foreach. I want to iterate over specific groups so I've set the FOR mode to be ‘each group’ and the group mask to be piece*. Seems like this should be super simple. If I add 3 elements to my multi parm I should have channels ‘attrib_name_group10’, ‘attrib_name_group11’, ‘attrib_name_group12’. I should also have similar variants for my string.
Not sure why stamping the FORVALUE doesn't seem to build those channel names. Seems like it can't access the actual value because when I change the default from 0 to something like 1 or 2, it changes which of my multiparm assets work, which tells me that its falling back to the default.
Technical Discussion » Piece* rename merging
- mattv
- 21 posts
- Offline
Awesome, thank you very much for that thorough explanation! I understand better now whats going on.
-edit- Nope, using foreach nodes still is kicking my butt.
-edit- Nope, using foreach nodes still is kicking my butt.
Edited by - May 3, 2012 20:19:49
Technical Discussion » Piece* rename merging
- mattv
- 21 posts
- Offline
Hey all,
I'm trying to selectively rename pieces from a voronoi fracture so that they essentially get merged into the same piece. The way I'm going about it is to create a new attribute called ‘name’ and setting the value of input pieces to an existing piece name.
Example: voronoi fracture has 3 pieces: {piece0, piece1, piece2}. I want to rename all of the primitives from piece1 to be piece2, while keeping the existing piece2 primitives. The result of this should be that I now have two fracture pieces, one named ‘piece0’ and another named ‘piece2.’
I'm running into trouble getting it to work in an OTL foreach loop and I'm not sure why. When I manually set the groups to rename it works flawlessly, but when I use a multiparm block OTL and some opdigits(stamps, forvalue) trickery to pass the correct strings in, it doesn't work. It's weird in that when you hit the parameter name to hide the expression and show the result, the resulting strings are correct, they just aren't renaming the pieces.
Best way to understand what I'm trying to do and where its failing is to look at the attached example. Any and all help is appreciated!
I'm trying to selectively rename pieces from a voronoi fracture so that they essentially get merged into the same piece. The way I'm going about it is to create a new attribute called ‘name’ and setting the value of input pieces to an existing piece name.
Example: voronoi fracture has 3 pieces: {piece0, piece1, piece2}. I want to rename all of the primitives from piece1 to be piece2, while keeping the existing piece2 primitives. The result of this should be that I now have two fracture pieces, one named ‘piece0’ and another named ‘piece2.’
I'm running into trouble getting it to work in an OTL foreach loop and I'm not sure why. When I manually set the groups to rename it works flawlessly, but when I use a multiparm block OTL and some opdigits(stamps, forvalue) trickery to pass the correct strings in, it doesn't work. It's weird in that when you hit the parameter name to hide the expression and show the result, the resulting strings are correct, they just aren't renaming the pieces.
Best way to understand what I'm trying to do and where its failing is to look at the attached example. Any and all help is appreciated!
Technical Discussion » Strange RBD problem
- mattv
- 21 posts
- Offline
I've only been working with this stuff for a couple months now but from my experience you're best off using RBD solver for this sort of thing. I think with the way you have a complex static object shape with “WallOuter”, you're going to have trouble with physics data on the object. Lots of convex shapes, etc)
The other reason you'll want to use the RBD solver is that I'm pretty sure that Bullet ignores magnet forces to break glue bonds. If you are ‘seeing it working’ with magnets, most likely what is happening is the bonds are breaking from the Bullet solver's split impulse parameter, which seems to pop things out and THEN the magnet is pushing the objects around.
Again, not the most knowledgeable, someone else might have more insight here.
The other reason you'll want to use the RBD solver is that I'm pretty sure that Bullet ignores magnet forces to break glue bonds. If you are ‘seeing it working’ with magnets, most likely what is happening is the bonds are breaking from the Bullet solver's split impulse parameter, which seems to pop things out and THEN the magnet is pushing the objects around.
Again, not the most knowledgeable, someone else might have more insight here.
-
- Quick Links