@plasius/gpu-demo-viewer 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,38 @@ The format is based on Keep a Changelog and this project adheres to SemVer.
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ - **Added**
10
+ - (placeholder)
11
+
12
+ - **Changed**
13
+ - (placeholder)
14
+
15
+ - **Fixed**
16
+ - (placeholder)
17
+
18
+ - **Security**
19
+ - (placeholder)
20
+
21
+ ## [0.1.10] - 2026-10-20
22
+
23
+ - Restore workshop setup and current quality controls near the start of the README; separate workspace/maintainer guidance and replace stale release counts with authoritative tracking links.
24
+
25
+ - **Added**
26
+ - (placeholder)
27
+
28
+ - **Changed**
29
+ - (placeholder)
30
+
31
+ - **Fixed**
32
+ - (placeholder)
33
+
34
+ - **Security**
35
+ - (placeholder)
36
+
37
+ ## [0.1.9] - 2026-10-18
38
+
39
+ - Add nine original natural-object and textile models with fixed64/UHD inspection evidence, pinned Khronos resources and explicit default-material limits.
40
+
9
41
  - **Added**
10
42
  - (placeholder)
11
43
 
@@ -227,3 +259,5 @@ The format is based on Keep a Changelog and this project adheres to SemVer.
227
259
  [0.1.6]: https://github.com/Plasius-LTD/gpu-demo-viewer/releases/tag/v0.1.6
228
260
  [0.1.7]: https://github.com/Plasius-LTD/gpu-demo-viewer/releases/tag/v0.1.7
229
261
  [0.1.8]: https://github.com/Plasius-LTD/gpu-demo-viewer/releases/tag/v0.1.8
