@drawcall/lod 0.5.0 → 0.5.2

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.
Files changed (103) hide show
  1. package/dist/at.js.map +1 -1
  2. package/dist/bake.js.map +1 -1
  3. package/dist/baked/codec.js.map +1 -1
  4. package/dist/baked/coverage.js.map +1 -1
  5. package/dist/baked/fields.js.map +1 -1
  6. package/dist/baked/index.js.map +1 -1
  7. package/dist/baked/interior/faces.js.map +1 -1
  8. package/dist/baked/interior/material.js.map +1 -1
  9. package/dist/baked/interior/rooms.js.map +1 -1
  10. package/dist/baked/low.js.map +1 -1
  11. package/dist/baked/raster.js.map +1 -1
  12. package/dist/baked/textures.js.map +1 -1
  13. package/dist/baked/transfer.js.map +1 -1
  14. package/dist/baked/unwrap.js.map +1 -1
  15. package/dist/baked/xatlas.js.map +1 -1
  16. package/dist/codec/container.js.map +1 -1
  17. package/dist/codec/mesh.js.map +1 -1
  18. package/dist/dispose.js.map +1 -1
  19. package/dist/foliage.js.map +1 -1
  20. package/dist/impostor/bake/atlas.js.map +1 -1
  21. package/dist/impostor/bake/fit.js.map +1 -1
  22. package/dist/impostor/bake/index.js.map +1 -1
  23. package/dist/impostor/bake/materials.js.map +1 -1
  24. package/dist/impostor/bake/sheet.js.map +1 -1
  25. package/dist/impostor/bake/source.js.map +1 -1
  26. package/dist/impostor/codec.js.map +1 -1
  27. package/dist/impostor/impostor.js.map +1 -1
  28. package/dist/impostor/ktx2/encode.js.map +1 -1
  29. package/dist/impostor/ktx2/transcode.js.map +1 -1
  30. package/dist/impostor/ktx2/uastc.js.map +1 -1
  31. package/dist/impostor/ktx2/wasm/encoder.js.map +1 -1
  32. package/dist/impostor/ktx2/wasm/transcoder.js.map +1 -1
  33. package/dist/impostor/ktx2/worker.js.map +1 -1
  34. package/dist/impostor/mesh/card.js.map +1 -1
  35. package/dist/impostor/mesh/index.js.map +1 -1
  36. package/dist/impostor/mesh/material.js.map +1 -1
  37. package/dist/impostor/mesh/surface.js.map +1 -1
  38. package/dist/impostor/mesh/textures.js.map +1 -1
  39. package/dist/impostor/octahedral.js.map +1 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/instanced/camera.js.map +1 -1
  42. package/dist/instanced/clusters.js.map +1 -1
  43. package/dist/instanced/cull.js.map +1 -1
  44. package/dist/instanced/instances.js.map +1 -1
  45. package/dist/instanced/key.js.map +1 -1
  46. package/dist/instanced/levels.js.map +1 -1
  47. package/dist/instanced/lists.js.map +1 -1
  48. package/dist/instanced/measure.js.map +1 -1
  49. package/dist/instanced/meshes.js.map +1 -1
  50. package/dist/instanced/mirror.js.map +1 -1
  51. package/dist/instanced/raycast.js.map +1 -1
  52. package/dist/instanced/rows.js.map +1 -1
  53. package/dist/instanced/shape.js.map +1 -1
  54. package/dist/instanced/sort.js.map +1 -1
  55. package/dist/instanced/update.js.map +1 -1
  56. package/dist/levels/bounds.js.map +1 -1
  57. package/dist/levels/cameras.js.map +1 -1
  58. package/dist/levels/compile/contexts.js.map +1 -1
  59. package/dist/levels/compile/index.js.map +1 -1
  60. package/dist/levels/compile/pipelines.js.map +1 -1
  61. package/dist/levels/compiles.js.map +1 -1
  62. package/dist/levels/draw.js.map +1 -1
  63. package/dist/levels/fade.js.map +1 -1
  64. package/dist/levels/index.js.map +1 -1
  65. package/dist/levels/item.js.map +1 -1
  66. package/dist/levels/load.js.map +1 -1
  67. package/dist/levels/manager.js.map +1 -1
  68. package/dist/levels/material.js.map +1 -1
  69. package/dist/levels/renderer.js.map +1 -1
  70. package/dist/levels/requests.js.map +1 -1
  71. package/dist/levels/screen.js.map +1 -1
  72. package/dist/loader/build.js.map +1 -1
  73. package/dist/loader/context.js.map +1 -1
  74. package/dist/loader/entry.js.map +1 -1
  75. package/dist/loader/index.js.map +1 -1
  76. package/dist/loader/level.js.map +1 -1
  77. package/dist/loader/node.js +8 -0
  78. package/dist/loader/node.js.map +1 -1
  79. package/dist/loader/request.js.map +1 -1
  80. package/dist/loader/url.js.map +1 -1
  81. package/dist/lod.js.map +1 -1
  82. package/dist/meshopt.js.map +1 -1
  83. package/dist/node-process.js.map +1 -1
  84. package/dist/node.js.map +1 -1
  85. package/dist/simplify/cards.js.map +1 -1
  86. package/dist/simplify/index.js.map +1 -1
  87. package/dist/source/detail.js.map +1 -1
  88. package/dist/source/deviation.js.map +1 -1
  89. package/dist/source/evaluator.js.map +1 -1
  90. package/dist/source/frame.js.map +1 -1
  91. package/dist/source/raycaster.js.map +1 -1
  92. package/dist/source/sampler.js.map +1 -1
  93. package/dist/source/source.js.map +1 -1
  94. package/dist/source/surface.js.map +1 -1
  95. package/dist/task.js.map +1 -1
  96. package/dist/three.js.map +1 -1
  97. package/dist/tsl.js.map +1 -1
  98. package/dist/typegpu.js.map +1 -1
  99. package/dist/wind/bounds.js.map +1 -1
  100. package/dist/wind/hooks.js.map +1 -1
  101. package/dist/wind/index.js.map +1 -1
  102. package/dist/wind/sway.js.map +1 -1
  103. package/package.json +2 -2
