@drawcall/lod 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/at.js.map +1 -1
- package/dist/bake.js.map +1 -1
- package/dist/baked/codec.js.map +1 -1
- package/dist/baked/coverage.js.map +1 -1
- package/dist/baked/fields.js.map +1 -1
- package/dist/baked/index.js.map +1 -1
- package/dist/baked/interior/faces.js.map +1 -1
- package/dist/baked/interior/material.js.map +1 -1
- package/dist/baked/interior/rooms.js.map +1 -1
- package/dist/baked/low.js.map +1 -1
- package/dist/baked/raster.js.map +1 -1
- package/dist/baked/textures.js.map +1 -1
- package/dist/baked/transfer.js.map +1 -1
- package/dist/baked/unwrap.js.map +1 -1
- package/dist/baked/xatlas.js.map +1 -1
- package/dist/codec/container.js.map +1 -1
- package/dist/codec/mesh.js.map +1 -1
- package/dist/dispose.js.map +1 -1
- package/dist/foliage.js.map +1 -1
- package/dist/impostor/bake/atlas.js.map +1 -1
- package/dist/impostor/bake/fit.js.map +1 -1
- package/dist/impostor/bake/index.js.map +1 -1
- package/dist/impostor/bake/materials.js.map +1 -1
- package/dist/impostor/bake/sheet.js.map +1 -1
- package/dist/impostor/bake/source.js.map +1 -1
- package/dist/impostor/codec.js.map +1 -1
- package/dist/impostor/impostor.js.map +1 -1
- package/dist/impostor/ktx2/encode.js.map +1 -1
- package/dist/impostor/ktx2/transcode.js.map +1 -1
- package/dist/impostor/ktx2/uastc.js.map +1 -1
- package/dist/impostor/ktx2/wasm/encoder.js.map +1 -1
- package/dist/impostor/ktx2/wasm/transcoder.js.map +1 -1
- package/dist/impostor/ktx2/worker.js.map +1 -1
- package/dist/impostor/mesh/card.js.map +1 -1
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/impostor/mesh/material.js.map +1 -1
- package/dist/impostor/mesh/surface.js.map +1 -1
- package/dist/impostor/mesh/textures.js.map +1 -1
- package/dist/impostor/octahedral.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/instanced/camera.js.map +1 -1
- package/dist/instanced/clusters.js.map +1 -1
- package/dist/instanced/cull.js.map +1 -1
- package/dist/instanced/instances.js.map +1 -1
- package/dist/instanced/key.js.map +1 -1
- package/dist/instanced/levels.js.map +1 -1
- package/dist/instanced/lists.js.map +1 -1
- package/dist/instanced/measure.js.map +1 -1
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/mirror.js.map +1 -1
- package/dist/instanced/raycast.js.map +1 -1
- package/dist/instanced/rows.js.map +1 -1
- package/dist/instanced/shape.js.map +1 -1
- package/dist/instanced/sort.js.map +1 -1
- package/dist/instanced/update.js.map +1 -1
- package/dist/levels/bounds.js.map +1 -1
- package/dist/levels/cameras.js.map +1 -1
- package/dist/levels/compile/contexts.js.map +1 -1
- package/dist/levels/compile/index.js.map +1 -1
- package/dist/levels/compile/pipelines.js.map +1 -1
- package/dist/levels/compiles.js.map +1 -1
- package/dist/levels/draw.js.map +1 -1
- package/dist/levels/fade.js.map +1 -1
- package/dist/levels/index.js.map +1 -1
- package/dist/levels/item.js.map +1 -1
- package/dist/levels/load.js.map +1 -1
- package/dist/levels/manager.js.map +1 -1
- package/dist/levels/material.js.map +1 -1
- package/dist/levels/renderer.js.map +1 -1
- package/dist/levels/requests.js.map +1 -1
- package/dist/levels/screen.js.map +1 -1
- package/dist/loader/build.js.map +1 -1
- package/dist/loader/context.js.map +1 -1
- package/dist/loader/entry.js.map +1 -1
- package/dist/loader/index.js.map +1 -1
- package/dist/loader/level.js.map +1 -1
- package/dist/loader/node.js.map +1 -1
- package/dist/loader/request.js.map +1 -1
- package/dist/loader/url.js.map +1 -1
- package/dist/lod.js.map +1 -1
- package/dist/meshopt.js.map +1 -1
- package/dist/node-process.js.map +1 -1
- package/dist/node.js.map +1 -1
- package/dist/simplify/cards.js.map +1 -1
- package/dist/simplify/index.js.map +1 -1
- package/dist/source/detail.js.map +1 -1
- package/dist/source/deviation.js.map +1 -1
- package/dist/source/evaluator.js.map +1 -1
- package/dist/source/frame.js.map +1 -1
- package/dist/source/raycaster.js.map +1 -1
- package/dist/source/sampler.js.map +1 -1
- package/dist/source/source.js.map +1 -1
- package/dist/source/surface.js.map +1 -1
- package/dist/task.js.map +1 -1
- package/dist/three.js.map +1 -1
- package/dist/tsl.js.map +1 -1
- package/dist/typegpu.js.map +1 -1
- package/dist/wind/bounds.js.map +1 -1
- package/dist/wind/hooks.js.map +1 -1
- package/dist/wind/index.js.map +1 -1
- package/dist/wind/sway.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/impostor/bake/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/impostor/bake/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix4, OrthographicCamera, RGBAFormat, Scene, Vector3, type Object3D, type Renderer } from \"three/webgpu\";\nimport { uniform } from \"three/tsl\";\nimport { MAPS, PAD, boundingRadius, texelPixels, validateImpostor, type Impostor, type ImpostorLayout, type ImpostorMap } from \"../impostor.js\";\nimport { frameBasis, frameDirection, type Vec3 } from \"../octahedral.js\";\nimport { checkBakeRenderer, inTurn } from \"../../bake.js\";\nimport { boundingBox, showDetail } from \"../../source/detail.js\";\nimport { ImpostorAtlasMip } from \"./atlas.js\";\nimport { swapMaterials, type BakeSettings } from \"./materials.js\";\nimport { bakeMip } from \"./sheet.js\";\nimport { sourceForBake } from \"./source.js\";\nimport { fittedHalfSize } from \"./fit.js\";\n\nexport interface BakeImpostorOptions {\n /**\n * \"full\" (default): frames from every side, so any orientation works. \"hemi\": frames\n * from the horizon up only, for objects that always stand upright; the same quality\n * there with about 45% less memory.\n */\n layout?: ImpostorLayout;\n /** frames per atlas side; default 16 for full, 12 for hemi */\n frames?: number;\n /**\n * pixels per frame: the impostor stays sharp up to about this size on screen. Rounded\n * down to a power of two so mip levels never mix two frames; default 128.\n */\n resolution?: number;\n /**\n * Largest on-screen height (CSS pixels, as `LodLevel.maxPixels`) the impostor will be\n * drawn at, when that is above the height where it is sharp (its default maxPixels).\n * Larger, it shows its top mip magnified, which then reads the source's textures as\n * sharp as they are at this height, not with the look of their small mips. Alpha-tested\n * materials are read at full detail at every size, which holds their cut-out's coverage.\n * Default: the height where it is sharp (see `texelPixels`, and `framePixels` for a\n * CachedLodLoader level).\n */\n maxPixels?: number;\n /**\n * bake an emissive layer; default: when any material emits. It is stored as 0..1\n * sRGB, so emissive * emissiveIntensity above 1 is clipped.\n */\n emissive?: boolean;\n /**\n * renders per output pixel per axis, for smooth edges; default 2. Textures are read at\n * the output pixel's size, as multisampling does.\n */\n supersample?: number;\n}\n\n/**\n * Bake `object` (in its own space, ignoring its own transform) into an impostor, drawing\n * with `renderer`, as three's PMREMGenerator does. Nested LODs are baked at their level 0,\n * a Lod with every instance at its level 0. ImpostorMeshes are refused: bake\n * from their source instead.\n *\n * `renderer` must be one made for bakes: make one with `createBakeRenderer`, as CachedLodLoader\n * does for itself and a .glts script that bakes does too. Such a renderer is initialised,\n * clears to transparent black and only when told to (`autoClear = false`), and has no MRT\n * and no XR session; the bake throws otherwise. Nor may its canvas be a square of a frame's size (resolution ×\n * supersample): three r186 applies a target's viewport only when it differs from the\n * canvas's, and would draw that frame over the whole target. Bakes on one renderer run\n * one at a time.\n *\n * Each frame is an orthographic look at the bounding-box centre, rendered once per mip\n * level at that level's size. The object's materials are rendered unlit into one target\n * per map: base colour + coverage, object-space normal + depth,\n * occlusion/roughness/metalness and, if needed, emissive. A material that changes three's\n * default specular adds the object's mean specular (see `Impostor.specular`).\n * Custom lighting behavior is not baked; the resulting surface is lit at draw time.\n */\nexport function bakeImpostor(object: Object3D, renderer: Renderer, options: BakeImpostorOptions = {}): Promise<Impostor> {\n return inTurn(renderer, () => bake(object, renderer, options));\n}\n\nasync function bake(object: Object3D, renderer: Renderer, options: BakeImpostorOptions): Promise<Impostor> {\n checkBakeRenderer(renderer, \"bakeImpostor\");\n const copy = await sourceForBake(object);\n try {\n return await bakeSource(copy.root, renderer, options);\n } finally {\n copy.dispose();\n }\n}\n\n/** Bake `source`, a copy of the object that the bake may move and change. */\nasync function bakeSource(source: Object3D, renderer: Renderer, options: BakeImpostorOptions): Promise<Impostor> {\n const layout = options.layout ?? \"full\";\n const frames = options.frames ?? (layout === \"hemi\" ? 12 : 16);\n const resolution = options.resolution ?? 128;\n const supersample = options.supersample ?? 2;\n if (!Number.isInteger(frames) || frames < 2) throw new Error(\"bakeImpostor: frames must be an integer >= 2\");\n if (!Number.isFinite(resolution) || resolution < 4) throw new Error(\"bakeImpostor: resolution must be a number >= 4\");\n if (!Number.isInteger(supersample) || supersample < 1) throw new Error(\"bakeImpostor: supersample must be an integer >= 1\");\n if (options.maxPixels !== undefined && !(options.maxPixels > 0)) throw new Error(\"bakeImpostor: maxPixels must be > 0\");\n const cell = 2 ** Math.floor(Math.log2(resolution));\n\n source.matrix.identity();\n source.matrix.decompose(source.position, source.quaternion, source.scale);\n // Bones are descendants, so this also moves them; getVertexPosition reads bone.matrixWorld.\n source.updateMatrixWorld(true);\n // The object is baked whatever a parent LOD shows of it, and nested LODs at full detail.\n source.visible = true;\n showDetail(source);\n\n const bounds = boundingBox(source);\n if (bounds.isEmpty()) throw new Error(\"bakeImpostor: object has no visible geometry\");\n const box: Impostor[\"box\"] = [bounds.min.x, bounds.min.y, bounds.min.z, bounds.max.x, bounds.max.y, bounds.max.z];\n const centre = bounds.getCenter(new Vector3());\n const radius = boundingRadius(box);\n const directions: Vec3[] = [];\n for (let row = 0; row < frames; row++) for (let col = 0; col < frames; col++) directions.push(frameDirection(layout, frames, col, row));\n const halfSize = fittedHalfSize(source, centre, directions) * (1 + PAD);\n\n const distance = 2 * radius + 1e-3;\n // Textures are read at the size of an atlas texel; the top mip's at the size of a pixel at maxPixels. Alpha-tested\n // materials read theirs at full detail (see `swapMaterials`).\n const sharp = texelPixels({ size: cell * frames, frames, box, halfSize });\n const textureBias = (m: number) => Math.log2(supersample) - (m === 0 ? Math.log2(Math.max(1, (options.maxPixels ?? sharp) / sharp)) : 0);\n const settings: BakeSettings = { distance, radius, textureBias: uniform(0) };\n const swapped = swapMaterials(source, settings);\n const emissive = options.emissive ?? swapped.emits;\n const maps: ImpostorMap[] = emissive ? [...MAPS] : [\"base\", \"normalDepth\", \"orm\"];\n\n // Every mip level is rendered, not filtered from the one above: the source does not look\n // the same at every size (a texture whose small mips mix in dark texels darkens with\n // distance), and filtering would freeze the look of the largest.\n const atlases = Array.from({ length: Math.log2(cell) + 1 }, (_, m) => new ImpostorAtlasMip(maps, frames, cell >> m, swapped.specular));\n const scene = new Scene();\n scene.add(source);\n const camera = new OrthographicCamera(-halfSize, halfSize, halfSize, -halfSize, 0, 4 * radius + 1e-3);\n camera.matrixAutoUpdate = false;\n // Bounds count meshes on every layer, so the bake draws them all.\n camera.layers.enableAll();\n const frameCameras = directions.map((n) => {\n const { tangent: t, bitangent: b } = frameBasis(n);\n return new Matrix4().set(\n t[0],\n b[0],\n n[0],\n centre.x + n[0] * distance,\n t[1],\n b[1],\n n[1],\n centre.y + n[1] * distance,\n t[2],\n b[2],\n n[2],\n centre.z + n[2] * distance,\n 0,\n 0,\n 0,\n 1,\n );\n });\n try {\n for (const [m, atlas] of atlases.entries()) {\n settings.textureBias.value = textureBias(m);\n await bakeMip(atlas, supersample, renderer, scene, camera, frameCameras);\n }\n } finally {\n for (const material of swapped.materials) material.dispose();\n }\n if (!atlases.some((atlas) => atlas.covered())) throw new Error(\"bakeImpostor: nothing visible was baked\");\n for (const atlas of atlases) atlas.fillGutters();\n const sum = (way: \"own\" | \"turned\") => atlases.reduce((total, atlas) => total + atlas.agreement[way], 0);\n if (sum(\"turned\") > sum(\"own\")) for (const atlas of atlases) atlas.useTurned();\n\n const layers = maps.map((map, i) => ({\n format: RGBAFormat,\n mipmaps: atlases.map((atlas) => {\n const layer = atlas.layers[i];\n if (!layer) throw new Error(`bakeImpostor: no ${map} layer`);\n return layer;\n }),\n }));\n const impostor: Impostor = { version: 4, layout, frames, size: cell * frames, box, halfSize, maps, layers };\n const [top] = atlases;\n if (!top) throw new Error(\"bakeImpostor: no mip levels\");\n if (swapped.specular) impostor.specular = top.meanSpecular();\n validateImpostor(impostor);\n return impostor;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materials.js","sourceRoot":"","sources":["../../../src/impostor/bake/materials.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"materials.js","sourceRoot":"","sources":["../../../src/impostor/bake/materials.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n DoubleSide,\n MeshStandardNodeMaterial,\n NoBlending,\n type ContextNode,\n type Material,\n type Node,\n type NodeBuilder,\n type NodeMaterial,\n type Object3D,\n type TextureNode,\n} from \"three/webgpu\";\nimport {\n ambientOcclusion,\n cameraViewMatrix,\n Fn,\n clamp,\n context,\n dFdx,\n dFdy,\n diffuseColor,\n emissive,\n faceDirection,\n float,\n length,\n log2,\n materialMetalness,\n materialOpacity,\n materialRoughness,\n max,\n mrt,\n normalView,\n normalize,\n positionView,\n positionLocal,\n specularColor,\n specularF90,\n step,\n uniform,\n uv,\n vec2,\n vec3,\n vec4,\n} from \"three/tsl\";\nimport { isMesh, isNodeMaterial, isPhysical, isStandard, isStandardNode, toNodeMaterial } from \"../../three.js\";\nimport { affine, isNodeOf } from \"../../tsl.js\";\nimport { placeInstances } from \"../../levels/fade.js\";\nimport { originalOf } from \"../../levels/material.js\";\n\n/** What every bake material reads, shared by all of them and set per bake. */\nexport interface BakeSettings {\n /** the cameras' distance from the bounding box centre, and the bounding radius: the depth encoding */\n distance: number;\n radius: number;\n /** mip bias of every texture read but an alpha-tested material's, per mip level: textures are read at the size of a texel (see `bakeImpostor`) */\n textureBias: Node<\"float\"> & { value: number };\n}\n\n/**\n * The outputs a bake material writes, by name: one per atlas map, then the second way to\n * store the normals (see ImpostorAtlasMip) and the specular. A render target takes the ones it has\n * textures of that name for, so every material writes them all and the bake decides,\n * once it knows every material, which it uses.\n */\nexport const OUTPUTS = [\"base\", \"normalDepth\", \"orm\", \"emissive\", \"turned\", \"specular\"] as const;\nexport type Output = (typeof OUTPUTS)[number];\n\n/**\n * Replace the materials of every visible mesh under `root` with bake materials, which\n * write the surface values unlit into the atlas maps. Returns the bake materials (to\n * dispose), whether any of them emits light and whether any changes three's default specular.\n */\nexport function swapMaterials(root: Object3D, settings: BakeSettings): { materials: Material[]; emits: boolean; specular: boolean } {\n const baked = new Map<Material, { material: NodeMaterial; emits: boolean; specular: boolean }>();\n const plain = new Set<string>();\n root.traverseVisible((node) => {\n // Lines, points and sprites would write their colour into the data targets. Layers\n // rather than `visible`, which would also hide any mesh children.\n if (\"isLine\" in node || \"isPoints\" in node || \"isSprite\" in node) return node.layers.disableAll();\n if (!isMesh(node)) return;\n const swap = (material: Material): Material => {\n // A deferred bake may see a source already hooked by Lod or Wind. Bake its\n // authored surface at rest, without the runtime fade/tint/sway wrappers.\n const source = originalOf(material);\n let entry = baked.get(source);\n if (!entry) {\n entry = bakeMaterial(source, settings);\n baked.set(source, entry);\n if (!isStandard(source) && !isNodeMaterial(source) && !MAPPED.has(source.type)) plain.add(source.type);\n }\n return entry.material;\n };\n node.material = Array.isArray(node.material) ? node.material.map(swap) : swap(node.material);\n });\n if (plain.size > 0) console.warn(`bakeImpostor: ${[...plain].join(\", \")} bake as a plain rough MeshStandardMaterial with their color/map only`);\n const entries = [...baked.values()];\n return { materials: entries.map((e) => e.material), emits: entries.some((e) => e.emits), specular: entries.some((e) => e.specular) };\n}\n\nconst STANDARD_KEYS = [\n \"color\",\n \"map\",\n \"alphaMap\",\n \"alphaTest\",\n \"alphaHash\",\n \"alphaToCoverage\",\n \"side\",\n \"vertexColors\",\n \"opacity\",\n \"transparent\",\n \"normalMap\",\n \"normalMapType\",\n \"normalScale\",\n \"bumpMap\",\n \"bumpScale\",\n \"aoMap\",\n \"aoMapIntensity\",\n \"emissive\",\n \"emissiveMap\",\n \"emissiveIntensity\",\n \"flatShading\",\n \"displacementMap\",\n \"displacementScale\",\n \"displacementBias\",\n \"wireframe\",\n] as const;\n\n/** Built-in materials whose look the standard keys carry over; others carry only their color/map. */\nconst MAPPED = new Set([\"MeshBasicMaterial\", \"MeshLambertMaterial\", \"MeshPhongMaterial\", \"MeshToonMaterial\", \"MeshMatcapMaterial\"]);\n\n/** A node material that renders like `source`: a copy of a node or standard one, else the standard keys carried over. */\nfunction toStandard(source: Material): NodeMaterial {\n if (isNodeMaterial(source) || isStandard(source)) return toNodeMaterial(source);\n // Unlit and Lambert/Phong materials bake as a fully rough dielectric. Their settings\n // are read by name: they are whatever subclass the app used.\n const values = Object.fromEntries(STANDARD_KEYS.flatMap((k) => (Reflect.get(source, k) === undefined ? [] : [[k, Reflect.get(source, k)]])));\n return new MeshStandardNodeMaterial({ roughness: 1, metalness: 0, ...values });\n}\n\n/** A material's float slot (or its default), as the float it builds to. */\nconst scalar = (node: Node, builder: NodeBuilder): Node<\"float\"> => {\n if (!isNodeOf(node, \"float\", builder)) throw new Error(`bakeImpostor: a material's float slot builds to ${node.getNodeType(builder)}`);\n return node;\n};\n\nfunction bakeMaterial(source: Material, settings: BakeSettings): { material: NodeMaterial; emits: boolean; specular: boolean } {\n const material = toStandard(source);\n const position = material.positionNode;\n material.positionNode = Fn((builder) => {\n placeInstances(builder);\n if (!position) return positionLocal;\n if (!isNodeOf(position, \"vec3\", builder)) throw new Error(\"bakeImpostor: position must build to vec3\");\n return position;\n })();\n // A material that draws no colour has no surface to bake.\n material.visible = source.visible && source.colorWrite;\n const emits = material.visible && emitsLight(material);\n const specular = material.visible && changesSpecular(source);\n // Coverage is the material's alpha where it cuts the surface out: alpha-to-coverage (no\n // multisampling here, so it would cover the card), or a blended material's texture\n // alpha. A blended material's uniform opacity (glass) is no hole: it folds into the\n // colour, as if the pane were dark and opaque, which leaves its reflection.\n const blended = material.transparent;\n const coverage = blended ? diffuseColor.a.div(max(materialOpacity, 1e-4)) : material.alphaToCoverage ? diffuseColor.a : float(1);\n const opacity = blended ? materialOpacity : float(1);\n // Blending would mix the outputs with the cleared background; coverage carries alpha\n // instead. Without normal blending three also writes the alpha (not opaque).\n material.transparent = false;\n material.blending = NoBlending;\n material.depthWrite = true;\n // A cut-out covers where its alpha passes the test at full detail, and the supersamples average that. Tested at\n // a smaller mip, whose alpha averages the holes in, thin cut-outs such as needles fall below the cutoff and vanish.\n const cutOut = material.alphaTest > 0 || material.alphaTestNode !== null;\n material.contextNode = cutOut ? sharpTextures() : biasedTextures(settings.textureBias);\n\n // Two ways to store the normals three shades with, each a normal and the share of the\n // surface that shades with it rather than its opposite; the bake uses the one whose\n // normals agree more once averaged (see ImpostorAtlasMip):\n // - the surface's own normal and the share whose front faced the camera (on two-sided\n // surfaces three turns the normal toward the camera; this undoes it). Painted canopy\n // normals of cut-out foliage agree this way, which three turns inward on every leaf\n // seen from behind.\n // - the shading normal turned toward the camera and the share that faced it already.\n // Real leaf normals agree this way, which three turns toward the camera on every leaf.\n // The camera is orthographic, looking along -z; the object sits at the origin, so world\n // space is its own.\n const twoSided = material.side === DoubleSide && !(isStandardNode(material) && material.flatShading);\n const own = twoSided ? normalView.mul(faceDirection) : normalView;\n const front = twoSided ? faceDirection.mul(0.5).add(0.5) : float(1);\n const facing = step(0, normalView.z);\n const toObject = (n: Node<\"vec3\">) => normalize(affine(cameraViewMatrix).solve(n)).mul(0.5).add(0.5);\n const depth = clamp(positionView.z.add(settings.distance).div(settings.radius).mul(0.5).add(0.5), 0, 1);\n // Unlit values: the material's own roughness and metalness, not three's lighting ones.\n const roughness = (isStandardNode(material) && material.roughnessNode) || materialRoughness;\n const metalness = (isStandardNode(material) && material.metalnessNode) || materialMetalness;\n const outputs: Record<Output, Node> = {\n base: vec4(clamp(diffuseColor.rgb.mul(opacity), 0, 1), clamp(coverage, 0, 1)),\n normalDepth: vec4(toObject(own), depth),\n orm: Fn((builder) => vec4(ambientOcclusion, scalar(roughness, builder), scalar(metalness, builder), front))(),\n emissive: vec4(clamp(emissive, 0, 1), 1),\n turned: vec4(toObject(normalView.mul(facing.mul(2).sub(1))), facing),\n specular: vec4(specularColor, specularF90),\n };\n material.mrtNode = mrt(outputs);\n return { material, emits, specular };\n}\n\n/** Whether `material` emits light: an emissive node, colour × intensity, or map. */\nfunction emitsLight(material: NodeMaterial): boolean {\n if (!isStandardNode(material)) return false;\n const { emissive: e, emissiveIntensity, emissiveMap, emissiveNode } = material;\n return emissiveNode !== null || (e.r + e.g + e.b) * emissiveIntensity > 0 || emissiveMap !== null;\n}\n\n/** Whether `material` lights with other than three's dielectric F0 0.04 and F90 1 (KHR_materials_specular). */\nfunction changesSpecular(material: Material): boolean {\n if (!isPhysical(material)) return false;\n const { ior, specularIntensity, specularColor: c, specularIntensityMap, specularColorMap } = material;\n return ior !== 1.5 || specularIntensity !== 1 || c.r !== 1 || c.g !== 1 || c.b !== 1 || specularIntensityMap !== null || specularColorMap !== null;\n}\n\n/** The size in texels of a texture's image, or null when it has none to read. */\nfunction texelsOf(image: unknown): [number, number] | null {\n if (typeof image !== \"object\" || image === null || !(\"width\" in image) || !(\"height\" in image)) return null;\n const { width, height } = image;\n return typeof width === \"number\" && typeof height === \"number\" ? [width, height] : null;\n}\n\n/**\n * A context in which every texture read is `bias` mip levels above the level the\n * hardware would pick: the level from the read's own texel footprint, plus `bias`. Reads\n * with uv of their own making, or with an explicit level or gradients, are left as they are.\n */\nfunction biasedTextures(bias: Node<\"float\">): ContextNode<unknown> {\n return context({\n getTextureLevel: (node: TextureNode) => {\n const texture = node.value;\n const size = texelsOf(texture.image);\n if (node.uvNode || !size) return null;\n // The texture's offset, repeat and rotation, as three applies them.\n const at = uniform(texture.matrix).mul(vec3(uv(texture.channel), 1)).xy;\n const texels = at.mul(vec2(size[0], size[1]));\n return log2(max(max(length(dFdx(texels)), length(dFdy(texels))), 1e-6)).add(bias);\n },\n });\n}\n\n/**\n * A context in which every texture read is at level 0, the full detail. Reads with uv of their own making, or with an\n * explicit level or gradients, are left as they are.\n */\nfunction sharpTextures(): ContextNode<unknown> {\n return context({\n getTextureLevel: (node: TextureNode) => (node.uvNode || !texelsOf(node.value.image) ? null : float(0)),\n });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../src/impostor/bake/sheet.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../src/impostor/bake/sheet.ts"],"names":[],"mappings":"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","sourcesContent":["import { HalfFloatType, NearestFilter, RenderTarget, Vector2, type Matrix4, type OrthographicCamera, type Renderer, type Scene } from \"three/webgpu\";\nimport { at } from \"../../at.js\";\nimport { readFloats } from \"../../bake.js\";\nimport { nextTask } from \"../../task.js\";\nimport type { ImpostorAtlasMip } from \"./atlas.js\";\nimport { OUTPUTS, type Output } from \"./materials.js\";\n\n// Rendering an atlas mip: its frames side by side in sheets, each read back at once.\n\n/** Edge of the largest target frames render into side by side, a sheet, which is read back at once. */\nconst SHEET = 1024;\n\n/**\n * Colour attachments one target renders: four half-float targets fill the 32 bytes per\n * sample WebGPU guarantees.\n */\nconst PER_TARGET = 4;\n\n/**\n * Render every frame (`frameCameras`: camera matrices, in atlas order) into `atlas`, at its\n * cell size × `supersample`. Frames render side by side into sheets of up to SHEET square,\n * so that each map is read back once per sheet, into targets of up to PER_TARGET outputs.\n */\nexport async function bakeMip(\n atlas: ImpostorAtlasMip,\n supersample: number,\n renderer: Renderer,\n scene: Scene,\n camera: OrthographicCamera,\n frameCameras: Matrix4[],\n): Promise<void> {\n const { frames, maps } = atlas;\n const side = atlas.cell * supersample;\n const buffer = renderer.getDrawingBufferSize(new Vector2());\n if (buffer.x === side && buffer.y === side)\n throw new Error(`bakeImpostor: the renderer's canvas is ${side} px square, a frame's size: three would draw that frame over the whole sheet`);\n const per = Math.max(1, Math.min(frames, Math.floor(SHEET / side)));\n const width = per * side;\n // one output per map, then the second way to store the normals (see ImpostorAtlasMip), then the specular\n const names: Output[] = OUTPUTS.filter((name) => (name === \"emissive\" ? maps.includes(\"emissive\") : name !== \"specular\" || atlas.specular));\n const targets = Array.from({ length: Math.ceil(names.length / PER_TARGET) }, (_, p) => {\n const outputs = names.slice(p * PER_TARGET, (p + 1) * PER_TARGET);\n const target = new RenderTarget(width, width, {\n count: outputs.length,\n type: HalfFloatType,\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n depthBuffer: true,\n });\n outputs.forEach((name, i) => {\n const texture = target.textures[i];\n if (!texture) throw new Error(\"bakeImpostor: a render target lacks a texture\");\n texture.name = name;\n });\n return target;\n });\n try {\n for (let row0 = 0; row0 < frames; row0 += per)\n for (let col0 = 0; col0 < frames; col0 += per) {\n const sheet: Array<{ col: number; row: number; x: number; y: number }> = [];\n for (let row = row0; row < Math.min(row0 + per, frames); row++)\n for (let col = col0; col < Math.min(col0 + per, frames); col++) sheet.push({ col, row, x: (col - col0) * side, y: (row - row0) * side });\n const placed = sheet.map(({ col, row, x, y }) => ({ matrix: at(frameCameras, row * frames + col), x, y }));\n for (const target of targets) renderSheet(renderer, target, scene, camera, placed, side);\n const pixels = await Promise.all(targets.flatMap((target) => target.textures.map((_, i) => readFloats(renderer, target, i))));\n for (const { col, row, x, y } of sheet) atlas.write(pixels, width, supersample, col, row, x, y);\n // Yield to the page between sheets, so that a long bake does not freeze it.\n await nextTask();\n }\n } finally {\n for (const target of targets) target.dispose();\n }\n}\n\n/**\n * Clear `target` and render each frame, its camera at `matrix`, into its `side` square at (x, y), counted from the\n * bottom left as the atlas is.\n */\nfunction renderSheet(\n renderer: Renderer,\n target: RenderTarget,\n scene: Scene,\n camera: OrthographicCamera,\n frames: Array<{ matrix: Matrix4; x: number; y: number }>,\n side: number,\n): void {\n const previous = renderer.getRenderTarget();\n renderer.setRenderTarget(target);\n try {\n renderer.clear(true, true, true);\n for (const { matrix, x, y } of frames) {\n // WebGPU counts viewport rows from the top; `readFloats` turns the image over.\n const top = target.height - y - side;\n target.viewport.set(x, top, side, side);\n camera.matrix.copy(matrix);\n camera.updateMatrixWorld(true);\n renderer.render(scene, camera);\n }\n } finally {\n renderer.setRenderTarget(previous);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/impostor/bake/source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAiB,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,kGAAkG;AAClG,MAAM,UAAU,aAAa,CAAC,MAAgB;IAC5C,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3B,IAAI,cAAc,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,CAAC,IAAI,kCAAkC,CAAC,CAAC;IACxI,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC"}
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/impostor/bake/source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAiB,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,kGAAkG;AAClG,MAAM,UAAU,aAAa,CAAC,MAAgB;IAC5C,WAAW,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QAC3B,IAAI,cAAc,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,CAAC,IAAI,kCAAkC,CAAC,CAAC;IACxI,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC","sourcesContent":["import type { Object3D } from \"three/webgpu\";\nimport { bakeCopy, type BakeCopy } from \"../../bake.js\";\nimport { forEachMesh } from \"../../source/detail.js\";\nimport { isImpostorMesh } from \"../../three.js\";\n\n/** A copy of `object` to bake, which the bake may move and change; ImpostorMeshes are refused. */\nexport function sourceForBake(object: Object3D): Promise<BakeCopy> {\n forEachMesh(object, (mesh) => {\n if (isImpostorMesh(mesh)) throw new Error(`bakeImpostor: cannot bake an ImpostorMesh (\"${mesh.name}\"); bake from its source instead`);\n });\n return bakeCopy(object);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/impostor/codec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/impostor/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAmC,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,IAAI,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,UAAU,CAAC;AAExE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAkB;IAC1D,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3B,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAC;QAC3I,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC,CAAC,CACH,CAAC;IACF,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,0HAA0H;AAC1H,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAiB;IACzD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACrF,MAAM,IAAI,GAAY,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE;QAC1B,IAAI,GAAG,CAAC;QACR,IAAI,CAAC;YACH,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI;YAAE,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,WAAW,sBAAsB,CAAC,CAAC;QACtI,IAAI,CAAC;YACH,OAAO,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,MAAM,QAAQ,GAAY,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC;IAChD,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC3B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,IAAI,CAAC,GAAW,EAAE,KAAe;IACxC,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAC9D,CAAC","sourcesContent":["import { read } from \"ktx-parse\";\nimport { RGBAFormat } from \"three/webgpu\";\nimport { pack, unpack } from \"../codec/container.js\";\nimport { validateImpostor, type Impostor, type ImpostorMap } from \"./impostor.js\";\nimport { encodeLayer } from \"./ktx2/encode.js\";\nimport { transcode } from \"./ktx2/transcode.js\";\n\nconst srgb = (map: ImpostorMap) => map === \"base\" || map === \"emissive\";\n\n/**\n * Serializes a baked `impostor`: every field but the layers as JSON, then one KTX2 file per map of GPU-compressible\n * Basis UASTC, encoded in workers. A few seconds for a 1024 atlas.\n */\nexport async function encodeImpostorAsync(impostor: Impostor): Promise<Uint8Array> {\n validateImpostor(impostor);\n const { layers, ...meta } = impostor;\n const files = await Promise.all(\n layers.map((layer, i) => {\n const map = impostor.maps[i];\n if (!map || layer.format !== RGBAFormat) throw new Error(\"encodeImpostorAsync: encode a baked impostor; this one holds compressed blocks\");\n return encodeLayer({ levels: layer.mipmaps, size: impostor.size, srgb: srgb(map) });\n }),\n );\n return pack(meta, files);\n}\n\n/** Parses a file written by `encodeImpostorAsync`, transcoding its maps off the main thread to a format the GPU takes. */\nexport async function decodeImpostorAsync(bytes: Uint8Array): Promise<Impostor> {\n const { header, files } = await unpack(bytes, fail);\n if (typeof header !== \"object\" || header === null) fail(\"metadata is not an object\");\n const size: unknown = Reflect.get(header, \"size\");\n const layers = await Promise.all(\n files.map(async (file, i) => {\n let ktx;\n try {\n ktx = read(file);\n } catch (error) {\n fail(`map ${i} is not a KTX2 file`, error);\n }\n if (ktx.pixelWidth !== size || ktx.pixelHeight !== size) fail(`map ${i} is ${ktx.pixelWidth}x${ktx.pixelHeight}, not the atlas size`);\n try {\n return await transcode(file);\n } catch (error) {\n fail(`map ${i} does not transcode`, error);\n }\n }),\n );\n const impostor: unknown = { ...header, layers };\n validateImpostor(impostor);\n return impostor;\n}\n\nfunction fail(why: string, cause?: unknown): never {\n throw new Error(`Invalid impostor file: ${why}`, { cause });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impostor.js","sourceRoot":"","sources":["../../src/impostor/impostor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"impostor.js","sourceRoot":"","sources":["../../src/impostor/impostor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA8B,MAAM,cAAc,CAAC;AAKtE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,CAAU,CAAC;AAsDxE,MAAM,UAAU,SAAS,CAAC,CAAkB;IAC1C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,4BAA4B;AAC5B,MAAM,UAAU,SAAS,CAAC,CAAkB;IAC1C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,cAAc,CAAC,CAAkB;IAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,UAAU,GAAG,GAAG,EAAU,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAElH;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,QAAgE;IAC1F,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC7C,0FAA0F;IAC1F,OAAO,CAAC,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1F,MAAM,KAAK,GAAG,CAAC,CAAU,EAAwB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAE5G,kDAAkD;AAClD,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,SAAS,IAAI,CAAC,GAAW;QACvB,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACvE,MAAM,MAAM,GAA6C,KAAK,CAAC;IAC/D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACxF,IAAI,OAAO,KAAK,CAAC;QAAE,IAAI,CAAC,uBAAuB,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjF,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM;QAAE,IAAI,CAAC,mBAAmB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACvF,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC;IACzG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,MAAM,KAAK,CAAC;QAChF,IAAI,CAAC,QAAQ,MAAM,CAAC,IAAI,CAAC,yCAAyC,MAAM,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;QAAE,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACtD,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC/F,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;QAAE,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACrF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,6EAA6E,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpG,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzI,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;QAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACvF,MAAM,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,cAAc,IAAI,wBAAwB,CAAC,CAAC;IACzF,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM;YACjH,IAAI,CAAC,sCAAsC,MAAM,SAAS,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC;QACzC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAc,EAAE,CAAS,EAAE,EAAE;YAClD,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;gBACnF,IAAI,CAAC,aAAa,CAAC,wBAAwB,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC","sourcesContent":["import { RGBAFormat, type CompressedPixelFormat } from \"three/webgpu\";\n\n/** Which part of the view sphere the atlas covers. */\nexport type ImpostorLayout = \"hemi\" | \"full\";\n\n/**\n * The atlas maps, in the order they are stored. Each is one RGBA layer:\n *\n * - `base`: base colour (sRGB) in RGB, coverage in A.\n * - `normalDepth`: an object-space normal n in RGB (`n * 0.5 + 0.5`), depth in A. The\n * surface shades with n on the share of it in orm.a and with -n on the rest; the\n * length of n is how far the normals it averages agree (1: all one way).\n * - `orm`: occlusion, roughness, metalness in RGB (glTF / three order), and in A the\n * share of the surface that shades with n.\n * - `emissive`: emissive colour (sRGB) in RGB, A unused. Only when something emits.\n */\nexport const MAPS = [\"base\", \"normalDepth\", \"orm\", \"emissive\"] as const;\nexport type ImpostorMap = (typeof MAPS)[number];\n\n/**\n * One map's mip chain, `size >> level` square, from `size` down to one texel per frame (`frames` square). The levels\n * are baked, not filtered from level 0.\n */\nexport interface ImpostorLayer {\n /**\n * RGBAFormat: 4 bytes a texel, as baked. A decoded impostor holds the block-compressed format its decoder transcoded\n * to for the GPU, or RGBAFormat where the GPU takes none.\n */\n format: typeof RGBAFormat | CompressedPixelFormat;\n mipmaps: Uint8Array[];\n}\n\n/**\n * A baked octahedral impostor: plain data, no GPU resources.\n *\n * The atlas is `frames x frames` cells of `size / frames` pixels each. Cell (col, row)\n * holds the view from `frameDirection(layout, frames, col, row)` and starts at pixel\n * `(col * cell, row * cell)`; row 0 is the first row in memory, which is the bottom row\n * of the texture (three's DataTexture convention).\n *\n * Depth is `0.5 + 0.5 * dot(p - centre, viewDirection) / boundingRadius(box)`, so 1 is\n * toward the camera that baked the frame and 0 is away from it.\n */\nexport interface Impostor {\n version: 4;\n layout: ImpostorLayout;\n /** frames per atlas side */\n frames: number;\n /** atlas edge in pixels: `frames` times a power of two */\n size: number;\n /** bounding box of the source in its own space: min xyz, max xyz */\n box: [number, number, number, number, number, number];\n /** half the edge of every frame's orthographic view, in source units, centred on the box centre */\n halfSize: number;\n /** `base`, `normalDepth`, `orm`, then `emissive` if it was baked */\n maps: ImpostorMap[];\n /**\n * The dielectric specular three lights the surface with, F0 (linear RGB) then F90,\n * averaged over the whole object as the frames show it. Only when a material changes\n * it from three's 0.04 and 1 (a MeshPhysicalMaterial's ior, specularIntensity,\n * specularColor or their maps).\n */\n specular?: [number, number, number, number];\n /**\n * One per entry in `maps`. An ImpostorMesh's textures share these arrays, so they stay in memory while the impostor is\n * referenced, ready for `encodeImpostorAsync` when they are RGBAFormat.\n */\n layers: ImpostorLayer[];\n}\n\nexport function boxCentre(b: Impostor[\"box\"]): [number, number, number] {\n return [(b[0] + b[3]) / 2, (b[1] + b[4]) / 2, (b[2] + b[5]) / 2];\n}\n\n/** Half the box's edges. */\nexport function boxExtent(b: Impostor[\"box\"]): [number, number, number] {\n return [(b[3] - b[0]) / 2, (b[4] - b[1]) / 2, (b[5] - b[2]) / 2];\n}\n\n/** Radius of the sphere around the box: the depth channel's unit. */\nexport function boundingRadius(b: Impostor[\"box\"]): number {\n return Math.hypot(b[3] - b[0], b[4] - b[1], b[5] - b[2]) / 2;\n}\n\n/**\n * Empty border around the object in every frame, as a fraction of the frame's half\n * size. It keeps mip levels from blending a frame's silhouette into its neighbour.\n */\nexport const PAD = 0.06;\n\n/**\n * `texelPixels` of any impostor baked at `resolution`, at least: a frame fitted to the source's bounding sphere, the\n * widest it can be. The default `maxPixels` of an impostor level a loader describes before building it.\n */\nexport const framePixels = (resolution = 128): number => 2 ** Math.floor(Math.log2(resolution)) / (2 * (1 + PAD));\n\n/**\n * On-screen height of the object at which two atlas texels span one pixel: the default\n * `LodLevel.maxPixels` of an impostor. An impostor blends filtered reads of several\n * views, so it keeps the source's colour detail only down to about two texels per pixel.\n * A CachedLodLoader describes its levels before baking them, so its impostor levels default to\n * `framePixels` instead: this height for a frame fitted to the bounding sphere, up to about\n * 1.5 times lower than for the frame the bake fits.\n */\nexport function texelPixels(impostor: Pick<Impostor, \"size\" | \"frames\" | \"box\" | \"halfSize\">): number {\n const cell = impostor.size / impostor.frames;\n // A frame spans 2 × halfSize of the object; the height measured is its bounding diameter.\n return (cell * boundingRadius(impostor.box)) / (2 * impostor.halfSize);\n}\n\nconst isNumber = (v: unknown): v is number => typeof v === \"number\" && Number.isFinite(v);\nconst isBox = (v: unknown): v is Impostor[\"box\"] => Array.isArray(v) && v.length === 6 && v.every(isNumber);\n\n/** Throws unless `value` is a usable impostor. */\nexport function validateImpostor(value: unknown): asserts value is Impostor {\n function fail(why: string): never {\n throw new Error(`Invalid impostor: ${why}`);\n }\n if (typeof value !== \"object\" || value === null) fail(\"not an object\");\n const fields: Partial<Record<keyof Impostor, unknown>> = value;\n const { version, layout, frames, size, box, halfSize, maps, specular, layers } = fields;\n if (version !== 4) fail(`unsupported version ${String(version)}; bake it again`);\n if (layout !== \"hemi\" && layout !== \"full\") fail(`unknown layout \"${String(layout)}\"`);\n if (!isNumber(frames) || !Number.isInteger(frames) || frames < 2) fail(\"frames must be an integer >= 2\");\n if (!isNumber(size) || !Number.isInteger(size) || size <= 0 || size % frames !== 0)\n fail(`size ${String(size)} is not a positive multiple of frames ${frames}`);\n if (!isBox(box)) fail(\"box must be 6 finite numbers\");\n if (box[0] > box[3] || box[1] > box[4] || box[2] > box[5]) fail(\"box min must not exceed max\");\n if (!isNumber(halfSize) || halfSize <= 0) fail(\"halfSize must be a positive number\");\n if (!Array.isArray(maps) || maps.length < 3 || !maps.every((map, i) => map === MAPS[i]))\n fail(`maps must be base, normalDepth, orm, optionally followed by emissive; got ${String(maps)}`);\n if (specular !== undefined && !(Array.isArray(specular) && specular.length === 4 && specular.every((v) => isNumber(v) && v >= 0 && v <= 1)))\n fail(\"specular must be 4 numbers in [0, 1]\");\n if (!Array.isArray(layers) || layers.length !== maps.length) fail(\"one layer per map\");\n const cell = size / frames;\n if (!Number.isInteger(Math.log2(cell))) fail(`frame size ${cell} is not a power of two`);\n const levels = Math.log2(cell) + 1;\n for (const layer of layers) {\n if (typeof layer !== \"object\" || layer === null || !Array.isArray(layer.mipmaps) || layer.mipmaps.length !== levels)\n fail(`every layer must be a mip chain of ${levels} levels`);\n const rgba = layer.format === RGBAFormat;\n layer.mipmaps.forEach((level: unknown, m: number) => {\n const bytes = (size >> m) ** 2 * 4;\n if (!(level instanceof Uint8Array) || (rgba ? level.length !== bytes : !level.length))\n fail(`mip level ${m} must be a Uint8Array${rgba ? ` of ${bytes} bytes` : \"\"}`);\n });\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../../src/impostor/ktx2/encode.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../../src/impostor/ktx2/encode.ts"],"names":[],"mappings":"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","sourcesContent":["import { read, write } from \"ktx-parse\";\nimport { inNode } from \"../../node-process.js\";\n\n/** One map's RGBA8 mip levels, `size >> level` square. */\nexport interface Layer {\n levels: Uint8Array[];\n size: number;\n /** Whether the texels are sRGB-encoded colour; otherwise linear data. */\n srgb: boolean;\n}\n\n/** What the worker encodes: RGBA8 rows of a mip level, `width` wide and `height` high. */\nexport interface Job {\n data: Uint8Array;\n width: number;\n height: number;\n srgb: boolean;\n}\n\n/** What the worker answers a job with. */\nexport type Reply = { file: Uint8Array } | { error: string };\n\ninterface Task {\n job: Job;\n resolve(file: Uint8Array): void;\n reject(error: unknown): void;\n}\n\n// Read when the module loads, which also happens in Node, as the vitecache plugin builds levels; Node before 21 has no navigator.\nconst cores = globalThis.navigator?.hardwareConcurrency ?? 4;\n/**\n * A worker per core but one, since a cold ladder's encodes take far longer than its bakes; at most 8, since each holds\n * 100 to 250 MB of WebAssembly memory.\n */\nconst LIMIT = Math.max(1, Math.min(8, cores - 1));\n/** Largest job first, so that the smaller ones fill the other workers meanwhile. */\nconst queue: Task[] = [];\n/** How many encoder workers run: a process-wide pool, as each holds its own WASM memory and LIMIT bounds them all. */\nlet workers = 0;\n\n/**\n * One map as a KTX2 file of Basis UASTC. Each level encodes as `parts` strips of rows, by default one per worker, so\n * that a map's top level, which holds three quarters of its texels, takes all workers; the strips' and levels' files\n * are then joined. Takes about a second per million texels and worker.\n */\nexport async function encodeLayer({ levels, size, srgb }: Layer, parts = LIMIT): Promise<Uint8Array> {\n const files = await Promise.all(levels.map((data, m) => Promise.all(strips(data, size >> m, srgb, parts).map((job) => encodeJob(job).then(read)))));\n const first = files[0]?.[0];\n if (!first) throw new Error(\"encodeImpostorAsync: a map has no mip levels\");\n // UASTC encodes each 4x4 block on its own, and a level's Zstandard data may be several frames, which decode as one:\n // a level's strips, each a multiple of four rows high but the last, concatenate to data that decodes as the whole level's.\n first.levels = files.map((parts) => {\n const levels = parts.map((file) => {\n const [level] = file.levels;\n if (!level) throw new Error(\"encodeImpostorAsync: the encoder wrote a file without levels\");\n return level;\n });\n const levelData = new Uint8Array(levels.reduce((sum, level) => sum + level.levelData.length, 0));\n let offset = 0;\n for (const level of levels) {\n levelData.set(level.levelData, offset);\n offset += level.levelData.length;\n }\n return { levelData, uncompressedByteLength: levels.reduce((sum, level) => sum + level.uncompressedByteLength, 0) };\n });\n first.pixelHeight = size;\n first.levelCount = files.length;\n return write(first);\n}\n\n/** A `size`² level's strips: at most `parts`, each a multiple of four rows high but perhaps the last. */\nfunction strips(data: Uint8Array, size: number, srgb: boolean, parts: number): Job[] {\n const rows = 4 * Math.ceil(size / parts / 4);\n const jobs: Job[] = [];\n // Sliced: each job owns its buffer, which moves to its worker.\n for (let y = 0; y < size; y += rows) {\n const height = Math.min(rows, size - y);\n jobs.push({ data: data.slice(4 * size * y, 4 * size * (y + height)), width: size, height, srgb });\n }\n return jobs;\n}\n\nasync function encodeJob(job: Job): Promise<Uint8Array> {\n if (inNode) return (await import(\"./uastc.js\")).encode(job);\n return new Promise((resolve, reject) => {\n queue.push({ job, resolve, reject });\n queue.sort((a, b) => b.job.width * b.job.height - a.job.width * a.job.height);\n if (workers < LIMIT) void work();\n });\n}\n\n/** One worker, with its own encoder instance, that takes queued jobs until none is left and then ends. */\nasync function work(): Promise<void> {\n workers++;\n let worker: Worker | undefined;\n try {\n for (let task = queue.shift(); task; task = queue.shift()) {\n try {\n worker ??= await start();\n const reply = await run(worker, task.job);\n if (\"file\" in reply) task.resolve(reply.file);\n else task.reject(new Error(`encodeImpostorAsync: ${reply.error}`));\n } catch (error) {\n // The worker failed to load or crashed; the next job gets a fresh one.\n task.reject(error);\n worker?.terminate();\n worker = undefined;\n }\n }\n } finally {\n worker?.terminate();\n workers--;\n }\n}\n\nasync function start(): Promise<Worker> {\n const { url } = await import(\"./worker.js\");\n return new Worker(url, { type: \"module\" });\n}\n\n/** `job` on `worker`; rejects when the worker fails rather than answers, as one that does not load does. */\nfunction run(worker: Worker, job: Job): Promise<Reply> {\n return new Promise((resolve, reject) => {\n const settle = () => {\n worker.removeEventListener(\"message\", message);\n worker.removeEventListener(\"error\", error);\n worker.removeEventListener(\"messageerror\", error);\n };\n const message = (event: MessageEvent<Reply>) => {\n settle();\n resolve(event.data);\n };\n const error = (event: Event) => {\n settle();\n const why = event instanceof ErrorEvent ? event.message : `${event.type} event`;\n reject(new Error(`encodeImpostorAsync: the encoder worker failed (${why})`));\n };\n worker.addEventListener(\"message\", message);\n worker.addEventListener(\"error\", error);\n worker.addEventListener(\"messageerror\", error);\n worker.postMessage(job, [job.data.buffer]);\n });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcode.js","sourceRoot":"","sources":["../../../src/impostor/ktx2/transcode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,cAAc,EAA0B,MAAM,cAAc,CAAC;AAGtE,uHAAuH;AACvH,IAAI,MAAuC,CAAC;AAC5C,0GAA0G;AAC1G,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,IAAI,IAA+C,CAAC;AACpD;mGACmG;AACnG,MAAM,OAAO,GAAG,IAAI,CAAC;AAErB;;;;;;GAMG;AACH,SAAS,MAAM;IACb,MAAM,KAAK,CAAC,KAAK,IAAI,EAAE;QACrB,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QACpF,uGAAuG;QACvG,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAChE,4FAA4F;QAC5F,MAAM,CAAC,YAAY,GAAG;YACpB,aAAa,EAAE,GAAG,CAAC,0BAA0B,CAAC;YAC9C,gBAAgB,EAAE,KAAK;YACvB,aAAa,EAAE,KAAK;YACpB,aAAa,EAAE,GAAG,CAAC,0BAA0B,CAAC;YAC9C,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,GAAG,CAAC,wBAAwB,CAAC;YAC5C,cAAc,EAAE,KAAK;SACtB,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,EAAE,CAAC;IACL,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAgB;IAC9C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QAC/C,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC,CAAC;QACxG,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,IAAgB;IACnC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,MAAM,EAAE,CAAC;IACT,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,EAAE,CAAC;QAC5B,2CAA2C;QAC3C,OAAO,MAAM,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IACrH,CAAC;YAAS,CAAC;QACT,IAAI,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACpC,mFAAmF;YACnF,MAAM,KAAK,GAAY,IAAI,CAAC;YAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU;gBAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1H,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,OAAO;IACd,MAAM,QAAQ,GAAG,MAAM,CAAC;IACxB,MAAM,GAAG,SAAS,CAAC;IACnB,KAAK,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,uGAAuG;AACvG,IAAI,OAAiD,CAAC;AAEtD,8GAA8G;AAC9G,SAAS,YAAY;IACnB,OAAO,KAAK,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAC7C,CAAC,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,EAAE,CACrC,IAAI,GAAG,CAAC;QACN,CAAC,GAAG,KAAK,qBAAqB,EAAE,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QACvE,CAAC,GAAG,KAAK,uBAAuB,EAAE,IAAI,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;KAC7E,CAAC,CACL,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uGAAuG;AACvG,MAAM,KAAK,GAAG,aAAa,CAAC;AAE5B,0CAA0C;AAC1C,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAE7J,qHAAqH;AACrH,KAAK,UAAU,eAAe;IAC5B,MAAM,GAAG,GAAY,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAClG,MAAM,OAAO,GAAY,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClH,IAAI,OAAO,OAAO,KAAK,UAAU;QAAE,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;IACtD,MAAM,OAAO,GAAY,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAY,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzH,MAAM,GAAG,GAAY,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClH,IAAI,OAAO,GAAG,KAAK,UAAU;QAAE,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;IAClD,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC;AACvE,CAAC"}
|
|
1
|
+
{"version":3,"file":"transcode.js","sourceRoot":"","sources":["../../../src/impostor/ktx2/transcode.ts"],"names":[],"mappings":"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","sourcesContent":["import { inflateSync } from \"fflate\";\nimport { KTX2Loader } from \"three/addons/loaders/KTX2Loader.js\";\nimport { LoadingManager, type CompressedTexture } from \"three/webgpu\";\nimport type { ImpostorLayer } from \"../impostor.js\";\n\n/** The page's one KTX2Loader for impostor layers: process-wide, as its transcoder workers are, and freed when idle. */\nlet shared: Promise<KTX2Loader> | undefined;\n/** Transcodes not yet answered, and the timer that disposes the loader once none has been for IDLE_MS. */\nlet active = 0;\nlet idle: ReturnType<typeof setTimeout> | undefined;\n/** How long the loader outlives its last transcode. Its workers and their transcoders are freed then, so\n * another library's KTX2Loader (each has one) is the page's only one but while both transcode. */\nconst IDLE_MS = 1000;\n\n/**\n * One KTX2Loader for every impostor at a time, as three asks: made at the first transcode, disposed once idle.\n * It transcodes to the formats the GPU adapter takes, which are those\n * of any WebGPURenderer device on it: three's WebGPURenderer requests every feature the adapter has, unless it is given\n * a `device`, which then needs the same texture-compression features. Without WebGPU it transcodes to RGBA. The loader would fetch the Basis transcoder from three's `libs/basis` folder; it reads the copy\n * this package carries instead (see scripts/basis.ts).\n */\nfunction loader(): Promise<KTX2Loader> {\n shared ??= (async () => {\n const [has, files] = await Promise.all([adapterFeatures(), carriedFiles()]);\n const manager = new LoadingManager().setURLModifier((url) => files.get(url) ?? url);\n // given no path, the loader reads files next to its own module, which a build emits under hashed names\n const loader = new KTX2Loader(manager).setTranscoderPath(BASIS);\n // What detectSupport finds on a WebGPURenderer; WebGPU has no ETC1, S3TC or PVRTC features.\n loader.workerConfig = {\n astcSupported: has(\"texture-compression-astc\"),\n astcHDRSupported: false,\n etc1Supported: false,\n etc2Supported: has(\"texture-compression-etc2\"),\n dxtSupported: false,\n bptcSupported: has(\"texture-compression-bc\"),\n pvrtcSupported: false,\n };\n return loader;\n })();\n return shared;\n}\n\n/** A map's KTX2 file as the blocks of a GPU format, transcoded in three's workers. */\nexport async function transcode(file: Uint8Array): Promise<ImpostorLayer> {\n const texture = await parse(file);\n const mipmaps = texture.mipmaps.map(({ data }) => {\n if (!(data instanceof Uint8Array)) throw new Error(`transcoded to ${data.constructor.name}, not bytes`);\n return data;\n });\n return { format: texture.format, mipmaps };\n}\n\nasync function parse(file: Uint8Array): Promise<CompressedTexture> {\n clearTimeout(idle);\n active++;\n try {\n const ktx2 = await loader();\n // The loader hands its buffer to a worker.\n return await new Promise<CompressedTexture>((resolve, reject) => ktx2.parse(file.slice().buffer, resolve, reject));\n } finally {\n if (--active === 0) {\n idle = setTimeout(release, IDLE_MS);\n // Releasing frees memory; it must not keep Node.js running once nothing else does.\n const timer: unknown = idle;\n if (typeof timer === \"object\" && timer !== null && \"unref\" in timer && typeof timer.unref === \"function\") timer.unref();\n }\n }\n}\n\nfunction release(): void {\n const released = shared;\n shared = undefined;\n void released?.then((loader) => loader.dispose());\n}\n\n/** The bundled transcoder's files, inflated once: immutable, and shared by every loader made after. */\nlet carried: Promise<Map<string, string>> | undefined;\n\n/** The carried transcoder's files by the URLs the loader asks for: made once, for every loader made after. */\nfunction carriedFiles(): Promise<Map<string, string>> {\n carried ??= import(\"./wasm/transcoder.js\").then(\n ({ TRANSCODER_JS, TRANSCODER_WASM }) =>\n new Map([\n [`${BASIS}basis_transcoder.js`, blob(TRANSCODER_JS, \"text/javascript\")],\n [`${BASIS}basis_transcoder.wasm`, blob(TRANSCODER_WASM, \"application/wasm\")],\n ]),\n );\n return carried;\n}\n\n/** Where the loader is told its transcoder lies: the URLs it then asks for map to the carried copy. */\nconst BASIS = \"lod-basis:/\";\n\n/** A URL of `base64`'s deflated bytes. */\nconst blob = (base64: string, type: string) => URL.createObjectURL(new Blob([inflateSync(Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)))], { type }));\n\n/** Whether the default WebGPU adapter has a feature; none without WebGPU. The package's types leave WebGPU's out. */\nasync function adapterFeatures(): Promise<(feature: string) => boolean> {\n const gpu: unknown = typeof navigator === \"undefined\" ? undefined : Reflect.get(navigator, \"gpu\");\n const request: unknown = typeof gpu === \"object\" && gpu !== null ? Reflect.get(gpu, \"requestAdapter\") : undefined;\n if (typeof request !== \"function\") return () => false;\n const adapter: unknown = await Reflect.apply(request, gpu, []);\n const features: unknown = typeof adapter === \"object\" && adapter !== null ? Reflect.get(adapter, \"features\") : undefined;\n const has: unknown = typeof features === \"object\" && features !== null ? Reflect.get(features, \"has\") : undefined;\n if (typeof has !== \"function\") return () => false;\n return (feature) => Reflect.apply(has, features, [feature]) === true;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uastc.js","sourceRoot":"","sources":["../../../src/impostor/ktx2/uastc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"uastc.js","sourceRoot":"","sources":["../../../src/impostor/ktx2/uastc.ts"],"names":[],"mappings":"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","sourcesContent":["import { inflateSync } from \"fflate\";\nimport type { Job } from \"./encode.js\";\nimport { ENCODER_JS, ENCODER_WASM } from \"./wasm/encoder.js\";\n\n/** The members of Basis's encoder bindings (embind, see basisu's webgl/encoder) that `encode` uses. */\ninterface BasisEncoder {\n setCreateKTX2File(on: boolean): void;\n setUASTC(on: boolean): void;\n setTexType(type: number): void;\n setSliceSourceImage(slice: number, data: Uint8Array, width: number, height: number, format: number): boolean;\n setPerceptual(on: boolean): void;\n setKTX2AndBasisSRGBTransferFunc(on: boolean): void;\n setMipGen(on: boolean): void;\n setPackUASTCFlags(flags: number): void;\n setKTX2UASTCSupercompression(on: boolean): void;\n encode(out: Uint8Array): number;\n delete(): void;\n}\ninterface Basis {\n BasisEncoder: new () => BasisEncoder;\n initializeBasis(): void;\n}\n\n/** basisu's encoder module, instantiated once: a process-wide WASM module, as three's decoders are. */\nlet basis: Promise<Basis> | undefined;\n\n/**\n * basisu's pack flags: level 1, which encodes about twice as fast as the default level 2 and loses under 0.1 dB on\n * albedo and normal maps (level 0 loses 1 to 4 dB), with the fastest ETC1 hints (128), which only transcodes to ETC1\n * and ETC2 read; three picks those only on a GPU without ASTC and BC texture compression, which WebGPU adapters on\n * desktops and most phones have.\n */\nconst PACK_FLAGS = 1 | 128;\n\n/**\n * Rows of a mip level as a KTX2 file of UASTC LDR 4x4 with Zstandard supercompression, at level 1 (see PACK_FLAGS) and\n * without RDO, which would trade normal accuracy for size. The encoder's own mips would filter level 0, so each baked\n * level is encoded on its own (see `encodeLayer`).\n */\nexport async function encode({ data, width, height, srgb }: Job): Promise<Uint8Array> {\n const encoder = new (await (basis ??= load())).BasisEncoder();\n try {\n encoder.setCreateKTX2File(true);\n encoder.setUASTC(true);\n // basisu's enums: texture type 0 is a 2D texture; image format 0 is raw RGBA8\n encoder.setTexType(0);\n if (!encoder.setSliceSourceImage(0, data, width, height, 0)) throw new Error(`the Basis encoder took no ${width}x${height} image`);\n encoder.setPerceptual(srgb);\n encoder.setKTX2AndBasisSRGBTransferFunc(srgb);\n encoder.setMipGen(false);\n encoder.setPackUASTCFlags(PACK_FLAGS);\n encoder.setKTX2UASTCSupercompression(true);\n const out = new Uint8Array(4 * width * height + 65536);\n const length = encoder.encode(out);\n if (length === 0) throw new Error(`the Basis encoder failed on a ${width}x${height} image`);\n return out.slice(0, length);\n } finally {\n encoder.delete();\n }\n}\n\n/**\n * The encoder's Emscripten module (see scripts/basis.ts), started on its binary. Imported from a data: URL, which\n * browsers and Node both import, unlike a blob: URL.\n */\nasync function load(): Promise<Basis> {\n const url = `data:text/javascript,${encodeURIComponent(new TextDecoder().decode(inflate(ENCODER_JS)))}`;\n const factory: unknown = (await import(/* @vite-ignore */ url)).default;\n if (typeof factory !== \"function\") throw new Error(\"the Basis encoder module has no factory\");\n // the module names its binary relative to its own URL, which a data: URL's is not: named, then given. It prints every\n // image's progress, which nothing needs.\n const basis: unknown = await factory({ wasmBinary: inflate(ENCODER_WASM), locateFile: (name: string) => name, print: () => {} });\n if (!isBasis(basis)) throw new Error(\"the Basis encoder module lacks its bindings\");\n basis.initializeBasis();\n return basis;\n}\n\nfunction isBasis(value: unknown): value is Basis {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof Reflect.get(value, \"BasisEncoder\") === \"function\" &&\n typeof Reflect.get(value, \"initializeBasis\") === \"function\"\n );\n}\n\nconst inflate = (base64: string) => inflateSync(Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)));\n"]}
|