# Harbor Zero — ST. ELMO + NIGHTINGALE / shot 004

**Build:** S004-BLK-A01  
**Status:** Source-guided production blockout; review required. Not final asset or canon approval.  
**Source anchor:** uploaded shot 004, zero-based frame 58, 2.416667 seconds at 24 fps.

This package contains real, editable 3D geometry for both vessels in a shared scene. The source photograph is available as a review overlay, not as a texture pasted onto the boats. Preview renders were made from these meshes with VTK. No image-generation output substitutes for modeled geometry.

## Start here

Open **`viewer/open_review.html`** in a desktop browser. It is self-contained: geometry, materials, the source still and camera settings are embedded. No installation, CDN, login, network request or local web server is required by the file. The viewer has a WebGL2 renderer and a Canvas2D depth-buffer fallback. This runtime tested the fallback; WebGL2 was not available here.

Select **Camera match**, move **Reference opacity** between 0 and 100%, and compare the vessels' outlines and major features. Use **Overview**, **Front**, **Plan**, or either vessel's isolation view to inspect actual geometry. Drag to orbit, Shift-drag to pan, and scroll to zoom. Keyboard 1–4 selects views, W toggles wireframe, G toggles the environment.

The staging controls adjust each vessel's X/Y location and heading. **Save review + transforms JSON** writes a local review file, not a graph change or approval in a shared system. **Save mesh PNG** captures the rendered geometry viewport only; it does not include the source overlay or surrounding interface.

For a static inspection, read **`review/shot004_blockout_review.pdf`**. For direct modeling, import **`assets/shot004_assembly.glb`** or the isolated vessel GLBs. Read the camera interchange caveat below before comparing a generic GLB import against the source.

## What's actually included

| File | Use |
|---|---|
| `viewer/open_review.html` | Standalone interactive review room with source opacity, object isolation, staging and local review export. |
| `review/shot004_blockout_review.pdf` | Eight-page source, orthographic, staging, alignment and handoff packet. |
| `review/shot004_source_vs_blockout.png` | Uploaded anchor beside actual mesh-render lighting study. |
| `review/shot004_alignment_overlay.png` | Registered source/clay overlay with nine manual point residuals. |
| `review/source_anchor_annotations.png` | Shared S01–S05 / N01–N04 reference vocabulary. |
| `review/shared_staging_plan.png` | Actual local XY arrangement, hull footprints and camera; not a geographic chart. |
| `review/vessel_orbit_proof.mp4` | Eight-second, 96-frame orbit of the real paired meshes; not the original shot's camera movement. |
| `assets/shot004_assembly.glb` | Both vessels, staging environment, named groups, material slots, metadata and camera. |
| `assets/vessels_only.glb` | Paired vessels without environment. |
| `assets/st_elmo_blockout.glb` | Isolated ST. ELMO at its local origin. |
| `assets/nightingale_blockout.glb` | Isolated NIGHTINGALE at its local origin. |
| `assets/shot004_assembly.usda` | ASCII USD mesh/material/transform transport; application import untested. |
| `assets/scene_geometry.json.gz` | Complete named local geometry, normals, face indices, materials and configuration snapshot. |
| `code/rebuild_in_blender.py` | Editable Blender scene builder; **syntax checked, not executed here**. |
| `metadata/shot004_omc_2.8.json` | Ten entities validated against the supplied strict OMC 2.8 JSON schema. |
| `metadata/shot004_graph_change_package.json` | Separate CSS application handoff; provisional identity reconciliation required. |
| `metadata/validation_report.json` | Geometry, topology, export, browser and PDF check results and limitations. |
| `source/shot004_reference.mp4` | Exact uploaded shot 004 copied into the review package. |
| `source/shot004_anchor.png` | Extracted primary source frame. |
| `source/shot004_f*.png` | Six inspected continuity sample frames. |

The remaining `renders/` images are individual clay, lighting, identity, overview and orthographic mesh renders. `MODELING_HANDOFF.md` identifies the next concrete geometry corrections and the review boundary.

## Geometry, not final production assets

| Component | Named mesh parts | Triangles |
|---|---:|---:|
| ST. ELMO | 62 | 920 |
| NIGHTINGALE | 171 | 60,400 |
| Both vessels | 233 | 61,320 |
| Environment | 122 | 1,560 |
| Complete assembly | 355 | 62,880 |

