# Asset credits

The third-party assets in this folder are CC0 1.0 assets from Poly Haven and ambientCG. The game serves these downloaded assets locally and makes no live asset-service API calls.

License: https://polyhaven.com/license
ambientCG license: https://docs.ambientcg.com/license/
CC0 text: https://creativecommons.org/publicdomain/zero/1.0/

- [Rocky Trail](https://polyhaven.com/a/rocky_trail) by Amal Kumar. Pine Forest collection. Paired 2K maps, BOX-filtered from the collection's 4K 16-bit originals in headless Blender and served as 4:4:4 JPEGs at quality 95, supply angular gravel at the measured 2 metre footprint.
- [Forest Ground 04](https://polyhaven.com/a/forest_ground_04) by Rob Tuytel, Rico Cilliers. 2K source maps.
- [Ground 037](https://ambientcg.com/view?id=Ground037) by ambientCG. CC0 surface photogrammetry; 1K original color, OpenGL normal and roughness maps, covering 2.1 by 2.1 metres. This damp moss/soil/twig source is distinct from procedural moss assets.
- [Forest Leaves 04](https://polyhaven.com/a/forest_leaves_04) by Rob Tuytel. Pine Forest collection. Paired 1K diffuse, OpenGL normal and roughness maps supply leaf litter at a 1.5 metre footprint.
- [Leafy Grass](https://polyhaven.com/a/leafy_grass) by Charlotte Baglioni. CC0; 1K original diffuse, OpenGL normal and roughness maps, covering 2 by 2 metres. It supplies low herbs mixed with natural litter.
- [Gravelly Sand](https://polyhaven.com/a/gravelly_sand) by Dario Barresi. Namaqualand collection. Paired 2K maps supply granular exposed soil at a 2.48 metre footprint; game weather controls wetness.
- [Asphalt 02](https://polyhaven.com/a/asphalt_02) by Rob Tuytel. 2K source maps.
- [Rocky Terrain 02](https://polyhaven.com/a/rocky_terrain_02) by Amal Kumar. 1K source maps.
- [Grass Path 2](https://polyhaven.com/a/grass_path_2) by Rob Tuytel. 2K source maps.
- [Withered Grass](https://polyhaven.com/a/withered_grass) by Charlotte Baglioni. CC0; a photographed mat of lying grass fibres, covering 2 by 2 metres. `textures/sward/diffuse.jpg` uses an 8-bit 2K JPEG at quality 93 with full chroma resolution. `detail.png` packs OpenGL normal X, roughness, normal Y and normal Z in 8-bit RGBA at 2K, the native source resolution. Each source normal vector is renormalized before quantization. Both maps cover the same 2 metre footprint. Alpha contains normal Z, not opacity. Original 2K downloads remain unchanged outside runtime delivery in `dev-assets/texture-sources/sward/`, named by SHA256. `scripts/prepare-sward-surface.mjs` verifies official API MD5 checksums; `scripts/pack-sward-surface.py` (headless Blender) verifies packed samples after PNG decode and measures normal angular quantization; `scripts/prepare-sward-surface.mjs` measures the colour JPEG error. `textures/sward/provenance.json` and `manifest.json` record source URLs, hashes, footprint and decode audits. The offline source-acquisition tool is powered by [Poly Haven](https://polyhaven.com/). Regional colour and stochastic sampling are game code; source photographs receive no colour grading.
- [Fine Grained Wood](https://polyhaven.com/a/fine_grained_wood) by Rob Tuytel. CC0; unmodified 1K diffuse, OpenGL normal and roughness maps in `textures/timber/`. Current official dimensions are 0.60 by 0.60 metres. `scripts/prepare-timber-surface.mjs` verifies official download MD5 values and records SHA256 in `manifest.json`. The Alpine material calibrates the dark brown source toward medium weathered timber without changing its image bytes; original board geometry supplies joints and seeded grain offsets. The source is used as fine sawn grain, not as a photograph of pre-existing board seams.
- [Snow 02](https://polyhaven.com/a/snow_02) by Rob Tuytel. Paired 2K color, OpenGL normal and roughness maps, used at a 2 metre footprint on ground and roads.
- [Brick Wall 001](https://polyhaven.com/a/brick_wall_001) by Dimitrios Savva, photography, and Rob Tuytel, processing. CC0; 1K diffuse, OpenGL normal and roughness maps in `textures/wall-brick/`. The source covers 3 metres.
- [Painted Plaster Wall](https://polyhaven.com/a/painted_plaster_wall) by Amal Kumar. CC0; 1K diffuse, OpenGL normal and roughness maps in `textures/wall-plaster/`. The source covers 2 metres.
- [Concrete Floor Worn 02](https://polyhaven.com/a/concrete_floor_worn_02) by Dimitrios Savva. CC0; 1K diffuse, OpenGL normal and roughness maps in `textures/yard-concrete/`. The source covers 2 metres.
- [Kloofendal 48d Partly Cloudy (Pure Sky)](https://polyhaven.com/a/kloofendal_48d_partly_cloudy_puresky) by Greg Zaal, Jarod Guest. 1K source maps.
- [Pine Sapling Small](https://polyhaven.com/a/pine_sapling_small) by Rob Tuytel, Rico Cilliers. 9,618 triangles after browser preparation.
- [Fir Sapling](https://polyhaven.com/a/fir_sapling) by Rob Tuytel, Rico Cilliers. 12,399 triangles after browser preparation.
- [Rock Moss Set 01](https://polyhaven.com/a/rock_moss_set_01) by Kless Gyzen. 13,878 triangles after browser preparation.
- [Namaqualand Boulder 03](https://polyhaven.com/a/namaqualand_boulder_03) by Dario Barresi, photography, and Jenelle van Heerden, modeling. The boulder uses 2,700 triangles, native scan UVs and paired 1K PBR maps. Its shared collision profile is derived from the delivered geometry.
- [Dead Tree Trunk](https://polyhaven.com/a/dead_tree_trunk) by Rob Tuytel. Pine Forest collection. Two shoreline wood variants use 1,400 triangles each and shared 512-pixel color, normal and packed ORM maps, fitted to the existing debris footprints.
- [Kloofendal Overcast](https://polyhaven.com/a/kloofendal_overcast) by Greg Zaal, from A Verdant Trail, and [Rogland Overcast](https://polyhaven.com/a/rogland_overcast) by Greg Zaal, from Namaqualand, supply temperate and dry regional indirect light.
- [Secluded Beach](https://polyhaven.com/a/secluded_beach) by Greg Zaal, with backplates by Rico Cilliers, from The Smuggler's Cove, supplies coastal indirect light.
- [Snow Field 2, Pure Sky](https://polyhaven.com/a/snow_field_2_puresky) by Sergej Majboroda, original, and Jarod Guest, sky edits, supplies snowy regional indirect light. The four regional probes are prepared at 1K with matched average linear energy and limited bright source discs. The game retains its dynamic sun, moon and weather sky. Original source hashes and prepared delivery hashes are recorded in the asset manifest.
- [Fir Tree 01](https://polyhaven.com/a/fir_tree_01) by Rob Tuytel, Rico Cilliers. 9,091 triangles after browser preparation.
- [Fir Sapling Medium](https://polyhaven.com/a/fir_sapling_medium) by Rob Tuytel, Rico Cilliers. 13,055 triangles after browser preparation.
- [Pine Tree 01](https://polyhaven.com/a/pine_tree_01) by Rob Tuytel, photography, and Rico Cilliers, modeling. CC0. The selected true pine has 12,818 triangles nearby and 3,545 at distance. Verified source twig opacity and smaller bent shoots aligned along source branches retain its crown; only selected binary ranges are downloaded during preparation.
- [Fern 02](https://polyhaven.com/a/fern_02) by Rob Tuytel, scanning, and Rico Cilliers, modeling. CC0. Two source frond variants retain their measured metre scale and photographed opacity. Nearby geometry has 2,384 or 784 triangles; distant geometry has 904 or 310.
- [Shrub Sorrel 01](https://polyhaven.com/a/shrub_sorrel_01) by Rico Cilliers. CC0. Two source leaf clusters use 353 or 284 triangles nearby, and 189 or 164 at distance, with the original opacity mask.
- [Shrub 01](https://polyhaven.com/a/shrub_01) by Rico Cilliers. CC0. One complete flowering sample is selected across an empty gap in the source botanical display row, then reduced to 2,191 triangles nearby and 595 at distance. Photographed leaves, flowers and the source opacity remain intact.
- [Tree Small 02](https://polyhaven.com/a/tree_small_02) by Rico Cilliers. CC0. Photographic leaf and bark maps supply detail for original regional broadleaf geometry. Its source species is Burkea africana; the full source model is not labeled as oak, birch, beech or willow.

The ordinary grass families in `models/ecology/` (fescue, ryegrass and clover, seed 49111) are original project geometry with Cycles-baked albedo, roughness and tangent-normal maps generated by `scripts/blender/gen_woodland_ecofoliage.py`, released under CC0-1.0. `models/ecology/manifest-49111.json` records the seed, Blender version, triangle counts, hashes and the shared content-addressed images under `models/ecology/textures/`; the named source PNGs stay private in `asset-sources/vegetation/blender/ecology/`.

See manifest.json for exact original download URLs, checksums, byte ranges, file sizes, and preparation details. All assets remain CC0.

The woodland-floor pass combines Forest Ground 04 and the three floor sources above in two four-layer WebGL2 texture arrays for Atlantic and Boreal stages. Original photographs were inspected before admission. `scripts/prepare-woodland-floor.mjs` and `scripts/pack-woodland-floor.py` preserve source JPEGs, verify official Poly Haven checksums and ambientCG archive integrity, and record SHA256 values. Color arrays retain the decoded source sRGB8 bytes; shaders linearize them without dark linear-RGB8 quantization. Detail arrays retain OpenGL normal RGB and the paired source roughness in alpha. Each layer has its own repeating mip chain and measured footprint. Color, normal and roughness use the same stochastic UVs and explicit gradients; normal slopes rotate and reflect with their source images. The arrays occupy 42.67 MiB including mip levels and add two samplers. Their moss, needle, herb and litter weights follow original shared habitat fields; they do not change terrain height or tire surfaces. Other province families retain their existing materials.

The mature and full firs use source-guided crossed branch cards. Twig diffuse color and matching Poly Haven CC0 opacity masks are packed into RGBA textures. Card materials require alpha testing and double-sided rendering. See scripts/prepare-foliage-cards.mjs.

The delivered full fir and its distant LOD have a documented orientation correction: photographic card normals now agree with glTF right-handed face winding. Source images, source attribution, alpha masks, positions, UVs, indices, trunk scale and triangle budgets remain unchanged. The offline `scripts/repair-fir-normals.mjs` correction is idempotent; the manifest retains before/after file and geometry hashes plus hashes protecting all non-normal binary data. Future preparation emits the corrected normals directly.

The regional oak, birch, beech and willow branching and folded leaf-blade geometry are original, with photographic detail adapted from Tree Small 02 as credited above. Village facades, slate and clay roofs, hedges, timber fences and roadside hardware are original procedural assets generated by the game. World-space wear and weather deposition are generated deterministically from the stage seed.

The reactive adult spectators, clothing, signs, fan furniture, civic halls, garages, apartments, regional plants, junction closures and direction boards are original procedural geometry and textures. Crowd ambience, impact resonance and particle textures are generated locally. No new third-party assets were added for the rally atmosphere pass.

The coastal terrain pass adds [Coast Sand 01](https://polyhaven.com/a/coast_sand_01) by Rob Tuytel, CC0. Its 2K diffuse, OpenGL normal and roughness maps keep their source checksums in manifest.json. The source covers 15 metres. Shoreline wetting and irregular beach-to-rock blending are generated locally. New coastal and urban buildings and furniture are original procedural assets.

The version 0.9 infill pass adds original modular facade detail, static civilian cars and vans, dinghy hulls and interiors, timber cradles, boat trailers, drying nets, lobster pots, rope drums, picnic furniture and boundary walls. Marine paint wear, timber grain, net weave, parking markings and local yard stains are original procedural textures or geometry. The three scanned wall and yard materials credited above retain their source URLs, authors and checksums in manifest.json.

The 0.15 masonry pass adds original granite-rubble, limestone and brick construction geometry, recessed joints, finished ends, coping and restrained generated mineral grain. It replaces the presentation of existing garden, coastal and urban walls inside their existing physical envelopes. No third-party meshes, photographs or textures were added for this pass.

The modular regional roadside kits under `regional/props/` are original procedural geometry and generated textures. They include Atlantic slate walls and drainage swales, Mediterranean limestone barriers and olive-stone terraces, Alpine granite blocks and log retainers, Boreal mossy boulders and timber fences, and Karoo weathered red-granite koppie boulders and dry-stone kraal walls (their generated atlas is coloured to match the Karoo ground kit, but contains no Poly Haven pixels). `scripts/blender/gen_regional_props.py` generates the metre-scale meshes and shared regional albedo, tangent-normal and packed ORM atlases. The regional manifest records output hashes, bounds, geometry budgets and actual delivered texture identities. No third-party source images or meshes are used by these kits.

`scripts/prepare-regional-plants.mjs` prepares the true pine, fern, sorrel and broadleaf maps from verified official Poly Haven downloads. The manifest records source authors, source URLs, checksums, selected binary ranges, output hashes and LOD counts. Plant models retain double-sided alpha testing; they do not use solid rectangular leaf cards. The game serves all prepared files locally.

The world-foundation material pass adds [Gravel Ground 01](https://polyhaven.com/a/gravel_ground_01) by Rob Tuytel (3 metre source), and [Rock Face](https://polyhaven.com/a/rock_face) by Greg Zaal (photography) and Dario Barresi (processing; 2.38 metre source). Both are CC0. Gravel Ground 01 serves the official 2K diffuse and roughness maps unchanged, with a 2K OpenGL normal derived from the matched official 2K displacement; Rock Face is served at 2K (below). Mineral road/ground and exposed vertical stone use separate sources; the older mossy Rocky Terrain source remains credited for preserved files. scripts/prepare-mineral-surfaces.mjs records source URLs and checksums in manifest.json.

`scripts/optimize-plant-assets.mjs` shares byte-identical plant images across model variants and LODs. Images retain their exact prepared PNG/JPEG bytes, resolution, opacity and CC0 source attribution; geometry, UVs, normals and material settings are unchanged. Plant GLBs reference local content-addressed files in `models/plant-shared/` using loader-safe child-relative URIs. `manifest.json` records each shared image's SHA256, original source/author/license, model references, and normalized geometry/material payload hashes. All plant preparation scripts run this lossless delivery step; no external image host is used during play.

The authored Atlantic urban tenement adapts [Modular Urban Apartments Facade](https://polyhaven.com/a/modular_urban_apartments_facade) by James Ray Cock, [CC0](https://polyhaven.com/license). Its twelve 1K source JPEGs remain byte-identical. Original project additions include the slate hip/gable roofs, flue, internal floors/partitions and distant pane-grid frames. Native source apertures, trim profiles and texture mapping remain at metre scale. `scripts/prepare-authored-architecture.ts` verifies the cached official source and writes six complete, six-material building models under `architecture/atlantic-tenement-01/`, rather than shipping the exploded development kit. Exact source/output hashes, source URLs, low-frame/roof bounds and LOD budgets are in that folder's `provenance.json` and the architecture entry in `manifest.json`. The three original 256-pixel slate maps use lossless PNG delivery. Runtime whole-building instances share these models and materials; the architecture kit is used only by explicitly tagged Atlantic three-storey apartments.

- [Clay Roof Tiles 02](https://polyhaven.com/a/clay_roof_tiles_02) by Amal Kumar. CC0; official 1K diffuse, OpenGL normal and roughness maps in `textures/roof-clay/`, preserved byte-identically. Verified footprint 2.5 by 2.5 metres.
- [Roof Slates 02](https://polyhaven.com/a/roof_slates_02) by Rob Tuytel. CC0; official 1K diffuse, OpenGL normal and roughness maps in `textures/roof-slate/`, preserved byte-identically. Verified footprint 3 by 3 metres.
- [Old Stone Wall](https://polyhaven.com/a/old_stone_wall) by Charlotte Baglioni. CC0; official 1K diffuse, OpenGL normal and roughness maps in `textures/wall-limestone/`, preserved byte-identically. Verified footprint 2 by 2 metres.
- [Granite Wall](https://polyhaven.com/a/granite_wall) by Dimitrios Savva. CC0; official 1K diffuse, OpenGL normal and roughness maps in `textures/wall-granite/`, preserved byte-identically. Verified footprint 1.9 by 1.9 metres.

- [wooden_crate_01](https://polyhaven.com/a/wooden_crate_01) by James Ray Cock. CC0; source UVs/metres retained, optimized single-mesh scan and 512px albedo/OpenGL normal/ARM maps in `regional/yard/`.
- [wooden_bucket_01](https://polyhaven.com/a/wooden_bucket_01) by James Ray Cock. CC0; source UVs/metres retained, optimized single-mesh scan and 512px albedo/OpenGL normal/ARM maps in `regional/yard/`.
- [metal_toolbox](https://polyhaven.com/a/metal_toolbox) by Mateusz Sadek. CC0; source UVs/metres retained, optimized single-mesh scan and 512px albedo/OpenGL normal/ARM maps in `regional/yard/`.

The recorded environmental bed uses three CC0 recordings prepared from [Tidewater audio](https://github.com/dgreenheck/tidewater/blob/4811ba48d795197de5621985f404e765c0b7c0ef/public/audio/CREDITS.md): [strong wind on coastal path](https://freesound.org/people/bruno.auzet/sounds/706471/) by bruno.auzet, [distant waves from a cliff](https://freesound.org/people/chris_dagorne/sounds/426074/) by chris_dagorne, and [Night Crickets Back Porch](https://freesound.org/people/hdfreema/sounds/333221/) by hdfreema. All use [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). The crickets source is a summer-night recording from North Carolina, used as a restrained warm-weather insect bed, not as a claim of species-specific regional field recording. `scripts/import-ambient-audio.py` preserves source channels, prepares 16-second loops with half-second equal-power wrap crossfades, and encodes Opus at 64 kb/s. `audio/provenance.json` records the pinned upstream commit, source and delivery hashes, authors, durations, decoded memory, levels and loop-edge audit. Surf is gated by actual shoreline distance; insects by warmth, darkness and absence of snow. No bird or marine-engine recordings are used.

The engine mechanical texture uses [racing car engine sound loops](https://opengameart.org/content/racing-car-engine-sound-loops), loop_0.wav by domasx2, [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). The author states that the current loops were remade from a public-domain pdsounds car recording. The delivered WAV is byte-identical; runtime pitch follows the shared drivetrain. The 1287 RPM reference is inferred from its measured 42.9 Hz cycle, not a documented engine specification. Exact source, license evidence and file hashes are in audio/provenance.json and manifest.json.

The ground surfaces from Gravelly Sand, Snow 02, Coast Sand 01, Rock Face, Asphalt 02, Forest Ground 04 and Grass Path 2 are served at 2K, re-encoded at JPEG quality 86 for download size; manifest.json records both the source and served checksums (scripts/upgrade-ground-textures.mjs).

## Karoo biome kit

The Karoo / Namaqualand kit in `textures/karoo/` and `models/karoo/` uses only [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) assets from [Poly Haven](https://polyhaven.com/) (license: https://polyhaven.com/license). `scripts/prepare-karoo-kit.mjs` downloads the ground scans through the Poly Haven API and verifies the official MD5 values; `scripts/blender/prepare_karoo_kit.py` re-encodes them in headless Blender and prepares the models from the local Poly Haven Namaqualand collection scene. manifest.json records every source URL, author, checksum, footprint, triangle count, bound and delivered file hash under `karoo/` ids.

Ground layers (2K, OpenGL normals, roughness unchanged; JPEG quality 86 re-encode, sward detail packed as `textures/sward/`):

- Rock: [Tiger Rock](https://polyhaven.com/a/tiger_rock) by Dario Barresi. 2.55 metre footprint.
- Rock face: [Cliff Side](https://polyhaven.com/a/cliff_side) by James Ray Cock and Dario Barresi, photography, and Jenelle van Heerden, processing. 1.83 metre footprint.
- Sand: [Red Sand](https://polyhaven.com/a/red_sand) by Rohit Seervi. 3 metre footprint.
- Dry earth (mud): [Cracked Red Ground](https://polyhaven.com/a/cracked_red_ground) by Amal Kumar. 2 metre footprint.
- Veld ground cover (sward): [Grass Ground](https://polyhaven.com/a/grass_ground) by Charlotte Baglioni. 2.51 metre footprint.
- Gravel road: [Sandy Gravel 02](https://polyhaven.com/a/sandy_gravel_02) by Dario Barresi. 2.53 metre footprint.

Models (Namaqualand collection; scan UVs and photographed maps retained, reduced in headless Blender, near and distant levels share content-addressed textures):

- [Quiver Tree 01](https://polyhaven.com/a/quiver_tree_01) by James Ray Cock and Dario Barresi, photography, and Rico Cilliers, modeling.
- [Quiver Tree 02](https://polyhaven.com/a/quiver_tree_02) by Dario Barresi, photography, and Rico Cilliers, modeling.
- [Searsia Lucida](https://polyhaven.com/a/searsia_lucida), [Othonna Cerarioides](https://polyhaven.com/a/othonna_cerarioides), [Crystalline Iceplant](https://polyhaven.com/a/crystalline_iceplant) and [Flower Gazania](https://polyhaven.com/a/flower_gazania) by Jenelle van Heerden, photography, and James Ray Cock, modeling.
- [Didelta Spinosa](https://polyhaven.com/a/didelta_spinosa) and [Flower Heliophila](https://polyhaven.com/a/flower_heliophila) by Jenelle van Heerden.
- [Flower Stinkkruid](https://polyhaven.com/a/flower_stinkkruid) and [Flower Ursinia](https://polyhaven.com/a/flower_ursinia) by Jenelle van Heerden, photography, and Rico Cilliers, modeling.
- [Namaqualand Boulder 02](https://polyhaven.com/a/namaqualand_boulder_02) by Greg Zaal, photography, and Rico Cilliers, modeling.
- [Namaqualand Boulder 03](https://polyhaven.com/a/namaqualand_boulder_03) and [Namaqualand Boulder 05](https://polyhaven.com/a/namaqualand_boulder_05) by Dario Barresi, photography, and Jenelle van Heerden, modeling.
- [Namaqualand Boulder 04](https://polyhaven.com/a/namaqualand_boulder_04) by Jenelle van Heerden.
- [Namaqualand Boulder 06](https://polyhaven.com/a/namaqualand_boulder_06), [Namaqualand Boulders 01](https://polyhaven.com/a/namaqualand_boulders_01), [Namaqualand Rocks 01](https://polyhaven.com/a/namaqualand_rocks_01) and [Namaqualand Stones 01](https://polyhaven.com/a/namaqualand_stones_01) by Greg Zaal, photography, and Jenelle van Heerden, modeling.

## Tropical island biome kit

The volcanic tropical island kit in `textures/tropical/` and `models/tropical/` uses only [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) assets from [Poly Haven](https://polyhaven.com/) (license: https://polyhaven.com/license) and original project work. `scripts/prepare-tropical-kit.mjs` downloads every Poly Haven source through the Poly Haven API and verifies the official MD5 values; `scripts/blender/prepare_tropical_kit.py` prepares the kit in headless Blender. manifest.json records every source URL, author, checksum, footprint, triangle count, bound and delivered file hash under `tropical/` ids.

Ground layers (2K, OpenGL normals, roughness unchanged; JPEG quality 86 re-encode, sward detail packed as `textures/sward/`):

- Rock: [Dark Rock](https://polyhaven.com/a/dark_rock) by Amal Kumar. 2.42 metre footprint.
- Rock face: [Dark Rock 02](https://polyhaven.com/a/dark_rock_02) by Amal Kumar. 2.0 metre footprint.
- Beach sand: [Sand 01](https://polyhaven.com/a/sand_01) by Rob Tuytel. 1.5 metre footprint.
- Laterite soil (mud): [Red Laterite Soil Stones](https://polyhaven.com/a/red_laterite_soil_stones) by Amal Kumar. 2 metre footprint.
- Ground cover (sward): [Forest Ground 01](https://polyhaven.com/a/forrest_ground_01) by Rob Tuytel. 2 metre footprint.
- Coral gravel road: [Coral Mud 01](https://polyhaven.com/a/coral_mud_01) by Rob Tuytel. 2 metre footprint.

Plants (Smugglers Cove collection glTF scans with their separate 1K maps, reduced in headless Blender; near and distant levels share content-addressed textures):

- [Anthurium Botany 01](https://polyhaven.com/a/anthurium_botany_01), [Calathea Orbifolia 01](https://polyhaven.com/a/calathea_orbifolia_01) and [Pachira Aquatica 01](https://polyhaven.com/a/pachira_aquatica_01) by Rob Tuytel, scanning, and Rico Cilliers, modeling.
- [Grass Bermuda 01](https://polyhaven.com/a/grass_bermuda_01) by Rico Cilliers.

Basalt rocks (derivatives): the scan meshes, UVs and normal maps of [Namaqualand Boulder 02](https://polyhaven.com/a/namaqualand_boulder_02) by Greg Zaal, photography, and Rico Cilliers, modeling; [Namaqualand Boulder 03](https://polyhaven.com/a/namaqualand_boulder_03) and [Namaqualand Boulder 05](https://polyhaven.com/a/namaqualand_boulder_05) by Dario Barresi, photography, and Jenelle van Heerden, modeling; [Namaqualand Boulder 04](https://polyhaven.com/a/namaqualand_boulder_04) by Jenelle van Heerden; [Namaqualand Boulder 06](https://polyhaven.com/a/namaqualand_boulder_06), [Namaqualand Boulders 01](https://polyhaven.com/a/namaqualand_boulders_01), [Namaqualand Rocks 01](https://polyhaven.com/a/namaqualand_rocks_01) and [Namaqualand Stones 01](https://polyhaven.com/a/namaqualand_stones_01) by Greg Zaal, photography, and Jenelle van Heerden, modeling. Their surface colour and roughness are the [Dark Rock](https://polyhaven.com/a/dark_rock) scan by Amal Kumar, box-projected at its real footprint and baked into the scan UVs, shaded by each scan's own cavity detail.

Coconut palms: `coconut-palm-01` to `-03` are original procedural geometry and textures generated by `scripts/blender/prepare_tropical_kit.py`, with no external source assets, released under CC0 1.0 with the rest of the kit.

## East Asian mountain countryside biome kit

The East Asian mountain countryside kit in `textures/eastasia/` and `models/eastasia/` uses only [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) assets from [Poly Haven](https://polyhaven.com/) (license: https://polyhaven.com/license) and original project work. `scripts/prepare-eastasia-kit.mjs` downloads every Poly Haven source through the Poly Haven API and verifies the official MD5 values; `scripts/blender/prepare_eastasia_kit.py` prepares the kit in headless Blender. manifest.json records every source URL, author, checksum, footprint, triangle count, bound and delivered file hash under `eastasia/` ids.

Ground layers (2K, OpenGL normals, roughness unchanged; JPEG quality 86 re-encode, sward detail packed as `textures/sward/`):

- Mossy rock: [Mossy Rock](https://polyhaven.com/a/mossy_rock) by Rob Tuytel. 3 metre footprint.
- Rock face: [Lichen Rock](https://polyhaven.com/a/lichen_rock) by Rico Cilliers. 2 metre footprint.
- Riverbank sand: [Sand 03](https://polyhaven.com/a/sand_03) by Charlotte Baglioni. 2 metre footprint.
- Paddy mud: [Brown Mud 02](https://polyhaven.com/a/brown_mud_02) by Rob Tuytel. 1.3 metre footprint.
- Moss and grass ground cover (sward): [Aerial Grass Rock](https://polyhaven.com/a/aerial_grass_rock) by Rob Tuytel. 15 metre footprint.
- River-pebble gravel road: [Ganges River Pebbles](https://polyhaven.com/a/ganges_river_pebbles) by Amal Kumar. 2.16 metre footprint.

Building surfaces (official 1K albedo, OpenGL normal and roughness bytes retained, as `textures/roof-clay/`):

- Kawara roof tiles (`textures/eastasia/roof-tile/`): [Grey Roof Tiles](https://polyhaven.com/a/grey_roof_tiles) by Rob Tuytel. 3 metre footprint.
- Dark timber wall siding (`textures/eastasia/wall-timber/`): [Weathered Plank Siding](https://polyhaven.com/a/weathered_plank_siding) by Dimitrios Savva. 1.57 metre footprint.

Plants and props: `bamboo-01` to `-03`, `rice-01` and `-02`, `japanese-cedar-01` and `-02`, `stone-lantern-01` and `torii-01` are original procedural geometry and textures generated by `scripts/blender/prepare_eastasia_kit.py`, released under CC0 1.0 with the rest of the kit. The Japanese cedar trunks and branches use the [Chinese Cedar Bark](https://polyhaven.com/a/chinese_cedar_bark) scan by Charlotte Baglioni (official 1K maps, re-encoded); their foliage is original.

The East Asian regional roadside kit under `regional/props/eastasia/` (mossy boulders and dry-laid rice-terrace stone walls) is original procedural geometry and generated textures from `scripts/blender/gen_regional_props.py`; its atlas is coloured to match the ground kit but contains no Poly Haven pixels.

## Co-driver voice

The pace-note recordings in audio/codriver were synthesized offline with [Piper](https://github.com/rhasspy/piper) using the voice model en_GB-northern_english_male-medium, trained on the [OpenSLR SLR83 British Isles English corpus](http://www.openslr.org/83/) (Demirsahin et al., Google). The corpus is licensed [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/); the 65 recordings are shared under the same licence. Processing: length scale 0.8, silence trimmed, peak-normalised; the game adds a band-limited helmet-intercom voicing at runtime.

## Engine sound

The engine is synthesized at runtime by client/engineSynth.worklet.js, a port of [engine-sound-generator](https://github.com/Antonio-R1/engine-sound-generator) by Antonio-R1 (MIT), after Baldan et al., "Physically informed car engine sound synthesis for virtual and augmented environments" (2015).

## Rally car

The Kestrel rally hatch body in `vehicles/kestrel-rally-body.glb` is an original design generated by `scripts/blender/build_rally_car.py` in headless Blender. It uses no third-party meshes, photographs, textures, manufacturer shapes, names or marks. Wheels, tyres and calipers are original procedural geometry in the game. `vehicles/provenance.json` records the build command, SHA256, triangle counts, material roles and bounds in metres.

## Music

The menu, lobby and results music in `audio/music/` uses five tracks released under [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) on OpenGameArt. No attribution is required; the authors are credited here with thanks.

- [Final Hour](https://opengameart.org/content/final-hour) by isaiah658. Jungle / drum and bass.
- [Darkness Road (Remake)](https://opengameart.org/content/darkness-roadremake) by MintoDog. Tense racing techno, 165 BPM.
- [Cool Highway (Remake)](https://opengameart.org/content/cool-highway-remake) by MintoDog. Racing synth techno, 140 BPM.
- [Megasong](https://opengameart.org/content/megasong) by Emma_MA. Hard rock / metal instrumental.
- [Action Track](https://opengameart.org/content/action-track) by LushoGames. Rock / electronic, live bass and guitar.

Each track was decoded, trimmed of silence, normalised to -16 LUFS integrated (ITU-R BS.1770) with sample peaks held at -1.5 dBFS before encoding, and re-encoded as 48 kHz stereo Ogg Opus at about 128 kb/s with headless Blender audaspace. `audio/music/manifest.json` lists titles, authors, licences, source pages and durations; `audio/provenance.json` records the original download URLs, source and delivered SHA256, loudness and peak levels. Original downloads are not stored in the repository. client/music.ts streams one track at a time, shuffles and crossfades them, and routes them through the game volume and mute.

## Crowd and tyre recordings

The recorded crowd beds and reactions and the tarmac tyre scrub and squeal loops in `audio/effects/` come from Freesound recordings released under [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/). No attribution is required; the recordists are credited here with thanks.

- [palenie_opon.wav](https://freesound.org/people/monosfera/sounds/628044/) by monosfera, CC0 1.0: `tyre-scrub`
- [Chrysler LHS tire squeal 04 (04-25-2009).wav](https://freesound.org/people/audible-edge/sounds/71739/) by audible-edge, CC0 1.0: `tyre-squeal`
- [Large_crowd_medium_distance_stereo.wav](https://freesound.org/people/eguobyte/sounds/360703/) by eguobyte, CC0 1.0: `crowd-murmur`
- [applause cheer ext medium crowd enthusiastic whistling for outdoor show nice if take out close claps.flac](https://freesound.org/people/kyles/sounds/455659/) by kyles, CC0 1.0: `crowd-cheer`, `applause-outdoor`
- [CRWDCheer_Short Affirmative Cheer_ShaneVincent_GSC24_XY-AKG214-96k.wav](https://freesound.org/people/ShangusBurger/sounds/763830/) by ShangusBurger, CC0 1.0: `cheer-short`
- [Group_Yay_Cheer.wav](https://freesound.org/people/Stevedrums/sounds/393402/) by Stevedrums, CC0 1.0: `cheer-yay`
- [Short Crowd Cheer.flac](https://freesound.org/people/qubodup/sounds/182571/) by qubodup, CC0 1.0: `cheer-crowd-a`
- [Short Crowd Cheer 2.flac](https://freesound.org/people/qubodup/sounds/182572/) by qubodup, CC0 1.0: `cheer-crowd-b`
- [CRWDCele_Large Crowd, Unison Surprise, Cheering_ShaneVincent_GSC24_XY-AKG214-96k.wav](https://freesound.org/people/ShangusBurger/sounds/763828/) by ShangusBurger, CC0 1.0: `cheer-large`
- [S11-28 Outdoor crowd reactions; cheering; very happy.wav](https://freesound.org/people/craigsmith/sounds/675102/) by craigsmith, CC0 1.0: `cheer-outdoor-a`, `cheer-outdoor-b`, `cheer-outdoor-c`
- [CRWDCheer_Cheering, Whistling, No Clapping_ShaneVincent_GSC24_XY-AKG214-96k.wav](https://freesound.org/people/ShangusBurger/sounds/763829/) by ShangusBurger, CC0 1.0: `whistle-cheer-a`, `whistle-cheer-b`
- [CRWDApls_Loud Applause, Cheering, Whistling_ShaneVincent_GSC24_XY-AKG214-96k.wav](https://freesound.org/people/ShangusBurger/sounds/763815/) by ShangusBurger, CC0 1.0: `whistle-applause`
- [CRWDApls_Generic Applause_ShaneVincent_GSC24_XY-AKG214-96k.wav](https://freesound.org/people/ShangusBurger/sounds/763811/) by ShangusBurger, CC0 1.0: `applause-a`, `applause-b`
- [airhorn-short.wav](https://freesound.org/people/guitarguy1985/sounds/68999/) by guitarguy1985, CC0 1.0: `horn-a`
- [Airhorn.WAV](https://freesound.org/people/omanyte99/sounds/784969/) by omanyte99, CC0 1.0: `horn-b`

Each was downloaded as the public Freesound HQ preview, decoded and resampled to 48 kHz mono with headless Blender audaspace (`scripts/audio/effects_prep.py`), filtered with FFT shelves, trimmed to the excerpt listed in the manifest, loudness-normalised (ITU-R BS.1770) with peaks held at -1.5 dBFS, and encoded as Ogg Opus at 48 kb/s. Loops use 1 s equal-power wrap crossfades and a slow level flattener; the tyre scrub keeps only the non-tonal part of a burnout recording (median-filter separation) so engine and squeal tones are removed; tyre loops are low-passed below 8 kHz. `audio/effects/manifest.json` and `audio/provenance.json` record source pages, preview URLs, source and delivered SHA256, excerpts, loudness and loop-seam audits. Original downloads are not stored in the repository.

## Spectators

The roadside and finish crowds in `models/spectators/` use avatars and motion-capture animations from [Microsoft Rocketbox](https://github.com/microsoft/Microsoft-Rocketbox) (Copyright (c) 2020 Microsoft, [MIT licence](https://github.com/microsoft/Microsoft-Rocketbox/blob/master/LICENSE.md); full text in `licenses/microsoft-rocketbox-MIT.txt`). Avatars: Female_Adult_01, 04, 05, 08, 14 and 17; Male_Adult_01, 05, 06, 09, 12, 16 and 17; Construction_Male_07 (course marshals). Animations: idle_neutral_01, idle_look_around_01, cheer_01, cheer_04, claphands_01, wave_01, take_picture, cell_phone_textmessage, drink_drinking, sit_chair_idle_neutral_01, crouch_idle (female and male versions), run_neutral and walk_neutral. `scripts/blender/build_rocketbox_crowd.py` removes hair cards and mouth interiors, reduces each skeleton to 20 joints, decimates three LODs, packs the textures into one atlas and bakes the retargeted, loop-blended clips into a float16 skinning-matrix texture (`crowd-vat.bin`). Held cameras, phones, cups, food and hand-painted signs are original geometry and artwork generated at runtime.
