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

103 Excellent

About acey195

  • Rank
  • Birthday 01/10/1991

Contact Methods

  • Website URL http://www.twandegraaf.nl/

Personal Information

  • Name Twan
  • Location France

Recent Profile Visitors

5,936 profile views
  1. I guess you could check for every patch if the area is equal to the width*height, if not its an "L" shape and should be split. Fixing the corner shapes is probably the biggest challenge of this pattern, while also maintaining the larger block shapes.
  2. you can also just type: @group_toExtrude = (primvertexcount(0, @primnum) < 4); //this is safer because the group will always be created (even if it is empty) that way you do not have issues using the groupPromote operation for instance //or even simpler (run over prims): @group_toExtrude = (@numvtx < 4);
  3. That one is deprecated now though, use len() instead, in the way dedeks put it. the "i[]" prefix to @ is just a way to cast the attribute as an integer array. the "Ambiguous Call" warning that you get basically tells you that you need to be more specific. see this page: http://www.sidefx.com/docs/houdini/vex/snippets (about 1/3rd to halfway down the page)
  4. Yeah, also found this out at some point. Although it sort of makes sense, as a flat plane is not a convex shape. You probably just want to use a Triangulate2D in this case
  5. nice work! like the blending of the profile as well personally I would choose for controlling: the radius(or diameter) of the tire and then set the amount of segments; which then calculates the gap. rather than what you have now, controlling: the length of the segments, the gap; which then calculates the radius of the tire. That way you can switch out patterns and still have them fit on the same wheel/vehicle.
  6. They did it! Thanks Sesi Houdini 16.0.597 Added VEX functions for working with edge groups: expandedgegroup inedgegroup nedgesgroup setedgegroup Tue. May 2, 2017
  7. Some may already have seen it on SideEffects.com, (although they missed the 3rd part there) but the 4th part in the series is now out as well (since 2 weeks) So to be complete, here is the last part of the series for now : https://80.lv/articles/landscape-and-material-pipeline-of-ghost-recon-wildlands/ Hope you liked it!
  8. The third article in this series : https://80.lv/articles/vegetation-generation-in-ghost-recon-wildlands/ for some context on the Houdini relevance to this topic: The vegetation placement is greatly assisted by it, in combination with hand editing vegetation zones. Grass types have been adjusted using it. The LOD scaling values have been evaluated by it. As a bonus, for those who haven't yet seen it on the Sidefx website, a small cameo of the Houdini team in the video.
  9. Just saw your interview on cgsociety, just wanted to say it was an awesome read
  10. if you want to check the updated values in the same node that you changed them in, the only way is to use binding: printf("%d\n", @attribute1); // prints old value @attribute1 = 1337; //new value printf("%d\n", @attribute1); // prints new value //setprimattrib(0, "attribute1", @primnum, 1337); // will only be applied AFTER the node is cooked, not internally, so you can not fetch the value afterwards. // this is done with regards to "parallelizability" as with setprimattrib() you could potentially adjust the value of of a different primitive than itself, // that becomes problematic if multiple calls of the code try to adjust the same primitive attribute. /* /////////////////////////another option: float currentValue = prim(0, "attribute1", @primnum); printf("%d\n",currentValue); // prints old value currentValue = 1337; //new value printf("%d\n",currentValue); // prints new value setprimattrib(0, "attribute1", @primnum, currentValue); */ Note that with binding, you can only load and write attributes of the same class that the wrangle is running in currently (the "run over" parameter) so running over points, you will load and write point attributes with bindings for example.
  11. https://80.lv/articles/ Technical articles on game dev, including Houdini
  12. Yesterday 80Lvl released a new post: https://80.lv/articles/procedural-technology-in-ghost-recon-wildlands/ It covers some of the design processes that were used and how Houdini assisted in them. The project itself has been a blast to work on! </plug> So I hope you like the article
  13. Well if the points are already fused it is fine, but as soon as Houdini is redrawing primitives it could remove certain edges from an edge group, in certain cases.
  14. Assuming you are using the H16 Boolean: you probably want to scroll down and enable some of the checkboxes of the "Output Edge Groups" in particular "A-B Seams" is probably one you want to use. You can also use it to output a multitude of Primitive groups, which you could manipulate with nodes like "Group Promote" then you can simply feed in the "abseams" group or a custom (edge)group in your bevel sop instead of hand-selecting the groups in the viewport. Keep in mind that certain operations, such as the "fuse" node may remove elements from edge groups.
  15. I think you just have to add "raise" in front of the line to get what you want : raise hou.NodeError(‘your error message’) raise hou.NodeWarning(‘your warning message’)