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

Community Reputation

1 Neutral

About Shalinar

  • Rank

Personal Information

  • Name Chris Burgess
  • Location Los Angeles
  1. Thank you, this worked perfectly. Time to go explore the *toolutils modules etc...!
  2. Thanks F1! Experimenting with that now. I always wondered how the Tools tab was used. The documentation is pretty basic and doesn't address a lot of the advanced options for power users. Do you have a reference for this tab? My google-fu is weak here, since searching for the "tools" tab doesn't help much considering a lot of people use "tool" interchangeably with "node/asset/hda/otl".
  3. I believe in the File Merge node, you should change your Merge Variable to be WEDGENUM to keep the naming consistent, then you can merge based on your WEDGENUM in your filepath. The File Merge is going to try to replace every instance of your Merge Variable with the values in the Merge Range (start to end by increment). So your starting value should be your lowest seed value and the end value should be your highest seed value (not 1 and 1 as yours are now ). Then just make sure to set Missing Files to No Geometry so it doesnt error out for inevitable missing files in the range from start value to end value. I just tested this with a simple scene: had a cube, sphere, and pyramid written out with a switch controlled by $CLUSTER variable (0=cube, 1=sphere, 2=pyramid). Then I used the File Merge node with Merge Variable set to CLUSTER and read them in with the same variable, setting the Merge Range to (0, 2, 1), and Missing Files to No Geometry -- that way, when I deleted the file where $CLUSTER=1, files 0 and 2 still imported just fine So you can see here I just have the cube and pyramid being read in without error. You'll definitely need the same for your particles
  4. Hi everyone, I'm trying to have my Python Module in my HDA place another node right below my asset on creation. So my OnCreation script runs my python module from disk, which has the following code: pos = first_node.position() second_pos = (pos[0], pos[1] - 2) second_node.setPosition(second_pos) This does nothing. The second node is always created near (0, 0) in the network editor. But if i run those lines in the Python shell in Houdini, it works just fine. So that tells me that the OnCreated scripts don't wait for the HDA to actually be placed into the scene before running, despite what the docs say (a problem I've run into before). My solution to this was to use hdefereval to wait to run the code until the event loop was idle. This shows promises of working, but I'm running into issues now. The code I'm trying is: pos = first_node.position() second_pos = (pos[0], pos[1] - 2) hdefereval.executeDeferred("second_node.setPosition(second_pos)") but the problem here is that when it goes to execute the code, the variables no longer exist, and the code fails because "Name 'second_node' is not defined". But I use a custom 123.py script every day that has the exact line hdefereval.executeDeferred("hou.hscript(code)") where "code" is a pre-defined variable, and hdefereval has no problem using that variable when it goes to execute. So I'm not really sure what the problem is here. What is the best way to move a node using Python? (and if you know how to get my hdefereval call to work, that'd be even better!) Thanks, ~Chris
  5. Sorry yeah updated my post above
  6. Okay so after doing some testing, it seems that the problem is created when the Voronoi Fracture creates edges where the incoming geometry does not have planar faces. So basically, if you just append a Divide SOP before doing anything else, you're good to go. The issue you had with the pig's head was just that your Divide SOP was only going into the Voronoi Fracture node rather than also feeding into the Iso Offset SOP. voronoi_issue_fix.hip
  7. Bump. Wedge ROP is not good enough for what I need. I'm building out a whole custom ROP loop node set, like the For Loop in SOPs. But every way I try to get a parm to re-execute a button's callback script, I get the "Recursion in parm callback" error. Which is annoying, because I know there's a recursion in the parm callback. That's exactly what I want lol. Is there any way around this? EDIT: I suppose one way would be the Shell ROP, but I'd rather do it all through Python than having extra nodes laying around in my ROP loop. Thanks, ~Chris
  8. Or if you're like me and you're local-variable-phobic, you can just type in the attribute as a VEXpression into the Wire Radius field. Eg; "@Cd.r"
  9. Hello, My next project is to create a custom "For Loop" in ROPs, and I'd like to be able to get that familiar colored "blob" around my loop nodes, just like the For Loop nodes in SOPs. But I haven't been able to find how that blob is actually being created. The docs refer to it as a "blob" that can be toggled using the "convex hulls" display option. However, my searches through the HOM haven't turned up anything related to this. My next step was to find the creation scripts for the For Loop SOP and see how it's being done there. But the creation scripts are either compiled, or I'm looking in the wrong place because I can't seem to find them. Does anyone know how to create that blob around my own nodes? It's very visually helpful. Thanks, ~Chris
  10. Sorry for the panic, Michael was right, they were spare parameters. Some team members weren't sure the difference between "Edit Parameter Interface" and "Type Properties" menus. Once I figured out they were trying to add parameters to their HDAs through the Edit Parameter Interface, I explained the difference then added a couple lines of code to our publication system to make sure the parameters would stick no matter which method they chose Whew!
  11. Hi Everyone, We're having a major problem at work. A couple of our artists have OBJ-level digital assets that they've created, with lots of custom parameters. These digital assets are installed in their current hip files. When we use the Operator Type Manager to copy or duplicate the asset to another directory/version up, the new asset loses all its custom parameters, even after using Save Node Type and Match Current Definition. We've tried everything we can think of, but once we try to copy or duplicate the asset, all the parameters get deleted. Has anyone else run into this? And what's the solution? Thanks, ~Chris
  12. I do believe that will work! Thanks, I'll test it out in my full setup.
  13. Hi everyone, I'm trying to find all the points on a piece of geo whose normals all point within a certain ratio of another geo's... so basically find all the points of one geo that are "facing" another. The attached file is what I've worked out, but there has GOT to be a better way than that. It's so slow, and I disabled the AttributeVOP that's doing all the work just so it will load for you. What I'm trying to do is loop over all the points in geo A, and for each point in A, compare its normal to the normal of every point in geo B. If the point's maximum "match" goes beyond a certain threshold, then delete that point. I'm pretty sure this is a horrible way to set this up, but I really haven't come up with anything better. Does anyone have any tips for solving this issue? Thanks, Chris facing_ratio_test.hipnc
  14. Idk if you've already solved this, but it should be relatively easy and super duper fast to do in VOPs. I haven't looked through that other thread, but off the top of my head you could do the following: 1. Give all your B points an attribute initialized to 0 (let's say "matched"=0). 2. In VOPs, find the closest B point to the current A point, and measure it against your "matched" attribute (eg, 'And "matched" < 1'). 3. Then just set the closest B point's "matched" attribute to 1, so it will fail the logic test in step 2 the next time around and won't get paired again. Hope that helps
  15. Ok I just realized that using a UVTexture SOP set to Perspective From Camera works, although that seems like it's overriding the UVs... As long as it works though, that's all I need