# 3D look assets: credits and licences

Every file here is **CC0 1.0** (public domain dedication): no attribution required, commercial use allowed.
Credited anyway. Downloaded 2026-10-11 with a generic user agent, no account. Total: 30 files, 5.4 MB.

Used by `look3d.js` (`RS.Look3D`). Which files load depends on the quality tier (`RS.Q3D`):
low = 512 colour maps and the 2K sky band; medium adds 512 normal and roughness maps;
high uses the 1K colour maps and the 4K sky band.

## Sky (Poly Haven)

**Kloofendal 48d Partly Cloudy (Pure Sky)** by Greg Zaal and Jarod Guest. CC0.
https://polyhaven.com/a/kloofendal_48d_partly_cloudy_puresky

| File | What it is |
|---|---|
| `sky_1k.hdr` | The 1K HDR, unmodified (Radiance RGBE). Lighting comes from this file at runtime: image-based lighting through PMREM, or a spherical-harmonics probe. |
| `sky_band_4k.jpg` | The visible sky, elevation 0–45°, made from the 4K HDR. Tone-mapped offline with the same ACES curve as three.js r128, exposure 0.85. 4096×512. |
| `sky_band_2k.jpg` | The same at 2048×256. |

At runtime the sky is turned so its sun lines up with the scene's shadow-casting sun. The sun disc is removed
from the lighting copy (the scene's directional light is the sun), and the lower half is replaced with
street-coloured bounce light. The files themselves are not changed.

## Surfaces

| Files | Source | Authors | Real size |
|---|---|---|---|
| `asphalt_1k.jpg`, `asphalt_512.jpg`, `asphalt_nor_512.jpg`, `asphalt_rough_512.jpg` | Poly Haven **Asphalt 04**: https://polyhaven.com/a/asphalt_04 | Jenelle van Heerden, Sergej Majboroda | 4.04 m |
| `concrete_1k.jpg`, `concrete_512.jpg`, `concrete_nor_512.jpg`, `concrete_rough_512.jpg` (sidewalks, driveways, curbs) | ambientCG **Concrete 016**: https://ambientcg.com/view?id=Concrete016 | ambientCG | ~2 m (estimate) |
| `grass_1k.jpg`, `grass_512.jpg`, `grass_nor_512.jpg`, `grass_rough_512.jpg` (lawns, planting strips) | ambientCG **Grass 004**: https://ambientcg.com/view?id=Grass004 | ambientCG | 1.4 m |
| `stucco_1k.jpg`, `stucco_512.jpg`, `stucco_nor_512.jpg`, `stucco_rough_512.jpg` (house walls; composited with the kit's window layout at runtime) | Poly Haven **Beige Wall 002**: https://polyhaven.com/a/beige_wall_002 | Dimitrios Savva, Rico Cilliers | 3 m (4:1 strip) |
| `shingle_1k.jpg`, `shingle_512.jpg`, `shingle_nor_512.jpg`, `shingle_rough_512.jpg` (dark composition-shingle roofs; the kit's roof tints still apply) | Poly Haven **Roof Slates 03**: https://polyhaven.com/a/roof_slates_03 | Rob Tuytel | 3 m |
| `tile_1k.jpg`, `tile_512.jpg`, `tile_nor_512.jpg`, `tile_rough_512.jpg` (terracotta Spanish-tile roofs) | Poly Haven **Clay Roof Tiles 02**: https://polyhaven.com/a/clay_roof_tiles_02 | Amal Kumar | 2.5 m |
| `bark_512.jpg`, `bark_nor_512.jpg` (tree trunks; London plane / sycamore bark) | Poly Haven **Bark Platanus**: https://polyhaven.com/a/bark_platanus | Dimitrios Savva | 1.5 m |

Processing: resized and re-encoded as JPEG with macOS `sips` (colour at quality 74–78, normal maps 84–86,
roughness 72). Normal maps are OpenGL-convention (Y+), as three.js expects. Roughness maps are remapped to a
realistic range at runtime: photo scans of grass and old paving read too glossy in a renderer.

## Trees (`trees3d.js`, `RS.W3T`)

Added 2026-10-11 (round 2): 5 files, 0.5 MB. The same generic user agent, no account. All CC0.

| File | What it is |
|---|---|
| `trees_1k.jpg` | Tree atlas, colour, 1024×1024, 4×4 cells (medium and high). |
| `trees_a_1k.jpg` | Its alpha (leaf cut-outs), greyscale JPEG. Packed into the colour texture's alpha channel at load: one RGBA texture. |
| `trees_nor_512.jpg` | Normal map of the atlas (bark cells only; leaf cells flat), 512×512 (medium and high). |
| `trees_512.jpg`, `trees_a_512.jpg` | Colour and alpha at 512×512 (low). |

Cells: London plane ×2, coast live oak ×2, Chinese elm ×2, southern magnolia, citrus, Monterey pine tufts,
coast redwood spray strip and queen palm frond strip (both tile along their length), and five barks.

Sources:

| Used for | Source | Authors |
|---|---|---|
| London plane leaves | ambientCG **Leaf Set 010**: https://ambientcg.com/view?id=LeafSet010 | ambientCG |
| Coast live oak leaves | ambientCG **Leaf Set 003**: https://ambientcg.com/view?id=LeafSet003 | ambientCG |
| Elm leaves | ambientCG **Leaf Set 005**: https://ambientcg.com/view?id=LeafSet005 | ambientCG |
| Magnolia leaves | ambientCG **Leaf Set 022**: https://ambientcg.com/view?id=LeafSet022 | ambientCG |
| Citrus leaves | ambientCG **Leaf Set 024**: https://ambientcg.com/view?id=LeafSet024 | ambientCG |
| Redwood sprays | ambientCG **Leaf Set 019**: https://ambientcg.com/view?id=LeafSet019 | ambientCG |
| Plane and elm bark | Poly Haven **Bark Platanus** (the `bark_512.jpg` above): https://polyhaven.com/a/bark_platanus | Dimitrios Savva |
| Oak, magnolia and citrus bark | Poly Haven **Bark Brown 02**: https://polyhaven.com/a/bark_brown_02 | Rob Tuytel |
| Redwood bark | Poly Haven **Metasequoia Bark**: https://polyhaven.com/a/metasequoia_bark | Charlotte Baglioni |
| Monterey pine bark | Poly Haven **Pine Bark**: https://polyhaven.com/a/pine_bark | Dimitrios Savva |
| Palm trunk | Poly Haven **Palm Tree Bark**: https://polyhaven.com/a/palm_tree_bark | Dimitrios Savva (photography), Rico Cilliers (processing) |

Processing (offline, in a browser canvas): single leaves were cut out of the leaf sets by their opacity maps,
colour-graded to summer street-tree greens, and arranged into dense leaf-cluster cards (twigs drawn underneath,
inner leaves darker); redwood sprays were laid along a tileable twig; the Monterey pine needle tufts and the
queen palm's leaflets are drawn, not photographed. Colour under transparent texels is filled from the
neighbouring leaves (so mip levels don't darken the leaf edges). Barks were downscaled into their cells
(1K → 256 px; normals 1K → 128 px). JPEG quality 84 (colour), 90 (alpha), 86 (normals).

## Generated at runtime (no files)

`cars3d.js` draws its small detail atlas in code (five-spoke alloy rims, head- and tail-light units, a California
plate, grille, tyre sidewall) and the brake-light halo; nothing is downloaded for cars, the bus or the train.

The following are drawn in code in `look3d.js` and `cockpit3d.js`, with nothing downloaded:
- road-wear atlas (patches, cracks, sealant, manhole, storm drain, oil, sidewalk joint, curb paint)
- contact-shadow atlas
- lane-paint wear, large-scale variation noise, leaf texture and leaf-cluster normals
- window and wall composites
- the speedometer face, mirror and plastic grain
