ifndef::imagesdir[:imagesdir: ./images] [[section-architecture-constraints]] == Architecture Constraints === Technical Constraints [cols="1,3" options="header"] |=== | Constraint | Explanation | Engine: Unreal 5.8.4 | Pinned; no bundled Linux clang — uses system clang 23.1.4. Game targets use `BuildSettingsVersion.V7`. | Platform: Linux first | Developed and tested on Bazzite Linux (Fedora 45 base). Windows builds ship but are secondary. | GPU: RTX 5070 Ti 16 GB | Dev workstation target. Vulkan RHI; open kernel module driver 615.78.08. | No static lighting | `r.AllowStaticLighting=False`. The demo is a fixed daytime scene lit entirely dynamically to avoid "LIGHTING NEEDS TO BE REBUILT" warnings. | Blender→UE via FBX | Flat diffuse colours do not survive FBX→Unreal import. All materials are authored in UE. | Terrain collision | UE 5.8 exposes `CollisionTraceFlag` (not `bUseComplexAsSimpleCollision`); Python cannot set it. Must use C++ helper `UGigLineAssetTools::SetComplexCollisionAsSimple`. | Coordinate convention | South = +Y, north = −Y (ground truth = street mesh orientation). 1 m in Blender = 100 cm in Unreal. |=== === Organisational Constraints [cols="1,3" options="header"] |=== | Constraint | Explanation | Squash-merge to `main` | Every PR is squash-merged for a linear history. No direct commits to `main` except integration merges. | Visual review required | Any change affecting appearance must produce screenshots for human approval before being marked done. | Asset provenance | Every committed asset must have verified licence and redistribution permission recorded in `THIRD_PARTY_NOTICES.md`. | Reference photography | Local only, gitignored, never committed. Used for façade work under fair-use / internal-development rationale. | LFS for binaries | `.uasset`, `.umap`, `.blend` tracked with Git LFS; `Binaries/`, `Intermediate/`, `Saved/` are gitignored. |=== === Conventions [cols="1,3" options="header"] |=== | Convention | Explanation | Semantic versioning | `MAJOR.MINOR.PATCH`. `0.x` documents breaking changes. `1.0.0` = agreed game scope. | Task tracking in `TODO.md` | Single central task list. `- [ ]` open, `- [-]` or `- [~]` in progress, `- [x]` done, `- [A]` active, `- [D]` deferred. | Headless Blender | All Blender work driven by `bpy` scripts in `Tools/`, not MCP. Blender skills are method guides only. | Named export presets | `ue_metric_v1` for static meshes, `ue_character_v1` for skeletal. Every exporter calls the metre→centimetre conversion. |===