docs: arc42 architecture documentation for Gig Line

Populated from the arc42-template (EN/adoc) with project-specific content
across all 12 sections:

1.  Introduction and Goals — requirements overview, quality goals, stakeholders
2.  Architecture Constraints — technical (engine, collision, coordinates),
    organisational (squash-merge, visual review, provenance), conventions
3.  Context and Scope — business and technical context tables
4.  Solution Strategy — technology decisions, top-level decomposition,
    quality achievement approach
5.  Building Block View — Gameplay (6 C++ classes), Site (7 meshes + 7
    materials), Facades (9 buildings), Art Pipeline, QA & Review; Level 2
    white boxes for input flow and collision model
6.  Runtime View — walk, screenshot capture, QA self-test, build/import
    pipeline scenarios
7.  Deployment View — dev workstation and packaged build infrastructure
8.  Cross-cutting Concepts — coordinate system, collision model, lighting,
    materials, data provenance, QA harness
9.  Architecture Decisions — 7 ADRs (dynamic lighting, UE materials,
    C++ collision helper, grounded reset, core ticker, Y convention,
    headless Blender)
10. Quality Requirements — overview table + 7 measurable scenarios
11. Risks and Technical Debts — 5 risks, 2 debts with mitigations
12. Glossary — 16 domain-specific terms

Master document: Docs/Architecture/architecture.adoc
Config: Docs/Architecture/config.adoc
This commit is contained in:
zwitschi committed 2026-11-08 13:08:35 +01:00
1 parent b577afa730
commit 72705268b5
15 files changed
+610

No files matched your search

+46
View File
@@ -0,0 +1,46 @@
ifndef::imagesdir[:imagesdir: ./images]
[[section-concepts]]
== Cross-cutting Concepts
=== Coordinate system and scale
* **Source CRS**: EPSG:26911 (UTM zone 11N). Local origin recorded in `Geo/`.
* **Blender**: metres. East → +X, north → +Y (Blender convention).
* **Unreal**: centimetres. East → +X, north → **−Y** (confirmed from street mesh: `Sidewalk_North` Y −1912..−1053, `Sidewalk_South` Y +718..+1447).
* **Conversion**: every exporter calls the metre→centimetre function. Import presets (`ue_metric_v1`, `ue_character_v1`) are named and repeatable.
Rule: place a building only against a neighbour or street mesh, never in isolation.
=== Collision model
* Site meshes (road, sidewalks, kerbs, crossing): `STATIC` mobility, `BlockAll` collision profile.
* Terrain: `STATIC`, `CTF_UseComplexAsSimple` (forced by `UGigLineAssetTools` at build time, saved on the asset — the flag lives on the `UStaticMesh`/`UBodySetup`, not the map).
* Buildings: `STATIC`, simple collision (convex hull from mesh).
* Rule: the collision flag must be saved on the asset. Saving only the `.umap` silently reverts it.
=== Lighting
* Dynamic-only: `r.AllowStaticLighting=False`. All lights are `MOVABLE`.
* Fixed daytime rig: directional light (sun, −62° pitch), sky light, exponential height fog, post-process volume with fixed exposure.
* Rationale: avoids "LIGHTING NEEDS TO BE REBUILT" warnings; no bake step; the scene never changes time of day.
=== Materials
* All materials authored in Unreal, not carried from Blender (FBX import loses diffuse colours).
* World-space-noise blend nodes for cheap procedural variation (asphalt grain, concrete speckle, stucco roughness).
* Instance parameters where tunable (e.g. wetness, ageing).
=== Geographic data provenance
* OSM extract is layout data only — not authoritative for façade, height, or pavement detail.
* DEM from 3DEP 1 m; elevation verified against cross-sections in `Geo/verification/`.
* Reference photography (local, gitignored) drives manual façade work.
* In-game ODbL attribution drawn by `AGigLineHUD` every frame, bottom-left.
=== QA harness
* `-qaselftest`: core ticker (not world timer) so pause cannot freeze the test that proves pause works.
* `GigLine SIM` / `GigLine GROUND`: TEMP diagnostic logging, to be removed before release tag.
* Screenshot approval: human must tick `Screenshots/README.md` before visual work is marked done.