Jump to content


  • Content count

  • Donations

    0.00 CAD 
  • Joined

  • Last visited

  • Days Won


Everything posted by Atom

  1. That is what .sim files are for. You are essentially caching the state of the simulation. You should be able to resume from the last saved .sim frame number. When you resume, resume from the next frame number, not frame #1.
  2. FLIP- fluid going thru collision geometry

    You could take a look at this setup. I believe it tries to remove all velocity motion and simulate at world origin. Then the translation is re introduced to the final output to track the moving object.
  3. Here is another attempt to control the carve value. I promoted the i@id, from the dopnet from points to primitives to avoid any changing @primnums. int duration = 240; // ten seconds @ 24fps. $FEND int travel_time = 96; // frame count to traverse length. i@on_frame = int(fit01(rand(@id),6,(duration-travel_time))); i@off_frame = i@on_frame + int(fit01(rand(@id+801),6,travel_time)); if ((@Frame>=i@on_frame) && (@Frame<=i@off_frame)) { f@carveValue = fit(@Frame,i@on_frame,i@off_frame,0,1); // or 1,0 } else { f@carveValue = 1.0; // or 0.0. } ap_CheckEvery10SecondsAndConnectOrDisconnect-elaborated.hipnc
  4. Here is an attempt to remove and establish the line between the points. This is every 24 frames. It leverages your idea of programming the Carve with an on off value. ap_CheckEvery10SecondsAndConnectOrDisconnect-elaborated.hipnc
  5. Making tidal wave

    That is a modified version of Hernan's source file here,
  6. Some of the pyro clusters aren't even visible

    Here is the final HIP from the video tutorial. Maybe you can swap the rubber toy with your comet? ap_pyro_cluster_for_keyframed_geo_072617.hipnc
  7. Making tidal wave

    You can have the boolean seam result hang out in space. Animate the grid to track the bottom of the wave and animate the particle activation when you need to spray more particles. ap_WaveDeformerTestQuickMask_edit2.hiplc
  8. Some of the pyro clusters aren't even visible

    There are a few problems. One is that you need to Object Merge Into This Object or your fuel supply may be generated outside of a cluster bounds. You are currently basing your fuel supply on the cluster points. You should be basing your fuel supply on a single point that is moving along the cluster line. Consider using a carve followed by a delete all but point zero to achieve this or extract the centroid from the moving geometry to generate the fuel. Drop down a bounds node around all the cluster points and expand it on the Z axis in both directions. Supply this bounding geometry to the fluid resize node. This will make sure the master domain that the cluster's reside within, are indeed inside the possible simulation box. Make sure your (10,10,10) cluster scale value is actually big enough to contain your initial fuel supply.
  9. The basic concept is to use a RaySwitch. Plug the Incandescent into the giColor of the switch. This way you can still use the emission color on the rsMaterial and then another emission color from the rsIncandescent. In this mode, you can really over crank the rsIncandesent Intensity. Think of the Alpha value as a noise fall off. As Intensity goes up, try turning alpha down to tame fringe noise.
  10. Motion Blur on Switcher Cameras

    Shift one frame before you need to then discard that frame during the compositing process. Maybe render the first frame of the camera switch with motion blur turned off..?
  11. Thanks, for the tip, I'll give that a try next time.
  12. Does anyone know how to install fonts on Ubuntu 18.04? I used the standard right-click Open With Fonts, and the INSTALL button. After a reboot, Gimp can see my new font, but Houdini can't?
  13. Raining Fuel (No Clustering)

    Now with synchronized large chunk fracture. I've activated Impact records on the PopSolver and use that to generate all the impact points. There is no constraint network, only managing the i@active attribute for the pre-fractured pieces. Trying to keep the scene as light weight as possible. Timed metaballs appear, hold in place, and disappear at the impact points to introduce force on the newly activated pieces. ap_raining_fuel_trails_fracture_111919.hiplc
  14. A simple exercise to deposit fuel at impact points that are generated from a particle system. No clustering used. ap_raining_fuel_111719.hiplc
  15. Raining Fuel (No Clustering)

    Here is a modification where the impact particle is set to slide. A trail sop is used to generate a line length, for the sliding particle, which is turned into a tapered polywire. The sliding polywire becomes the fuel source. ap_raining_fuel_trails_111819.hiplc
  16. Raining Fuel (No Clustering)

    Here is an update with obstacles, sliding fuel sources, randomized fuel shape and strong prevailing winds. ap_raining_fuel_111819.hiplc
  17. Timeline markers?

    Yes, if you only put a single set of keyframes on the NULL. When you select the NULL, keyframes from other objects are no longer displayed in the timeline, but the NULL keyframes will be displayed instead. You can use CTRL-RIGHT/LEFT arrow to jump to them. It does introduce the selection dance to your workflow, but is an existing way to emulate that feature. I personally don't miss timeline markers at all.
  18. Timeline markers?

    You can always key frame a null, those values will show up in the time line. You can think of those as markers. Select the null and use the jump to next keyframe button.
  19. That is a fun one to play around with.
  20. Selection To Object Merge

    This has come up quite often for me when working with imported static FBX files. Often you will get every little piece of a model inside it's own geo object but you really just want to work with them all as a single mesh. This script will examine your node selection and create a new /obj level object that will object merge in all the nodes selected into a single merge. Then you can just use that single node to represent your model. (i.e fix up normals, detail materials, prepare for simulation, export etc...) import hou THRESHOLD = 0.015 def luminance(pixel): return (0.299 * pixel[0] + 0.587 * pixel[1] + 0.114 * pixel[2]) def is_similar(pixel_a, pixel_b, threshold): return abs(luminance(pixel_a) - luminance(pixel_b)) < threshold lst_user_selection = hou.selectedNodes() if len(lst_user_selection): # Make a geo node that will ObjectMerge in all the nodes in the selection. node_geo = hou.node('/obj').createNode("geo","geo_merge_result") if node_geo: node_geo.moveToGoodPosition() #node_geo.node('file1').destroy() node_merge = node_geo.createNode('merge') node_merge.moveToGoodPosition() # Create a normal to fix up everything after the merge. node_normal = node_geo.createNode("normal","normal1") node_normal.setInput(0, node_merge) # Create a NULL for our output placeholder. node_normal.setDisplayFlag(True) node_normal.setRenderFlag(True) node_normal.moveToGoodPosition() # Create a NULL for our output placeholder. node_null = node_geo.createNode("null","OUT") node_null.setInput(0, node_normal) # Create a NULL for our output placeholder. node_null.setDisplayFlag(True) node_null.setRenderFlag(True) node_null.moveToGoodPosition() for (n,node) in enumerate(lst_user_selection): print node.name() node_temp = node_geo.createNode("object_merge",node.name()) node_temp.parm('objpath1').set(node.path()) node_temp.parm('xformtype').set(1) node_temp.moveToGoodPosition() assign_by_node_color = True if assign_by_node_color: # Use the color of nodes to inherit the same @shop_materialpath. s = "rs_DEFAULT" if is_similar(node.color().rgb(), (0.584,0.776,1.0), THRESHOLD): s = "rs_blue3" if is_similar(node.color().rgb(), (0.6,0.6,0.6), THRESHOLD): s = "rs_grey5" if is_similar(node.color().rgb(), (0.145,0.667,0.557), THRESHOLD): s = "rs_green5" if is_similar(node.color().rgb(), (1.0,0.725,0.0), THRESHOLD): s = "rs_yellow6" if is_similar(node.color().rgb(), (0.996,0.933,0.0), THRESHOLD): s = "rs_yellow5" # Create a wrangle to define our shop_materialpath. node_wrangle = node_geo.createNode("attribwrangle","attribwrangle1") node_wrangle.parm('snippet').set('s@shop_materialpath = "/shop/%s";' % s) node_wrangle.parm('class').set(1) node_wrangle.moveToGoodPosition() node_wrangle.setInput(0, node_temp) # Create a color to match the node color. node_color = node_geo.createNode("color","color1") node_color.parm('colorr').set(node.color().rgb()[0]) node_color.parm('colorg').set(node.color().rgb()[1]) node_color.parm('colorb').set(node.color().rgb()[2]) node_color.moveToGoodPosition() node_color.setInput(0, node_wrangle) node_merge.setInput(n,node_color) else: node_merge.setInput(n,node_temp) In this image the white areas were not part of the selection. The color of the nodes in the selection is forwarded into the object merge as an additional color node. There is also an attribute wrangle added inline to assign the @shop_materialpath based upon the color detected. This can convert objects with same exact material referencing multiple copies of the same material into a single /shop path material. You can adjust to /mat if needed.
  21. viscosity problem

    Try setting Particle Motion/ Reseeding/ Surface Oversampling = 36.
  22. Implement Kernel (maths) in Vex

    I guess basic velocity damping, in a GeometryWrangle can stop the expansion process, but it produces a strange dissolve effect, as an artifact. I couldn't seem to get the GasDamp node to have any effect.
  23. Implement Kernel (maths) in Vex

    Thanks for the file. Do you have any Solver configuration tips, that will limit expansion? It seems to expand forever...
  24. Volume - Outline Not Visible?

    Have you added any density to your empty volume? Volumes also don't show up, if you are in wireframe mode.
  25. You can also try using a pointreplicate, around your original large chunk points. When many points are around a single area, the fracture will surround them with smaller pieces. Another way is to leverage the debris, system, which releases particles around the seams of the larger chunks. You can copy smaller random rocks shapes to those generated points.