Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


Everything posted by tjeeds

  1. How can I cap this geo?

    If you turn off triangulation on the PolyCap you can use the Hole node which detects coplanar faces, then a Divide sop with Avoid Small Angles toggled on will give you decent triangles. polycap.hipnc
  2. Comparing volume bounds over time

    Best way to do this is to use Chops, since that cooks it's incoming values for the entire frame range on the first frame. Ideally you want to send as little information as possible over to Chops, so in this example I'm creating two points at minimum and maximum positions of the incoming geometry's bounding box each frame. Once in chops I'm using the Expression Chop with icmin()/icmax() to find the min/max values of the min/max points over the entire frame range. This then gets piped back out into sops, moving the points to these minmin maxmax positions. After that a Box Sop or Volume Sop can be plugged into these guys. This is the kind of thing you build once, make into and HDA and just use forever. Gets you around using a Solver/invoking Dops and having cook and cache the last frame, and it's super fast since you're only really working with 2 points. You'll notice that nothing is plugged into the first input of the Attribute Vop where the points are created, this is just one of many ways to get these points. The Attrib Vop is in Detail mode so it doesn't need input geometry to iterate over, in this case you don't want to carry through the geo that you are bounding so you plug it into Input 2 and leave Input 1 alone. Fun? max_bbox.hipnc
  3. How to use the new For Loop SOP?

    and the orange blob IS cute
  4. How to use the new For Loop SOP?

    Yeah, it's a little wacky but I think that's to be expected with any new workflow. I think it's pretty clever actually, love the unification of style between Vop and Sop loops too. It's easy to forget how weird using the ForEach Sop was at first, trying to figure out how to use stamp expressions inside there was not cool, but now it's second nature. Same with Vop If block and loops, you just gotta fiddle with it until it clicks and then it's easy breezy, no problemo, after a while crocodile.
  5. Scatter Points Interpolation

    Okay, that makes more sense. Check this one out, inside the solver there's a volume vop node that has two texture parm, you can use the current and next frame of the texture sequence here. This reads the textures into a volume and stores the delta values in voxels. This gives you a way to read the gradient of the difference between the images so you can advect your points. I did this in a crappy solver but it should probably be done in Dops and bundles with a Gas Particle Separate or soemthing to keep them from bunching up. interp_tex.hip
  6. Scatter Points Interpolation

    I agree with Miles, still not totally sure what you're after in the end but there's probably a simpler way to achieve it. Here's an example where the point count is constant, although the point numbers jump around from frame to frame. This is using animated UVs instead of a texture sequence but same diff, y'know? Nothing special needed for this, scattering a ton of points, reading a texture onto them and writing a scalar value from that ttexture to sort by. The points are sorted by luminance (and reversed in order so point 0 has the highest luminance), then you can just delete all points over your desired number. Is this getting closer? interp_tex.hip
  7. Just gonna pod onto Matt's file here with a Find Attribute Value by Index example. This uses an If statement to acheive the same results as running through a loop, but you can use the Find Attribute Value Count vop to set up a loop that will do something similar. @Matt, the reason for the difference in prim numbers can be seen if you look at the primitive numbers before the fuse. The first method creates one legitimate edge and one degenerate zero-length edge. The second method creates two legitimate primitives so the Fuse doesn't remove anything. vop_loops.hipnc
  8. Scatter Points Interpolation

    Sounds like you're trying to do this, right? interp_tex.hip
  9. You changed your Evaluation Node Path to "../scatter1", this means that any ch() references you make will look to that node instead of the wrangle node itself. So it's looking for a parameter called "threshold" on the scatter, which doesn't exist so it returns 0, thereby deleting all of your points.
  10. Arrays in H15 wrangle nodes

    Another strategy for anyone who's curious, VOPs supports arrays quite nicely now. All the array functions are subtabbed in the node menu, you can build up what you want and then right click on the Vopnet to view the VEX code that it generates.
  11. What exactly are you trying to do? There's a lot of alternate ways to accomplish this sort of thing.
  12. You can use the Find Attribute Value Count Vop, this will return the number of unique values contained within a String or Integer. You can use this to run a For Loop and inside you'll hook up i to Find Attribute Value by Index node to pull the current value. Just be aware, running this is in a Attrib VOP set to run on Detail (Only Once) will be analogous to the old ForEach sop. If you run it on points you'll be iterating numpts^numattribs (an assload) times, so if you have a high point count you should avoid doing that.
  13. Kill isolated particles

    You can use a POP Proximity and POP Kill node to handle this. Less headache than using a wrangle and accomplishes the same thing.
  14. Use a Ray sop set to Minimum Distance and pull the uv attribute from your mesh, you can then use this to do a texture lookup in Vops. You can do it all in Vops if you wish, the XYZDist node will give you the nearest primitive and the parametric uv on that face, you can plug that data into a Primitive Attribute vop and pull uv from your mesh that way. transfer_texture.hip
  15. setting rest postion

    I'd add a simplification here: instead of doing an Attribute Transfer, just plug in your transformed, time-shifted geometry in to the 2nd input of the Rest sop. This will be faster and more accurate, it performs the same function as the Attribute Copy. Attribute Transfer uses spatial sampling and wouldn't work in this case since the two cars will not be in the same position. Additionally it can muddle values, (this is useful if you want to blur an attribute) and is slower than just copying the attribute between corresponding points.
  16. Volume sample within gasfieldvop

    Haha, yeah this is a good one It'd be nice if the Gas Field VOP had the same Inputs tab as the Geometry DOP, that would solve this. I don't know of a straightforward way to do it as things currently stand, but you could create a temporary vector field, use one Gas Field VOP to store a noised Position in that field, use Gas Lookup to pull the values from your desired field at the displaced position and store in another temporary field, then perform any further operations in a second Gas Field VOP. But, indeed, this would be wack. gaslookup.hip
  17. scattering options

    It's super simple to do this, just put this in an AttribWrangle set to run on Primitives: addpoint(0,@P); and if you don't want to keep the original geometry tack this on: removeprim(0,@primnum,1);
  18. Random link of interest

    Think this is a Mantra render?
  19. Attrib in Vop Sop not updating

    Expand your p1 peg, it's just set to 0,0,0. Here's a cleaned up version. dominoLookAt.hip
  20. You can use an AttribVOP that loops through the points and adds them up, but it's much (MUCH) easier to do this with an AttribPromote. Go from Point to Detail with a Sum method.
  21. You use the VDB Activate node to turn on volxel in your empty VDB. You can specify a bounding box or use another VDB as a secondary input (this works nicely to use a low-res VDB to turn on the voxels of a high-res VDB)
  22. Delete bad geo

    Also the PolyDoctor SOP can clean up a whole host of geometric abominations.
  23. AttrWrangle Removepoint

    You can use a Clean SOP afterward to remove degenerate primitives, or just run it in Primitive mode and use removeprim() with the andpoints argument.