Jump to content

Streak artifact in billowy smoke


Recommended Posts



I am rendering a pyro simulation of smoke, which has the Billowy smoke shader attached.  I keep getting a vertical streaking pattern appearing in the smoke (see the first attachment) and cannot figure how to get rid of it.  These streaks show up in the alpha channel as well.  The viewport render (see the second attachment) actually looks much more like what I would expect, without the streaks.  Does anyone know what causes the vertical streaking in the renders?  What is the viewport doing differently to display the smoke nicer?


I've tried turning up volume quality in the mantra node, turning up the volume filter width, and a few more related tactics.  Doesn't seem to be affected by the sampling, but I could be way off.


My set up is in the attached hip file.  The render I included is frame 197.  I am using Houdini 13.







Link to comment
Share on other sites

I have tried both an area light and a spot light, with and without shadows.  Houdini's support gave some tips, and I am having some success with turning up the disturbance on the simulation and increasing the volume filter width to render closer to what is in the viewport, though upping the filter width can easily get too soft.


Thanks all for the suggestions.

Link to comment
Share on other sites

Volume is far too low a resolution to support the noise that you want to resolve at the sharpness you want to achieve (assuming things here). Unless you manufacture noise in the volume after the sim, you need to increase the resolution. Polishing a turd is a polished turd.

Oh and nothing wrong with manufacturing noise but it requires you to generate the dual rest fields. Google it to see how to set this up. Or you can run an up-res sim afterward if you wish. Those are two of many ways to manufacture noise post-sim.


Steps to reduce artifacts in your scene without changing any of the simulation options:

- No Box filter for low resolution voxel dimension relative to the final pixel size. Use Gaussian with a 1.2 width. Only if your volume is roughly the same resolution as the final rendered pixel do you even dare use the box filter at 1.

- Bypass the Iso Offset SOP in your source volume. It is clamping the resolution of your source way too low. Visible aliasing in your source density in the viewport is a clear give-away that you have too low a source volume. That aliasing reads right in to the simulation. Crap in = crap out.

- Decrease the Division Size on your Smoke Object DOP from 0.4 (166,35,175) to a lower value until you get enough detail in your volume to support the final render resolution. Up to you how low you want to go. At least a voxel size 2x or less the size of the final rendered pixel.

- Do NOT turn off Stochastic Transparency on the Mantra ROP unless you like needlessly long render times and you complain how slow things are only to realize you needed enable said feature and to increase the transparent samples to a reasonable value of anywhere between 8 and 64.

  • Like 1
Link to comment
Share on other sites

What you are witnessing is with your lingering volume being advected is the various filters working away creating patterns in your low resolution density volume. To compound the issue, you are constructing the initial density volume with an Iso Offset SOP at a very low resolution, lower than the base grid size of your smoke simulation. By simply bypassing that Iso Offset SOP feeding in to the Fluid Source SOP, you at least give yourself a fighting chance as you decrease the voxel size in your simulation, your initial density volume will at least keep pace. The way you have it now, not good. Let the Fluid Source SOP with it's channel reference in to the Smoke Object's voxel size created by the Shelf Tools drive things until you know what you are doing and decouple them for more advanced work.


I find these "artefacts" due to under-sampled volumes follow the advection direction (driven by velocity). Because you slowly stop emission part way in, the main advection force is Buoyancy driven by temperature directly upwards (and I mean it is 0,1,0 upwards with no deviation!). You are tearing your low res volume upwards and there is only so much density to go around. Compound that with the slow dissipation of the density and you get what you see.


So you have your first choice here. Because most of the vertical streaking is caused by the remaining temperature driving buoyancy and a straight upward advection, you either:

- increase the rate of temperature reduction via various options on the Pyro/Smoke Solver

- add more turbulence to kick the upward velocities around (changes look)


No increasing the disturbance won't do it by itself. Closely studying where disturbance is applied, you will see there is a density threshold where by 0-threshold is where the disturbance is applied = anywhere there isn't density. You want to kick the buoyancy about inside the density as well so a bit of turbulence can go a long way. What the disturbance was doing was taking your artificially clamped low resolution density and schmearing it around a bit at it's edges. Only goes so far.



The box filter with a width of one is a very harsh filter as well. It will reinforce the artefacts, especially sharpening the corners in your vertically streaking density amplifying the aliasing (stair steping). It is used when your base volume has a voxel size approaching the size of the rendered pixel or smaller. For coarse volumes like the one in your scene, Gaussian with a value of 1.2 is a good choice.


Just fire up Photoshop and given any image with some contrast features, try scaling the image up and try the different filters to see what happens. Different filters can create interesting patterns (moire). Think of Volumes as though they are a thick layer of 2d image planes. Thats why they are also called "grids" or a grid of image planes.

  • Like 2
Link to comment
Share on other sites

One good diagnostic tool to visualize just the density field using the guides as a plane and slide the plane through your volume.


Or cache the volumes to disk as a sequence of .bgeo's, blast away all but the density Volume primitive and use the Volume Slice SOP to inspect the data.


You can also insert a Volume Sample SOP and increase the resolution to say 2 or higher and try out the different filters available to see what if any artefacts this creates on the base grid. Again looking through the Volume Slice SOP.

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...