package/dist/at.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"at.js","sourceRoot":"","sources":["../src/at.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,MAAM,UAAU,EAAE,CAAI,MAAoB,EAAE,KAAa;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"at.js","sourceRoot":"","sources":["../src/at.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,MAAM,UAAU,EAAE,CAAI,MAAoB,EAAE,KAAa;IACvD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,SAAS,KAAK,eAAe,CAAC,CAAC;IACxE,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/** `values[index]`, throwing where it is missing. */\nexport function at<T>(values: ArrayLike<T>, index: number): T {\n const value = values[index];\n if (value === undefined) throw new Error(`index ${index} out of range`);\n return value;\n}\n"]}
package/dist/bake.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bake.js","sourceRoot":"","sources":["../src/bake.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bake.js","sourceRoot":"","sources":["../src/bake.ts"],"names":[],"mappings":"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","sourcesContent":["import { Color, DataUtils, Group, InstancedMesh, Matrix4, WebGPURenderer, type Object3D, type RenderTarget, type Renderer } from \"three/webgpu\";\nimport { disposeCopies } from \"./dispose.js\";\nimport type { Lod } from \"./lod.js\";\nimport { clone } from \"three/addons/utils/SkeletonUtils.js\";\nimport { at } from \"./at.js\";\nimport { instancesOf } from \"./source/detail.js\";\nimport { isLod, isMesh, isStorageInstanced } from \"./three.js\";\n\n// What the GPU bakes (impostor frames, interior rooms) share: the renderer they draw with, one bake at a time on it,\n// and reading back what they drew.\n\n/**\n * A renderer for bakes, initialised: it clears to transparent black, only when a bake clears, and its canvas is never\n * shown or sized. Pass it to `bakeImpostor`, or to `bakeMesh` with an interior, and dispose it when done. CachedLodLoader\n * makes one for itself; so does a .glts script that bakes.\n */\nexport function createBakeRenderer(): Promise<WebGPURenderer> {\n return setUpBakeRenderer(new WebGPURenderer({ antialias: false }));\n}\n\n/** `renderer`, made without antialiasing, set up and initialised as `createBakeRenderer` sets one up. */\nexport async function setUpBakeRenderer(renderer: WebGPURenderer): Promise<WebGPURenderer> {\n renderer.setClearColor(0x000000, 0);\n renderer.autoClear = false;\n await renderer.init();\n return renderer;\n}\n\n/**\n * Throw unless `renderer` draws bakes as `createBakeRenderer` sets one up: initialised, clearing to transparent black\n * and only when told to, with no MRT or XR camera of its own. A bake draws through every such setting; `who` names it.\n */\nexport function checkBakeRenderer(renderer: Renderer, who: string): void {\n const fail = (why: string) => {\n throw new Error(`${who}: the renderer ${why}; make one for bakes with createBakeRenderer`);\n };\n if (!renderer.initialized) fail(\"is not initialised (await renderer.init())\");\n if (!renderer.getClearColor(new Color()).equals(BLACK) || renderer.getClearAlpha() !== 0) fail(\"must clear to transparent black\");\n if (renderer.autoClear) fail(\"must not clear on its own (autoClear)\");\n if (renderer.getMRT() !== null) fail(\"has an MRT set\");\n if (renderer.xr.isPresenting) fail(\"is presenting XR\");\n}\n\nconst BLACK = new Color(0x000000);\n\n/** A copy of what a bake draws, and what frees it once drawn. */\nexport interface BakeCopy {\n readonly root: Object3D;\n /** Free what the copy made: its InstancedMeshes' buffers and every Lod's draw state. */\n dispose(): void;\n}\n\n/**\n * A fresh copy of `root` to bake, each Lod in it drawn as plain InstancedMeshes of its level 0 at every instance it\n * draws, that level loaded first where it is deferred: a Lod draws with the renderer that first drew it, the app's, and\n * nothing in its first frame. The CPU reads the instances, so a Lod with a storage attribute is refused.\n */\nexport async function bakeCopy(root: Object3D): Promise<BakeCopy> {\n root.traverse((node) => {\n if (isLod(node) && [node.instanceMatrix, node.instanceColor].some((attribute) => attribute && isStorageInstanced(attribute)))\n throw new Error(`@drawcall/lod: a bake reads a Lod's instances on the CPU, but \"${node.name}\" has a storage instanceMatrix or instanceColor`);\n });\n let copy = clone(root);\n const lods: Lod[] = [];\n copy.traverse((node) => {\n if (isLod(node)) lods.push(node);\n });\n try {\n const sources = await Promise.all(lods.map(levelZeroOf));\n lods.forEach((lod, i) => {\n const drawn = levelZero(lod, at(sources, i));\n // Only the root has no parent here.\n const { parent } = lod;\n if (parent) parent.add(drawn);\n else copy = drawn;\n lod.removeFromParent();\n });\n } finally {\n for (const lod of lods) lod.dispose();\n }\n return { root: copy, dispose: () => disposeCopies(copy) };\n}\n\n/** `lod`'s level 0 object: its own once there is one, else what the level's load makes. */\nasync function levelZeroOf(lod: Lod): Promise<Object3D> {\n const level = at(lod.levels, 0);\n if (level.object) return level.object;\n if (!level.load) throw new Error(`@drawcall/lod: level 0 of the Lod \"${lod.name}\" has neither an object nor a load`);\n return level.load();\n}\n\n/**\n * `source`, `lod`'s level 0, as a Group in the Lod's place, an InstancedMesh per visible mesh of it drawing it at every\n * instance the Lod draws (see `instancesOf`), coloured as the instances are.\n */\nfunction levelZero(lod: Lod, source: Object3D): Group {\n const group = new Group();\n group.name = lod.name;\n group.position.copy(lod.position);\n group.quaternion.copy(lod.quaternion);\n group.scale.copy(lod.scale);\n group.matrixAutoUpdate = lod.matrixAutoUpdate;\n group.matrix.copy(lod.matrix);\n group.visible = lod.visible;\n group.layers.mask = lod.layers.mask;\n source.updateWorldMatrix(true, true);\n const outside = source.parent ? source.parent.matrixWorld.clone().invert() : new Matrix4();\n const instance = new Matrix4();\n const color = new Color();\n source.traverseVisible((node) => {\n if (!isMesh(node)) return;\n const placement = outside.clone().multiply(node.matrixWorld);\n const drawn = [...instancesOf(lod)];\n const mesh = new InstancedMesh(node.geometry, node.material, drawn.length);\n drawn.forEach((index, i) => {\n mesh.setMatrixAt(i, lod.getMatrixAt(index, instance).multiply(placement));\n if (lod.instanceColor) mesh.setColorAt(i, lod.getColorAt(index, color));\n });\n mesh.name = node.name;\n mesh.castShadow = node.castShadow;\n mesh.receiveShadow = node.receiveShadow;\n group.add(mesh);\n });\n return group;\n}\n\n/**\n * The bake under way on each renderer and those queued after it. Bakes run one at a time on a renderer: each holds one\n * target's renders in flight, and a scene's bakes all at once queued GPU work seconds deep (macOS ends a device whose\n * work holds the display up). A side table, as the renderers are the caller's.\n */\nconst queues = new WeakMap<Renderer, Promise<unknown>>();\n\n/** Run `bake` on `renderer` once every bake queued on it before has settled. */\nexport function inTurn<T>(renderer: Renderer, bake: () => Promise<T>): Promise<T> {\n const next = (queues.get(renderer) ?? Promise.resolve()).then(bake);\n // The queue goes on past a failed bake; its caller has the failure.\n queues.set(\n renderer,\n next.catch(() => {}),\n );\n return next;\n}\n\n/**\n * Texture `index` of `target` as floats, four channels a texel, rows packed and bottom\n * row first: the layout the bakes write their images in. For float and half-float\n * targets.\n */\nexport async function readFloats(renderer: Renderer, target: RenderTarget, index: number): Promise<Float32Array> {\n const read = await renderer.readRenderTargetPixelsAsync(target, 0, 0, target.width, target.height, index);\n if (read instanceof Float32Array) return packed(read, target, (n) => new Float32Array(n));\n // Half floats come back as their bits.\n if (read instanceof Uint16Array) return fromHalves(packed(read, target, (n) => new Uint16Array(n)));\n throw new Error(`@drawcall/lod: read ${read.constructor.name} from a float render target`);\n}\n\n/** Texture `index` of an 8-bit `target`, laid out as `readFloats` lays it out. */\nexport async function readBytes(renderer: Renderer, target: RenderTarget, index: number): Promise<Uint8Array> {\n const read = await renderer.readRenderTargetPixelsAsync(target, 0, 0, target.width, target.height, index);\n if (!(read instanceof Uint8Array)) throw new Error(`@drawcall/lod: read ${read.constructor.name} from an 8-bit render target`);\n return packed(read, target, (n) => new Uint8Array(n));\n}\n\n/** Every half float by its bits: an immutable table, made once. */\nconst HALF = Float32Array.from({ length: 65536 }, (_, bits) => DataUtils.fromHalfFloat(bits));\n\nfunction fromHalves(bits: Uint16Array): Float32Array {\n const out = new Float32Array(bits.length);\n // Typed-array reads below are in bounds; `?? 0` only answers noUncheckedIndexedAccess.\n for (let i = 0; i < bits.length; i++) out[i] = HALF[bits[i] ?? 0] ?? 0;\n return out;\n}\n\n/** `read`'s rows, each padded to 256 bytes and top first, packed and bottom first. */\nfunction packed<T extends Float32Array | Uint16Array | Uint8Array>(read: T, { width, height }: RenderTarget, make: (length: number) => T): T {\n const row = width * 4;\n const stride = (Math.ceil((row * read.BYTES_PER_ELEMENT) / 256) * 256) / read.BYTES_PER_ELEMENT;\n const out = make(row * height);\n for (let y = 0; y < height; y++) out.set(read.subarray(y * stride, y * stride + row), (height - 1 - y) * row);\n return out;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/baked/codec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/baked/codec.ts"],"names":[],"mappings":"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","sourcesContent":["import { Box3, BufferAttribute, BufferGeometry, DoubleSide, FrontSide, Mesh, MeshStandardNodeMaterial, Sphere, Vector3 } from \"three/webgpu\";\nimport { pack, unpack } from \"../codec/container.js\";\nimport { deviationOf, recordDeviation } from \"../levels/index.js\";\nimport { boolean, fail, file, number, numbers, object, type Files } from \"./fields.js\";\nimport { InteriorMappingMaterial } from \"./interior/material.js\";\nimport { readTexture, writeTexture } from \"./textures.js\";\n\n/**\n * Encode an unmodified `bakeMesh` result, before adding it to a Lod or changing its\n * materials. This is a baked-result format, not an Object3D/NodeMaterial serializer.\n * Geometry, map bytes (including cutout mips), rooms, placement and LOD deviation survive\n * exactly. Decoding makes fresh resources; the input mesh stays its caller's.\n */\nexport async function encodeBakedMeshAsync(mesh: Mesh): Promise<Uint8Array> {\n const deviation = deviationOf(mesh);\n const { geometry, material } = mesh;\n if (deviation === undefined || !(deviation >= 0) || !Number.isFinite(deviation)) fail(\"expected a bakeMesh result with its LOD deviation\");\n if (\n mesh.children.length ||\n !mesh.matrixAutoUpdate ||\n !mesh.visible ||\n mesh.renderOrder !== 0 ||\n mesh.layers.mask !== 1 ||\n geometry.groups.length ||\n Object.keys(geometry.morphAttributes).length ||\n geometry.drawRange.start !== 0 ||\n geometry.drawRange.count !== Infinity\n )\n fail(\"modified baked geometry\");\n if (\n !(material instanceof MeshStandardNodeMaterial) ||\n (Object.getPrototypeOf(material) !== MeshStandardNodeMaterial.prototype && Object.getPrototypeOf(material) !== InteriorMappingMaterial.prototype)\n )\n fail(\"unsupported material\");\n const standard = new MeshStandardNodeMaterial();\n // Only the maps, side and alphaTest differ from a default baked material. Refuse\n // shader hooks and material changes rather than silently dropping them from a cache.\n // Keys starting with \"_\" are three's own state behind accessors (alphaTest's) and\n // listeners, which the accessors and the checks below cover.\n const allowed = new Set([\n \"uuid\",\n \"id\",\n \"version\",\n \"map\",\n \"normalMap\",\n \"aoMap\",\n \"roughnessMap\",\n \"metalnessMap\",\n \"roughness\",\n \"metalness\",\n \"side\",\n \"rooms\",\n \"bounds\",\n \"isInteriorMaterial\",\n ]);\n for (const [key, value] of Object.entries(material)) {\n if (key.startsWith(\"_\") || allowed.has(key)) continue;\n const expected: unknown = Reflect.get(standard, key);\n if (typeof value === \"function\" ? value !== expected : JSON.stringify(value) !== JSON.stringify(expected)) fail(`modified material.${key}`);\n }\n if (\n material.roughness !== 1 ||\n material.metalness !== 1 ||\n ![0, 0.5].includes(material.alphaTest) ||\n (material.side !== FrontSide && material.side !== DoubleSide) ||\n material.aoMap !== material.roughnessMap ||\n material.aoMap !== material.metalnessMap\n )\n fail(\"modified baked material\");\n if (Object.keys(geometry.attributes).sort().join() !== \"normal,position,uv\") fail(\"unsupported geometry attributes\");\n const files: Files = {};\n for (const [name, size] of [\n [\"position\", 3],\n [\"normal\", 3],\n [\"uv\", 2],\n ] as const) {\n const attribute = geometry.getAttribute(name);\n if (!(attribute instanceof BufferAttribute) || !(attribute.array instanceof Float32Array) || attribute.itemSize !== size || attribute.normalized)\n fail(`unsupported ${name} attribute`);\n files[name] = new Uint8Array(attribute.array.buffer, attribute.array.byteOffset, attribute.array.byteLength);\n }\n const index = geometry.index;\n if (!index || !(index.array instanceof Uint32Array) || index.itemSize !== 1) fail(\"expected Uint32 indices\");\n files.index = new Uint8Array(index.array.buffer, index.array.byteOffset, index.array.byteLength);\n const rooms = material instanceof InteriorMappingMaterial ? (material.rooms ?? fail(\"unfurnished interior\")) : null;\n geometry.computeBoundingBox();\n geometry.computeBoundingSphere();\n const { boundingBox: box, boundingSphere: sphere } = geometry;\n if (!box || !sphere) fail(\"missing bounds\");\n const meta = {\n version: 4,\n name: mesh.name,\n bounds: [...box.min.toArray(), ...box.max.toArray(), ...sphere.center.toArray(), sphere.radius],\n deviation,\n position: mesh.position.toArray(),\n quaternion: mesh.quaternion.toArray(),\n scale: mesh.scale.toArray(),\n castShadow: mesh.castShadow,\n receiveShadow: mesh.receiveShadow,\n side: material.side,\n alphaTest: material.alphaTest,\n map: writeTexture(files, \"map\", material.map),\n normal: writeTexture(files, \"normal\", material.normalMap),\n orm: writeTexture(files, \"orm\", material.aoMap),\n rooms: rooms && {\n boxes: rooms.boxes.map((box) => [...box.min.toArray(), ...box.max.toArray()]),\n span: rooms.span,\n windows: writeTexture(files, \"windows\", rooms.windows),\n response: writeTexture(files, \"response\", rooms.response),\n glow: rooms.glow && writeTexture(files, \"glow\", rooms.glow),\n },\n };\n return pack({ ...meta, files: Object.keys(files) }, Object.values(files));\n}\n\n/** Decode `encodeBakedMeshAsync` bytes into an independently owned mesh, ready for a Lod. */\nexport async function decodeBakedMeshAsync(bytes: Uint8Array): Promise<Mesh> {\n const contents = await unpack(bytes, fail);\n const meta = object(contents.header);\n if (meta.version !== 4) fail(\"unsupported version; bake it again\");\n const names = meta.files;\n if (!Array.isArray(names) || names.length !== contents.files.length) fail(\"file names do not match the files\");\n const files: Files = Object.fromEntries(\n names.map((name: unknown, i) => [typeof name === \"string\" ? name : fail(\"invalid file name\"), contents.files[i] ?? fail(\"missing file\")]),\n );\n if (typeof meta.name !== \"string\") fail(\"missing name\");\n const deviation = number(meta.deviation);\n if (deviation < 0) fail(\"negative LOD deviation\");\n // The container's CRC rejects corrupt bytes, so lengths are checked but values are not walked.\n const position = typedArray(file(files, \"position\"), Float32Array);\n const normal = typedArray(file(files, \"normal\"), Float32Array);\n const uv = typedArray(file(files, \"uv\"), Float32Array);\n const index = typedArray(file(files, \"index\"), Uint32Array);\n if (!position.length || position.length % 3 || normal.length !== position.length || uv.length * 3 !== position.length * 2 || index.length % 3)\n fail(\"invalid geometry lengths\");\n const bounds = numbers(meta.bounds, 10);\n const side = meta.side === FrontSide ? FrontSide : meta.side === DoubleSide ? DoubleSide : fail(\"unsupported side\");\n const alphaTest = meta.alphaTest === 0 ? 0 : meta.alphaTest === 0.5 ? 0.5 : fail(\"unsupported alpha test\");\n const map = readTexture(files, \"map\", meta.map, false);\n const normalMap = readTexture(files, \"normal\", meta.normal, false);\n const orm = readTexture(files, \"orm\", meta.orm, false);\n const material = meta.rooms === null ? new MeshStandardNodeMaterial() : new InteriorMappingMaterial();\n material.setValues({ map, normalMap, aoMap: orm, roughnessMap: orm, metalnessMap: orm, roughness: 1, metalness: 1, side, alphaTest });\n if (material instanceof InteriorMappingMaterial) {\n const rooms = object(meta.rooms);\n if (!Array.isArray(rooms.boxes) || !rooms.boxes.length) fail(\"missing room boxes\");\n const boxes = rooms.boxes.map((value) => {\n const box = numbers(value, 6);\n const result = new Box3(new Vector3().fromArray(box), new Vector3().fromArray(box, 3));\n if (result.isEmpty()) fail(\"empty room\");\n return result;\n });\n const response = readTexture(files, \"response\", rooms.response, true);\n const glow = rooms.glow === null ? null : readTexture(files, \"glow\", rooms.glow, true);\n if (response.image.depth !== boxes.length * 6 || (glow && glow.image.depth !== response.image.depth)) fail(\"room texture layer count\");\n const windows = readTexture(files, \"windows\", rooms.windows, false);\n const span = number(rooms.span);\n if (span <= 0) fail(\"invalid room span\");\n material.furnish({ boxes, span, response, glow, windows });\n }\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new BufferAttribute(position, 3));\n geometry.setAttribute(\"normal\", new BufferAttribute(normal, 3));\n geometry.setAttribute(\"uv\", new BufferAttribute(uv, 2));\n geometry.setIndex(new BufferAttribute(index, 1));\n geometry.boundingBox = new Box3().setFromArray(bounds.slice(0, 6));\n geometry.boundingSphere = new Sphere(new Vector3().fromArray(bounds, 6), bounds[9]);\n const mesh = new Mesh(geometry, material);\n mesh.name = meta.name;\n mesh.position.fromArray(numbers(meta.position, 3));\n mesh.quaternion.fromArray(numbers(meta.quaternion, 4));\n mesh.scale.fromArray(numbers(meta.scale, 3));\n mesh.castShadow = boolean(meta.castShadow);\n mesh.receiveShadow = boolean(meta.receiveShadow);\n recordDeviation(mesh, deviation);\n return mesh;\n}\n\n/** `bytes` as 32-bit values, in place: the container aligns its files. */\nfunction typedArray<T extends Float32Array | Uint32Array>(bytes: Uint8Array, Type: { new (buffer: ArrayBuffer, offset: number, length: number): T }): T {\n if (bytes.byteLength % 4) fail(\"invalid geometry data length\");\n const { buffer, byteOffset, byteLength } = bytes;\n if (!(buffer instanceof ArrayBuffer)) fail(\"shared geometry data\");\n return new Type(buffer, byteOffset, byteLength / 4);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/baked/coverage.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAW;IAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM;gBAAE,GAAG,GAAG,KAAK,CAAC;;gBACzC,IAAI,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,MAAM,GAAG,QAAQ,CAAC;QACtB,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK;gBAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;;gBACvD,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,4EAA4E;QAC5E,+EAA+E;QAC/E,6EAA6E;QAC7E,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QACzF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACvF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,IAAI,EAAO,EAAE,KAAa;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK;YAAE,KAAK,EAAE,CAAC;IACtF,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../src/baked/coverage.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAW;IAC1C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpB,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM;gBAAE,GAAG,GAAG,KAAK,CAAC;;gBACzC,IAAI,GAAG,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,MAAM,GAAG,QAAQ,CAAC;QACtB,IAAI,OAAO,GAAG,CAAC,QAAQ,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK;gBAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;;gBACvD,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;QACD,4EAA4E;QAC5E,+EAA+E;QAC/E,6EAA6E;QAC7E,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;QACzF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACvF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,IAAI,EAAO,EAAE,KAAa;IAC3C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,KAAK;YAAE,KAAK,EAAE,CAAC;IACtF,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import type { Mip } from \"../source/sampler.js\";\n\n/**\n * Preserve the base mip's cut-out coverage down the chain: scale each smaller mip's alpha, in place, so that the same\n * share of its texels passes the alpha test, with room for filtering around the test. Returns `mips`.\n */\nexport function preserveCoverage(mips: Mip[]): Mip[] {\n const [base] = mips;\n if (!base) return mips;\n const target = passing(base, 1);\n if (target === 0 || target === 1) return mips;\n for (const mip of mips.slice(1)) {\n let low = 0;\n let high = 8;\n for (let i = 0; i < 16; i++) {\n const scale = (low + high) / 2;\n if (passing(mip, scale) < target) low = scale;\n else high = scale;\n }\n let inside = Infinity;\n let outside = -Infinity;\n for (let i = 3; i < mip.data.length; i += 4) {\n const alpha = mip.data[i] ?? 0;\n if (alpha * high >= 127.5) inside = Math.min(inside, alpha);\n else outside = Math.max(outside, alpha);\n }\n // The smallest scale puts a retained texel at alpha 128: bilinear filtering\n // then cuts almost all of its area away. Centre the gap without changing which\n // texels pass. A uniform coarse mip has no gap; use its original correction.\n if (Number.isFinite(inside) && Number.isFinite(outside)) high = 255 / (inside + outside);\n for (let i = 3; i < mip.data.length; i += 4) mip.data[i] = (mip.data[i] ?? 0) * high;\n }\n return mips;\n}\n\nfunction passing({ data }: Mip, scale: number): number {\n let count = 0;\n for (let i = 3; i < data.length; i += 4) if ((data[i] ?? 0) * scale >= 127.5) count++;\n return count / (data.length / 4);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/baked/fields.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAK/G,MAAM,UAAU,IAAI,CAAC,GAAW,EAAE,KAAe;IAC/C,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAc,EAA2B,EAAE;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1G,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACjJ,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAU,EAAE;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AACjG,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACpH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAE,KAAa,EAAY,EAAE;IACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK;QAAE,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC;IACvF,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAY,EAAE,IAAY,EAAc,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"fields.js","sourceRoot":"","sources":["../../src/baked/fields.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAK/G,MAAM,UAAU,IAAI,CAAC,GAAW,EAAE,KAAe;IAC/C,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAc,EAA2B,EAAE;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC1G,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACjJ,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAU,EAAE;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;AACjG,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACpH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAE,KAAa,EAAY,EAAE;IACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK;QAAE,IAAI,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC;IACvF,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC,CAAC;AACF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAY,EAAE,IAAY,EAAc,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC","sourcesContent":["// The metadata fields of a baked mesh's container, read with validation: anything unexpected fails the decode.\n\n/** The container's files by name. */\nexport type Files = Record<string, Uint8Array>;\n\nexport function fail(why: string, cause?: unknown): never {\n throw new Error(`Invalid baked mesh: ${why}`, { cause });\n}\n\nexport const object = (value: unknown): Record<string, unknown> => {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) fail(\"expected metadata object\");\n return Object.fromEntries(Object.entries(value));\n};\nexport const number = (value: unknown): number => (typeof value === \"number\" && Number.isFinite(value) ? value : fail(\"expected finite number\"));\nexport const integer = (value: unknown): number => {\n const result = number(value);\n return Number.isSafeInteger(result) && result > 0 ? result : fail(\"expected positive integer\");\n};\nexport const boolean = (value: unknown): boolean => (typeof value === \"boolean\" ? value : fail(\"expected boolean\"));\nexport const numbers = (value: unknown, count: number): number[] => {\n if (!Array.isArray(value) || value.length !== count) fail(`expected ${count} numbers`);\n return value.map(number);\n};\nexport const file = (files: Files, name: string): Uint8Array => files[name] ?? fail(`missing ${name}`);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/baked/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/baked/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BufferAttribute,\n BufferGeometry,\n DataTexture,\n DoubleSide,\n FrontSide,\n LinearFilter,\n LinearMipmapLinearFilter,\n Mesh,\n MeshStandardNodeMaterial,\n Matrix4,\n NoColorSpace,\n RGFormat,\n RGBAFormat,\n SRGBColorSpace,\n UnsignedByteType,\n Vector3,\n type Box3,\n type ColorSpace,\n type Object3D,\n type MeshStandardNodeMaterialParameters,\n type Renderer,\n} from \"three/webgpu\";\nimport { checkBakeRenderer, inTurn } from \"../bake.js\";\nimport { recordDeviation } from \"../levels/index.js\";\nimport { boundingBox, forEachMesh } from \"../source/detail.js\";\nimport { readSource } from \"../source/source.js\";\nimport { area } from \"../source/surface.js\";\nimport { mipmaps, type Mip } from \"../source/sampler.js\";\nimport { isImpostorMesh, placeLike } from \"../three.js\";\nimport { renderFaces } from \"./interior/faces.js\";\nimport { InteriorMappingMaterial } from \"./interior/material.js\";\nimport { readBoxes } from \"./interior/rooms.js\";\nimport { layOut, simplified } from \"./low.js\";\nimport { transfer } from \"./transfer.js\";\nimport { preserveCoverage } from \"./coverage.js\";\n\nexport type BakeMeshOptions = {\n /** texels per side of each baked map; default 1024, or 512 when the source cuts out (foliage) */\n textureSize?: number;\n} & (\n | { interior?: undefined; renderer?: undefined }\n | {\n /**\n * Rooms to show through the source's glass (interior mapping): each direct child is one\n * room, which fills its bounding box; lights are refused (lamps: emissive materials).\n * It sits in the source's space as a child of the source would, or where it is if it is\n * inside the source; either way it is hidden from the exterior's bake. Glass is a\n * surface that lets what is behind it show: transparent with opacity below 1, or\n * transmissive (texture alpha is not read). Each room is captured from its box's centre\n * as its colours and its glow; the baked material lights the colours by the indirect\n * light reaching each window.\n * Rooms must not overlap except at their walls. Put inward-facing walls, floors and\n * ceilings on the box faces, with the box beginning just behind its windows. Furniture\n * away from those faces appears flattened onto them. Glass with no nearby room stays\n * plain; the bake fails if none of the source's glass looks into a room.\n */\n interior: Object3D;\n /** What renders the rooms: one made for bakes (make one with `createBakeRenderer`; see `bakeImpostor`). */\n renderer: Renderer;\n }\n) &\n (\n | {\n /**\n * The mesh to bake onto, in the source's own space, such as a hand-made or generated\n * low-poly shell of a building. Only its static geometry is used: materials are\n * ignored, and its UVs are used if they lie inside 0..1 without overlapping and\n * with a texel of border between charts, else it is unwrapped again.\n */\n low: Object3D;\n ratio?: undefined;\n }\n | {\n low?: undefined;\n /** share of the source's triangles the low mesh, simplified from it, has, in (0, 1]; default 0.05 */\n ratio?: number;\n }\n );\n\n/**\n * Bake `source` (in its own space, ignoring its own transform) onto one low-poly mesh with\n * its own textures: base colour (alpha: cut out or not), tangent-space normal and\n * occlusion/roughness/metalness, drawn with a MeshStandardNodeMaterial. The mesh is placed\n * like `source`. Materials are read on the CPU as MeshStandardMaterials (color, map,\n * alphaTest, roughness, metalness, normal and ao maps); emissive, clearcoat, transmission\n * and the like are not baked, and blended transparency bakes opaque: glass in its own\n * colour, or as windows into the rooms of `interior`. Textures must be readable on the\n * CPU (no compressed textures).\n *\n * Nested LODs are baked at their level 0; InstancedMeshes, and the source level of a\n * Lod, once per instance: a field of plants bakes as a whole. Skinned meshes\n * and ImpostorMeshes (which have no surface to read) are refused.\n *\n * For each texel of the low mesh, the outermost source surface along the low mesh's\n * normal is shaded. How far the result is off, the larger of a texel's size and the low\n * surface's distance from the source, sets its default maxPixels in a Lod.\n *\n * Experimental, and slow: it runs on the calling thread, yielding to the page now and\n * then.\n */\nexport async function bakeMesh(source: Object3D, options: BakeMeshOptions = {}): Promise<Mesh> {\n const { interior, renderer } = options;\n if (!interior) return bake(source, options, null);\n checkBakeRenderer(renderer, \"bakeMesh\");\n const placement = placementOf(interior, source);\n const boxes = readBoxes(interior, placement);\n // Hidden for the whole bake, which yields: a scene drawing it meanwhile shows it gone.\n const visible = interior.visible;\n interior.visible = false;\n try {\n return await bake(source, options, { object: interior, placement, boxes, renderer });\n } finally {\n interior.visible = visible;\n }\n}\n\n/** An interior to bake: its object, where it sits in the source's space, its rooms' boxes there and what renders them. */\ninterface Interior {\n object: Object3D;\n placement: Matrix4;\n boxes: Box3[];\n renderer: Renderer;\n}\n\nasync function bake(source: Object3D, options: BakeMeshOptions, interior: Interior | null): Promise<Mesh> {\n forEachMesh(source, (mesh) => {\n if (isImpostorMesh(mesh)) throw new Error(`bakeMesh: cannot bake an ImpostorMesh (\"${mesh.name}\"); bake from its source instead`);\n });\n const input = readSource(source, \"bakeMesh\", \"bake\");\n const size = options.textureSize ?? (input.cutout ? 512 : 1024);\n if (!Number.isInteger(size) || size < 16) throw new Error(`bakeMesh: textureSize must be an integer >= 16, got ${size}`);\n const ratio = options.ratio ?? 0.05;\n if (!(ratio > 0 && ratio <= 1)) throw new Error(`bakeMesh: ratio must be in (0, 1], got ${ratio}`);\n\n const low = await layOut(options.low ?? (await simplified(input, ratio)), input, size);\n if (low.raster.covered === 0) throw new Error(\"bakeMesh: the low mesh covers no texel\");\n const texelSize = Math.sqrt(area(low) / low.raster.covered);\n const radius = boundingBox(source).getSize(new Vector3()).length() / 2;\n // How far rays search: far enough for every feature the low mesh cut off, never so far\n // that they reach through to the other side of thin parts.\n const reach = Math.min(Math.max(low.widest * 1.25, radius * 0.005), radius * 0.15);\n const maps = await transfer(input, low, reach, texelSize, interior && interior.boxes);\n\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new BufferAttribute(low.positions, 3));\n geometry.setAttribute(\"normal\", new BufferAttribute(low.normals, 3));\n geometry.setAttribute(\"uv\", new BufferAttribute(low.uvs, 2));\n geometry.setIndex(new BufferAttribute(low.index, 1));\n geometry.computeBoundingBox();\n geometry.computeBoundingSphere();\n const orm = bakedTexture({ data: maps.orm, width: size, height: size }, NoColorSpace);\n const color = { data: maps.color, width: size, height: size };\n const parameters: MeshStandardNodeMaterialParameters = {\n // Cut-outs get mips that preserve their coverage; else the GPU's are as good.\n map: bakedTexture(color, SRGBColorSpace, input.cutout ? preserveCoverage(mipmaps(color, true)) : undefined),\n normalMap: bakedTexture({ data: maps.normal, width: size, height: size }, NoColorSpace),\n aoMap: orm,\n roughnessMap: orm,\n metalnessMap: orm,\n roughness: 1,\n metalness: 1,\n alphaTest: input.cutout ? 0.5 : 0,\n side: input.inputs.some((inputs) => inputs.doubleSided) ? DoubleSide : FrontSide,\n };\n const material = interior ? await furnished(parameters, interior, maps.windows, size) : new MeshStandardNodeMaterial(parameters);\n const mesh = new Mesh(geometry, material);\n mesh.name = `${source.name || \"object\"} baked`;\n placeLike(mesh, source);\n recordDeviation(mesh, Math.max(texelSize, low.deviation));\n return mesh;\n}\n\n/** A material of `parameters` that shows `interior`'s rooms through the glass texels of `windows`. */\nasync function furnished(\n parameters: MeshStandardNodeMaterialParameters,\n interior: Interior,\n windows: Uint8Array,\n size: number,\n): Promise<InteriorMappingMaterial> {\n if (!windows.some((value, i) => i % 2 === 0 && value > 0)) throw new Error(\"bakeMesh: no glass of the source looks into a room of the interior\");\n const { object, placement, boxes, renderer } = interior;\n const faces = await inTurn(renderer, () => renderFaces(object, placement, boxes, faceSize(size, boxes.length), renderer));\n return new InteriorMappingMaterial(parameters).furnish({ ...faces, boxes, windows: windowTexture(windows, size) });\n}\n\n/**\n * Pixels per side of each room's cube faces: all of them together about as many as one\n * baked map of `size`², within 32..256.\n */\nconst faceSize = (size: number, rooms: number) => Math.min(256, Math.max(32, 2 ** Math.floor(Math.log2(size / Math.sqrt(6 * rooms)))));\n\n/** Where `interior` sits in `source`'s own space: as a child of it, or where it is if inside it. */\nfunction placementOf(interior: Object3D, source: Object3D): Matrix4 {\n let inside = false;\n interior.traverseAncestors((node) => (inside ||= node === source));\n if (!inside) {\n if (interior.matrixAutoUpdate) interior.updateMatrix();\n return interior.matrix.clone();\n }\n interior.updateWorldMatrix(true, false);\n return source.matrixWorld.clone().invert().multiply(interior.matrixWorld);\n}\n\n/** The windows of `transfer`, as a texture: its share is filtered, its rooms read texel by texel. */\nfunction windowTexture(windows: Uint8Array, size: number): DataTexture {\n const texture = new DataTexture(windows, size, size, RGFormat, UnsignedByteType);\n texture.minFilter = LinearMipmapLinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipmaps = true;\n texture.unpackAlignment = 1;\n texture.needsUpdate = true;\n return texture;\n}\n\n/** A texture of baked pixels, with `mips` as its mipmaps if given, else the GPU's. */\nfunction bakedTexture(base: Mip, colorSpace: ColorSpace, mips?: Mip[]): DataTexture {\n const texture = new DataTexture(new Uint8Array(base.data.buffer), base.width, base.height, RGBAFormat, UnsignedByteType);\n texture.colorSpace = colorSpace;\n texture.minFilter = LinearMipmapLinearFilter;\n texture.magFilter = LinearFilter;\n texture.anisotropy = 4;\n if (mips) {\n texture.mipmaps = mips.map(({ data, width, height }) => ({ data: new Uint8Array(data.buffer), width, height }));\n texture.generateMipmaps = false;\n } else texture.generateMipmaps = true;\n texture.needsUpdate = true;\n return texture;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"faces.js","sourceRoot":"","sources":["../../../src/baked/interior/faces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"faces.js","sourceRoot":"","sources":["../../../src/baked/interior/faces.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AmbientLight,\n Box3,\n DataArrayTexture,\n LinearFilter,\n LinearMipmapLinearFilter,\n MathUtils,\n PerspectiveCamera,\n SRGBColorSpace,\n Scene,\n RenderTarget,\n UnsignedByteType,\n Vector3,\n type Matrix4,\n type Object3D,\n type Renderer,\n} from \"three/webgpu\";\nimport { bakeCopy, readBytes } from \"../../bake.js\";\nimport { showDetail } from \"../../source/detail.js\";\nimport { nextTask } from \"../../task.js\";\nimport { linearToSrgb, srgbToLinear } from \"../../source/sampler.js\";\n\n/**\n * The six faces of a room's cube, in layer order: the direction each looks and its up.\n * Its right is forward × up. The baked material's shader (material.ts) reads this table.\n */\nexport const FACES: ReadonlyArray<readonly [forward: Vector3, up: Vector3]> = [\n [new Vector3(1, 0, 0), new Vector3(0, 1, 0)],\n [new Vector3(-1, 0, 0), new Vector3(0, 1, 0)],\n [new Vector3(0, 1, 0), new Vector3(0, 0, -1)],\n [new Vector3(0, -1, 0), new Vector3(0, 0, 1)],\n [new Vector3(0, 0, 1), new Vector3(0, 1, 0)],\n [new Vector3(0, 0, -1), new Vector3(0, 1, 0)],\n];\n\n/** What each room shows, per cube face: see `renderFaces`. */\nexport interface Faces {\n /** the light each room reflects under white ambient light of irradiance π: its colours */\n response: DataArrayTexture;\n /** the light each room gives off itself (emissive and unlit materials); null when none does */\n glow: DataArrayTexture | null;\n /** how far each face's view reaches past its edges: tan of half its field of view */\n span: number;\n}\n\n/**\n * Render each room of `interior` (placed in the source's space by `placement`) from its\n * box's centre, six square `size`-pixel images, with the exterior hidden and the other\n * rooms shown, seen through doorways: once in white ambient light and once in none. The difference is how the room\n * responds to light, which the baked material scales by the light reaching its windows;\n * what shows without light is the room's glow. Layer room × 6 + face of each result,\n * sRGB, rows bottom-up: (u, v) = (0.5, 0.5) + 0.5 × (x, y) / (z × span), with x, y and z\n * along the face's right, up and forward. Each image reaches a texel past its edges, so\n * filtering at a face's border reads the neighbouring face's content. `renderer` is set\n * up for bakes (see `checkBakeRenderer`).\n */\nexport async function renderFaces(interior: Object3D, placement: Matrix4, boxes: readonly Box3[], size: number, renderer: Renderer): Promise<Faces> {\n const baked = await bakeCopy(interior);\n const copy = baked.root;\n copy.matrixAutoUpdate = false;\n copy.matrix.copy(placement);\n copy.visible = true;\n showDetail(copy);\n // At π, three's Lambert (albedo / π) shows a surface in its own colour.\n const ambient = new AmbientLight(0xffffff, Math.PI);\n const scene = new Scene().add(copy, ambient);\n scene.updateMatrixWorld(true);\n const span = 1 + 2 / size;\n const camera = new PerspectiveCamera(MathUtils.radToDeg(2 * Math.atan(span)), 1);\n camera.matrixAutoUpdate = false;\n camera.layers.enableAll();\n const target = new RenderTarget(size, size, { type: UnsignedByteType, colorSpace: SRGBColorSpace, depthBuffer: true });\n const face = size * size * 4;\n const lit = new Uint8Array(face * 6 * boxes.length);\n const glow = new Uint8Array(face * 6 * boxes.length);\n const right = new Vector3();\n const back = new Vector3();\n const centre = new Vector3();\n const extent = new Vector3();\n const shoot = async (into: Uint8Array) => {\n const previous = renderer.getRenderTarget();\n renderer.setRenderTarget(target);\n try {\n renderer.clear(true, true, true);\n renderer.render(scene, camera);\n } finally {\n renderer.setRenderTarget(previous);\n }\n into.set(await readBytes(renderer, target, 0));\n };\n // Far enough to see through doorways into any other room.\n const reach =\n boxes\n .reduce((all, box) => all.union(box), new Box3())\n .getSize(extent)\n .length() * 2;\n try {\n for (const [i, box] of boxes.entries()) {\n camera.near = box.getSize(extent).length() * 1e-3;\n camera.far = reach;\n camera.updateProjectionMatrix();\n box.getCenter(centre);\n for (const [f, [forward, up]] of FACES.entries()) {\n camera.matrix.makeBasis(right.crossVectors(forward, up), up, back.copy(forward).negate()).setPosition(centre);\n camera.updateMatrixWorld(true);\n const at = (i * 6 + f) * face;\n ambient.visible = true;\n await shoot(lit.subarray(at, at + face));\n ambient.visible = false;\n await shoot(glow.subarray(at, at + face));\n }\n // Yield to the page between rooms, so that a long bake does not freeze it.\n await nextTask();\n }\n } finally {\n target.dispose();\n baked.dispose();\n }\n // Light adds up in linear values: response = lit - glow.\n for (let i = 0; i < lit.length; i++) {\n if (i % 4 === 3) continue;\n lit[i] = linearToSrgb(Math.max(0, (SRGB_TO_LINEAR[lit[i] ?? 0] ?? 0) - (SRGB_TO_LINEAR[glow[i] ?? 0] ?? 0))) * 255 + 0.5;\n }\n return { response: layers(lit, size, boxes.length), glow: glow.some((v, i) => i % 4 !== 3 && v > 0) ? layers(glow, size, boxes.length) : null, span };\n}\n\nconst SRGB_TO_LINEAR = Float32Array.from({ length: 256 }, (_, i) => srgbToLinear(i / 255));\n\nfunction layers(data: Uint8Array, size: number, rooms: number): DataArrayTexture {\n const texture = new DataArrayTexture(data, size, size, rooms * 6);\n texture.colorSpace = SRGBColorSpace;\n texture.minFilter = LinearMipmapLinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipmaps = true;\n texture.needsUpdate = true;\n return texture;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"material.js","sourceRoot":"","sources":["../../../src/baked/interior/material.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"material.js","sourceRoot":"","sources":["../../../src/baked/interior/material.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n InterpolationSamplingType,\n Matrix4,\n MeshStandardNodeMaterial,\n PhysicalLightingModel,\n StorageBufferAttribute,\n type Box3,\n type DataTexture,\n type Node,\n type NodeBuilder,\n type Object3D,\n type StorageBufferNode,\n type Texture,\n type Vector3,\n} from \"three/webgpu\";\nimport {\n If,\n cameraPosition,\n cameraProjectionMatrix,\n cameraWorldMatrix,\n clamp,\n cross,\n dFdx,\n dFdy,\n dot,\n float,\n int,\n ivec2,\n length,\n log2,\n mat4,\n materialEnvIntensity,\n max,\n min,\n modelWorldMatrix,\n normalize,\n pmremTexture,\n positionGeometry,\n positionWorld,\n select,\n sign,\n step,\n storage,\n texture,\n textureLoad,\n uniform,\n uv,\n varying,\n vec2,\n vec3,\n vec4,\n} from \"three/tsl\";\nimport { instanceMatrixOf, spaceOf } from \"../../levels/fade.js\";\nimport { isScene, rootOf } from \"../../three.js\";\nimport { affine, column, contextNode, isNodeOf, isOrthographic } from \"../../tsl.js\";\nimport { FACES, type Faces } from \"./faces.js\";\n\n// Interior mapping (Andrew Willmott's interior cubemaps): a window texel looks into the\n// box of the room behind it. The view ray, in the source's space, leaves that box at a\n// wall point; the room's cube, rendered from the box's centre, holds what the room shows\n// there. Furniture flattens onto the walls; the walls themselves are exact.\n\n/** What a baked material needs to look into its rooms. */\nexport interface Rooms extends Faces {\n boxes: readonly Box3[];\n /**\n * per baked texel: R the room of the nearest window + 1, read texel by texel; G the share\n * of the room that shows, filtered\n */\n windows: DataTexture;\n}\n\nconst identity = new Matrix4();\n/** Where the drawn mesh's geometry space sits in the source's: moved where a Lod draws it (see `spaceOf`). */\nconst space = uniform(new Matrix4()).onObjectUpdate(({ object }) => spaceOf(object) ?? identity);\n\nfunction flat<T>(node: Node<T>): Node<T> {\n return varying(node).setInterpolation(InterpolationSamplingType.FLAT);\n}\n\n/** `vectors[index]`, for an index known only in the shader. */\nfunction pick(vectors: readonly Vector3[], index: Node<\"int\">): Node<\"vec3\"> {\n return vectors.reduceRight<Node<\"vec3\">>((rest, v, i) => select(index.equal(i), vec3(v.x, v.y, v.z), rest), vec3(0, 0, 0));\n}\n\n/**\n * A baked level's material that shows `rooms` through its windows. The rooms' textures\n * go with it.\n */\nexport class InteriorMappingMaterial extends MeshStandardNodeMaterial {\n readonly isInteriorMaterial = true;\n rooms: Rooms | null = null;\n /**\n * Each room's box, its min then its max, as the shader reads them: one node per set of rooms, named so that the\n * shaders of every building with as many rooms share one program.\n */\n private bounds: StorageBufferNode<\"vec4\"> | null = null;\n\n /** Show `rooms` through the windows. */\n furnish(rooms: Rooms): this {\n const boxes = new StorageBufferAttribute(Float32Array.from(rooms.boxes.flatMap((box) => [...box.min.toArray(), 0, ...box.max.toArray(), 0])), 4);\n this.rooms = rooms;\n this.bounds = storage(boxes, \"vec4\", 0).setName(\"lodRoomBounds\");\n this.addEventListener(\"dispose\", () => {\n rooms.response.dispose();\n rooms.glow?.dispose();\n rooms.windows.dispose();\n boxes.dispose();\n });\n return this;\n }\n\n override setupLightingModel(): PhysicalLightingModel {\n return this.rooms && this.bounds ? new InteriorLightingModel(this.rooms, this.bounds) : super.setupLightingModel();\n }\n\n override copy(source: InteriorMappingMaterial): this {\n super.copy(source);\n this.rooms = source.rooms;\n this.bounds = source.bounds;\n return this;\n }\n}\n\n/**\n * The room is lit by indirect light only: the sun's direct light, which walls and roof\n * would block, is left out. Ambient light, light probes and hemisphere lights are taken at\n * the window; the environment, as three lights the real room's walls, at the wall the\n * view ray meets. Its glow adds on top. Glass shows the room by its share, under its own\n * reflection: three's specular term carries the Fresnel.\n */\nclass InteriorLightingModel extends PhysicalLightingModel {\n constructor(\n private readonly rooms: Rooms,\n /** see `InteriorMappingMaterial.bounds` */\n private readonly boxes: StorageBufferNode<\"vec4\">,\n ) {\n super();\n }\n\n // After three's lights and before it sums them: by `finish` the sum is made.\n override start(builder: NodeBuilder): void {\n super.start(builder);\n const { rooms } = this;\n const irradiance = contextNode(builder, \"irradiance\");\n const directDiffuse = contextNode(builder, \"reflectedLight\", \"directDiffuse\");\n const indirectDiffuse = contextNode(builder, \"reflectedLight\", \"indirectDiffuse\");\n if (!isNodeOf(irradiance, \"vec3\", builder) || !isNodeOf(directDiffuse, \"vec3\", builder) || !isNodeOf(indirectDiffuse, \"vec3\", builder))\n throw new Error(\"bakeMesh: three's lighting is not made of vec3s\");\n const count = rooms.boxes.length;\n const { boxes } = this;\n const faceSize = rooms.response.image.width;\n const [width, height] = [rooms.windows.image.width, rooms.windows.image.height];\n\n // The view ray in the source's space, and the source's space to world.\n const instance = instanceMatrixOf(builder.object);\n const toWorld = affine((instance ? modelWorldMatrix.mul(instance) : modelWorldMatrix).mul(affineInverse(space)));\n const back = column(cameraWorldMatrix, 2).xyz;\n const worldRay = select(isOrthographic(cameraProjectionMatrix), back.negate(), positionWorld.sub(cameraPosition));\n const point = varying(space.mul(vec4(positionGeometry, 1)).xyz);\n const ray = varying(toWorld.solve(worldRay));\n const [x, y, z] = toWorld.normalColumns.map(flat);\n if (!x || !y || !z) throw new Error(\"bakeMesh: a normal matrix has three columns\");\n\n const share = texture(rooms.windows, uv()).g;\n const texel = ivec2(clamp(uv().mul(vec2(width, height)), vec2(0, 0), vec2(width - 1, height - 1)));\n // The room's number, 0 for none, as a float: the box's index is clamped to a room.\n const room = float(textureLoad(rooms.windows, texel).r.mul(255).add(0.5).floor()).toVar();\n const box = int(clamp(room.sub(1), 0, count - 1)).toVar();\n const low = boxes.element(box.mul(2)).xyz;\n const high = boxes.element(box.mul(2).add(1)).xyz;\n const unit = normalize(ray);\n // Nudged off zero, so each axis has a crossing.\n const direction = unit\n .add(\n vec3(1, 1, 1)\n .sub(step(vec3(1e-30, 1e-30, 1e-30), unit.abs()))\n .mul(1e-6),\n )\n .toVar();\n const far = low.sub(point).div(direction).max(high.sub(point).div(direction)).toVar();\n // The box is intersected for every texel, and the derivatives that pick the cube's mip level are taken here, before\n // the branch: inside it, at a window's edge, they would read neighbours that skipped it, which differ run to run.\n const exit = point.add(direction.mul(max(min(far.x, min(far.y, far.z)), 0))).toVar();\n const footprint = max(length(dFdx(exit)), length(dFdy(exit))).toVar();\n\n If(room.greaterThan(0).and(share.greaterThan(0)), () => {\n const wall = exit.sub(low.add(high).mul(0.5));\n const a = wall.abs();\n const face = select(\n a.x.greaterThanEqual(a.y).and(a.x.greaterThanEqual(a.z)),\n select(wall.x.greaterThanEqual(0), int(0), int(1)),\n select(a.y.greaterThanEqual(a.z), select(wall.y.greaterThanEqual(0), int(2), int(3)), select(wall.z.greaterThanEqual(0), int(4), int(5))),\n ).toVar();\n const forward = pick(\n FACES.map(([f]) => f),\n face,\n );\n const up = pick(\n FACES.map(([, u]) => u),\n face,\n );\n const depth = max(dot(wall, forward), 1e-6).mul(rooms.span);\n const at = vec2(dot(wall, cross(forward, up)), dot(wall, up))\n .div(depth)\n .mul(0.5)\n .add(0.5);\n const layer = box.mul(6).add(face);\n const level = log2(max(footprint.mul(0.5 * faceSize).div(depth), 1e-6));\n const inward = select(\n far.x.lessThanEqual(min(far.y, far.z)),\n vec3(sign(direction.x).negate(), 0, 0),\n select(far.y.lessThanEqual(far.z), vec3(0, sign(direction.y).negate(), 0), vec3(0, 0, sign(direction.z).negate())),\n );\n const wallNormal = normalize(x.mul(inward.x).add(y.mul(inward.y)).add(z.mul(inward.z)));\n const environment = environmentOf(builder.object);\n const ibl = environment ? pmremTexture(environment, wallNormal, float(1)).rgb.mul(Math.PI).mul(materialEnvIntensity) : vec3(0, 0, 0);\n const light = irradiance.add(ibl);\n let shown = texture(rooms.response, at).depth(layer).level(level).rgb.mul(light).div(Math.PI);\n if (rooms.glow) shown = shown.add(texture(rooms.glow, at).depth(layer).level(level).rgb);\n // What the glass shows of its own, where the room does not show.\n const rest = share.oneMinus();\n directDiffuse.assign(directDiffuse.mul(rest));\n indirectDiffuse.assign(indirectDiffuse.mul(rest).add(shown.mul(share)));\n });\n }\n}\n\n/** The environment of the scene `object` is in, if any. */\nfunction environmentOf(object: Object3D): Texture | null {\n const root = rootOf(object);\n return isScene(root) ? root.environment : null;\n}\n\n/** The inverse of an affine `m`, as a matrix: the linear part's inverse and the translation undone. */\nfunction affineInverse(m: Node<\"mat4\">): Node<\"mat4\"> {\n const inverse = affine(m);\n const solve = (v: Node<\"vec3\">) => vec4(inverse.solve(v), 0);\n return mat4(solve(vec3(1, 0, 0)), solve(vec3(0, 1, 0)), solve(vec3(0, 0, 1)), vec4(inverse.unproject(vec3(0, 0, 0)), 1));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rooms.js","sourceRoot":"","sources":["../../../src/baked/interior/rooms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rooms.js","sourceRoot":"","sources":["../../../src/baked/interior/rooms.ts"],"names":[],"mappings":"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","sourcesContent":["import { Box3, Ray, Vector3, type Matrix4, type Object3D } from \"three/webgpu\";\nimport { forEachVertex } from \"../../source/detail.js\";\nimport { isLight } from \"../../three.js\";\n\n/** Most rooms an interior may have: six faces each in texture arrays of at most 256 layers. */\nconst MAX_ROOMS = 42;\n\n/** Share of the smaller box two rooms may overlap by: walls that meet, not rooms inside rooms. */\nconst OVERLAP = 0.02;\n\n/**\n * The boxes of `interior`'s rooms, in the source's own space: one per direct child, the\n * bounds of what it draws. `placement` puts the interior in the source's space.\n *\n * Lights are refused: wherever the source draws they would be scene lights, so every\n * switch to or from it changes the scene's light count (and recompiles every lit\n * material), and a Lod's templates light nothing. Lamps glow with emissive\n * materials instead.\n */\nexport function readBoxes(interior: Object3D, placement: Matrix4): Box3[] {\n interior.traverse((node) => {\n if (isLight(node)) throw new Error(`bakeMesh: the interior has a light (\"${node.name}\"); give lamps emissive materials instead`);\n });\n const rooms = interior.children;\n if (rooms.length === 0) throw new Error(\"bakeMesh: the interior has no rooms: each direct child of it is one room\");\n if (rooms.length > MAX_ROOMS) throw new Error(`bakeMesh: the interior has ${rooms.length} rooms, at most ${MAX_ROOMS} are supported`);\n const boxes = rooms.map((room, i) => {\n if (room.matrixAutoUpdate) room.updateMatrix();\n const matrix = placement.clone().multiply(room.matrix);\n const box = new Box3();\n forEachVertex(room, (p) => box.expandByPoint(p.applyMatrix4(matrix)));\n if (box.isEmpty()) throw new Error(`bakeMesh: room ${i} (\"${room.name}\") of the interior draws nothing`);\n return box;\n });\n boxes.forEach((a, i) =>\n boxes.slice(i + 1).forEach((b, k) => {\n const shared = volume(a.clone().intersect(b));\n if (shared > OVERLAP * Math.min(volume(a), volume(b)))\n throw new Error(\n `bakeMesh: rooms ${i} (\"${rooms[i]?.name}\") and ${i + k + 1} (\"${rooms[i + k + 1]?.name}\") of the interior overlap: each room fills a box of its own`,\n );\n }),\n );\n return boxes;\n}\n\nfunction volume(box: Box3): number {\n if (box.isEmpty()) return 0;\n const { x, y, z } = box.getSize(new Vector3());\n return x * y * z;\n}\n\n/**\n * How far behind glass a room may begin: half the thinnest room's smallest side. A wall\n * between glass and room is thinner than any room; a ray that met no room within half a\n * room's size is not looking into one through this glass.\n */\nexport function windowDepth(boxes: readonly Box3[]): number {\n const size = new Vector3();\n return Math.min(...boxes.map((box) => Math.min(...box.getSize(size).toArray()))) / 2;\n}\n\nconst ray = new Ray();\nconst enter = new Vector3();\n\n/**\n * The room a ray from `origin` along unit `direction` is in or enters first within\n * `far`: the room behind a window. -1 for none.\n */\nexport function roomAlong(boxes: readonly Box3[], origin: Vector3, direction: Vector3, far: number): number {\n ray.set(origin, direction);\n let nearest = -1;\n let best = far;\n boxes.forEach((box, i) => {\n const distance = box.containsPoint(origin) ? 0 : ray.intersectBox(box, enter)?.distanceTo(origin);\n if (distance === undefined || distance > best) return;\n best = distance;\n nearest = i;\n });\n return nearest;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"low.js","sourceRoot":"","sources":["../../src/baked/low.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"low.js","sourceRoot":"","sources":["../../src/baked/low.ts"],"names":[],"mappings":"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","sourcesContent":["import { BufferAttribute, BufferGeometry, Mesh, type Object3D } from \"three/webgpu\";\nimport { mergeVertices } from \"three/addons/utils/BufferGeometryUtils.js\";\nimport { decimate } from \"../simplify/index.js\";\nimport { measureDeviation } from \"../source/deviation.js\";\nimport type { Source } from \"../source/source.js\";\nimport { merge, type Surface } from \"../source/surface.js\";\nimport { rasterize, type Raster } from \"./raster.js\";\nimport { unwrap } from \"./unwrap.js\";\n\n/** The surface a bake writes onto, laid out in its UVs. */\nexport interface Low extends Surface {\n uvs: Float32Array;\n raster: Raster;\n /** How far the low surface is from the source's, in the source's units: see `measureDeviation`. */\n deviation: number;\n widest: number;\n}\n\n/** The source simplified to `ratio` of its triangles, welded first: seams and materials do not matter to a bake. */\nexport function simplified(source: Source, ratio: number): Promise<Object3D> {\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new BufferAttribute(source.positions, 3));\n geometry.setIndex(new BufferAttribute(source.index, 1));\n return decimate(new Mesh(mergeVertices(geometry)), ratio);\n}\n\n/**\n * `object`'s triangles (in its own space, which must be the source's) with UVs to bake\n * into: its own when they are usable — inside 0..1, no two triangles on one texel and a\n * texel of free border between charts — else a fresh xatlas atlas.\n */\nexport async function layOut(object: Object3D, source: Source, size: number): Promise<Low> {\n const surface = merge(object, \"bakeMesh\");\n const { deviation, widest } = measureDeviation(source, surface);\n const { uvs, index } = surface;\n if (surface.hasUvs && uvs.every((x) => x >= 0 && x <= 1)) {\n const raster = rasterize(uvs, index, size);\n if (raster.overlaps === 0 && raster.covered > 0 && separated(raster, charts(uvs, index))) return { ...surface, raster, deviation, widest };\n }\n const atlas = await unwrap(surface, size);\n return { ...atlas, raster: rasterize(atlas.uvs, atlas.index, size), deviation, widest };\n}\n\n/** Per triangle, its chart: triangles that share a UV point are in one. */\nfunction charts(uvs: Float32Array, index: Uint32Array): Int32Array {\n const parent = Int32Array.from({ length: index.length / 3 }, (_, i) => i);\n const root = (i: number): number => {\n while (parent[i] !== i) i = parent[i] = parent[parent[i] ?? i] ?? i;\n return i;\n };\n // The first triangle with a corner at each UV point.\n const first = new Map<string, number>();\n for (let i = 0; i < index.length; i++) {\n const v = index[i] ?? 0;\n const key = `${uvs[v * 2]},${uvs[v * 2 + 1]}`;\n const triangle = Math.floor(i / 3);\n const other = first.get(key);\n if (other === undefined) first.set(key, triangle);\n else parent[root(triangle)] = root(other);\n }\n return parent.map((_, i) => root(i));\n}\n\n/** Whether no texel of one chart touches a texel of another (8 neighbours). */\nfunction separated({ size, triangles }: Raster, chart: Int32Array): boolean {\n for (let y = 0; y < size; y++)\n for (let x = 0; x < size; x++) {\n const t = triangles[y * size + x] ?? -1;\n if (t < 0) continue;\n for (let dy = 0; dy <= 1; dy++)\n for (let dx = -1; dx <= 1; dx++) {\n if (dy === 0 && dx <= 0) continue;\n const nx = x + dx;\n const ny = y + dy;\n if (nx < 0 || nx >= size || ny >= size) continue;\n const u = triangles[ny * size + nx] ?? -1;\n if (u >= 0 && chart[u] !== chart[t]) return false;\n }\n }\n return true;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"raster.js","sourceRoot":"","sources":["../../src/baked/raster.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"raster.js","sourceRoot":"","sources":["../../src/baked/raster.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * A triangle list laid out in its UVs on a `size`² texel grid: per texel, the triangle\n * covering its centre (-1 for none) and that point's weights for the triangle's second\n * and third corners.\n */\nexport interface Raster {\n size: number;\n triangles: Int32Array;\n weights: Float32Array;\n /** texels covered */\n covered: number;\n /** texels whose centre more than one triangle covers: UVs that overlap */\n overlaps: number;\n}\n\n/**\n * Rasterize `index`'s triangles at their `uvs` on the CPU. A texel centre on an edge two\n * triangles share belongs to exactly one of them (a fill rule), so a clean layout has no\n * overlaps; folded or stacked UVs do. Where triangles overlap, the first keeps the texel.\n */\nexport function rasterize(uvs: Float32Array, index: Uint32Array, size: number): Raster {\n const triangles = new Int32Array(size * size).fill(-1);\n const weights = new Float32Array(size * size * 2);\n let covered = 0;\n let overlaps = 0;\n const p = new Float64Array(6);\n for (let t = 0; t < index.length / 3; t++) {\n for (let k = 0; k < 3; k++) {\n const v = index[t * 3 + k] ?? 0;\n p[k * 2] = (uvs[v * 2] ?? 0) * size;\n p[k * 2 + 1] = (uvs[v * 2 + 1] ?? 0) * size;\n }\n const [ax = 0, ay = 0, bx = 0, by = 0, cx = 0, cy = 0] = p;\n const area = edge(ax, ay, bx, by, cx, cy);\n if (area === 0) continue;\n // Corners in counter-clockwise order for the fill rule; weights stay the input's.\n const sign = area > 0 ? 1 : -1;\n const claimA = claims(bx, by, cx, cy, sign);\n const claimB = claims(cx, cy, ax, ay, sign);\n const claimC = claims(ax, ay, bx, by, sign);\n const x0 = Math.max(0, Math.ceil(Math.min(ax, bx, cx) - 0.5));\n const x1 = Math.min(size - 1, Math.floor(Math.max(ax, bx, cx) - 0.5));\n const y0 = Math.max(0, Math.ceil(Math.min(ay, by, cy) - 0.5));\n const y1 = Math.min(size - 1, Math.floor(Math.max(ay, by, cy) - 0.5));\n for (let y = y0; y <= y1; y++)\n for (let x = x0; x <= x1; x++) {\n const qx = x + 0.5;\n const qy = y + 0.5;\n const wa = edge(bx, by, cx, cy, qx, qy) * sign;\n const wb = edge(cx, cy, ax, ay, qx, qy) * sign;\n const wc = edge(ax, ay, bx, by, qx, qy) * sign;\n if (wa < 0 || wb < 0 || wc < 0) continue;\n if ((wa === 0 && !claimA) || (wb === 0 && !claimB) || (wc === 0 && !claimC)) continue;\n const texel = y * size + x;\n if (triangles[texel] !== -1) {\n overlaps++;\n continue;\n }\n covered++;\n triangles[texel] = t;\n weights[texel * 2] = (wb * sign) / area;\n weights[texel * 2 + 1] = (wc * sign) / area;\n }\n }\n return { size, triangles, weights, covered, overlaps };\n}\n\n/**\n * Twice the signed area of (p, q, r). Computed from the edge's lexicographically smaller\n * end, so two triangles sharing the edge get exactly opposite values: the fill rule\n * relies on that.\n */\nfunction edge(px: number, py: number, qx: number, qy: number, rx: number, ry: number): number {\n if (px > qx || (px === qx && py > qy)) return -((px - qx) * (ry - qy) - (py - qy) * (rx - qx));\n return (qx - px) * (ry - py) - (qy - py) * (rx - px);\n}\n\n/** Whether the edge p → q (reversed for clockwise triangles) claims centres exactly on it. */\nfunction claims(px: number, py: number, qx: number, qy: number, sign: number): boolean {\n const dx = (qx - px) * sign;\n const dy = (qy - py) * sign;\n return dy > 0 || (dy === 0 && dx < 0);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"textures.js","sourceRoot":"","sources":["../../src/baked/textures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"textures.js","sourceRoot":"","sources":["../../src/baked/textures.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,wBAAwB,EACxB,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,SAAS,GAEV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAc,MAAM,aAAa,CAAC;AAEhG,sHAAsH;AACtH,sCAAsC;AAEtC,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,IAAY,EAAE,OAAuB;IAC9E,IAAI,CAAC,CAAC,OAAO,YAAY,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,YAAY,gBAAgB,CAAC;QAAE,IAAI,CAAC,WAAW,IAAI,eAAe,CAAC,CAAC;IACtH,MAAM,KAAK,GAAY,OAAO,CAAC,KAAK,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAC/B,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,OAAO,YAAY,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,IACE,OAAO,CAAC,IAAI,KAAK,gBAAgB;QACjC,CAAC,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC;QAC9D,OAAO,CAAC,SAAS,KAAK,wBAAwB;QAC9C,OAAO,CAAC,SAAS,KAAK,YAAY;QAClC,OAAO,CAAC,KAAK,KAAK,mBAAmB;QACrC,OAAO,CAAC,KAAK,KAAK,mBAAmB;QACrC,OAAO,CAAC,KAAK;QACb,OAAO,CAAC,gBAAgB;QACxB,OAAO,CAAC,OAAO,KAAK,CAAC;QACrB,OAAO,CAAC,OAAO,KAAK,SAAS;QAC7B,CAAC,OAAO,CAAC,gBAAgB;QACzB,OAAO,CAAC,cAAc,KAAK,IAAI;QAC/B,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;QACtB,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC;QACtB,OAAO,CAAC,QAAQ,KAAK,CAAC;QACtB,CAAC,OAAO,CAAC,UAAU,KAAK,cAAc,IAAI,OAAO,CAAC,UAAU,KAAK,YAAY,CAAC;QAE9E,IAAI,CAAC,eAAe,IAAI,mBAAmB,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,KAAa,EAAE,MAAc,EAAE,EAAE;QAC/D,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ;YAAE,IAAI,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;QAC7H,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAC1B,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC;YAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC5G,KAAK,CAAC,GAAG,IAAI,OAAO,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO;QACL,KAAK;QACL,MAAM;QACN,KAAK;QACL,QAAQ;QACR,IAAI,EAAE,OAAO,CAAC,UAAU,KAAK,cAAc;QAC3C,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,IAAI;KACL,CAAC;AACJ,CAAC;AAKD,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,IAAY,EAAE,KAAc,EAAE,KAAc;IACpF,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAC/B,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAC7B,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACtG,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC;QAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,CAAC,GAAW,EAAE,KAAa,EAAE,MAAc,EAAE,EAAE;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ;YAAE,IAAI,CAAC,WAAW,GAAG,cAAc,CAAC,CAAC;QAC9F,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAChH,OAAO,CAAC,MAAM,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;IACxD,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;IACxE,OAAO,CAAC,SAAS,GAAG,wBAAwB,CAAC;IAC7C,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;IACjC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7C,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;IACvC,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC;QAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAChH,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IACpC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACvD,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EACxB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,KAAK,CAAC;YAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC5G,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAC5E,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC","sourcesContent":["import {\n ClampToEdgeWrapping,\n DataArrayTexture,\n DataTexture,\n LinearFilter,\n LinearMipmapLinearFilter,\n NoColorSpace,\n RGBAFormat,\n RGFormat,\n SRGBColorSpace,\n UnsignedByteType,\n UVMapping,\n type Texture,\n} from \"three/webgpu\";\nimport { boolean, fail, file, integer, number, numbers, object, type Files } from \"./fields.js\";\n\n// A baked mesh's data textures in its container: their pixels and mips as files, their settings as metadata. Only the\n// settings a bake makes are accepted.\n\n/** Add `texture`'s pixels and mips to `files` as `name`; returns its metadata. */\nexport function writeTexture(files: Files, name: string, texture: Texture | null) {\n if (!(texture instanceof DataTexture) && !(texture instanceof DataArrayTexture)) fail(`missing ${name} data texture`);\n const image: unknown = texture.image;\n const base = object(image);\n const width = integer(base.width),\n height = integer(base.height);\n const depth = texture instanceof DataArrayTexture ? integer(base.depth) : 1;\n if (\n texture.type !== UnsignedByteType ||\n (texture.format !== RGBAFormat && texture.format !== RGFormat) ||\n texture.minFilter !== LinearMipmapLinearFilter ||\n texture.magFilter !== LinearFilter ||\n texture.wrapS !== ClampToEdgeWrapping ||\n texture.wrapT !== ClampToEdgeWrapping ||\n texture.flipY ||\n texture.premultiplyAlpha ||\n texture.channel !== 0 ||\n texture.mapping !== UVMapping ||\n !texture.matrixAutoUpdate ||\n texture.internalFormat !== null ||\n texture.offset.x !== 0 ||\n texture.offset.y !== 0 ||\n texture.repeat.x !== 1 ||\n texture.repeat.y !== 1 ||\n texture.rotation !== 0 ||\n (texture.colorSpace !== SRGBColorSpace && texture.colorSpace !== NoColorSpace)\n )\n fail(`unsupported ${name} texture settings`);\n const channels = texture.format === RGFormat ? 2 : 4;\n const pixels = (value: unknown, width: number, height: number) => {\n if (!(value instanceof Uint8Array) || value.byteLength !== width * height * depth * channels) fail(`invalid ${name} pixels`);\n return value;\n };\n files[name + \"/0\"] = pixels(base.data, width, height);\n const mips = texture.mipmaps.map((value, index) => {\n const mip = object(value);\n const w = integer(mip.width),\n h = integer(mip.height);\n if (w !== Math.max(1, width >> index) || h !== Math.max(1, height >> index)) fail(\"invalid mip dimensions\");\n files[`${name}/mip${index}`] = pixels(mip.data, w, h);\n return [w, h];\n });\n return {\n width,\n height,\n depth,\n channels,\n srgb: texture.colorSpace === SRGBColorSpace,\n anisotropy: texture.anisotropy,\n generateMipmaps: texture.generateMipmaps,\n unpackAlignment: texture.unpackAlignment,\n mips,\n };\n}\n\n/** The texture `writeTexture` wrote as `name`, with its metadata `value`: an array texture if `array`. */\nexport function readTexture(files: Files, name: string, value: unknown, array: true): DataArrayTexture;\nexport function readTexture(files: Files, name: string, value: unknown, array: false): DataTexture;\nexport function readTexture(files: Files, name: string, value: unknown, array: boolean): DataArrayTexture | DataTexture {\n const meta = object(value);\n const width = integer(meta.width),\n height = integer(meta.height),\n depth = integer(meta.depth);\n const channels = meta.channels === 2 ? 2 : meta.channels === 4 ? 4 : fail(\"invalid texture channels\");\n if (!array && depth !== 1) fail(\"2D texture with layers\");\n const pixels = (key: string, width: number, height: number) => {\n const data = file(files, key);\n if (data.byteLength !== width * height * depth * channels) fail(`invalid ${key} byte length`);\n return data;\n };\n const data = pixels(name + \"/0\", width, height);\n const texture = array ? new DataArrayTexture(data, width, height, depth) : new DataTexture(data, width, height);\n texture.format = channels === 2 ? RGFormat : RGBAFormat;\n texture.colorSpace = boolean(meta.srgb) ? SRGBColorSpace : NoColorSpace;\n texture.minFilter = LinearMipmapLinearFilter;\n texture.magFilter = LinearFilter;\n texture.anisotropy = number(meta.anisotropy);\n texture.generateMipmaps = boolean(meta.generateMipmaps);\n const alignment = meta.unpackAlignment;\n if (alignment !== 1 && alignment !== 2 && alignment !== 4 && alignment !== 8) fail(\"invalid texture alignment\");\n texture.unpackAlignment = alignment;\n if (!Array.isArray(meta.mips)) fail(\"missing mipmaps\");\n texture.mipmaps = meta.mips.map((value, index) => {\n const size = numbers(value, 2);\n const w = integer(size[0]),\n h = integer(size[1]);\n if (w !== Math.max(1, width >> index) || h !== Math.max(1, height >> index)) fail(\"invalid mip dimensions\");\n return { data: pixels(`${name}/mip${index}`, w, h), width: w, height: h };\n });\n texture.needsUpdate = true;\n return texture;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/baked/transfer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../src/baked/transfer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Box3, Matrix3, Vector3 } from \"three/webgpu\";\nimport { nextTask } from \"../task.js\";\nimport { tangentFrame } from \"../source/frame.js\";\nimport { MaterialEvaluator } from \"../source/evaluator.js\";\nimport type { Source } from \"../source/source.js\";\nimport { linearToSrgb } from \"../source/sampler.js\";\nimport { SourceRaycaster } from \"../source/raycaster.js\";\nimport { roomAlong, windowDepth } from \"./interior/rooms.js\";\nimport type { Low } from \"./low.js\";\n\n/** The baked maps, RGBA8 each, row 0 at v = 0. */\ninterface Maps {\n /** sRGB base colour; alpha 255 where the surface is, 0 where it is cut out */\n color: Uint8ClampedArray;\n /** tangent-space normal, in the frame three derives from the low mesh's UVs */\n normal: Uint8ClampedArray;\n /** R occlusion, G roughness, B metalness */\n orm: Uint8ClampedArray;\n /**\n * RG8: R the room behind the nearest window texel + 1 (0 without rooms), G the share of\n * a window texel through which its room shows (0 elsewhere)\n */\n windows: Uint8Array;\n}\n\n/**\n * What a texel became: no low triangle covers it, a surface was baked, or its ray found\n * no surface (cut out where the source cuts out, else its neighbours' colour).\n */\nconst EMPTY = 0;\nconst BAKED = 1;\nconst OPEN = 2;\n\n/**\n * Transfer `source`'s surface onto `low`'s texels. For each covered texel, a ray is cast\n * from P + reach·N to P - reach·N (N the smoothed low normal) against the source; the\n * first hit that is opaque and faces the same way as the low triangle (or is on a\n * double-sided material) is shaded. With none, the ray goes on through the whole source:\n * over open sources such as a canopy of leaves it finds the leaves lower down that a\n * viewer sees through the gap. A texel whose ray finds nothing at all is open: cut out if\n * the source cuts out anywhere, as the source shows nothing there either, else (an\n * opaque low mesh cannot show a hole) coloured like its neighbours. The nearest source\n * point would be the wrong colour there: over a canopy it is whatever stands highest,\n * such as the tassels of corn, which then cover the bake in pale blobs. Texels no surface\n * was baked into are filled from their neighbours, so filtering and mips do not pull in\n * black at chart edges.\n *\n * With room `boxes`, a texel whose surface is glass is a window into the room the ray\n * enters after passing it (see `windowDepth`).\n */\nexport async function transfer(source: Source, low: Low, reach: number, texelSize: number, boxes: readonly Box3[] | null): Promise<Maps> {\n const { size, triangles, weights } = low.raster;\n const count = size * size;\n const color = new Uint8ClampedArray(count * 4);\n const normal = new Uint8ClampedArray(count * 4);\n const orm = new Uint8ClampedArray(count * 4);\n const state = new Uint8Array(count);\n const windows = new Uint8Array(count * 2);\n const depth = boxes ? windowDepth(boxes) : 0;\n const hit = new Vector3();\n const evaluator = new MaterialEvaluator(source, texelSize);\n const raycaster = new SourceRaycaster(source, evaluator);\n const P = new Vector3();\n const N = new Vector3();\n const F = new Vector3();\n const R = new Vector3();\n const origin = new Vector3();\n const direction = new Vector3();\n const e1 = new Vector3();\n const e2 = new Vector3();\n const tangent = new Vector3();\n const bitangent = new Vector3();\n const frame = new Matrix3();\n const local = new Vector3();\n // Far enough to pass through the whole source from anywhere on the low mesh.\n const through = 2 * reach + source.bvh.getBoundingBox(new Box3()).getSize(new Vector3()).length();\n const { positions, normals, uvs, index } = low;\n let w0 = 0;\n let w1 = 0;\n let w2 = 0;\n let a = 0;\n let b = 0;\n let c = 0;\n const lerp = (array: Float32Array, k: number) => (array[a * 3 + k] ?? 0) * w0 + (array[b * 3 + k] ?? 0) * w1 + (array[c * 3 + k] ?? 0) * w2;\n const edge = (to: number, k: number) => (positions[to * 3 + k] ?? 0) - (positions[a * 3 + k] ?? 0);\n const uv = (corner: number, k: number) => uvs[corner * 2 + k] ?? 0;\n\n let yielded = performance.now();\n for (let texel = 0; texel < count; texel++) {\n // Yield to the page every 30 ms or so, so that a long bake does not freeze it.\n if ((texel & 1023) === 0 && performance.now() - yielded > 30) {\n await nextTask();\n yielded = performance.now();\n }\n const triangle = triangles[texel] ?? -1;\n if (triangle < 0) continue;\n a = index[triangle * 3] ?? 0;\n b = index[triangle * 3 + 1] ?? 0;\n c = index[triangle * 3 + 2] ?? 0;\n w1 = weights[texel * 2] ?? 0;\n w2 = weights[texel * 2 + 1] ?? 0;\n w0 = 1 - w1 - w2;\n P.set(lerp(positions, 0), lerp(positions, 1), lerp(positions, 2));\n N.set(lerp(normals, 0), lerp(normals, 1), lerp(normals, 2)).normalize();\n e1.set(edge(b, 0), edge(b, 1), edge(b, 2));\n e2.set(edge(c, 0), edge(c, 1), edge(c, 2));\n F.crossVectors(e1, e2).normalize();\n // Rays follow the smoothed normal, so creases leave no gaps, unless smoothing broke\n // down (back-to-back cards welded). Which side faces out is the low triangle's.\n R.copy(N.dot(F) > 0.2 ? N : F);\n origin.copy(P).addScaledVector(R, reach);\n direction.copy(R).negate();\n // From outside in: the outermost surface is what a viewer sees of the source here.\n if (raycaster.cast(origin, direction, through, F) !== \"opaque\") {\n state[texel] = OPEN;\n continue;\n }\n evaluator.shade(raycaster.triangle, raycaster.w1, raycaster.w2, false);\n const { transmittance } = evaluator.material(raycaster.triangle);\n if (boxes && transmittance > 0) {\n const room = roomAlong(boxes, pointOf(source, raycaster.triangle, raycaster.w1, raycaster.w2, hit), direction, depth);\n if (room >= 0) {\n windows[texel * 2] = room + 1;\n windows[texel * 2 + 1] = Math.round(transmittance * 255);\n }\n }\n state[texel] = BAKED;\n const o = texel * 4;\n color[o] = linearToSrgb(evaluator.r) * 255;\n color[o + 1] = linearToSrgb(evaluator.g) * 255;\n color[o + 2] = linearToSrgb(evaluator.b) * 255;\n orm[o] = evaluator.ao * 255;\n orm[o + 1] = evaluator.roughness * 255;\n orm[o + 2] = evaluator.metalness * 255;\n // The normal in the frame three will rebuild here from the mesh's own normal: solve\n // (T B N) · m = n for m.\n tangentFrame(e1, e2, uv(b, 0) - uv(a, 0), uv(b, 1) - uv(a, 1), uv(c, 0) - uv(a, 0), uv(c, 1) - uv(a, 1), N, tangent, bitangent);\n frame.set(tangent.x, bitangent.x, N.x, tangent.y, bitangent.y, N.y, tangent.z, bitangent.z, N.z);\n if (frame.determinant() === 0) local.set(0, 0, 1);\n else local.copy(evaluator.normal).applyMatrix3(frame.invert()).normalize();\n normal[o] = (local.x * 0.5 + 0.5) * 255;\n normal[o + 1] = (local.y * 0.5 + 0.5) * 255;\n normal[o + 2] = (local.z * 0.5 + 0.5) * 255;\n }\n\n // Colours spread over everything not baked, open texels included, so coverage edges\n // do not fringe; coverage spreads only into texels no triangle covers.\n dilate(state, (texel) => texel === BAKED, [color, normal, orm], 0, 3, size);\n for (let texel = 0; texel < count; texel++) color[texel * 4 + 3] = state[texel] === BAKED ? 255 : 0;\n if (source.cutout) {\n dilate(state, (texel) => texel !== EMPTY, [color], 3, 1, size);\n // Coverage stays a decision: in or out, at 0.5.\n for (let i = 3; i < color.length; i += 4) color[i] = (color[i] ?? 0) >= 128 ? 255 : 0;\n } else for (let i = 3; i < color.length; i += 4) color[i] = 255;\n for (let i = 3; i < color.length; i += 4) normal[i] = orm[i] = 255;\n spreadRooms(windows, size);\n return { color, normal, orm, windows };\n}\n\n/**\n * Give every texel of `windows` without a room the room of the nearest one with (by\n * 4-neighbour steps): the share filters across window edges and mip levels, and wherever\n * it does the texel read there must name the window's room.\n */\nfunction spreadRooms(windows: Uint8Array, size: number): void {\n let ring: number[] = [];\n for (let i = 0; i < size * size; i++) if (windows[i * 2]) ring.push(i);\n while (ring.length > 0) {\n const next: number[] = [];\n for (const i of ring) {\n const x = i % size;\n const room = windows[i * 2] ?? 0;\n for (const j of [x > 0 ? i - 1 : -1, x < size - 1 ? i + 1 : -1, i - size, i + size]) {\n if (j < 0 || j >= size * size || windows[j * 2]) continue;\n windows[j * 2] = room;\n next.push(j);\n }\n }\n ring = next;\n }\n}\n\n/** The point at weights (`w1`, `w2`) of `source`'s triangle `triangle`, into `out`. */\nfunction pointOf({ positions, index }: Source, triangle: number, w1: number, w2: number, out: Vector3): Vector3 {\n const corner = (k: number, c: number) => positions[(index[triangle * 3 + k] ?? 0) * 3 + c] ?? 0;\n return out.set(\n corner(0, 0) * (1 - w1 - w2) + corner(1, 0) * w1 + corner(2, 0) * w2,\n corner(0, 1) * (1 - w1 - w2) + corner(1, 1) * w1 + corner(2, 1) * w2,\n corner(0, 2) * (1 - w1 - w2) + corner(1, 2) * w1 + corner(2, 2) * w2,\n );\n}\n\n/**\n * Fill every texel `known` rejects with the mean of its known 8 neighbours, ring by ring\n * outwards until the whole texture is filled: `channels` channels from `first` of each\n * layer.\n */\nfunction dilate(state: Uint8Array, known: (state: number) => boolean, layers: Uint8ClampedArray[], first: number, channels: number, size: number): void {\n const done = new Uint8Array(state.length);\n const queued = new Uint8Array(state.length);\n let ring = new Int32Array(state.length);\n let next = new Int32Array(state.length);\n let length = 0;\n for (let i = 0; i < state.length; i++) done[i] = known(state[i] ?? EMPTY) ? 1 : 0;\n const enqueue = (i: number) => {\n const x = i % size;\n const y = (i - x) / size;\n for (let dy = -1; dy <= 1; dy++)\n for (let dx = -1; dx <= 1; dx++) {\n const nx = x + dx;\n const ny = y + dy;\n if (nx < 0 || ny < 0 || nx >= size || ny >= size) continue;\n const j = ny * size + nx;\n if (done[j] || queued[j]) continue;\n queued[j] = 1;\n next[length++] = j;\n }\n };\n for (let i = 0; i < state.length; i++) if (done[i]) enqueue(i);\n while (length > 0) {\n [ring, next] = [next, ring];\n const count = length;\n length = 0;\n for (let r = 0; r < count; r++) {\n const i = ring[r] ?? 0;\n const x = i % size;\n const y = (i - x) / size;\n for (const layer of layers)\n for (let c = first; c < first + channels; c++) {\n let sum = 0;\n let n = 0;\n for (let dy = -1; dy <= 1; dy++)\n for (let dx = -1; dx <= 1; dx++) {\n const nx = x + dx;\n const ny = y + dy;\n if (nx < 0 || ny < 0 || nx >= size || ny >= size) continue;\n const j = ny * size + nx;\n if (!done[j]) continue;\n sum += layer[j * 4 + c] ?? 0;\n n++;\n }\n if (n > 0) layer[i * 4 + c] = sum / n;\n }\n }\n // A ring becomes a source only for the next one.\n for (let r = 0; r < count; r++) done[ring[r] ?? 0] = 1;\n for (let r = 0; r < count; r++) enqueue(ring[r] ?? 0);\n }\n}\n"]}