Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


toadstorm last won the day on December 20 2022

toadstorm had the most liked content!

Contact Methods

  • Website URL

Personal Information

  • Name
  • Location
    San Jose, CA

Recent Profile Visitors

6,372 profile views

toadstorm's Achievements


Newbie (1/14)

  • Week One Done Rare
  • One Month Later Rare
  • One Year In Rare

Recent Badges



  1. I updated my old guide to Houdini instancing with a lot more math background, some updated techniques (especially around the Piece Attribute and Attribute from Pieces), and a bunch of information about varying material properties in addition to shapes and transforms. Here's the new link: https://www.toadstorm.com/blog/?p=942 Feel free to let me know if there's anything I've missed or gotten wrong (aside from the Solaris stuff, I'll get there eventually when I actually can sit down and use Solaris in production).
  2. Note that you don't need to do this anymore as of Houdini 19! You can just set `scale` or `pscale` point attributes during the simulation. They'll scale the transforms relative to the `resttransform` that's automatically generated on the first timestep of the simulation.
  3. Hey, sorry I didn't see this topic sooner. If you want to adjust the pivot point of a packed primitive, try using MOPs Pivot.
  4. There must be a good reason why this works, but hell if I know what it is. Nice find!
  5. I'm honestly not entirely sure why the hard constraint isn't enforcing rotation well enough, but the cheap workaround would be to use a Glue Constraint Relationship instead. Set s@constraint_type to "glue" with a f@strength of -1, then use a Glue Constraint Relationship DOP in place of your Hard Constraint. This will force both objects to solve as a single physical object. You also don't need multiple DOP objects for this system to work. As long as you set the i@active and i@animated attributes correctly on your static and active pieces, you can solve everything as a single DOP object and simplify things a little. 002_toadstorm.hip
  6. Right-click, go to "Show in Asset Manager", then in the Asset Manager right-click and select the "Duplicate" option.
  7. Here's a simple example. You need to use a Vellum constraint type that supports orientation, which generally means you want to use hair. Once the sim is done, convert the orient attribute to the KineFX-supported 3x3 transform matrix like this: 3@transform = qconvert(p@orient); Then input to a Bone Deform and you're done. vellum_kinefx_toadstorm.hip
  8. FLIP comes with built-in options for dual rest fields now... they've been there for a few years. My post is really old, but the concept behind dual rest fields hasn't changed... it's actually pretty similar to how flow map shaders work, if you're into shaders. You can find the options under Particle Motion > Rest on the FLIP Solver DOP.
  9. hou.setPreference("viewport.orientation.val", "Z Up")
  10. If you want Packed RBDs to grow over time, you need to do two things: scale up the transform intrinsic attribute, and force the solver to recalculate collision geometry. You can do all this in a Geometry Wrangle or POP Wrangle, it's faster than a SOP Solver. matrix3 xf = primintrinsic(0, "transform", @ptnum); scale(xf, 1.02); setprimintrinsic(0, "transform", @ptnum, xf); i@id = -1; // force collision recompute
  11. in a point wrangle: vector axis = set(0,1,0); float angle = rint(fit01(rand(@ptnum), 0,4)) * 90; p@orient = quaternion(radians(angle), axis); this creates an axis/angle rotation and sets it to the p@orient attribute, which copy to points reads natively. you could also try MOPs Randomize, it has a Step parameter that can lock to specific degrees.
  12. I'm actually working on an operator that can help procedurally fold up polygon geometry, along its edges. It's going to be a while before it's art directable enough, though. You can follow my progress on Twitter. No, MOPs Reorient creates a kind of orientation offset attribute (p@mops_orient) that the rest of MOPs will use when computing rotations. It means you can change the local orientation axes of packed primitives without having to unpack and repack, which can save a considerable amount of time on heavier scenes. There's an example file included with MOPs that shows how the node is meant to work.
  13. No, but you could use that string attribute with a Material SOP to override any promoted material parameter. For example, if you made a string parameter "map" in your material and then channel linked that parameter to the texture path of an RS Texture VOP, you could use the Material SOP to override this parameter with any geometry attribute (the s@material_override attribute defines these overrides).
  14. @vinyvince I don't currently have an operator that will place the pivots on specific edges of a packed primitive, though MOPs Reorient can set the local orientations of fractured primitives to match the primitive N of your original polygons. There's an example file included that shows how this works... you voronoi fracture a piece, pack it, then use MOPs Reorient to set the local frames such that the pieces will move directly "outwards" when translated in local +Z. MOPs Pivot can be used to adjust pivots of packed primitives, but it would be tricky to set them precisely to a specific edge unless you computed that position per-primitive ahead of time and set it as an attribute.
  • Create New...