Creating Visual Effects for Environment (Smoke, Fire, Dust)
Smoke from a chimney, fire in a fireplace, dust from a character's feet while running — these are ambient VFX that the player sees constantly, in the background, throughout the entire session. This is why they are critical: the brain quickly notices something wrong in a looping effect that repeats every 3 seconds. And this is why their performance is more important than a one-time explosion — they work continuously.
Smoke: Why Volume is More Important Than Detail
Smoke in games is a balance between believability and performance. Photorealistic volumetric smoke (through Volumetric Clouds or custom ray-marching) is expensive even on PC. For most games, billboard-based smoke with the right parameters looks good enough at the cost of just a few draw calls.
Key parameters for billboard smoke in Particle System or VFX Graph:
Flipbook animation — smoke texture should be flipbook sprite sheet, not static image. Minimum 4×4 = 16 frames, so the cycle is not obvious. In VFX Graph: Output Particle Quad with Flipbook Player block, Flipbook Size corresponds to sprite sheet size. Frame Blending (subframe interpolation) is critical for smooth smoke: without it, frame transitions are visible as flicker, especially at low animation frequency.
Rotation and turbulence. Smoke particles should slowly rotate as they rise. Angular Velocity over Lifetime in Particle System or Set Angle over Lifetime in VFX Graph. Random initial rotation (Start Rotation: Random Between Two Constants) prevents synchronous pattern.
Color and opacity by height. Smoke at base is dark, dense. When rising — lightens, becomes transparent. In Particle System: Color over Lifetime gradient. In VFX Graph: Set Color over Lifetime + Gradient or Graph by Age/Lifetime parameter.
Blending mode — Premultiplied. For soft smoke effects, Premultiplied blending works better than Alpha Blend. Premultiplied avoids "black outline" around smoke particles when overlapping with bright background — visible especially in sunny scenes. In URP Particle Lit or Particle Unlit shader: Surface Type = Transparent, Blending Mode = Premultiply.
Fire: Layered Structure for Realism
Convincing fire rarely consists of a single Particle System. Standard structure:
Layer 1 — flame core. Small, bright, fast particles at the base. High emission rate, small radius, short lifetime (0.3–0.5 sec). Color: white → yellow. Additive blending.
Layer 2 — main flame. Medium particles moving upward with turbulence. Flipbook fire texture. Lifetime 0.8–1.5 sec. Color: yellow → orange → red. Opacity to zero by Lifetime.
Layer 3 — smoke over fire. Separate Particle System, activating at the height where flame ends. Slower, larger particles. Gray color. Alpha Blend.
All three layers are different Particle System components on one GameObject. In Inspector, you can easily enable/disable them independently. In-game, they activate together through one ParticleSystem.Play() on root component with Include Children.
VFX Graph for fire gives opportunity to add Collision with scene SDF: fire particles reaching a wall "stick" to it and burn across the surface. This requires setup: SDF Asset must be generated through VFX SDF Baker for static geometry, or use Dynamic Collider for physics objects.
Dust and Contact Particles
Dust is ambient particles (dust in air) plus contact particles (dust from steps, hits, sliding).
Ambient dust: hundreds of slow, nearly invisible alpha-thin particles drifting in random directions. Point is not the dust itself, but the feeling of air in space. Often forgotten because it is inconspicuous. But its absence makes the room's air sterile. Particle System: emission rate 20–50 per second, Start Speed 0.01–0.1, Start Size 0.01–0.05, very low Start Color Alpha (5–20 out of 255).
Contact dust (from steps): Particle System activated through Animation Event on footfall frame. When configured correctly, the character literally "raises" dust with each step on ground. The material the character walks on determines which VFX to activate — through PhysicMaterial tag or through Raycast and Material tag comparison.
Optimizing Ambient VFX
Main mistake is leaving Culling Mode in Particle System on Automatic or Always Simulate. For ambient effects, correct: Culling Mode = Pause And Catch-Up or Stop Emitting when outside camera frustum. This is set in Particle System Main module.
For LOD: distant smoke and fire sources should switch to simplified shaders or sprite animation through LOD Group. In VFX Graph there is no built-in LOD — you need custom VisibilityController, which changes VFX Asset or its parameters depending on Distance to Camera.
| Effect Type | Timeline |
|---|---|
| One ambient effect (smoke or fire) | 1–3 days |
| Complete environment set (fire + smoke + dust) | 5–8 days |
| Contact particles system (steps, hits, sliding) | 3–5 days |
| Optimization of existing VFX for mobile | 2–4 days |
Cost — after discussing platform, number of simultaneous sources, and style references.





