Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions ASSETS.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ The Babylon comparison path now has a formal package pipeline rather than scene-
| Storefront depth and background massing | Original procedural geometry plus existing generated facade WebP | Awnings, columns, sills, roof depth, and skyline enclosure around the existing facade | Consolidate into `block.1208-las-olas.v1` source scene and GLB |
| FPS weapon presentation | Original procedural assembly in `OpsWorld.ts` | Visible first-person weapon and local recoil only | Replace with the possessed member package's `firstPersonArmsGlb` and weapon socket contract |

The Quaternius Universal Base Characters pack was evaluated as a permissive cross-engine reference and its primary page/license were checked, but no archive was committed or used in the runtime. The official free-download endpoint rate-limited automated access, and the pack's visual style is not the final benchmark. No marketplace or third-party model is represented as project-owned content.
The Quaternius Universal Base Characters and Universal Animation Library free standard packages were acquired through their official zero-price itch pages. Their creator-provided archive licenses dedicate the included assets to CC0 1.0. One male base and 12 gameplay clips are now combined into the optimized runtime package at `/assets/packages/characters/universal-male/universal-male.v1.glb`; the exact license and strict package manifest ship beside it. This model proves the portable rig pipeline but its superhero costume is explicitly not the final benchmark. No marketplace asset or third-party model is represented as project-owned content.

All procedural fallbacks are code, not claimed production art. They exist to remove player-facing capsules/spheres, exercise semantic hit zones, and let the gameplay and package pipeline be verified before licensed source models arrive.

### Evaluated External Character Reference

Quaternius's **Universal Base Characters** page describes six game-ready base characters, 20 hairstyles, an average 13,000-triangle model, humanoid retargeting, FBX/glTF exports, and compatibility claims for Unreal, Unity, and Godot: https://quaternius.com/packs/universalbasecharacters.html. The current Quaternius Asset License permits use and modification in commercial products without attribution but prohibits redistributing the assets themselves as an asset pack: https://quaternius.com/license.html. These links document evaluation only; the files are not part of this repository.
Quaternius's **Universal Base Characters** page describes six game-ready base characters, 20 hairstyles, an average 13,000-triangle model, humanoid retargeting, FBX/glTF exports, and compatibility with Unreal, Unity, and Godot: https://quaternius.com/packs/universalbasecharacters.html. The selected free standard archive includes `CC0 1.0 Universal (CC0 1.0) Public Domain Dedication` and identifies Quaternius as the model creator; that exact license is preserved at `frontend/public/assets/packages/characters/universal-male/LICENSE-QUATERNIUS-CC0.txt`. Acquisition and transformation details are recorded in `docs/PRODUCTION_ART_SOURCES.md` and `docs/PRODUCTION_ART_PACKAGE_V1.md`.
85 changes: 85 additions & 0 deletions docs/PRODUCTION_ART_PACKAGE_V1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Production Art Package V1

**Status:** Implemented on `feat/production-art-package-v1`
**Scope:** One legally portable rigged-character pipeline plus CC0 PBR surfaces for the 1208 Las Olas Babylon comparison client.

## Outcome

The Modern Ops renderer now loads a strict character package before the scene becomes ready. The package contains a real 65-joint humanoid rig and 12 selected gameplay animation groups in one optimized GLB. Every deployed combatant receives an independently animated rig, physical hit proxies attached to named bones, a visible weapon attached to the right-hand bone, shadows, and the existing selection marker. If any manifest, GLB, skeleton, or animation requirement fails, the scene keeps the previously verified articulated fallback and records a diagnostic instead of crashing.

The 1208 street now uses compact CC0 asphalt, concrete, and brick color, OpenGL-normal, and roughness maps. These replace flat colors while preserving the authoritative grid, cover metadata, vehicle metadata, line-of-sight, cameras, and result boundary.

| Package component | Runtime result |
|---|---:|
| Optimized rigged character GLB | 1,358,092 bytes |
| Character skeleton | 65 joints |
| Included animation groups | 12 |
| CC0 PBR maps | 9 WebP files, approximately 278 KB |
| Total package directory | 13 files, 1.57 MB |
| Global shipped asset total | 7.38 MB of 20 MB |
| Package schemas validated | 5 packages across 4 schemas |

## Included Character States

