@drawcall/lod 0.4.0 → 0.5.1
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/dist/at.js.map +1 -1
- package/dist/bake.js.map +1 -1
- package/dist/baked/codec.js.map +1 -1
- package/dist/baked/coverage.js.map +1 -1
- package/dist/baked/fields.js.map +1 -1
- package/dist/baked/index.js.map +1 -1
- package/dist/baked/interior/faces.js.map +1 -1
- package/dist/baked/interior/material.js.map +1 -1
- package/dist/baked/interior/rooms.js.map +1 -1
- package/dist/baked/low.js.map +1 -1
- package/dist/baked/raster.js.map +1 -1
- package/dist/baked/textures.js.map +1 -1
- package/dist/baked/transfer.js.map +1 -1
- package/dist/baked/unwrap.js.map +1 -1
- package/dist/baked/xatlas.js.map +1 -1
- package/dist/codec/container.js.map +1 -1
- package/dist/codec/mesh.js.map +1 -1
- package/dist/dispose.js.map +1 -1
- package/dist/foliage.js.map +1 -1
- package/dist/impostor/bake/atlas.js.map +1 -1
- package/dist/impostor/bake/fit.js.map +1 -1
- package/dist/impostor/bake/index.js.map +1 -1
- package/dist/impostor/bake/materials.js.map +1 -1
- package/dist/impostor/bake/sheet.js.map +1 -1
- package/dist/impostor/bake/source.js.map +1 -1
- package/dist/impostor/codec.js.map +1 -1
- package/dist/impostor/impostor.js.map +1 -1
- package/dist/impostor/ktx2/encode.js.map +1 -1
- package/dist/impostor/ktx2/transcode.js.map +1 -1
- package/dist/impostor/ktx2/uastc.js.map +1 -1
- package/dist/impostor/ktx2/wasm/encoder.js.map +1 -1
- package/dist/impostor/ktx2/wasm/transcoder.js.map +1 -1
- package/dist/impostor/ktx2/worker.js.map +1 -1
- package/dist/impostor/mesh/card.js.map +1 -1
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/impostor/mesh/material.js.map +1 -1
- package/dist/impostor/mesh/surface.js.map +1 -1
- package/dist/impostor/mesh/textures.js.map +1 -1
- package/dist/impostor/octahedral.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/instanced/camera.js.map +1 -1
- package/dist/instanced/clusters.d.ts +18 -4
- package/dist/instanced/clusters.js +32 -11
- package/dist/instanced/clusters.js.map +1 -1
- package/dist/instanced/cull.js.map +1 -1
- package/dist/instanced/instances.js.map +1 -1
- package/dist/instanced/key.js.map +1 -1
- package/dist/instanced/levels.js.map +1 -1
- package/dist/instanced/lists.d.ts +4 -1
- package/dist/instanced/lists.js +4 -2
- package/dist/instanced/lists.js.map +1 -1
- package/dist/instanced/measure.js.map +1 -1
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/mirror.js.map +1 -1
- package/dist/instanced/raycast.js.map +1 -1
- package/dist/instanced/rows.d.ts +8 -1
- package/dist/instanced/rows.js +10 -2
- package/dist/instanced/rows.js.map +1 -1
- package/dist/instanced/shape.js.map +1 -1
- package/dist/instanced/sort.d.ts +8 -4
- package/dist/instanced/sort.js +27 -21
- package/dist/instanced/sort.js.map +1 -1
- package/dist/instanced/update.d.ts +4 -3
- package/dist/instanced/update.js +20 -14
- package/dist/instanced/update.js.map +1 -1
- package/dist/levels/bounds.js.map +1 -1
- package/dist/levels/cameras.js.map +1 -1
- package/dist/levels/compile/contexts.js.map +1 -1
- package/dist/levels/compile/index.js.map +1 -1
- package/dist/levels/compile/pipelines.js.map +1 -1
- package/dist/levels/compiles.js.map +1 -1
- package/dist/levels/draw.js.map +1 -1
- package/dist/levels/fade.js.map +1 -1
- package/dist/levels/index.js.map +1 -1
- package/dist/levels/item.js.map +1 -1
- package/dist/levels/load.js.map +1 -1
- package/dist/levels/manager.js.map +1 -1
- package/dist/levels/material.js.map +1 -1
- package/dist/levels/renderer.js.map +1 -1
- package/dist/levels/requests.js.map +1 -1
- package/dist/levels/screen.js.map +1 -1
- package/dist/loader/build.js.map +1 -1
- package/dist/loader/context.js.map +1 -1
- package/dist/loader/entry.js.map +1 -1
- package/dist/loader/index.js.map +1 -1
- package/dist/loader/level.js.map +1 -1
- package/dist/loader/node.js.map +1 -1
- package/dist/loader/request.js.map +1 -1
- package/dist/loader/url.js.map +1 -1
- package/dist/lod.js +1 -0
- package/dist/lod.js.map +1 -1
- package/dist/meshopt.js.map +1 -1
- package/dist/node-process.js.map +1 -1
- package/dist/node.js.map +1 -1
- package/dist/simplify/cards.js.map +1 -1
- package/dist/simplify/index.js.map +1 -1
- package/dist/source/detail.d.ts +1 -1
- package/dist/source/detail.js +3 -1
- package/dist/source/detail.js.map +1 -1
- package/dist/source/deviation.js.map +1 -1
- package/dist/source/evaluator.js.map +1 -1
- package/dist/source/frame.js.map +1 -1
- package/dist/source/raycaster.js.map +1 -1
- package/dist/source/sampler.js.map +1 -1
- package/dist/source/source.js.map +1 -1
- package/dist/source/surface.js.map +1 -1
- package/dist/task.js.map +1 -1
- package/dist/three.d.ts +2 -1
- package/dist/three.js +1 -0
- package/dist/three.js.map +1 -1
- package/dist/tsl.js.map +1 -1
- package/dist/typegpu.js.map +1 -1
- package/dist/wind/bounds.js.map +1 -1
- package/dist/wind/hooks.js.map +1 -1
- package/dist/wind/index.js.map +1 -1
- package/dist/wind/sway.js.map +1 -1
- package/package.json +1 -1
- package/skills/lod/SKILL.md +1 -1
package/dist/baked/unwrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unwrap.js","sourceRoot":"","sources":["../../src/baked/unwrap.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unwrap.js","sourceRoot":"","sources":["../../src/baked/unwrap.ts"],"names":[],"mappings":"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","sourcesContent":["import { inflateSync } from \"fflate\";\nimport { XATLAS_WASM } from \"./xatlas.js\";\nimport type { Surface } from \"../source/surface.js\";\n\n// xatlas, instantiated from the inlined binary with the few imports its Emscripten build\n// needs. No worker and no wasm URL: either would need bundler-specific syntax, and .glts\n// scripts admit neither dynamic imports nor cross-origin workers. It runs on the calling\n// thread, one atlas at a time.\n\ntype Call = (...args: number[]) => number;\n\ninterface XAtlas {\n memory: WebAssembly.Memory;\n call: (name: string, ...args: number[]) => number;\n}\n\n/** xatlas's WASM module, instantiated once: process-wide, as three's decoders are. */\nlet module: Promise<XAtlas> | undefined;\n\n/**\n * `surface` with a fresh UV atlas for a `size`² texture: xatlas cuts it into charts and\n * packs them with a bilinear-safe padding. Vertices on chart seams are split; the result's\n * attributes follow its new vertices.\n */\nexport async function unwrap(surface: Surface, size: number): Promise<Surface & { uvs: Float32Array }> {\n const xatlas = await (module ??= instantiate());\n const { call } = xatlas;\n const atlas = call(\"xatlasCreate\");\n if (!atlas) throw new Error(\"bakeMesh: xatlas could not create an atlas\");\n const freed: number[] = [];\n const copy = (array: Float32Array | Uint32Array) => {\n const pointer = call(\"malloc\", array.byteLength);\n if (!pointer) throw new Error(\"bakeMesh: xatlas ran out of memory\");\n freed.push(pointer);\n new Uint8Array(xatlas.memory.buffer, pointer, array.byteLength).set(new Uint8Array(array.buffer, array.byteOffset, array.byteLength));\n return pointer;\n };\n try {\n // xatlas::MeshDecl (see xatlas.h), 4 bytes per field.\n const positions = copy(surface.positions);\n const normals = copy(surface.normals);\n const index = copy(surface.index);\n const decl = call(\"malloc\", call(\"xatlasMeshDecl_size\"));\n freed.push(decl);\n call(\"xatlasMeshDeclInit\", decl);\n // Allocations can grow the memory, which detaches earlier views of it. Fields: positions,\n // normals, uvs, indices, faceIgnore, faceMaterial, faceVertexCount, vertexCount, three\n // strides (bytes), indexCount, indexOffset, faceCount, indexFormat (1: 32-bit).\n new Int32Array(xatlas.memory.buffer, decl, 15).set([\n positions,\n normals,\n 0,\n index,\n 0,\n 0,\n 0,\n surface.positions.length / 3,\n 12,\n 12,\n 0,\n surface.index.length,\n 0,\n 0,\n 1,\n ]);\n const error = call(\"xatlasAddMesh\", atlas, decl, 1);\n if (error !== 0) throw new Error(`bakeMesh: xatlas rejected the low mesh (error ${error})`);\n\n call(\"xatlasComputeCharts\", atlas, 0);\n // xatlas::PackOptions. Given only a resolution, xatlas picks a texel density that\n // roughly fills it, and the atlas can come out larger; given a density as well, it\n // packs exactly size² atlases, as many as it needs. So: lower the density it picked\n // until one atlas holds every chart.\n const pack = call(\"malloc\", call(\"xatlasPackOptions_size\"));\n freed.push(pack);\n call(\"xatlasPackOptionsInit\", pack);\n const packCharts = (density: number) => {\n const options = new DataView(xatlas.memory.buffer, pack);\n options.setInt32(4, 2, true); // padding, in texels\n options.setFloat32(8, density, true); // texelsPerUnit\n options.setInt32(12, size, true); // resolution\n call(\"xatlasPackCharts\", atlas, pack);\n };\n packCharts(0);\n let density =\n call(\"xatlasAtlas_getTexelsPerUnit\", atlas) * Math.min(1, size / Math.max(call(\"xatlasAtlas_getWidth\", atlas), call(\"xatlasAtlas_getHeight\", atlas)));\n for (let attempt = 0; ; attempt++) {\n packCharts(density);\n if (call(\"xatlasAtlas_getAtlasCount\", atlas) === 1) break;\n if (attempt === 16) throw new Error(`bakeMesh: xatlas could not pack the low mesh into one ${size}² atlas`);\n density *= 0.9;\n }\n return output(xatlas, atlas, surface, size);\n } finally {\n for (const pointer of freed) call(\"free\", pointer);\n call(\"xatlasDestroy\", atlas);\n }\n}\n\nfunction output({ memory, call }: XAtlas, atlas: number, surface: Surface, size: number): Surface & { uvs: Float32Array } {\n const mesh = call(\"xatlasAtlas_getMesh\", atlas, 0);\n const count = call(\"xatlasMesh_getVertexCount\", mesh);\n const vertices = call(\"xatlasMesh_getVertexArray\", mesh);\n const indexCount = call(\"xatlasMesh_getIndexCount\", mesh);\n const index = new Uint32Array(memory.buffer, call(\"xatlasMesh_getIndexArray\", mesh), indexCount).slice();\n const positions = new Float32Array(count * 3);\n const normals = new Float32Array(count * 3);\n const uvs = new Float32Array(count * 2);\n for (let i = 0; i < count; i++) {\n const from = call(\"xatlasVertex_getXref\", vertices, i);\n positions.set(surface.positions.subarray(from * 3, from * 3 + 3), i * 3);\n normals.set(surface.normals.subarray(from * 3, from * 3 + 3), i * 3);\n // In texels of the atlas, which is the texture.\n uvs[i * 2] = call(\"xatlasVertex_getUV0\", vertices, i) / size;\n uvs[i * 2 + 1] = call(\"xatlasVertex_getUV1\", vertices, i) / size;\n }\n return { positions, normals, uvs, index };\n}\n\nasync function instantiate(): Promise<XAtlas> {\n let memory: WebAssembly.Memory | undefined;\n const heap = () => {\n if (!memory) throw new Error(\"bakeMesh: xatlas is not instantiated\");\n return memory;\n };\n const imports = {\n env: {\n _abort_js: () => {\n throw new Error(\"bakeMesh: xatlas aborted\");\n },\n _emscripten_runtime_keepalive_clear: () => {},\n _setitimer_js: () => 0,\n emscripten_resize_heap: (requested: number) => {\n const current = heap().buffer.byteLength;\n heap().grow(Math.ceil(((requested >>> 0) - current) / 65536));\n return 1;\n },\n },\n wasi_snapshot_preview1: {\n // xatlas prints nothing unless asked; report everything as written.\n fd_write: (_fd: number, iovs: number, count: number, written: number) => {\n const data = new DataView(heap().buffer);\n let bytes = 0;\n for (let i = 0; i < count; i++) bytes += data.getUint32(iovs + i * 8 + 4, true);\n data.setUint32(written, bytes, true);\n return 0;\n },\n proc_exit: (code: number) => {\n throw new Error(`bakeMesh: xatlas exited (${code})`);\n },\n },\n };\n const bytes = inflateSync(Uint8Array.from(atob(XATLAS_WASM), (c) => c.charCodeAt(0)));\n const { exports } = (await WebAssembly.instantiate(bytes, imports)).instance;\n const exported = exports.memory;\n if (!(exported instanceof WebAssembly.Memory)) throw new Error(\"bakeMesh: xatlas exports no memory\");\n memory = exported;\n const functions = new Map<string, Call>();\n const call = (name: string, ...args: number[]) => {\n let f = functions.get(name);\n if (!f) {\n const value = exports[name];\n if (typeof value !== \"function\") throw new Error(`bakeMesh: xatlas exports no ${name}`);\n f = (...a: number[]) => {\n const result: unknown = Reflect.apply(value, undefined, a);\n // Functions returning void give undefined.\n return typeof result === \"number\" ? result : 0;\n };\n functions.set(name, f);\n }\n return f(...args);\n };\n call(\"__wasm_call_ctors\");\n return { memory: exported, call };\n}\n"]}
|
package/dist/baked/xatlas.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xatlas.js","sourceRoot":"","sources":["../../src/baked/xatlas.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,yCAAyC;AACzC,2CAA2C;AAC3C,mCAAmC;AACnC,+EAA+E;AAC/E,uCAAuC;AACvC,sDAAsD;AACtD,oEAAoE;AACpE,EAAE;AACF,cAAc;AACd,EAAE;AACF,uFAAuF;AACvF,wFAAwF;AACxF,qFAAqF;AACrF,qFAAqF;AACrF,sFAAsF;AACtF,cAAc;AACd,EAAE;AACF,wFAAwF;AACxF,2CAA2C;AAC3C,EAAE;AACF,sFAAsF;AACtF,gFAAgF;AAChF,qFAAqF;AACrF,uFAAuF;AACvF,0FAA0F;AAC1F,6CAA6C;AAE7C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,WAAW,GACtB,0p+FAA0p+F,CAAC"}
|
|
1
|
+
{"version":3,"file":"xatlas.js","sourceRoot":"","sources":["../../src/baked/xatlas.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,EAAE;AACF,yCAAyC;AACzC,2CAA2C;AAC3C,mCAAmC;AACnC,+EAA+E;AAC/E,uCAAuC;AACvC,sDAAsD;AACtD,oEAAoE;AACpE,EAAE;AACF,cAAc;AACd,EAAE;AACF,uFAAuF;AACvF,wFAAwF;AACxF,qFAAqF;AACrF,qFAAqF;AACrF,sFAAsF;AACtF,cAAc;AACd,EAAE;AACF,wFAAwF;AACxF,2CAA2C;AAC3C,EAAE;AACF,sFAAsF;AACtF,gFAAgF;AAChF,qFAAqF;AACrF,uFAAuF;AACvF,0FAA0F;AAC1F,6CAA6C;AAE7C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,WAAW,GACtB,0p+FAA0p+F,CAAC","sourcesContent":["// Generated by scripts/xatlas.ts from xatlas-wasm 0.1.3; do not edit.\n//\n// xatlas, https://github.com/jpcy/xatlas\n// Copyright (c) 2018-2020 Jonathan Young\n// Copyright (c) 2013 Thekla, Inc\n// Copyright NVIDIA Corporation 2006 -- Ignacio Castano <icastano@nvidia.com>\n// Copyright (c) 2012 Brandon Pelfrey\n// xatlas-wasm, https://github.com/mode777/xatlas-wasm\n// Copyright (c) Alexander Klingenbeck (MIT, per its package.json)\n//\n// MIT License\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this\n// software and associated documentation files (the \"Software\"), to deal in the Software\n// without restriction, including without limitation the rights to use, copy, modify,\n// merge, publish, distribute, sublicense, and/or sell copies of the Software, and to\n// permit persons to whom the Software is furnished to do so, subject to the following\n// conditions:\n//\n// The above copyright notice and this permission notice shall be included in all copies\n// or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n// PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF\n// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR\n// THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n/** The xatlas WebAssembly binary, deflated, as base64. */\nexport const XATLAS_WASM =\n \"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\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/codec/container.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/codec/container.ts"],"names":[],"mappings":"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","sourcesContent":["// The file layout the codecs share: a JSON header, then files that each start at a multiple of 8 bytes so decode can\n// view them in place, all gzip-compressed. Browsers check the gzip trailer's CRC when they inflate, so a corrupt file\n// fails to decode instead of decoding to wrong values.\n\nexport interface Contents {\n header: unknown;\n files: Uint8Array[];\n}\n\n/** `header` and `files` in one gzip stream. */\nexport async function pack(header: unknown, files: readonly Uint8Array[]): Promise<Uint8Array> {\n const json = new TextEncoder().encode(JSON.stringify({ header, files: files.map((file) => file.byteLength) }));\n const parts: Uint8Array[] = [new Uint8Array(new Uint32Array([json.length]).buffer), json];\n let length = 4 + json.length;\n for (const file of files) {\n const padding = align(length) - length;\n parts.push(new Uint8Array(padding), file);\n length += padding + file.byteLength;\n }\n return transform(new Blob(parts.map(own)), new CompressionStream(\"gzip\"));\n}\n\n/** What `pack` stored; `fail` reports why `bytes` is not such a file. */\nexport async function unpack(bytes: Uint8Array, fail: (why: string, cause?: unknown) => never): Promise<Contents> {\n let raw: Uint8Array;\n try {\n raw = await transform(new Blob([own(bytes)]), new DecompressionStream(\"gzip\"));\n } catch (error) {\n fail(\"corrupt or truncated\", error);\n }\n if (raw.length < 4) fail(\"missing header\");\n const end = 4 + new DataView(raw.buffer).getUint32(0, true);\n if (end > raw.length) fail(\"invalid header length\");\n let contents: unknown;\n try {\n contents = JSON.parse(new TextDecoder().decode(raw.subarray(4, end)));\n } catch (error) {\n fail(\"header is not JSON\", error);\n }\n if (typeof contents !== \"object\" || contents === null || !(\"files\" in contents) || !Array.isArray(contents.files)) fail(\"missing file table\");\n let offset = end;\n const files = contents.files.map((length: unknown) => {\n if (!Number.isSafeInteger(length) || typeof length !== \"number\" || length < 0) fail(\"invalid file length\");\n offset = align(offset);\n if (offset + length > raw.length) fail(\"truncated file\");\n const file = raw.subarray(offset, offset + length);\n offset += length;\n return file;\n });\n if (offset !== raw.length) fail(\"trailing bytes\");\n return { header: \"header\" in contents ? contents.header : undefined, files };\n}\n\n/** The next multiple of 8, the largest element size. */\nconst align = (offset: number): number => Math.ceil(offset / 8) * 8;\n\n/** `bytes` on a plain ArrayBuffer, as Blob takes it; copied only when it is a view of a shared buffer. */\nfunction own(bytes: Uint8Array): Uint8Array<ArrayBuffer> {\n return bytes.buffer instanceof ArrayBuffer ? new Uint8Array(bytes.buffer, bytes.byteOffset, bytes.byteLength) : bytes.slice();\n}\n\nasync function transform(input: Blob, stream: CompressionStream | DecompressionStream): Promise<Uint8Array> {\n return new Uint8Array(await new Response(input.stream().pipeThrough(stream)).arrayBuffer());\n}\n"]}
|
package/dist/codec/mesh.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh.js","sourceRoot":"","sources":["../../src/codec/mesh.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mesh.js","sourceRoot":"","sources":["../../src/codec/mesh.ts"],"names":[],"mappings":"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","sourcesContent":["import { MeshoptEncoder } from \"meshoptimizer\";\nimport {\n Box3,\n BufferAttribute,\n BufferGeometry,\n Float16BufferAttribute,\n FloatType,\n Group,\n IntType,\n Mesh,\n Object3D,\n Scene,\n Sphere,\n Vector3,\n type InterleavedBufferAttribute,\n type Material,\n type TypedArrayConstructor,\n} from \"three/webgpu\";\nimport { pack, unpack } from \"./container.js\";\nimport { meshoptDecoder } from \"../meshopt.js\";\nimport { isInstancedMesh, isLOD, isMesh, isSkinnedMesh } from \"../three.js\";\n\n// The file format of a simplified level: a static hierarchy's geometry and material slots, drawn with its source's\n// materials.\n\nconst arrays: Record<string, TypedArrayConstructor> = {\n Int8Array,\n Uint8Array,\n Uint8ClampedArray,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n};\nconst containers: Record<string, new () => Object3D> = { Scene, Group, Object3D };\n\n/** The significant bits a float attribute holds, of its 24: each value moves by at most 2^-17 of its magnitude. */\nconst BITS = 18;\n\n/**\n * Store a static hierarchy's geometry and material slots. Decode with the same ordered material list; materials and textures are never serialized.\n * Attributes and indices are meshopt-encoded, and float attributes hold `BITS` significant bits, as meshopt's exponential filter stores them.\n */\nexport async function encodeMeshAsync(object: Object3D, materials: readonly Material[]): Promise<Uint8Array> {\n await MeshoptEncoder.ready;\n const files: Uint8Array[] = [];\n const geometries: BufferGeometry[] = [];\n function attribute(value: BufferAttribute | InterleavedBufferAttribute, index: boolean) {\n if (value instanceof Float16BufferAttribute) fail(\"unsupported float16 attribute\");\n const packed = value instanceof BufferAttribute ? value.array : value.array.slice(0, value.count * value.itemSize);\n if (!(value instanceof BufferAttribute))\n for (let i = 0; i < value.count; i++) {\n const offset = i * value.data.stride + value.offset;\n packed.set(value.array.subarray(offset, offset + value.itemSize), i * value.itemSize);\n }\n const stride = packed.BYTES_PER_ELEMENT * value.itemSize;\n const mode = index ? (stride === 2 || stride === 4 ? (value.count % 3 ? \"INDICES\" : \"TRIANGLES\") : null) : stride % 4 || stride > 256 ? null : \"ATTRIBUTES\";\n const floats = mode === \"ATTRIBUTES\" && packed instanceof Float32Array ? packed : undefined;\n const bytes = floats\n ? MeshoptEncoder.encodeFilterExp(floats, value.count, stride, BITS, \"Separate\")\n : new Uint8Array(packed.buffer, packed.byteOffset, packed.byteLength);\n files.push(mode ? MeshoptEncoder.encodeGltfBuffer(bytes, value.count, stride, mode, 1) : bytes);\n return {\n file: files.length - 1,\n type: packed.constructor.name,\n count: value.count,\n size: value.itemSize,\n mode,\n filter: floats ? \"EXPONENTIAL\" : null,\n normalized: value.normalized,\n gpuType: value instanceof BufferAttribute ? value.gpuType : FloatType,\n };\n }\n function node(value: Object3D): Record<string, unknown> {\n if (isLOD(value) || isSkinnedMesh(value) || isInstancedMesh(value) || ![\"Mesh\", \"Group\", \"Scene\", \"Object3D\"].includes(value.type))\n fail(`cannot persist ${value.type}; sources must contain static meshes and groups`);\n if (value.matrixAutoUpdate) value.updateMatrix();\n const geometry = isMesh(value) ? value.geometry : undefined;\n if (geometry && !geometries.includes(geometry)) geometries.push(geometry);\n const slot = (material: Material) => {\n const index = materials.indexOf(material);\n if (index < 0) fail(`material \"${material.name}\" is not in the source`);\n return index;\n };\n return {\n type: value.type,\n name: value.name,\n matrix: value.matrix.toArray(),\n matrixAutoUpdate: value.matrixAutoUpdate,\n matrixWorldAutoUpdate: value.matrixWorldAutoUpdate,\n visible: value.visible,\n castShadow: value.castShadow,\n receiveShadow: value.receiveShadow,\n frustumCulled: value.frustumCulled,\n renderOrder: value.renderOrder,\n layers: value.layers.mask,\n data: value.userData,\n children: value.children.map(node),\n geometry: geometry && geometries.indexOf(geometry),\n material: isMesh(value) ? (Array.isArray(value.material) ? value.material.map(slot) : slot(value.material)) : undefined,\n };\n }\n const root = node(object);\n const geometry = geometries.map((value) => {\n if (Object.keys(value.morphAttributes).length) fail(\"cannot persist morph targets\");\n return {\n bounds: bounds(value),\n name: value.name,\n data: value.userData,\n groups: value.groups.map((group) => [group.start, group.count, group.materialIndex ?? 0]),\n range: [value.drawRange.start, value.drawRange.count === Infinity ? null : value.drawRange.count],\n attributes: Object.fromEntries(Object.entries(value.attributes).map(([name, value]) => [name, attribute(value, false)])),\n index: value.index && attribute(value.index, true),\n };\n });\n return pack({ version: 3, root, geometry }, files);\n}\n\n/** The hierarchy `encodeMeshAsync` stored, drawn with `materials`, which stay the caller's to free. */\nexport async function decodeMeshAsync(input: Uint8Array, materials: readonly Material[]): Promise<Object3D> {\n const { header, files } = await unpack(input, fail);\n const meta = record(header);\n if (meta.version !== 3) fail(\"unsupported version; encode it again\");\n const decoder = meshoptDecoder();\n async function attribute(value: unknown): Promise<BufferAttribute> {\n const meta = record(value);\n const Type = arrays[string(meta.type)] ?? fail(\"unsupported attribute type\");\n const file = files[integer(meta.file)] ?? fail(\"missing attribute file\");\n const count = integer(meta.count);\n const size = integer(meta.size);\n const stride = Type.BYTES_PER_ELEMENT * size;\n const mode = meta.mode === null ? null : string(meta.mode);\n const filter = meta.filter === null ? undefined : string(meta.filter);\n if (!size || (mode === null && file.length !== count * stride)) fail(\"invalid attribute length\");\n const { buffer, byteOffset } = mode === null ? file : await decoder.decodeGltfBufferAsync(count, stride, file, mode, filter);\n if (!(buffer instanceof ArrayBuffer)) fail(\"shared attribute data\");\n const array = new Type(buffer, byteOffset, count * size);\n const result = new BufferAttribute(array, size, boolean(meta.normalized));\n if (meta.gpuType !== FloatType && meta.gpuType !== IntType) fail(\"invalid attribute gpuType\");\n result.gpuType = meta.gpuType;\n return result;\n }\n const geometries = await Promise.all(\n list(meta.geometry).map(async (value) => {\n const meta = record(value);\n const geometry = new BufferGeometry();\n geometry.name = string(meta.name);\n geometry.userData = record(meta.data);\n const attributes = Object.entries(record(meta.attributes));\n const decoded = await Promise.all(attributes.map(([, value]) => attribute(value)));\n attributes.forEach(([name], i) => geometry.setAttribute(name, decoded[i] ?? fail(\"missing attribute\")));\n if (meta.index !== null) geometry.setIndex(await attribute(meta.index));\n for (const value of list(meta.groups)) {\n const group = list(value);\n geometry.addGroup(integer(group[0]), integer(group[1]), integer(group[2]));\n }\n const range = list(meta.range);\n geometry.setDrawRange(integer(range[0]), range[1] === null ? Infinity : integer(range[1]));\n if (meta.bounds !== null) {\n const values = list(meta.bounds).map(number);\n if (values.length !== 10) fail(\"invalid bounds\");\n geometry.boundingBox = new Box3().setFromArray(values.slice(0, 6));\n geometry.boundingSphere = new Sphere(new Vector3().fromArray(values, 6), values[9]);\n }\n return geometry;\n }),\n );\n const material = (value: unknown): Material => materials[integer(value)] ?? fail(\"missing source material\");\n function node(value: unknown): Object3D {\n const meta = record(value);\n const geometry = meta.type === \"Mesh\" ? (geometries[integer(meta.geometry)] ?? fail(\"missing geometry\")) : undefined;\n const result = geometry\n ? new Mesh(geometry, Array.isArray(meta.material) ? meta.material.map(material) : material(meta.material))\n : new (containers[string(meta.type)] ?? fail(\"unsupported node type\"))();\n result.name = string(meta.name);\n const matrix = list(meta.matrix);\n if (matrix.length !== 16) fail(\"invalid matrix\");\n result.matrix.fromArray(matrix.map(number));\n result.matrix.decompose(result.position, result.quaternion, result.scale);\n for (const key of [\"matrixAutoUpdate\", \"matrixWorldAutoUpdate\", \"visible\", \"castShadow\", \"receiveShadow\", \"frustumCulled\"] as const)\n result[key] = boolean(meta[key]);\n result.renderOrder = number(meta.renderOrder);\n result.layers.mask = number(meta.layers);\n result.userData = record(meta.data);\n for (const child of list(meta.children)) result.add(node(child));\n return result;\n }\n return node(meta.root);\n}\n\n/**\n * The box and sphere three computes from the positions, stored so decode does not walk them; null without positions. They\n * bound the positions before the filter, which may move a vertex out of them by 2^-17 of its coordinates.\n */\nfunction bounds(geometry: BufferGeometry): number[] | null {\n if (!geometry.getAttribute(\"position\")) return null;\n geometry.computeBoundingBox();\n geometry.computeBoundingSphere();\n const { boundingBox: box, boundingSphere: sphere } = geometry;\n if (!box || !sphere) fail(\"missing bounds\");\n return [...box.min.toArray(), ...box.max.toArray(), ...sphere.center.toArray(), sphere.radius];\n}\n\nfunction fail(reason: string, cause?: unknown): never {\n throw new Error(`Invalid mesh cache (${reason})`, { cause });\n}\nfunction record(value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) fail(\"expected object\");\n return Object.fromEntries(Object.entries(value));\n}\nfunction list(value: unknown): unknown[] {\n return Array.isArray(value) ? value : fail(\"expected array\");\n}\nfunction string(value: unknown): string {\n return typeof value === \"string\" ? value : fail(\"expected string\");\n}\nfunction boolean(value: unknown): boolean {\n return typeof value === \"boolean\" ? value : fail(\"expected boolean\");\n}\nfunction number(value: unknown): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : fail(\"expected finite number\");\n}\nfunction integer(value: unknown): number {\n const result = number(value);\n return Number.isSafeInteger(result) && result >= 0 ? result : fail(\"expected nonnegative integer\");\n}\n"]}
|
package/dist/dispose.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispose.js","sourceRoot":"","sources":["../src/dispose.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpG,6FAA6F;AAE7F,wGAAwG;AACxG,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IACD,0HAA0H;IAC1H,2EAA2E;IAC3E,IAAI,eAAe,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,OAAO,EAAE,CAAC;;QACrC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;QAAE,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAQD,wFAAwF;AACxF,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,EAAE,SAAS,KAAqB,EAAE,SAAS,EAAE,IAAI,EAAE;IAClG,gGAAgG;IAChG,IAAI,CAAC,OAAO,EAAE,CAAC;IACf,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC;QAAE,OAAO;IACrE,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,SAAS;YAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;QAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAU;IAClC,KAAK,MAAM,QAAQ,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,MAAM,GAAc,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,MAAM;YAAE,IAAI,SAAS,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAClE,QAAQ,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,eAAe,CAAC,IAAc,EAAE,OAAwB;IACtE,IAAI,CAAC;QACH,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"dispose.js","sourceRoot":"","sources":["../src/dispose.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpG,6FAA6F;AAE7F,wGAAwG;AACxG,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IACD,0HAA0H;IAC1H,2EAA2E;IAC3E,IAAI,eAAe,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,OAAO,EAAE,CAAC;;QACrC,IAAI,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;QAAE,aAAa,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAQD,wFAAwF;AACxF,MAAM,UAAU,gBAAgB,CAAC,IAAc,EAAE,EAAE,SAAS,KAAqB,EAAE,SAAS,EAAE,IAAI,EAAE;IAClG,gGAAgG;IAChG,IAAI,CAAC,OAAO,EAAE,CAAC;IACf,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC;QAAE,OAAO;IACrE,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,SAAS;YAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;QAAE,gBAAgB,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAU;IAClC,KAAK,MAAM,QAAQ,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,MAAM,GAAc,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClD,KAAK,MAAM,KAAK,IAAI,MAAM;YAAE,IAAI,SAAS,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAClE,QAAQ,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,eAAe,CAAC,IAAc,EAAE,OAAwB;IACtE,IAAI,CAAC;QACH,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC","sourcesContent":["import type { Mesh, Object3D } from \"three/webgpu\";\nimport { originalOf } from \"./levels/material.js\";\nimport { isGLTSScene, isImpostorMesh, isInstancedMesh, isLOD, isMesh, isTexture } from \"./three.js\";\n\n// Freeing what a tree of objects holds: whoever made a tree frees it, and only what it made.\n\n/** Clones share source geometry, materials and textures; only their own draw state is released here. */\nexport function disposeCopies(node: Object3D): void {\n if (isImpostorMesh(node) || isLOD(node)) {\n node.dispose();\n return;\n }\n // An InstancedMesh's clone has instance buffers of its own. Any other node fires what Object3D.dispose fires, which frees\n // its draw state: a subclass's own dispose may free what the clone shares.\n if (isInstancedMesh(node)) node.dispose();\n else node.dispatchEvent({ type: \"dispose\" });\n for (const child of node.children) disposeCopies(child);\n}\n\n/** What `disposeRecursive` frees beside geometry and draw state. */\nexport interface DisposeOptions {\n /** whether the tree's materials and their textures are its own; false for a tree drawn with its source's, as a simplified level is */\n materials: boolean;\n}\n\n/** Free what `node` and its descendants hold; a LOD or an ImpostorMesh frees itself. */\nexport function disposeRecursive(node: Object3D, { materials }: DisposeOptions = { materials: true }): void {\n // Every object frees its draw state; an ImpostorMesh, a Lod and a GLTS scene free the rest too.\n node.dispose();\n if (isImpostorMesh(node) || isLOD(node) || isGLTSScene(node)) return;\n if (isMesh(node)) {\n node.geometry.dispose();\n if (materials) disposeMaterials(node);\n }\n for (const child of node.children) disposeRecursive(child, { materials });\n}\n\n/**\n * Free `mesh`'s materials and their textures: the originals of level copies, which free their copies (see\n * `levelMaterial`). Images stay open: another object, or three's Cache, may share them and upload them again.\n */\nfunction disposeMaterials(mesh: Mesh): void {\n for (const material of new Set([mesh.material].flat().map(originalOf))) {\n const values: unknown[] = Object.values(material);\n for (const value of values) if (isTexture(value)) value.dispose();\n material.dispose();\n }\n}\n\n/** Cleanup must not replace the failure that rejected a load or prevent the other levels from being released. */\nexport function disposeRejected(node: Object3D, options?: DisposeOptions): void {\n try {\n disposeRecursive(node, options);\n } catch (error) {\n console.error(\"CachedLodLoader: failed to dispose a rejected load\", error);\n }\n}\n"]}
|
package/dist/foliage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foliage.js","sourceRoot":"","sources":["../src/foliage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"foliage.js","sourceRoot":"","sources":["../src/foliage.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Color,\n ConvertNode,\n MeshStandardNodeMaterial,\n PhysicalLightingModel,\n TSL,\n type ColorRepresentation,\n type Material,\n type Node,\n type NodeBuilder,\n type Object3D,\n type Texture,\n} from \"three/webgpu\";\nimport {\n Fn,\n color,\n dFdx,\n dFdy,\n dot,\n log2,\n materialColor,\n materialOpacity,\n max,\n normalView,\n positionViewDirection,\n pow,\n saturate,\n uv,\n vec2,\n vec3,\n vec4,\n} from \"three/tsl\";\nimport { cosine } from \"./impostor/mesh/surface.js\";\nimport { isImpostorMesh, isMesh, isShadowPass, isStandard } from \"./three.js\";\nimport { isNodeOf } from \"./tsl.js\";\n\nexport interface FoliageOptions {\n /** Share of sunlight a leaf passes on to its shaded side (0–1). */\n translucency: number;\n /** Colour of the transmitted light relative to the leaf's own: thin leaves glow yellow-green. Default #e4ff8a. */\n tint?: ColorRepresentation;\n}\n\nconst TINT = \"#e4ff8a\";\n\n/**\n * A leaf material, lit with translucency: sunlight hitting the far side of a thin leaf shows on the near side, so\n * back-lit leaves glow instead of turning black. It rides on the direct-light term, so it is shadowed exactly like front\n * light. Set up by `foliage`. Its own class so that the copies levels draw with (clones) keep it.\n */\nexport class Foliage extends MeshStandardNodeMaterial {\n translucency = 0;\n readonly tint = new Color(1, 1, 1);\n\n override copy(source: Material): this {\n super.copy(source);\n // NodeMaterial.copy skips Material accessors, including the cutout threshold.\n this.alphaTest = source.alphaTest;\n if (source instanceof Foliage) {\n this.translucency = source.translucency;\n this.tint.copy(source.tint);\n }\n return this;\n }\n\n override setupLightingModel(): PhysicalLightingModel {\n return new Translucent(transmitted(leafBehind, this.translucency, this.tint));\n }\n\n // The lighting model is no node: materials alike in their nodes would share a shader.\n override customProgramCacheKey(): string {\n return `${super.customProgramCacheKey()}|foliage-${this.translucency}-${this.tint.getHexString()}`;\n }\n}\n\n/**\n * Makes `material` foliage with `options`. Cut-out leaves also get alpha to coverage and a mip-dependent alpha boost, in\n * the view and in shadow maps alike: plain alpha testing loses coverage in smaller mips, which makes distant needles and\n * leaves vanish.\n */\nexport function foliage(material: Foliage, { translucency, tint = TINT }: FoliageOptions): Foliage {\n material.translucency = translucency;\n material.tint.set(tint);\n if (!(material.alphaTest > 0 && material.map)) return material;\n material.alphaToCoverage = true;\n const boost = boostOf(material.map);\n material.opacityNode = materialOpacity.mul(boost);\n // A shadow pass multiplies the map's alpha by the colour's: there the colour is the boost alone.\n material.colorNode = Fn((builder: NodeBuilder) => (isShadowPass(builder.material) ? vec4(vec3(1), boost) : baseColor))();\n return material;\n}\n\n/** Turns every alpha-tested standard material under `root`, such as a loaded plant model's leaves, into foliage. */\nexport function foliageModel(root: Object3D, options: FoliageOptions): void {\n const made = new Map<Material, Foliage>();\n const swap = (material: Material): Material => {\n if (!isStandard(material) || material.alphaTest === 0) return material;\n let leaf = made.get(material);\n if (!leaf) made.set(material, (leaf = foliage(new Foliage().copy(material), options)));\n return leaf;\n };\n root.traverse((node) => {\n if (isMesh(node)) node.material = Array.isArray(node.material) ? node.material.map(swap) : swap(node.material);\n });\n}\n\n/**\n * Adds leaf translucency to the lighting of the impostors under `root`, such as an `onLevel` level: the bake holds no\n * light passing through a leaf.\n */\nexport function foliageLevels(root: Object3D, { translucency, tint = TINT }: FoliageOptions): void {\n const shade = new Color(tint);\n root.traverse((node) => {\n if (!isImpostorMesh(node)) return;\n const { material } = node;\n // The mean over the leaves a texel averages: its one unit normal would light them all one way.\n material.directTerm = transmitted((direction) => cosine(material.spread, direction.negate()), translucency, shade);\n });\n}\n\n/**\n * A material's colour times its map, its alpha included: three's `materialColor`, which builds to a vec4 where the\n * material has a map, and to a vec3 (typed so) where not.\n */\nconst baseColor = Fn(() => {\n const base = vec4(1).toVar();\n base.assign(materialColor);\n return base;\n})();\n\n/** Boosts alpha by the mip `map` is read at. */\nfunction boostOf(map: Texture) {\n const image: unknown = map.image;\n if (\n typeof image !== \"object\" ||\n image === null ||\n !(\"width\" in image) ||\n !(\"height\" in image) ||\n typeof image.width !== \"number\" ||\n typeof image.height !== \"number\"\n )\n throw new Error(`@drawcall/lod: the leaves' map \"${map.name}\" has no image to measure`);\n const texel = uv().mul(vec2(image.width, image.height));\n const mip = max(log2(max(dot(dFdx(texel), dFdx(texel)), dot(dFdy(texel), dFdy(texel)))).mul(0.5), 0);\n return mip.mul(0.25).add(1);\n}\n\n/** The share of a leaf's sunlight arriving on its far side, by its normal. */\nconst leafBehind = (direction: Node<\"vec3\">) => saturate(dot(normalView, direction).negate());\n\n/**\n * The light passing through a leaf from a direct light in `direction`, of that light × the leaf's colour: `behind` the\n * share arriving on its far side.\n */\nfunction transmitted(behind: (direction: Node<\"vec3\">) => Node<\"float\">, share: number, tint: Color) {\n return (direction: Node<\"vec3\">): Node<\"vec3\"> => {\n // light scatters forward through the leaf: strongest when looking toward the sun\n const forward = pow(saturate(dot(positionViewDirection, direction.negate())), 3)\n .mul(0.65)\n .add(0.35);\n return behind(direction).mul(forward).mul(share).mul(color(tint));\n };\n}\n\n/** Three's lighting with `term` of each direct light's direction added, of that light × the surface's colour. */\nclass Translucent extends PhysicalLightingModel {\n constructor(private readonly term: (direction: Node<\"vec3\">) => Node<\"vec3\">) {\n super();\n }\n\n override direct(input: Parameters<PhysicalLightingModel[\"direct\"]>[0], builder: NodeBuilder): void {\n super.direct(input, builder);\n const { lightDirection, lightColor, reflectedLight } = input;\n const { directDiffuse } = reflectedLight;\n if (!isNodeOf(lightDirection, \"vec3\", builder) || !isNodeOf(directDiffuse, \"vec3\", builder))\n throw new Error(\"@drawcall/lod: three's direct light is not a direction and a sum\");\n // Converted, not asked its type: asked here, before its shadow is set up, three (0.186) answers a colour, keeps\n // that, and writes invalid WGSL for the shadow's vec4.\n const light = vec3(new ConvertNode<\"vec3\">(lightColor, \"vec3\"));\n directDiffuse.addAssign(this.term(lightDirection).mul(light).mul(TSL.diffuseContribution));\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atlas.js","sourceRoot":"","sources":["../../../src/impostor/bake/atlas.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"atlas.js","sourceRoot":"","sources":["../../../src/impostor/bake/atlas.ts"],"names":[],"mappings":"AAEA,6FAA6F;AAE7F,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAE5H,MAAM,UAAU,GAAG;IACjB,CAAC,CAAC,EAAE,CAAC,CAAC;IACN,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACP,CAAC,CAAC,EAAE,CAAC,CAAC;IACN,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACC,CAAC;AAEX;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAgB;IAYhB;IACA;IACA;IACA;IAdF,IAAI,CAAS;IACb,MAAM,CAAe;IACrB,QAAQ,CAAe;IAChC,+EAA+E;IACtE,MAAM,CAAa;IAC5B,mGAAmG;IAC1F,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAC3C,kFAAkF;IACjE,WAAW,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IAEpE,YACW,IAAmB,EACnB,MAAc,EACd,IAAY,EACZ,QAAiB;QAHjB,SAAI,GAAJ,IAAI,CAAe;QACnB,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAS;QAE1B,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,gFAAgF;IAChF,SAAS;QACP,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACzE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,GAAgB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,QAAQ,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAsB,EAAE,KAAa,EAAE,EAAU,EAAE,GAAW,EAAE,GAAW,EAAE,EAAU,EAAE,EAAU;QACvG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QACvB,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,sGAAsG,CAAC,CAAC;QAC1H,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,EAAE,QAAiB,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC3D,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBACxD,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;oBAAE,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;wBAAE,MAAM,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBACxH,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;gBAC/B,IAAI,MAAM,KAAK,CAAC;oBAAE,SAAS;gBAC3B,oEAAoE;gBACpE,MAAM,OAAO,GAAG,CAAC,MAAoB,EAAoC,EAAE;oBACzE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAChC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;wBAC5B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;4BAC/B,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;4BACxC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;4BAC5B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;4BAC1B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;4BAC9B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;4BAC9B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;wBAChC,CAAC;oBACH,OAAO,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;gBAC1D,CAAC,CAAC;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;oBAC7B,GAAG,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;oBAC7E,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC;gBACxB,CAAC;gBACD,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;oBACzB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,KAAK,GAAG,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACzD,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK;wBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;oBACvF,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;oBACrC,IAAI,GAAG,KAAK,aAAa;wBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACrG,IAAI,GAAG,KAAK,QAAQ;wBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnG,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,UAAU,CAAC,CAAC;gBACjG,CAAC,CAAC,CAAC;YACL,CAAC;IACL,CAAC;IAED,0EAA0E;IAC1E,YAAY;QACV,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC9G,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;QACtE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,kDAAkD;IAClD,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,WAAW;QACT,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;YAAE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;gBAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACpH,CAAC;IAEO,UAAU,CAAC,GAAW,EAAE,GAAW;QACzC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAC5B,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC;QACtB,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAC1C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE;gBAC3B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvD,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACzB,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;gBAC/B,CAAC;QACL,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;YACpB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;YAC3B,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YAC9C,KAAK,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;gBAClC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACnB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;gBACnB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,MAAM,CAAC,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;oBAAE,SAAS;gBACrF,MAAM,CAAC,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBAC3B,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;gBAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;gBAC5C,qFAAqF;gBACrF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;wBAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnE,CAAC,CAAC,CAAC;gBACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,SAAS,KAAK,CAAC,KAAiB,EAAE,GAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAA4C,EAAE,IAAa;IACnH,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAClE,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AACvC,CAAC","sourcesContent":["import type { ImpostorMap } from \"../impostor.js\";\n\n// Typed-array reads below are in bounds; their `?? 0` only answers noUncheckedIndexedAccess.\n\nconst toSrgb = (c: number): number => Math.round(255 * (c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055));\n\nconst NEIGHBOURS = [\n [1, 0],\n [-1, 0],\n [0, 1],\n [0, -1],\n] as const;\n\n/**\n * One mip of the atlas being baked: one RGBA8 layer per map, plus each texel's coverage.\n * The bake stores the normals two ways (see its materials): the maps hold the surface's\n * own normals, `turned` the shading normals turned toward the camera, each with the share\n * of the surface that shades with the normal rather than its opposite (in orm.a). One way\n * serves the whole impostor, as texels filtered together must mean the same thing.\n * With `specular`, the bake also writes each surface's dielectric specular, of which only\n * the coverage-weighted sum is stored, for its mean.\n */\nexport class ImpostorAtlasMip {\n readonly size: number;\n readonly layers: Uint8Array[];\n readonly coverage: Float32Array;\n /** Turned normal in RGB, the share of the surface that shades with it in A. */\n readonly turned: Uint8Array;\n /** How far each way's normals agree, summed over the texels by coverage: the averages' lengths. */\n readonly agreement = { own: 0, turned: 0 };\n /** F0 RGB and F90 summed over the texels by coverage, and the coverage summed. */\n private readonly specularSum = { value: [0, 0, 0, 0], coverage: 0 };\n\n constructor(\n readonly maps: ImpostorMap[],\n readonly frames: number,\n readonly cell: number,\n readonly specular: boolean,\n ) {\n this.size = frames * cell;\n this.layers = maps.map(() => new Uint8Array(this.size * this.size * 4));\n this.coverage = new Float32Array(this.size * this.size);\n this.turned = new Uint8Array(this.size * this.size * 4);\n }\n\n /** Use the turned normals: write them over the own normals and their shares. */\n useTurned(): void {\n const normalDepth = this.layer(\"normalDepth\");\n const orm = this.layer(\"orm\");\n for (let i = 0; i < this.turned.length; i += 4) {\n for (let k = 0; k < 3; k++) normalDepth[i + k] = this.turned[i + k] ?? 0;\n orm[i + 3] = this.turned[i + 3] ?? 0;\n }\n }\n\n private layer(map: ImpostorMap): Uint8Array {\n const layer = this.layers[this.maps.indexOf(map)];\n if (!layer) throw new Error(`ImpostorAtlasMip: no ${map} layer`);\n return layer;\n }\n\n /**\n * Box-filter one supersampled frame into cell (col, row): the `cell * ss` square at\n * (x0, y0) of `pixels[m]`, map m as RGBA floats `width` wide, then the turned normals,\n * then the specular if baked.\n * Every value is weighted by coverage, so the silhouette's colour is the object's colour\n * rather than a mix with the cleared background; coverage itself is the plain average.\n */\n write(pixels: Float32Array[], width: number, ss: number, col: number, row: number, x0: number, y0: number): void {\n const { cell, size, maps, layers } = this;\n const [alpha] = pixels;\n if (!alpha || pixels.length !== maps.length + (this.specular ? 2 : 1))\n throw new Error(\"ImpostorAtlasMip.write: one pixel array per map, then the turned normals, then the specular if baked\");\n const sources = [...maps, \"turned\" as const];\n const specular = this.specular ? pixels[maps.length + 1] : undefined;\n for (let y = 0; y < cell; y++)\n for (let x = 0; x < cell; x++) {\n const out = ((row * cell + y) * size + col * cell + x) * 4;\n const first = ((y0 + y * ss) * width + x0 + x * ss) * 4;\n let weight = 0;\n for (let sy = 0; sy < ss; sy++) for (let sx = 0; sx < ss; sx++) weight += alpha[first + (sy * width + sx) * 4 + 3] ?? 0;\n const cover = weight / (ss * ss);\n this.coverage[out / 4] = cover;\n if (weight === 0) continue;\n // The coverage-weighted mean of `source` over this texel's samples.\n const average = (source: Float32Array): [number, number, number, number] => {\n let [r, g, b, a] = [0, 0, 0, 0];\n for (let sy = 0; sy < ss; sy++)\n for (let sx = 0; sx < ss; sx++) {\n const i = first + (sy * width + sx) * 4;\n const w = alpha[i + 3] ?? 0;\n r += (source[i] ?? 0) * w;\n g += (source[i + 1] ?? 0) * w;\n b += (source[i + 2] ?? 0) * w;\n a += (source[i + 3] ?? 0) * w;\n }\n return [r / weight, g / weight, b / weight, a / weight];\n };\n if (specular) {\n const sum = this.specularSum;\n sum.value = average(specular).map((v, k) => (sum.value[k] ?? 0) + cover * v);\n sum.coverage += cover;\n }\n sources.forEach((map, m) => {\n const source = pixels[m];\n const layer = map === \"turned\" ? this.turned : layers[m];\n if (!source || !layer) throw new Error(`ImpostorAtlasMip.write: no pixels for ${map}`);\n const [r, g, b, a] = average(source);\n if (map === \"normalDepth\") this.agreement.own += cover * Math.hypot(r * 2 - 1, g * 2 - 1, b * 2 - 1);\n if (map === \"turned\") this.agreement.turned += cover * Math.hypot(r * 2 - 1, g * 2 - 1, b * 2 - 1);\n store(layer, out, [r, g, b, map === \"base\" ? cover : a], map === \"base\" || map === \"emissive\");\n });\n }\n }\n\n /** The coverage-weighted mean of the baked specular: F0 RGB, then F90. */\n meanSpecular(): [number, number, number, number] {\n const { value, coverage } = this.specularSum;\n if (!this.specular || coverage === 0) throw new Error(\"ImpostorAtlasMip.meanSpecular: no specular was baked\");\n const [r = 0, g = 0, b = 0, f90 = 0] = value.map((v) => v / coverage);\n return [r, g, b, f90];\n }\n\n /** Whether any texel of any frame was covered. */\n covered(): boolean {\n return this.coverage.some((c) => c > 0);\n }\n\n /**\n * Give every uncovered texel of every cell the values of its nearest covered texel\n * (breadth-first, within the cell). Filtering and mips then only ever read the object's\n * own colours, normals and depths near the silhouette. Coverage stays zero.\n */\n fillGutters(): void {\n for (let row = 0; row < this.frames; row++) for (let col = 0; col < this.frames; col++) this.fillGutter(col, row);\n }\n\n private fillGutter(col: number, row: number): void {\n const { cell, size } = this;\n const x0 = col * cell;\n const y0 = row * cell;\n const filled = new Uint8Array(cell * cell);\n const queue = new Int32Array(cell * cell);\n let tail = 0;\n for (let y = 0; y < cell; y++)\n for (let x = 0; x < cell; x++)\n if ((this.coverage[(y0 + y) * size + x0 + x] ?? 0) > 0) {\n filled[y * cell + x] = 1;\n queue[tail++] = y * cell + x;\n }\n for (let head = 0; head < tail; head++) {\n const p = queue[head] ?? 0;\n const px = p % cell;\n const py = (p - px) / cell;\n const from = ((y0 + py) * size + x0 + px) * 4;\n for (const [dx, dy] of NEIGHBOURS) {\n const nx = px + dx;\n const ny = py + dy;\n if (nx < 0 || ny < 0 || nx >= cell || ny >= cell || filled[ny * cell + nx]) continue;\n filled[ny * cell + nx] = 1;\n queue[tail++] = ny * cell + nx;\n const to = ((y0 + ny) * size + x0 + nx) * 4;\n // Base coverage stays zero; the other layers' alpha is data (depth) and spreads too.\n this.layers.forEach((layer, m) => {\n const n = this.maps[m] === \"base\" ? 3 : 4;\n for (let k = 0; k < n; k++) layer[to + k] = layer[from + k] ?? 0;\n });\n for (let k = 0; k < 4; k++) this.turned[to + k] = this.turned[from + k] ?? 0;\n }\n }\n }\n}\n\n/**\n * Pack one texel into `layer` at byte `out`: colour as sRGB if `srgb`, the rest linearly.\n * An averaged normal is not renormalised: its length says how far the normals it averages\n * agree, and is lit by. Renormalised, a texel of leaves facing every which way would light\n * as one smooth surface turned to the camera.\n */\nfunction store(layer: Uint8Array, out: number, [r, g, b, a]: readonly [number, number, number, number], srgb: boolean): void {\n const encode = srgb ? toSrgb : (v: number) => Math.round(v * 255);\n layer[out] = encode(r);\n layer[out + 1] = encode(g);\n layer[out + 2] = encode(b);\n layer[out + 3] = Math.round(a * 255);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fit.js","sourceRoot":"","sources":["../../../src/impostor/bake/fit.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAgB,EAAE,MAAe,EAAE,UAAkB;IAClF,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACpC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,oGAAoG;IACpG,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpG,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;QAC1B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI;YAAE,OAAO;QAC/C,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACrG,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
1
|
+
{"version":3,"file":"fit.js","sourceRoot":"","sources":["../../../src/impostor/bake/fit.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAa,MAAM,kBAAkB,CAAC;AAEzD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAgB,EAAE,MAAe,EAAE,UAAkB;IAClF,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACpC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,oGAAoG;IACpG,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpG,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;QAC1B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI;YAAE,OAAO;QAC/C,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACrG,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { type Object3D, type Vector3 } from \"three/webgpu\";\nimport { forEachVertex } from \"../../source/detail.js\";\nimport { frameBasis, type Vec3 } from \"../octahedral.js\";\n\n/**\n * The smallest square half-size that holds the object in every frame: the largest\n * extent of any vertex along any frame's image axes. Tighter than the bounding\n * sphere, which wastes about a third of every frame on a tree.\n */\nexport function fittedHalfSize(source: Object3D, centre: Vector3, directions: Vec3[]): number {\n const axes = directions.flatMap((n) => {\n const { tangent, bitangent } = frameBasis(n);\n return [tangent, bitangent];\n });\n // Cauchy–Schwarz bounds every projection by radius × axis length, with a little slack for rounding.\n const norm2 = axes.reduce((max, [x, y, z]) => Math.max(max, x * x + y * y + z * z), 0) * (1 + 1e-9);\n let half = 0;\n forEachVertex(source, (p) => {\n p.sub(centre);\n if (p.lengthSq() * norm2 < half * half) return;\n for (const a of axes) half = Math.max(half, Math.abs(p.x * a[0] + p.y * a[1] + p.z * a[2]));\n });\n if (half === 0) throw new Error(\"bakeImpostor: object has no extent (every vertex is at one point)\");\n return half;\n}\n"]}
|