courtyard_flagstone
Ground material for the dragon courtyard in the `fx_breath` scene. The scene's `ground` entity (a built-in cube scaled 50 x 0.2 x 50 at (170, -0.1, 150)) wears it, and the `DragonBreathDirector` component on the `dragon_breath` entity holds it in its `material` field.
courtyard_flagstone
Ground material for the dragon courtyard in the fx_breath scene. The scene's ground entity (a
built-in cube scaled 50 x 0.2 x 50 at (170, -0.1, 150)) wears it, and the DragonBreathDirector
component on the dragon_breath entity holds it in its material field.
Shader: flagstone_scorch (flagstone_scorch.shader). Its README describes running-bond flagstone
paving that scorches where a periodic fire-breath sweep has passed. The sweep is analytic (axis = amp * sin(2*pi*t/period) seen from mouth), so each stone works out when the flame last crossed it
and how hot and sooty it is now: glowing orange in the joints and veins first, cooling through dull
red to black soot. Heat drives the emissive output through a black, deep red, orange and
yellow-white ramp; soot darkens the albedo and raises roughness.
DragonBreathDirector writes sync_time every frame as the breath generator's clock modulo its
period, so the scorch follows the same sweep as the flame of proc/dragon_breath.procGraph. In
the scene the director uses mouth (170, 2.4, 141), amplitude 0.72 and period 14, the same values
this material sets.
Render state: the defaults (opaque blend, back faces culled, depth write on); mat.yaml sets only the shader and its values.
Properties
mouth: [170, 141]: world x and z of the dragon's mouth, the point the sweep and the reach are measured from.sweep_amp: 0.72: half-width of the sweep in radians; the flame axis swings between -0.72 and 0.72, measured from +z toward +x.sweep_period: 14.0: seconds for one full left-right-left sweep.heat_tau: 5.0: cooling time constant in seconds (default 2.6). Each slab cools with between 0.75 and 1.45 times this value, and the mortar around it with 1.9 times the slab's.soot_tau: 22.0: time constant in seconds for the soot of the last crossing (default 9.0). Inside the flame's reach the soot term is0.55 + 0.45 * exp(-seconds since the crossing / soot_tau), varied by grain.flame_width: 0.2: angular width of the flame front in radians (default 0.13); the shader widens it with distance asflame_width * (0.7 + 0.05 * r).reach_near: 3.0andreach_far: 19.0: the radial band, in metres from the mouth, that the flame scorches; both edges are roughened by noise that moves with time.- Set at runtime or left at the default:
sync_time(written byDragonBreathDirector) andglow1.0 (multiplier on the emissive heat colour).
Scoped to this part · feeds back into the world's score.