fauna
The `fauna` build slice of **Stained Glass Day**. Fourteen barn swallows nest in the mezzanine capitals, leave at first light through the broken pane at the head of the window, work the hall through the day, and stream back at dusk. They are the only fast thing in a film whose su…
fauna — the swallow colony
The fauna build slice of Stained Glass Day. Fourteen barn swallows nest in
the mezzanine capitals, leave at first light through the broken pane at the head
of the window, work the hall through the day, and stream back at dusk. They are
the only fast thing in a film whose subject moves at fifteen degrees an hour.
It registers itself with demo.film as the slice fauna and is driven from
there — build() once, tick(t) every film frame.
What it owns
demo.fauna (this module) | the entities, the assets, and the tick that puts them where flight says |
demo.fauna.swallow | the geometry — body, wings, forked tail, and the plumage carried in vertex colours |
demo.fauna.flight | where every bird is at film time t, how it is held, and the whole day's choreography |
Each bird is three entities — swallow_NN, swallow_NN_wr, swallow_NN_wl —
the wings parented at the shoulders. Flapping is a rotation of the wing entities
about the body's own forward axis, so the colony costs fourteen transform writes
and twenty-eight rotations a frame and no skinning. All fourteen render through
one material, demo.fauna.swallow_feather: every scrap of plumage colour is in
the vertex stream, so a swallow crossing a shaft picks the colour of that light
up on a buff belly and stays near-black across the back.
tick(t) is a pure function of t — orientation, bank and wingbeat are read
back off the flight curve by finite difference, and the wingbeat's phase is
2 pi f t, so its frequency never integrates. Film.seekTo(51.5) puts the
colony exactly where playing to 51.5 would.
What it serves
| shot | s | what the shot list asks for | where it lives |
|---|---|---|---|
| 1 | 0-6 | three swallows wake in the capitals and leave one after another through the broken pane | WAKE[1..3] = 1.35, 2.75, 4.15 s, all on the two westernmost capitals — the ones inside shot 1's lens |
| 3 | 11-16 | two swallows cross the frame below the mezzanine camera | WAKE[8], WAKE[9] = 10.90, 11.80 s |
| 4 | 16-21 | a swallow lands on the transom, turns, and goes | bird 5, on hall_window_transom from 17.72 to 19.55 s, turning at 18.45 |
| 9 | 43-49 | a swallow's shadow crosses the whole frame once | bird 11 crosses south of the counter at 46.0 s, low and fast |
| 10 | 49-54 | nine swallows cross the patch, and nine shadows cross the floor picture | NOON_PASSES, nine crossings 49.3 to 53.05 s |
| 13 | 64-70 | a swallow's shadow crossing the balustrade | bird 8 flies the mezzanine front at 67.1 s |
| 15 | 75-81 | a dozen stream back in through the broken pane | RETURN_ORDER, twelve arrivals from 75.55 s at 0.27 s apart |
| 18 | 92-99 | the capitals occupied again, and the last swallow settling into one | all fourteen down; bird 3 — the third to leave in shot 1 — lands on the capital it woke on at 96.35 s |
Fauna.census(t) answers how many are inside at a film second, and which.
What it reads from the room
The colony perches on the hall's own stone rather than near it. adoptCapitals()
reads the mezzanine colonnade's hall_col_abacus_N slabs and the window's
hall_window_transom off the live scene at build time and hands their positions
to flight; the constants in flight are only the fallback for a room that has
not been built yet. If the hall slice renames or moves those pieces, this is
the one call that has to follow them.
Everything else — the room's extents, the window's grid, which pane is missing —
comes from demo.film (Film.ROOM, Film.WINDOW) and is not restated here.
Scoped to this part · feeds back into the world's score.