Welcome to od|forum

Register now to gain access to all of our features. Once registered and logged in, you will be able to contribute to this site by submitting your own content or replying to existing content. You'll be able to customize your profile, receive reputation points as a reward for submitting content, while also communicating with other members via your own private inbox, plus much more! This message will be removed once you have signed in.


  • Content count

  • Joined

  • Last visited

  • Days Won


Community Reputation

342 Excellent

About f1480187

  • Rank
    Houdini Master

Personal Information

  • Name F1

Recent Profile Visitors

1,933 profile views
  1. It will return hou.parmTemplateType value, which is not exactly "expression/string" information. I think you can use this to get same result: parm.parmTemplate().type() Not sure if there is a better method, but you can check for expression like this: try: parm.expression() except hou.OperationFailed: print('Not expression branch.') else: print('Expression branch.')
  2. True, the vertex order is what the side basically is. You can negate normal, and the side won't change: instead, the surface goes black with strange shading on grazing angles. Trace, as several other nodes, outputs side in a random manner. You can provide user checkbox to fix it himself when generated result is bad. But often you can automate process. Simplest way is: Group primitives by normal: known-to-be-opposite; spread angle: close to zero. Zero is prone to floating point errors and may not group some of reversed prims. Reverse grouped prims. Delete the group. We don't want to supply our user with weird groups and useless attributes. side_gotchas.hipnc
  3. Turn off back-faces with Display Options (D key) > Optimize > Culling > Remove Backfaces option. Modeling is always side-aware, and default Houdini display makes user think it's not.
  4. Open Windows/Hscript Textport (Alt+Shift+T) and change location to target network. Then use opadd command with -e option: / -> cd obj/geo1/ /obj/geo1 -> opadd -e polyextrude It will add old polyextrude node to the network at (0, 0) coordinates. If it was placed too far or under existing node and you cannot find it, search window (Ctrl+F) or tree view (Shift+W) can be useful.
  5. Not a PySide2, just an ordinary HOM error. Try "hou.selectedNodes()[0]". hou.selectedNodes() returns tuple containing node objects: (node0, node1, ...). If you need first element from it (node0), use hou.selectedNodes()[0]. If one node is selected, it will be tuple of one element: (node0, ), so, you still need to access it like a tuple. If nothing is selected, empty tuple will be returned (,) and accessing it's first element will raise an error. You may want to add a check for it's content, for example "if hou.selectedNodes():" block will work.
  6. 1. Fix overlaps. or 2. Since you use boolean, slice boxes with a plane using another one. It will output proper geometry from beginning. sorting_issue_fix.hipnc
  7. if (isvalidindex(arr, find(arr, value))) { do this }
  8. Here is simple version based on Python implementation. // Primitive wrangle. // http://preshing.com/20110831/penrose-tiling-explained/ int pts[] = primpoints(0, @primnum); vector a = point(0, "P", pts[0]); vector b = point(0, "P", pts[1]); vector c = point(0, "P", pts[2]); float g = (1 + sqrt(5)) / 2; vector p = a + (b - a) / g; vector q = b + (a - b) / g; vector r = b + (c - b) / g; #define RED true #define BLUE false #define SAME @group_reversed #define REVERSED !@group_reversed void triangle(vector a, b, c; int red_or_blue, same_or_reversed) { int prim = addprim(0, "poly"); addvertex(0, prim, addpoint(0, a)); addvertex(0, prim, addpoint(0, b)); addvertex(0, prim, addpoint(0, c)); setprimgroup(0, "red", prim, red_or_blue); setprimgroup(0, "reversed", prim, same_or_reversed); } if (@group_red) { triangle(c, p, b, RED, SAME); triangle(p, c, a, BLUE, SAME); } else { triangle(r, q, a, RED, REVERSED); triangle(q, r, b, BLUE, REVERSED); triangle(r, c, a, BLUE, SAME); } // Lengths of virtual edges to group for dissolve later. setdetailattrib(0, "virtual_edge_long", distance(a, c)); setdetailattrib(0, "virtual_edge_short", distance(p, b)); removeprim(0, @primnum, true); penrose.hipnc
  9. If you have convex volume, there is an easy way of bounding this by connecting scatter points to create paths within the volume. To randomize rotation, use Attribute Randomize node set up to make a random @up attribute. It doesn't do anything with restricting motion in negative y-axis. bound_swarm.hipnc
  10. Posting on forums after hours of unfruitful attempts is the best way to find an answer 2 minutes later by figuring the perfect search keywords or something like that. You shouldn't deny the power of this method.
  11. My needs in SFX are very small, I usually download it from opengameart.org, though it's not an audio site. Never used alternatives, can't compare.
  12. That's equal to 0.00000250448 in normal representation. Pretty common, you shouldn't expect numbers to evaluate into ideal values in Houdini, and everywhere floating-point arithmetic is used. Search for "floating point imprecision", you'll quickly get the basic understanding of the problem.
  13. You still need to use Quaternion to Angle/Axis node after that. In result, you will get the axis multiplied by angle (in radians). Compute length to extract the angle. Normalize it (or divide it by length, same thing) to compute the axis. Alternatively, you can get axis by crossing vectors and normalizing the result and you can get angle by computing arccosine of dot product between vectors. quat_to_aavec.hipnc
  14. @HainesAJ, artifacts still there. Try to add a bit of contrast using bottom bar of Render View: Fuse node recomputes affected points's normals by default. That results in slightly randomized normal directions from irregular topology in places where the new normals was computed. Extruding by such normals will output side surface non-perpendicular to light direction, reducing most of the artifacts. That's an equivalent of adding a bit of inset to extrude: The difference is that the bumped surface will face the light and be lit, sunken surface will backface the light and be shaded. Randomized surface will be lit and shaded randomly.
  15. It's a shading error caused by light direction trying to be perfectly perpendicular to surface. Add a bit of inset for your extrude node or move light/geometry by a small distance from origin or try spherical light.