@three-blocks/devtools 1.0.0-alpha.176.g8ff8a72e6369 → 1.0.0-alpha.190.g3ffe5c0ecc9c
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 +27 -2
- package/LICENSE +1 -2
- package/NOTICE +19 -27
- package/README.md +89 -144
- package/dist/browser/shader-capture.js +2 -2
- package/dist/{browser-smoke-76626IZQ.js → browser-smoke-HB7ZXQGR.js} +1 -1
- package/dist/chunk-3HTNEAVD.cjs +1 -0
- package/dist/chunk-3TQVLKUH.js +14 -0
- package/dist/chunk-54BHFG2E.js +76 -0
- package/dist/{chunk-ZKK6E42X.js → chunk-77HY5X2T.js} +1 -1
- package/dist/chunk-NEWSG5RX.js +3 -0
- package/dist/chunk-UQOPSJR6.js +6 -0
- package/dist/chunk-WNNN3UJI.js +93 -0
- package/dist/chunk-ZKXUYNSG.js +18 -0
- package/dist/cli.js +21 -21
- package/dist/index.d.ts +14 -10
- package/dist/index.js +21 -21
- package/dist/shader-browser-6TM4RNUL.js +2 -0
- package/dist/shader-browser-ZHG2JISC.js +1 -0
- package/dist/shader-capture-server.d.ts +6 -8
- package/dist/shader-capture-server.js +15 -15
- package/dist/{shader-config-4EXO5DKK.js → shader-config-BYBJUL3C.js} +1 -1
- package/dist/{shader-transform-CUkZn5Oa.d.ts → shader-transform-DSFaVrux.d.ts} +2 -0
- package/dist/{shader-watch-QHTNTSZE.js → shader-watch-Z3VGP4QB.js} +1 -1
- package/dist/shader-workflow-SO7WCR4Y.js +2 -0
- package/dist/{status-DV2BYZHR.js → status-CFJSWBDI.js} +1 -1
- package/dist/transform.cjs +1 -1
- package/dist/transform.d.ts +1 -1
- package/dist/transform.js +1 -1
- package/dist/webpack-loader.cjs +1 -1
- package/dist/webpack-loader.d.ts +1 -1
- package/dist/webpack-loader.js +1 -1
- package/package.json +3 -3
- package/dist/chunk-26FK4CRS.js +0 -6
- package/dist/chunk-4EHPYBKA.cjs +0 -1
- package/dist/chunk-HRYYNBVC.js +0 -3
- package/dist/chunk-INDAJN42.js +0 -94
- package/dist/chunk-ME3X2KFY.js +0 -14
- package/dist/chunk-SCJNCGMF.js +0 -17
- package/dist/chunk-VGJ3V4QQ.js +0 -78
- package/dist/shader-browser-65V22LLL.js +0 -1
- package/dist/shader-browser-JII6ZFCW.js +0 -2
- package/dist/shader-workflow-U4G565EB.js +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,33 @@
|
|
|
1
1
|
# @three-blocks/devtools
|
|
2
2
|
|
|
3
|
-
## 1.0.0-alpha.
|
|
3
|
+
## 1.0.0-alpha.190.g3ffe5c0ecc9c
|
|
4
|
+
|
|
5
|
+
- Tools: Private tool releases now deliver the current Blender and CLI bundles.
|
|
6
|
+
|
|
7
|
+
- Tools: Example optimization now waits for loading and exits cleanly after parity.
|
|
8
|
+
|
|
9
|
+
- Website: Mobile navigation now opens from a responsive menu on every page.
|
|
10
|
+
|
|
11
|
+
- Website: Ocean water fills mobile screens without camera controls fighting touch.
|
|
12
|
+
|
|
13
|
+
- Website: Skinned text now starts quickly from a prebuilt Japanese MSDF atlas.
|
|
14
|
+
|
|
15
|
+
- Website: The overview sphere is floor-centered and pushes the pile more strongly.
|
|
16
|
+
|
|
17
|
+
- Website: Spotlight Type stays steady while scrolling.
|
|
18
|
+
|
|
19
|
+
- Website: Mobile smoke responds forcefully while water fills portrait screens and follows touch.
|
|
20
|
+
|
|
21
|
+
- Website: The 3D smoke scene now uses a clean, star-free sky.
|
|
22
|
+
|
|
23
|
+
- Website: Liquid Bunny stays clearly lit in portrait views.
|
|
24
|
+
|
|
25
|
+
- Website: Baked Motion loading posters now match the live scene size on portrait screens.
|
|
26
|
+
|
|
27
|
+
- Website: Release pages show the exact version with a short changelog.
|
|
28
|
+
|
|
29
|
+
- Packages: Built from `3ffe5c0ecc9c`.
|
|
4
30
|
|
|
5
|
-
- ci: keep alpha readiness release-scoped (`8ff8a72e6369`).
|
|
6
31
|
|
|
7
32
|
This changelog is generated from Changesets.
|
|
8
33
|
|
package/LICENSE
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
Required Notice: Copyright (c) 2025-2026 Three Blocks
|
|
2
|
-
Required Notice: AI/ML training and dataset use are not licensed; text-and-data-mining rights reserved (EU 2019/790 Art. 4(3)). See NOTICE.
|
|
1
|
+
Required Notice: Copyright (c) 2025-2026 ロリンジャー株式会社 (Rohlinger K.K.), doing business as Three.js Blocks (https://threejs-blocks.com)
|
|
3
2
|
|
|
4
3
|
# PolyForm Noncommercial License 1.0.0
|
|
5
4
|
|
package/NOTICE
CHANGED
|
@@ -1,32 +1,24 @@
|
|
|
1
|
-
Required Notice: Copyright (c) 2025-2026 Three Blocks
|
|
2
|
-
Required Notice: AI/ML training and dataset use are not licensed; text-and-data-mining rights reserved (EU 2019/790 Art. 4(3)). See NOTICE.
|
|
1
|
+
Required Notice: Copyright (c) 2025-2026 ロリンジャー株式会社 (Rohlinger K.K.), doing business as Three.js Blocks (https://threejs-blocks.com)
|
|
3
2
|
|
|
4
|
-
Three Blocks
|
|
5
|
-
|
|
3
|
+
Three.js Blocks licensing notice
|
|
4
|
+
================================
|
|
6
5
|
|
|
7
|
-
This software is
|
|
8
|
-
|
|
9
|
-
noncommercial permitted purposes.
|
|
6
|
+
This software is offered under the PolyForm Noncommercial License 1.0.0:
|
|
7
|
+
https://polyformproject.org/licenses/noncommercial/1.0.0/
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
the
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
intelligence models, or for inclusion in datasets distributed for those
|
|
16
|
-
purposes.
|
|
9
|
+
LICENSE contains the controlling noncommercial terms. This notice explains
|
|
10
|
+
the licensing model; it does not narrow or expand the PolyForm license.
|
|
11
|
+
Commercial customers receive separate rights under the agreement they accept:
|
|
12
|
+
https://threejs-blocks.com/license
|
|
17
13
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
https://threejs-blocks.com/.well-known/tdmrep.json and
|
|
23
|
-
https://threejs-blocks.com/ai.txt.
|
|
14
|
+
The commercial agreement restricts using implementation source or proprietary
|
|
15
|
+
Pro Tools to train or evaluate machine-learning models. That restriction applies
|
|
16
|
+
only when the commercial customer accepts it; it is not an extra condition on
|
|
17
|
+
the standardized PolyForm license.
|
|
24
18
|
|
|
25
|
-
|
|
26
|
-
(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
Commercial licensing (Pro): https://threejs-blocks.com/license
|
|
19
|
+
To the extent permitted by applicable law, the licensor reserves text-and-data-
|
|
20
|
+
mining rights under Article 4(3) of Directive (EU) 2019/790 for online content
|
|
21
|
+
and implementation source. This reservation does not limit statutory exceptions
|
|
22
|
+
or permissions in LICENSE. Public documentation at
|
|
23
|
+
https://threejs-blocks.com/llms.txt may be used by assistants to help people use
|
|
24
|
+
the documented public API.
|
package/README.md
CHANGED
|
@@ -1,57 +1,55 @@
|
|
|
1
1
|
# @three-blocks/devtools
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
`@three-blocks/devtools` is the public, account-free command engine behind `npx three-blocks`. It captures and verifies WebGPU shaders, generates text atlases, bakes environment lighting, and checks browser integrations. The runtime overlay and shader hydrator ship from `three-blocks/devtools` and `three-blocks/shaders` in the core package.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Add Devtools to a Vite app
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
The Three Blocks starter already installs and configures this package. Pin the command engine in an adopted project when you need offline, version-locked commands:
|
|
8
8
|
|
|
9
|
-
```
|
|
9
|
+
```bash
|
|
10
|
+
npm install --save-dev @three-blocks/devtools
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Add `threeBlocks()` beside your existing Vite plugins:
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { defineConfig } from "vite";
|
|
17
|
+
import { threeBlocks } from "three-blocks/vite";
|
|
18
|
+
|
|
19
|
+
export default defineConfig(({ mode }) => ({
|
|
20
|
+
plugins: [threeBlocks({ shaders: { strict: mode === "strict" } })],
|
|
21
|
+
}));
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Register the page-owned `WebGPURenderer` once:
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
10
27
|
import { registerDevtools } from "three-blocks/devtools";
|
|
11
28
|
|
|
12
29
|
registerDevtools({ renderer });
|
|
13
30
|
```
|
|
14
31
|
|
|
15
|
-
|
|
32
|
+
Open the development overlay and click **Capture** for the current scene. Use the command for a route matrix, automated regeneration, or continuous integration (CI):
|
|
16
33
|
|
|
17
|
-
```
|
|
34
|
+
```bash
|
|
18
35
|
npx three-blocks shaders capture
|
|
19
36
|
```
|
|
20
37
|
|
|
21
|
-
The first
|
|
22
|
-
project does not have one. Capture writes both the committed source artifact under
|
|
23
|
-
`.three-blocks/shaders/` and its zero-import browser asset under
|
|
24
|
-
`public/three-blocks/shaders/`. The registration line discovers that asset, holds the
|
|
25
|
-
first renderer build while it loads, and installs it in development and production.
|
|
26
|
-
An explicit `installShaderCache()` call remains available for advanced routing.
|
|
38
|
+
The first command-line capture creates `three-blocks.shaders.json` with a default `/` route when the project has no shader configuration. Capture writes a committed source artifact under `.three-blocks/shaders/` and a browser manifest under `public/three-blocks/shaders/`. `registerDevtools()` loads the matching manifest before the first shader build. Use `installShaderCache()` only when the app owns custom manifest transport.
|
|
27
39
|
|
|
28
|
-
|
|
29
|
-
webpack, Rollup, or esbuild project, the capture command detects the bundler and checks
|
|
30
|
-
its provider adapter. When wiring is missing, it prints the exact configuration diff
|
|
31
|
-
and asks before applying it. Use `--yes` only after reviewing that diff when running
|
|
32
|
-
non-interactively. The command starts a project-local Next.js server or builds and
|
|
33
|
-
serves `dist/`, `build/`, or `out/` automatically.
|
|
40
|
+
For Next.js, webpack, Rollup, or esbuild, the capture command detects the bundler and checks its provider adapter. Missing wiring produces an exact configuration diff and requires confirmation. Review that diff before using `--yes` in a noninteractive shell. The command starts a project-local Next.js server or builds and serves `dist/`, `build/`, or `out/`.
|
|
34
41
|
|
|
35
|
-
Use `--driver static --serve
|
|
36
|
-
<url>` to attach to a server you started. Explicit driver and URL choices never edit
|
|
37
|
-
bundler configuration.
|
|
42
|
+
Use `--driver static --serve build_directory` for a nonstandard build directory. Use `--url http://localhost:3000` to attach to a transformed server you started. Explicit driver and URL choices never edit bundler configuration.
|
|
38
43
|
|
|
39
|
-
The overlay changes from **Live** to **Precompiled** after a fresh capture loads.
|
|
44
|
+
The overlay changes from **Live** to **Precompiled** after a fresh capture loads. Each capture writes a receipt-matched estimate to `.three-blocks/shaders/timing.local.json`; `--commit-timing` also writes a shareable, hardware-labelled `timing.json`. `shaders test` replaces the local estimate with a median from repeated runs. The overlay reports skipped Three Shading Language (TSL) builds and estimated TSL work avoided only while timing matches the current receipt.
|
|
40
45
|
|
|
41
46
|
`WebGLRenderer` stays on live shader building. `WebGPURenderer` also uses the live path when it selects a WebGL fallback.
|
|
42
47
|
|
|
43
48
|
### Three.js r185 compatibility patch
|
|
44
49
|
|
|
45
|
-
Every adapter applies the same version-gated
|
|
50
|
+
Shader precompilation supports Three.js `>=0.185.0 <0.186.0`. Every adapter applies the same version-gated transform to `three/build/three.webgpu.js` in memory and never writes `node_modules`. Exact source anchors fail closed on unknown or partially patched builds. Current captures require precompiled manifest version `3` and shader receipt transform version `50`; recapture older artifacts instead of editing them.
|
|
46
51
|
|
|
47
|
-
|
|
48
|
-
- [#34069](https://github.com/mrdoob/three.js/pull/34069) gives named node buffers deterministic labels.
|
|
49
|
-
- [#34070](https://github.com/mrdoob/three.js/pull/34070) adds the public node-builder state provider used by hydration.
|
|
50
|
-
- The local `compileAsync()` patch collects pipeline promises across one compile pass, yields after 8 ms work slices, then awaits the pipelines together. It captures each WebGPU error-scope promise before concurrent pipelines settle so the scopes remain balanced.
|
|
51
|
-
|
|
52
|
-
Each change has exact source anchors and fails closed on drift or partial application. Current captures require precompiled manifest version `3` and shader receipt transform version `3`; recapture older artifacts instead of editing them.
|
|
53
|
-
|
|
54
|
-
Delete an upstream backport when the supported Three.js release contains it. Reevaluate the local batching patch against each release. See [Maintain Three.js WebGPU compatibility](../../docs/maintenance/three-webgpu-release-compatibility.md) for markers, removal conditions, and verification.
|
|
52
|
+
The [Three.js WebGPU compatibility reference](../../docs/maintenance/three-webgpu-release-compatibility.md) defines the released r185 patches, source markers, removal conditions, and verification gates.
|
|
55
53
|
|
|
56
54
|
### Manual bundler adapters
|
|
57
55
|
|
|
@@ -59,39 +57,36 @@ These are the manual equivalents of the diff that `shaders capture` offers.
|
|
|
59
57
|
|
|
60
58
|
esbuild:
|
|
61
59
|
|
|
62
|
-
```
|
|
60
|
+
```typescript
|
|
61
|
+
import { build } from "esbuild";
|
|
63
62
|
import { createEsbuildShaderPlugin } from "@three-blocks/devtools/transform";
|
|
64
63
|
|
|
65
64
|
await build({
|
|
66
|
-
// ...
|
|
67
65
|
plugins: [createEsbuildShaderPlugin({ root: process.cwd() })],
|
|
68
66
|
});
|
|
69
67
|
```
|
|
70
68
|
|
|
71
69
|
Rollup:
|
|
72
70
|
|
|
73
|
-
```
|
|
71
|
+
```typescript
|
|
74
72
|
import { createRollupShaderPlugin } from "@three-blocks/devtools/transform";
|
|
75
73
|
|
|
76
74
|
export default {
|
|
77
|
-
// ...
|
|
78
75
|
plugins: [createRollupShaderPlugin({ root: process.cwd() })],
|
|
79
76
|
};
|
|
80
77
|
```
|
|
81
78
|
|
|
82
79
|
webpack:
|
|
83
80
|
|
|
84
|
-
```
|
|
81
|
+
```typescript
|
|
85
82
|
import { withThreeBlocksWebpack } from "@three-blocks/devtools/transform";
|
|
86
83
|
|
|
87
|
-
export default withThreeBlocksWebpack({
|
|
88
|
-
// ...
|
|
89
|
-
});
|
|
84
|
+
export default withThreeBlocksWebpack({});
|
|
90
85
|
```
|
|
91
86
|
|
|
92
87
|
Next.js:
|
|
93
88
|
|
|
94
|
-
```
|
|
89
|
+
```typescript
|
|
95
90
|
import type { NextConfig } from "next";
|
|
96
91
|
import { withThreeBlocksNext } from "@three-blocks/devtools/transform";
|
|
97
92
|
|
|
@@ -102,153 +97,103 @@ const nextConfig: NextConfig = {
|
|
|
102
97
|
export default withThreeBlocksNext(nextConfig);
|
|
103
98
|
```
|
|
104
99
|
|
|
105
|
-
The adapters always install the production provider hook. They add capture
|
|
106
|
-
instrumentation only when `THREE_BLOCKS_SHADER_TOOL=1`; a tool-managed build or server
|
|
107
|
-
sets that automatically. For a manually started webpack or Next.js server, set the
|
|
108
|
-
variable yourself and run `shaders capture --url http://localhost:3000`.
|
|
100
|
+
The adapters always install the production provider hook. They add capture instrumentation only when `THREE_BLOCKS_SHADER_TOOL=1`; a tool-managed build or server sets that automatically. For a manually started webpack or Next.js server, set the variable yourself and run `npx three-blocks shaders capture --url http://localhost:3000`.
|
|
109
101
|
|
|
110
|
-
##
|
|
102
|
+
## Command reference
|
|
111
103
|
|
|
112
|
-
|
|
104
|
+
Use `npx three-blocks` in applications. This package also exposes `three-blocks-devtools` for package-local and repository maintenance.
|
|
113
105
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
106
|
+
| Command | Result |
|
|
107
|
+
| --------------------------------------------- | --------------------------------------------------------------------------- |
|
|
108
|
+
| `npx three-blocks status` | Report worker, asset, shader, and text state |
|
|
109
|
+
| `npx three-blocks shaders` | Verify shader freshness without a browser or graphics processing unit (GPU) |
|
|
110
|
+
| `npx three-blocks shaders capture --if-stale` | Capture changed scenes and write a local timing estimate |
|
|
111
|
+
| `npx three-blocks shaders test --parity-only` | Run one live and precompiled correctness pair per scene |
|
|
112
|
+
| `npx three-blocks shaders test` | Run parity, repeated timing, and the published-page soak |
|
|
113
|
+
| `npx three-blocks shaders watch` | Recapture when shader inputs change |
|
|
114
|
+
| `npx three-blocks text generate` | Generate multi-channel signed distance field (MSDF) atlases and receipts |
|
|
115
|
+
| `npx three-blocks text status` | Verify text assets and glyph coverage |
|
|
116
|
+
| `npx three-blocks environment bake` | Bake a prefiltered environment KTX2 |
|
|
117
|
+
| `npx three-blocks browser smoke` | Verify development readiness and hot module replacement (HMR) |
|
|
118
|
+
| `npx three-blocks browser preview` | Build and verify the production preview |
|
|
119
|
+
|
|
120
|
+
All commands support `--json` and `--reporter json`. `status` reads generated `three-blocks.json` metadata when present; adopted projects need only their shader or text configuration. Static status validates committed artifacts, compatibility versions, the installed `three-blocks/shaders` runtime closure, and discovered shader inputs. Browser evidence comes from the last `browser smoke` run and remains a dated verification, not live state.
|
|
120
121
|
|
|
121
122
|
### Precompile WebGPU shaders
|
|
122
123
|
|
|
123
124
|
```bash
|
|
124
|
-
three-blocks
|
|
125
|
-
three-blocks
|
|
126
|
-
three-blocks
|
|
127
|
-
three-blocks
|
|
128
|
-
three-blocks
|
|
129
|
-
# CI freshness/schema gate
|
|
130
|
-
three-blocks-devtools shaders watch --debounce 250
|
|
125
|
+
npx three-blocks shaders status --check
|
|
126
|
+
npx three-blocks shaders capture --if-stale
|
|
127
|
+
npx three-blocks shaders test --parity-only
|
|
128
|
+
npx three-blocks shaders test
|
|
129
|
+
npx three-blocks shaders watch --debounce 250
|
|
131
130
|
```
|
|
132
131
|
|
|
133
|
-
|
|
132
|
+
Add `three-blocks.shaders.json` when the project needs multiple routes, a semantic scene name, or an explicit readiness signal:
|
|
134
133
|
|
|
135
134
|
```json
|
|
136
135
|
{
|
|
137
136
|
"schemaVersion": 1,
|
|
138
137
|
"scenes": [
|
|
139
|
-
{ "key": "
|
|
140
|
-
{ "key": "text", "url": "
|
|
138
|
+
{ "key": "main", "url": "/" },
|
|
139
|
+
{ "key": "text", "url": "/text", "requiresText": true }
|
|
141
140
|
],
|
|
142
|
-
"
|
|
143
|
-
"timeoutMs": 240000,
|
|
144
|
-
"viewport": { "width": 1024, "height": 640 },
|
|
145
|
-
"parity": { "frames": 90, "channelTolerance": 8, "maxDiffRatio": 0.01 },
|
|
146
|
-
"readiness": { "global": "__THREE_BLOCKS_READY__" },
|
|
147
|
-
"publicDir": "public",
|
|
148
|
-
"allowLiveBuilds": true
|
|
141
|
+
"readiness": { "global": "__THREE_BLOCKS_READY__" }
|
|
149
142
|
}
|
|
150
143
|
```
|
|
151
144
|
|
|
152
|
-
Readiness is optional. Its global may be `true` or a promise; a selector is also
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
`
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
All configured scenes must pass before the tool replaces deterministic
|
|
163
|
-
`.three-blocks/shaders/<scene>.webgpu.ts` modules; `meta.json` is the last commit marker. It records
|
|
164
|
-
runtime/tool/schema versions, a `threeBlocksShaderClosure` hash, shader-relevant app-source hashes,
|
|
165
|
-
bytes, stage coverage, and skipped render/compute builds. App hashing begins at scene modules and
|
|
166
|
-
real shader registrations and follows only local runtime imports. Unrelated modules, type-only
|
|
167
|
-
imports, and DOM copy are not freshness inputs. Relevant source changes during capture abort the
|
|
168
|
-
commit. `watch` is explicitly opt-in and permits
|
|
169
|
-
only one running capture plus one coalesced rerun; failures preserve the prior committed receipt.
|
|
170
|
-
Explicit stable keys remain the clearest choice for complex, conditional capture matrices.
|
|
171
|
-
When an otherwise unregistered application or Three-internal build is first observed,
|
|
172
|
-
capture assigns it a deterministic scene-scoped key and records that automatic namespace
|
|
173
|
-
in the manifest. Set `allowLiveBuilds: false` when a project intentionally requires any
|
|
174
|
-
build that still cannot be addressed to fail capture.
|
|
175
|
-
|
|
176
|
-
`shaders test` first repeats the no-GPU matrix inspection. Its browser gate then proves that the
|
|
177
|
-
live baseline builds every registered render pipeline and compute kernel, while the fresh path
|
|
178
|
-
performs zero registered builds, covers render and compute injection independently, reports no
|
|
179
|
-
misses, reaches first-frame readiness, renders non-black output, and matches deterministic pixels.
|
|
180
|
-
Successful scenes are checkpointed immediately against their scene receipt and the shared
|
|
181
|
-
runtime/tool contract, so a later failure can resume at the missing scene. `--parity-only` runs
|
|
182
|
-
one live/precompiled pair without timing warmups, repeats, or the published-page soak. The default
|
|
183
|
-
mode retains those slower measurements and production-page checks. A parity observation that
|
|
184
|
-
returns no result is capped at 10 seconds.
|
|
185
|
-
On parity failure it writes live, precompiled, and diff PNGs under
|
|
186
|
-
`.three-blocks/shaders/parity/`.
|
|
145
|
+
Readiness is optional. Its global may be `true` or a promise; a selector is also supported. With no override, the engine waits for its settled-frame and first-frame contract and assumes nothing about the application DOM.
|
|
146
|
+
|
|
147
|
+
Capture observes real render and compute `NodeBuilder` states, then writes a deterministic pooled v3 manifest. The generated application owns no capture harness, and the tooling never writes to `node_modules`. Missing keys, stale receipts, unsupported Three.js versions, and hydration mismatches fail closed to live shader building.
|
|
148
|
+
|
|
149
|
+
Artifact writes are transactional. `meta.json` records runtime, tool, schema, source-input, byte, and stage-coverage evidence. Relevant source changes during capture abort the write, and failures preserve the prior committed receipt. Explicit stable keys remain the clearest choice for conditional capture matrices; otherwise, capture assigns deterministic scene-scoped keys. Set `allowLiveBuilds: false` when every build must belong to the declared matrix.
|
|
150
|
+
|
|
151
|
+
`shaders test` first repeats the GPU-free matrix inspection. Its browser gate proves that the live baseline builds every registered render pipeline and compute kernel. The fresh path must perform zero registered builds, report no misses, reach first-frame readiness, render non-black output, and match deterministic pixels.
|
|
152
|
+
|
|
153
|
+
Successful scenes are checkpointed against their scene receipt and the shared runtime and tool contract. A later run can resume at the missing scene. `--parity-only` runs one live and precompiled pair without timing warmups, repeats, or the published-page soak. The default mode retains those measurements and production-page checks. A parity observation is capped at 10 seconds. Failures write live, precompiled, and diff PNGs under `.three-blocks/shaders/parity/`.
|
|
187
154
|
|
|
188
155
|
### Verify a browser integration
|
|
189
156
|
|
|
190
157
|
```bash
|
|
191
|
-
three-blocks
|
|
192
|
-
three-blocks
|
|
158
|
+
npx three-blocks browser smoke --route / --json
|
|
159
|
+
npx three-blocks browser smoke --hmr src/offscreen/meshes/Scene.ts
|
|
160
|
+
npx three-blocks browser preview --route /
|
|
193
161
|
```
|
|
194
162
|
|
|
195
|
-
The smoke gate loads the project's
|
|
196
|
-
the visible OffscreenCanvas worker plus `workerReady`, `assetsReady`, and `compileEnd`; it also
|
|
197
|
-
requires `textReady` when the Vite text configuration is enabled. Every configured Draco and
|
|
198
|
-
KTX2 route is fetched, the lazy Meshopt decoder is initialized, page and console errors fail the
|
|
199
|
-
run, and both the WebGPU screenshot and readable 2D panels are checked for an all-black frame.
|
|
163
|
+
The smoke gate loads the project's Vite config on an ephemeral loopback port. It requires the visible OffscreenCanvas worker plus `workerReady`, `assetsReady`, and `compileEnd`. It also requires `textReady` when the Vite text configuration is enabled. Every configured Draco and KTX2 route is fetched, the lazy Meshopt decoder is initialized, and page or console errors fail the run. The gate checks the WebGPU screenshot and readable 2D panels for an all-black frame.
|
|
200
164
|
|
|
201
165
|
The command reads the starter's built-in readiness check. Application tutorials describe the visible **Starting**, **Ready**, **Precompiled**, and **Live** states instead of this maintainer contract. Contributors can inspect the exact protocol in the [maintainer browser-verification reference](../../docs/maintenance/browser-verification.md).
|
|
202
166
|
|
|
203
|
-
`--hmr
|
|
204
|
-
loaded scene module. It runs the real HMR graph without writing or touching source and verifies
|
|
205
|
-
that the browser acknowledges the update while lifecycle readiness remains stable.
|
|
167
|
+
`--hmr project_relative_module` emits a synthetic watcher change through Vite for an already loaded scene module. It runs the HMR graph without changing source and verifies that the browser acknowledges the update while lifecycle readiness remains stable.
|
|
206
168
|
|
|
207
|
-
Only the two
|
|
208
|
-
Three Inspector's invalid `extensions.json` response and Chromium's experimental WebGPU notice.
|
|
169
|
+
Only the two ambient diagnostics exported in `DOCUMENTED_BROWSER_NOISE` are filtered: Three Inspector's invalid `extensions.json` response and Chromium's experimental WebGPU notice.
|
|
209
170
|
|
|
210
171
|
### Bake environment lighting
|
|
211
172
|
|
|
212
173
|
```bash
|
|
213
|
-
three-blocks
|
|
214
|
-
three-blocks
|
|
174
|
+
npx three-blocks environment bake --size 256
|
|
175
|
+
npx three-blocks environment bake \
|
|
176
|
+
--output src/assets/environment/studio.pmrem.ktx2 --json
|
|
215
177
|
```
|
|
216
178
|
|
|
217
|
-
The browser entry renders Three.js `RoomEnvironment` through WebGPU and exports the PMREM CubeUV
|
|
218
|
-
atlas. Node validates RGBA16F topology, zstd-compresses at a deterministic level, decodes every
|
|
219
|
-
level byte-for-byte, records the final SHA-256 checksum, and transactionally replaces the KTX2
|
|
220
|
-
and JSON metadata pair. Size, time, upload, path, and file bounds are enforced. `--no-zstd` is an
|
|
221
|
-
explicit compatibility opt-out.
|
|
179
|
+
The browser entry renders Three.js `RoomEnvironment` through WebGPU and exports the PMREM CubeUV atlas. Node validates RGBA16F topology, compresses it with zstd at a deterministic level, decodes every level byte-for-byte, records the SHA-256 checksum, and transactionally replaces the KTX2 and JSON metadata pair. Size, time, upload, path, and file bounds are enforced. `--no-zstd` is an explicit compatibility opt-out.
|
|
222
180
|
|
|
223
|
-
Both GPU commands accept `--root
|
|
224
|
-
not carry generated-project metadata. Normal generated projects are discovered automatically.
|
|
181
|
+
Both GPU commands accept `--root project_path` for integration workspaces that intentionally omit generated-project metadata. Generated projects are discovered automatically.
|
|
225
182
|
|
|
226
183
|
### Ship it
|
|
227
184
|
|
|
228
|
-
Commit `.three-blocks/shaders/` and the generated public manifests, then add one
|
|
229
|
-
GPU-less CI command:
|
|
185
|
+
Commit `.three-blocks/shaders/` and the generated public manifests, then add one GPU-free CI command:
|
|
230
186
|
|
|
231
|
-
```
|
|
187
|
+
```bash
|
|
232
188
|
npx three-blocks shaders test --skip-browser --mode strict
|
|
233
189
|
```
|
|
234
190
|
|
|
235
|
-
Use `--reporter json` for CI annotations. Run the full `shaders test` in an optional
|
|
236
|
-
WebGPU lane. Production selects the hydration-only `three-blocks/devtools` condition:
|
|
237
|
-
overlay and stats implementation bytes are absent, while the bounded
|
|
238
|
-
`three-blocks/shaders` runtime remains. Opt into its local production console receipt
|
|
239
|
-
with `threeBlocks({ stats: { production: true } })`; no telemetry leaves the app.
|
|
191
|
+
Use `--reporter json` for CI annotations. Run the full `shaders test` in an optional WebGPU lane. Production selects the hydration-only `three-blocks/devtools` condition. Overlay and statistics implementation bytes are absent, while the bounded `three-blocks/shaders` runtime remains. Opt into its local production console receipt with `threeBlocks({ stats: { production: true } })`; no telemetry leaves the app.
|
|
240
192
|
|
|
241
|
-
Text artifacts remain `missing` or `invalid` until configured glyph coverage, checksums,
|
|
242
|
-
orientation, and KTX2 decode round-trip validation succeed. No command performs account or
|
|
243
|
-
entitlement checks.
|
|
193
|
+
Text artifacts remain `missing` or `invalid` until configured glyph coverage, checksums, orientation, and KTX2 decode round-trip validation succeed. No command performs account or entitlement checks.
|
|
244
194
|
|
|
245
|
-
## License
|
|
195
|
+
## License and Pro terms
|
|
246
196
|
|
|
247
|
-
|
|
248
|
-
by the Pro plan's lifetime license — each project you start while your plan is
|
|
249
|
-
active is licensed forever, for the versions released while it was active. No
|
|
250
|
-
runtime gating.
|
|
197
|
+
This package uses [PolyForm Noncommercial 1.0.0](./LICENSE). Personal and noncommercial projects can install and run every Devtools command without an account, Pro seat, or runtime entitlement check. Keep the Required Notice when redistributing the package.
|
|
251
198
|
|
|
252
|
-
|
|
253
|
-
the Required Notice when redistributing it; full commercial terms are at
|
|
254
|
-
[threejs-blocks.com/license](https://threejs-blocks.com/license).
|
|
199
|
+
Pro is a per-seat subscription. During an active period, each person who starts or develops a new commercial Project, adopts a later software version, or downloads or updates a Pro Tool needs a named seat. Each Project started during that period receives a lifetime commercial license for versions released during the same period. After cancellation, the Project may be maintained, updated, and distributed with those covered versions, and Pro Tool versions obtained during the active period may keep running locally and offline for that Project. Starting another commercial Project, adopting a later release, or downloading or updating a Pro Tool requires an active subscription. Devtools remains account-free because commercial permission is a license boundary, not a feature gate. See the [Commercial License Agreement](https://threejs-blocks.com/license) and [pricing](https://threejs-blocks.com/pricing).
|