| Semantic state | Packaged animation |
|---|---|
| Idle | `Idle_Loop` |
| Walk | `Walk_Loop` |
| Sprint | `Sprint_Loop` |
| Crouch | `Crouch_Idle_Loop` |
| Aim | `Pistol_Aim_Neutral` |
| Fire | `Pistol_Shoot` |
| Reload | `Pistol_Reload` |
| Hit | `Hit_Chest` |
| Downed | `Death01` |

The package contract also supplies controlled fallbacks for strafe, aim-walk, and cover transitions until an authored final rig includes dedicated clips.

## Runtime Architecture

`build-character-package.mjs` verifies that the base model and animation source have identical joint-name sets, copies only required animation channels, deduplicates and prunes data, and emits one intermediate GLB. The documented optimization pass converts textures to 512-pixel WebP while disabling mesh compression, simplification, joining, flattening, instancing, and palette operations that could disturb the rig or named bones.

`loadPackagedCharacterTemplate()` loads the GLB once into a Babylon `AssetContainer`. It validates every animation required by the package, then clones the skeleton and animation groups for each combatant. Renderer-visible meshes are non-pickable; invisible boxes attached to the authored head, torso, arm, and leg bones provide stable renderer-neutral hit-zone candidates. This prevents texture or mesh changes from altering the shared damage contract.

The canvas exposes only the active package ID as a diagnostic. The browser gauntlet requires `character.universal-male.pipeline-v1` before accepting the TPS, FPS, tactical, possession, firing, result, and return evidence.

## Provenance and Reproducibility

The character and animations are from Quaternius CC0 standard packages. The runtime package includes the creator-provided CC0 license. The road, concrete, and brick maps are from ambientCG CC0 archives, with per-source archive and runtime-file checksums in `pbr-sources.json`. Acquisition references and source checksums are recorded in `PRODUCTION_ART_SOURCES.md`.

No marketplace, ripped GTA/FiveM content, login-bound Mixamo asset, or unverified mirror is included. The source archives are deliberately excluded from Git; the repository contains the deterministic build tools, optimized runtime package, exact license, package manifest, and provenance locks.

## Verification

The isolated live-browser gauntlet proved all of the following in WebGL2:

| Gate | Result |
|---|---|
| Production package active | Passed |
| Third-person possession | Passed |
| Switch from Lil Dre to Kilo | Passed |
| First-person camera and firing | Passed |
| Tactical commander view | Passed |
| Result produced and applied once | Passed |
| Return to strategy block | Passed |
| Fatal local runtime exceptions | 0 |

The focused unit test verifies the shipped manifest, CC0 license, engine portability, named skeleton hit zones, fire/reload/downed clips, and a GLB smaller than 1.5 MB. Package validation and global asset-budget auditing are part of the existing quality gate.

## Visual Limitation and Decision

The free standard character is a pipeline stand-in, **not final art**. Its only male full-body option is a bare-torso superhero model. Two procedural streetwear overlay experiments were rejected after live TPS review because their bone-local orientation produced inferior silhouettes. Those overlays are not included.

This milestone proves that a commissioned or licensed clothed member can drop into the game without rewriting combat, possession, hit resolution, animation dispatch, FPS/TPS/tactical cameras, or persistence. The next paid or commissioned deliverable should target this exact contract:

| Required final deliverable | Acceptance gate |
|---|---|
| One recognizable clothed hero | Matches Contacts identity in face, hair, silhouette, and palette |
| One visually distinct rival | Reads correctly at tactical and TPS distances |
| Same 65-bone-compatible or mapped rig | Imports through package validation without gameplay changes |
| Dedicated locomotion and gun set | Idle, walk, sprint, aim, aim-walk, fire, reload, hit, downed, crouch, and cover |
| Named hit bones and right-hand weapon socket | Passes existing physical-ray browser test |
| Source and cross-engine rights | Editable source, FBX/GLB, no engine restriction, commercial redistribution in compiled game |
| Web LOD0 | Under 65,000 triangles, 120 bones, 2–4K source textures with a 512–1024 web export |

The user should approve a final character source only after it is tested against this package, not on screenshots alone.
29 changes: 29 additions & 0 deletions docs/PRODUCTION_ART_SOURCES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Production Art Sources — Portable Package V1

**Author:** Manus AI
**Date:** 2026-08-29

This milestone uses only primary-source assets that can be incorporated into a commercial cross-engine pipeline without an additional purchase. The assets remain visually provisional; their purpose is to exercise the real rig, animation, GLB, PBR, provenance, and optimization path that final commissioned assets must follow.

