stevegh Posted February 12, 2013 Share Posted February 12, 2013 Hey guys! I've been lurking for quite some time soaking up all the wonderful Houdini knowledge you all have posted, so I'll start with a huge thanks that you all exist. Now my question: How can I have a SOP's effect be based off of a custom point attribute? Say I have a grid, and a sphere->isooffset->vop sop hooked up to store an attribute called "sel" as 1 if the grid point is inside the sphere and 0 if out. I can easily view this attribute in a point sop and I can use it in other vop sops to drive vex effects. BUT, how can I use this attribute in factory nodes to drive those effects? I have tried a few things with limited or no success. First I can obviously use the @sel>0 group expression in some sops, but not all seem to work (mountain sop works fine but facet sop doesn't). Second I tried writing a custom expression to loop through all the points on the incoming geometry string loopPoints(){string result = "";for (i = 0; i < (npoints(opinputpath(".", 0))); i++){ result = i; return result;}}[/CODE]with the point function:[CODE]point(opinputpath(".", 0), loopPoints(), "sel", 0)[/CODE]in the 'magnitude' paramter of a given sop (ie the height paramter of a mountain sop), but this doesn't do anything, though there is no error. Also the reason I would prefer to do it this way vs a point/primitive group is that I can blur the attribute creating a falloff effect.Am I missing something (probably haha!)?Thanks!-Steve Quote Link to comment Share on other sites More sharing options...
rafaelfs Posted February 12, 2013 Share Posted February 12, 2013 Hey! Your function doesn't work in conjunction with the point expression because the expression is expecting an integer where looppoint() is. If you just put a $PT there it'll already loop through the points and retrieve the value of your attribute for each point.. The only catch is that not all the factory nodes work with a point expression, but you can still create groups based on the the value of your attribute and run the factory nodes through the group. There are many ways to make operations based on point attributes, just sometimes one method will work where another doesn't, you'll have to go on adjusting as it goes. Cheers Quote Link to comment Share on other sites More sharing options...
stevegh Posted February 12, 2013 Author Share Posted February 12, 2013 Ah indeed it was expecting a float there. The only problem is that groups have a selection set to 1 or 0, so there isn't a way to have a nice controlled falloff if you just assign a group to a sop. So there isn't anyway around this if a node won't take the $PT variable? Quote Link to comment Share on other sites More sharing options...
ikarus Posted February 13, 2013 Share Posted February 13, 2013 if you aren't deleting/creating new geometry why not just feed the deformed and undeformed geometry into a vopsop and blend based on your mixing attribute? Quote Link to comment Share on other sites More sharing options...
jim c Posted February 13, 2013 Share Posted February 13, 2013 Just to re-iterate - you have a grid, and and a sphere, and you want to know when the grid's pts are within the sphere? How about this (see attached ,it's easier to see that then describe). The ex uses a group SOP to figure out which points are in the bound volume (The sphere -> isoffset obj), note that the default tab is turned OFF, and that it uses a bounding input, which can be any geo you want. Then I create an attr called insideAmt, set it to 0.0. Add a point SOP that only for the grouped points we created earlier, and set the insideAmt attr to 1. Then you can either create another point SOP to modify the adjusted points or use a VOP SOP. I've done both. volblendgeo.hipnc Quote Link to comment Share on other sites More sharing options...
stevegh Posted February 14, 2013 Author Share Posted February 14, 2013 Hey guys, Thanks for the replies. @jim getting the point attribute assigned is no problemo, I will try your technique though a volume sample seems to work rather well. @ikarus a vop sop works wonderfully but the goal here is to get this working with factory nodes. It would be a pain to go through and recreate all the factory nodes as vop sop networks right? Maybe I have a bit of a case of wishful thinking but there MUST be a way to do this inside a factory node parameter field.... Quote Link to comment Share on other sites More sharing options...
stevegh Posted February 14, 2013 Author Share Posted February 14, 2013 Ok well I figured it out for SOPs that don't change the topology of the incoming object. Was stupid easy as well, just plug the original object into a VOP SOP and then the deformed one and blend between using the $SEL attribute created from the other VOP SOP. So any ideas for how to make it work with changing topology (IE a polyExtrude) ? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.