PyroMetal Documentation
Emitters
Shape-based fire & smoke sources with per-emitter colors, combustion character and pressure chaos.
Simulation
A GPU fluid solver with a physically-inspired combustion model, buoyancy, vorticity and detail turbulence.
Particles
Up to a million sparks and embers per scene — bundles, strands, streaks, trails and fireworks.
Rendering
Volumetric ray-marching, blackbody fire, HDR bloom, a full post-FX suite and HDRI environments.
Animation
Keyframe any parameter with curve editing, then scrub instantly with the baked sim cache.
Export
MP4, PNG sequences, sprite sheets and VDB volumes — with 12 render channels including 6-point lighting.
What is PyroMetal?
PyroMetal is a native macOS application for designing volumetric fire, smoke and explosion effects in real time. It runs a full 3D fluid simulation on the GPU using Metal, renders it with a cinematic volumetric ray-marcher, and exports production-ready output for film, motion graphics and game engines.
Everything is interactive: drag an emitter around the scene, spin sliders while the sim runs, keyframe a burst, and watch the explosion evolve at once. When the look is right, export a seamless-looping MP4, a flipbook sprite sheet, a PNG channel stack or a VDB volume sequence for Blender and Houdini.
Requirements
- macOS on Apple Silicon (M-series). The simulator uses Metal compute and runs entirely on the GPU.
- No internet connection, accounts or plug-ins required. Projects are self-contained
.mfsprojfiles.
How this documentation is organized
- Start Here — install-to-first-explosion in five minutes, plus a tour of the interface.
- Scene Building — every object type you can add: emitters, force fields, effectors, colliders, lights, meshes and materials.
- Simulation — the physics: solver settings, combustion, particles, and the animation timeline.
- Look & Output — rendering, color, post effects, cameras and the export pipeline.
- Reference — performance tuning, keyboard shortcuts, and answers to common questions.
Press / anywhere in these docs to search. Every parameter in the app is indexed — try “vorticity” or “death burst”.
Getting Started
From launch to your first explosion in five minutes.
The launch screen
PyroMetal opens on a project browser with two tabs:
- My Projects — your saved work, shown as thumbnail cards. Click a card to open it, right-click to delete. The New Project button on the right creates a fresh scene.
- Examples — a library of 40+ ready-made effects: explosions, campfires, rockets, fireworks, dragon breath, volcanoes, spell impacts and more. Examples open with autoplay enabled, so they start simulating immediately. They are full projects — open one, inspect how it is built, and tweak anything.
The examples double as templates. Open one that is close to your target effect, save it under a new name (⌘⇧S), and adjust from there.
Your first fire
- Click New Project. A default scene opens with one spherical emitter already burning.
- Press Space to play or pause the simulation. Press R to reset it to the start.
- Drag in the viewport to orbit the camera. The selected object shows a 3-axis gizmo — drag an arrow tip to move it along that axis.
- With the emitter selected, open the Scene tab of the right panel and find the Emission group. Raise Temperature for a brighter, more buoyant flame; raise Smoke for thicker soot.
- Switch to the Sim tab and enable Combustion if you want the full fuel-driven burning model (most examples use it).
- Save with ⌘S. Projects live as
.mfsprojfiles and keep everything: objects, keyframes, render settings and export settings.
Projects, saving and autosave
- File menu: New Project ⌘N · Open… ⌘O · Recent Projects · Save ⌘S · Save As… ⌘⇧S · Home ⌘⇧H.
- Autosave runs every 2 minutes for projects that have been saved at least once — you will see a toast notification when it fires.
- Thumbnails are captured automatically while you work and shown on the project cards.
- Undo / Redo (⌘Z / ⌘⇧Z) covers object add/delete/duplicate and preset changes.
The five-minute workflow
- Block the scene — add emitters, forces and colliders from the shelf at the bottom of the viewport.
- Shape the motion — tune buoyancy, vorticity and emitter outflow in the Sim tab while the sim runs live.
- Animate — keyframe emission pulses on the timeline for bursts and explosions (see Animation).
- Light & grade — set fire colors, environment and post effects in the Render tab.
- Frame & export — compose the shot in the Render Camera tab, then export from the Export tab (see Export).
Design fast, finalize heavy. Work at 64³ or 128³ resolution — the overall motion of the effect stays consistent across resolutions by design. For the final export, pick a higher simulation grid (up to 1024³) in the Export tab; it simulates offline while exporting.
Interface Overview
A tour of every panel in the editor.
Top bar
- Tabs — Viewport (design view), Render Camera (framing view with safe zones) and Export (output settings).
- Transport — a single master ▶︎/⏸ button (Space) drives the simulation and the animation timeline together, locked to one clock. Step advances one sim step while paused; Reset (R) rewinds both sim and timeline.
- Home returns to the project browser.
Viewport
- Orbit by dragging, zoom with scroll/pinch, pan with secondary drag.
- Selection & gizmo — click an object handle to select it. A 3-axis translate gizmo appears: X (red), Y (green), Z (blue). Drag an arrow tip to move along a single axis; drag the center circle to move in the view plane.
- Focus — F frames the selected object, ⇧F frames the whole domain.
- Ground grid and collider wireframes can be toggled from the View menu.
- The white wireframe box is the simulation domain — the region where the fluid lives.
- The HUD shows FPS, grid resolution and the active solver mode.
Scene shelf
The shelf at the bottom of the viewport adds objects — click or drag-and-drop into the scene:
- Emitters: Sphere · Box · Cylinder · Mesh (import a 3D model, voxelized as a source) · Image (a PNG/JPEG emits smoke and fire in its own shape and colors).
- Forces: wind, vortex, turbulence and more — see Force Fields.
- Colliders: sphere, box, or an imported mesh that the smoke flows around.
- Lights: point and directional lights that illuminate the volume.
Inspector (right panel)
Four tabs at the top of the right panel:
| Tab | Contents |
|---|---|
| Scene | The outliner (object list) and the properties of the selected object — transform, emission, particles, colors, everything object-specific. |
| Sim | Domain size & position, physics parameters, the combustion model and grid resolution. |
| Render | Render quality, fire/smoke coloring, visual detail, post effects, lighting and the environment. |
| Perf | Performance switches: resolution, optimizations, solver options, shadow performance. |
Outliner
The Scene tab lists every object in the scene. Each row has, next to the object icon and name:
- Rename — double-click the name to edit it in place. Press Return to confirm, Esc to cancel.
- Lock 🔒 — a locked object cannot be moved in the viewport (its gizmo axes disappear and dragging is ignored). You can still select it and edit its parameters. Great for keeping a finished layout safe.
- Eye 👁 — enables/disables the object. A disabled object stops affecting the simulation.
- Delete 🗑 — removes the object along with its keyframe tracks (undoable with ⌘Z).
Timeline (bottom panel)
- Keyframe lanes for every animated parameter, with a draggable playhead.
- Lane / Curve toggle — Curve mode opens the curve editor with draggable points and per-key interpolation.
- The cache cluster — Bake (⌘B), progress, and the play-from-cache toggle. See Animation & Timeline.
- Panels are resizable — drag the divider between viewport and inspector, or viewport and timeline.
Menus
- File — project management and recents.
- Edit — undo/redo, duplicate.
- View — focus commands, ground grid, collider wireframes, bake commands.
- Presets — one-click fluid presets (campfire, explosion, smoke, torch) that set the global physics to a known-good starting point.
- Help — the built-in quick guide with shortcuts.
Emitters
Emitters are the sources of your effect — they inject smoke, heat, fuel and velocity into the simulation. Every parameter below lives in the emitter's properties card in the Scene tab.
Shapes
| Shape | Description |
|---|---|
| Sphere | The classic point source. Sink it halfway under the ground for a flat burning pool. |
| Box | Rectangular volume source — walls of fire, burning floors. |
| Cylinder | Column source — pillars of flame, torches. |
| Mesh | Any imported 3D model, voxelized into an emission mask. The object emits from its actual shape. See Meshes & Materials. |
| Image | A PNG/JPEG imported from the shelf — emits smoke/fire in the image's shape and colors (a burning logo, for example). |
All shapes support full position, rotation and size Keyframable ◇ — rotate a box emitter to tilt its jet, or keyframe position for a flying fireball.
Emission
The master group controlling what the source injects. Everything here is keyframable with the ◇ button next to each slider.
| Parameter | Range | Description |
|---|---|---|
| Emission ◇ | 0 – 3 | The master tap — scales smoke, fire and outflow together. 0 silences the source completely (fire and particles stop; what exists disperses naturally). Keyframe this for burst timing. |
| Smoke | 0 – 20 | How much smoke is injected. When combustion is enabled this becomes fuel injection — the material that burns. |
| Temperature | 0 – 20 | The fire's source. Higher = brighter, more buoyant flame. Smoke and fire are separate fields — you can have cold smoke or clean flame. |
| Outflow speed | 0 – 20 | How fast gas jets out of the source. |
| Blast (radial direction) | 0 – 1 | 0 = upward jet (torch) · 1 = radial burst from the center (explosion fireball). |
| Emission noise (lobes) | 0 – 1 | Breaks the emission surface into irregular lobes — explosions look chunky and organic instead of spherical. |
| Noise pattern | 2 – 14 | The spatial frequency of the emission noise (visible when noise > 0). Low = a few large lobes, high = many small ones. |
Emission mode
| Mode | Behavior |
|---|---|
| Add | Injection accumulates each step (default — natural build-up). |
| Add Clamped | Accumulates but never exceeds the source value — prevents over-saturation in slow flows. |
| Replace | Writes the source value directly — crisp, fully controlled cores. |
Pressure
Extra pressure the source applies to its surroundings — the "push" of an explosion, independent of emission.
| Parameter | Range | Description |
|---|---|---|
| Pressure ◇ | -2 – 2 | Positive pushes outward (shock wave), negative pulls inward (suction). Keyframe a sharp positive pulse for blast moments. |
| Chaos intensity | 0 – 2 | Adds random fluctuation to the pressure — the explosion billows irregularly and naturally. |
| Chaos pattern | 2 – 20 | Spatial size of the chaos cells. |
| Chaos speed | 0 – 3 | How fast the chaos pattern evolves over time. |
| Seed | 0 – 100 | Different randomness per seed — two emitters with different seeds never pulse in sync. |
Motion & cycle
| Parameter | Range | Description |
|---|---|---|
| Velocity transfer | 0 – 1 | A moving source drags its smoke along. Set to 1 and keyframe the emitter's position: smoke streams behind it — a waved torch, a flying fireball. Fast-moving emitters are swept smoothly between frames, so there are no gaps in the trail. |
| Burst duration | 0 – 5 s | Puts emission on an automatic on/off cycle — the source emits for this long, then goes silent. 0 = continuous emission. |
| Interval between bursts | 0 – 5 s | The silent gap between bursts (visible when burst duration > 0). |
Per-emitter colors
- Use own colors — gives this emitter its own Smoke color and Fire tint, independent of the global ramp.
- Colors are carried by the fluid: they flow with the smoke and blend naturally where two differently-colored sources mix — a red and a blue flame swirling produce purple in between.
Per-emitter combustion
With Custom combustion settings enabled, this emitter's fuel burns with its own character, overriding the global model locally: Ignition, Burn rate, Heat and Soot. Example: one source burns clean and fast (high burn rate, low soot) while another smolders dirty (low rate, heavy soot) — in the same scene.
Emit light
The Emit light toggle makes the emitter glow as a real light source — the surrounding smoke is illuminated by the fire itself. Ideal for muzzle flashes and explosions at night.
Particle output
Each emitter carries its own complete spark/ember system — see the dedicated Particles chapter for every parameter.
Explosion recipe: Blast = 1, Emission noise ≈ 0.7, keyframe Emission from 2.5 → 0 within ~0.4 s, add a positive Pressure pulse, and enable combustion with expansion. The examples "Ground Explosion" and "Big Explosion" are built exactly this way.
Force Fields & Effectors
Force fields push the flow around; effectors modify the smoke, heat and color fields inside a region. Both are spherical zones with a position, radius and strength.
Common parameters
| Parameter | Range | Description |
|---|---|---|
| Strength ◇ | 0 – 20 (Heater: -15 – 15) | Force magnitude. Keyframable — pulse a radial field for a shockwave. |
| Radius ◇ | 0.05 – 0.6 | The zone of influence. Falloff is smooth toward the edge. |
| Position / Rotation | ◇ | Fully keyframable. Rotation aims directional types (wind, line, toroidal). |
Force types
| Type | What it does | Use for |
|---|---|---|
| Wind | Constant push along the field's axis. | Drifting smoke, storm scenes, flamethrower sweep. |
| Vortex | Rotation around the field's axis — swirl strength grows with distance from the axis. | Swirling smoke, spinning flame columns. |
| Turbulence | Animated 3D noise force — chaotic stirring. | Breaking up uniform plumes, adding restlessness. |
| Push/Pull | Radial force from the center — outward or inward. | Shockwave pulses, suction effects. |
| Line | Flow channeled along a line through the field — strongest near the axis. | Jet streams, corridor drafts. |
| Toroidal (Ring) | A vortex ring circulation around the field's axis. | Smoke rings, mushroom-cloud roll. |
Effectors
Effectors don't push the flow — they alter the fields inside their radius:
| Type | What it does | Use for |
|---|---|---|
| Kill Zone | Erases smoke/heat passing through the region. | Clipping the top of a plume, keeping a window clear. |
| Heater/Cooler | Adds (or with negative strength removes) heat inside the zone. | Re-igniting rising smoke, chilling a region to kill flame locally. |
| Colorizer | Paints passing smoke with the chosen Paint color. | Magic color shifts mid-flow, chemical smoke. |
Combine one Turbulence (strength 1–2, large radius) with your key emitter in nearly every scene — a touch of chaos is what separates "CG smoke" from convincing smoke.
Colliders
Solid obstacles the fluid flows around — and particles bounce off.
Shapes
- Sphere / Box — analytic shapes, freely rotatable. Size range 0.03 – 0.45.
- Mesh — import any 3D model; it is voxelized into a solid the smoke navigates around. The collision mask rebuilds automatically when you move, rotate or scale the object.
Parameters
| Parameter | Range | Description |
|---|---|---|
| Friction | 0 – 1 | Slows the flow along the surface — sticky, dragging boundaries. |
| Bounce | 0 – 1 | Repels the flow off the surface — energetic deflection. |
| Velocity transfer | 0 – 1 | A moving collider drags nearby smoke with it — keyframe the collider's position to stir the scene like a paddle. |
| Active | — | Toggles the object's effect on the simulation. |
| Hide in render | — | Collides but is not drawn — invisible walls to shape the flow. |
Particles interact with colliders too: sparks land on and bounce off surfaces, respecting their friction and bounce values.
Put an invisible box collider (Hide in render) just above a fire to squash the plume into a rolling ceiling of smoke.
Lights
Scene lights illuminate the smoke volumetrically, with self-shadowing.
Kinds
| Kind | Description |
|---|---|
| Point | Radiates from a position with distance falloff. Place inside or near the effect for dramatic core lighting. |
| Directional | Parallel rays from a direction (aim with the object's rotation, up = +Y) — sun/moon key light. |
Parameters
| Parameter | Range | Description |
|---|---|---|
| Color | — | The light's color — tint the smoke warm or cold. |
| Intensity ◇ | 0 – 10 | Brightness. Keyframable — flicker a point light for firelight, flash it for an explosion. |
| Range | 0.05 – 1.5 | Point-light reach before falloff. |
Up to 8 lights can shine at once. If the scene has none, a default key light (from the Render tab's light card) is used. Emitters can also glow themselves via Emit light — see Emitters.
The classic setup: one warm point light buried at the fire base (keyframed flicker) + one cool directional rim from behind. See Rendering → Lighting for shadows and albedo.
Particles
Sparks, embers and debris — a GPU particle system holding up to one million particles, fully coupled with the fluid: particles ride the flow, deposit smoke trails back into it, and bounce off colliders. All settings are per-emitter: select an emitter and open its Particle output group.
Core settings
| Parameter | Range | Description |
|---|---|---|
| Enable particles | — | Turns this source's sparks on. Each emitter carries its own particle character. |
| Density | 0.01 – 5 | How many particles are born. Values above 1 push into the millions-class — dense glowing swarms. |
| Lifetime | 0.3 – 6 s | How long each particle lives (randomized around this value). |
| Size | 0.5 – 8 | Draw size of each spark. |
| Gravity | 0 – 12 | Pulls particles into ballistic arcs — and they bounce on the ground and on colliders. 0 = fully flow-driven embers. |
| Trail stretch | 0 – 1 | Motion streaks: particles are drawn stretched along their velocity. 0 = round points, 1 = long comet streaks. |
| Hide sparks | — | The particles keep simulating — debris trails, burning trails and death bursts all continue — but the spark billboards themselves are not drawn. Use particles as invisible "trail emitters". |
| Sprite texture | — | An optional PNG drawn on every particle instead of the built-in soft point. Scene-wide (shared by all emitters). |
Launch
| Parameter | Range | Description |
|---|---|---|
| Particle speed ◇ | 0 – 30 | Launch velocity. Keyframable — pulse it for firework shells. |
| Spread | 0 – 1 | 0 = focused jet along the emitter's rotation axis · 1 = burst scattering in all directions. |
Emission style
How new particles are distributed at birth:
| Style | Look |
|---|---|
| Uniform | Even random spawning across the emitter shape — homogeneous spark spray. |
| Clumped | Particles are born in bundles that fly together — clusters of embers popping off a fire. |
| Entangled | Born along twisting strands — organic, fibrous streams of embers. |
Bundle count 2 – 24 sets how many bundles or strands exist (visible for Clumped/Entangled). Particles spawn from the emitter's true shape — a rotated box emitter births sparks inside that rotated box.
Debris trails
One click and every particle leaves a real smoke/fire trail in the fluid as it flies — the trail is injected into the simulation and keeps evolving with it.
| Parameter | Range | Description |
|---|---|---|
| Debris trails | — | Master toggle (auto-enables particles for one-click use). |
| Trail density | 0.2 – 3 | How much material each particle deposits. |
| Burning trail (fuel) | 0 – 1 | The fraction of the trail deposited as fuel — with combustion on it ignites: rocket exhausts, firework rising trails. |
| Trail timing | -1 – 1 | Where along the particle's life the trail is strongest: -1 birth · 0 even · +1 death. |
| Trail push | 0 – 1 | The trail also pushes the fluid along the particle's motion — trails carve their own wake. |
| Trail size (radius) | 0 – 3 | Each particle stamps a volumetric puff of this radius — thick billowing smoke columns instead of thin ribbons ("particle as emitter"). Large radius + many particles costs performance. |
Death burst & fireworks
| Parameter | Range | Description |
|---|---|---|
| Death burst | 0 – 3 | A dying particle explodes into a small fireball — fuel, heat and an outward push injected at its last position. Enabling auto-activates particles: one-click fireworks. |
| Death stars (count) | 0 – 100 | Chrysanthemum shells: a dying particle splits into N child stars that inherit its look and physics. |
| Star speed | 4 – 60 | Radial launch speed of the child stars. |
Conditional spawning
| Parameter | Range | Description |
|---|---|---|
| Spawn frozen | — | Particles are born motionless and wake when local flow exceeds the wake threshold — glitter that ignites as the blast wave passes. |
| Wake threshold | 0.5 – 20 | Flow speed needed to wake a frozen particle. |
| Emit only when moving | 0 – 20 | Particles spawn only while the emitter itself moves faster than this — sparks that appear when you swing the torch. |
Behavior notes
- Particles only spawn while their emitter is emitting — keyframe Emission to 0 and the sparks stop with the fire.
- Colors follow the emitter's fire tint; sparks fade and cool over their lifetime.
- The Particles only (hide volume) toggle in the Render tab isolates the particle pass for inspection.
- Particles render additively into the HDR pipeline — they bloom naturally when bright.
Firework recipe: Gravity ≈ 5, Speed ≈ 20, Spread 1, Death burst 1.5, Death stars 30, Burning trail 0.8, Trail stretch 0.6. Keyframe Emission as a 0.2 s pulse. The "Fireworks" example is this exact setup.
Simulation & Combustion
The Sim tab drives the physics: the domain, the fluid parameters, and the combustion model.
Domain
| Parameter | Range | Description |
|---|---|---|
| Width / Height / Depth | 0.3 – 3.0 | World size of the simulation box per axis. A tall thin box for a column of smoke, a wide flat one for ground fire. The white wireframe in the viewport shows it. |
| Position | — | Where the box sits in the world. |
| Emitter scale | 0.25 – 2.0 | Globally scales all emitter sizes — grow the box without growing the sources. |
| Auto-grow | — | The box expands automatically when the effect approaches its walls — set and forget for explosions that outgrow their initial bounds. |
Resolution
The voxel density of the simulation, chosen as voxels per world unit: 64³ (fast preview) · 128³ (balanced) · 256³ (finest live detail). The card shows an estimated memory figure.
Resolution consistency is engineered in. The gross motion, height and timing of your effect stay the same at every resolution — higher grids add detail, not different physics. Design at 64³, verify at 128³, export at up to 1024³ (set in the Export tab; higher grids simulate offline during export).
Physics
| Parameter | Range | Description |
|---|---|---|
| Sim speed ◇ | 0.1 – 2.0 | Time scale of the simulation — slow motion to double speed, keyframable for speed ramps. |
| Buoyancy ◇ | 0 – 12 | How strongly hot gas rises. The main "energy" of a fire. |
| Weight ◇ | 0 – 3 | Downward pull on dense smoke — heavy, sinking smoke vs. weightless haze. |
| Vorticity ◇ | 0 – 20 | Reinforces small swirls the grid would otherwise smooth away — turbulent, licking flames. Too high looks noisy. |
| Detail turbulence ◇ | 0 – 1 | Procedural curl-noise micro-turbulence applied to the smoke surface — the "boiling" fine detail of EmberGen-class sims, at any grid resolution. |
| Detail turbulence size | 0.3 – 3.0 | Spatial scale of that micro-turbulence. |
| Density dissipation | 0.95 – 1.0 | How long smoke lingers per step (1.0 = forever). 0.98 clears briskly, 0.995 hangs in the air. |
| Cooling | 0.9 – 1.0 | How fast heat fades. Controls flame height directly: lower = short licking flames, higher = tall rising fire. |
| Velocity dissipation | 0.95 – 1.0 | How long motion persists — high values keep swirls alive. |
| Smoke diffusion | 0 – 1 | Physical spreading of smoke into neighboring cells — soft, hazy edges. |
| Temperature diffusion | 0 – 1 | Heat spreading — softens the fire core and its buoyancy response. |
Combustion
A realistic fuel-driven burning model. When enabled, emitters inject fuel instead of raw smoke; fuel that gets hot enough ignites, producing glowing flame, heat and soot. Regions that exhaust their fuel cool into dark smoke — this is where the natural fire→smoke transition comes from.
| Parameter | Range | Description |
|---|---|---|
| Combustion strength | 0 – 2 | Master switch and overall intensity (0 = model off). |
| Ignition temperature | 0 – 1 | The threshold fuel needs to catch. Raise it and fire ignites reluctantly; lower it and everything torches instantly. |
| Burn rate | 0.1 – 3 | How fast fuel is consumed. High = sudden bright flash; low = long-lasting flame. |
| Heat output | 0 – 3 | Heat produced by burning — feeds brightness and rise. |
| Soot output | 0 – 3 | Smoke left behind by burning — "clean" vs. "dirty" burn. |
| Expansion (blast shock) | 0 – 2 | An outward pressure wave at the moment fuel ignites — the billowing punch of an explosion. |
| Flame amount ◇ | 0 – 1 | Strength of the dedicated flame reaction channel — a separate short-lived field for crisp visible flame fronts, independent of the smoke body. |
| Flame lifetime | 0.05 – 1.5 s | How long a flame front stays visible after burning. |
| Flame brightness | 0 – 10 | Emission boost for the flame channel. |
Individual emitters can override the burn character locally — see Emitters → Per-emitter combustion.
Solver
| Setting | Description |
|---|---|
| Multigrid (V-cycle) | The pressure solver. Fast and accurate — keep it on. V-cycles (1–4) trades a little speed for extra precision. |
| Sparse / Adaptive | Skips computation in empty regions. The image does not change; speed goes up — keep it on. |
| MacCormack advection | A higher-order advection scheme with sharper smoke edges and less blurring, at slight extra cost. Enable when you want maximum detail. |
Rendering
PyroMetal renders the volume with a cinematic ray-marcher: blackbody fire emission, self-shadowed smoke scattering, HDR bloom and a full post-effects suite. Everything lives in the Render tab.
Core render quality
| Parameter | Range | Description |
|---|---|---|
| Density scale ◇ | 1 – 80 | Optical thickness of the smoke — thin haze to impenetrable soot. |
| Emission strength ◇ | 0 – 12 | Brightness of the fire's own glow. |
| Temperature scale ◇ | 0.05 – 0.4 | Maps simulation heat to visible fire — the sensitivity of the fire ramp. |
| Max temperature (K) | 2000 – 12000 | The blackbody ceiling: 2000 K deep orange candle, 6500 K white-hot core, 12000 K blue-white plasma. |
| Fire opacity | 0.2 – 2 | How much the flame body occludes what's behind it — airy gas vs. dense plasma. |
| Step count (quality) | 32 – 256 | Ray-march samples per pixel. Higher = smoother gradients and cleaner thin smoke, at GPU cost. |
Coloring
- Fire ramp — four color stops (cold → hot) shape the entire flame palette, with a live gradient preview. Natural fire, green witch-flame, blue plasma: all just ramps.
- Smoke color — the global scatter tint of the smoke body.
- Emitters with Use own colors override both locally, and their colors advect with the flow (see Emitters).
Visual detail
| Parameter | Range | Description |
|---|---|---|
| Detail amount ◇ | 0 – 0.6 | Procedural render-time noise etched into the smoke — extra texture without touching the sim. |
| Detail frequency | 1 – 16 | Spatial frequency of that noise. |
| Motion blur | 0 – 1 | Velocity-based blur — fast gas smears like a long-exposure photograph. |
Exposure, bloom & vignette
| Parameter | Range | Description |
|---|---|---|
| Exposure ◇ | 0.2 – 4.0 | Overall scene brightness before tonemapping (filmic ACES). |
| Bloom strength ◇ | 0 – 1.5 | HDR glow around bright fire. |
| Bloom threshold | 0.2 – 3.0 | How bright a pixel must be to bloom. |
| Vignette ◇ | 0 – 1 | Darkened frame corners for focus. |
Post-effects suite
A full grading stack applied after tonemapping:
| Effect | Range | Description |
|---|---|---|
| Contrast | 0.5 – 1.6 | S-curve punch. |
| Saturation | 0 – 2 | 0 = monochrome, 2 = hyper-vivid. |
| Gamma | 0.4 – 2.2 | Midtone lift/crush. |
| Temperature (white balance) | -1 – 1 | Cool ↔ warm cast. |
| Tint (white balance) | -1 – 1 | Green ↔ magenta cast. |
| Hue shift | -0.5 – 0.5 | Rotates the whole palette. |
| Sharpen | 0 – 1 | Edge enhancement. |
| Chromatic aberration | 0 – 1 | Lens color fringing at the frame edges. |
| Film grain | 0 – 1 | Animated photographic grain. |
| Kuwahara (oil paint) | 0 – 1 | Painterly stylization filter. |
| Pixelate | 0 – 1 | Retro mosaic. |
| Posterize | 0 – 1 | Banding into flat color steps — cartoon looks. |
| Halftone | 0 – 1 | Print-style dot pattern. |
Lighting & shadows
| Parameter | Range | Description |
|---|---|---|
| Light intensity ◇ | 0 – 5 | The default key light's strength (used when the scene has no light objects). |
| Key direction (horizontal / vertical) | 0 – 2π · -1.5 – 1.5 | Aims the key light. |
| Smoke albedo | 0 – 1 | How much light the smoke reflects — bright white steam vs. light-eating soot. |
| Shadow steps | 0 – 24 | Self-shadow march quality (0 disables shadows). |
| Shadow density | 0 – 80 | How dark the self-shadowing gets. |
| Fast shadows | — | Bakes the smoke's self-shadow once per frame into a volume — a big speedup with multiple lights, no visible quality loss. Recommended on. |
Advanced scattering
| Parameter | Range | Description |
|---|---|---|
| Anisotropic phase | — | Forward-scattering glow — smoke lights up dramatically when lit from behind (silver-lining effect). |
| Phase g (direction) | 0 – 0.9 | Strength of that forward preference. |
| Multiple scattering | — | Soft inner glow from light bouncing within thick smoke — creamy, dense cores. |
| Scattering strength | 0 – 1 | Amount of that inner glow. |
| Emissive masking | — | Carves detailed flame fronts from the emission using density: crisp, textured fire edges. Tune with Mask strength, Density reference, Width and Flame texture sliders. |
Environment
- Sky / Ground colors + Ambient intensity 0 – 1.5 — a procedural environment that fills shadows with believable ambient light.
- Show as background — renders the environment gradient behind the effect.
- HDRI — load an equirectangular image (EXR/HDR/PNG/JPEG); it becomes a camera-tracked backdrop and drives the ambient tint automatically. One-click presets: Studio, Sunset, Night.
- Ground plane — a floor that receives the smoke's shadow, anchoring the effect to the ground.
Viewing aids
- Particles only (hide volume) — isolates the spark pass for inspection.
- TAA — temporal anti-aliasing smooths fine grain in the live viewport (viewport only; exports are already clean).
Cameras
Two cameras: a free viewport camera for working, and a render camera for framing the final shot.
Viewport camera
- Orbit / pan / zoom freely while you design; it never affects the export.
- F focuses the selected object; ⇧F frames the whole domain.
Render camera
The Render Camera tab shows exactly what will be exported, letterboxed to the export aspect ratio with composition overlays: action-safe (5%), title-safe (10%) and rule-of-thirds guides.
| Parameter | Range | Description |
|---|---|---|
| FOV (vertical) | 20° – 90° | Lens angle — tight telephoto to wide dramatic. |
| Camera shake ◇ | 0 – 1 | Procedural handheld shake. Keyframe a spike at the blast moment for impact. |
| Shake frequency | 1 – 25 | Slow drift to violent rattle. |
| Aperture (DOF) | 0 – 0.15 | Depth-of-field blur amount (0 = off). |
| Focus distance | 0.2 – 8 | The sharp plane — rack focus by keyframing the camera moves around it. |
The render camera's position and orbit are keyframable — animate sweeping moves around the explosion on the timeline.
Animation & Timeline
Any parameter with a ◇ button is keyframable — global physics, render settings, and every per-object property.
Keyframing
- Click the ◇ next to a parameter to add a key at the current time. A lane appears on the timeline.
- Auto-Key — with it on, moving any keyable slider drops a key automatically.
- Keys: click to select, drag to move in time (and value, in curve mode), right-click to delete or change interpolation.
Interpolation modes
| Mode | Behavior |
|---|---|
| Linear | Constant rate between keys. |
| Ease | Smooth acceleration/deceleration (smoothstep). |
| Hold | Value jumps at the key — stepped, mechanical changes. |
| Bezier | Auto-tangent smooth curve through the keys. |
The Curve editor (Lane/Curve toggle on the timeline) graphs the animation with draggable points — fine-sculpt an emission pulse's exact shape.
Playback — one clock
- The single ▶︎/⏸ (Space) drives the simulation and the timeline, locked together: the timeline advances exactly one frame per sim step, so animation can never outrun physics.
- The timeline loops at its set duration; on each loop the simulation restarts identically, so every pass through the loop is the same — what you see is what exports.
- R resets both sim and playhead to zero.
Sim cache — bake & scrub
A live simulation can't be rewound — so bake it. Bake (⌘B or the timeline button) computes the whole timeline once and stores every frame in memory:
- Drag the playhead anywhere and that frame appears instantly — no re-simulation.
- When baking completes, Play From Cache turns on automatically (green ▣). Turn it off to return to the live sim.
- A green dot means the cache is current; orange means settings changed since the bake — hit ↻ to re-bake. The label shows frame count and memory use.
- The cache clears automatically if the grid or domain changes.
The explosion workflow: keyframe Emission (master) as a sharp pulse — e.g. 2.2 at t=0, 0 at t=0.4 — plus a Pressure spike and a particle-speed spike at t=0. Everything stops emitting together, and the fireball clears naturally before the loop restarts.
Meshes, Images & Materials
Bring your own geometry: meshes can emit, collide and render with full PBR materials; images become shaped emitters.
Mesh emitters
- Import a 3D model from the shelf (Emitter → Mesh). It is voxelized into an emission mask — smoke and fire pour off the model's actual shape.
- Textured models can emit in their surface colors — a painted statue burning in its own palette.
- Transform freely; the mask rebuilds automatically.
Image emitters
- Import a PNG/JPEG (Emitter → Image): the image's silhouette emits smoke/fire in the image's own colors — logos, text, sigils.
- Transparent pixels emit nothing; bright saturated pixels emit their color.
Mesh colliders
Import a model as a collider (Collider → Mesh): it is voxelized as a solid and the flow navigates around it — smoke rolling over a statue, fire licking around an engine block. See Colliders for friction/bounce.
Surface rendering & PBR materials
Imported meshes render as real surfaces in the beauty pass, shaded with a physically-based (Cook-Torrance) material and lit consistently with the volume. Open the Material Editor to edit:
| Property | Description |
|---|---|
| Base color | Albedo color and/or texture map. |
| Metallic / Roughness | Sliders or texture maps — from mirror chrome to chalky matte. |
| Normal map | Adds surface detail without geometry. |
| Packed ORM | Use a single Occlusion·Roughness·Metallic texture with per-channel selection — the game-asset standard. |
| Emissive | Color + strength 0 – 10 — glowing panels, lava cracks. |
- Hide in render keeps a mesh's simulation role (emit/collide) while hiding its surface.
Export
The Export tab renders your effect offline — at its own resolution, its own simulation grid, and in multiple formats and channels. Exports run in the background with a live frame filmstrip and can be cancelled at any time.
Formats
| Format | Output | Use for |
|---|---|---|
| MP4 Video | H.264 movie. | Previews, motion graphics, straight-to-edit. |
| PNG Sequence | One PNG per frame, with alpha. | Compositing (After Effects, Nuke, Resolve). |
| Sprite Sheet | A single texture atlas + JSON metadata. | Game flipbooks — the chosen resolution is the total atlas; frames divide it evenly. |
| VDB Volume (Sequence) | One .vdb per frame with density, temperature and color grids (sparse). | Blender, Houdini and other 3D apps — re-light and re-render the volume anywhere. The Active threshold slider controls which voxels are written (lower = more detail, larger files). |
Resolution
- Output resolution — a dropdown of presets from 512² to 8K (720p, 1080p, square variants), plus Width/Height steppers for custom sizes. When your custom size doesn't match a preset, the dropdown reads "Custom".
- Simulation resolution — a separate dropdown (64³ – 1024³). Independent of the viewport: the export simulates at this grid while rendering. 512³/1024³ are export-only grids — design light, export heavy. If memory runs out you get a clear error, not a crash.
- Frame skip (stride) 1 – 10 — advance N sim steps per exported frame: faster apparent motion and shorter renders without changing the physics.
Background
| Mode | Description |
|---|---|
| Gradient | The scene's default gradient backdrop. |
| Environment | The environment backdrop (sky/ground or HDRI) — matches the viewport. |
| Black | Plain black. |
| Green screen | Chroma green for keying in editors that lack alpha support (ideal for MP4). |
| Transparent | True alpha channel (PNG/Sprite; falls back to black in MP4). |
Render channels
Each selected channel exports as a separate file/sequence:
| Channel | Contents |
|---|---|
| Beauty | The final shaded image — fire, smoke, lights, post effects. |
| Alpha (Matte) | Coverage matte for compositing. |
| Flames (emission only) | Only the fire's own glow on black + alpha — a compositing layer you can grade independently. |
| Smoke (scatter only) | Only the lit smoke, emission off — the flame layer's counterpart. |
| Density | Raw smoke density, grayscale. |
| Temperature | Raw heat field, grayscale. |
| Fuel | Unburned fuel coverage, grayscale. |
| Normals | Camera-space normal map derived from the density gradient — for relighting tricks. |
| Depth | Normalized depth (near = bright). |
| Motion Vectors | Per-pixel screen-space velocity — motion blur and frame interpolation in post, or game-engine flipbook blending. |
| Per-Light AOVs PNG only | One pass per light (0 = key light) on black + alpha — rebalance individual lights in comp. |
| 6-Point Lighting PNG only | Two packed maps per frame for game-engine six-way smoke materials: A = Right/Left/Top in RGB (alpha = coverage), B = Bottom/Front/Back in RGB (alpha = emissive). Drop into UE/Unity 6-way materials for smoke you can relight at runtime. |
Seamless loop
Loopable export crossfades the last frames into the first, producing a perfectly seamless cycle — essential for game flipbooks and looping ambience. Combine with a keyframed emission cycle for best results.
Running an export
- Exports run on a background renderer with its own solver — the app stays responsive.
- A live thumbnail filmstrip shows frames as they render.
- Cancel any time — partial video files are properly finalized or discarded.
Game VFX pipeline: export a Sprite Sheet (8×8 on a 4K atlas) with Loopable on for the flipbook, plus a PNG sequence with 6-Point Lighting and Motion Vectors for a fully relightable six-way material with smooth frame blending.
Performance
PyroMetal is built to stay interactive. These are the levers, roughly in order of impact.
Grid resolution
The single biggest cost. 64³-class grids are ideal for design; 128³ balances detail and speed; 256³ is the finest live grid. The Resolution card shows an estimated memory figure as you change it. Because motion is resolution-consistent, you lose nothing by designing low and exporting high.
Optimizations (viewport / render separate)
Each row has two checkboxes — one for the live Viewport, one for the Render (export):
| Optimization | Effect |
|---|---|
| Empty-space skipping | Skips empty regions hierarchically — zero visual change, keep it on everywhere. |
| Froxel lighting | Pre-solves lighting on a coarse grid — a big viewport speedup. Leave it off for exports for maximum quality. |
| TAA | Temporal anti-aliasing for the live view (viewport only). |
Display pipeline
| Setting | Effect |
|---|---|
| Dynamic resolution | Automatically adjusts render scale to hold frame rate when you zoom into dense smoke. |
| MetalFX upscale | GPU-accelerated spatial upscaling — render at a lower internal scale, present sharp. |
| EDR (HDR display) | On HDR-capable displays, fire highlights push into extended dynamic range — genuinely bright flame. |
Solver & shadows
- Multigrid pressure solving with 1–4 V-cycles — accurate and fast; more cycles only if you see pressure artifacts in extreme scenes.
- Sparse/Adaptive skips computing empty voxels — identical image, faster.
- Fast shadows bakes self-shadowing once per frame — the way to run multiple lights cheaply.
- Shadow steps / Step count — the render-side quality dials; drop them while designing, raise for finals.
Particles
- Particle count scales with per-emitter Density; the system holds up to 1M. Sparks are cheap — Trail size (radius) deposits are what cost, since each particle stamps volumetric material.
- Hide sparks costs nothing — hidden particles skip drawing entirely.
Memory
- The Sim tab's Resolution card estimates solver memory live.
- Export grids of 512³/1024³ allocate only during the export; if the GPU runs out of memory you get a clear error message, never a crash.
- The sim cache reports its exact size next to the timeline (frames × grid); clear it with 🗑 when you need headroom.
Keyboard Shortcuts
Everything on one page.
Playback
| Keys | Action |
|---|---|
| Space | Play / Pause — drives sim and animation together |
| R | Reset simulation and timeline to the start |
| ⌘B | Bake the sim cache (then scrub freely) |
Project
| Keys | Action |
|---|---|
| ⌘N | New project |
| ⌘O | Open project… |
| ⌘S | Save |
| ⌘⇧S | Save as… |
| ⌘⇧H | Home (project browser) |
Editing
| Keys | Action |
|---|---|
| ⌘Z / ⌘⇧Z | Undo / Redo |
| ⌘D | Duplicate the selected object |
| F | Focus the camera on the selected object |
| ⇧F | Frame the whole domain |
Outliner gestures
| Gesture | Action |
|---|---|
| Double-click name | Rename the object in place |
| 🔒 button | Lock — the object can't be moved in the viewport |
| 👁 button | Enable / disable the object |
| 🗑 button | Delete the object (undoable) |
Tips & FAQ
Answers to the questions everyone asks, and the habits of people who get great results fast.
Why does my fire keep burning after I set Smoke to 0?
Smoke (density) and fire (temperature) are separate fields. Setting Smoke to 0 stops the soot, not the heat. To silence a source completely, take the Emission master to 0 — it scales smoke, heat, outflow and particle spawning together, and what already exists disperses naturally.
My explosion looks like a rising plume, not a blast
- Set Blast to 1 — velocity fires radially from the center instead of upward.
- Add Emission noise ≈ 0.7 so the fireball breaks into lobes.
- Enable combustion and give it Expansion (blast shock) — ignition then pushes outward like a real detonation.
- Make the emission a pulse, not a constant: keyframe Emission 2.5 → 0 over ~0.4 s.
The effect looks different when I change resolution
It shouldn't — and by design it doesn't: PyroMetal normalizes motion, emission and dissipation across grid resolutions, so the same project keeps the same height, timing and silhouette at 64³ and 256³. What changes is the amount of fine detail. If you want more turbulent detail without touching resolution, raise Detail turbulence (sim) or Detail amount (render).
How do I make a perfect loop?
- Keyframe your effect so emission returns to its starting value by the end of the timeline.
- Playback already restarts the sim identically on every loop — check the seam live.
- Export with Loopable export on: the tail crossfades into the head for a mathematically seamless cycle.
What's the fastest way to a specific effect?
Open the closest Example and read it like source code: check its emitter settings, its keyframe tracks, its combustion values. The library covers explosions (ground, air, chain, nuke), fires (campfire, wall, torch, wildfire), particles (fireworks, sparks, embers), atmospherics (fog, steam, sandstorm) and stylized looks (toon, magic).
Where do the game-engine exports fit?
- Flipbooks: Sprite Sheet export + Loopable. The JSON sidecar carries the atlas layout.
- Six-way lighting: the 6-Point Lighting channel exports the two packed maps UE/Unity six-way smoke materials expect (A: R/L/T + coverage · B: B/F/B + emissive).
- Motion vectors: enable the Motion Vectors channel for flipbook frame-blending — smooth playback from far fewer frames.
- VDB: full volumetric handoff to Blender/Houdini with density, temperature and color grids.
Habits of fast PyroMetal artists
- Design at 64³. Always. Export decides final quality, not the viewport.
- One Turbulence field in every scene; vary the Seed on pressure chaos so twin emitters don't sync.
- Use Bake (⌘B) the moment timing work starts — scrubbing beats replaying.
- Lock 🔒 finished layout objects so a stray drag can't move them.
- Duplicate an emitter (⌘D) and vary its seed/colors instead of building twins from scratch.
- Grade with the fire ramp first, post-FX second — the ramp does 80% of the look.