Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


underscoreus last won the day on May 20

underscoreus had the most liked content!

Community Reputation

55 Excellent

1 Follower

About underscoreus

  • Rank
  • Birthday 09/02/1996

Contact Methods

  • Website URL

Personal Information

  • Name
    Martin Brattensborg
  • Location

Recent Profile Visitors

414 profile views
  1. Alternating a Switch Node when using the Chain Sop

    Heyo! I don't know if you are still looking at this or if you've already solved it on your own but I've slapped together a quick edit of your file with the way I'd approach doing this. I did not end up using the "chain" sop so if that is a requirement then this solution is probably disqualified. My solution is using some Houdini 18.0 and above features so if you are using Houdini 17.5 or older then this is also probably a dud. Tell me if you are and I'll have a look at making a 17.5 compatible version. For my solution I used the good old "copy to points" sop with its "variant" attribute feature. This allows us to assign a "id" attribute to both each brick and to each point you want to copy to and if the attribute on the point and on the brick match then that brick will be copied to that point. Then I just also made a version of each brick that was mirrored using your setup and made sure to give these mirrored bricks their own unique "id". Lastly I just made sure that every other point on the line we are copying to has an id for one of the mirrored bricks and bam, alternating randomly distributed bricks. Hope this can be helpful! Alternating_Corner_Brick_mnb.hipnc
  2. Select / Delete inside Primitives

    Hey! Inside faces can be tricky. Here are a few ways that might be able to help you that I can think of right now: 1. Are the inside faces detached from the rest of the geo? If so have a look at the "measure" and "connectivity" nodes. The connectivity can give you an "id" attribute for each detached piece and the "measure" node can measure the surface area of each piece. So if the primitives are detached then they will be a lot smaller than the main model so you should be able to then just do a blast based on the attribute value from the measuring. 2. Depending on how the model is you could maybe have a look at the "unshared edges" option in the "group" node. Just add a "group" node, then disable "base group" and then inside "include by edges" check the "unshared edges" checkbox. This should add any primitive with edges that don't connect to another primitive to the group, then you can blast it. This could of course cause other issues if there are other places in your model that also have unshared edges but could be worth a try. Hope one of those can help you solve your problem.
  3. Voronoi Fracture creating holes in outer geo

    Hey there! It's a little difficult for me to say without poking around in your scene file. I've tried a quick test now and I can't replicate the issue but one of the things I'd have a look at is the scattering of the points. are you using a fog volume or an sdf (distance/surface) volume in the "vdb from polygons"? This should be a fog vdb and it should also be set to "fill interior", otherwise it is basically just the same as just scattering directly on the surface. When it comes to a quick fix you could try to use the fuse node but uncheck the "fuse snapped points". This should snap the points to the same position in space without actually welding them together, maybe that can solve the issue. Hope some of that can help, and if not, be sure to upload your hipfile if you can so we can dig into it and try to find the issue.
  4. Average Normal

    Heyo, there are a few ways to solve this that I can think of at the top of my head. 1. Use the "avg" vex function. Just make an array of all the normal attribute values and then plug that array of vectors into the "avg" function and it will give you the average value of all the vectors in the array. 2. Use the "attribute promote" node. Just add the "attribute promote" node and set it to promote the "N" attribute from primitives to detail and set the promotion mode to "average" (this is the default) and boom, you should now have it all averaged out and as a detail attribute. Hope that can be helpful!
  5. Polyextrude curve

    Alright, got it. To get it working there are two things you'll need to fix. 1. Make sure to give the extrusion quite a few "divisions" to allow it to assume the shape of your curve. Just assigning 1 will only ever allow it to make a straight line. I've used 50 divisions but this can obviously be tweaked to what you want/need. 2. I don't think the extrusion always follows the direction of the path by default. Even when in "Curve from second input" mode it will try to extrude along either the primitive normal or a point normal, so to get your box to extrude along your curve just assign the box a point normal that points along the direction of the path (something like 1,1,0) and then choose to extrude along an existing point normal attribute. After doing that it looks more or less how you'd expect. Hope that can be helpful!
  6. Polyextrude curve

    Not quite sure why it does not work for you, I'd need to have a look at your scene file. It seems to work for me. Only thing I noticed is that I needed to pull the "distance" slider to 1 and that the extrusion did not extrude along the spline like I expected but rather extruded into the shape of the spline. Polyextrude_mnb.hipnc
  7. Wire and RBD Packed Constraint network

    Sure there are a few ways to do this, the thing I'd have a look at first is the "point deform" node. In my example above you could just use the same points I copy spheres onto to copy your high res mesh, then just plug in that high res mesh into the first port of the point deform, then use the "timeshift" to freeze the spheres at the first frame and plug the frozen spheres into the second port of the point deform, and lastly plug the moving spheres into the last port of the point deform. After then the high res mesh should be getting its motion from the low res spheres. Of course, if you have a mesh that's a closer match to your final high res mesh inside the vellum sim instead of spheres that is preferable since the collision will be more accurate. Sorry about the kinda weird written explanation, I'm not in front of a machine with Houdini right now so I can't whip up an example.
  8. material lost after further modeling

    I'd need some more info about your setup or the scene file to be sure here, but could it be that even though you have the attribute on your prims, the value inside the attribute is empty? So that it does not point to any material. Or could it be that your material relies on UV's or other attributes that your new model does not have?
  9. Wire and RBD Packed Constraint network

    From my (somewhat limited) experience I'd recommend trying out Vellum. I've never had great success combining multiple solvers live together, I think it just always makes everything more stable and easy to work with if everything is done by one and the same solver. To that effect, I've attached a super quick and dirty vellum setup of what I think you are trying to setup. When working with vellum like this the number one thing to keep in mind is to have stuff organized into groups so its easy to configure things separately and also for constraining things together later. Hope it can help! Vellum_Thingy_mnb.hipnc
  10. RBD collision Geometry

    In that case, we might need some more information about your setup. Some of the things that came to my mind were: - Are you using the SOP version of the RBD solver or are you inside a dop network? (If you are inside a dopnet then the collision settings should not be on the solver node but on a separate collision or RBD object node) - Is your moving collider animated at object level or in SOPS? (Whenever things are animated at object level they are called "animated", but if they are animated inside SOPS they are called "Deforming") I totally get if you can't share stuff from work, just keep in mind that if we can't see or poke around at the problem we'll need a lot more info about your setup to be able to troubleshoot it
  11. What you could do is use the instancepath method and then simply add the "instance" node and set the "display as" drop-down to full geometry. That should spawn the full geometry onto your points. Then from there you could pack them and bring them into your sim as an "RBD packed object" or just import the full geo as a normal "RBD object".
  12. This sounds like what the "variant" attribute was made to solve. To set this up just assign an "id" attribute to each of your objects, like all the points on a sphere gets "id" 0 and all the points of the cube get "id" 1. Then assign each of the points you are copying to an "id" attribute with the same name with a value of 0 or 1 (you can of course have more than just 0 and 1, just limited it to these in this example since I only made up two shapes). Lastly, in the copy to points node, just enable the "variant" attribute checkbox and put the name of your "id" attribute in the text field and it should work. One thing with this approach is that this feature was added to houdini in version 18.0 I believe so you'll have to have that version or later for this to work. Looking at your file it looks like you have the older version of the copy to points node which came with Houdini 17.5 and earlier. If you cannot update your houdini you might have to look into either the copy stamp node (not really reccommended as copy stamping is VERY slow) or assigning geometry to points via the "instancepath" attribute. But if you can, I'd just say to update your houdini version. Here is an example made in houdini 18.0.460: IDTEST_mnb.hipnc
  13. Delete percentage of points after specific frame

    I'm not completely sure about the syntax here since I'm not in front of a machine with Houdini to test on, but maybe something like this inside a pop wrangle: if(@Frame >= yourframenumber) { if(rand(@ptnum) > 0.95) { removepoint(0,@ptnum); } } Just replace "yourframenumber" with the frame you want it to start at and if you want to delete more (or less) than 5% change 0.95 to another number. The number you want here is basically: 1 - (your % number / 100). So for 5% it is: 1 - (5 / 100) -> 1 - 0.05 = 0.95. Just as a quick explainer: - if() statements let you compare two values and then if the comparison criteria are met then it will execute the code inside the {}. The most common comparators are == (equals), != (not equals), < (less than), > (greater than), && (and), || (or). Some of these can also be combined, like the equals and less than / greater than to become equals or less, equals or greater. - "@ptnum" and "@Frame" are both attributes that are always present on points even if they don't show up in the geometry spreadsheet the same way other attributes do (ptnum actually shows up kinda, all the way to the left as the number on the side). Ptnum is each point's unique id and Frame simply just gets the current frame. - The rand() function generates a random number between 0 and 1 based on a "seed" value, usually, this is a value where we want every point to have its own unique value which is why ptnum is very often used here, but it could be any value. - Lastly the removepoint() function does mostly what it says in the name, it removes a specific point, all it needs to know is what geometry stream and which point to delete. If the point has passed both the if() statements we laid out previously we know that it is currently some frame after the time where we should start deleting points and then the current point is among the 5% of points with a value higher than 0.95, meaning that we want to delete it. One small final note on this setup is that it might not remove EXACTLY 5% of points each frame, since the rand() function generates a random distribution of numbers the 5% is only theoretical based on the assumption that the random will give you a more or less even spread, so if you need it to be EXACTLY 5% every frame you might need something more accurate.
  14. vrorigin expression syntax help

    Not very familiar with this function but could it be because you are missing a "/" at the end of the path when you use your chs expression? "/obj/shot_6/sunlight/" vs "/obj/shot_6/sunlight" If so it should be possible to either just say "`chs("../../sunlight")`"+"/" or by running strcat("`chs("../../sunlight")`","/") to add these two strings together.
  15. Vellum hair per point constraint

    Hey again! So I'm not 100% sure I get what you are trying to do, but I think I can imagine it from what you've talked about. I think that I would do a combination of a few things; 1. For when the noodle is just laying there I would use the "active" attribute. By setting this to 0 (and then later animating it to 1) you should be able to basically freeze the geo in the sim making the solver ignore the geometry (assuming that when you say you want the noodle to be still you mean totally still as in frozen with no movement). 2. For when the noodle starts to move I would do exactly like you suggested, giving some of the points at the end of the noodle a higher mass so that they end up pulling the rest of the noodle with it as they fall. If you use the active approach the higher mass on one end of the noodle can even be set before the sim since it will just be ignored if a point's "active" attribute is set to 0.