Jump to content


  • Content count

  • Joined

  • Last visited

  • Days Won


acey195 last won the day on September 18

acey195 had the most liked content!

Community Reputation

113 Excellent

About acey195

  • Rank
  • Birthday 01/10/1991

Contact Methods

  • Website URL

Personal Information

  • Name
  • Location

Recent Profile Visitors

6,146 profile views
  1. Toggle Network View Dependency Links

    in H16, its under the "view" menu at the top / left-ish of the network window, its no longer under the "d" menu that it used to be in older versions
  2. Color value for each polygon

    I think you just need to fetch it as a normal primitive attribute floatListAttribValue(name_or_attrib) http://www.sidefx.com/docs/houdini/hom/hou/Prim using "Cd" as the attribute (make sure you actually have the attribute as primitive attrib, rather than points for example)
  3. Downres Meshing Techniques - Houdini to UE4

    What you can do / what your best options are depends on a couple of things, for instance, does the topology change during the sim (creating new floating parts, like splashes, or does it remain the same (set of) shape(s) that animate) You might want to take a look at the remesh node, although it will based on the density of the mesh, not the total count of polys Alternatively, you could build a low res mesh from the first frame (if the topology remains similar enough during the animation) and animate this low res mesh, using the high-res one.
  4. in general you do not want to do an equal tests on floats (other than for 0 maybe) I would suggest doing: if(abs(ptu - t_start) < 0.0001) //add how many zeros after the decimal point for how much precision you need alternatively, if you really require the numbers to be exactly the same, the best way is to use integer values only, note that the rint() function still outputs a float, so you may need to also cast it like int(rint(floatValue));
  5. keeping groups after carve SOP

    There's 2 solutions to this afaik. the more complex one is writing your own carve node that keeps primitive groups, in VEX for instance. the easy solution, is to use an (integer) attribute instead of a group, then you can regenerate the group from the attribute later using a group expression for example: @attrib=1


    the easy solution is to wrap the entire node of the sop in a function, like f1 already suggested def myfunction(): print "print this" return print "but not this" myfunction() #make sure you actually run your code at the bottom of course
  8. Procedural Caves WIP

    very nice always good to see more game oriented stuff! makes me considering revisiting some of my old projects ^^
  9. Post-Voronoi Boolean Problem

    alternatively, you can keep it at either of the other options, if you add a clean node in between and a divide node set to a maximum of 4 sides/vertices per polygon.
  10. Remove superfluous signs after a comma.

    not entirely sure if it is the only way, but I think you'll have to multiply the value by 100, round it to the nearest integer and multiply it by 0.01 afterwards. when printing the value in vex using printf() you can use "%d" instead of "%f" for less or more numbers after the decimal point.
  11. adjacent triangles not deleting

    ahh I think the way you assign points to the group is not entirely correct. @group_delete = 1; // this assigns the CURRENT processed primitive to the group @group_delete = @ptnum; // this assigns the CURRENT processed primitive to the group, if the point number is not equal to 0 (for 0 the boolean is false) what I do know is that you do not really need to use a forloop here. when you set a wrangle to run over primitives, you can query for the local vertex counts too. so you can simplify your code to the following, and it does not even need to be in a forloop this way (but should still work if it is): @group_delete = (@numvtx == 3);
  12. by disconnecting the start and end of your target curve and then create a path from start to end (the long way around) finally reconnect the start and end if needed. alternatively you may want to look at the polypath SOP they added since.
  13. Copy geos on grid with random position and rotation

    Glad it worked! Basically to get a proper copy rotation in Houdini you need either 2 vectors ("N"(aim) & "up"(up/roll)) or 1 quaternion ("orient"(aim+up/roll)) Since quaternions are more difficult to keep track of, I usually prefer the 2 vector approach. v@N = {0, 0, 1}; The N has to be initialized first, and since Houdini uses Z forward as the default forward axis, that is the one to use here ( {0, 0, 1} ) On this line: rotate(rotationMatrix, angleInRads, {0, 1, 0}); //rotates the matrix, by the angle, around the vertical axis or if you have a custom up vector: rotate(rotationMatrix, angleInRads, v@up); //rotates the matrix, by the angle, around the up axis the matrix is converted from an identity (basically 0 rotation matrix) to the matrix that will rotate the vector in the way that you want. so it is not an identity matrix anymore at this point. v@N = v@N * rotationMatrix; // or v@N *= rotationMatrix; will apply the matrix to the initialized front vector, since in the rotate function we rotated around the up axis, the rotation will be in the XZ plane.
  14. Copy geos on grid with random position and rotation

    The "modern" way of Houdini is to try avoid using copy stamping as much as you can though. You can instead also put everything in the new forloop and loop 8 times with transform sop, once with every 45deg rotation. reference in the vid below. An even more performant method, and arguably easier, is to pre-supply the rotations into your points on the right side of the copy input. you could do this with something like the following attribute wrangle script: v@up = {0, 1, 0}; // up vector in positive Y axis v@N = {0, 0, 1}; // N vector in positive Z axis matrix rotationMatrix = ident() // create a matrix with no initial rotation; int rotationSegment = rint(rand(@ptnum) * 8); //creates a random number from 0 to 8 float angleInRads = radians(45.0 * rotationSegment); //multiply the angle by 45 and convert to radians (angle/180 * $PI) rotate(rotationMatrix, angleInRads, {0, 1, 0}); //rotates the matrix, by the angle, around the vertical axis v@N = v@N * rotationMatrix; //rotates the N around the Up vector in a random amount of steps of 45 degrees
  15. Delete points close to surface edge

    It looks like you did it correctly. I am not sure if the "Group Type: Edges" could be a problem (I don't think it should though) I do notice that due to the way your letters are built, this method will remove some of the points between the stem and the ring of the P (where the edge is inside the primitive) you may to also remove edges like those after "unrolling" in the ends1 SOP. If it still does not work, make sure that the parameter name of the "maxDist" matches between the code and the interface, you can check by hovering over or using the gearwheel in the top-right. Here you can also adjust the range of the slider, for if you are working with large-scale letters. (you can also type numbers to test into the parameter, or drag while holding the middlemouse button) Kind regards, Twan