Showing posts with label pyro. Show all posts
Showing posts with label pyro. Show all posts

Wednesday 31 March 2021

flickering pyro - especially after converting particles to vdb

 Say you've made some nice particles and you give them density/burn/temperature and then convert these to VDB fields. You might find they flicker ever so slightly during rendertime. This is to do with a changing grid size. The "fix" is to make a gigantic box shaped VDB that encompasses the area of your particles/sim and plug this into the second input of the VDB from Particles node. Now the grid is fixed and you shouldn't have any more related flickering!

Pro tip from Walter.

Wednesday 27 November 2019

adding noise/field effects in certain areas

Lifted from the Houdini help page.. Useful for localised noise/breakup

You can attach DOP nodes that modify velocity fields, such as Gas Turbulence, to the fourth ("Advection") input of the Pyro solver node. Most field-modifying nodes have some way to scale the effect by a mask field.
Create a geometry object in the shape of the area you want to affect.

Convert geometry to a fog volume - use an isooffset

In the DOP network, add a SOP Scalar Field node after the Pyro object.
  • Turn on Use SOP Dimensions.
  • Set the SOP path to the path of the fog volume object (for example /obj/mask_object). Make sure Use Object Transform is on.
  • Set the Data Name to something indicating the purpose of this field, for example NoiseMask.
This attaches the fog volume as field data on the Pyro object with the given name.

Create a Gas Turbulence node and connect it to the fourth ("Advection") input of the Pyro solver.


  • On the Bindings tab, set the Density Field to the name of the mask data, for example NoiseMask. The effect of the node is multiplied by the value of this field.
  • Use the controls on the Turbulence Settings tab to control the amount of turbulence added.

Thursday 18 April 2019

PYRO DIY 2019

The pyro setup tools have changed a little bit in Houdini 17..

