# Asset intake research

Tera can learn from an open-source asset without turning that project into a
dependency. The default is to internalise the capability: identify the smallest
useful visual rule, rebuild it against Tera's contracts, and keep the result
code-only and deterministic. Copy source only when a rewrite would add no value,
and copy no binary art into `src/**`.

This review was performed on 2026-08-11 for the first office exteriors.

## California corridor vehicle

The black corridor vehicle is an original procedural Three.js asset authored in
`src/assets/vehicles/modelX.ts`. An AI-generated image was used only as a
non-shipping art-direction reference for stance, surface hierarchy, camera
distance, and late-afternoon contrast. No pixels, mesh, logo, texture, or source
file from that reference is distributed by Tera. The implementation is an
unbadged code-generated crossover with two explicit detail tiers, shared
geometry/material cloning, named wheel joints, and deterministic tests.

The corridor route pack is also hand-authored. Its nodes are coarse simulation
waypoints, not navigation data, and each segment records its own provenance and
fitness note in `src/transport/california.ts`. I-5 is presented honestly with
its I-580 and I-80 connection into San Francisco.

## Actor set

The customizable humanoid, anonymous office dog, and anonymous Tera crow under
`src/assets/actors/` are original procedural TypeScript. They use no downloaded
mesh, texture, rig, animation, logo, or motion-capture data. Each asset exposes
named pose joints, metre-scale metrics, shared-resource cloning, and explicit
disposal so a later presence layer can animate many actors without changing the
asset or ownership contracts. A caller may provide a face texture to the
humanoid, but that texture remains caller-owned and is never bundled by core.

## Sources assessed

| Source | Licence and useful part | Decision for Tera |
| --- | --- | --- |
| [BasicProceduralBuilding](https://github.com/achrefelouafi/BasicProceduralBuilding/tree/f97984d1c2e5fae484a6c7d0dc01f721c117a6ba) | MIT. A façade grid classifies ground, window, corner, and roof cells, then instances pieces from a Blender-authored GLB kit. | Keep the façade grammar. Do not import the GLB, its coordinate conversion, or its per-kit-mesh runtime. Tera's office glyph implementation is original code at map scale. |
| [KayKit City Builder Bits 1.0](https://github.com/KayKit-Game-Assets/KayKit-City-Builder-Bits-1.0/tree/63976910ca04d16f0fc531b9c614244be8128713) | CC0 low-poly city pieces in GLTF, OBJ, and FBX, with a shared texture atlas. | Good silhouette reference and a viable source for a future optional art pack. Do not place its binaries in core `src/**`; core remains code-only. |
| [img2threejs](https://github.com/img2threejs/img2threejs) | Apache-2.0 procedural Three.js reconstruction code. | Workflow reference only. Its image-to-scene problem is broader than office exteriors. |
| [Claude-of-Duty](https://github.com/mshumer/Claude-of-Duty) | MIT, code-generated materials and modular Three.js buildings. | Reference for generated-material and browser-QA techniques. It is too large and game-specific to copy wholesale. |
| [Khronos glTF Sample Assets](https://github.com/KhronosGroup/glTF-Sample-Assets/blob/main/Models/Models.md) | A useful interoperability corpus, but every model has its own licence. | Test fixtures only after checking the individual asset's licence; it is not one uniformly reusable art library. |
| [pmndrs market](https://github.com/pmndrs/market) | CC0 asset registry and delivery tooling. | Discovery source, not a runtime dependency. Tera does not need an asset API to draw three map glyphs. |
| [open-source-3D-assets](https://github.com/ToxSam/open-source-3D-assets) | A catalogue of downloadable assets with licences recorded per entry. | Discovery source only; verify the original file and licence before any intake. |

## Pilot decision: office buildings on the city board

The reusable idea from BasicProceduralBuilding is its grammar, not its kit.
At Tera's city scale, one-metre modules are usually sub-pixel. Recreating them
as individual geometry would spend triangles and draw calls on information the
camera cannot retain. The Tera-native implementation therefore uses:

- a small serialisable `BuildingGlyph` on the existing generic `Marker` type;
- pure layouts for tower, hangar, courtyard, and block silhouettes;
- one instanced window mesh per destination, plus a few solid shell pieces;
- seeded façade variation, so reloads never reshuffle the skyline;
- reserved city footprints, so the stable glyph supersedes an anonymous block
  or a coarser hand-authored landmark at the same address instead of nesting;
- the existing marker raycaster and office-open path, so no office semantics
  enter the engine.

No third-party source or binary asset was copied for this pilot, so no new
third-party attribution is required in `NOTICE`. The links above record the
research provenance and the implementation comments record the design lineage.

## Intake rules

Before copying any future asset or source file:

1. Pin the upstream URL and commit, and record exactly which files are copied.
2. Prefer CC0 for artistic output. Apache-2.0, MIT, and BSD code can be used only
   with their required licence and notice text preserved. A Tera rewrite does
   not erase upstream authorship when source was actually copied.
3. Do not intake unlicensed work, non-commercial licences, share-alike content,
   logos, trademarks, or scraped map/imagery data.
4. Keep binary art out of `src/**`. A future optional art pack belongs behind a
   registry or self-hosted `/art/*` URL and must keep its own provenance ledger.
5. Copy the smallest coherent part, translate it to Tera's data and disposal
   conventions, add deterministic tests, and verify it in the GPU browser.
6. Update `NOTICE` in the same change whenever copied source or bundled art has
   an attribution or licence-preservation requirement.

## Useful next targets

The office catalogue already covers the common furniture. The most valuable
remaining procedural pieces are circulation and place-making rather than more
chairs: a stair/landing asset for multi-storey packs, a kitchen island/service
counter, and a small exterior plaza kit (planters, bollards, and benches). Each
is simple enough to author in Tera's metre-based asset registry; use a CC0 kit
such as KayKit as shape reference only when it materially improves the result.
