# MX450 asset provenance and use

`mx450.glb` is the Phase 2 motorcycle review asset. Revision 2 rebuilds the body moldings, rider-contact surfaces and engine, with continuous tire sidewalls and revised surface finishes. Its geometry, UV coordinates, rig layout, material recipes and MX/450/01 markings were authored for this repository in `../bike/`. It is an original, unbranded 450-class design; no third-party motorcycle mesh, CAD file, decal sheet, photograph or texture pack is included. The GLB contains no rider.

This record does not introduce a new public redistribution license for project-authored content. Use and changes follow the repository owner's licensing decisions. The reference manufacturers and game publishers have not licensed or endorsed this model. Their logos are not included. The third-party library notices below remain applicable to the tools, separately from the exported geometry.

## Source and export

| File | Role |
| --- | --- |
| `../bike/model.mjs` | Main assemblies, wheels, fork, frame, exhaust and articulation controller. |
| `../bike/bodywork.mjs` | Curved plastic moldings, continuous saddle, airbox, fuel cell and original panel graphics. |
| `../bike/engine.mjs` | Original single-cylinder engine: contoured cast housings, domed covers, cylinder/head, ports, fasteners and service hardware. |
| `../bike/geometry.mjs` | Geometry helpers and static batching by material within moving assemblies. |
| `../bike/materials.mjs` | Physically based material settings, deterministic rubber/cast-metal normal and roughness textures, brushed finish variation, woven-seat normal texture, and canvas-generated markings. |
| `../bike/kinematics.mjs` | SI dimensions and geometric fork, swingarm and linkage poses. |
| `../../tools/moto-bike-export.mjs` | Headless export and round-trip validation; run the command below from the repository root. |
| `mx450.glb` | Self-contained glTF 2.0 binary: named assemblies, indexed geometry, PBR materials and embedded PNG textures. |
| `mx450-manifest.json` | SHA-256 checksums, exact file size, source/export geometry counts, material and extension inventory, draw calls and validation results. |

The exporter uses Three.js r170's `GLTFExporter`, `GLTFLoader` and `BufferGeometryUtils` under the MIT license. See [the vendor record](../vendor/README.md) and [the bundled license](../vendor/THREE-LICENSE.txt). Exported geometry is indexed with a 0.000001 m duplicate-vertex tolerance; matching position, normal and UV attributes are required, preserving material and UV seams. This is not mesh simplification. Normal-mapped surfaces include computed tangents for consistent import. Authored roughness data is packed into glTF's green channel; a white blue channel preserves the material's scalar metalness. This export-only conversion avoids r170's separate-texture merger treating a typed-array texture as a canvas image. All image data is embedded. Repeat transforms use `KHR_texture_transform`, clearcoat uses `KHR_materials_clearcoat`, and the articulated drive chain requires `EXT_mesh_gpu_instancing` support.

From the repository root, with the static server already running:

```sh
PLAYWRIGHT_MODULE=/absolute/path/to/playwright/index.mjs \
CHROME=/absolute/path/to/Chrome \
node tools/moto-bike-export.mjs
```

The server defaults to `http://127.0.0.1:8317`; set `MOTO_QA_BASE` to change it. `PLAYWRIGHT_MODULE` can be omitted when the `playwright` package is resolvable, and `CHROME` defaults to the standard macOS Google Chrome path. The script overwrites the GLB and manifest only after its checks pass. It also writes a preview to `/tmp/moto-bike-export/glb-preview.png`. Browser/font version differences can change the rasterized markings; the manifest records the resulting asset checksum and hashes of all six authoring modules and the export script. The source root, exported root metadata and manifest must agree on asset revision 2.

Add `--check` to run export validation without replacing the saved GLB or manifest.

