Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


Everything posted by Atom

  1. Closing an eye?

    I have a character model who has eyes. The eyes are locked open. What would be the easiest way to simulate an eye blink or closing of an eye?
  2. Closing an eye?

    Close, a dragon's head. All triangles.
  3. Split Curve Trail decay

    As is, you can use it to highlight a font.
  4. right vex code for velocity to particles

    It looks likes you are setting the velocity after the simulation. That won't have an effect on the particles inside the popnet. Try moving the popnet to the end of your network chain.
  5. generate to fill up wire curves in tube meshes

    What if you try generating them in a straight line, then use the pathdeform node to bend them along the curve?
  6. On the PopSource you have to set your source emission type to points, not scatter. On the Birth tab place the expression on Impulse Activation, not Constant Activation. Set the impulse count to 1 and constant count to zero. ap_Question_emitParticleAtFrame.hiplc
  7. You can use an expression on the activation field. Try something like this... if(($F==10) || ($F==15) || ($F==25),1,0) The double pipe symbol means "or".
  8. Slow-motion Tire Burnout

    Here are a few more links relates to tires. https://www.sidefx.com/forum/topic/67731/?page=1#post-287800
  9. KineFx loop animation

    You might want to try something like this but use a Timeshift node instead of Retime. Shift time so the second input to the skeletonblend will be the final pose that you want to loop upon. You can even drop down a RigPose node to tweak the final pose for best blending. Animate the skeleton blend bias at the right time to take on the final pose.
  10. Dynamics Tendrils Anemone

    That setup is easy to modify. Here I've converted the leaf to tubes and added a single collision object. ap_vellum_anemone.hiplc
  11. The use case that I am pursuing is using the Labs toolset to export the VDB points (not volume data) as a hbjson file. This is readable using the Labs Niagara plugin for Unreal. It's a way to export points from Houdini pyro, and use them in a particle system point source inside of Unreal. Check out Simon's tutorial on the topic. https://www.sidefx.com/tutorials/realtime-fx-with-niagara-ue4/ You can download the project files and review his HIP setups.
  12. Export houdini to unreal engine

    I don't know of any direct pipeline for Unreal to render volumes from Houdini. The Unreal Niagara particle system can accept a Houdini generated point cache to drive the Unreal volumetrics. You may want to search for tutorials on Houdini to Niagara. I'm in the process of trying this pipeline, myself, so I don't have a solution yet. Houdini fractures and Unreal Alembic imports don't like each other. This is because Houdini will generate n-gons. Unreal can only import triangles and quadrilaterals. I use this setup to detect and convert n-gons into triangles. The bad candidates are detect inside an attributeVop running over primitives. i@group_candidates = 0; int num = primvertexcount(0, @primnum); if(num > 4) { // Not acceptable by Unreal. i@group_candidates = 1; } ap_rbd_fixup_for_unreal_alembic.hiplc
  13. I agree, that is a candidate for bug report. Go ahead and unlock the HDA and move to the bottom of the network. You'll discover that your attribute is copied to the guide geometry, but not the Output node. To continue your work, try using an attribute transfer after the trailsource to forward your attributes along. Or give this a try...
  14. node info stops working

    I'm experiencing quite a few interface bugs in H18.5 release. I'm getting a bug when I double click to dive inside, I am quickly shown the new network, then Houdini errors out and pops me back up to OBJ.
  15. Membrane tearing

    That one is a fun one to play around with. Stacked torn footage.
  16. I would take a look at my two blend sources and make sure they share the same anchor/pivot point. I know skeletonblend actually will resize one skeleton to another, so check the scale as well. Keep them the same scale.
  17. When Unreal hangs with no progress, it means the Alembic file is not usable by Unreal, even if other software can read it. One thing to try immediately is to export a short frame rage to keep the file size small until you figure out the attributes. Unreal can't handle a 4million polygon object, it is only a game engine. Get rid of Cd, move uv to points, polyreduce and try again with a limited frame count. I have been able to export 360-480 frame Alembic to Unreal. Don't use Skeletal or Static mesh, use the experimental geometry cache.
  18. Timeline cache not updating when changing sim

    That's completely normal. With certain setups I am constantly clicking on the Reset Simulation button. It's annoying to have to jump up a level to do that. DOPs can't tell if a parameter that feeds the network has changed. So if you change, for instance, @pscale on the points that you supply to the network, that will not alter the generated cache, at least not until you issue a "rewind". In your case you have started the DOP simulation on frame #3. Try changing your start frame on the playbar to 3, instead of 1. Then a rewind might work for you. Or, change your start frame to #1 and time shift the final to frame #3 after you have locked in the simulation.
  19. Perfectly sharp ridge

    When I render the scene, all I get is the ground plane. I notice Mantra complains about not being able to find the font geometry.
  20. I'm certainly no expert on this topic, but I have been trying the same thing. I want to get my Houdini animated deforming mesh inside of Unreal for rendering. As far as FBX goes, you need to supply a bone system with the deformed mesh. This is basically for characters or machines that you have pre-rigged. I don't really export anything from Houdini using this format. This basically leaves only the experimental alembic cache as the animated option for Houdini->Unreal. The Alembic support for Unreal is fragile. It can not accept any polygons that are not triangles or quads. You need to prepare your geometry output with that in mind. I use this simple wrangle to subdivide any primitives that are over the vertex count. Another thing that will hang up the Alembic import on Unreal 4.25.3 is the presence of excessive attributes or groups. You don't need normals, and that seemed to hang up my import until I figured that out. You only need @P and @uv, both on points. Make sure to check "Recompute Normals" on the Unreal import dialog box. If you do wish to keep your normals, use an attributePromote to migrate them to points instead of vertex, which is typical for FBX. This does add weight to the final file size, however, and you can recompute them on import. NOTE: if you do supply groups, they show up as material inputs inside of Unreal. For fracture sources I recommend keeping inside and outside groups. Both the dragon and the fracture were exported as mesh based, non-instanced, Alembic caches from Houdini. The dragon is a 480 frame cache that is about 210 MB in size. The wall is 480 frame cache that is 643Mb in size.
  21. You can just use the deforming geometry tool twice on the same deforming geo source. Make one collider inverted. ap_Flip_InvertedCollision_Problem.hiplc
  22. MTL To Redshift Material

    I put together a simple script to read the .mtl file, typically associated with a .obj, and create a Redshift material for each entry it finds in the .mtl with a map_Kd token. A Redshift material is created and a texture map is linked to the diffuse color with the filename for the map populated with what is found in the .mtl entry. This is useful when importing architectural .obj files that typically have a large number of materials associated with them. Expected .mtl format of supported tokens. #newmtl _4_2_ <- Material name. #Ns 96.078431 <- Specular intensity #Kd 0.640000 0.640000 0.640000 <- Diffuse color. #Ks 0.500000 0.500000 0.500000 <- Specular color. #Ni 1.000000 <- Index of refraction. #d 1.000000 <- Opacity. #map_Kd 21_budova/_4_2_.jpg <- Map name. #map_Kn 21_budova/_4_2_n.jpg <- Map name. The result of one-click texture mapping. Here is the Colosseum auto texture mapped. The path to the .mtl file and texture path is hard coded. Place the code in a shelf tool button and adjust the path to point to your .mtl file. mtl_to_redshift_061618.zip
  23. One way to avoid substeps with fast moving sources is to create a trail and submit the trail, along with the lead, as the source. This can help fill in the gaps.
  24. Try deleting the Output node. When an output node is present, it is assumed that is the final output, regardless of the Display flag. Most of the time, you want that in an HDA so it always functions, even if you forget to move the flag before saving it.
  25. Hi All, I put together a small shelf tool that populates a subnet with an object for each .bgeo.sc file found in a supplied folder path. The end goal was to leverage s@instance for file based objects. s@instance can only reference objects, not disk files. In this hard coded example file I am fetching 144 debris shards into 144 geometry objects which instancing can reference. # Populates an existing subnet with a geometry node for each file found in the supplied folder. # The File node inside the default geometry node is populated with the filename from the folder. # The end result is you get an object for each disk object in a folder. import os, re def returnValidHoudiniNodeName(passedItem): # Thanks to Graham on OdForce for this function! # Replace any illegal characters for node names here. return re.sub("[^0-9a-zA-Z\.]+", "_", passedItem) def returnFilesLike(passedFolderName, passedFileExtension = ".obj"): result = [] for file in os.listdir(passedFolderName): if file.endswith(passedFileExtension): result.append(os.path.join(passedFolderName,file)) return result def createSubnetOfFileNodes(passedPath, passedType): root = hou.node("/obj/geo_debris_container") # Make sure it exists before running, choose your own name. if root != None: lst_files = returnFilesLike(passedPath, passedType) if len(lst_files): for i,file in enumerate(lst_files): # Create a file node for each geometry in our list. local_name = os.path.basename(file) local_name_only = os.path.splitext(local_name)[0] geo_name = returnValidHoudiniNodeName("geo_%s" % local_name_only) geo_name = geo_name.replace(".","_") node_geo = root.createNode("geo", geo_name) if node_geo: # The first child is a default File node. n = node_geo.children()[0] if n: # Assign this filename as the filepath for this file node. n.parm("file").set(file) else: print "No subnet container found to contain generated results." createSubnetOfFileNodes ("F:/Keep/Models/Rocks/debris_sharp",".bgeo.sc")