Here's a refreshed outline of what you need to make a setup from scratch.

  1. Create something to emit the pyro. You'll eventually be turning it into a volume, so keep that in mind.
  2. Plug your emitter object/points into a Pyro Source node. 
  3. Optional, but usually a good idea - Connect an attribute randomise node and randomise Density and Temperature
  4. Use a Point Wrangle to randomise pscale with your favourite function (or don't)
  5. Connect a Volume Rasterise Attribute node and specify  Density, Temperature and V (for velocity) as the things you want to rasterise. Now you have some volumes which will act nicely as sources for smoke. Label them with nulls (SOURCE)
  6. Before we jump into simulating, there are two more things we need to make to help along things. A box that encompasses the volume of the entire sim and a box that roughly covers the volume of the first frame of your sim. Label them with nulls( BOUND and START for example)
  7. Create a dopnetwork. Inside, make a Pyro Solver. This is the brains of it all.
  8. The first input into the solver should be a Smoke Object. For testing purposes use a higher division size, maybe 0.1, which represents 10cm as a single voxel. In the "size" boxes, use an expression bbox("../../START",D_XSIZE) and respectively the D_YSIZE, D_ZSIZE 
  9. For the centre, use the expression centroid("../../START", D_X) and D_Y, D_Z
  10. The rest of the Properties tab can usually be left as default.
  11. In the Creation tab, set the Creation Frame to the first frame where your source appears. You may or may not want to have Solve on Creation Frame ticked on. See what works for you.

  12. The second input into the solver is the Gas Resize Fluid Dynamic.
  13. The Max Bounds tab is what we're interested in first. Set the type to "From Object" and navigate to the BOUND object you created in step 6. This stops the simulation from going nuts and out of bounds.
  14. Back in the Bounds tab, you might have to play around with the padding values. Generally the closer to zero, the less extra work the solver has to do.
  15. Let's skip a few inputs of the solver. The last input will be the source volumes. Add a Volume Source node and navigate to your SOURCE object (step 5) You could have this connected to the Dopnetwork as one of the inputs, but lately I tend to keep those clear (you might have many sources etc..)
  16. In the Volume tab, press the + button. You'll want to add the "density", "temperature" and "v" from your SOURCE. Label the target fields "density", "temperature" and "vel" respectively. The first two are scalar values & vel is a vector one.You could leave out temperature and velocity if your sim doesn't really require it, but I find a little bit of temperature helps gets the sim moving.
  17. Hit play, or click on a frame (this is faster, as having to display each frame slows down Houdini a little) in the timeline & wait a little bit. Something should have happened!

  18. The sim probably looks a little simple. We can disturb the velocity or temperature to make it look more interesting now. This is what the third input is for. You can plug in Gas Disturbance, Gas Turbulence and a few other nodes to do the trick here.
AND THAT'S IT.. A simple and clean pyro setup.

Monday 25 June 2018

Gas field only in specified area. Stolen from the Sidefx site

  1.  In the DOP network, add a SOP Scalar Field node after the Pyro object.
    • Turn on Use SOP Dimensions.
    • Set the SOP path to the path of the fog volume object (for example /obj/mask_object). Make sure Use Object Transform is on.
    • Set the Data Name to something indicating the purpose of this field, for example NoiseMask.
    This attaches the fog volume as field data on the Pyro object with the given name.
  2. Create a Gas Turbulence node and connect it to the fourth ("Advection") input of the Pyro solver.
    • On the Bindings tab, set the Density Field to the name of the mask data, for example NoiseMask. The effect of the node is multiplied by the value of this field.
    • Use the controls on the Turbulence Settings tab to control the amount of turbulence added.


      Important thing to note - by default the control field will not be 100% in control.. You'll see some "leakage" of turbulence. This is because the Control Influence is set to 0.5 by default.. Whack it up to 1, and maybe tweak the remap-graph to fine tune the effect of the turb/whatever.

Monday 17 July 2017

pyro - "custom wind volumes"

Sometimes you want to have pyro behave a certain way in a certain area. Eg.  the smoke should go from left to right, then suddenly shoot upwards after a few seconds.

Instead of fiddling with the advection or velocity updates, it's a bit simpler to create a separate pyro source that only emits velocity.
Simply create a source as you normally do, but remove it's density & temperature. Remember to scale these to zero in the DOP area too!

Tuesday 20 June 2017

Pyro UPRES

Setup a Pyro as you would normally..This will be your low res sim. In a Geo sop somewhere, make a DopIO node and choose the pyro preset to make sure you're importing all the required fields from the low res sim. You could file cache this out..

Then..make a new Dop network. Inside this, create a smoke object and plug it into a Gas Upres node.
Point the Gas Upres node's Initial Data/Low Res Sop Path to a DopIO node you made earlier. Alternatively if you've cached it out to VDBs or bgeo.sc's you can switch the source to "file" and point it to that cache.


I've found that putting a copy of your low res sim's Source Volume helps a lot. Plug that into the last input of the Gas Upres. Switch it's Velocity setting to COPY, since you'll want to copy it from the lowres sim.

You might have to play with the smoke object's initial size settings, so that it encompasses your entire sim size. Oh - and change the division size to your desire resolution..we are upres-ing after all.

Mess around with extra dissipation or turbulence in the Gas Upres node...

That should be it.

Monday 19 June 2017

Pyro.. without shelf tools

Setting up Pyro manually...


  • You'll need to plug your emitter geometry into a Fluid Source node. You might want to turn off empty interior. As always, label with a null. OUT_SOURCE. Add a scalar volume and label it temperature. Your pyro won't react properly to buoyancy otherwise. THANKS HOUDINI.
  • It's a good idea to create two bounding boxes - one for the source, one for the padding. Make the padding way bigger than the source, freeze the time so it doesn't jump around in the simulation. You don't have to freeze the source bounding box as the solver only takes the first frame anyway. Label them with nulls, with something like OUT_BOUND and OUT_PAD.

  • Inside a dopnetwork -
  • You need a Source Volume node. use your OUT_SOURCE as your volume path. Initialise it to Source Smoke. Set the Velocity to Add. Otherwise it will just keep overriding the velocity.
  • You need a Smoke object. You might as well link the Division Size to the same parameter in the Fluid Source you created earlier. For the size and centre parameter boxes, use these respective expressions with the relevant paths and axis variations - 
bbox("../../geo1/OUT_BOUND",D_XSIZE)
centroid("../../geo1/OUT_BOUND",D_X)

  • In the Creation tab, you'll probably want to tick ON Solve on Creation Frame. This gives the system some density on frame 1, so it won't immediately shrink and implode on itself.
  • Next you need a Gas Resize Fluid Dynamic node. This just keeps track of the size of the simulation. Tick ON Clamp To Maximum, set it to From Object and point it toward OUT_PAD. Nice and easy, no expressions required. You still might have to faff with the padding values in the Bounds tab....
  • Lastly, but not least - you need a Pyro Solver node. Plug the Smoke Object into the first input, the resize into the second and the Source Volume into the last.
That should all work! The Solver contains most of the turbulence/shaping controls for the simulation.
You now have a basic pyro setup without using shelf tools. YAY.