For an independent format check, install the official [Khronos glTF Validator npm package](https://github.com/KhronosGroup/glTF-Validator/tree/main/node) outside the repository and set `GLTF_VALIDATOR_MODULE` to its `index.js` path when exporting. The manifest records whether that optional check ran, its version and all warning categories. Validator support for an extension can lag viewer support; the chain's instance matrices are also checked directly after a `GLTFLoader` round trip.

## Dimensional references

The [2026 KTM 450 SX-F technical specifications](https://www.ktm.com/en-us/models/motocross/4-stroke/2026-ktm-450-sx-f/technical-specifications.html) provide the 958 mm seat-height target, 343 mm clearance target, 310 mm front suspension travel, 300 mm rear travel and 48 mm fork diameter. The [KTM 450 SX-F brochure for the 2023 model](https://www.ktmindia.com/-/media/images/ktm/ktm-big-bikes/brochures/ktm-450-sx-brochure.pdf) supplies supplementary anchors: 1493 ±10 mm wheelbase, 21/19-inch rims, 80/100-21 and 110/90-19 tires, 260/220 mm brake discs, and 63.9° steering-head angle from horizontal (26.1° from vertical).

These references span model years deliberately. They establish scale for an original design, not a claim that every dimension reproduces a 2026 KTM. Tire outer radii are calculated nominally from rim and tire-size notation; actual unloaded or loaded tire shapes are not measured. Fork geometry, linkage pivot positions, engine packaging, bodywork and chain routing are authored approximations. Published travel and a geometric suspension sweep do not establish spring rate, damping, correct load response or collision-free operation under dynamic loads.

The engine's casting anatomy was initially informed by KTM Chile's 2026 450 SX-F page, which is no longer available. Blender revision 8 uses the [isolated KTM 450 SX-F engine photograph](https://azwecdnepstoragewebsiteuploads.azureedge.net/PHO_BIKE_DET_KTM-motocross-4-stroke-450-sxf-engine-ignitionr_%23SALL_%23AEPI_%23V1.png) linked from [KTM's 2027 model page](https://www.ktm.com/en-us/models/motocross/4-stroke/2027-ktm-450-sx-f.html). It guides the relationship between cast crankcases, dark removable covers, water-cooled cylinder, shaped head, intake and service components. This is a qualitative reference; no mesh, texture, logo or image pixels from the photograph are included in the asset.

## Validation and remaining work

Each export is reloaded through `GLTFLoader`. The script checks revision metadata, required named rig nodes, five combinations of front/rear compression and wheel rotation, finite world transforms, preservation of chain instances and normal/roughness textures, unchanged triangle count, and an image comparison against the authoring source. An image threshold catches export regressions; it is not a visual-quality grade. The manifest's draw calls describe only the bike's color pass at 1000×750, excluding floor, shadows and gameplay. They are not a frame-rate benchmark.

The kinematic `BikeRig` in `model.mjs` can drive the named assemblies after loading. There are no baked animation clips, physics constraints, collision proxy, optimized LODs or baked ambient-occlusion maps in this export. The rider is Phase 3 work. Simulation calibration and the agreed gameplay/performance acceptance remain separate tasks. This asset is a reviewable production candidate, not evidence that the game has reached AAA quality.

## 125 / 250 / 110 variants

`mx125.glb`, `mx250.glb`, and `pit110.glb` and their editable Blender masters
are original derivative artwork of this project's approved MX450 master.
Engine cases, two-stroke heads and expansion chambers, the horizontal 110
engine and compact tank cheeks are authored by `bike/blender/build_variants.py`.
Shared graphics retain the same provenance as the original. No additional
manufacturer photographs, CAD or downloaded meshes are included.

110 scale reference: [Kawasaki KLX110R](https://www.kawasaki.co.uk/en/Motorcycles/Motocross-Enduro/KLX110R_2026.html),
used for the approximate seat/wheelbase envelope and 14/12-inch rim sizes.
This custom game model is not a branded replica. Per-file manifests identify
source hashes, geometry counts and export sizes.

The two-stroke pipe revision uses the official [2026 KTM 250 SX gallery](https://www.ktm.com/en-us/models/motocross/2-stroke/2026-ktm-250-sx.html)
right-side and front three-quarter PNG files as shape references. The links
and observations are saved in `bike/blender/references/two-stroke-pipe.html`.
The expansion-chamber geometry and welds remain original authored artwork;
manufacturer photo pixels are not embedded in the models.
