Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


jkunz07 last won the day on February 2

jkunz07 had the most liked content!

Community Reputation

153 Excellent


About jkunz07

  • Rank
  • Birthday 10/17/1988

Personal Information

  • Name
  • Location

Recent Profile Visitors

7,782 profile views
  1. Beachball noise pattern in vops

    Here's an idea for the beach ball pattern in a shader, this way uses UV's. beach_ball_shader.johnkunz.v1.hipnc
  2. fireworks forming shapes

    Of course. The reason for the npoints() the random() just gives us a number between 0-1, but we want to use a random point of the reference geometry (the face symbol text) we multiply the 0-1 number by the number of points (npoints() ) of the reference geometry so that then have a random number which corresponds to a point on that geometry. If we have a guide shape with 32 points, we want to get a random number between 0 and 32, not simply 0 and 1. The reason for the vector() The point function itself can be used to retrieve lot's of different data types, not only vectors like position (P). You could use it to find the pscale of a point which would be a float, or the id of a point which would be an int. If we don't explicitly tell the point function which data type it's finding, it will try to do it's best to guess. If we divide by a float after the point function, the VEX compiler might guess we are pulling float information using the point function and we'd miss getting the y and z components of the position. Specifying vector(2.) is the same as doing {2,2,2}. It just forces that to be a vector instead of a float. I usually try to be overly careful when specifying things, this is why I leave the decimal after some numbers, so I can be sure it's interpreted by the compiler as a float data type. In some languages like Python or HLSL if you just type "2" instead of "2." it will assume that's an int data type. That could give you errors, or unexpected results. Let me know if any of that doesn't make sense or you want to know more.
  3. fireworks forming shapes

    Here's an idea : ) fyrework_shapes_johnkunz.v1.hipnc
  4. sinus loop/cycle

    sin( ($FF-$FSTART) * 360/($FEND-$FSTART)) This should cycle once over the duration of your scene
  5. See Code For Shelf Tool?

    Of course! I should have mentioned that the use of $HFS assumes you have the Houdini environment setup in the shell or have launched Houdini Terminal inside the Utilities folder of the app directory.
  6. See Code For Shelf Tool?

    Those modules exist in $HFS/houdini/python2.7libs/ So if your on a mac you can do open -t $HFS/houdini/python2.7libs/objecttoolutils.py in the shell to check out what's going on with the customStateTool function.
  7. See Code For Shelf Tool?

    I think most are written in Python but Hscript is supported as well. If you right-click on a shelf tool, then click "Edit Tool..." it will allow you to see how the code that the tool is calling. This code is found under the script tab.
  8. Have you tried the Intersection Analysis SOP?
  9. grouping 1 random point

    The variable for total number of points is @numpt. There is a function npoints() which is different for a variable. npoints(0) (the zero specifies the input geometry) will return the same result as @numpt. This part of the docs might be worth looking at: http://www.sidefx.com/docs/houdini/vex/snippets.html#indexing
  10. grouping 1 random point

    @numelem is the total number of elements being processed. Depending on the what the wrangle is set to operate on (points, vertices, prims, or detail). You could use npoints() or nprimitives() vex functions instead if you want. The code is generating a random number between 0 and 1. This is then scaled to fit the number of points (multiplying by @numelem). floor() function eliminates anything after the decimal, so we have a whole number. Then we check if it matches the current element number (@elemnum). If it matches, this will evaluate to 1, adding it to the group, the rest of the points that don't match will evaluate to 0 and not be included in the group. Is that clear? Let me know if you have any more questions.
  11. grouping 1 random point

    i@group_single_point = floor(rand(chf('seed'))*@numelem) == @elemnum; Something like this should work

    You should be able to use the POP Axis Force node to apply vortex style force to Vellum sims, all the POP force nodes will work with Vellum http://www.sidefx.com/docs/houdini/nodes/dop/popaxisforce.html
  13. Flora Distribution

    http://ianwaters.co.uk/wp/mash/the-papers-behind-the-world-node/ http://algorithmicbotany.org/papers/ecosys.sig98.pdf https://disney-animation.s3.amazonaws.com/uploads/production/publication_asset/135/asset/vegetation2016_v9.pdf https://dl.acm.org/ft_gateway.cfm?id=2947692&type=pdf&path=%2F2950000%2F2947692%2Fsupp%2Fp57-cieri-supp.pdf&supp=1&dwn=1
  14. Boolean Fracture Seams

    Have you made sure the boolean SOP is set output 'binsidea' group, and that that group is specified in the final normal SOP?
  15. Boolean Fracture Seams

    'unique points along seams' shouldn't be necessary. Try this file where I've added normals to the geo before it's cut, also having normals on the cutting geo can help. Finally only the inside faces get normals recalculated after it's shattered using the A inside B group. This preserves the smooth normals of the sphere's shell before it's shattered. BooleanSeamless.hipnc