Here is the result of a long process of research I have done over time. I was looking for a way to make a scene with nearly unlimited numbers of highly detailed flames. This is rendered in Eevee, taking about 9 seconds per frame at 1080p on my 5060.
This render doesn’t contain a single smoke simulation, this is made entirely using procedural textures. This means I can quickly place flames and smoke exactly where I want them and see the result instantly without baking.
Here are the elements that are duplicated across the scene. The textures are randomized per flame so there is no repetition.
At first, I tried volumetric flames. This did look good, except that each additional flame I added lowered performance, until it eventually crashed. I managed to get a much better performance using fake volumetrics with multiple textured planes. This renders really fast (in Eevee) for how good it looks.
These flames don’t emit any light by themselves, so I fake it using a large number of point lights. I still manage a good performance, because most of them don’t have shadows (not needed, as they affect either small areas near the flames or huge areas that are entirely lit anyway).
–
When making procedural fire textures, a lot of people’s first thought is to texture the opacity of the fire. I find what works much better is to distort the texture coordinates. I start with a spherical gradient texture, squish its coordinates a bit to shape it into an egg / candle flame like shape:
Then, I alter the coordinates of that gradient with a color noise and a linear light node. This causes the smooth gradient to become jagged as it gets distorted into the shape of the noise. I then make the noise move upward over time and this gives the flame effect.





