Jump to content


  • Content count

  • Donations

    10.00 CAD 
  • Joined

  • Last visited

  • Days Won


Everything posted by acey195

  1. Houdini 19 Wishlist

    more toggle's for group nodes (like the group combine SOP) to interpret missing groups as an empty group (so you can choose for it to return a warning, instead of an error. While I know there are workarounds, its quite annoying if your delete node cleans a group on empty geometry and then the group combine returns an error :P) for the "Convert line" SOP to be able to maintain vertex ordering (instead of basing the new vertex ordering, on the input point numbering) (sorting by vertex number does not work in cases where you have closed primitives, resulting in the "last" edge of an original primitive to have a reversed direction) Edit: Update the find shortest path, so it can output the start point attribute even when you are not outputting paths (this way you could use this reference attribute to transfer attributes to the flood-filled network from the closest start point: (right now its possible to work around this by setting the output paths to "from EAch start to any end" and then write some vex to find the lowest value in the cost array, that is not -1, and use that to link the points, but its a bit clunky ) Some heavy nodes (in particular the remesh node) could make more use of multithreading, right now, cooking times can be massively decreased by splitting the mesh (using some kind of internal connectivity logic) and using a for loop, even without compiling sometimes as is the case here: and because of how the remesh works it keep those isolated pieces isolated anyways, so "free" perf yay!
  2. What's the problem with n-gons?

    Generally speaking completely flat N-gons are fine (as long as you keep them in houdini for logic manipulation :P) if they get very concave they might get rendering issues though as it will do internal triangulation for the rendering, that in some rare cases will create self-intersecting geometry (only on the render side) So for render performance keeping your geometry as n-gons does not really help.. HOwever, in terms of RAM in your Houdini session it can save a lot of data.
  3. python date

    You probably want to store the time in a previous node, that does not "recook" between your outputs you can use a detail (global) variable for that, if you need code reference for that, look for: hou.node and hou.geometry in the documentation then you can reference this stored value in your rop nodes, that should not change, unless you change the input, above the node that stores the time.
  4. Why is bool type not available in VEX?

    would actually not be opposed to that idea..
  5. Why is bool type not available in VEX?

    It would add a new data type to take into account for the compiler and memory management. Generally speaking, having if checks in shader like languages is not extremely efficient anyway, so optimizing for them might also not really matter that much. I for one looove the fact that you can just add/multiply bools (ints) together, where with most other languages you cannot. I'm happy to pay a tiny bit extra RAM for that. If you have a lot of && checks, you can just multiply them all together, and if one of them was 0, the result is 0, whereas if you have a lot of || checks, you can also just add them all together and check if the sum of that, is larger than 0 and you can still use bitwise operators on ints to cover all the functionality bools have like: |= &= ^
  6. what's the Geometry traversal's application in houdini?

    why not you could do something like (creating a prim attribute from points data): //run this over primitives, to calculate the perimeter using the point data. //note that this is not the most efficient way to do this, but as an example to what options this gives you: int pts[] = primpoints(0, @primnum); float sumOfTheDistances = 0; for(int i=0; i < (@numvtx-1); i++){ vector pos0 = point(0, "P", pts[i]); vector pos1 = point(0, "P", pts[i+1]); sumOfTheDistances += distance(pos0, pos1); } f@perimeter = sumOfTheDistances; // create a primitive attribute or the other way (creating a vertex attribute while processing prims): //run this over primitives to calculate the same thing a polyframe would, but as a vertex attribute, so you do not have to make the points unique: int verts[] = primvertices(0, @primnum); vector forwardDir; for(i = 0; i < (@numvtx-1); i++){ vector pos0 = point(0, "P", vertexpoint(0, verts[i])); //get the point data, from the vertex (just to demo the conversion, vector pos1 = point(0, "P", vertexpoint(0, verts[i])); //the "P" data should also be fetchable here using vertex() instead of point() forwardDir = normalize(pos1 - pos0); setvertexattrib(0, "N", verts[i], -1, forwardDir); } setvertexattrib(0, "N", verts[-1], -1, forwardDir); //put the same data on the last vertex, as the second to last one note that I have coded this "blind" (did not test it) so hopefully the code runs, but there could be a typo somewhere
  7. what's the Geometry traversal's application in houdini?

    Hey, you mean this? : https://www.sidefx.com/docs/houdini/vex/geometry.html it allows you to run your vex code over for example primitives, while retrieving(or changing) data on points or vertices among other things
  8. Average Normal

    Your code does look ok, but it does rely on the N attribute to exist on primitives already (usually they are on points or vertices) so you could also do either vector avgN = 0; for (int i=0; i < npoints(0) ; i++) { avgN = avgN + vector(point(0, "N", i)); } avgN = avgN / npoints(0); or directly fetch the primitive normal with the native function for that: vector avgN = 0; for (int i=0; i < nprimitives(0) ; i++) { avgN = avgN + prim_normal(0, i, {0.5, 0.5, 0.5}); } avgN = avgN / nprimitives(0); but like underscoreus said, the easiest way is probably to use an attributepromote SOP (combined with a facet SOP to generate the N attribute for your points)
  9. (just in case it helps anyone else) Not completely sure, but I think the problem you were having, were the extra spaces in your while condition without brackets, sometimes it does "connect" the operators in unexpected ways. so while(radius < max && count < 20){ might behave differently than: while((radius < max) && (count < 20)){ or while(radius<max && count<20){ (last 2 should behave the same)
  10. I don't think this possible for many people to actually say, since its probably going to be somewhat confidential, but I wouldn't be surprised if its a wide range of versions for larger companies. It would make sense to start with the latest version for a production, especially longer ones. But for ongoing projects, or short projects that rely on things that were created before (on older versions) it make sense to just keep working with what you have.
  11. Maaaybe, I'm not an expert on this topic.. its just what I've heard from colleagues and friends. Perhaps using an intermediary thing, like a webclient would be a work-around for blender. You sacrifice some of the direct access, but you could still make some basic UI to send data (meshes) back and forth https://www.sidefx.com/docs/houdini/hom/hou/webServer/index.html
  12. As a matter of fact, from what I've heard, its actually "legally" tricky to embedd it into open source software.. I believe it would be against Blender's licence agreement if I remember correctly.. but yeah SideEffects made a Houdini engine SDK and documentation for a reason so as long as you are not subverting the licensing system of the plugin, I think you should be fine (This would mean your users would need to get your software as well as a Houdini Engine Licence) and yeah talking about it with SideFX would not be a bad idea either. I think they're always interested in hearing about stuff like this
  13. Switches and loops

    Depending on what you are doing in the loop. if the logic is going to be "compilable", You can also look into the "Invoke" SOP that is a way of reusing a part of network, with a different input (generating a different output) but it only works together with a compiled block as a reference.
  14. Intersect All VEX only works sometimes?

    I think you just need to change the following : float tol = -1; float ttol = -1; then it should find all intersections, even the triangles are at exactly the same height
  15. Random link of interest

    Cool(hot) real-life lava reference
  16. How to practice and get good at Vex?

    I always have the documentation open on my second screen: https://www.sidefx.com/docs/houdini/vex/functions/index.html just to use ctrl+f to find a function related to the task I'm trying to do It also really depends if you are just new to VEX, or scripting in general, in case of the latter (and even in case of the first) we can always recommend looking at Tokeru's guide: https://www.tokeru.com/cgwiki/index.php?title=JoyOfVex
  17. blue "i" on nodes

    I guess its nodes that are "reference copies" you can make them by right clicking on a node, and then under actions edit: The reason you may want to use reference copies, is for when you want 2 nodes to behave exactly the same, but are in different places in your network. The difference with "normal" copies, is that it will also create parameter references for every controlling parameter on the node.
  18. Wrangle ch-slider standard value

    not sure how much help a .hip file is when trying to show you UI things if this is not "working" then I probably do not understand properly what you are trying to do, but here's the same steps with some visuals:
  19. Wrangle ch-slider standard value

    Yup go to edit the node's parameter interface. First check that the value range is not locked, its the small lock icons on the left and right side of the range, about 3/4ths down on the right side panel of the edit parameter interface window. Then go to the 2nd tab on the right panel (Channels), select the parameter you want to edit in the middle panel and type in the desired default value in the right panel
  20. VEX project to a nearest point in surface

    Hey The nearpoint() expression lets you find the pointnumbers of other geometry nearby. *If you instead want to get the closest location on the surface, you probably want to use the xyzdist() function. *Otherwise, if you want to get the position directly underneath (in a specific direction, no matter the angle of the other surface) you can use the intersect() function. https://www.sidefx.com/docs/houdini/vex/functions/xyzdist.html https://www.sidefx.com/docs/houdini/vex/functions/intersect.html
  21. Random link of interest

    For those who want reference for a liquid methane explosion, or are otherwise interested in rocketry. There's many angles, slow motion footage and commentary from someone who knows his stuff :
  22. Covid will delay H18.5?

    They are still working on it (currently) No idea about the release date though.
  23. Grouping unshared "in-line" edges

    Hey Just something I would do in a wrangle or group expression SOP // running over points: @group_entryPt = neighbourcount(0, @ptnum)==2; // then you just add a group promote, converting it to an edge group (with the checkbox ticked of only include complete entities (or whatever it was called, don't have hou open atm )) Edit: That should at least work for the single extreme edge-entry points. For the doubles and up, you probably have to do a bit more, but generally speaking, using the amount of neigbours of a point and the amount of vertices on a point together should work on "2d" geometry, I think but you may have to create the groups directly in vex, to avoid grouping unintended edges. But to avoid selecting edges on both sides of a corner separately, you would have to add additional logic (as soon as you allow those double-edge entry points) if its only 1 and 2 edges you probably can get away with case-by-case handling, if you want to go up to an arbitrary amount of edges, its just will have to get more complicated I guess
  24. Learn Processing before VEX?

    Yes and no. The stuff he teaches is indeed great and some of it will be transferable (at least the basic coding logic) However, the syntax of that language is quite different from Vex, and it would work the closest to Vex, run over "detail (only once)", which while valid for some purposes, is not the most efficient use of VEX. In this case using a Python SOP will be about the same speed, which is probably easier to learn (has more learning resources outside of Houdini) VEX is kind of designed to process existing data, rather than generating everything from scratch. (but note that it CAN do it) When VEX is run over "points" or "primitives", it acts more like a shader, executing exactly the same code for each of them, which allows multi-threading, unlocking its true power. Hope that helps!
  25. Creating smooth curve from imported curve geometry

    Hey, Welcome to Houdini! May I suggest using the convert SOP (converting it to third order NURBS) you may also find it useful to: use the facet SOP using the "Remove Inline Points" toggle and then play with the distance to remove some "oversampling" use the fuse SOP to merge nearby points in corners (to avoid having sharp corners using convert) resample with a large value for "Maximum Segment Length" to reduce the noise in your samples Or alternatively, you can also keep your geometry at polygons with the resample SOP, setting the "Treat Polygon As" dropdown to "Subdivision Curves"