ST. ELMO intentionally remains a low-resolution faceted shape study. NIGHTINGALE's count is dominated by geometric strakes, rails, masts and rigging; it is not an indication of finished art quality. Do not interpret these numbers as optimized platform targets or final LOD budgets.

The primary hull envelopes are closed and consistently wound. That does not make every decorative panel closed, nor establish a seaworthy structure, displacement, buoyancy, stability, collision safety or a simulation-ready mesh. The report's geometric volumes are proxy volumes only.

There are separate objects and flat material assignments, not a finished UV/baking pipeline, photoreal weathering system, passenger interior, full rig, functional foil deployment, rescue conversion or gameplay implementation.

## Source facts versus proposals

The source supports the modern vessel's pale angular shell, dark glazing, warm belt and small red point; the traditional vessel's rising hull line, horizontal strakes, wheelhouse, masts and rigging; and their relationship inside an industrial setting with a reflective foreground.

The source does **not** establish their names, full dimensions, underwater hull topology, hydrofoils, machinery, ownership, passenger/cargo arrangement, medical fit-out, camera metadata or exact foreground water depth. ST. ELMO and NIGHTINGALE are retained as proposed identity bindings from the discussion, not independently verified labels in the video. No new source-visible name lettering has been painted onto either hull.

The earlier dimensional suggestions were design priors. Actual mesh bounds, including trim and mast, are approximately:

- ST. ELMO: 24.33 m long × 7.49 m wide × 5.94 m overall height.
- NIGHTINGALE: 15.87 m long × 4.97 m wide × 9.60 m overall height, mast included.

These are measurements of this model, **not recovered measurements of the vessels in the clip**. Unseen surfaces are explicitly tagged as provisional. See `metadata/evidence_register.json`.

## Camera and coordinate contract

Authoring coordinates are **meters, Z-up, +Y toward bow, +X toward starboard**. Each vessel uses its own local origin at a nominal design waterline. The reflective scene plane is at Z = −1.12 m; it is a visual staging device, not an established water-surface datum.

The assembly places ST. ELMO at (0, 0, 0) with zero heading. NIGHTINGALE is at approximately (−9.661, 12.342, 0) with an 8.450° heading. Both roots are separately editable.

GLB files contain a named `CSS_Z_UP_TO_GLTF_Y_UP` wrapper that rotates the authored Z-up scene into glTF Y-up. Leave that wrapper intact when importing to ordinary glTF tools. Do not add a second axis conversion. Isolated models retain the wrapper but reset vessel staging to local zero.

The source camera is an **artist-assigned, single-view pinhole fit**, not a surveyed or photogrammetrically solved camera. Working values are a 45° horizontal field of view, 1280 × 720 resolution and an off-axis principal point of approximately (640, 300).

**Important:** glTF's core perspective camera cannot carry this off-axis principal point as an active projection parameter. The GLB retains it in camera extras. The supplied viewer and Blender builder apply the shift, but a generic viewer may ignore it and produce different framing. Use `metadata/scene_config.json` as the camera/staging contract. ASCII USD here carries mesh/material/transform data, not a fully matched USD camera.

`metadata/camera_initial_fit.json` is an archival initialization attempt with older correspondences, not the current match score. Current review results are exclusively in `metadata/landmark_review.json`.

## What the current match score means

Six of nine manually selected image-feature targets are met. Mean residual is approximately 15.2 pixels and maximum approximately 27.3 pixels at 1280 × 720.

This is a deliberately limited artist-review measure. The correspondences themselves have unquantified interpretation uncertainty. It is **not** a silhouette intersection score, whole-image match, 3D shape accuracy estimate, calibration accuracy or cross-clip tracking result. Large portions of geometry can change without affecting these nine points.

Open targets are S03 (near forward belt junction), S04 (visible aft belt termination), and N01 (aft wheelhouse roof corner). The overlay and handoff describe the next edits. The correct release status remains **review required**.

## Create the native Blender scene

**There is no native `.blend` file in this delivery. Blender was not installed in the authoring runtime.** The supplied Blender script builds one from the delivered geometry and configuration. It was parsed for Python syntax but could not be executed or import-validated in Blender here.

From this unpacked package root, in a terminal where `blender` is available:

```sh
blender --background --python code/rebuild_in_blender.py -- --out assets/shot004_blockout.blend
```

