ab_water
The water in Ashbloom's crater: a blend-queue surface that reads the lit opaque scene standing behind it through `zero::scene_color` and bends it through its own animated ripple gradient, and reads the depth already drawn under it through `zero::scene_depth` so the colour darkens…
ab_water
The water in Ashbloom's crater: a blend-queue surface that reads the lit opaque
scene standing behind it through zero::scene_color and bends it through its own
animated ripple gradient, and reads the depth already drawn under it through
zero::scene_depth so the colour darkens with real water depth over the stone.
One shader serves three surfaces — the sunken pool, the sheet pouring over a
terrace lip, and the slurry running in the stone channels. What separates them is
property values: flow_x/flow_z for a current, slurry for the grey ash load
movement II carries, under_amount/under_color for the pool lit from beneath
while the garden is glowing, rain_amount for the expanding rings rain pocks the
surface with.
The vertex hook displaces the surface for real (off v.time, so the previous-frame
evaluation reports the swell's true velocity), which is what moves the silhouette
against the basin lip and puts the water into the motion-vector buffer.
Lighting is the engine's, called with a black albedo — what comes back is the specular response alone, so the moon lays its line on the water in movement I and the blooms standing over it do in movement III.
It declares no textures and no storage buffers, so it costs nothing of a material's 9 sampled-texture / 1 storage-buffer budget.
Author a material for it with render = { blend = "alphaBlend", cull = "none" }
and set castsShadows = false on the Model — a transparent material is still
built with depth writes on.
Scoped to this part · feeds back into the world's score.