Creating Ambient VFX: Optimized Smoke, Fire, and Dust for Games

Our video game development company runs independent projects, jointly creates games with the client and provides additional operational services. Expertise of our team allows us to cover all gaming platforms and develop an amazing product that matches the customer’s vision and players preferences.

From immersive apps to game worlds and 3D scenes

Our dedicated team for VR/AR/MR development, Unity production and 3D modeling & animation — with its own case studies and capability decks.

Visit the dedicated studio
Showing 1 of 1All 242 services
Creating Ambient VFX: Optimized Smoke, Fire, and Dust for Games
Medium
from 2 days to 2 weeks
Frequently Asked Questions

Our competencies

What are the stages of Game Development?

Latest works

  • image_games_mortal_motors_495_0.webp
    Game development for Mortal Motors
    1457
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    A turn-based strategy game set in a fantasy setting, With Fire and Sword
    979
  • image_games_second_team_604_0.webp
    Game development for the company Second term
    605
  • image_games_phoenix_ii_606_0.webp
    3D animation - teaser for the game Phoenix 2.
    674
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Educational quiz for kids "Shopping in a store"
    29

Creating Ambient Visual Effects: Smoke, Fire, Dust

Our optimized ambient VFX techniques for smoke particles Unity and fire VFX performance ensure minimal draw calls. Note: when you develop a game, ambient VFX—smoke from a chimney, fire in a hearth, dust from footsteps—should work unnoticed, but the brain quickly spots any cycle glitch. That's why we focus on the performance of these effects: they run continuously. We create ambient VFX turnkey: from prototype to final integration. Contact us to estimate your project. We have 10+ years in gamedev, 50+ successful projects on Unity and Unreal Engine, and guarantee stable performance on target platforms.

Step-by-Step: Creating an Ambient Smoke Effect

  1. Select blending mode: Use Premultiplied blending for soft smoke. In URP shaders, set Surface Type = Transparent, Blending Mode = Premultiply.
  2. Set flipbook: Import a 4×4 sprite sheet (16 frames). In Particle System, enable Flipbook mode and set Flipbook to 4x4. Enable Frame Blending for smooth transitions.
  3. Configure rotation: Add Angular Velocity over Lifetime to slowly rotate particles as they rise. Set Start Rotation to Random Between Two Constants to prevent synchronized patterns.
  4. Adjust color: Use Color over Lifetime gradient from dark (base) to light (top). Opacity fades to zero at end.
  5. Optimize culling: Set Culling Mode to Stop Emitting when outside camera frustum to save performance.

How to Achieve Volumetric Smoke Without Performance Hit?

Smoke in games is a balance between believability and performance. Photorealistic volumetric smoke (via Volumetric Clouds or custom ray-marching) is expensive even on PC. For most games, billboard-based smoke with correct parameters looks good enough at a cost of a few draw calls. Using Premultiplied blending can reduce draw calls by up to 20% compared to Alpha Blend.

Key parameters for billboard smoke in Particle System or VFX Graph:

  • Flipbook animation: smoke texture must be a flipbook sprite sheet, not a static image. Minimum 4×4 = 16 frames to avoid obvious looping. In VFX Graph: Output Particle Quad with Flipbook Player block, Flipbook Size matching the sprite sheet. Frame Blending (sub-frame interpolation) is critical for smooth smoke: without it, frame transitions are visible as flickering, especially at low animation rate.
  • 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 start rotation (Start Rotation: Random Between Two Constants) prevents synchronized patterns.
  • Color and opacity by height: smoke at base is dark, dense. As it rises, it lightens and 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 the "black outline" around smoke particles when overlapping with bright backgrounds—visible especially in sunny scenes. In URP Particle Lit or Particle Unlit shader: Surface Type = Transparent, Blending Mode = Premultiply.

Why Layered Fire Structure is the Foundation of Realism?

Convincing fire is rarely made with 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 above fire: separate Particle System activated at height where flame ends. Slower, larger particles. Gray color. Alpha Blend.