Optional preview render:

```sh
blender --background --python code/rebuild_in_blender.py -- --out assets/shot004_blockout.blend --render
```

The builder uses Blender's bundled Python, `bpy` and `mathutils`; it does not need the package's external Python requirements. It creates named geometry collections, independent vessel roots, material slots, the shifted source camera, auxiliary cameras, a packed reference image, lights, local locators and hidden coarse AABB collision proxies. Those proxies are not gameplay-approved hulls. It writes an embedded read-me into the new scene.

The builder uses the AgX view transform and Cycles. It is intended for a Blender environment supporting those settings. Its lighting is a separate Blender recreation; the delivered VTK previews are not proof of pixel-identical Blender output. Compare the packed source against camera view immediately after building.

## Rebuild and review an iteration

The geometry builder uses explicit station and feature coordinates in `code/build_scene.py`. Changing `length` metadata alone does not rescale all geometry. Change the relevant station/feature arrays when altering a vessel's form; staging and camera parameters are in `metadata/scene_config.json`.

For an external Python environment with the dependencies in `requirements.txt` and FFmpeg on PATH:

```sh
python code/build_scene.py
python code/export_usda.py
python code/render_review_set.py
python code/make_viewer.py
python code/build_handoff.py
python code/create_review_packet.py
```

Run expensive rendering only when needed. `render_review_set.py` also generates the orbit video. `create_review_packet.py` expects DejaVu Sans font paths on Linux; change its font paths for another environment. No font files are redistributed.

A staging decision exported by the browser can be converted into a candidate configuration without applying a canonical change:

```sh
python code/apply_staging_review.py path/to/S004_review_decision.json
```

This writes `metadata/scene_config.review_candidate.json` by default. Inspect it, back up the original config, then explicitly adopt the candidate as `metadata/scene_config.json` and rebuild. This utility imports only the two vessel staging transforms; it deliberately does not promote a free camera to a new source-match camera or treat a local review decision as canon approval.

`build_handoff.py` regenerates baseline validation, which overwrites the old aggregate validation file. Browser test evidence is kept separately in `metadata/viewer_test_report.json`; re-test the regenerated HTML after any change. The included result applies to this A01 delivery, not future builds.

## OMC and CSS handoff

Use one persistent narrative identity per vessel. The blockout is a production Asset linked through Depiction; the GLB, USD, future Blender scene and later film representations are not new fictional boats.

The strict OMC export uses the supplied schema's actual structures: `NarrativeObject` with `narrativeType: narrativeVehicle`, native identifier objects and the namespaced customData array. The separate CSS graph-change envelope preserves the application-specific `id` / flattened `customData` conventions. Do not send the CSS envelope to the strict OMC root validator and infer that the two encodings are identical.

The supplied April graph snapshot was checked for the proposed vessel IDs; they were not found. The current authoritative Harbor Zero atlas was not accessed or modified. Before integrating, resolve the creative-work/world IDs, reconcile aliases against the current atlas, then merge with provenance. All new naming and unseen design remains proposed. Kestrel is not included in this build.

## Verification boundary

Checked: JSON schema validation; finite geometry; valid indices; unique part names; round-trip GLB loads through trimesh; primary hull winding/closure; Python syntax; viewer startup, image overlay, view isolation, display modes, staging export, reset and PNG export; no external browser requests; no mobile horizontal overflow; PDF render/layout inspection.

Not checked: Blender execution; USD application import; official Khronos glTF validation; GPU WebGL2; real-device touch performance; cross-application materials parity; full-clip camera tracking; rigging/physics; hydrodynamics; surveyed scale; human/canon approval. Browser testing used an in-memory standalone document because this runtime's managed Chromium blocks local file URLs; no browser policy was altered.

## Attribution and integrity

Source basis: user-supplied shot 004 and project discussion. Source video SHA-256 and decode details are in `metadata/source_manifest.json`. OMC schema is the supplied MovieLabs 2.8 schema, retaining its Apache-2.0 notice. Modeling and integration conventions also reference the supplied CSS graph snapshot and instructions; no public design source was used to assert dimensions.

`metadata/delivery_checksums.json` records SHA-256 hashes for delivered files (excluding itself). `code/validate_delivery.py` checks those hashes and strict OMC references/schema without rebuilding the art. The package does not establish licensing or clearance for the user's original media or marks.
