@drawcall/lod 0.2.0 → 0.3.0
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/README.md +8 -6
- package/dist/bake.d.ts +22 -0
- package/dist/bake.js +88 -0
- package/dist/bake.js.map +1 -0
- package/dist/baked/codec.d.ts +3 -6
- package/dist/baked/codec.js +48 -154
- package/dist/baked/codec.js.map +1 -1
- package/dist/baked/coverage.d.ts +6 -3
- package/dist/baked/coverage.js +6 -3
- package/dist/baked/coverage.js.map +1 -1
- package/dist/baked/fields.d.ts +9 -0
- package/dist/baked/fields.js +22 -0
- package/dist/baked/fields.js.map +1 -0
- package/dist/baked/index.d.ts +12 -6
- package/dist/baked/index.js +22 -20
- package/dist/baked/index.js.map +1 -1
- package/dist/baked/interior/faces.d.ts +4 -3
- package/dist/baked/interior/faces.js +13 -10
- package/dist/baked/interior/faces.js.map +1 -1
- package/dist/baked/interior/material.d.ts +7 -10
- package/dist/baked/interior/material.js +29 -36
- package/dist/baked/interior/material.js.map +1 -1
- package/dist/baked/interior/rooms.js +1 -1
- package/dist/baked/interior/rooms.js.map +1 -1
- package/dist/baked/low.js +5 -4
- package/dist/baked/low.js.map +1 -1
- package/dist/baked/raster.js +6 -6
- package/dist/baked/raster.js.map +1 -1
- package/dist/baked/textures.d.ts +17 -0
- package/dist/baked/textures.js +95 -0
- package/dist/baked/textures.js.map +1 -0
- package/dist/baked/transfer.js +19 -18
- package/dist/baked/transfer.js.map +1 -1
- package/dist/baked/unwrap.js +4 -3
- package/dist/baked/unwrap.js.map +1 -1
- package/dist/baked/xatlas.js.map +1 -1
- package/dist/codec/container.d.ts +8 -0
- package/dist/codec/container.js +63 -0
- package/dist/codec/container.js.map +1 -0
- package/dist/codec/mesh.d.ts +8 -0
- package/dist/{mesh/codec.js → codec/mesh.js} +80 -52
- package/dist/codec/mesh.js.map +1 -0
- package/dist/dispose.d.ts +7 -4
- package/dist/dispose.js +20 -22
- package/dist/dispose.js.map +1 -1
- package/dist/gpu.d.ts +39 -0
- package/dist/gpu.js +41 -0
- package/dist/gpu.js.map +1 -0
- package/dist/impostor/bake/atlas.d.ts +4 -4
- package/dist/impostor/bake/atlas.js +12 -12
- package/dist/impostor/bake/atlas.js.map +1 -1
- package/dist/impostor/bake/fit.d.ts +8 -0
- package/dist/impostor/bake/fit.js +28 -0
- package/dist/impostor/bake/fit.js.map +1 -0
- package/dist/impostor/bake/index.d.ts +22 -14
- package/dist/impostor/bake/index.js +41 -134
- package/dist/impostor/bake/index.js.map +1 -1
- package/dist/impostor/bake/materials.d.ts +3 -3
- package/dist/impostor/bake/materials.js +51 -13
- package/dist/impostor/bake/materials.js.map +1 -1
- package/dist/impostor/bake/sheet.d.ts +8 -0
- package/dist/impostor/bake/sheet.js +90 -0
- package/dist/impostor/bake/sheet.js.map +1 -0
- package/dist/impostor/bake/source.d.ts +2 -2
- package/dist/impostor/bake/source.js +8 -19
- package/dist/impostor/bake/source.js.map +1 -1
- package/dist/impostor/codec.d.ts +4 -5
- package/dist/impostor/codec.js +36 -109
- package/dist/impostor/codec.js.map +1 -1
- package/dist/impostor/impostor.d.ts +31 -7
- package/dist/impostor/impostor.js +21 -6
- package/dist/impostor/impostor.js.map +1 -1
- package/dist/impostor/ktx2/encode.d.ts +26 -0
- package/dist/impostor/ktx2/encode.js +117 -0
- package/dist/impostor/ktx2/encode.js.map +1 -0
- package/dist/impostor/ktx2/transcode.d.ts +3 -0
- package/dist/impostor/ktx2/transcode.js +99 -0
- package/dist/impostor/ktx2/transcode.js.map +1 -0
- package/dist/impostor/ktx2/uastc.d.ts +7 -0
- package/dist/impostor/ktx2/uastc.js +64 -0
- package/dist/impostor/ktx2/uastc.js.map +1 -0
- package/dist/impostor/ktx2/wasm/encoder.d.ts +4 -0
- package/dist/impostor/ktx2/wasm/encoder.js +10 -0
- package/dist/impostor/ktx2/wasm/encoder.js.map +1 -0
- package/dist/impostor/ktx2/wasm/transcoder.d.ts +3 -0
- package/dist/impostor/ktx2/wasm/transcoder.js +9 -0
- package/dist/impostor/ktx2/wasm/transcoder.js.map +1 -0
- package/dist/impostor/ktx2/worker.d.ts +1 -0
- package/dist/impostor/ktx2/worker.js +12 -0
- package/dist/impostor/ktx2/worker.js.map +1 -0
- package/dist/impostor/mesh/card.d.ts +3 -3
- package/dist/impostor/mesh/card.js +7 -7
- package/dist/impostor/mesh/card.js.map +1 -1
- package/dist/impostor/mesh/index.d.ts +5 -4
- package/dist/impostor/mesh/index.js +8 -9
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/impostor/mesh/material.d.ts +18 -9
- package/dist/impostor/mesh/material.js +40 -27
- package/dist/impostor/mesh/material.js.map +1 -1
- package/dist/impostor/mesh/surface.d.ts +1 -1
- package/dist/impostor/mesh/surface.js +13 -9
- package/dist/impostor/mesh/surface.js.map +1 -1
- package/dist/impostor/mesh/textures.d.ts +3 -3
- package/dist/impostor/mesh/textures.js +24 -34
- package/dist/impostor/mesh/textures.js.map +1 -1
- package/dist/index.d.ts +15 -10
- package/dist/index.js +13 -8
- package/dist/index.js.map +1 -1
- package/dist/instanced/camera.d.ts +46 -0
- package/dist/instanced/camera.js +70 -0
- package/dist/instanced/camera.js.map +1 -0
- package/dist/instanced/chunk.d.ts +97 -0
- package/dist/instanced/chunk.js +156 -0
- package/dist/instanced/chunk.js.map +1 -0
- package/dist/instanced/chunks.d.ts +60 -0
- package/dist/instanced/chunks.js +208 -0
- package/dist/instanced/chunks.js.map +1 -0
- package/dist/instanced/cull.d.ts +28 -0
- package/dist/instanced/cull.js +22 -0
- package/dist/instanced/cull.js.map +1 -0
- package/dist/instanced/index.d.ts +96 -66
- package/dist/instanced/index.js +229 -288
- package/dist/instanced/index.js.map +1 -1
- package/dist/instanced/key.d.ts +19 -0
- package/dist/instanced/key.js +45 -0
- package/dist/instanced/key.js.map +1 -0
- package/dist/instanced/levels.d.ts +60 -0
- package/dist/instanced/levels.js +130 -0
- package/dist/instanced/levels.js.map +1 -0
- package/dist/instanced/lists.d.ts +70 -0
- package/dist/instanced/lists.js +133 -0
- package/dist/instanced/lists.js.map +1 -0
- package/dist/instanced/measure.d.ts +28 -0
- package/dist/instanced/measure.js +203 -0
- package/dist/instanced/measure.js.map +1 -0
- package/dist/instanced/meshes.d.ts +42 -51
- package/dist/instanced/meshes.js +158 -180
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/mirror.d.ts +20 -0
- package/dist/instanced/mirror.js +37 -0
- package/dist/instanced/mirror.js.map +1 -0
- package/dist/instanced/pages/buffers.d.ts +37 -0
- package/dist/instanced/pages/buffers.js +15 -0
- package/dist/instanced/pages/buffers.js.map +1 -0
- package/dist/instanced/pages/chunk.d.ts +51 -0
- package/dist/instanced/pages/chunk.js +81 -0
- package/dist/instanced/pages/chunk.js.map +1 -0
- package/dist/instanced/pages/index.d.ts +74 -0
- package/dist/instanced/pages/index.js +269 -0
- package/dist/instanced/pages/index.js.map +1 -0
- package/dist/instanced/pages/passes.d.ts +21 -0
- package/dist/instanced/pages/passes.js +52 -0
- package/dist/instanced/pages/passes.js.map +1 -0
- package/dist/instanced/pages/slots.d.ts +11 -0
- package/dist/instanced/pages/slots.js +90 -0
- package/dist/instanced/pages/slots.js.map +1 -0
- package/dist/instanced/pages/workgroup.d.ts +14 -0
- package/dist/instanced/pages/workgroup.js +38 -0
- package/dist/instanced/pages/workgroup.js.map +1 -0
- package/dist/instanced/raycast.d.ts +13 -11
- package/dist/instanced/raycast.js +33 -40
- package/dist/instanced/raycast.js.map +1 -1
- package/dist/instanced/rows.d.ts +108 -0
- package/dist/instanced/rows.js +209 -0
- package/dist/instanced/rows.js.map +1 -0
- package/dist/instanced/shape.d.ts +25 -0
- package/dist/instanced/shape.js +51 -0
- package/dist/instanced/shape.js.map +1 -0
- package/dist/instanced/sort.d.ts +63 -0
- package/dist/instanced/sort.js +162 -0
- package/dist/instanced/sort.js.map +1 -0
- package/dist/instanced/update.d.ts +30 -0
- package/dist/instanced/update.js +207 -0
- package/dist/instanced/update.js.map +1 -0
- package/dist/levels/bounds.d.ts +21 -0
- package/dist/levels/bounds.js +42 -0
- package/dist/levels/bounds.js.map +1 -0
- package/dist/levels/cameras.d.ts +48 -0
- package/dist/levels/cameras.js +122 -0
- package/dist/levels/cameras.js.map +1 -0
- package/dist/levels/compile/contexts.d.ts +30 -0
- package/dist/levels/compile/contexts.js +18 -0
- package/dist/levels/compile/contexts.js.map +1 -0
- package/dist/levels/compile/index.d.ts +39 -0
- package/dist/levels/compile/index.js +185 -0
- package/dist/levels/compile/index.js.map +1 -0
- package/dist/levels/compile/pipelines.d.ts +26 -0
- package/dist/levels/compile/pipelines.js +177 -0
- package/dist/levels/compile/pipelines.js.map +1 -0
- package/dist/levels/compiles.d.ts +29 -0
- package/dist/levels/compiles.js +50 -0
- package/dist/levels/compiles.js.map +1 -0
- package/dist/levels/draw.d.ts +102 -0
- package/dist/levels/draw.js +401 -0
- package/dist/levels/draw.js.map +1 -0
- package/dist/levels/fade.d.ts +69 -0
- package/dist/levels/fade.js +150 -0
- package/dist/levels/fade.js.map +1 -0
- package/dist/levels/index.d.ts +99 -0
- package/dist/levels/index.js +155 -0
- package/dist/levels/index.js.map +1 -0
- package/dist/levels/item.d.ts +38 -0
- package/dist/levels/item.js +97 -0
- package/dist/levels/item.js.map +1 -0
- package/dist/levels/load.d.ts +31 -0
- package/dist/levels/load.js +142 -0
- package/dist/levels/load.js.map +1 -0
- package/dist/levels/manager.d.ts +159 -0
- package/dist/levels/manager.js +339 -0
- package/dist/levels/manager.js.map +1 -0
- package/dist/{material.js → levels/material.js} +4 -3
- package/dist/levels/material.js.map +1 -0
- package/dist/levels/renderer.d.ts +29 -0
- package/dist/levels/renderer.js +41 -0
- package/dist/levels/renderer.js.map +1 -0
- package/dist/levels/requests.d.ts +49 -0
- package/dist/levels/requests.js +95 -0
- package/dist/levels/requests.js.map +1 -0
- package/dist/levels/screen.d.ts +14 -0
- package/dist/levels/screen.js +21 -0
- package/dist/levels/screen.js.map +1 -0
- package/dist/levels/wait.d.ts +27 -0
- package/dist/levels/wait.js +61 -0
- package/dist/levels/wait.js.map +1 -0
- package/dist/loader/build.d.ts +10 -0
- package/dist/loader/build.js +28 -0
- package/dist/loader/build.js.map +1 -0
- package/dist/loader/cache.d.ts +6 -9
- package/dist/loader/cache.js +17 -24
- package/dist/loader/cache.js.map +1 -1
- package/dist/loader/context.d.ts +46 -0
- package/dist/loader/context.js +91 -0
- package/dist/loader/context.js.map +1 -0
- package/dist/loader/{provenance.d.ts → dependencies.d.ts} +5 -3
- package/dist/loader/{provenance.js → dependencies.js} +12 -4
- package/dist/loader/dependencies.js.map +1 -0
- package/dist/loader/index.d.ts +62 -0
- package/dist/loader/index.js +284 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/level.d.ts +41 -0
- package/dist/loader/level.js +140 -0
- package/dist/loader/level.js.map +1 -0
- package/dist/loader/request.d.ts +87 -0
- package/dist/loader/request.js +59 -0
- package/dist/loader/request.js.map +1 -0
- package/dist/loader/url.d.ts +5 -2
- package/dist/loader/url.js +10 -6
- package/dist/loader/url.js.map +1 -1
- package/dist/lod.d.ts +81 -40
- package/dist/lod.js +196 -149
- package/dist/lod.js.map +1 -1
- package/dist/meshopt.d.ts +6 -0
- package/dist/meshopt.js +19 -0
- package/dist/meshopt.js.map +1 -0
- package/dist/simplify/cards.d.ts +14 -0
- package/dist/simplify/cards.js +128 -0
- package/dist/simplify/cards.js.map +1 -0
- package/dist/{simplify.d.ts → simplify/index.d.ts} +7 -4
- package/dist/{simplify.js → simplify/index.js} +41 -23
- package/dist/simplify/index.js.map +1 -0
- package/dist/{bounds.d.ts → source/detail.d.ts} +4 -23
- package/dist/{bounds.js → source/detail.js} +19 -51
- package/dist/source/detail.js.map +1 -0
- package/dist/source/deviation.js +6 -6
- package/dist/source/deviation.js.map +1 -1
- package/dist/source/{shading.d.ts → evaluator.d.ts} +10 -10
- package/dist/source/{shading.js → evaluator.js} +5 -5
- package/dist/source/evaluator.js.map +1 -0
- package/dist/source/{trace.d.ts → raycaster.d.ts} +6 -6
- package/dist/source/{trace.js → raycaster.js} +8 -8
- package/dist/source/raycaster.js.map +1 -0
- package/dist/source/{texels.d.ts → sampler.d.ts} +1 -1
- package/dist/source/{texels.js → sampler.js} +3 -3
- package/dist/source/sampler.js.map +1 -0
- package/dist/source/source.d.ts +1 -1
- package/dist/source/source.js +1 -1
- package/dist/source/source.js.map +1 -1
- package/dist/source/surface.js +1 -1
- package/dist/source/surface.js.map +1 -1
- package/dist/task.d.ts +6 -0
- package/dist/{pause.js → task.js} +5 -5
- package/dist/task.js.map +1 -0
- package/dist/three.d.ts +13 -24
- package/dist/three.js +26 -53
- package/dist/three.js.map +1 -1
- package/dist/tsl.d.ts +8 -12
- package/dist/tsl.js +11 -39
- package/dist/tsl.js.map +1 -1
- package/dist/typegpu.d.ts +37 -0
- package/dist/typegpu.js +37 -0
- package/dist/typegpu.js.map +1 -0
- package/dist/wind/bounds.js +2 -2
- package/dist/wind/bounds.js.map +1 -1
- package/dist/wind/hooks.d.ts +7 -4
- package/dist/wind/hooks.js +5 -2
- package/dist/wind/hooks.js.map +1 -1
- package/dist/wind/index.d.ts +2 -2
- package/dist/wind/index.js +15 -15
- package/dist/wind/index.js.map +1 -1
- package/dist/wind/sway.d.ts +2 -0
- package/dist/wind/sway.js +4 -1
- package/dist/wind/sway.js.map +1 -1
- package/package.json +18 -8
- package/skills/lod/SKILL.md +108 -31
- package/dist/bounds.js.map +0 -1
- package/dist/compile.d.ts +0 -4
- package/dist/compile.js +0 -100
- package/dist/compile.js.map +0 -1
- package/dist/deferred.d.ts +0 -12
- package/dist/deferred.js +0 -27
- package/dist/deferred.js.map +0 -1
- package/dist/fade.d.ts +0 -36
- package/dist/fade.js +0 -112
- package/dist/fade.js.map +0 -1
- package/dist/instanced/args.d.ts +0 -20
- package/dist/instanced/args.js +0 -77
- package/dist/instanced/args.js.map +0 -1
- package/dist/instanced/blocks.d.ts +0 -66
- package/dist/instanced/blocks.js +0 -294
- package/dist/instanced/blocks.js.map +0 -1
- package/dist/instanced/dirty.d.ts +0 -15
- package/dist/instanced/dirty.js +0 -96
- package/dist/instanced/dirty.js.map +0 -1
- package/dist/instanced/parts.d.ts +0 -14
- package/dist/instanced/parts.js +0 -79
- package/dist/instanced/parts.js.map +0 -1
- package/dist/instanced/select.d.ts +0 -92
- package/dist/instanced/select.js +0 -315
- package/dist/instanced/select.js.map +0 -1
- package/dist/instanced/store.d.ts +0 -31
- package/dist/instanced/store.js +0 -96
- package/dist/instanced/store.js.map +0 -1
- package/dist/levels.d.ts +0 -95
- package/dist/levels.js +0 -171
- package/dist/levels.js.map +0 -1
- package/dist/loader/bundle.d.ts +0 -25
- package/dist/loader/bundle.js +0 -241
- package/dist/loader/bundle.js.map +0 -1
- package/dist/loader/provenance.js.map +0 -1
- package/dist/loader.d.ts +0 -55
- package/dist/loader.js +0 -239
- package/dist/loader.js.map +0 -1
- package/dist/material.js.map +0 -1
- package/dist/mesh/codec.d.ts +0 -4
- package/dist/mesh/codec.js.map +0 -1
- package/dist/pause.d.ts +0 -6
- package/dist/pause.js.map +0 -1
- package/dist/queue.d.ts +0 -2
- package/dist/queue.js +0 -33
- package/dist/queue.js.map +0 -1
- package/dist/renderer.d.ts +0 -21
- package/dist/renderer.js +0 -83
- package/dist/renderer.js.map +0 -1
- package/dist/residency.d.ts +0 -44
- package/dist/residency.js +0 -205
- package/dist/residency.js.map +0 -1
- package/dist/simplify.js.map +0 -1
- package/dist/source/shading.js.map +0 -1
- package/dist/source/texels.js.map +0 -1
- package/dist/source/trace.js.map +0 -1
- package/dist/view.d.ts +0 -45
- package/dist/view.js +0 -131
- package/dist/view.js.map +0 -1
- /package/dist/{material.d.ts → levels/material.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -5,21 +5,23 @@ Level of detail for Three.js. Build simplified meshes, baked low-poly meshes, an
|
|
|
5
5
|
Requires Three.js `WebGPURenderer` (`three/webgpu`).
|
|
6
6
|
|
|
7
7
|
```sh
|
|
8
|
-
npm install @drawcall/lod three
|
|
8
|
+
npm install @drawcall/lod three typegpu
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
Load a model into an existing Three.js scene.
|
|
11
|
+
Load a model into an existing Three.js scene. Each level loads once the camera needs it, finer ones as the camera approaches. Make one `LodGpu` per renderer once it is initialised and give it to every `Lod` and `InstancedLod` drawing with that renderer; dispose it after them:
|
|
12
12
|
|
|
13
13
|
```ts
|
|
14
|
-
import { Lod, LodLoader } from "@drawcall/lod";
|
|
14
|
+
import { Lod, LodGpu, LodLoader } from "@drawcall/lod";
|
|
15
15
|
|
|
16
|
+
await renderer.init();
|
|
17
|
+
const gpu = new LodGpu(renderer);
|
|
16
18
|
const loader = new LodLoader();
|
|
17
19
|
const levels = await loader.loadAsync("/models/tree.glb");
|
|
18
|
-
scene.add(new Lod(levels));
|
|
20
|
+
scene.add(new Lod(levels, gpu));
|
|
19
21
|
```
|
|
20
22
|
|
|
21
|
-
Add the [vitecache](https://github.com/drawcall-ai/vitecache) Vite plugin to the host.
|
|
23
|
+
Add the [vitecache](https://github.com/drawcall-ai/vitecache) Vite plugin to the host. Each level writes its cache file when it first loads in the dev server; `vite build` does not generate them, so deploy the cache directory with the app. For procedural assets, register a GLTSLoader on the loading manager and pass a `.glts` URL; the LOD skill below covers caching their expensive generation.
|
|
22
24
|
|
|
23
25
|
Choose derived levels to suit your assets. The [LOD skill](https://github.com/drawcall-ai/lod/blob/main/packages/lod/skills/lod/SKILL.md) covers asset choices, caching, lazy loading, wind, and scene integration. It also ships with the package at `skills/lod/SKILL.md`.
|
|
24
26
|
|
|
25
|
-
The [city example](https://github.com/drawcall-ai/lod/tree/main/examples/city) demonstrates a large scene with buildings, vegetation, and small props.
|
|
27
|
+
The [city example](https://github.com/drawcall-ai/lod/tree/main/examples/city) demonstrates a large scene with buildings, vegetation, and small props, its ground cover scattered around the camera by a compute pass of its own.
|
package/dist/bake.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { WebGPURenderer, type RenderTarget, type Renderer } from "three/webgpu";
|
|
2
|
+
/**
|
|
3
|
+
* A renderer for bakes, initialised: it clears to transparent black, only when a bake clears, and its canvas is never
|
|
4
|
+
* shown or sized. Pass it to `bakeImpostor`, or to `bakeMesh` with an interior, and dispose it when done. LodLoader
|
|
5
|
+
* makes one for itself; so does a .glts script that bakes.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createBakeRenderer(): Promise<WebGPURenderer>;
|
|
8
|
+
/**
|
|
9
|
+
* Throw unless `renderer` draws bakes as `createBakeRenderer` sets one up: initialised, clearing to transparent black
|
|
10
|
+
* and only when told to, with no MRT or XR camera of its own. A bake draws through every such setting; `who` names it.
|
|
11
|
+
*/
|
|
12
|
+
export declare function checkBakeRenderer(renderer: Renderer, who: string): void;
|
|
13
|
+
/** Run `bake` on `renderer` once every bake queued on it before has settled. */
|
|
14
|
+
export declare function inTurn<T>(renderer: Renderer, bake: () => Promise<T>): Promise<T>;
|
|
15
|
+
/**
|
|
16
|
+
* Texture `index` of `target` as floats, four channels a texel, rows packed and bottom
|
|
17
|
+
* row first: the layout the bakes write their images in. For float and half-float
|
|
18
|
+
* targets.
|
|
19
|
+
*/
|
|
20
|
+
export declare function readFloats(renderer: Renderer, target: RenderTarget, index: number): Promise<Float32Array>;
|
|
21
|
+
/** Texture `index` of an 8-bit `target`, laid out as `readFloats` lays it out. */
|
|
22
|
+
export declare function readBytes(renderer: Renderer, target: RenderTarget, index: number): Promise<Uint8Array>;
|
package/dist/bake.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Color, DataUtils, WebGPURenderer } from "three/webgpu";
|
|
2
|
+
// What the GPU bakes (impostor frames, interior rooms) share: the renderer they draw with, one bake at a time on it,
|
|
3
|
+
// and reading back what they drew.
|
|
4
|
+
/**
|
|
5
|
+
* A renderer for bakes, initialised: it clears to transparent black, only when a bake clears, and its canvas is never
|
|
6
|
+
* shown or sized. Pass it to `bakeImpostor`, or to `bakeMesh` with an interior, and dispose it when done. LodLoader
|
|
7
|
+
* makes one for itself; so does a .glts script that bakes.
|
|
8
|
+
*/
|
|
9
|
+
export async function createBakeRenderer() {
|
|
10
|
+
const renderer = new WebGPURenderer({ antialias: false });
|
|
11
|
+
renderer.setClearColor(0x000000, 0);
|
|
12
|
+
renderer.autoClear = false;
|
|
13
|
+
await renderer.init();
|
|
14
|
+
return renderer;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Throw unless `renderer` draws bakes as `createBakeRenderer` sets one up: initialised, clearing to transparent black
|
|
18
|
+
* and only when told to, with no MRT or XR camera of its own. A bake draws through every such setting; `who` names it.
|
|
19
|
+
*/
|
|
20
|
+
export function checkBakeRenderer(renderer, who) {
|
|
21
|
+
const fail = (why) => {
|
|
22
|
+
throw new Error(`${who}: the renderer ${why}; make one for bakes with createBakeRenderer`);
|
|
23
|
+
};
|
|
24
|
+
if (!renderer.initialized)
|
|
25
|
+
fail("is not initialised (await renderer.init())");
|
|
26
|
+
if (!renderer.getClearColor(new Color()).equals(BLACK) || renderer.getClearAlpha() !== 0)
|
|
27
|
+
fail("must clear to transparent black");
|
|
28
|
+
if (renderer.autoClear)
|
|
29
|
+
fail("must not clear on its own (autoClear)");
|
|
30
|
+
if (renderer.getMRT() !== null)
|
|
31
|
+
fail("has an MRT set");
|
|
32
|
+
if (renderer.xr.isPresenting)
|
|
33
|
+
fail("is presenting XR");
|
|
34
|
+
}
|
|
35
|
+
const BLACK = new Color(0x000000);
|
|
36
|
+
/**
|
|
37
|
+
* The bake under way on each renderer and those queued after it. Bakes run one at a time on a renderer: each holds one
|
|
38
|
+
* target's renders in flight, and a scene's bakes all at once queued GPU work seconds deep (macOS ends a device whose
|
|
39
|
+
* work holds the display up). A side table, as the renderers are the caller's.
|
|
40
|
+
*/
|
|
41
|
+
const queues = new WeakMap();
|
|
42
|
+
/** Run `bake` on `renderer` once every bake queued on it before has settled. */
|
|
43
|
+
export function inTurn(renderer, bake) {
|
|
44
|
+
const next = (queues.get(renderer) ?? Promise.resolve()).then(bake);
|
|
45
|
+
// The queue goes on past a failed bake; its caller has the failure.
|
|
46
|
+
queues.set(renderer, next.catch(() => { }));
|
|
47
|
+
return next;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Texture `index` of `target` as floats, four channels a texel, rows packed and bottom
|
|
51
|
+
* row first: the layout the bakes write their images in. For float and half-float
|
|
52
|
+
* targets.
|
|
53
|
+
*/
|
|
54
|
+
export async function readFloats(renderer, target, index) {
|
|
55
|
+
const read = await renderer.readRenderTargetPixelsAsync(target, 0, 0, target.width, target.height, index);
|
|
56
|
+
if (read instanceof Float32Array)
|
|
57
|
+
return packed(read, target, (n) => new Float32Array(n));
|
|
58
|
+
// Half floats come back as their bits.
|
|
59
|
+
if (read instanceof Uint16Array)
|
|
60
|
+
return fromHalves(packed(read, target, (n) => new Uint16Array(n)));
|
|
61
|
+
throw new Error(`@drawcall/lod: read ${read.constructor.name} from a float render target`);
|
|
62
|
+
}
|
|
63
|
+
/** Texture `index` of an 8-bit `target`, laid out as `readFloats` lays it out. */
|
|
64
|
+
export async function readBytes(renderer, target, index) {
|
|
65
|
+
const read = await renderer.readRenderTargetPixelsAsync(target, 0, 0, target.width, target.height, index);
|
|
66
|
+
if (!(read instanceof Uint8Array))
|
|
67
|
+
throw new Error(`@drawcall/lod: read ${read.constructor.name} from an 8-bit render target`);
|
|
68
|
+
return packed(read, target, (n) => new Uint8Array(n));
|
|
69
|
+
}
|
|
70
|
+
/** Every half float by its bits: an immutable table, made once. */
|
|
71
|
+
const HALF = Float32Array.from({ length: 65536 }, (_, bits) => DataUtils.fromHalfFloat(bits));
|
|
72
|
+
function fromHalves(bits) {
|
|
73
|
+
const out = new Float32Array(bits.length);
|
|
74
|
+
// Typed-array reads below are in bounds; `?? 0` only answers noUncheckedIndexedAccess.
|
|
75
|
+
for (let i = 0; i < bits.length; i++)
|
|
76
|
+
out[i] = HALF[bits[i] ?? 0] ?? 0;
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
79
|
+
/** `read`'s rows, each padded to 256 bytes and top first, packed and bottom first. */
|
|
80
|
+
function packed(read, { width, height }, make) {
|
|
81
|
+
const row = width * 4;
|
|
82
|
+
const stride = (Math.ceil((row * read.BYTES_PER_ELEMENT) / 256) * 256) / read.BYTES_PER_ELEMENT;
|
|
83
|
+
const out = make(row * height);
|
|
84
|
+
for (let y = 0; y < height; y++)
|
|
85
|
+
out.set(read.subarray(y * stride, y * stride + row), (height - 1 - y) * row);
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=bake.js.map
|
package/dist/bake.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bake.js","sourceRoot":"","sources":["../src/bake.ts"],"names":[],"mappings":"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"}
|
package/dist/baked/codec.d.ts
CHANGED
|
@@ -3,11 +3,8 @@ import { Mesh } from "three/webgpu";
|
|
|
3
3
|
* Encode an unmodified `bakeMesh` result, before adding it to a Lod or changing its
|
|
4
4
|
* materials. This is a baked-result format, not an Object3D/NodeMaterial serializer.
|
|
5
5
|
* Geometry, map bytes (including cutout mips), rooms, placement and LOD deviation survive
|
|
6
|
-
* exactly. Decoding
|
|
7
|
-
*/
|
|
8
|
-
export declare function encodeBakedMesh(mesh: Mesh): Uint8Array;
|
|
9
|
-
/**
|
|
10
|
-
* Decode `encodeBakedMesh` bytes into an independently owned mesh, ready for a Lod. Large
|
|
11
|
-
* entries inflate in fflate workers.
|
|
6
|
+
* exactly. Decoding makes fresh resources; the input mesh stays its caller's.
|
|
12
7
|
*/
|
|
8
|
+
export declare function encodeBakedMeshAsync(mesh: Mesh): Promise<Uint8Array>;
|
|
9
|
+
/** Decode `encodeBakedMeshAsync` bytes into an independently owned mesh, ready for a Lod. */
|
|
13
10
|
export declare function decodeBakedMeshAsync(bytes: Uint8Array): Promise<Mesh>;
|
package/dist/baked/codec.js
CHANGED
|
@@ -1,34 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { deviationOf, recordDeviation } from "../levels.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
const object = (value) => {
|
|
9
|
-
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
10
|
-
fail("expected metadata object");
|
|
11
|
-
return Object.fromEntries(Object.entries(value));
|
|
12
|
-
};
|
|
13
|
-
const number = (value) => (typeof value === "number" && Number.isFinite(value) ? value : fail("expected finite number"));
|
|
14
|
-
const integer = (value) => {
|
|
15
|
-
const result = number(value);
|
|
16
|
-
return Number.isSafeInteger(result) && result > 0 ? result : fail("expected positive integer");
|
|
17
|
-
};
|
|
18
|
-
const boolean = (value) => (typeof value === "boolean" ? value : fail("expected boolean"));
|
|
19
|
-
const numbers = (value, count) => {
|
|
20
|
-
if (!Array.isArray(value) || value.length !== count)
|
|
21
|
-
fail(`expected ${count} numbers`);
|
|
22
|
-
return value.map(number);
|
|
23
|
-
};
|
|
24
|
-
const file = (files, name) => files[name] ?? fail(`missing ${name}`);
|
|
1
|
+
import { Box3, BufferAttribute, BufferGeometry, DoubleSide, FrontSide, Mesh, MeshStandardNodeMaterial, Sphere, Vector3 } from "three/webgpu";
|
|
2
|
+
import { pack, unpack } from "../codec/container.js";
|
|
3
|
+
import { deviationOf, recordDeviation } from "../levels/index.js";
|
|
4
|
+
import { boolean, fail, file, number, numbers, object } from "./fields.js";
|
|
5
|
+
import { InteriorMappingMaterial } from "./interior/material.js";
|
|
6
|
+
import { readTexture, writeTexture } from "./textures.js";
|
|
25
7
|
/**
|
|
26
8
|
* Encode an unmodified `bakeMesh` result, before adding it to a Lod or changing its
|
|
27
9
|
* materials. This is a baked-result format, not an Object3D/NodeMaterial serializer.
|
|
28
10
|
* Geometry, map bytes (including cutout mips), rooms, placement and LOD deviation survive
|
|
29
|
-
* exactly. Decoding
|
|
11
|
+
* exactly. Decoding makes fresh resources; the input mesh stays its caller's.
|
|
30
12
|
*/
|
|
31
|
-
export function
|
|
13
|
+
export async function encodeBakedMeshAsync(mesh) {
|
|
32
14
|
const deviation = deviationOf(mesh);
|
|
33
15
|
const { geometry, material } = mesh;
|
|
34
16
|
if (deviation === undefined || !(deviation >= 0) || !Number.isFinite(deviation))
|
|
@@ -44,16 +26,17 @@ export function encodeBakedMesh(mesh) {
|
|
|
44
26
|
geometry.drawRange.count !== Infinity)
|
|
45
27
|
fail("modified baked geometry");
|
|
46
28
|
if (!(material instanceof MeshStandardNodeMaterial) ||
|
|
47
|
-
(Object.getPrototypeOf(material) !== MeshStandardNodeMaterial.prototype && Object.getPrototypeOf(material) !==
|
|
29
|
+
(Object.getPrototypeOf(material) !== MeshStandardNodeMaterial.prototype && Object.getPrototypeOf(material) !== InteriorMappingMaterial.prototype))
|
|
48
30
|
fail("unsupported material");
|
|
49
31
|
const standard = new MeshStandardNodeMaterial();
|
|
50
32
|
// Only the maps, side and alphaTest differ from a default baked material. Refuse
|
|
51
33
|
// shader hooks and material changes rather than silently dropping them from a cache.
|
|
34
|
+
// Keys starting with "_" are three's own state behind accessors (alphaTest's) and
|
|
35
|
+
// listeners, which the accessors and the checks below cover.
|
|
52
36
|
const allowed = new Set([
|
|
53
37
|
"uuid",
|
|
54
38
|
"id",
|
|
55
39
|
"version",
|
|
56
|
-
"_listeners",
|
|
57
40
|
"map",
|
|
58
41
|
"normalMap",
|
|
59
42
|
"aoMap",
|
|
@@ -61,15 +44,13 @@ export function encodeBakedMesh(mesh) {
|
|
|
61
44
|
"metalnessMap",
|
|
62
45
|
"roughness",
|
|
63
46
|
"metalness",
|
|
64
|
-
"alphaTest",
|
|
65
|
-
"_alphaTest",
|
|
66
47
|
"side",
|
|
67
48
|
"rooms",
|
|
68
49
|
"bounds",
|
|
69
50
|
"isInteriorMaterial",
|
|
70
51
|
]);
|
|
71
52
|
for (const [key, value] of Object.entries(material)) {
|
|
72
|
-
if (allowed.has(key))
|
|
53
|
+
if (key.startsWith("_") || allowed.has(key))
|
|
73
54
|
continue;
|
|
74
55
|
const expected = Reflect.get(standard, key);
|
|
75
56
|
if (typeof value === "function" ? value !== expected : JSON.stringify(value) !== JSON.stringify(expected))
|
|
@@ -99,10 +80,16 @@ export function encodeBakedMesh(mesh) {
|
|
|
99
80
|
if (!index || !(index.array instanceof Uint32Array) || index.itemSize !== 1)
|
|
100
81
|
fail("expected Uint32 indices");
|
|
101
82
|
files.index = new Uint8Array(index.array.buffer, index.array.byteOffset, index.array.byteLength);
|
|
102
|
-
const rooms = material instanceof
|
|
83
|
+
const rooms = material instanceof InteriorMappingMaterial ? (material.rooms ?? fail("unfurnished interior")) : null;
|
|
84
|
+
geometry.computeBoundingBox();
|
|
85
|
+
geometry.computeBoundingSphere();
|
|
86
|
+
const { boundingBox: box, boundingSphere: sphere } = geometry;
|
|
87
|
+
if (!box || !sphere)
|
|
88
|
+
fail("missing bounds");
|
|
103
89
|
const meta = {
|
|
104
|
-
version:
|
|
90
|
+
version: 4,
|
|
105
91
|
name: mesh.name,
|
|
92
|
+
bounds: [...box.min.toArray(), ...box.max.toArray(), ...sphere.center.toArray(), sphere.radius],
|
|
106
93
|
deviation,
|
|
107
94
|
position: mesh.position.toArray(),
|
|
108
95
|
quaternion: mesh.quaternion.toArray(),
|
|
@@ -122,44 +109,39 @@ export function encodeBakedMesh(mesh) {
|
|
|
122
109
|
glow: rooms.glow && writeTexture(files, "glow", rooms.glow),
|
|
123
110
|
},
|
|
124
111
|
};
|
|
125
|
-
files.
|
|
126
|
-
return zipSync(files, { level: 6 });
|
|
112
|
+
return pack({ ...meta, files: Object.keys(files) }, Object.values(files));
|
|
127
113
|
}
|
|
128
|
-
/**
|
|
129
|
-
* Decode `encodeBakedMesh` bytes into an independently owned mesh, ready for a Lod. Large
|
|
130
|
-
* entries inflate in fflate workers.
|
|
131
|
-
*/
|
|
114
|
+
/** Decode `encodeBakedMeshAsync` bytes into an independently owned mesh, ready for a Lod. */
|
|
132
115
|
export async function decodeBakedMeshAsync(bytes) {
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
116
|
+
const contents = await unpack(bytes, fail);
|
|
117
|
+
const meta = object(contents.header);
|
|
118
|
+
if (meta.version !== 4)
|
|
119
|
+
fail("unsupported version; bake it again");
|
|
120
|
+
const names = meta.files;
|
|
121
|
+
if (!Array.isArray(names) || names.length !== contents.files.length)
|
|
122
|
+
fail("file names do not match the files");
|
|
123
|
+
const files = Object.fromEntries(names.map((name, i) => [typeof name === "string" ? name : fail("invalid file name"), contents.files[i] ?? fail("missing file")]));
|
|
141
124
|
if (typeof meta.name !== "string")
|
|
142
125
|
fail("missing name");
|
|
143
126
|
const deviation = number(meta.deviation);
|
|
144
127
|
if (deviation < 0)
|
|
145
128
|
fail("negative LOD deviation");
|
|
146
|
-
|
|
147
|
-
const
|
|
148
|
-
const
|
|
149
|
-
const
|
|
150
|
-
|
|
129
|
+
// The container's CRC rejects corrupt bytes, so lengths are checked but values are not walked.
|
|
130
|
+
const position = typedArray(file(files, "position"), Float32Array);
|
|
131
|
+
const normal = typedArray(file(files, "normal"), Float32Array);
|
|
132
|
+
const uv = typedArray(file(files, "uv"), Float32Array);
|
|
133
|
+
const index = typedArray(file(files, "index"), Uint32Array);
|
|
134
|
+
if (!position.length || position.length % 3 || normal.length !== position.length || uv.length * 3 !== position.length * 2 || index.length % 3)
|
|
151
135
|
fail("invalid geometry lengths");
|
|
152
|
-
const
|
|
153
|
-
if (index.some((i) => i >= position.length / 3))
|
|
154
|
-
fail("index outside geometry");
|
|
136
|
+
const bounds = numbers(meta.bounds, 10);
|
|
155
137
|
const side = meta.side === FrontSide ? FrontSide : meta.side === DoubleSide ? DoubleSide : fail("unsupported side");
|
|
156
138
|
const alphaTest = meta.alphaTest === 0 ? 0 : meta.alphaTest === 0.5 ? 0.5 : fail("unsupported alpha test");
|
|
157
139
|
const map = readTexture(files, "map", meta.map, false);
|
|
158
140
|
const normalMap = readTexture(files, "normal", meta.normal, false);
|
|
159
141
|
const orm = readTexture(files, "orm", meta.orm, false);
|
|
160
|
-
const material = meta.rooms === null ? new MeshStandardNodeMaterial() : new
|
|
142
|
+
const material = meta.rooms === null ? new MeshStandardNodeMaterial() : new InteriorMappingMaterial();
|
|
161
143
|
material.setValues({ map, normalMap, aoMap: orm, roughnessMap: orm, metalnessMap: orm, roughness: 1, metalness: 1, side, alphaTest });
|
|
162
|
-
if (material instanceof
|
|
144
|
+
if (material instanceof InteriorMappingMaterial) {
|
|
163
145
|
const rooms = object(meta.rooms);
|
|
164
146
|
if (!Array.isArray(rooms.boxes) || !rooms.boxes.length)
|
|
165
147
|
fail("missing room boxes");
|
|
@@ -185,8 +167,8 @@ function fromFiles(files) {
|
|
|
185
167
|
geometry.setAttribute("normal", new BufferAttribute(normal, 3));
|
|
186
168
|
geometry.setAttribute("uv", new BufferAttribute(uv, 2));
|
|
187
169
|
geometry.setIndex(new BufferAttribute(index, 1));
|
|
188
|
-
geometry.
|
|
189
|
-
geometry.
|
|
170
|
+
geometry.boundingBox = new Box3().setFromArray(bounds.slice(0, 6));
|
|
171
|
+
geometry.boundingSphere = new Sphere(new Vector3().fromArray(bounds, 6), bounds[9]);
|
|
190
172
|
const mesh = new Mesh(geometry, material);
|
|
191
173
|
mesh.name = meta.name;
|
|
192
174
|
mesh.position.fromArray(numbers(meta.position, 3));
|
|
@@ -197,101 +179,13 @@ function fromFiles(files) {
|
|
|
197
179
|
recordDeviation(mesh, deviation);
|
|
198
180
|
return mesh;
|
|
199
181
|
}
|
|
200
|
-
|
|
182
|
+
/** `bytes` as 32-bit values, in place: the container aligns its files. */
|
|
183
|
+
function typedArray(bytes, Type) {
|
|
201
184
|
if (bytes.byteLength % 4)
|
|
202
|
-
fail("invalid
|
|
203
|
-
const
|
|
204
|
-
if (
|
|
205
|
-
fail("
|
|
206
|
-
return
|
|
207
|
-
}
|
|
208
|
-
function writeTexture(files, name, texture) {
|
|
209
|
-
if (!(texture instanceof DataTexture) && !(texture instanceof DataArrayTexture))
|
|
210
|
-
fail(`missing ${name} data texture`);
|
|
211
|
-
const image = texture.image;
|
|
212
|
-
const base = object(image);
|
|
213
|
-
const width = integer(base.width), height = integer(base.height);
|
|
214
|
-
const depth = texture instanceof DataArrayTexture ? integer(base.depth) : 1;
|
|
215
|
-
if (texture.type !== UnsignedByteType ||
|
|
216
|
-
(texture.format !== RGBAFormat && texture.format !== RGFormat) ||
|
|
217
|
-
texture.minFilter !== LinearMipmapLinearFilter ||
|
|
218
|
-
texture.magFilter !== LinearFilter ||
|
|
219
|
-
texture.wrapS !== ClampToEdgeWrapping ||
|
|
220
|
-
texture.wrapT !== ClampToEdgeWrapping ||
|
|
221
|
-
texture.flipY ||
|
|
222
|
-
texture.premultiplyAlpha ||
|
|
223
|
-
texture.channel !== 0 ||
|
|
224
|
-
texture.mapping !== UVMapping ||
|
|
225
|
-
!texture.matrixAutoUpdate ||
|
|
226
|
-
texture.internalFormat !== null ||
|
|
227
|
-
texture.offset.x !== 0 ||
|
|
228
|
-
texture.offset.y !== 0 ||
|
|
229
|
-
texture.repeat.x !== 1 ||
|
|
230
|
-
texture.repeat.y !== 1 ||
|
|
231
|
-
texture.rotation !== 0 ||
|
|
232
|
-
(texture.colorSpace !== SRGBColorSpace && texture.colorSpace !== NoColorSpace))
|
|
233
|
-
fail(`unsupported ${name} texture settings`);
|
|
234
|
-
const channels = texture.format === RGFormat ? 2 : 4;
|
|
235
|
-
const pixels = (value, width, height) => {
|
|
236
|
-
if (!(value instanceof Uint8Array) || value.byteLength !== width * height * depth * channels)
|
|
237
|
-
fail(`invalid ${name} pixels`);
|
|
238
|
-
return value;
|
|
239
|
-
};
|
|
240
|
-
files[name + "/0"] = pixels(base.data, width, height);
|
|
241
|
-
const mips = texture.mipmaps.map((value, index) => {
|
|
242
|
-
const mip = object(value);
|
|
243
|
-
const w = integer(mip.width), h = integer(mip.height);
|
|
244
|
-
if (w !== Math.max(1, width >> index) || h !== Math.max(1, height >> index))
|
|
245
|
-
fail("invalid mip dimensions");
|
|
246
|
-
files[`${name}/mip${index}`] = pixels(mip.data, w, h);
|
|
247
|
-
return [w, h];
|
|
248
|
-
});
|
|
249
|
-
return {
|
|
250
|
-
width,
|
|
251
|
-
height,
|
|
252
|
-
depth,
|
|
253
|
-
channels,
|
|
254
|
-
srgb: texture.colorSpace === SRGBColorSpace,
|
|
255
|
-
anisotropy: texture.anisotropy,
|
|
256
|
-
generateMipmaps: texture.generateMipmaps,
|
|
257
|
-
unpackAlignment: texture.unpackAlignment,
|
|
258
|
-
mips,
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
function readTexture(files, name, value, array) {
|
|
262
|
-
const meta = object(value);
|
|
263
|
-
const width = integer(meta.width), height = integer(meta.height), depth = integer(meta.depth);
|
|
264
|
-
const channels = meta.channels === 2 ? 2 : meta.channels === 4 ? 4 : fail("invalid texture channels");
|
|
265
|
-
if (!array && depth !== 1)
|
|
266
|
-
fail("2D texture with layers");
|
|
267
|
-
const pixels = (key, width, height) => {
|
|
268
|
-
const data = file(files, key);
|
|
269
|
-
if (data.byteLength !== width * height * depth * channels)
|
|
270
|
-
fail(`invalid ${key} byte length`);
|
|
271
|
-
return data;
|
|
272
|
-
};
|
|
273
|
-
const data = pixels(name + "/0", width, height);
|
|
274
|
-
const texture = array ? new DataArrayTexture(data, width, height, depth) : new DataTexture(data, width, height);
|
|
275
|
-
texture.format = channels === 2 ? RGFormat : RGBAFormat;
|
|
276
|
-
texture.colorSpace = boolean(meta.srgb) ? SRGBColorSpace : NoColorSpace;
|
|
277
|
-
texture.minFilter = LinearMipmapLinearFilter;
|
|
278
|
-
texture.magFilter = LinearFilter;
|
|
279
|
-
texture.anisotropy = number(meta.anisotropy);
|
|
280
|
-
texture.generateMipmaps = boolean(meta.generateMipmaps);
|
|
281
|
-
const alignment = meta.unpackAlignment;
|
|
282
|
-
if (alignment !== 1 && alignment !== 2 && alignment !== 4 && alignment !== 8)
|
|
283
|
-
fail("invalid texture alignment");
|
|
284
|
-
texture.unpackAlignment = alignment;
|
|
285
|
-
if (!Array.isArray(meta.mips))
|
|
286
|
-
fail("missing mipmaps");
|
|
287
|
-
texture.mipmaps = meta.mips.map((value, index) => {
|
|
288
|
-
const size = numbers(value, 2);
|
|
289
|
-
const w = integer(size[0]), h = integer(size[1]);
|
|
290
|
-
if (w !== Math.max(1, width >> index) || h !== Math.max(1, height >> index))
|
|
291
|
-
fail("invalid mip dimensions");
|
|
292
|
-
return { data: pixels(`${name}/mip${index}`, w, h), width: w, height: h };
|
|
293
|
-
});
|
|
294
|
-
texture.needsUpdate = true;
|
|
295
|
-
return texture;
|
|
185
|
+
fail("invalid geometry data length");
|
|
186
|
+
const { buffer, byteOffset, byteLength } = bytes;
|
|
187
|
+
if (!(buffer instanceof ArrayBuffer))
|
|
188
|
+
fail("shared geometry data");
|
|
189
|
+
return new Type(buffer, byteOffset, byteLength / 4);
|
|
296
190
|
}
|
|
297
191
|
//# sourceMappingURL=codec.js.map
|
package/dist/baked/codec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/baked/codec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/baked/codec.ts"],"names":[],"mappings":"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"}
|
package/dist/baked/coverage.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import type { Mip } from "../source/
|
|
2
|
-
/**
|
|
3
|
-
|
|
1
|
+
import type { Mip } from "../source/sampler.js";
|
|
2
|
+
/**
|
|
3
|
+
* Preserve the base mip's cut-out coverage down the chain: scale each smaller mip's alpha, in place, so that the same
|
|
4
|
+
* share of its texels passes the alpha test, with room for filtering around the test. Returns `mips`.
|
|
5
|
+
*/
|
|
6
|
+
export declare function preserveCoverage(mips: Mip[]): Mip[];
|
package/dist/baked/coverage.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Preserve the base mip's cut-out coverage down the chain: scale each smaller mip's alpha, in place, so that the same
|
|
3
|
+
* share of its texels passes the alpha test, with room for filtering around the test. Returns `mips`.
|
|
4
|
+
*/
|
|
5
|
+
export function preserveCoverage(mips) {
|
|
3
6
|
const [base] = mips;
|
|
4
7
|
if (!base)
|
|
5
8
|
return mips;
|
|
@@ -27,7 +30,7 @@ export function keepCoverage(mips) {
|
|
|
27
30
|
}
|
|
28
31
|
// The smallest scale puts a retained texel at alpha 128: bilinear filtering
|
|
29
32
|
// then cuts almost all of its area away. Centre the gap without changing which
|
|
30
|
-
// texels pass. A uniform coarse mip has no gap;
|
|
33
|
+
// texels pass. A uniform coarse mip has no gap; use its original correction.
|
|
31
34
|
if (Number.isFinite(inside) && Number.isFinite(outside))
|
|
32
35
|
high = 255 / (inside + outside);
|
|
33
36
|
for (let i = 3; i < mip.data.length; i += 4)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/baked/coverage.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/baked/coverage.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAW;IAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM;gBAAE,GAAG,GAAG,KAAK,CAAC;;gBACzC,IAAI,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,MAAM,GAAG,QAAQ,CAAC;QACtB,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK;gBAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;;gBACvD,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,4EAA4E;QAC5E,+EAA+E;QAC/E,6EAA6E;QAC7E,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QACzF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACvF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,IAAI,EAAO,EAAE,KAAa;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK;YAAE,KAAK,EAAE,CAAC;IACtF,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** The container's files by name. */
|
|
2
|
+
export type Files = Record<string, Uint8Array>;
|
|
3
|
+
export declare function fail(why: string, cause?: unknown): never;
|
|
4
|
+
export declare const object: (value: unknown) => Record<string, unknown>;
|
|
5
|
+
export declare const number: (value: unknown) => number;
|
|
6
|
+
export declare const integer: (value: unknown) => number;
|
|
7
|
+
export declare const boolean: (value: unknown) => boolean;
|
|
8
|
+
export declare const numbers: (value: unknown, count: number) => number[];
|
|
9
|
+
export declare const file: (files: Files, name: string) => Uint8Array;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// The metadata fields of a baked mesh's container, read with validation: anything unexpected fails the decode.
|
|
2
|
+
export function fail(why, cause) {
|
|
3
|
+
throw new Error(`Invalid baked mesh: ${why}`, { cause });
|
|
4
|
+
}
|
|
5
|
+
export const object = (value) => {
|
|
6
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
7
|
+
fail("expected metadata object");
|
|
8
|
+
return Object.fromEntries(Object.entries(value));
|
|
9
|
+
};
|
|
10
|
+
export const number = (value) => (typeof value === "number" && Number.isFinite(value) ? value : fail("expected finite number"));
|
|
11
|
+
export const integer = (value) => {
|
|
12
|
+
const result = number(value);
|
|
13
|
+
return Number.isSafeInteger(result) && result > 0 ? result : fail("expected positive integer");
|
|
14
|
+
};
|
|
15
|
+
export const boolean = (value) => (typeof value === "boolean" ? value : fail("expected boolean"));
|
|
16
|
+
export const numbers = (value, count) => {
|
|
17
|
+
if (!Array.isArray(value) || value.length !== count)
|
|
18
|
+
fail(`expected ${count} numbers`);
|
|
19
|
+
return value.map(number);
|
|
20
|
+
};
|
|
21
|
+
export const file = (files, name) => files[name] ?? fail(`missing ${name}`);
|
|
22
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/baked/fields.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAK/G,MAAM,UAAU,IAAI,CAAC,GAAW,EAAE,KAAe;IAC/C,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAc,EAA2B,EAAE;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1G,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACjJ,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAU,EAAE;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AACjG,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACpH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAE,KAAa,EAAY,EAAE;IACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK;QAAE,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC;IACvF,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAY,EAAE,IAAY,EAAc,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC"}
|