Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


toadstorm last won the day on May 11

toadstorm had the most liked content!

Community Reputation

275 Excellent

About toadstorm

  • Rank

Contact Methods

  • Website URL

Personal Information

  • Name
  • Location
    San Jose, CA

Recent Profile Visitors

5,123 profile views
  1. You solve intersections for particles with different pscales with POP Grains. That is the way to do it, unless you want to use Vellum grains, which are certainly viable but might be a little bit slower. POP Interact can only apply forces, which are not going to get you clean collisions. pop_advect_grains_toadstorm.hiplc
  2. POP Grains will resolve intersections. If you need the collisions to be "softer", you can adjust the collision stiffness. To get FLIP-like motion, consider running a smoke simulation first, caching out the velocity field, and then advecting your POP grains through that field via POP Advect by Volumes.
  3. Instance rotations in asset

    I'm not sure I understand the problem. If your cogs are packed geometry, and you're rotating them in Houdini, those rotations should export via VAT, just like rigid body simulations would.
  4. Instance rotations in asset

    You could consider using the Labs Vertex Animation Textures ROP. This will bake your animation into a texture that describes the transform matrix of each cog as RGBA data. You'll have to build a shader inside UE4 to have this work properly, but the ROP will handle most of that for you.
  5. Text terminal effect

    If you enable the export of attributes from the Font SOP, you can then use an Assemble SOP to pack each letter to a single primitive based on the i@textindex attribute. With each letter as a single packed primitive, you can just group the points that represent the packed primitives based on an animated bounding box, and delete anything outside the box.
  6. Offset time on Copy to Points

    Ah, I mistyped my code up there. Just edited it. Packed Disk Sequences have an intrinsic primitive attribute called "index"... this refers to the index of the sequence that you want to load, which is generally the frame. It's a float value, because packed disk sequences interpolate between frames. If you cache the animation of a single curve to disk, then load it in via a File SOP in Packed Disk Primitives mode, you can copy that one animation to all of your points, then afterwards adjust the timing using that VEX I posted above, or something similar. The relevant function is setprimintrinsic(). If you wanted to do this with MOPs, the right node to use would probably be MOPs Set Sequence Time. You just have to make sure that you are modifying packed disk sequences (or packed Alembics).
  7. Offset time on Copy to Points

    Another way you can do this is by writing your animation to disk, then loading it back in as a Packed Disk Sequence (the option is on the File SOP). Copy this packed sequence to points, then afterwards you can set the "index" primitive intrinsic to whatever frame (or subframe) you need. setprimintrinsic(0, "index", @ptnum, f@some_attribute, "add"); // this would offset the start of each copy by the value of f@some_attribute
  8. A better question is, why are you copy stamping? Just put this attribute on your template points and have the copies inherit it. Copy stamping is a deprecated workflow and shouldn't be used anymore except for backwards compatibility.
  9. Thanks for the update, glad to hear caching worked! Feel free to ping me here or on the MOPs forums if you have more questions.
  10. Environment Variables issue

    You're redefining HOUDINI_PATH there at the end without including $HOUDINI_PATH; to make sure you're adding your new path definition to the existing one. Your last HOUDINI_PATH line should be: HOUDINI_PATH = "$HOUDINI_PATH;C:/ProgramData/Redshift/Plugins/Houdini/18.0.460;&" If you want to know more about the guts of editing the environment file, I wrote an article about this on my blog: https://www.toadstorm.com/blog/?p=678 That said, I'd recommend you switch to using packages instead of using the Houdini.env. They're a lot easier to configure. I have another article here you can read about packages, and it comes with a sample Redshift package you can use: https://www.toadstorm.com/blog/?p=722
  11. How to rotate a vector to make it tangent

    You can do this with two cross products. First you take the normal, and cross it with v to get a vector orthogonal to both N and v. Then you cross that vector with N again, to get your original vector, but now orthogonal to both N and the other vector you already generated; this means it'll be tangent to your sphere. vector tmp = cross(v@v, v@N); v@v = cross(tmp, v@N); Also, make sure your v@v attribute you're creating has three components, not two.
  12. Expand Vel Field ( don't want use divergence )

    I have a DOP solution for you, but to be honest you might just want to make your vortex bigger in SOPs rather than handle it in DOPs. What you need to do is use the Gas Extrapolate DOP, along with an SDF generated from the original volume source SOP, to expand the vortex's reach. This means you need to make a surface SDF in SOPs that's large enough to handle the widest bounds that your vortex would need to reach. You then have to source v to a temporary field instead of directly to vel, run Gas Extrapolate on that tempvel field, then use Gas Linear Combination to add tempvel to vel and complete the sourcing operation. extrapolate_vel_toadstorm.hiplc
  13. RBD sim / copy to points discrepancy

    It's unlikely to be a bug. Can you post a hip file that demonstrates the problem?
  14. Help with retiming multiple explosion instances

    If you're loading the explosions in as packed disk sequences (option is on the File SOP) then you can set the "index" primitive intrinsic attribute after the Copy operation to choose your offset. For example: float rand_offset = fit01(rand(@elemnum), 0, 24); setprimintrinsic(0, "index", @elemnum, floor(rand_offset), "add"); If your flak volumes have more than one primitive, you'd just want to make sure your random offset was the same for all primitives within a single volume (density, vel, temperature, etc)
  15. RBD sim / copy to points discrepancy

    The reason this could be happening is likely dependent on how you're setting up your geometry pre-simulation. If the geometry is copied and transformed before being assembled and packed, for example, what constitutes "up" and "forward" for a given box might not be what would visually be "up" and "forward" for that box. What I've found to be the most consistent solution is to get the packed primitive intrinsic attributes that define the transform, and use those to create / overwrite any template point attributes on the RBD points. You can do this in a Point Wrangle: matrix3 xf = primintrinsic(0, "transform", @ptnum); 3@xform = xf; vector pivot = primintrinsic(0, "pivot", @ptnum); v@pivot = pivot; Then try copying the final geometry to those points.