Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


vtrvtr last won the day on February 16

vtrvtr had the most liked content!

Community Reputation

74 Excellent

1 Follower

About vtrvtr

  • Rank

Personal Information

  • Name
  • Location
  1. VEX and HOM in external editor

    Virtually any IDE will have support for those. Specially HOM. You can just add the path to the python modules and the IDE will do everything else. Here's Juraj blog post about setting HOU up in Visual Studio Code. VSC also has a VEX extension. I know Sublime also has one. Guillaume's tool is also pretty good for in-DCC coding.
  2. There's no straight forward way to do A. You can hack it with python, but it's likely not the most practical approach. Your best bet is to export the geometry and reload it after wards, which is what you want in B anyway. Unfortunately there's also no support for something like that out-of-the-box. But you can script it, here's a way node = hou.pwd() geo = node.geometry() ## PARAMETERS ## rop = node.parm("rop_node").evalAsNode() # Get the node you want to export your geometry from rop_output_template = rop.parm("sopoutput").unexpandedString() network_destination = hou.node("/out") # Where it will create the ROPs to export rop_type = "geometry" # The type of node used to export. Usually 'geometry' ## FUNCTION ## for take in hou.takes.takes(): new_rop_name = "{}_exporter".format(take.name()) if not network_destination.node(new_rop_name): new_rop = network_destination.createNode(rop_type, new_rop_name) # Create rop nodes new_rop_output_path = rop_output_template.replace("\$ACTIVETAKE", take.name()) new_rop_output_path = new_rop_output_path.replace("\$OS", rop.name()) new_rop.setParms({"soppath": rop.path(), "sopoutput": new_rop_output_path, "take": take.name()}) # Now that we have exporters, we'll have to read them back new_read_name = new_rop_name.replace("exporter", "reader") if not node.parent().node(new_read_name): new_read = node.parent().createNode("filecache", new_rop_name.replace("exporter", "reader")) read_file_name = rop_output_template.replace("\$OS", new_read.name()) new_read.setParms({"take": take.name(), "file": new_rop_output_path, "loadfromdisk": 1}) In the example file I'm using it on a python sop, but you can put it on a shelf tool. take_export_of.hip
  3. I always thought that wasn't a thing, but it turns out it is. What you want is http://www.sidefx.com/docs/houdini16.5/hom/hou/evaluatingParm
  4. In a wrangle in detail mode you can use `f@max_y = getbbox_max[1]` to get the maximum y value Then in your parameter you can can use `detail(0, "max_y", 0)` in your promoted source max max_y_in_vop_odf.hip
  5. If the polyreduce options are not enough, generally there's no way around this. If you really must have perfect topology simply don't use a vdb or retopo after it. You can also try instant mesh, which is conveniently packed into the game dev tools. https://www.sidefx.com/tutorials/houdini-game-dev-tools-instant-meshes-bridge/
  6. 2D Bullet Solver

    What "doesn't work"? I don't think you ever want to set transforms unless you want to specifically set the position/rotation etc. for whatever reason See here just 0 the Z axis and cancelling any rotation gain https://giant.gfycat.com/ImpoliteWeakKingbird.webm
  7. What you mean by "named"? If you mean they have an attribute called "name" (or any attribute for that matter), that's already a group for all intentions and purposes. If you really want to make it a normal group, you can wrangle something like setprimgroup(0, s@name, @primnum, 1); As for setting the value, something like i@attrib = atoi(s@name[-1])
  8. Not sure I completely understand, but take a look. May I add if you want just the tube, a simple polywire sop after you have your line will have the same effect vector_orient_odf.hipnc
  9. What Sepu means is something like this https://giant.gfycat.com/AnotherBlindBooby.webm If you are going to make a lot of copies you might want to instead save the variations to disk and them play with the unexpandedfilename instrinsic. Which can be controlled with vex and it's generally more robust Also, you might want to take a look at https://www.motionoperators.com/, which is a toolset that makes things like this easier copy_random_geo_odf.hip copy_different_geo_odf-2019-01-16_11.25.10.mp4
  10. vex - arrays

    I don't think so, but it's relatively straight forward exploiting the sort functions i[]@arr1 = {0, 30, 1, 47, 48}; i[]@arr2 = {0, 41, 48, 1341, 1}; function int[] sorted(int arr1[]; int arr2[]) { int _arr1[] = sort(arr1); int _arr2[] = sort(arr2); int result[]; foreach(int i; _arr1) { foreach(int j; _arr2) { if (i == j) push(result, i); } } return result; } i[]@arr_sorted = sorted(i[]@arr1, i[]@arr2);
  11. Volumes dissipating

    A couple things 1. By initial data, it does mean initial data, as in "only in the first frame". That's why usually you set up a fluid simulation using a Volume Source DOP, which will usually add more volume every frame 2. The reason your sim "dissipates" is simply because the turbulence spills it outside of your container. If you turn on "Closed Boundaries" in the smokeobject or turn off the turbulence, you'll see your smoke is fine 3. You can check exactly what your pyro "sees" as collision by activating the collision visualization in the smoke object node https://giant.gfycat.com/GoldenMajorAlpinegoat.webm Finally, as suggestion, try to avoid using absolute paths in your HIP files. Also avoid spaces in paths in general
  12. Saving areas of a field of objects

    Very similar to 3dome, but still slip_alembic_odf.hip
  13. Mass create nodes from tab menu

    It's possible, but quite cumbersome because of how HDAs still use a xml to define these things. Also, it won't work with nodes that only have the category hardcoded (usually older nodes). It should work with the newer gamedev tools import xml.etree.ElementTree as ET def create_all_nodes_by_category(network, category): installed_hdas = hou.hda.loadedFiles() for hda in installed_hdas: definitions = hou.hda.definitionsInFile(hda) for definition in definitions: try: xml_content = definition.sections()["Tools.shelf"].contents() root = ET.fromstring(xml_content) tool = root.find("tool") submenu = tool.find("toolSubmenu").text if submenu == category: network.createNode(definition.nodeTypeName()) except: pass create_all_nodes_by_category(hou.node("/obj/geo1"), "GameDev") https://streamable.com/4yxqx
  14. Vellum Hair _ deforming geo

    Here's a simplified file deform_vellum-2018-10-23_11.55.25.mp4 vellum_deform_odf.hipnc
  15. Vellum Inflate From Flattened State?

    Here's the hip with animating the restlength in a geometry wrangle vellum_inflate_odf.hipnc But you're correct you need some data to know when to stop, otherwise the length will just get bigger and bigger