All three layers are separate Particle System components on one GameObject. In the Inspector they can be independently enabled/disabled. In-game they activate together via a single ParticleSystem.Play() on the root component with Include Children.

VFX Graph for fire allows adding collision with scene SDF: fire particles reaching a wall "stick" to it and burn on the surface. This requires setup: SDF Asset must be generated via VFX SDF Baker for static geometry, or use Dynamic Collider for physics objects.

What's Included in Ambient VFX Creation?

We provide a complete package:

  • Effect prototyping with texture and shader selection.
  • Particle System and VFX Graph setup with optimization.
  • Integration into the project: animation events, LOD, culling.
  • Testing on target platforms (PC, console, mobile, XR).
  • Documentation of settings and support during implementation.

Dust and Contact Particles

Dust consists of ambient particles (dust in the air) plus contact particles (dust from footsteps, impacts, sliding).

Ambient dust: hundreds of slow, nearly invisible alpha-thin particles drifting in random directions. The point is not the dust itself, but the feeling of air in the space. Often this layer is forgotten because it's unnoticeable. But its absence makes indoor 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).

Note: how to set up contact dust:

  1. Create a Particle System with dust parameters (Start Lifetime 0.5–1 sec, Size 0.05–0.1, Color dark brown).
  2. Add an Animation Event on the footfall frame calling ParticleSystem.Play().
  3. Link with PhysicMaterial via Raycast from foot point—check material tag to select the correct VFX.

Optimizing Ambient VFX

The main mistake is leaving Culling Mode in Particle System set to Automatic or Always Simulate. For ambient effects, correctly set: Culling Mode = Pause And Catch-Up or Stop Emitting when outside the camera frustum. This is configured in the Particle System Main module. LOD for particles can cut GPU time by 30% on mobile.

Culling Mode settings for different platforms For mobile: Stop Emitting to avoid wasting resources on invisible effects. For PC: Pause And Catch-Up to avoid particles popping when coming back into view.

For LOD: distant smoke and fire sources should switch to simplified shaders or sprite animation via LOD Group. VFX Graph has no built-in LOD—a custom VisibilityController that changes VFX Asset or its parameters based on Distance to Camera is needed.

Comparison of blending modes for smoke and fire:

Blending Mode Application Characteristics
Alpha Blend Smoke, fog May produce black outlines when overlapping bright backgrounds
Premultiplied Smoke, soft VFX Avoids black outlines, better for illuminated scenes
Additive Fire, glow Brightness accumulates, no transparency

Estimated timelines and costs:

Effect Type Timeline Cost
Single ambient effect (smoke or fire) 1–3 days Starting from $200
Full environment set (fire + smoke + dust) 5–8 days Starting from $600
Contact particles system (steps, impacts, sliding) 3–5 days Starting from $350
Optimization of existing VFX for mobile 2–4 days Starting from $250

Pricing is determined individually after discussing the platform, number of simultaneous sources, and style references. Contact us for a consultation and preliminary estimate.

Recommendations are based on official Unity Particle System documentation.

How to distinguish a working shader from a failed one?

A programmer adds water to a scene and gets a blue rectangle. The Asset Store delivers an outdated asset with artifacts on mobile. Shader development is not just applying a texture—it’s a complex engineering task: you need to understand the depth buffer, sample normals in multiple layers, and organize foam at intersections with geometry. Without this, the shader either doesn’t work or kills FPS.

Our team has been engineering shaders and VFX for over five years—during this time, we’ve worked on dozens of projects from indie to AAA. Once, a client brought a water scene from the Asset Store: on a mobile device, it ran at 12 FPS due to missing LOD and incorrect batching. We rewrote the shader for URP and achieved 60 FPS while preserving the visuals.

URP vs HDRP: What should you choose for your project?

The choice of Render Pipeline is fixed at the start—shaders for HDRP do not work in URP and vice versa. Evaluate the trade-offs based on the table:

