# Detailed landmark models  -  5 September 2026

Ten original procedural reconstructions are now available locally. These are actual 3D geometry, not image-covered cubes, but **not photogrammetry, surveyed architecture or construction documentation**. Roofs, floor bands, footprints, orientation and ornaments are approximate. Heritage models omit temporary scaffolding. Do not infer exact building dimensions from them.

## Included

- Bitexco: curved envelope, floor bands, mullions and projecting helipad.
- Landmark 81: bundled tower shafts, setbacks, fins and stepped crown/spire.
- Ben Thanh: broad market roofs, arcade openings and clock-tower entrance.
- Notre-Dame: twin bell towers/spires, nave, buttresses and rose window.
- City Hall: wings, entrance arches, cornices and clock pavilion.
- Central Post Office: roof massing, arched entrances/windows and clock pediment.
- Independence Palace: broad modernist wings, a T-shaped rear stem, three balcony/eave bands, bamboo-segment stone screen and open rooftop pavilion. The [historic site's architecture reference](https://dinhdoclap.gov.vn/en/independence-palace-architecture/) corroborates those features and the 26 m nominal height. The authored massing is inset within [OSM building way 39598493](https://www.openstreetmap.org/way/39598493); screen spacing, floor divisions and pavilion proportions remain illustrative. The +Z front faces northeast with map bearing 312.6°.
- Thu Thiem: The Galleria three-block residential ensemble, Thu Thiem Church and an illustrative Holy Cross Convent courtyard ensemble.

The existing Ba Son bridge remains part of the Thu Thiem scene. No proposed Empire 88 tower was inserted into the present-day city. Linden/Tilia were researched but are not part of this batch.

## Provenance and limits

All meshes are newly authored in `landmark-models.js`; no third-party model, photo or texture was copied into these meshes. The code inherits the repository's licensing terms. Architectural reference links are not licences to redistribute their photos or drawings.

Reference material:

- [Carlos Zapata Studio: Bitexco](https://cz-studio.com/portfolio-items/bitexco/), for the lotus form and cantilevered helipad.
- [Arup: Landmark 81](https://www.arup.com/projects/landmark-81-tower/), for the bundled-bamboo silhouette and nominal 461 m height.
- [Vietnam Tourism: HCMC landmarks](https://www.vietnam.travel/index.php/vi/node/137), for landmark identity and architectural context.
- [SonKim Land: The Galleria](https://sonkimland.vn/residential/the-galleria-residence), identifying the three towers and a 14,987 m² site area. This is a site-area reference, not individual tower dimensions.
- [SonKim Land milestones](https://sonkimland.vn/vi/cau-chuyen-thuong-hieu), recording the 2021 Galleria handover.
- [HCMC Press Centre: Thu Thiem heritage recognition](https://ttbc-hcm.gov.vn/trao-bang-xep-hang-di-tich-cho-nha-tho-thu-thiem-va-tu-vien-hoi-dong-men-thanh-gia-thu-thiem-1016276.html).
- [Galleria floor-count cross-check](https://maisonoffice.vn/en/ho-chi-minh/district-2/the-galleria-residence/): secondary property listing, not a survey; its completion-year field conflicts with the developer, so the developer's handover record is used. Galleria height in the model is an authoring approximation, not a measured value.

Thu Thiem alignment was checked against public OpenStreetMap geometry on 5 September 2026:

- [Galleria parcel, way 1159237484](https://www.openstreetmap.org/way/1159237484), [API geometry](https://api.openstreetmap.org/api/0.6/way/1159237484/full.json), way version 1: the model anchor is the rounded polygon area centroid, 106.713318, 10.778960. The parcel's long axis is approximately 32° east of north; its calculated area is about 14,610 m². The authored model now uses a 150 × 50 m horizontal envelope, aligned to 32° and inset from the recorded boundary by at least 5 m (about 6.38 m in the local planar check). These are conservative visual authoring parameters, not measured tower footprints. The former boundary-vertex mean anchor and wide envelope were replaced after they placed part of the model outside the parcel. The source remains a residential parcel, not three individual tower outlines.
- [Church, way 366105826](https://www.openstreetmap.org/way/366105826), [API geometry](https://api.openstreetmap.org/api/0.6/way/366105826/full.json), way version 3: the retained anchor, 106.71044, 10.77299, lies within a metre of the recorded building's area centroid. Footprint edges place the nave on an approximately 96°/276° east-west axis. The model's configured bearing is 186° because its authored entrance points along +Z; the map's rotation convention makes that entrance face approximately 276°, slightly north of west. This corrects the former north-south nave orientation. The recorded envelope is about 46 × 26 m; the reconstruction is not an exact footprint replica.
- The indexed text of page 13 of the [Thu Duc heritage document](https://congdoanthanhphothuduc.org.vn/wp-content/uploads/2021/07/De-cuong-hoi-thi-tim-hieu-lich-su-Thu-Duc.pdf) describes the church front as slightly northwest-facing, supporting the western end of the OSM axis. Direct PDF retrieval failed during the audit; this directional corroboration comes from indexed text, not a visually inspected survey drawing.
- [Convent, way 420032397](https://www.openstreetmap.org/way/420032397), [API geometry](https://api.openstreetmap.org/api/0.6/way/420032397/full.json): the anchor remains 106.71146, 10.77183, originally taken via [Mapcarta](https://mapcarta.com/W420032397). The OSM way describes the whole worship campus, not individual buildings. The model's courtyard arrangement, dimensions and orientation remain illustrative and unverified.

The Galleria and church coordinate snapshots, exact API URLs, way versions and retrieval date are preserved in `pipeline/tests/fixtures/hcmc_landmark_footprints.json`. This new geometry retrieval date does not establish the retrieval dates of the legacy map datasets. OSM data © OpenStreetMap contributors, ODbL. Existing map attribution remains in place. These checks establish coarse placement against recorded geometry; none of the models is a surveyed architectural replica.

## Lightweight implementation

- No added runtime dependency or model/texture network request; model source is inlined by the existing build.
- Four to six material batches per model rather than a draw call per window.
- Simple silhouettes are created initially; detail is created on first nearby/selected view.
- Maximum three detailed landmarks on narrow phone screens/low tier, five elsewhere; other models retain their low-detail versions. Created geometry is bounded by the ten-model catalogue and retained for reuse.
- No new per-frame animation, shadows, transparency or reflection effects. The review board renders only on load, scroll, resize or control changes.
- Nominal heights for heritage/Thu Thiem buildings are visual authoring parameters, not new dataset claims.

`building-replacements.js` handles generic map extrusions beneath authored models.
The provider can aggregate unrelated buildings into one MultiPolygon ID, so masking
that whole ID alone would remove neighbours. The helper removes only individual
components contained in Galleria's recorded parcel, or within reviewed OSM building
envelopes for Bitexco, Landmark 81, Bến Thành Market and Independence Palace. The
remaining authored landmarks use anchor-containing components. Off-centre tower
parts and tile-clipped fragments cannot reliably be identified by an anchor alone.
It redraws untouched members with their original properties and holes in one
remainder layer, grouped only by source ID and complete original properties.
Worker revision/count verification precedes masking.
Campus and data views restore the baseline immediately; night colours and window
lights follow the same selection.

Preservation is capped at 4,000 components and 1,000,000 UTF-8 bytes including worker
revision metadata, with limits shared by selection and runtime. Invalid or oversized
groups stay unchanged. A combined check of four public provider z14 tiles on
5 September 2026 (200 source features / 8,418 polygon components) retained 3,155
unrelated components as six grouped features, using 820,989 worker bytes, with no
invalid or over-budget candidate groups. The local warmed scan took about 122 ms;
this is not a phone-performance result. Prepared envelope caching, cheap geographic
rejection and source-idle rescans avoid per-frame polygon work. Brief tile-streaming
transitions and residual overlaps remain possible; this is not a guarantee of exact
building coverage or frame coherence on physical phones.

The four reviewed building rings and 17 decoded nearby tile components are recorded
with exact source URLs in `pipeline/tests/fixtures/hcmc_landmark_tile_components.json`:

- [Bitexco, OSM way 804073951 v7](https://api.openstreetmap.org/api/0.6/way/804073951/full.json): the provider has separate 23 m, 191 m and 269 m parts that miss the model anchor, in addition to the anchor-containing 263 m part. Its hidden parent footprint is also classified but was already excluded by the original map filter.
- [Landmark 81, OSM way 622296615 v15](https://api.openstreetmap.org/api/0.6/way/622296615/full.json): the reviewed footprint includes six loaded parts/fragments across the two inspected tiles, including 150 m and 300 m sections. Separate neighboring 175 m towers remain outside this footprint and are intentionally retained.
- [Bến Thành Market, OSM way 39514795 v42](https://api.openstreetmap.org/api/0.6/way/39514795/full.json): its main roof and gate are members of a provider height group with 2,264 unrelated and selected components. Per-component Feature wrappers alone exceeded the former preservation budget; grouping retains the other members without masking the neighborhood.
- [Independence Palace, OSM way 39598493 v42](https://api.openstreetmap.org/api/0.6/way/39598493/full.json): the anchor is now the rounded building-area centroid, 106.695372, 10.776998. The former anchor lay just outside the recorded footprint. Replacement is enabled only for the authored Palace model, not the old generic shape. The recorded envelope has approximately 85.8 m and 76.6 m principal spans; the front faces northeast at about 42.6° under the model's 312.6° bearing convention.

Envelope matching allows at most 1 m beyond these four recorded building rings to
accommodate the inspected z14 tile quantization; it is not a circle or a visual
occlusion mask. Complete exterior edges are checked and holes/disjoint members
remain protected. The source snapshots are OSM data, not surveyed as-built plans.
The small regression fixture does not archive the complete four-tile benchmark or
establish coverage for all future provider versions and viewports.

Measured before the final Galleria height adjustment: high detail ranged from 618 to 14,028 triangles; low detail from 134 to 1,044. Bitexco is the largest at about 1 MB of uncompressed position/normal buffers, not a 1 MB network download. Re-run `test_landmark_models.mjs` for exact current counts. These numbers are not a real-device frame-rate guarantee.

The added Palace model measures 816 triangles at low detail and 6,084 at high detail,
with six material batches and 438,048 bytes of high-detail position/normal buffers.
Its geometry test also checks every generated vertex against the independent OSM
building ring at the configured map coordinates and bearing, with a 0.2 m numerical
boundary tolerance. This establishes coarse placement, not architectural accuracy.

## Review and checks

`model-review.html` provides all ten models, front/three-quarter/rear views and low/high detail. Each model is framed separately, not to a shared scale. The city map accepts `?landmark=galleria` (or another model id) and `?area=thuthiem`.

Automated geometry tests use the map's pinned Three.js 0.160.0: finite vertices/normals, nonnegative bases, nominal height bounds, deterministic geometry, triangle/draw-call budgets and no texture dependencies. Set `THREE_MODULE_PATH` to a local copy of that module and run `node --test pipeline/tests/test_landmark_models.mjs`. Without it, geometry tests explicitly skip; they do not claim a pass.

Run `python3 -m unittest pipeline.tests.test_hcmc_alignment` for the separate geographic checks. They read the current template/model parameters and test Galleria's illustrative envelope and boundary clearance, the parcel-centroid anchor, and the church nave against the preserved OSM footprint. The review board frames each model independently and applies no geographic bearings, so its previews cannot establish map alignment.

Visual review found and corrected distorted broad roof edges and a clipped cathedral preview. All nine were inspected on the review board; during the earlier implementation review, Thu Thiem was loaded across Polypane's 402×874, 440×956, 904×640 and 474×696 panes. The follow-up final Polypane scan could not complete because the app became unresponsive; equivalent layout sizes were checked in the in-app browser. Foldable viewports remain concepts. Real-device performance and exact footprint alignment are not certified.

Release approved after local review on 5 September 2026. Merge and deployment status are recorded in GitHub.
