so what you’re trying to avoid when you’re dealing with mushrooms is a smooth pressure front. the project non-divergent step of the smoke solver computes the pressure field, and when you have areas of high density right next to areas of low density, like at the beginning of a smoke emission, the velocity field is going to be more or less “combed” straight out along the gradient of that pressure. short answer, you get mushrooms.
so what you want to do is mess up that velocity field a little bit in order to encourage smoke to swirl around a bit, along that pressure front. the way i like to do it is in a sop solver. use the sop solver to import the `vel` data from your smoke object. when you jump inside, you’ll see the `dop_geometry` node is importing that field. copy this node and change the geometry data path to `pressure`. we’ll use this pressure field as a mask, so we can only mess with the velocity field exactly along the “edge” of the pressure field. use a volume wrangle on this field to isolate just the edge like so: `@density = fit(@density, 0, 0.1, 0, 1);`. make sure “bind each volume to density” is enabled. now we can scatter points along the “edge” of the pressure field in a scatter sop.
next, use a vdb from particles to create a fog vdb around these points. the goal is to use this field to “punch holes” in the velocity field, like swiss cheese. convert the vdb into a standard volume, then use a volume mix sop to invert the volume (set the mix method to “user”, then value to `1-$V`). then post-add a small amount, like 0.3 or so. what this does is make it so that most of your volume has a value of 1, but the holes will have a value of 0.3. then just multiply this against your `vel` field in another volume mix.
the end result should be that the velocity field has holes punched in it, but only around areas on the edges of the pressure field, which should help break up mushrooms without disturbing the rest of the simulation.