Jump to content


Popular Content

Showing most liked content on 11/21/2017 in all areas

  1. 3 points
    Yeah, there's no need to go for POPs - and it all depends on what type of effect, how much control you want/need, etc... Here's a non simulated setup using find shortest path SOP.
  2. 2 points
    I wouldn't do this with a simulation. I would do something like copy a line 10 times, make them in a row next to each other -- resample them all -- (pseudocode coming) if my y position is between 1 and 2, x value is total avg x position of all lines, if not, remain at your current x position, so they'll remain in their line outside of that range. resample for even distribution again, then slap on UVs -- now you can animate points along the whole thing using UV to drive them What you need is super specific so I don't think simulating is necessary, just a bunch of sops n cheats also this gives flexibility to change the lines shapes, make them rounded or rectangular, more or less, etc
  3. 1 point
    Hi, I'm not sure if this is what you're after: open_closed.rar (H16.5.268 Indie) I used a group SOP to detect unshared edges, converted that group to points, then used the npointsgroup() expression to count and detect if there are open edges or not.
  4. 1 point
    You can also wrap pages by offsetting rotations a little for every page. // PARAMETERS float start = chf('start'); float touch = chf('touch'); float speed = chf('speed'); float flip = 1 - chf('flip'); vector fade = relbbox(0, @P); // POSITION @P.y -= vector( getbbox_size(0) ).y * 0.5; // WRAP PAGES matrix m = ident(); float copy = ( ch("../copy1/ncy") - prim(0, "copynum", @primnum) ) * flip; float t = @Time * speed - start - copy + sin( fade.x ) + fade.z * touch; rotate(m, smooth(0, $PI, t) * $PI, {0, 0, 1}); @P *= m; // TEXTURE COORDINATES v@uv = set(fade.x, fade.z * -1, 0); book_flip_pages.hipnc
  5. 1 point
    Hi, I checked out your scene and updated it. I added two angle values for yaw and pitch, which were then used in a rotate() function sequentially. You still had the @orient attribute passing through the Sweep SOP. Simply delete that and let the sweep use the PolyFrame's tangentu as N. H16.5.268 Indie - water_flower_v005_upl_jeff.rar I hope this helps!
  6. 1 point
    There is no deception used here, it's just quite simple, hehe... It's just a habit, rather than scattering a single point on a surface, I usually just use one off the surface, so a sort randomly and then delete everything except point 0. Here I sort by Y and then delete everything but the lowest one. So the bottom most point is there and I feed that into the POP. The convert line SOP converts every primitive to lines between it's connecting points. If I didn't delete the surface, the minpos function would ray the point to the surface, but here I just want the structure of the mesh for the particles to follow. And I didn't need the restlength, but I just didn't bother about unchecking it, doesn't have any influence at any point here accept eating a small amount of memory. And yes, the minpos function moves the point to the closest surface position of the target, in this case input two where I piped in the line structure of the half sphere. And finally the wrangle where I normalize velocity and multiply it by 0.1 to force a constant velocity of the particle - else its speed would be controlled by the noise function of the POP wind, with wouldn't be very fitting for particles representing some kind of information flow or alike. If you want different speeds for each particle, you could use something like multiplying the velocity with rand(@id).
  7. 1 point
    Ok I was able to auto-solve this by creating an orient attribute and a rest orient attribute to maintain the original noise flow. The orient attribute is created from a polyframe with N and up followed in a wrangle matrix3 m = maketransform(@N,@up); vector4 q = quaternion(m); p@orient = q; p@rorient = q; v@rest = @P;
  8. 1 point
    Another method of string concatenation is to use the format() function. name = "piece{0}".format(point.number())
  9. 1 point
    Something like this? node = hou.pwd() geo = node.geometry() geo.addAttrib(hou.attribType.Point, "name", "") for point in geo.points(): point.setAttribValue("name", "piece" + str(point.number())) Then look at this post by Graham explaining why string types does not have a default value.
  10. 1 point
    you can do that after your simulation by point vop and make the variations in y direction to static as of the first frame.....hope this will help...thanks....
  11. 1 point
    I'm experimenting on something similar (and also noob, so may be wrong). Heightfield is only projected in y, so you can project on a plane, then wrap that around into a sphere, transfer values etc.
  12. 1 point
  13. 1 point
  14. 1 point
  15. 1 point
    Wanted to share a fun technique for emitting curves with stringy behavior using pop grains. It's fast and stable so you can simulate many strands interacting together. Using the explicit constraints feature of popGrains, primitives that constrain the points are made on the fly during each timestep in a sop solver. Hope this is fun and/or useful to some of you Link to render and hip file: Vimeo Link -Nema emittingStrands.hipnc
  16. 1 point
    create rest attribute with Rest SOP on your geometry before animating then base your noise on rest attribute instead of P or you can base it on uv as well it depends on what you are doing if your geometry is animated already (like geometry sequence, maybe from other soft) then you can use Timeshift SOP to freeze geometry on one frame and use that as second input in Rest SOP or you can also copy it with Attribute Copy from static geo