dragon_flame
Additive camera-facing flame puff for the `dragon_breath` graph. `data0 = (life, seed, size, 0)`. Noise-carved blob that churns, erodes from the outside in and cools from yellow-white through orange to dull red over its life. Tuned for thousands of overlapping puffs (each carries…
dragon_flame
Additive camera-facing flame puff for the dragon_breath graph. data0 = (life, seed, size, 0).
Noise-carved blob that churns, erodes from the outside in and cools from yellow-white through orange
to dull red over its life. Tuned for thousands of overlapping puffs (each carries a slice of the
light).
Each puff is a zero_billboard card turned by its seed and spun over its life in a direction the
seed picks. A domain-warped four-octave value noise, scrolling with time, carves the blob's edge,
and the threshold rises with life (life * 0.85) so the puff erodes from the rim inward. A faster
inner churn layer mixes hotter and cooler tongues through the puff. Temperature combines youth, the
dense core and both noise layers, then maps through a five-stop ramp from (0.22, 0.012, 0) to
(3.9, 2.3, 0.75). The puff fades in over the first 20 to 30 percent of its life (born thin at the
nozzle) and out between 0.55 and 1, and its coverage is scaled by 0.27 (times a churn term) so each
of the many stacked puffs carries a slice of the light.
The dragon_breath graph (dragon/dragon_breath.procGraph) draws its flame output with it,
additive: a fast bright jet and a slower, wider billow, on cards that grow from 0.55 to 2.6 of their
size over life. In the Procgen Effects Showcase world, the fx_breath scene plays that graph. All of its inputs arrive per particle on
data0; properties.yaml holds properties: [].
The shader includes @builtin::shaderModules.billboard.
Lanes
| Lane | Carries |
|---|---|
data0.x | Life, 0 to 1: drives the spin, erosion, fades and cooling. |
data0.y | Seed: rotation, spin direction and rate, and the noise offset. |
data0.z | Particle size, written by the graph. |
data0.w | 0. |
Culling
vertexBoundsDilation (float, default 2.5): how far the vertex hook moves a
vertex past the mesh, in world units. The culling bounds grow by it, so a card turned to face the
camera stays inside them where it reaches past the mesh it was drawn from.
Scoped to this part · feeds back into the world's score.