@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
|
@@ -1,26 +1,27 @@
|
|
|
1
|
-
import { type Object3D } from "three/webgpu";
|
|
1
|
+
import { type Object3D, type Renderer } from "three/webgpu";
|
|
2
2
|
import { type Impostor, type ImpostorLayout } from "../impostor.js";
|
|
3
3
|
export interface BakeImpostorOptions {
|
|
4
4
|
/**
|
|
5
|
-
* "full" (default):
|
|
5
|
+
* "full" (default): frames from every side, so any orientation works. "hemi": frames
|
|
6
6
|
* from the horizon up only, for objects that always stand upright; the same quality
|
|
7
7
|
* there with about 45% less memory.
|
|
8
8
|
*/
|
|
9
9
|
layout?: ImpostorLayout;
|
|
10
|
-
/**
|
|
10
|
+
/** frames per atlas side; default 16 for full, 12 for hemi */
|
|
11
11
|
frames?: number;
|
|
12
12
|
/**
|
|
13
|
-
* pixels per
|
|
14
|
-
* down to a power of two so mip levels never mix two
|
|
13
|
+
* pixels per frame: the impostor stays sharp up to about this size on screen. Rounded
|
|
14
|
+
* down to a power of two so mip levels never mix two frames; default 128.
|
|
15
15
|
*/
|
|
16
16
|
resolution?: number;
|
|
17
17
|
/**
|
|
18
18
|
* Largest on-screen height (CSS pixels, as `LodLevel.maxPixels`) the impostor will be
|
|
19
19
|
* drawn at, when that is above the height where it is sharp (its default maxPixels).
|
|
20
20
|
* Larger, it shows its top mip magnified, which then reads the source's textures as
|
|
21
|
-
* sharp as they are at this height
|
|
22
|
-
*
|
|
23
|
-
* Default: the height where it is sharp
|
|
21
|
+
* sharp as they are at this height, not with the look of their small mips. Alpha-tested
|
|
22
|
+
* materials are read at full detail at every size, which holds their cut-out's coverage.
|
|
23
|
+
* Default: the height where it is sharp (see `texelPixels`, and `framePixels` for a
|
|
24
|
+
* LodLoader level).
|
|
24
25
|
*/
|
|
25
26
|
maxPixels?: number;
|
|
26
27
|
/**
|
|
@@ -35,9 +36,18 @@ export interface BakeImpostorOptions {
|
|
|
35
36
|
supersample?: number;
|
|
36
37
|
}
|
|
37
38
|
/**
|
|
38
|
-
* Bake `object` (in its own space, ignoring its own transform) into an impostor
|
|
39
|
-
*
|
|
40
|
-
* ImpostorMeshes are refused: bake
|
|
39
|
+
* Bake `object` (in its own space, ignoring its own transform) into an impostor, drawing
|
|
40
|
+
* with `renderer`, as three's PMREMGenerator does. Nested LODs are baked at their level 0,
|
|
41
|
+
* an InstancedLod with every instance at its level 0. ImpostorMeshes are refused: bake
|
|
42
|
+
* from their source instead.
|
|
43
|
+
*
|
|
44
|
+
* `renderer` must be one made for bakes: make one with `createBakeRenderer`, as LodLoader
|
|
45
|
+
* does for itself and a .glts script that bakes does too. Such a renderer is initialised,
|
|
46
|
+
* clears to transparent black and only when told to (`autoClear = false`), and has no MRT
|
|
47
|
+
* and no XR session; the bake throws otherwise. Nor may its canvas be a square of a frame's size (resolution ×
|
|
48
|
+
* supersample): three r186 applies a target's viewport only when it differs from the
|
|
49
|
+
* canvas's, and would draw that frame over the whole target. Bakes on one renderer run
|
|
50
|
+
* one at a time.
|
|
41
51
|
*
|
|
42
52
|
* Each frame is an orthographic look at the bounding-box centre, rendered once per mip
|
|
43
53
|
* level at that level's size. The object's materials are rendered unlit into one target
|
|
@@ -46,6 +56,4 @@ export interface BakeImpostorOptions {
|
|
|
46
56
|
* default specular adds the object's mean specular (see `Impostor.specular`).
|
|
47
57
|
* Custom lighting behavior is not baked; the resulting surface is lit at draw time.
|
|
48
58
|
*/
|
|
49
|
-
export declare function bakeImpostor(object: Object3D, options?: BakeImpostorOptions): Promise<Impostor>;
|
|
50
|
-
/** Loader entry: rooms attached for the close source are absent from distant bakes. */
|
|
51
|
-
export declare function bake(object: Object3D, options: BakeImpostorOptions, excluded?: readonly Object3D[]): Promise<Impostor>;
|
|
59
|
+
export declare function bakeImpostor(object: Object3D, renderer: Renderer, options?: BakeImpostorOptions): Promise<Impostor>;
|
|
@@ -1,22 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Matrix4, OrthographicCamera, RGBAFormat, Scene, Vector3 } from "three/webgpu";
|
|
2
2
|
import { uniform } from "three/tsl";
|
|
3
|
-
import { MAPS, boundingRadius, texelPixels, validateImpostor } from "../impostor.js";
|
|
3
|
+
import { MAPS, PAD, boundingRadius, texelPixels, validateImpostor } from "../impostor.js";
|
|
4
4
|
import { frameBasis, frameDirection } from "../octahedral.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
5
|
+
import { checkBakeRenderer, inTurn } from "../../bake.js";
|
|
6
|
+
import { boundingBox, showDetail } from "../../source/detail.js";
|
|
7
|
+
import { ImpostorAtlasMip } from "./atlas.js";
|
|
8
|
+
import { swapMaterials } from "./materials.js";
|
|
9
|
+
import { bakeMip } from "./sheet.js";
|
|
10
10
|
import { sourceForBake } from "./source.js";
|
|
11
|
+
import { fittedHalfSize } from "./fit.js";
|
|
11
12
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
13
|
+
* Bake `object` (in its own space, ignoring its own transform) into an impostor, drawing
|
|
14
|
+
* with `renderer`, as three's PMREMGenerator does. Nested LODs are baked at their level 0,
|
|
15
|
+
* an InstancedLod with every instance at its level 0. ImpostorMeshes are refused: bake
|
|
16
|
+
* from their source instead.
|
|
17
|
+
*
|
|
18
|
+
* `renderer` must be one made for bakes: make one with `createBakeRenderer`, as LodLoader
|
|
19
|
+
* does for itself and a .glts script that bakes does too. Such a renderer is initialised,
|
|
20
|
+
* clears to transparent black and only when told to (`autoClear = false`), and has no MRT
|
|
21
|
+
* and no XR session; the bake throws otherwise. Nor may its canvas be a square of a frame's size (resolution ×
|
|
22
|
+
* supersample): three r186 applies a target's viewport only when it differs from the
|
|
23
|
+
* canvas's, and would draw that frame over the whole target. Bakes on one renderer run
|
|
24
|
+
* one at a time.
|
|
20
25
|
*
|
|
21
26
|
* Each frame is an orthographic look at the bounding-box centre, rendered once per mip
|
|
22
27
|
* level at that level's size. The object's materials are rendered unlit into one target
|
|
@@ -25,11 +30,11 @@ const PAD = 0.06;
|
|
|
25
30
|
* default specular adds the object's mean specular (see `Impostor.specular`).
|
|
26
31
|
* Custom lighting behavior is not baked; the resulting surface is lit at draw time.
|
|
27
32
|
*/
|
|
28
|
-
export function bakeImpostor(object, options = {}) {
|
|
29
|
-
return bake(object, options);
|
|
33
|
+
export function bakeImpostor(object, renderer, options = {}) {
|
|
34
|
+
return inTurn(renderer, () => bake(object, renderer, options));
|
|
30
35
|
}
|
|
31
|
-
|
|
32
|
-
|
|
36
|
+
async function bake(object, renderer, options) {
|
|
37
|
+
checkBakeRenderer(renderer, "bakeImpostor");
|
|
33
38
|
const layout = options.layout ?? "full";
|
|
34
39
|
const frames = options.frames ?? (layout === "hemi" ? 12 : 16);
|
|
35
40
|
const resolution = options.resolution ?? 128;
|
|
@@ -43,7 +48,7 @@ export async function bake(object, options, excluded = []) {
|
|
|
43
48
|
if (options.maxPixels !== undefined && !(options.maxPixels > 0))
|
|
44
49
|
throw new Error("bakeImpostor: maxPixels must be > 0");
|
|
45
50
|
const cell = 2 ** Math.floor(Math.log2(resolution));
|
|
46
|
-
const source = sourceForBake(object
|
|
51
|
+
const source = sourceForBake(object);
|
|
47
52
|
source.matrix.identity();
|
|
48
53
|
source.matrix.decompose(source.position, source.quaternion, source.scale);
|
|
49
54
|
// Bones are descendants, so this also moves them; getVertexPosition reads bone.matrixWorld.
|
|
@@ -63,7 +68,8 @@ export async function bake(object, options, excluded = []) {
|
|
|
63
68
|
directions.push(frameDirection(layout, frames, col, row));
|
|
64
69
|
const halfSize = fittedHalfSize(source, centre, directions) * (1 + PAD);
|
|
65
70
|
const distance = 2 * radius + 1e-3;
|
|
66
|
-
// Textures are read at the size of an atlas texel; the top mip's at the size of a pixel at maxPixels.
|
|
71
|
+
// Textures are read at the size of an atlas texel; the top mip's at the size of a pixel at maxPixels. Alpha-tested
|
|
72
|
+
// materials read theirs at full detail (see `swapMaterials`).
|
|
67
73
|
const sharp = texelPixels({ size: cell * frames, frames, box, halfSize });
|
|
68
74
|
const textureBias = (m) => Math.log2(supersample) - (m === 0 ? Math.log2(Math.max(1, (options.maxPixels ?? sharp) / sharp)) : 0);
|
|
69
75
|
const settings = { distance, radius, textureBias: uniform(0) };
|
|
@@ -71,24 +77,23 @@ export async function bake(object, options, excluded = []) {
|
|
|
71
77
|
const emissive = options.emissive ?? swapped.emits;
|
|
72
78
|
const maps = emissive ? [...MAPS] : ["base", "normalDepth", "orm"];
|
|
73
79
|
// Every mip level is rendered, not filtered from the one above: the source does not look
|
|
74
|
-
// the same at every size (
|
|
75
|
-
//
|
|
76
|
-
const atlases = Array.from({ length: Math.log2(cell) + 1 }, (_, m) => new
|
|
77
|
-
const renderer = await sharedRenderer();
|
|
80
|
+
// the same at every size (a texture whose small mips mix in dark texels darkens with
|
|
81
|
+
// distance), and filtering would freeze the look of the largest.
|
|
82
|
+
const atlases = Array.from({ length: Math.log2(cell) + 1 }, (_, m) => new ImpostorAtlasMip(maps, frames, cell >> m, swapped.specular));
|
|
78
83
|
const scene = new Scene();
|
|
79
84
|
scene.add(source);
|
|
80
85
|
const camera = new OrthographicCamera(-halfSize, halfSize, halfSize, -halfSize, 0, 4 * radius + 1e-3);
|
|
81
86
|
camera.matrixAutoUpdate = false;
|
|
82
87
|
// Bounds count meshes on every layer, so the bake draws them all.
|
|
83
88
|
camera.layers.enableAll();
|
|
84
|
-
const
|
|
89
|
+
const frameCameras = directions.map((n) => {
|
|
85
90
|
const { tangent: t, bitangent: b } = frameBasis(n);
|
|
86
91
|
return new Matrix4().set(t[0], b[0], n[0], centre.x + n[0] * distance, t[1], b[1], n[1], centre.y + n[1] * distance, t[2], b[2], n[2], centre.z + n[2] * distance, 0, 0, 0, 1);
|
|
87
92
|
});
|
|
88
93
|
try {
|
|
89
94
|
for (const [m, atlas] of atlases.entries()) {
|
|
90
95
|
settings.textureBias.value = textureBias(m);
|
|
91
|
-
await bakeMip(atlas, supersample, renderer, scene, camera,
|
|
96
|
+
await bakeMip(atlas, supersample, renderer, scene, camera, frameCameras);
|
|
92
97
|
}
|
|
93
98
|
}
|
|
94
99
|
finally {
|
|
@@ -103,13 +108,16 @@ export async function bake(object, options, excluded = []) {
|
|
|
103
108
|
if (sum("turned") > sum("own"))
|
|
104
109
|
for (const atlas of atlases)
|
|
105
110
|
atlas.useTurned();
|
|
106
|
-
const layers = maps.map((map, i) =>
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
+
const layers = maps.map((map, i) => ({
|
|
112
|
+
format: RGBAFormat,
|
|
113
|
+
mipmaps: atlases.map((atlas) => {
|
|
114
|
+
const layer = atlas.layers[i];
|
|
115
|
+
if (!layer)
|
|
116
|
+
throw new Error(`bakeImpostor: no ${map} layer`);
|
|
117
|
+
return layer;
|
|
118
|
+
}),
|
|
111
119
|
}));
|
|
112
|
-
const impostor = { version:
|
|
120
|
+
const impostor = { version: 4, layout, frames, size: cell * frames, box, halfSize, maps, layers };
|
|
113
121
|
const [top] = atlases;
|
|
114
122
|
if (!top)
|
|
115
123
|
throw new Error("bakeImpostor: no mip levels");
|
|
@@ -118,105 +126,4 @@ export async function bake(object, options, excluded = []) {
|
|
|
118
126
|
validateImpostor(impostor);
|
|
119
127
|
return impostor;
|
|
120
128
|
}
|
|
121
|
-
/** Edge of the largest target frames render into side by side, which is read back at once. */
|
|
122
|
-
const TILE = 1024;
|
|
123
|
-
/**
|
|
124
|
-
* Colour attachments one pass renders: four half-float targets fill the 32 bytes per
|
|
125
|
-
* sample WebGPU guarantees.
|
|
126
|
-
*/
|
|
127
|
-
const PER_PASS = 4;
|
|
128
|
-
/**
|
|
129
|
-
* Render every frame (`views`: camera matrices, in atlas order) into `atlas`, at its cell
|
|
130
|
-
* size × `supersample`. Frames render side by side into tiles of up to TILE square, so
|
|
131
|
-
* that each map is read back once per tile, in passes of up to PER_PASS outputs.
|
|
132
|
-
*/
|
|
133
|
-
async function bakeMip(atlas, supersample, renderer, scene, camera, views) {
|
|
134
|
-
const { frames, maps } = atlas;
|
|
135
|
-
const side = atlas.cell * supersample;
|
|
136
|
-
const per = Math.max(1, Math.min(frames, Math.floor(TILE / side)));
|
|
137
|
-
const width = per * side;
|
|
138
|
-
// one output per map, then the second way to store the normals (see Atlas), then the specular
|
|
139
|
-
const names = OUTPUTS.filter((name) => (name === "emissive" ? maps.includes("emissive") : name !== "specular" || atlas.specular));
|
|
140
|
-
const passes = Array.from({ length: Math.ceil(names.length / PER_PASS) }, (_, p) => {
|
|
141
|
-
const outputs = names.slice(p * PER_PASS, (p + 1) * PER_PASS);
|
|
142
|
-
const target = new RenderTarget(width, width, {
|
|
143
|
-
count: outputs.length,
|
|
144
|
-
type: HalfFloatType,
|
|
145
|
-
minFilter: NearestFilter,
|
|
146
|
-
magFilter: NearestFilter,
|
|
147
|
-
depthBuffer: true,
|
|
148
|
-
});
|
|
149
|
-
outputs.forEach((name, i) => {
|
|
150
|
-
const texture = target.textures[i];
|
|
151
|
-
if (!texture)
|
|
152
|
-
throw new Error("bakeImpostor: a render target lacks a texture");
|
|
153
|
-
texture.name = name;
|
|
154
|
-
});
|
|
155
|
-
return target;
|
|
156
|
-
});
|
|
157
|
-
try {
|
|
158
|
-
for (let row0 = 0; row0 < frames; row0 += per)
|
|
159
|
-
for (let col0 = 0; col0 < frames; col0 += per) {
|
|
160
|
-
const tile = [];
|
|
161
|
-
for (let row = row0; row < Math.min(row0 + per, frames); row++)
|
|
162
|
-
for (let col = col0; col < Math.min(col0 + per, frames); col++)
|
|
163
|
-
tile.push({ col, row, x: (col - col0) * side, y: (row - row0) * side });
|
|
164
|
-
const placed = tile.map(({ col, row, x, y }) => ({ view: views[row * frames + col], x, y }));
|
|
165
|
-
for (const target of passes)
|
|
166
|
-
renderTile(renderer, target, scene, camera, placed, side);
|
|
167
|
-
const pixels = await Promise.all(passes.flatMap((target) => target.textures.map((_, i) => readFloats(renderer, target, i))));
|
|
168
|
-
for (const { col, row, x, y } of tile)
|
|
169
|
-
atlas.write(pixels, width, supersample, col, row, x, y);
|
|
170
|
-
await pause();
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
finally {
|
|
174
|
-
for (const target of passes)
|
|
175
|
-
target.dispose();
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
/** Clear `target` and render each frame's view into its `side` square at (x, y), counted from the bottom left as the atlas is. */
|
|
179
|
-
function renderTile(renderer, target, scene, camera, frames, side) {
|
|
180
|
-
const restore = borrow(renderer, target);
|
|
181
|
-
try {
|
|
182
|
-
renderer.clear(true, true, true);
|
|
183
|
-
target.scissorTest = true;
|
|
184
|
-
for (const { view, x, y } of frames) {
|
|
185
|
-
if (!view)
|
|
186
|
-
throw new Error("bakeImpostor: a frame has no view");
|
|
187
|
-
// WebGPU counts viewport rows from the top; `readFloats` turns the image over.
|
|
188
|
-
const top = target.height - y - side;
|
|
189
|
-
target.viewport.set(x, top, side, side);
|
|
190
|
-
target.scissor.set(x, top, side, side);
|
|
191
|
-
camera.matrix.copy(view);
|
|
192
|
-
camera.updateMatrixWorld(true);
|
|
193
|
-
renderer.render(scene, camera);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
finally {
|
|
197
|
-
// The next tile clears it whole.
|
|
198
|
-
target.scissorTest = false;
|
|
199
|
-
restore();
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* The smallest square half-size that holds the object in every frame: the largest
|
|
204
|
-
* extent of any vertex along any frame's image axes. Tighter than the bounding
|
|
205
|
-
* sphere, which wastes about a third of every frame on a tree.
|
|
206
|
-
*/
|
|
207
|
-
function fittedHalfSize(source, centre, directions) {
|
|
208
|
-
const axes = directions.flatMap((n) => {
|
|
209
|
-
const { tangent, bitangent } = frameBasis(n);
|
|
210
|
-
return [tangent, bitangent];
|
|
211
|
-
});
|
|
212
|
-
let half = 0;
|
|
213
|
-
forEachVertex(source, (p) => {
|
|
214
|
-
p.sub(centre);
|
|
215
|
-
for (const a of axes)
|
|
216
|
-
half = Math.max(half, Math.abs(p.x * a[0] + p.y * a[1] + p.z * a[2]));
|
|
217
|
-
});
|
|
218
|
-
if (half === 0)
|
|
219
|
-
throw new Error("bakeImpostor: object has no extent (every vertex is at one point)");
|
|
220
|
-
return half;
|
|
221
|
-
}
|
|
222
129
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/impostor/bake/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/impostor/bake/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,16 +4,16 @@ export interface BakeSettings {
|
|
|
4
4
|
/** the cameras' distance from the bounding box centre, and the bounding radius: the depth encoding */
|
|
5
5
|
distance: number;
|
|
6
6
|
radius: number;
|
|
7
|
-
/** mip bias of every texture read, per mip level: textures are read at the size of a texel (see `bakeImpostor`) */
|
|
7
|
+
/** mip bias of every texture read but an alpha-tested material's, per mip level: textures are read at the size of a texel (see `bakeImpostor`) */
|
|
8
8
|
textureBias: Node<"float"> & {
|
|
9
9
|
value: number;
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* The outputs a bake material writes, by name: one per atlas map, then the second way to
|
|
14
|
-
* store the normals (see
|
|
14
|
+
* store the normals (see ImpostorAtlasMip) and the specular. A render target takes the ones it has
|
|
15
15
|
* textures of that name for, so every material writes them all and the bake decides,
|
|
16
|
-
* once it knows every material, which it
|
|
16
|
+
* once it knows every material, which it uses.
|
|
17
17
|
*/
|
|
18
18
|
export declare const OUTPUTS: readonly ["base", "normalDepth", "orm", "emissive", "turned", "specular"];
|
|
19
19
|
export type Output = (typeof OUTPUTS)[number];
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { DoubleSide, MeshStandardNodeMaterial, NoBlending } from "three/webgpu";
|
|
2
|
-
import { ambientOcclusion, cameraViewMatrix, Fn, clamp, diffuseColor, emissive, faceDirection, float, materialMetalness, materialOpacity, materialRoughness, max, mrt, normalView, normalize, positionView, positionLocal, specularColor, specularF90, step, vec4, } from "three/tsl";
|
|
1
|
+
import { DoubleSide, MeshStandardNodeMaterial, NoBlending, } from "three/webgpu";
|
|
2
|
+
import { ambientOcclusion, cameraViewMatrix, Fn, clamp, context, dFdx, dFdy, diffuseColor, emissive, faceDirection, float, length, log2, materialMetalness, materialOpacity, materialRoughness, max, mrt, normalView, normalize, positionView, positionLocal, specularColor, specularF90, step, uniform, uv, vec2, vec3, vec4, } from "three/tsl";
|
|
3
3
|
import { isMesh, isNodeMaterial, isPhysical, isStandard, isStandardNode, toNodeMaterial } from "../../three.js";
|
|
4
|
-
import { affine,
|
|
5
|
-
import { placeInstances } from "../../fade.js";
|
|
6
|
-
import { originalOf } from "../../material.js";
|
|
4
|
+
import { affine, isNodeOf } from "../../tsl.js";
|
|
5
|
+
import { placeInstances } from "../../levels/fade.js";
|
|
6
|
+
import { originalOf } from "../../levels/material.js";
|
|
7
7
|
/**
|
|
8
8
|
* The outputs a bake material writes, by name: one per atlas map, then the second way to
|
|
9
|
-
* store the normals (see
|
|
9
|
+
* store the normals (see ImpostorAtlasMip) and the specular. A render target takes the ones it has
|
|
10
10
|
* textures of that name for, so every material writes them all and the bake decides,
|
|
11
|
-
* once it knows every material, which it
|
|
11
|
+
* once it knows every material, which it uses.
|
|
12
12
|
*/
|
|
13
13
|
export const OUTPUTS = ["base", "normalDepth", "orm", "emissive", "turned", "specular"];
|
|
14
14
|
/**
|
|
@@ -73,7 +73,7 @@ const STANDARD_KEYS = [
|
|
|
73
73
|
"displacementBias",
|
|
74
74
|
"wireframe",
|
|
75
75
|
];
|
|
76
|
-
/** Built-in materials whose look the standard keys carry over; others only
|
|
76
|
+
/** Built-in materials whose look the standard keys carry over; others carry only their color/map. */
|
|
77
77
|
const MAPPED = new Set(["MeshBasicMaterial", "MeshLambertMaterial", "MeshPhongMaterial", "MeshToonMaterial", "MeshMatcapMaterial"]);
|
|
78
78
|
/** A node material that renders like `source`: a copy of a node or standard one, else the standard keys carried over. */
|
|
79
79
|
function toStandard(source) {
|
|
@@ -108,19 +108,22 @@ function bakeMaterial(source, settings) {
|
|
|
108
108
|
// Coverage is the material's alpha where it cuts the surface out: alpha-to-coverage (no
|
|
109
109
|
// multisampling here, so it would cover the card), or a blended material's texture
|
|
110
110
|
// alpha. A blended material's uniform opacity (glass) is no hole: it folds into the
|
|
111
|
-
// colour, as if the pane were dark and opaque, which
|
|
111
|
+
// colour, as if the pane were dark and opaque, which leaves its reflection.
|
|
112
112
|
const blended = material.transparent;
|
|
113
113
|
const coverage = blended ? diffuseColor.a.div(max(materialOpacity, 1e-4)) : material.alphaToCoverage ? diffuseColor.a : float(1);
|
|
114
114
|
const opacity = blended ? materialOpacity : float(1);
|
|
115
115
|
// Blending would mix the outputs with the cleared background; coverage carries alpha
|
|
116
|
-
// instead. Without normal blending three also
|
|
116
|
+
// instead. Without normal blending three also writes the alpha (not opaque).
|
|
117
117
|
material.transparent = false;
|
|
118
118
|
material.blending = NoBlending;
|
|
119
119
|
material.depthWrite = true;
|
|
120
|
-
|
|
120
|
+
// A cut-out covers where its alpha passes the test at full detail, and the supersamples average that. Tested at
|
|
121
|
+
// a smaller mip, whose alpha averages the holes in, thin cut-outs such as needles fall below the cutoff and vanish.
|
|
122
|
+
const cutOut = material.alphaTest > 0 || material.alphaTestNode !== null;
|
|
123
|
+
material.contextNode = cutOut ? sharpTextures() : biasedTextures(settings.textureBias);
|
|
121
124
|
// Two ways to store the normals three shades with, each a normal and the share of the
|
|
122
|
-
// surface that shades with it rather than its opposite; the bake
|
|
123
|
-
// normals agree more once averaged (see
|
|
125
|
+
// surface that shades with it rather than its opposite; the bake uses the one whose
|
|
126
|
+
// normals agree more once averaged (see ImpostorAtlasMip):
|
|
124
127
|
// - the surface's own normal and the share whose front faced the camera (on two-sided
|
|
125
128
|
// surfaces three turns the normal toward the camera; this undoes it). Painted canopy
|
|
126
129
|
// normals of cut-out foliage agree this way, which three turns inward on every leaf
|
|
@@ -163,4 +166,39 @@ function changesSpecular(material) {
|
|
|
163
166
|
const { ior, specularIntensity, specularColor: c, specularIntensityMap, specularColorMap } = material;
|
|
164
167
|
return ior !== 1.5 || specularIntensity !== 1 || c.r !== 1 || c.g !== 1 || c.b !== 1 || specularIntensityMap !== null || specularColorMap !== null;
|
|
165
168
|
}
|
|
169
|
+
/** The size in texels of a texture's image, or null when it has none to read. */
|
|
170
|
+
function texelsOf(image) {
|
|
171
|
+
if (typeof image !== "object" || image === null || !("width" in image) || !("height" in image))
|
|
172
|
+
return null;
|
|
173
|
+
const { width, height } = image;
|
|
174
|
+
return typeof width === "number" && typeof height === "number" ? [width, height] : null;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* A context in which every texture read is `bias` mip levels above the level the
|
|
178
|
+
* hardware would pick: the level from the read's own texel footprint, plus `bias`. Reads
|
|
179
|
+
* with uv of their own making, or with an explicit level or gradients, are left as they are.
|
|
180
|
+
*/
|
|
181
|
+
function biasedTextures(bias) {
|
|
182
|
+
return context({
|
|
183
|
+
getTextureLevel: (node) => {
|
|
184
|
+
const texture = node.value;
|
|
185
|
+
const size = texelsOf(texture.image);
|
|
186
|
+
if (node.uvNode || !size)
|
|
187
|
+
return null;
|
|
188
|
+
// The texture's offset, repeat and rotation, as three applies them.
|
|
189
|
+
const at = uniform(texture.matrix).mul(vec3(uv(texture.channel), 1)).xy;
|
|
190
|
+
const texels = at.mul(vec2(size[0], size[1]));
|
|
191
|
+
return log2(max(max(length(dFdx(texels)), length(dFdy(texels))), 1e-6)).add(bias);
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* A context in which every texture read is at level 0, the full detail. Reads with uv of their own making, or with an
|
|
197
|
+
* explicit level or gradients, are left as they are.
|
|
198
|
+
*/
|
|
199
|
+
function sharpTextures() {
|
|
200
|
+
return context({
|
|
201
|
+
getTextureLevel: (node) => (node.uvNode || !texelsOf(node.value.image) ? null : float(0)),
|
|
202
|
+
});
|
|
203
|
+
}
|
|
166
204
|
//# sourceMappingURL=materials.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materials.js","sourceRoot":"","sources":["../../../src/impostor/bake/materials.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"materials.js","sourceRoot":"","sources":["../../../src/impostor/bake/materials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Matrix4, type OrthographicCamera, type Renderer, type Scene } from "three/webgpu";
|
|
2
|
+
import type { ImpostorAtlasMip } from "./atlas.js";
|
|
3
|
+
/**
|
|
4
|
+
* Render every frame (`frameCameras`: camera matrices, in atlas order) into `atlas`, at its
|
|
5
|
+
* cell size × `supersample`. Frames render side by side into sheets of up to SHEET square,
|
|
6
|
+
* so that each map is read back once per sheet, into targets of up to PER_TARGET outputs.
|
|
7
|
+
*/
|
|
8
|
+
export declare function bakeMip(atlas: ImpostorAtlasMip, supersample: number, renderer: Renderer, scene: Scene, camera: OrthographicCamera, frameCameras: Matrix4[]): Promise<void>;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { HalfFloatType, NearestFilter, RenderTarget, Vector2 } from "three/webgpu";
|
|
2
|
+
import { at } from "../../at.js";
|
|
3
|
+
import { readFloats } from "../../bake.js";
|
|
4
|
+
import { nextTask } from "../../task.js";
|
|
5
|
+
import { OUTPUTS } from "./materials.js";
|
|
6
|
+
// Rendering an atlas mip: its frames side by side in sheets, each read back at once.
|
|
7
|
+
/** Edge of the largest target frames render into side by side, a sheet, which is read back at once. */
|
|
8
|
+
const SHEET = 1024;
|
|
9
|
+
/**
|
|
10
|
+
* Colour attachments one target renders: four half-float targets fill the 32 bytes per
|
|
11
|
+
* sample WebGPU guarantees.
|
|
12
|
+
*/
|
|
13
|
+
const PER_TARGET = 4;
|
|
14
|
+
/**
|
|
15
|
+
* Render every frame (`frameCameras`: camera matrices, in atlas order) into `atlas`, at its
|
|
16
|
+
* cell size × `supersample`. Frames render side by side into sheets of up to SHEET square,
|
|
17
|
+
* so that each map is read back once per sheet, into targets of up to PER_TARGET outputs.
|
|
18
|
+
*/
|
|
19
|
+
export async function bakeMip(atlas, supersample, renderer, scene, camera, frameCameras) {
|
|
20
|
+
const { frames, maps } = atlas;
|
|
21
|
+
const side = atlas.cell * supersample;
|
|
22
|
+
const buffer = renderer.getDrawingBufferSize(new Vector2());
|
|
23
|
+
if (buffer.x === side && buffer.y === side)
|
|
24
|
+
throw new Error(`bakeImpostor: the renderer's canvas is ${side} px square, a frame's size: three would draw that frame over the whole sheet`);
|
|
25
|
+
const per = Math.max(1, Math.min(frames, Math.floor(SHEET / side)));
|
|
26
|
+
const width = per * side;
|
|
27
|
+
// one output per map, then the second way to store the normals (see ImpostorAtlasMip), then the specular
|
|
28
|
+
const names = OUTPUTS.filter((name) => (name === "emissive" ? maps.includes("emissive") : name !== "specular" || atlas.specular));
|
|
29
|
+
const targets = Array.from({ length: Math.ceil(names.length / PER_TARGET) }, (_, p) => {
|
|
30
|
+
const outputs = names.slice(p * PER_TARGET, (p + 1) * PER_TARGET);
|
|
31
|
+
const target = new RenderTarget(width, width, {
|
|
32
|
+
count: outputs.length,
|
|
33
|
+
type: HalfFloatType,
|
|
34
|
+
minFilter: NearestFilter,
|
|
35
|
+
magFilter: NearestFilter,
|
|
36
|
+
depthBuffer: true,
|
|
37
|
+
});
|
|
38
|
+
outputs.forEach((name, i) => {
|
|
39
|
+
const texture = target.textures[i];
|
|
40
|
+
if (!texture)
|
|
41
|
+
throw new Error("bakeImpostor: a render target lacks a texture");
|
|
42
|
+
texture.name = name;
|
|
43
|
+
});
|
|
44
|
+
return target;
|
|
45
|
+
});
|
|
46
|
+
try {
|
|
47
|
+
for (let row0 = 0; row0 < frames; row0 += per)
|
|
48
|
+
for (let col0 = 0; col0 < frames; col0 += per) {
|
|
49
|
+
const sheet = [];
|
|
50
|
+
for (let row = row0; row < Math.min(row0 + per, frames); row++)
|
|
51
|
+
for (let col = col0; col < Math.min(col0 + per, frames); col++)
|
|
52
|
+
sheet.push({ col, row, x: (col - col0) * side, y: (row - row0) * side });
|
|
53
|
+
const placed = sheet.map(({ col, row, x, y }) => ({ matrix: at(frameCameras, row * frames + col), x, y }));
|
|
54
|
+
for (const target of targets)
|
|
55
|
+
renderSheet(renderer, target, scene, camera, placed, side);
|
|
56
|
+
const pixels = await Promise.all(targets.flatMap((target) => target.textures.map((_, i) => readFloats(renderer, target, i))));
|
|
57
|
+
for (const { col, row, x, y } of sheet)
|
|
58
|
+
atlas.write(pixels, width, supersample, col, row, x, y);
|
|
59
|
+
// Yield to the page between sheets, so that a long bake does not freeze it.
|
|
60
|
+
await nextTask();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
for (const target of targets)
|
|
65
|
+
target.dispose();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Clear `target` and render each frame, its camera at `matrix`, into its `side` square at (x, y), counted from the
|
|
70
|
+
* bottom left as the atlas is.
|
|
71
|
+
*/
|
|
72
|
+
function renderSheet(renderer, target, scene, camera, frames, side) {
|
|
73
|
+
const previous = renderer.getRenderTarget();
|
|
74
|
+
renderer.setRenderTarget(target);
|
|
75
|
+
try {
|
|
76
|
+
renderer.clear(true, true, true);
|
|
77
|
+
for (const { matrix, x, y } of frames) {
|
|
78
|
+
// WebGPU counts viewport rows from the top; `readFloats` turns the image over.
|
|
79
|
+
const top = target.height - y - side;
|
|
80
|
+
target.viewport.set(x, top, side, side);
|
|
81
|
+
camera.matrix.copy(matrix);
|
|
82
|
+
camera.updateMatrixWorld(true);
|
|
83
|
+
renderer.render(scene, camera);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
renderer.setRenderTarget(previous);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=sheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../src/impostor/bake/sheet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Object3D } from "three/webgpu";
|
|
2
|
-
/**
|
|
3
|
-
export declare function sourceForBake(object: Object3D
|
|
2
|
+
/** A copy of `object` to bake, which the bake may move and change; ImpostorMeshes are refused. */
|
|
3
|
+
export declare function sourceForBake(object: Object3D): Object3D;
|