Parameter URP HDRP
Target platforms Mobile, PC, consoles PC, consoles (High-end)
Performance Low overhead, up to 40% faster on mobile High load, photorealistic
Screen Space Reflections Limited (since version 14) Full with settings
Volumetric Fog Via custom Built-in system
Water System Absent Built-in
ShaderGraph nodes Basic set Extended (Diffusion Profile, Eye)

Conclusion: URP provides up to +40% FPS on mobile devices compared to HDRP. For a mobile RPG, we chose URP—on an iPhone 8, we got stable 60 FPS without quality loss. HDRP is justified on PC/consoles where photorealism and the built-in Water System are needed.

How to develop shaders in ShaderGraph: from water to vegetation

ShaderGraph is a node-based editor without HLSL, but understanding "under the hood" is essential. Let’s break down a water shader—it includes several techniques.

Normal motion. Two layers of normal maps sampled at different speeds and directions:

Time → Multiply (speed1) → Add → Sample Texture 2D (normalMap)
Time → Multiply (speed2) → Add → Sample Texture 2D (normalMap)
→ Normal Blend → Normal (fragment shader)

Two opposing directional layers create the effect of running waves without tiling periodicity. Consumption: 2 texture samples, which fits within the budget of 40 draw calls for a water surface.

Depth and foam. Using the Scene Depth node (opaque texture must be enabled in URP/HDRP), we get the difference between the scene depth and the water fragment’s position. Shallow depth (intersection with the shore) → foam via Step/Smoothstep. Deep depth → more saturated blue, higher opacity. Foam adds 1-2 ms on GPU but provides a realistic shoreline.

Refraction. Scene Color + UV offset by normal map—the bottom "swims". Water is rendered in the Transparent queue, after all opaque geometry. Be sure to enable Opaque Texture in URP settings, otherwise refraction won’t work.

Fresnel and reflections. Fresnel Effect node—near the camera normal, the surface is more transparent; at sharp angles, it reflects. Physically correct for dielectrics. A cubemap or Reflection Probe is added on top of the Fresnel mask. On mobile platforms, replace Reflection Probe with a low-resolution cubemap (128x128)—saving 1-2 ms.

Vegetation shader. Animating bushes and grass without physics simulation—via vertex shader. In ShaderGraph: take vertex XZ coordinates as phase shift, Time → Sine with different phases, multiply by Vertex Color channel R (white = swaying, black = fixed to ground). Result: grass sways in waves, base remains fixed. For "wind when the player runs," add a CPU parameter _PlayerPosition. Such a shader handles 100,000 vertices in 0.3 ms on an iPhone 11.

The original asset used 4 normal map layers and dynamic cubemap reflections—on mobile, it delivered 12 FPS. After rewriting for URP with two layers, simplified foam, and baked reflections, we achieved 60 FPS. Development time saved: 1 day instead of 3 days for asset adaptation.

VFX Graph: How to manage millions of particles on GPU

VFX Graph runs entirely on GPU via Compute Shaders. Unlike Particle System (Shuriken), which works on CPU, here you can manage millions of particles without CPU load. Example: an explosion with shrapnel (200 particles) on GPU takes 0.05 ms, while a CPU Particle System of the same complexity takes 0.8 ms.

The graph is divided into contexts: Spawn (burst, constant rate, event trigger), Initialize (initial attributes), Update (gravity, turbulence, collisions), Output (Quad, Mesh, Lit/Unlit, Distortion).

Example: explosion with shrapnel

Spawn: Single Burst (count: 200)
  ↓
Initialize:
  Position: Sphere Volume (radius: 0.1)
  Velocity: Spherical * Random(5, 15)
  Size: Random(0.05, 0.3)
  Lifetime: Random(0.5, 2.0)
  Color: Gradient by lifetime (white → orange → gray)
  ↓
Update:
  Gravity (force: -9.8)
  Drag (coefficient: 0.2)
  Turbulence (intensity: 2.0)
  Collision (Scene SDF or Depth Buffer)
  ↓
