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
47 lines
2.4 KiB
Plaintext
47 lines
2.4 KiB
Plaintext
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.
|
||
|