Jump to content

toadstorm

Members
  • Content count

    221
  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won

    11

toadstorm last won the day on August 21

toadstorm had the most liked content!

Community Reputation

140 Excellent

About toadstorm

  • Rank
    Initiate

Contact Methods

  • Website URL
    http://www.toadstorm.com

Personal Information

  • Name
    Henry
  • Location
    San Jose, CA

Recent Profile Visitors

3,873 profile views
  1. Pop Grains Friction Problem

    The option I was referring to is the "Enable Rigid Shape Matching" parameter on the POP Grains node. If you need mostly completely rigid chunks that only break off at a few points, you might have better luck simulating your large chunks using Bullet and have some rbd chunks or grains splinter off from that.
  2. PySide to PySyde2 UI

    QVBoxLayout is also part of QtWidgets now, not QtGui, so you'd have to modify your import accordingly. Everyone has different opinions on the import style, but I typically use something like: from PySide2 import QtGui, QtWidgets, QtCore That way when you're calling these functions later on, it's very clear which module you're using: self.verticalLayout = QtWidgets.QVBoxLayout(parent) For cross-compatibility between PySide and PySide2, I'd recommend checking out Qt.py. It allows you to write all of your code as if it were PySide2, but will translate to PyQt4, PySide, PyQt5, and PySide2 interchangeably. There's a few gotchas when dealing with models and .data() overloads, but it's mostly seamless. I'd recommend avoiding Qt Designer in general as it has some limitations that may cause more harm than good later on. If you need it, though, you can use Qt.py's QtCompat module for the loadUi() function.
  3. PySide to PySyde2 UI

    PySide2 / Qt5 has migrated many of their classes away from the QtGui module to QtWidgets. QWidget is one of them. I don't like the "from module import *" way of doing things in general because it makes things like this harder to track later on, but in your example you could add the line: from PySide2.QtWidgets import *
  4. Surface as force volume?

    The Field Force DOP, confusingly enough, doesn't want a field; it wants geometry. You attach a SOP Geometry DOP to the green input, and provide a point attribute (defaults to "force") to create the force field from, and then it makes the field for you. You could just create point normals on your original geo before the shatter and rename the attribute to "force" and you'd be good to go. Since Packed RBDs are also points as far as Houdini is concerned, you can use POP DOPs on them in place of traditional DOP forces (which can be confusing, clearly). I converted the velocity VDB to standard Houdini volumes, then used POP Advect By Volumes to apply the volume as a force (i.e. not wind). volume_gradient_example_03.hiplc
  5. incident ray in sops?

    vector camP = chv("cam_position"); // camera translate values here v@I = normalize(@P - camP);
  6. Surface as force volume?

    Check this out: volume_gradient_example.hip
  7. If you crack open most of the POP DOPs that support VEXpressions, you'll see that they're just modifying local variables inside the VOPnet, not actual geometry attributes. You could always create some arbitrary @orbitspeed attribute and then use `orbitspeed = @orbitspeed` in your VEXpression.
  8. "source fluid" is for old-school SPH fluids, i believe. it doesn't create particles, which you need for FLIP simulations.
  9. Select Pts with One Connection

    there's probably an easier way to do this with SOPs, but in VEX: int n = neighbours(0, @ptnum); if(len(n) < 2) { @group_ends = 1; }
  10. Noise in glass materials?

    If you're seeing noise in direct reflect, try increasing your light samples before cranking reflect/refract quality on the ROP.
  11. Surface as force volume?

    you could create a velocity volume from the bounds of the surface, then use either point cloud functions to sample the N of the surface (if by "surface" you actually mean "mesh"), or if your surface is an SDF, use `volumegradient()` to get the gradient of your surface (which is sort of like the "normal" of an SDF) and bind it to your velocity volume.
  12. many SOPs are switching to VEX snippet-style syntax for ad-hoc group masking and parameter expressions. local variables like $TX $TY etc still exist, but they are only compatible on a SOP-by-SOP basis, and they don't support arbitrary attributes like @myAttr<3, so my advice would be to start using the VEX syntax wherever you can.
  13. MOPs: Motion Graphics Operators for Houdini

    New updates! A quick list of what's new: Automatic update feature for easy future updates! New "Spread Falloff" for growing, crawling effects! spread_falloff_01.hip example file included. Instancer now automatically uses relative paths. Quick Add function in Instancer to add all your objects at once! Instancer now supports scatter density attribute when scattering on meshes. Instancer now supports different merge types ("Into This Object", etc). Falloff Preview now shows points only to prevent crashing. Disable Preview shelf tool turns off all Falloff previews for the entire current SOP chain. Lag and Area added to Audio Falloff.
  14. Using Point Position Dop with packed primitives

    Don't bother; that DOP is more for old school RBDs. Packed RBDs can be manipulated as points via POP DOPs or POP/Geometry Wrangles. Or just use a SOP Solver. It's much easier this way.
  15. Packed Alembics have an intrinsic primitive attribute called "abcframe". It determines the time (not the frame, it's badly named) that the Alembic primitive should read from. If you haven't messed with intrinsics before, they're sort-of-hidden attributes that you can reveal in the Geometry Spreadsheet using the Intrinsics dropdown (in Primitives mode). You can set the attribute using the setprimintrinsic() VEX function in a primitive wrangle, like this: float frame = 1.0; setprimintrinsic(0, "abcframe", @primnum, frame*@TimeInc, "set"); This will work even after the Alembic primitives are copied to points, so there's no need to stamp. If you want each primitive to go to a different frame, just create a float attribute however you like, then use that attribute to set your "abcframe" using setprimintrinsic().
×