| Source | Selected content | License and portability | Acquisition evidence |
|---|---|---|---|
| Quaternius Universal Base Characters | Free standard package; selected `Superhero_Male_FullBody` humanoid base; glTF/FBX and textures | CC0; commercial use allowed; humanoid rig intended for retargeting in Babylon/web, Unreal, Unity, and Godot [1] | Official itch product ID `3822259`; free upload ID `15861669`; archive 128,968,391 bytes; SHA-256 `fdbf1804c90dfc1ea03e992bff7da2dfd1a79318e13270a660180f9308455f40` |
| Quaternius Universal Animation Library | Free standard package; 43 animation groups including idle, walk, jog, sprint, pistol aim/fire/reload, hit, crouch, driving, and death | CC0; commercial use allowed; current library documents compatibility with the Universal Base Characters rig and Unreal/Godot/Unity exports [2] | Free upload ID `17958403`; archive 15,904,933 bytes; SHA-256 `cc73fc4e495b82958207316596317a3f40b9fa38065bde1027937452da537724` |
| ambientCG | `Asphalt033`, `Concrete034`, and `Bricks097` 1K JPG PBR packages | CC0; downloadable maps may be modified, distributed, and included in a commercial game [3] | Official API archives; SHA-256: Asphalt `c71801b342dbea594dbdd0bd2ddc0a6d13f813c923fca408b9f5b9ee5e58aba2`; Concrete `5839d284d94ffb8d2a56df742ec522b13dd311c52dbd42b8fd33f0409ceedb81`; Bricks `97b5df360161e48bcfed609aef361e8115b680ddc0aea4ad9321d4b00e222ad0`. Runtime-map checksums ship in `pbr-sources.json`. |
| Kenney City Kit Roads | Modular road, sidewalk, signs, traffic lights, utility poles, wires, construction props, and dumpster GLB/FBX models | CC0; personal and commercial use; no attribution required [4] [5] | Official archive SHA-256 `22058af3d68173a7cf9bda9f0e243a8cef6bd68168c302ebc76327063849674e`; evaluated but not imported in V1 because the PBR procedural block retained the existing semantic anchors. |

The Quaternius base character and Universal Animation Library contain matching 65-joint skeleton name sets. The selected base model has 69 total nodes and no embedded animations. The animation GLB has 67 nodes and 43 animation groups. This exact-name compatibility permits deterministic transfer or runtime retargeting rather than manual per-clip remapping.

The emitted runtime character GLB has SHA-256 `f800a143bec5241cf21090c0921eedaaf6f2bc9c73261462b197668b2037f06b`.

The Quaternius source glTF references `T_Hair_1_Normal_png.png` and `T_Eye_Normal_png.png`, while the standard archive contains `T_Hair_1_Normal.png` and `T_Eye_Normal.png`. The packaging step must normalize those two URIs or provide deterministic aliases. This source mismatch must remain documented rather than silently repaired by hand.

The free character is a **real rigged asset but not the target hero design**. It is suitable for proving animation, possession, hit-zone, LOD, and cross-engine import contracts. It must not be presented as the final recognizable member. The no-purchase road kit is similarly useful for semantic props and modular validation but is not a substitute for the commissioned high-fidelity 1208 block.

## References

[1]: https://quaternius.com/packs/universalbasecharacters.html "Quaternius — Universal Base Characters"
[2]: https://quaternius.itch.io/universal-animation-library "Quaternius — Universal Animation Library"
[3]: https://docs.ambientcg.com/license/ "ambientCG License"
[4]: https://kenney.nl/assets/city-kit-roads "Kenney — City Kit Roads"
[5]: https://kenney.nl/support "Kenney Support — Commercial Use and Attribution"
53 changes: 53 additions & 0 deletions docs/PRODUCTION_ART_V1_VERIFICATION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Production Art V1 — Verification

**Branch:** `feat/production-art-package-v1`
**Date:** 2026-08-29

## Automated Gates

| Gate | Result |
|---|---|
| ESLint | 0 errors; 194 pre-existing warnings |
| TypeScript | Passed |
| Vitest | 48 files, 708 tests passed |
| Runtime image and package budget | 110 manifest assets plus 13 package files; 7.38 MB / 20 MB; 0 errors; 0 warnings |
| Package schema validation | 5 packages against 4 schemas passed |
| Production build | Passed in 23.63 seconds after browser/acquisition process cleanup; passed again after automated-review fixes |
| Backend offline pytest | 42 passed; 93 existing `datetime.utcnow()` warnings |

