Image generated with AI
Stylized Smoke & Fire with Geometry Nodes (No Sim Needed)
Diego Cortés
Author
Stylized smoke and fire with Geometry Nodes in Blender needs no simulation: instances, noise and an emissive material deliver an art-driven look with total control and near-instant rendering, with no domains or bakes.
Why Geometry Nodes for stylized smoke and fire
Mantaflow simulations exist for photorealism and they achieve it, but for a stylized aesthetic they are overkill: you set up a domain, wait for the simulation to resolve, bake the frames and tune dozens of parameters before anything resembles what you pictured. With Geometry Nodes you build the effect from pieces you control directly: a curve defines the shape, noise moves the instances and the material decides color and transparency.
Drag a slider and the smoke rises faster; change one value and the sparks spread. Everything updates instantly, with no bake in between, and rendering in EEVEE is cheap enough to iterate. The result is reusable as a node group for any scene.
When NOT to use this method
If you need photorealism, dense volumetric smoke or large-scale effects, a simulation or real volumes is still the right tool. For the stylized realm - cartoon puffs, graphic flames, motion graphics loops and game effects - the instance-based method is ideal.
The base flow: instances along a curve
The heart of the effect is a simple principle: you draw the smoke path with a curve and repeat instances along it. Each puff is instanced, rises and fades; together they create the illusion of a living column.
Create the emitter with a curve and Resample Curve
Start by adding a Bezier curve pointing upward, as if tracing the smoke travel from the fire source to where it dissipates. Inside the Geometry Nodes modifier, add a Resample Curve node: without it, instances spread according to the control points and end up unevenly spaced. Resampling distributes equidistant points, just what you need for an orderly row of puffs.
Instance on Points with low-poly icospheres
With the points ready, plug in an Instance on Points node. Use a low-subdivision icosphere as the instance geometry: it has the rounded shape a smoke puff needs and, being light, keeps the viewport responsive. An Ico Sphere with two subdivisions is usually enough; the material does the rest.
Per-instance variation: seed, rotation and random scale
The most common mistake here is a row of identical spheres that gives the technique away. Break it with a Random Value node using a different seed per instance: vary rotation on all three axes and scale across a range from small to large. To make puffs grow naturally, tie that random scale to each instance life.
Animation: make the smoke rise, expand and fade
A static column is not smoke. Animation arrives in three layers: the displacement that pushes the puffs, the scale that makes them grow and the fade that removes them from the scene.
Movement with Set Position and animated Noise Texture
The Set Position node moves every instance by a vector, and that vector comes from a Noise Texture. Noise evaluated per point pushes each puff differently: some lean left, others right.
Scale across the life of the puff
Real smoke is born small, expands and thins out. You can fake it with the position of each instance along the curve: the ones near the origin are young and small; the ones at the end are old, bigger and almost transparent. A Map Range node turns that position into a scale factor and an alpha value the material will read later.
A time trick: animate the noise offset with the current frame
If you leave the Noise Texture untouched, the effect freezes: the same puff distribution in frame 1 and frame 300. The fix is to add the scene time to the noise offset. A Scene Time node, connected through a Math Multiply node to control speed, makes the pattern travel across frames.
The material: fire that glows without expensive volumes
The material turns gray spheres into fire. The key is combining emission and transparency in a Principled BSDF with the blend mode set up for alpha, so EEVEE respects the transparent areas of the smoke.
Emission and Color Ramp for the flame
For flames, a Color Ramp with three or four stops reproduces the classic gradient: orange-red at the base, intense orange in the middle and warm white at the core. That ramp, plugged into emission, gives the look of bright fire without any heavy volume.
Noise-driven alpha for smoke texture and falloff
Smoke needs uneven transparency. A second Noise Texture, at a different scale from the motion one, modulates each puff alpha: irregular edges, denser areas and a progressive falloff toward the end of the curve. With the position factor from the previous section, the puff stops being a sphere and becomes a cloud.
Glow: the bloom of stylized fire
The halo around the flames is what sells the stylized look. In EEVEE you get it with the engine bloom effect (its location changed with EEVEE Next; check your Blender 4.2 or newer version) or, if you prefer absolute control, with the Glare node in the Compositor applied to the final render.
Sparks and embers: the detail that sells the effect
Fire without sparks works, but sparks bring it to life. In Geometry Nodes they take minutes to add and the eye reads them as real energy.
Small elongated instances with warm emission
For sparks, instance a very small sphere or an elongated cube and give it a warm emission, more yellow than the flame. Being tiny, pure orange emission is enough to make them shine against the smoke.
Faster, more erratic movement than the puffs
Sparks do not follow the smoke curve: they jump. Use a higher-frequency Noise Texture so their displacement is short, fast and seemingly random.
Scale by intent: a few well-placed sparks beat noise
Less is more. A handful of sparks leaving the fire core and dying quickly reads better than a constant rain. Tune the instance count and raise the emission of the ones that remain: the contrast between a few bright points and the soft smoke creates a far more professional effect.
Tune the result to your scene
Before calling the effect done, turn the values you use most into exposed parameters so you can adapt the system to each scene without opening the graph.
Parameters worth exposing
Group the main controls into a Group Input: rise speed, puff density, global scale, flame color and lifetime. With those five sliders at the node header, you can reuse the same system for a candle, a campfire or a meteor trail.
A reusable node group
Select the whole graph and create a node group with a clear name. Rename the inputs with descriptive labels and save the file as an asset blend. Next time you need stylized fire, drag it from the Asset Browser, tweak two or three values and done.
Common mistakes and how to avoid them
These are the failures that show up most when building this setup:
Instances not following the curve: a missing Resample Curve or a Count that is too low. Raise the point count until the column looks continuous.
Identical puffs in a row: randomization is missing. Add Random Value for the seed, rotation and scale of each instance.
Black material or no transparency: emission is off or the blend mode does not allow alpha. Enable emission in the Principled BSDF and configure transparency for the EEVEE version you are using.
The effect freezes: the noise is not animated. Add the scene time to the Noise Texture offset and multiply by a speed factor.
Conclusion
Stylized smoke and fire with Geometry Nodes in Blender proves that not every effect needs a simulation: with instances along a curve, animated noise and an emissive material you get an art-directable, lightweight result ready for motion graphics or games in a fraction of the time. Build the node group once and you own a tool for life.
To keep practicing Geometry Nodes and stylized VFX, explore the curated video tutorials at CGI Academy Hub: a reviewed collection of animation and 3D effects resources to take your projects to the next level.