262
+ [0.1.9]: https://github.com/Plasius-LTD/gpu-demo-viewer/releases/tag/v0.1.9
263
+ [0.1.10]: https://github.com/Plasius-LTD/gpu-demo-viewer/releases/tag/v0.1.10
package/README.md CHANGED
@@ -7,132 +7,162 @@
7
7
  [![Security Policy](https://img.shields.io/badge/security%20policy-yes-orange.svg)](./SECURITY.md)
8
8
  [![Changelog](https://img.shields.io/badge/changelog-md-blue.svg)](./CHANGELOG.md)
9
9
 
10
- Static root-level launcher for validating the `gpu-*` package demos from one place.
10
+ A browser workshop for inspecting source models with the Plasius GPU renderer,
11
+ plus a workspace launcher for the `gpu-*` package demos. The workshop provides
12
+ camera gestures, progressive rendering, quality controls and model credits.
11
13
 
12
- ## Purpose
14
+ The npm package includes the viewer source, manifest and build-time acquisition
15
+ helper. Model binaries are downloaded separately; they are not bundled in npm.
13
16
 
14
- This viewer exists to accelerate manual validation across the GPU package surface:
17
+ ## Run the model workshop
15
18
 
16
- - browser-backed demos can be launched or embedded from one URL
17
- - the integrated showcase consumes the shared 3D harbor runtime from `@plasius/gpu-shared`
18
- - the experimental wavefront path-tracing demo mounts the
19
- `@plasius/gpu-renderer` WebGPU mesh BVH renderer
20
- - remaining code-example demos still expose their recommended command and entry file
21
- - the manifest is tested so new `gpu-*` demo folders do not get missed
19
+ Use Node.js 24 or later, npm, and a WebGPU-capable browser on localhost or HTTPS.
20
+ Clone the repository to run its Vite development server:
22
21
 
23
- ## Run
22
+ ```sh
23
+ git clone https://github.com/Plasius-LTD/gpu-demo-viewer.git
24
+ cd gpu-demo-viewer
25
+ npm ci
26
+ npm run models:download
27
+ npm run models:dev
28
+ ```
24
29
 
25
- From this package:
30
+ Open [the local workshop](http://127.0.0.1:5291/?review=first-twelve).
31
+ The default download command selects the original review batch. It verifies the
32
+ exact size and SHA-256 of each model and its buffer/image dependencies, preserving
33
+ source files and credits. Downloaded binaries live in `model-library/assets/`
34
+ and are ignored by Git and npm. The workshop uses the published shared inspection
35
+ and renderer dependencies from the lockfile; sibling source overrides are optional.
36
+
37
+ The original batch includes a **manual Medieval house download**. Obtain the
38
+ original GLB from the model's credited Sketchfab source and place it at
39
+ `model-library/assets/sf-house/medieval_house.glb`, then rerun the download command.
40
+ A missing manual file produces a placement message; this command does not download
41
+ it for you. Only the pinned original file passes verification. Gem is excluded
42
+ from the rollout and is not substituted.
43
+
44
+ To acquire another reviewed batch or choose a different local port:
45
+
46
+ ```sh
47
+ npm run models:download -- 1
48
+ npm run models:dev -- --port 5292
49
+ ```
26
50
 
27
- ```bash
28
- npm run demo
51
+ Select one batch at a time. A catalogue record can still be held for acquisition,
52
+ licensing or visual review; it is not a claim that the model is available locally
53
+ or enabled on the production site. The download helper admits only configured
54
+ resources and keeps two workers, a 100 MiB per-file limit and a 200 MiB batch limit.
55
+ Source, creator, licence and review notes appear beside each model.
56
+
57
+ ## Camera and render quality
58
+
59
+ Drag or use one finger to orbit; Shift/right-drag trucks, Alt-drag pans, and the
60
+ wheel or pinch moves closer/farther. Two-finger movement trucks. Focus the canvas
61
+ to use arrows, Shift-arrows, +/− and keyboard modes 1–5. `Home` restores framing;
62
+ `?` replays a brief gesture reminder. Persistent instructions remain in Camera help.
63
+
64
+ | Control | Choices | Default |
65
+ | --- | --- | --- |
66
+ | Sample target | 1, 8, 16, 32, 64, 128, 256 | 64 |
67
+ | Light bounces | 2, 4, 6, 8, 10, 12 | 6 |
68
+ | Render size | 480, 800, 1280 px width; 1920×1080, 2560×1440, 3840×2160 | 800 px width |
69
+ | Denoising | On or off | On |
70
+
71
+ The first pass uses one sample. Once the camera is still, batches of up to four
72
+ refine toward the target. Camera and quality changes restart history. Hidden tabs
73
+ pause further work; progress reports GPU-completed samples and actual dimensions.
74
+ Settings do not reload the source model. Resizing preserves the camera.
75
+
76
+ HD, QHD and 4K presets trace the exact selected dimensions independently of the
77
+ window size; the canvas contains the image without stretching. Use one sample for
78
+ a quick full-resolution check. GPU memory and rendering time depend on the model,
79
+ resolution and device. Current released sampling is fixed progressive sampling;
80
+ per-pixel adaptive controls remain separate qualification work.
81
+
82
+ This workshop displays static geometry. Source animation clips remain in the
83
+ original assets, but are not played here. Material variants are not selectable;
84
+ for example, the sheen chair uses its default material. Completion of a render
85
+ does not resolve the visual findings recorded in its review notes.
86
+
87
+ ## Embed the rendering runtime
88
+
89
+ For an application view, use
90
+ [`@plasius/gpu-shared/model-inspection`](https://github.com/Plasius-LTD/gpu-shared#inspect-a-model).
91
+ It owns model loading, integrity verification, camera handling and refinement.
92
+ This viewer supplies the surrounding catalogue, controls and review workflow.
93
+
94
+ Node build tools can use the published acquisition helper:
95
+
96
+ ```sh
97
+ npm install @plasius/gpu-demo-viewer
29
98
  ```
30
99
 
31
- Then open:
100
+ ```js
101
+ import { acquisitionPlan, acquireFixtures } from "@plasius/gpu-demo-viewer/model-library/acquire";
32
102
 
33
- ```text
34
- http://localhost:8000/gpu-demo-viewer/
103
+ // Pass one reviewed batch of catalogue asset records and an absolute destination.
104
+ export async function downloadReviewedBatch(assets, root) {
105
+ const plan = acquisitionPlan(assets, root); // Validates paths, sources and budgets.
106
+ console.log(`Verified download plan: ${plan.length} resources`);
107
+ return acquireFixtures({ assets, root });
108
+ }
35
109
  ```
36
110
 
37
- The server points at the workspace root, so sibling package demos remain reachable from the viewer.
111
+ The input shape follows
112
+ [model-library/catalogue.json](https://github.com/Plasius-LTD/gpu-demo-viewer/blob/main/model-library/catalogue.json).
113
+ Only approved HTTPS providers are accepted; redirects fail. Existing files must
114
+ match their pinned hashes and sizes; missing manual sources fail with a placement
115
+ message. Keep this Node helper out of browser bundles. Site builds may enforce
116
+ stricter limits and must verify the complete dependency closure.
38
117
 
39
- To open the experimental wavefront path-tracing technique demo directly:
118
+ ## Workspace demo launcher
40
119
 
41
- ```text
42
- http://localhost:8000/gpu-demo-viewer/wavefront/?experimental=wavefront
43
- ```
120
+ The static root launcher expects sibling `gpu-*` package checkouts and their
121
+ required builds. It is useful when developing the package family together.
122
+ From a checkout named `gpu-demo-viewer`, with Python 3 installed:
44
123
 
45
- Deterministic 540p capture settings are available at:
46
-
47
- ```text
48
- http://localhost:8000/gpu-demo-viewer/wavefront/?experimental=wavefront&capture=1
124
+ ```sh
125
+ npm run demo
49
126
  ```
50
127
 
51
- The displayed primary-ray count is calculated as:
128
+ Visit [the workspace launcher](http://localhost:8000/gpu-demo-viewer/).
129
+ The server serves the parent directory so sibling demo URLs remain reachable.
130
+ Browser-backed demos can be launched or embedded; code-example packages show
131
+ their command and entry file. `gpu-world-generator` uses its built `demo/dist/`.
132
+ The manifest is tested so sibling demo folders are not missed.
52
133
 
53
- ```text
54
- render width x render height x samples per pixel
55
- ```
134
+ See [the experimental wavefront viewer](https://github.com/Plasius-LTD/gpu-demo-viewer/blob/main/docs/wavefront-viewer.md)
135
+ for its separate capture mode, benchmark controls and timing interpretation.
56
136
 
57
- The debug panel also reports the separate screen-pixel count so render
58
- resolution and stochastic sampling cost remain visible independently.
59
- Continuation rays are then spawned from the active queue by bounce depth inside
60
- the renderer. The active demo presets are 960x540 capture, 1280x720 balanced,
61
- 1920x1080 detail, and a 3840x2160 4K target. The 540p/720p/1080p presets
62
- default to 8 samples per pixel, while 4K defaults to 4 samples per pixel; the
63
- renderer keeps queue buffers tile-bounded so these targets do not require
64
- full-frame ray queues.
65
-
66
- The wavefront page runs a live render loop by default. The performance panel
67
- shows FPS, frame timing, primary rays per second, and a 100% stacked timing bar
68
- for the viewer-observed frame budget: WebGPU command dispatch, GPU completion
69
- wait, optional probe/readback, overlay update, and requestAnimationFrame pacing.
70
- These timings are browser-side measurements; they identify where the viewer is
71
- blocked each frame but do not yet replace future GPU timestamp-query profiling
72
- inside individual compute passes.
73
-
74
- ## Static Validation Contract
75
-
76
- This repository is a public npm package that ships the static validation
77
- surface for the `gpu-*` family.
78
-
79
- - `npm run demo` serves the workspace root so sibling `gpu-*` demos are
80
- reachable from one URL.
81
- - `npm run typecheck` syntax-checks the shipped browser entrypoints and
82
- manifest modules.
83
- - `npm run build` verifies the static contract documented in
84
- `docs/adrs/adr-0001-gpu-demo-viewer-governance-baseline.md`.
85
- - `npm run pack:check` verifies the public npm package payload before GitHub
86
- Actions publishes it.
87
- - Releases are published only through `.github/workflows/cd.yml` with npm
88
- provenance and the GitHub `production` environment.
89
-
90
- ## Validation Notes
91
-
92
- - Browser-backed WebGPU demos still require `localhost` or `HTTPS`.
93
- - The wavefront path-tracing demo is a WebGPU renderer mount, not a CPU/static
94
- canvas tracer. It submits only the benchmark model mesh set with
95
- `displayQuality: true`, builds the renderer mesh BVH on the GPU, disables
96
- environment portals, and leaves skybox/environment lighting as the only
97
- scene lighting source. The demo intentionally excludes the previous synthetic
98
- room, floor, wall, emissive-panel, and fluid-surface geometry so most escaped
99
- paths should terminate against the skybox rather than unlit scene blockers.
100
- Shallow no-light/max-depth paths return the renderer ambient residual to
101
- approximate unresolved high-order indirect bounces. The demo exposes 1, 4, 8,
102
- and 16 samples-per-pixel settings and defaults to 8 spp for the 540p, 720p,
103
- and 1080p presets. The denoise toggle runs the renderer post pass; denoise
104
- smooths neighboring pixels but does not replace active-ray skybox/environment
105
- hits as the primary lighting source. The loop updates camera uniforms every
106
- animation frame through `@plasius/gpu-renderer` so the FPS counter represents
107
- a moving realtime render rather than repeated presentation of one static
108
- frame.
109
- - The wavefront performance chart is intended for local tuning: compare
110
- resolution, depth, samples-per-pixel, and denoise settings while watching
111
- whether time is dominated by command dispatch, sampled GPU completion sync,
112
- readback, overlay work, or frame pacing. The demo does not hard-sync every
113
- frame; completion sync is sampled periodically to avoid making the viewer
114
- itself serialize the GPU queue.
115
- - The shared integration showcase is 3D but does not require WebGPU initialization just to render the validation scene.
116
- - The showcase now resolves `@plasius/gpu-shared` through an import map so the browser entry uses the package public surface instead of a deep internal file path.
117
- - `gpu-world-generator` is launched from its built `demo/dist/` bundle in the viewer because its source demo uses a Vite workflow.
118
- - Code-example packages are listed for discovery but are not embedded in an iframe.
119
-
120
- ## Local Checks
121
-
122
- ```bash
137
+ ## Development and review records
138
+
139
+ ```sh
123
140
  npm run build
124
141
  npm run typecheck
125
142
  npm run lint
143
+ npm run test:coverage
126
144
  npm run pack:check
127
- npm test
128
145
  ```
129
146
 
130
- ## Governance
147
+ `build` verifies the static viewer contract; `typecheck` checks shipped JavaScript
148
+ syntax. Neither command performs browser GPU qualification.
149
+
150
+ For deliberate local development against an unreleased package, the model Vite
151
+ config accepts `PLASIUS_SHARED_INSPECTION_SOURCE` (absolute `src/model-inspection.js`)
152
+ and `PLASIUS_RENDERER_SOURCE` (absolute `src/index.js` or built `dist/index.js`).
153
+ These overrides are local development tools. Production consumes published,
154
+ qualified package versions and approved source assets.
155
+
156
+ - [Initial model findings](https://github.com/Plasius-LTD/gpu-demo-viewer/blob/main/docs/model-library-review.md).
157
+ - [UHD inspection contract](https://github.com/Plasius-LTD/gpu-demo-viewer/blob/main/docs/model-inspection-uhd.md).
158
+ - [Catalogue rollout requirements](https://github.com/Plasius-LTD/gpu-demo-viewer/blob/main/docs/catalogue-production-rollout.md) and [live delivery tracking](https://github.com/Plasius-LTD/plasius-ltd-site/issues/2308).
159
+ - [Non-functional requirements](https://github.com/Plasius-LTD/gpu-demo-viewer/blob/main/NFR.md), [workflow](https://github.com/Plasius-LTD/gpu-demo-viewer/blob/main/WORKFLOW.md), [flags and capabilities](https://github.com/Plasius-LTD/gpu-demo-viewer/blob/main/FLAGS_AND_CAPABILITIES.md), and [architecture decisions](https://github.com/Plasius-LTD/gpu-demo-viewer/blob/main/docs/adrs/index.md).
160
+
161
+ The research manifest retains source identities and credits separately from
162
+ acquisition state. Production entitlement and visual qualification are distinct
163
+ from downloading a model. GitHub Project tracking owns current delivery status;
164
+ voxel conversion follows qualification of the original-model catalogue.
131
165
 
132
- - Non-functional requirements: [`NFR.md`](./NFR.md)
133
- - Delivery workflow: [`WORKFLOW.md`](./WORKFLOW.md)
134
- - Feature flags and capabilities: [`FLAGS_AND_CAPABILITIES.md`](./FLAGS_AND_CAPABILITIES.md)
135
- - Architectural decision log: [`docs/adrs/index.md`](./docs/adrs/index.md)
136
166
  <!-- BEGIN PLASIUS RELEASE INTEGRITY -->
137
167
  ## Release integrity
138
168
 
@@ -148,56 +178,3 @@ npm 11.5.1 or newer, uses the protected `production` environment and
148
178
  short-lived npm OIDC with provenance, and has no long-lived npm write-token
149
179
  fallback. Rollback disables CD; it never rewrites published package history.
150
180
  <!-- END PLASIUS RELEASE INTEGRITY -->
151
-
152
- ## Model library review
153
-
154
- `npm run models:download` installs the ten reviewed, freely licensed Poly Haven and Khronos fixtures from `model-library/catalogue.json`, including all buffer/image dependencies. Downloads are bounded and SHA-256 checked; binaries are ignored by Git and npm. `npm run models:dev` opens the localhost server on port 5291. Visit `http://127.0.0.1:5291/?review=first-twelve`. The Medieval house is a manually supplied eleventh asset; Gem is excluded from the rollout by request. Source links, creators and licences are available beside each model.
155
-
156
- For Medieval house, obtain the original GLB from its credited Sketchfab source and place it at `model-library/assets/sf-house/medieval_house.glb`, then run `npm run models:download` to verify its pinned size and SHA-256 and write its credits. This command never downloads manual assets; a missing file produces an explicit placement message. The catalogue stores no private local paths.
157
-
158
- This page consumes the shared model-inspection package entrypoint. While its upstream release is pending, development testing can set `PLASIUS_SHARED_INSPECTION_SOURCE` to an absolute path to the reviewed sibling `src/model-inspection.js`; this explicit source override is for localhost development only, not a released dependency or production deployment.
159
-
160
- Mouse/touch/keyboard inspection reuses the material-study camera. The view progressively refines while the camera is still, stopping at the selected sample target. `Home` restores framing and `?` displays a brief gesture reminder. Resizing updates resolution while preserving the camera. Fox is static here; its Survey, Walk and Run clips remain in the original download. Amber uses the fixed-continuation correction in renderer 0.2.50; its original materials are unchanged. See `docs/model-library-review.md` for the initial findings; none of these fixtures is implicitly approved for the production showcase.
161
-
162
- Render-quality controls select 8–256 total samples, 2–12 light bounces, 480/800/1280px render width and denoising. Defaults are 64/6/800/on. The first pass is one sample; idle refinement adds up to four samples per batch. Camera and quality changes restart history. Hidden tabs pause further work; the progress bar reports completed samples and actual dimensions. Settings do not reload the source model.
163
-
164
- During upstream progressive-renderer development, also set `PLASIUS_RENDERER_SOURCE` to an absolute reviewed `src/index.js` or built `dist/index.js`. Both source overrides are development-only; PRs remain dependency-blocked until approved package CD and final released-version validation. To use another local port: `npm run models:dev -- --port 5292`.
165
-
166
- The model review includes native 1920 × 1080, 2560 × 1440 and 3840 × 2160 quality presets. These trace the exact selected pixel dimensions independently of viewport size; the canvas contains the image without stretching. A one-sample target supports quick full-resolution checks. See [UHD inspection design](docs/model-inspection-uhd.md).
167
-
168
- The released model review uses fixed progressive sampling with native UHD sizes and requires renderer 0.2.51/shared 1.1.8 or newer. Adaptive controls remain in a separate qualification branch. See [release scope](docs/model-review-release.md); the local inspection catalogue explicitly retains unresolved visual findings.
169
-
170
- ## Complete model catalogue rollout
171
-
172
- The [74-model production rollout](docs/catalogue-production-rollout.md) tracks the
173
- eleven retained originals and seven subsequent batches of nine. The research
174
- manifest retains the excluded Gem identity, making 75 research records. `model-library/rollout.json`
175
- records acquisition/qualification state separately from production entitlement;
176
- `research-catalogue.json` preserves the original source identities and credits.
177
- Ten models are currently production-verified. Amber is locally qualified with renderer 0.2.50 and awaits production verification; Gem is excluded by request. Research entries are not a claim of downloaded or working
178
- models. Voxel conversion is the following pass after original-model production
179
- qualification. GitHub Story [2308](https://github.com/Plasius-LTD/plasius-ltd-site/issues/2308)
180
- owns delivery and acceptance.
181
-
182
- ### Review batch downloads
183
-
184
- `npm run models:download -- 1` acquires only the six checked Poly Haven models
185
- in the first follow-on batch. The default remains batch 0 (the original group).
186
- Each batch retains the existing 200 MiB total and 100 MiB per-file download
187
- limits, two workers and exact hashes. Downloaded models are candidates, not
188
- production approvals. The local workshop includes acquired candidates with
189
- their source credits; production remains a separately qualified catalogue.
190
-
191
- ### Build-time model acquisition
192
-
193
- Node consumers may import `acquisitionPlan` and `acquireFixtures` from
194
- `@plasius/gpu-demo-viewer/model-library/acquire`. Pass reviewed asset metadata
195
- and a destination root; the helper verifies exact bytes and SHA-256, uses only
196
- approved HTTPS providers without redirects, and bounds concurrency, time and
197
- bytes. Select one explicit reviewed batch per call (200 MiB total / 100 MiB per
198
- resource maximum). Existing files must match; missing manual sources fail closed.
199
- This Node subpath is build tooling and must not enter browser bundles. Binary
200
- assets are not included in the npm package. Site build-time use retains stricter
201
- resource limits and verifies the complete source dependency closure.
202
-
203
- The review now consumes published renderer 0.2.51 and shared 1.1.8: camera movement reuses unchanged scene geometry, and repeated source primitives share their authored materials during import.
@@ -0,0 +1,234 @@
1
+ {
2
+ "date": "2026-10-18",
3
+ "renderer": "0.2.51",
4
+ "shared": "1.1.8",
5
+ "sourceOverrides": false,
6
+ "mode": "fixed-progressive",
7
+ "productionVerified": false,
8
+ "consoleErrors": 0,
9
+ "limitations": [
10
+ "Static geometry only; adaptive transport and animation are not qualified.",
11
+ "Sheen Chair uses its authored default material; variants are not selectable.",
12
+ "The source Rubber Boots set contains four boot meshes.",
13
+ "Physical touch hardware and screen-reader speech were not tested.",
14
+ "Completed images support source inspection, not full physical-fidelity approval."
15
+ ],
16
+ "models": [
17
+ {
18
+ "key": "food_pomegranate_01",
19
+ "triangles": 8142,
20
+ "primitives": 1,
21
+ "materials": 1,
22
+ "completedFixedSamples": 64,
23
+ "denoisingOffOn": true,
24
+ "cameraResetAndRefinement": true,
25
+ "completedUhd": {
26
+ "width": 3840,
27
+ "height": 2160,
28
+ "samples": 1
29
+ },
30
+ "evidence": [
31
+ {
32
+ "file": "Food-Pomegranate-01.png",
33
+ "sha256": "b884838f06ae474122623228954630e1ce56ab5540dbb98bdb013be9ef5d70ac"
34
+ },
35
+ {
36
+ "file": "Food-Pomegranate-01-UHD.png",
37
+ "sha256": "c6bf16fae502a0da2a030d5e0cef4c4375af62bbedde069ff039823bd534a3a4"
38
+ }
39
+ ]
40
+ },
41
+ {
42
+ "key": "lambis_shell",
43
+ "triangles": 12498,
44
+ "primitives": 1,
45
+ "materials": 1,
46
+ "completedFixedSamples": 64,
47
+ "denoisingOffOn": true,
48
+ "cameraResetAndRefinement": true,
49
+ "completedUhd": {
50
+ "width": 3840,
51
+ "height": 2160,
52
+ "samples": 1
53
+ },
54
+ "evidence": [
55
+ {
56
+ "file": "Lambis-Shell.png",
57
+ "sha256": "33b954c771bb4aaaf8bb9ad78f736546cfd7344885370535e989aaad1e872585"
58
+ },
59
+ {
60
+ "file": "Lambis-Shell-UHD.png",
61
+ "sha256": "b8f04147705a144a85688eb74a0dbee878bf4401275cfde11fb8eaa02ca901f5"
62
+ }
63
+ ]
64
+ },
65
+ {
66
+ "key": "rock_face_01",
67
+ "triangles": 20174,
68
+ "primitives": 1,
69
+ "materials": 1,
70
+ "completedFixedSamples": 64,
71
+ "denoisingOffOn": true,
72
+ "cameraResetAndRefinement": true,
73
+ "completedUhd": {
74
+ "width": 3840,
75
+ "height": 2160,
76
+ "samples": 1
77
+ },
78
+ "evidence": [
79
+ {
80
+ "file": "Rock-Face-01.png",
81
+ "sha256": "33c7d7b6230b455e70cddab45344052ee125d47196c58943c0607a17e0fc8de8"
82
+ },
83
+ {
84
+ "file": "Rock-Face-01-UHD.png",
85
+ "sha256": "b369e857112218f79542bfe2039e677d4c45ac34fb9d912ee58c10aee80a7708"
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ "key": "tree_stump_01",
91
+ "triangles": 41046,
92
+ "primitives": 1,
93
+ "materials": 1,
94
+ "completedFixedSamples": 64,
95
+ "denoisingOffOn": true,
96
+ "cameraResetAndRefinement": true,
97
+ "completedUhd": {
98
+ "width": 3840,
99
+ "height": 2160,
100
+ "samples": 1
101
+ },
102
+ "evidence": [
103
+ {
104
+ "file": "Tree-Stump-01.png",
105
+ "sha256": "01b6cce2016364555fcc8fce3af3554b2380458f44efe91082df13e61ce83293"
106
+ },
107
+ {
108
+ "file": "Tree-Stump-01-UHD.png",
109
+ "sha256": "e649c3490bdac8096fde3b8aa50dd31ab92942eb40350ada9b64a4f0d0d24a4d"
110
+ }
111
+ ]
112
+ },
113
+ {
114
+ "key": "ArmChair_01",
115
+ "triangles": 5626,
116
+ "primitives": 1,
117
+ "materials": 1,
118
+ "completedFixedSamples": 64,
119
+ "denoisingOffOn": true,
120
+ "cameraResetAndRefinement": true,
121
+ "completedUhd": {
122
+ "width": 3840,
123
+ "height": 2160,
124
+ "samples": 1
125
+ },
126
+ "evidence": [
127
+ {
128
+ "file": "Arm-Chair-01.png",
129
+ "sha256": "2880f3e3554562b46eefff8e00bc468ec502481c584fc13c4ddeb4b0127e6581"
130
+ },
131
+ {
132
+ "file": "Arm-Chair-01-UHD.png",
133
+ "sha256": "7529879e264de2b7f25bd5ea8e2df39ac5b3183bda21406578a6beb015990d00"
134
+ }
135
+ ]
136
+ },
137
+ {
138
+ "key": "fishermans_hat",
139
+ "triangles": 10304,
140
+ "primitives": 1,
141
+ "materials": 1,
142
+ "completedFixedSamples": 64,
143
+ "denoisingOffOn": true,
144
+ "cameraResetAndRefinement": true,
145
+ "completedUhd": {
146
+ "width": 3840,
147
+ "height": 2160,
148
+ "samples": 1
149
+ },
150
+ "evidence": [
151
+ {
152
+ "file": "Fishermans-Hat.png",
153
+ "sha256": "8059b74c6dfc1074540dea7fb009f0c0634646cd5ed60b63ede9e9f524d8f01e"
154
+ },
155
+ {
156
+ "file": "Fishermans-Hat-UHD.png",
157
+ "sha256": "8d8dffb568abdcda33f922bb875536bcd9c7116c5c7bb5a05730a7d1edec9a7d"
158
+ }
159
+ ]
160
+ },
161
+ {
162
+ "key": "rubber_boots",
163
+ "triangles": 56128,
164
+ "primitives": 4,
165
+ "materials": 2,
166
+ "completedFixedSamples": 64,
167
+ "denoisingOffOn": true,
168
+ "cameraResetAndRefinement": true,
169
+ "completedUhd": {
170
+ "width": 3840,
171
+ "height": 2160,
172
+ "samples": 1
173
+ },
174
+ "evidence": [
175
+ {
176
+ "file": "Rubber-Boots.png",
177
+ "sha256": "4630658b9360eb26ef582db9ab7f7b727a5191e36dcda20b0b37d7123eab8b23"
178
+ },
179
+ {
180
+ "file": "Rubber-Boots-UHD.png",
181
+ "sha256": "9a1cb02dcee8b517a94d282af2dedc1f318b6a269b8949f7a1dca8cacc2f590c"
182
+ }
183
+ ]
184
+ },
185
+ {
186
+ "key": "SheenChair",
187
+ "triangles": 39936,
188
+ "primitives": 4,
189
+ "materials": 6,
190
+ "completedFixedSamples": 64,
191
+ "denoisingOffOn": true,
192
+ "cameraResetAndRefinement": true,
193
+ "completedUhd": {
194
+ "width": 3840,
195
+ "height": 2160,
196
+ "samples": 1
197
+ },
198
+ "evidence": [
199
+ {
200
+ "file": "Sheen-Chair.png",
201
+ "sha256": "a77903d6ead6cbcc9a03f9974ae7fe6d879c24c091bb7d384f7698b3fe3e8bb2"
202
+ },
203
+ {
204
+ "file": "Sheen-Chair-UHD.png",
205
+ "sha256": "1252911713a6a0fbb46238c06cc5845eaece04ac4cd0ff27d215a4db73875c36"
206
+ }
207
+ ]
208
+ },
209
+ {
210
+ "key": "SheenCloth",
211
+ "triangles": 115200,
212
+ "primitives": 1,
213
+ "materials": 1,
214
+ "completedFixedSamples": 64,
215
+ "denoisingOffOn": true,
216
+ "cameraResetAndRefinement": true,
217
+ "completedUhd": {
218
+ "width": 3840,
219
+ "height": 2160,
220
+ "samples": 1
221
+ },
222
+ "evidence": [
223
+ {
224
+ "file": "Sheen-Cloth.png",
225
+ "sha256": "c6b485a30af21fcafa949bc1e5d0dc7ee9f8304e6613a86617bcdd953185d247"
226
+ },
227
+ {
228
+ "file": "Sheen-Cloth-UHD.png",
229
+ "sha256": "4d41f377201f9fe4c4db329391981d1ac4c61efc3ec350c072f9dcacbe1ae7a2"
230
+ }
231
+ ]
232
+ }
233
+ ]
234
+ }
@@ -1,11 +1,13 @@
1
1
  # Complete catalogue rollout
2
2
 
3
- Status: delivery in progress, 18 October 2026. Parent Epic: site#2271;
3
+ Plan recorded 18 October 2026; counts below are a historical planning snapshot,
4
+ not current deployment status. See [Story 2308](https://github.com/Plasius-LTD/plasius-ltd-site/issues/2308)
5
+ for delivery evidence and current status. Parent Epic: site#2271;
4
6
  Feature: site#1170. First-batch Story: site#2303; production Task: site#2305.
5
7
 
6
8
  The research catalogue contains 75 distinct source assets/sets. Gem is explicitly
7
9
  excluded by the user, leaving 74 production candidates: eleven retained from
8
- the original twelve and 63 further models. Twenty-two have been acquired and ten
10
+ the original twelve and 63 further models. Thirty-one have been acquired and ten
9
11
  are currently selectable in production.
10
12
  The 52 deployed files are geometry/texture resources, not 52 models.
11
13
 
@@ -113,3 +115,20 @@ Four LOD0 tree sources exceed the unchanged 500,000-triangle limit: Fir Tree 01
113
115
  (6,982,937), Island Tree 01 (1,599,403), Jacaranda Tree (3,863,832) and Pine Tree 01
114
116
  (17,182,252). These need deliberate LOD preparation before admission; increasing
115
117
  the runtime budget or silently replacing their sources is not a qualification.
118
+
119
+ ## Batch 3 acquisition
120
+
121
+ Nine original sources are acquired: pomegranate, shell, rock face, tree stump,
122
+ armchair, hat, boots, Sheen Chair and Sheen Cloth. Poly Haven resources retain
123
+ the provider MD5/length and local SHA-256 inventories. Khronos sources are pinned
124
+ to commit edc7c9e67c639d230715049ee31f9a96a6babbbe and checked against Git blob
125
+ identities before SHA-256 inventory. Both sheen examples are CC0 in their primary
126
+ source notices. Sheen Chair exposes its authored default material only; material
127
+ variant selection is not claimed. This acquisition record does not admit any
128
+ of these nine sources to production before visual qualification and site CI/CD.
129
+
130
+ All nine batch-three models completed fixed64, camera reset/refinement, denoising
131
+ off/on and native UHD1 using released packages, with no observed console errors.
132
+ See [batch three evidence](batch-three-qualification.json). Four boot meshes are
133
+ part of the source set; Sheen Chair retains its default authored material.
134
+ Production verification remains pending.