The first production-build attempt terminated during chunk rendering under sandbox memory pressure after all frontend tests and asset gates had passed. No code change was made to conceal it. The temporary development server and completed acquisition browsers were stopped; the identical production source then built successfully with 2.8 GB available.

## Live WebGL2 Gauntlet

The reusable `scripts/verify-showdown.mjs` gate now resolves its output directory relative to the repository and requires the loaded canvas package ID to equal `character.universal-male.pipeline-v1`.

| Interaction | Result |
|---|---|
| Real strategy shell to 1208 Strip and OPS 3D launch | Passed |
| Production character package active | Passed |
| Third-person possession | Passed |
| Possession transfer: Lil Dre → Kilo | Passed |
| First-person camera and physical fire | Passed |
| Tactical commander camera | Passed |
| Retreat result generated | Passed |
| Result applied once to block | Passed |
| Return to strategy view | Passed |
| Fatal local runtime exceptions | 0 |

Final screenshots are stored in `docs/evidence/production-art-v1/`.

## Asset Pipeline Gates

The runtime package is 1,358,092 bytes and contains 65 named joints plus 12 animation groups. A unit test enforces a GLB smaller than 1.5 MB, CC0 provenance, zero engine restrictions, named head/arm hit-zone mapping, and required fire, reload, and downed clips. The package validator verifies the runtime JSON against `character-package.schema.json` and confirms the referenced GLB exists.

The asset audit now counts all files under `public/assets/packages` in the global shipping budget without treating package manifests, licenses, PBR maps, or GLBs as unregistered image orphans.

## Automated Review Remediation

Cursor Bugbot identified two valid lifecycle issues on PR #121. First, an interrupted transient animation could finish later and restart idle over a newer clip. The completion callback now returns unless its animation group is still the active group. Second, invisible physical hit proxies could remain pickable after an actor was downed or while the possessed body was hidden in first person. Snapshot and camera synchronization now toggle both rendered meshes and hit proxies together.

After both fixes, TypeScript, all 708 tests, both asset gates, the production build, and the complete WebGL2 gauntlet passed again. The final browser evidence reports the production package active, TPS/FPS/tactical continuity, member transfer, result application and strategy return, with zero fatal local runtime exceptions.

## Honest Visual Gate

The final captures prove the rigged-character and PBR pipeline but do not meet the cinematic visual target. The free source character’s superhero costume is unsuitable for recognizable street members. Two bone-attached primitive-clothing experiments were tested and removed after live TPS review because they degraded silhouette. The next character must be licensed or commissioned against the package contract and judged in all three cameras.
14 changes: 14 additions & 0 deletions docs/PRODUCTION_ART_VISUAL_REVIEW.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Production Art V1 — Visual Review

**Evidence date:** 2026-08-29
**Final captures:** `docs/evidence/production-art-v1/`

The runtime conclusively loads `character.universal-male.pipeline-v1` and renders independently animated rigs in tactical, first-person, and third-person modes. Scale, ground placement, physical bone hit zones, right-hand weapon attachment, camera possession, member switching, PBR road/concrete/brick response, and the exactly-once result return are functional. This is a production-pipeline improvement over capsules and renderer-owned character assumptions.

The selected free standard Quaternius asset is not suitable as final member art. Its only male full-body option is a bare-torso superhero wearing briefs. The underlying UV and final TPS capture confirm that the asset demonstrates the rig and animation path but does not represent the game’s character-driven streetwear vision.

Two bone-attached procedural clothing experiments were tested in the live TPS view. Although both followed the skeleton and preserved the browser gauntlet, their local bone orientation produced oversized torsos and disconnected shoes, degrading silhouette and member identity. Both experiments were removed. This confirms that procedural clothing cannot rescue an unsuitable source body at target quality.

The environment’s imported asphalt, concrete, and brick maps create denser surfaces and preserve the invisible gameplay grid. The block still remains below the visual target in modeled storefront depth, background-city density, wet reflections, vegetation, vehicle fidelity, lighting complexity, and authored human detail.

The approved next visual gate is therefore one authored clothed hero and one distinct rival that satisfy `character-package.schema.json`. They must be evaluated live in tactical, FPS, and TPS—not as standalone renders—before the roster is scaled.
Loading
Loading