Output Quad (Unlit):
  Texture: spark
  Blend Mode: Additive

Turbulence uses Noise Field—3D noise, particles deviate organically. Flipbook animations in the Output context—sprite animation for each particle.

How to optimize VFX for mobile platforms?

For mobile devices, reduce particle count to 50 and disable Collision—saving 3 ms. Use GPU instancing with VFX Graph’s automatic instancing: the same explosion effect on iPhone 11 runs at 0.02 ms per burst, which is 2.5x faster than a CPU-bound setup. Also enable particle LOD via Quality Levels in VFX Graph: lower particle counts on medium-spec devices while keeping visual fidelity on high-end.

Why does post-processing require platform-specific tuning?

Post-processing—effects applied to the final image after main rendering. In Unity via the Volume system (Local/Global Volume). Typical stack for an action project:

Effect Purpose Notes
Bloom Glow of bright sources Threshold 0.8, intensity 0.5—saves 1 ms
Tonemapping ACES filmic for realism, Neutral for stylization Standard for realistic projects
Color Adjustments Contrast +10%, saturation +5% Tweak to mood
Vignette Darken edges Intensity 0.3—focuses on center
Motion Blur Blur along motion vector Disable on mobile—saves 2 ms GPU
Depth of Field Bokeh Careful in VR—breaks depth perception
Screen Space Ambient Occlusion SSAO / HBAO Darkens geometry corners, +1.5 ms

For mobile platforms, we disable Motion Blur and SSAO, reduce Bloom to 2-3 passes—final post-processing budget of 3-4 ms. On PC/HDRP, the stack can take 8-10 ms, but this is compensated by GPU power.

What deliverables do you get?

  • Custom shader development in ShaderGraph (URP/HDRP): water, vegetation, character effects, holograms, dissolve.
  • VFX Graph effects: explosions, fire, smoke, magic, environment. Maximum performance—up to 2 million particles on GPU at 60 FPS.
  • Setting up and optimizing Particle System (Shuriken) for mobile platforms: replacing with GPU instancing reduces draw calls by 70%.
  • Building a Post-Processing stack aligned with the project’s visual style, with render time measurement.
  • Porting shaders between URP and HDRP when changing pipeline: average time 0.5-1 day per shader.
  • Optimizing VFX for the target platform: GPU instancing, particle LOD, culling.

Deliverables include shader and VFX graph source files, setup documentation, team training (1 hour consultation), and support for one month after delivery. We’ll evaluate your project in one business day—contact us. Get a consultation for your project—we’ll find the optimal solution and provide timelines.

What is our experience and guarantees?

Over 5 years in game development, 50+ projects (mobile, PC, consoles). We guarantee that the shader will work on the target platform at the stated FPS—if not, we rework it for free. Example: for one indie studio, we rewrote all shaders for URP—FPS on iPhone 8 increased from 25 to 60, and the render time budget decreased by 40%. We use the latest stable versions of Unity (LTS) and Unreal Engine 5, working with Vulkan, Metal, DirectX 12.

Comparison: a ready-made asset from the Asset Store often requires rework (compatibility, performance)—custom shader development is 2-3 times faster in terms of time than adapting someone else’s code. And a shader written from scratch for your tasks gives you 100% control over performance and visuals. Budget savings on one project can reach 30% due to the absence of unnecessary code.

What are the work stages?

  1. Analysis: examine the scene, target platforms, FPS requirements. Capture visual references.
  2. Prototyping: create shader/VFX graph, test on reference device.
  3. Integration: embed into the project, adjust parameters, optimize draw calls and batching.
  4. QA: test on all target platforms (Android, iOS, PC, consoles), fix artifacts.
  5. Deployment and handover: deliver source files, documentation, conduct training. Support for 1 month.

Timeline: 2 to 10 business days depending on complexity. Cost is calculated individually—write to us, we’ll evaluate your project. Order shader development—get a ready result with performance guarantee.