{"version":3,"file":"functions.cjs","sources":["../src/utils.ts","../src/center.ts","../src/list-node-scenes.ts","../src/clear-node-parent.ts","../../../node_modules/gl-matrix/esm/common.js","../../../node_modules/gl-matrix/esm/mat4.js","../../../node_modules/gl-matrix/esm/mat3.js","../../../node_modules/gl-matrix/esm/vec3.js","../src/dedup.ts","../../../node_modules/gl-matrix/esm/vec4.js","../src/get-texture-color-space.ts","../src/list-texture-info.ts","../src/list-texture-slots.ts","../src/prune.ts","../src/hash-table.ts","../src/get-vertex-count.ts","../src/compact-primitive.ts","../src/weld.ts","../src/transform-primitive.ts","../src/transform-mesh.ts","../src/clear-node-transform.ts","../src/convert-primitive-mode.ts","../src/dequantize.ts","../src/document-utils.ts","../src/draco.ts","../src/flatten.ts","../src/get-bounds.ts","../src/inspect.ts","../src/instance.ts","../src/join-primitives.ts","../src/join.ts","../src/list-texture-channels.ts","../src/reorder.ts","../src/sort-primitive-weights.ts","../src/quantize.ts","../src/meshopt.ts","../src/metal-rough.ts","../src/unweld.ts","../src/normals.ts","../src/palette.ts","../src/partition.ts","../../../node_modules/keyframe-resample/dist/keyframe-resample-browser.modern.js","../src/resample.ts","../src/sequence.ts","../src/simplify.ts","../src/sparse.ts","../src/texture-compress.ts","../src/tangents.ts","../src/uninstance.ts","../src/unlit.ts","../src/unpartition.ts","../src/vertex-color-space.ts"],"sourcesContent":["import type { NdArray } from 'ndarray';\nimport { getPixels, savePixels } from 'ndarray-pixels';\nimport {\n\tAccessor,\n\tDocument,\n\tGLTF,\n\tPrimitive,\n\tProperty,\n\tPropertyType,\n\tTexture,\n\tTransform,\n\tTransformContext,\n\tvec2,\n} from '@gltf-transform/core';\n\nconst { POINTS, LINES, LINE_STRIP, LINE_LOOP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN } = Primitive.Mode;\n\n/**\n * Prepares a function used in an {@link Document#transform} pipeline. Use of this wrapper is\n * optional, and plain functions may be used in transform pipelines just as well. The wrapper is\n * used internally so earlier pipeline stages can detect and optimize based on later stages.\n * @hidden\n */\nexport function createTransform(name: string, fn: Transform): Transform {\n\tObject.defineProperty(fn, 'name', { value: name });\n\treturn fn;\n}\n\n/** @hidden */\nexport function isTransformPending(context: TransformContext | undefined, initial: string, pending: string): boolean {\n\tif (!context) return false;\n\tconst initialIndex = context.stack.lastIndexOf(initial);\n\tconst pendingIndex = context.stack.lastIndexOf(pending);\n\treturn initialIndex < pendingIndex;\n}\n\n/**\n * Performs a shallow merge on an 'options' object and a 'defaults' object.\n * Equivalent to `{...defaults, ...options}` _except_ that `undefined` values\n * in the 'options' object are ignored.\n *\n * @hidden\n */\nexport function assignDefaults<Defaults, Options>(defaults: Defaults, options: Options): Defaults & Options {\n\tconst result = { ...defaults } as Defaults & Partial<Options>;\n\tfor (const key in options) {\n\t\tif (options[key] !== undefined) {\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: TODO\n\t\t\tresult[key] = options[key] as any;\n\t\t}\n\t}\n\treturn result as Defaults & Options;\n}\n\n/**\n * Maps pixels from source to target textures, with a per-pixel callback.\n * @hidden\n */\nexport async function rewriteTexture(\n\tsource: Texture,\n\ttarget: Texture,\n\tfn: (pixels: NdArray, i: number, j: number) => void,\n): Promise<Texture | null> {\n\tif (!source) return null;\n\n\tconst srcImage = source.getImage();\n\tif (!srcImage) return null;\n\n\tconst pixels = await getPixels(srcImage, source.getMimeType());\n\n\tfor (let i = 0; i < pixels.shape[0]; ++i) {\n\t\tfor (let j = 0; j < pixels.shape[1]; ++j) {\n\t\t\tfn(pixels, i, j);\n\t\t}\n\t}\n\n\tconst dstImage = await savePixels(pixels, 'image/png');\n\treturn target.setImage(dstImage).setMimeType('image/png');\n}\n\n/** @hidden */\nexport function getGLPrimitiveCount(prim: Primitive): number {\n\tconst indices = prim.getIndices();\n\tconst position = prim.getAttribute('POSITION')!;\n\n\t// Reference: https://www.khronos.org/opengl/wiki/Primitive\n\tswitch (prim.getMode()) {\n\t\tcase Primitive.Mode.POINTS:\n\t\t\treturn indices ? indices.getCount() : position.getCount();\n\t\tcase Primitive.Mode.LINES:\n\t\t\treturn indices ? indices.getCount() / 2 : position.getCount() / 2;\n\t\tcase Primitive.Mode.LINE_LOOP:\n\t\t\treturn indices ? indices.getCount() : position.getCount();\n\t\tcase Primitive.Mode.LINE_STRIP:\n\t\t\treturn indices ? indices.getCount() - 1 : position.getCount() - 1;\n\t\tcase Primitive.Mode.TRIANGLES:\n\t\t\treturn indices ? indices.getCount() / 3 : position.getCount() / 3;\n\t\tcase Primitive.Mode.TRIANGLE_STRIP:\n\t\tcase Primitive.Mode.TRIANGLE_FAN:\n\t\t\treturn indices ? indices.getCount() - 2 : position.getCount() - 2;\n\t\tdefault:\n\t\t\tthrow new Error('Unexpected mode: ' + prim.getMode());\n\t}\n}\n\n/** @hidden */\nexport class SetMap<K, V> {\n\tprivate _map = new Map<K, Set<V>>();\n\tpublic get size(): number {\n\t\treturn this._map.size;\n\t}\n\tpublic has(k: K): boolean {\n\t\treturn this._map.has(k);\n\t}\n\tpublic add(k: K, v: V): this {\n\t\tlet entry = this._map.get(k);\n\t\tif (!entry) {\n\t\t\tentry = new Set();\n\t\t\tthis._map.set(k, entry);\n\t\t}\n\t\tentry.add(v);\n\t\treturn this;\n\t}\n\tpublic get(k: K): Set<V> {\n\t\treturn this._map.get(k) || new Set();\n\t}\n\tpublic keys(): Iterable<K> {\n\t\treturn this._map.keys();\n\t}\n}\n\n/** @hidden */\nexport function formatBytes(bytes: number, decimals = 2): string {\n\tif (bytes === 0) return '0 Bytes';\n\n\tconst k = 1000;\n\tconst dm = decimals < 0 ? 0 : decimals;\n\tconst sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\n\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\n\n\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n}\n\nconst _longFormatter = new Intl.NumberFormat(undefined, { maximumFractionDigits: 0 });\n\n/** @hidden */\nexport function formatLong(x: number): string {\n\treturn _longFormatter.format(x);\n}\n\n/** @hidden */\nexport function formatDelta(a: number, b: number, decimals = 2): string {\n\tconst prefix = a > b ? '–' : '+';\n\tconst suffix = '%';\n\treturn prefix + ((Math.abs(a - b) / a) * 100).toFixed(decimals) + suffix;\n}\n\n/** @hidden */\nexport function formatDeltaOp(a: number, b: number) {\n\treturn `${formatLong(a)} → ${formatLong(b)} (${formatDelta(a, b)})`;\n}\n\n/**\n * Returns a list of all unique vertex attributes on the given primitive and\n * its morph targets.\n * @hidden\n */\nexport function deepListAttributes(prim: Primitive): Accessor[] {\n\tconst accessors: Accessor[] = [];\n\n\tfor (const attribute of prim.listAttributes()) {\n\t\taccessors.push(attribute);\n\t}\n\tfor (const target of prim.listTargets()) {\n\t\tfor (const attribute of target.listAttributes()) {\n\t\t\taccessors.push(attribute);\n\t\t}\n\t}\n\n\treturn Array.from(new Set(accessors));\n}\n\n/** @hidden */\nexport function deepSwapAttribute(prim: Primitive, src: Accessor, dst: Accessor): void {\n\tprim.swap(src, dst);\n\tfor (const target of prim.listTargets()) {\n\t\ttarget.swap(src, dst);\n\t}\n}\n\n/** @hidden */\nexport function shallowEqualsArray(a: ArrayLike<unknown> | null, b: ArrayLike<unknown> | null) {\n\tif (a == null && b == null) return true;\n\tif (a == null || b == null) return false;\n\tif (a.length !== b.length) return false;\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (a[i] !== b[i]) return false;\n\t}\n\treturn true;\n}\n\n/** Clones an {@link Accessor} without creating a copy of its underlying TypedArray data. */\nexport function shallowCloneAccessor(document: Document, accessor: Accessor): Accessor {\n\treturn document\n\t\t.createAccessor(accessor.getName())\n\t\t.setArray(accessor.getArray())\n\t\t.setType(accessor.getType())\n\t\t.setBuffer(accessor.getBuffer())\n\t\t.setNormalized(accessor.getNormalized())\n\t\t.setSparse(accessor.getSparse());\n}\n\n/** @hidden */\nexport function createIndices(count: number, maxIndex = count): Uint16Array | Uint32Array {\n\tconst array = createIndicesEmpty(count, maxIndex);\n\tfor (let i = 0; i < array.length; i++) array[i] = i;\n\treturn array;\n}\n\n/** @hidden */\nexport function createIndicesEmpty(count: number, maxIndex = count): Uint16Array | Uint32Array {\n\treturn maxIndex <= 65534 ? new Uint16Array(count) : new Uint32Array(count);\n}\n\n/** @hidden */\nexport function isUsed(prop: Property): boolean {\n\treturn prop.listParents().some((parent) => parent.propertyType !== PropertyType.ROOT);\n}\n\n/** @hidden */\nexport function isEmptyObject(object: Record<string, unknown>): boolean {\n\tfor (const key in object) return false;\n\treturn true;\n}\n\n/**\n * Creates a unique key associated with the structure and draw call characteristics of\n * a {@link Primitive}, independent of its vertex content. Helper method, used to\n * identify candidate Primitives for joining.\n * @hidden\n */\nexport function createPrimGroupKey(prim: Primitive): string {\n\tconst document = Document.fromGraph(prim.getGraph())!;\n\tconst material = prim.getMaterial();\n\tconst materialIndex = document.getRoot().listMaterials().indexOf(material!);\n\tconst mode = BASIC_MODE_MAPPING[prim.getMode()];\n\tconst indices = !!prim.getIndices();\n\n\tconst attributes = prim\n\t\t.listSemantics()\n\t\t.sort()\n\t\t.map((semantic) => {\n\t\t\tconst attribute = prim.getAttribute(semantic)!;\n\t\t\tconst elementSize = attribute.getElementSize();\n\t\t\tconst componentType = attribute.getComponentType();\n\t\t\treturn `${semantic}:${elementSize}:${componentType}`;\n\t\t})\n\t\t.join('+');\n\n\tconst targets = prim\n\t\t.listTargets()\n\t\t.map((target) => {\n\t\t\treturn target\n\t\t\t\t.listSemantics()\n\t\t\t\t.sort()\n\t\t\t\t.map((semantic) => {\n\t\t\t\t\tconst attribute = prim.getAttribute(semantic)!;\n\t\t\t\t\tconst elementSize = attribute.getElementSize();\n\t\t\t\t\tconst componentType = attribute.getComponentType();\n\t\t\t\t\treturn `${semantic}:${elementSize}:${componentType}`;\n\t\t\t\t})\n\t\t\t\t.join('+');\n\t\t})\n\t\t.join('~');\n\n\treturn `${materialIndex}|${mode}|${indices}|${attributes}|${targets}`;\n}\n\n/**\n * Scales `size` NxN dimensions to fit within `limit` NxN dimensions, without\n * changing aspect ratio. If `size` <= `limit` in all dimensions, returns `size`.\n * @hidden\n */\nexport function fitWithin(size: vec2, limit: vec2): vec2 {\n\tconst [maxWidth, maxHeight] = limit;\n\tconst [srcWidth, srcHeight] = size;\n\n\tif (srcWidth <= maxWidth && srcHeight <= maxHeight) return size;\n\n\tlet dstWidth = srcWidth;\n\tlet dstHeight = srcHeight;\n\n\tif (dstWidth > maxWidth) {\n\t\tdstHeight = Math.floor(dstHeight * (maxWidth / dstWidth));\n\t\tdstWidth = maxWidth;\n\t}\n\n\tif (dstHeight > maxHeight) {\n\t\tdstWidth = Math.floor(dstWidth * (maxHeight / dstHeight));\n\t\tdstHeight = maxHeight;\n\t}\n\n\treturn [dstWidth, dstHeight];\n}\n\ntype ResizePreset = 'nearest-pot' | 'ceil-pot' | 'floor-pot';\n\n/**\n * Scales `size` NxN dimensions to the specified power of two.\n * @hidden\n */\nexport function fitPowerOfTwo(size: vec2, method: ResizePreset): vec2 {\n\tif (isPowerOfTwo(size[0]) && isPowerOfTwo(size[1])) {\n\t\treturn size;\n\t}\n\n\tswitch (method) {\n\t\tcase 'nearest-pot':\n\t\t\treturn size.map(nearestPowerOfTwo) as vec2;\n\t\tcase 'ceil-pot':\n\t\t\treturn size.map(ceilPowerOfTwo) as vec2;\n\t\tcase 'floor-pot':\n\t\t\treturn size.map(floorPowerOfTwo) as vec2;\n\t}\n}\n\nfunction isPowerOfTwo(value: number): boolean {\n\tif (value <= 2) return true;\n\treturn (value & (value - 1)) === 0 && value !== 0;\n}\n\nfunction nearestPowerOfTwo(value: number): number {\n\tif (value <= 4) return 4;\n\n\tconst lo = floorPowerOfTwo(value);\n\tconst hi = ceilPowerOfTwo(value);\n\n\tif (hi - value > value - lo) return lo;\n\treturn hi;\n}\n\nexport function floorPowerOfTwo(value: number): number {\n\treturn Math.pow(2, Math.floor(Math.log(value) / Math.LN2));\n}\n\nexport function ceilPowerOfTwo(value: number): number {\n\treturn Math.pow(2, Math.ceil(Math.log(value) / Math.LN2));\n}\n\n/**\n * Mapping from any glTF primitive mode to its equivalent basic mode, as returned by\n * {@link convertPrimitiveMode}.\n * @hidden\n */\nexport const BASIC_MODE_MAPPING = {\n\t[POINTS]: POINTS,\n\t[LINES]: LINES,\n\t[LINE_STRIP]: LINES,\n\t[LINE_LOOP]: LINES,\n\t[TRIANGLES]: TRIANGLES,\n\t[TRIANGLE_STRIP]: TRIANGLES,\n\t[TRIANGLE_FAN]: TRIANGLES,\n} as Record<GLTF.MeshPrimitiveMode, GLTF.MeshPrimitiveMode>;\n","import type { Document, Transform, vec3 } from '@gltf-transform/core';\nimport { getBounds } from '@gltf-transform/core';\nimport { assignDefaults, createTransform } from './utils.js';\n\nconst NAME = 'center';\n\n/** Options for the {@link center} function. */\nexport interface CenterOptions {\n\t/** Location on the model to be considered the pivot, and recentered at the origin. */\n\tpivot?: 'center' | 'above' | 'below' | vec3;\n}\n\nconst CENTER_DEFAULTS: Required<CenterOptions> = { pivot: 'center' };\n\n/**\n * Centers the {@link Scene} at the origin, or above/below it. Transformations from animation,\n * skinning, and morph targets are not taken into account.\n *\n * Example:\n *\n * ```ts\n * await document.transform(center({pivot: 'below'}));\n * ```\n *\n * @category Transforms\n */\nexport function center(_options: CenterOptions = CENTER_DEFAULTS): Transform {\n\tconst options = assignDefaults(CENTER_DEFAULTS, _options);\n\n\treturn createTransform(NAME, (doc: Document): void => {\n\t\tconst logger = doc.getLogger();\n\t\tconst root = doc.getRoot();\n\t\tconst isAnimated = root.listAnimations().length > 0 || root.listSkins().length > 0;\n\n\t\tdoc.getRoot()\n\t\t\t.listScenes()\n\t\t\t.forEach((scene, index) => {\n\t\t\t\tlogger.debug(`${NAME}: Scene ${index + 1} / ${root.listScenes().length}.`);\n\n\t\t\t\tlet pivot: vec3;\n\t\t\t\tif (typeof options.pivot === 'string') {\n\t\t\t\t\tconst bbox = getBounds(scene);\n\t\t\t\t\tpivot = [\n\t\t\t\t\t\t(bbox.max[0] - bbox.min[0]) / 2 + bbox.min[0],\n\t\t\t\t\t\t(bbox.max[1] - bbox.min[1]) / 2 + bbox.min[1],\n\t\t\t\t\t\t(bbox.max[2] - bbox.min[2]) / 2 + bbox.min[2],\n\t\t\t\t\t];\n\t\t\t\t\tif (options.pivot === 'above') pivot[1] = bbox.max[1];\n\t\t\t\t\tif (options.pivot === 'below') pivot[1] = bbox.min[1];\n\t\t\t\t} else {\n\t\t\t\t\tpivot = options.pivot as vec3;\n\t\t\t\t}\n\n\t\t\t\tlogger.debug(`${NAME}: Pivot \"${pivot.join(', ')}\".`);\n\n\t\t\t\tconst offset: vec3 = [-1 * pivot[0], -1 * pivot[1], -1 * pivot[2]];\n\n\t\t\t\tif (isAnimated) {\n\t\t\t\t\tlogger.debug(`${NAME}: Model contains animation or skin. Adding a wrapper node.`);\n\t\t\t\t\tconst offsetNode = doc.createNode('Pivot').setTranslation(offset);\n\t\t\t\t\tscene.listChildren().forEach((child) => offsetNode.addChild(child));\n\t\t\t\t\tscene.addChild(offsetNode);\n\t\t\t\t} else {\n\t\t\t\t\tlogger.debug(`${NAME}: Skipping wrapper, offsetting all root nodes.`);\n\t\t\t\t\tscene.listChildren().forEach((child) => {\n\t\t\t\t\t\tconst t = child.getTranslation();\n\t\t\t\t\t\tchild.setTranslation([t[0] + offset[0], t[1] + offset[1], t[2] + offset[2]]);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n","import { Node, Scene } from '@gltf-transform/core';\n\n/**\n * Finds the parent {@link Scene Scenes} associated with the given {@link Node}.\n * In most cases a Node is associated with only one Scene, but it is possible\n * for a Node to be located in two or more Scenes, or none at all.\n *\n * Example:\n *\n * ```typescript\n * import { listNodeScenes } from '@gltf-transform/functions';\n *\n * const node = document.getRoot().listNodes()\n *  .find((node) => node.getName() === 'MyNode');\n *\n * const scenes = listNodeScenes(node);\n * ```\n */\nexport function listNodeScenes(node: Node): Scene[] {\n\tconst visited = new Set<Node>();\n\n\tlet child = node;\n\tlet parent: Node | null;\n\n\twhile ((parent = child.getParentNode() as Node | null)) {\n\t\tif (visited.has(parent)) {\n\t\t\tthrow new Error('Circular dependency in scene graph.');\n\t\t}\n\t\tvisited.add(parent);\n\t\tchild = parent;\n\t}\n\n\treturn child.listParents().filter((parent) => parent instanceof Scene) as Scene[];\n}\n","import type { Node } from '@gltf-transform/core';\nimport { listNodeScenes } from './list-node-scenes.js';\n\n/**\n * Clears the parent of the given {@link Node}, leaving it attached\n * directly to its {@link Scene}. Inherited transforms will be applied\n * to the Node. This operation changes the Node's local transform,\n * but leaves its world transform unchanged.\n *\n * Example:\n *\n * ```typescript\n * import { clearNodeParent } from '@gltf-transform/functions';\n *\n * scene.traverse((node) => { ... }); // Scene → … → Node\n *\n * clearNodeParent(node);\n *\n * scene.traverse((node) => { ... }); // Scene → Node\n * ```\n *\n * To clear _all_ transforms of a Node, first clear its inherited transforms with\n * {@link clearNodeParent}, then clear the local transform with {@link clearNodeTransform}.\n */\nexport function clearNodeParent(node: Node): Node {\n\tconst scenes = listNodeScenes(node);\n\tconst parent = node.getParentNode();\n\n\tif (!parent) return node;\n\n\t// Apply inherited transforms to local matrix. Skinned meshes are not affected\n\t// by the node parent's transform, and can be ignored. Updates to IBMs and TRS\n\t// animations are out of scope in this context.\n\tnode.setMatrix(node.getWorldMatrix());\n\n\t// Add to Scene roots.\n\tparent.removeChild(node);\n\tfor (const scene of scenes) scene.addChild(node);\n\n\treturn node;\n}\n","/**\n * Common utilities\n * @module glMatrix\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\n */\n\nexport function setMatrixArrayType(type) {\n  ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\n\nexport function toRadian(a) {\n  return a * degree;\n}\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\n\nexport function equals(a, b) {\n  return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n  var y = 0,\n      i = arguments.length;\n\n  while (i--) {\n    y += arguments[i] * arguments[i];\n  }\n\n  return Math.sqrt(y);\n};","import * as glMatrix from \"./common.js\";\n/**\n * 4x4 Matrix<br>Format: column-major, when typed out it looks like row-major<br>The matrices are being post multiplied.\n * @module mat4\n */\n\n/**\n * Creates a new identity mat4\n *\n * @returns {mat4} a new 4x4 matrix\n */\n\nexport function create() {\n  var out = new glMatrix.ARRAY_TYPE(16);\n\n  if (glMatrix.ARRAY_TYPE != Float32Array) {\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 0;\n    out[9] = 0;\n    out[11] = 0;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = 0;\n  }\n\n  out[0] = 1;\n  out[5] = 1;\n  out[10] = 1;\n  out[15] = 1;\n  return out;\n}\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\n\nexport function clone(a) {\n  var out = new glMatrix.ARRAY_TYPE(16);\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  out[3] = a[3];\n  out[4] = a[4];\n  out[5] = a[5];\n  out[6] = a[6];\n  out[7] = a[7];\n  out[8] = a[8];\n  out[9] = a[9];\n  out[10] = a[10];\n  out[11] = a[11];\n  out[12] = a[12];\n  out[13] = a[13];\n  out[14] = a[14];\n  out[15] = a[15];\n  return out;\n}\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function copy(out, a) {\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  out[3] = a[3];\n  out[4] = a[4];\n  out[5] = a[5];\n  out[6] = a[6];\n  out[7] = a[7];\n  out[8] = a[8];\n  out[9] = a[9];\n  out[10] = a[10];\n  out[11] = a[11];\n  out[12] = a[12];\n  out[13] = a[13];\n  out[14] = a[14];\n  out[15] = a[15];\n  return out;\n}\n/**\n * Create a new mat4 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} A new mat4\n */\n\nexport function fromValues(m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n  var out = new glMatrix.ARRAY_TYPE(16);\n  out[0] = m00;\n  out[1] = m01;\n  out[2] = m02;\n  out[3] = m03;\n  out[4] = m10;\n  out[5] = m11;\n  out[6] = m12;\n  out[7] = m13;\n  out[8] = m20;\n  out[9] = m21;\n  out[10] = m22;\n  out[11] = m23;\n  out[12] = m30;\n  out[13] = m31;\n  out[14] = m32;\n  out[15] = m33;\n  return out;\n}\n/**\n * Set the components of a mat4 to the given values\n *\n * @param {mat4} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} out\n */\n\nexport function set(out, m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) {\n  out[0] = m00;\n  out[1] = m01;\n  out[2] = m02;\n  out[3] = m03;\n  out[4] = m10;\n  out[5] = m11;\n  out[6] = m12;\n  out[7] = m13;\n  out[8] = m20;\n  out[9] = m21;\n  out[10] = m22;\n  out[11] = m23;\n  out[12] = m30;\n  out[13] = m31;\n  out[14] = m32;\n  out[15] = m33;\n  return out;\n}\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\n\nexport function identity(out) {\n  out[0] = 1;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = 1;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = 1;\n  out[11] = 0;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = 0;\n  out[15] = 1;\n  return out;\n}\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function transpose(out, a) {\n  // If we are transposing ourselves we can skip a few steps but have to cache some values\n  if (out === a) {\n    var a01 = a[1],\n        a02 = a[2],\n        a03 = a[3];\n    var a12 = a[6],\n        a13 = a[7];\n    var a23 = a[11];\n    out[1] = a[4];\n    out[2] = a[8];\n    out[3] = a[12];\n    out[4] = a01;\n    out[6] = a[9];\n    out[7] = a[13];\n    out[8] = a02;\n    out[9] = a12;\n    out[11] = a[14];\n    out[12] = a03;\n    out[13] = a13;\n    out[14] = a23;\n  } else {\n    out[0] = a[0];\n    out[1] = a[4];\n    out[2] = a[8];\n    out[3] = a[12];\n    out[4] = a[1];\n    out[5] = a[5];\n    out[6] = a[9];\n    out[7] = a[13];\n    out[8] = a[2];\n    out[9] = a[6];\n    out[10] = a[10];\n    out[11] = a[14];\n    out[12] = a[3];\n    out[13] = a[7];\n    out[14] = a[11];\n    out[15] = a[15];\n  }\n\n  return out;\n}\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function invert(out, a) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2],\n      a03 = a[3];\n  var a10 = a[4],\n      a11 = a[5],\n      a12 = a[6],\n      a13 = a[7];\n  var a20 = a[8],\n      a21 = a[9],\n      a22 = a[10],\n      a23 = a[11];\n  var a30 = a[12],\n      a31 = a[13],\n      a32 = a[14],\n      a33 = a[15];\n  var b00 = a00 * a11 - a01 * a10;\n  var b01 = a00 * a12 - a02 * a10;\n  var b02 = a00 * a13 - a03 * a10;\n  var b03 = a01 * a12 - a02 * a11;\n  var b04 = a01 * a13 - a03 * a11;\n  var b05 = a02 * a13 - a03 * a12;\n  var b06 = a20 * a31 - a21 * a30;\n  var b07 = a20 * a32 - a22 * a30;\n  var b08 = a20 * a33 - a23 * a30;\n  var b09 = a21 * a32 - a22 * a31;\n  var b10 = a21 * a33 - a23 * a31;\n  var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n  var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n  if (!det) {\n    return null;\n  }\n\n  det = 1.0 / det;\n  out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n  out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n  out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n  out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n  out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n  out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n  out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n  out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n  out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n  out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n  out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n  out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n  out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n  out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n  out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n  out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n  return out;\n}\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the source matrix\n * @returns {mat4} out\n */\n\nexport function adjoint(out, a) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2],\n      a03 = a[3];\n  var a10 = a[4],\n      a11 = a[5],\n      a12 = a[6],\n      a13 = a[7];\n  var a20 = a[8],\n      a21 = a[9],\n      a22 = a[10],\n      a23 = a[11];\n  var a30 = a[12],\n      a31 = a[13],\n      a32 = a[14],\n      a33 = a[15];\n  out[0] = a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22);\n  out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n  out[2] = a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12);\n  out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n  out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n  out[5] = a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22);\n  out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n  out[7] = a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12);\n  out[8] = a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21);\n  out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n  out[10] = a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11);\n  out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n  out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n  out[13] = a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21);\n  out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n  out[15] = a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11);\n  return out;\n}\n/**\n * Calculates the determinant of a mat4\n *\n * @param {ReadonlyMat4} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2],\n      a03 = a[3];\n  var a10 = a[4],\n      a11 = a[5],\n      a12 = a[6],\n      a13 = a[7];\n  var a20 = a[8],\n      a21 = a[9],\n      a22 = a[10],\n      a23 = a[11];\n  var a30 = a[12],\n      a31 = a[13],\n      a32 = a[14],\n      a33 = a[15];\n  var b00 = a00 * a11 - a01 * a10;\n  var b01 = a00 * a12 - a02 * a10;\n  var b02 = a00 * a13 - a03 * a10;\n  var b03 = a01 * a12 - a02 * a11;\n  var b04 = a01 * a13 - a03 * a11;\n  var b05 = a02 * a13 - a03 * a12;\n  var b06 = a20 * a31 - a21 * a30;\n  var b07 = a20 * a32 - a22 * a30;\n  var b08 = a20 * a33 - a23 * a30;\n  var b09 = a21 * a32 - a22 * a31;\n  var b10 = a21 * a33 - a23 * a31;\n  var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n  return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n}\n/**\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function multiply(out, a, b) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2],\n      a03 = a[3];\n  var a10 = a[4],\n      a11 = a[5],\n      a12 = a[6],\n      a13 = a[7];\n  var a20 = a[8],\n      a21 = a[9],\n      a22 = a[10],\n      a23 = a[11];\n  var a30 = a[12],\n      a31 = a[13],\n      a32 = a[14],\n      a33 = a[15]; // Cache only the current line of the second matrix\n\n  var b0 = b[0],\n      b1 = b[1],\n      b2 = b[2],\n      b3 = b[3];\n  out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n  out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n  out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n  out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n  b0 = b[4];\n  b1 = b[5];\n  b2 = b[6];\n  b3 = b[7];\n  out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n  out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n  out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n  out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n  b0 = b[8];\n  b1 = b[9];\n  b2 = b[10];\n  b3 = b[11];\n  out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n  out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n  out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n  out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n  b0 = b[12];\n  b1 = b[13];\n  b2 = b[14];\n  b3 = b[15];\n  out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n  out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n  out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n  out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n  return out;\n}\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to translate\n * @param {ReadonlyVec3} v vector to translate by\n * @returns {mat4} out\n */\n\nexport function translate(out, a, v) {\n  var x = v[0],\n      y = v[1],\n      z = v[2];\n  var a00, a01, a02, a03;\n  var a10, a11, a12, a13;\n  var a20, a21, a22, a23;\n\n  if (a === out) {\n    out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n    out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n    out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n    out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n  } else {\n    a00 = a[0];\n    a01 = a[1];\n    a02 = a[2];\n    a03 = a[3];\n    a10 = a[4];\n    a11 = a[5];\n    a12 = a[6];\n    a13 = a[7];\n    a20 = a[8];\n    a21 = a[9];\n    a22 = a[10];\n    a23 = a[11];\n    out[0] = a00;\n    out[1] = a01;\n    out[2] = a02;\n    out[3] = a03;\n    out[4] = a10;\n    out[5] = a11;\n    out[6] = a12;\n    out[7] = a13;\n    out[8] = a20;\n    out[9] = a21;\n    out[10] = a22;\n    out[11] = a23;\n    out[12] = a00 * x + a10 * y + a20 * z + a[12];\n    out[13] = a01 * x + a11 * y + a21 * z + a[13];\n    out[14] = a02 * x + a12 * y + a22 * z + a[14];\n    out[15] = a03 * x + a13 * y + a23 * z + a[15];\n  }\n\n  return out;\n}\n/**\n * Scales the mat4 by the dimensions in the given vec3 not using vectorization\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {ReadonlyVec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\n\nexport function scale(out, a, v) {\n  var x = v[0],\n      y = v[1],\n      z = v[2];\n  out[0] = a[0] * x;\n  out[1] = a[1] * x;\n  out[2] = a[2] * x;\n  out[3] = a[3] * x;\n  out[4] = a[4] * y;\n  out[5] = a[5] * y;\n  out[6] = a[6] * y;\n  out[7] = a[7] * y;\n  out[8] = a[8] * z;\n  out[9] = a[9] * z;\n  out[10] = a[10] * z;\n  out[11] = a[11] * z;\n  out[12] = a[12];\n  out[13] = a[13];\n  out[14] = a[14];\n  out[15] = a[15];\n  return out;\n}\n/**\n * Rotates a mat4 by the given angle around the given axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\n\nexport function rotate(out, a, rad, axis) {\n  var x = axis[0],\n      y = axis[1],\n      z = axis[2];\n  var len = Math.hypot(x, y, z);\n  var s, c, t;\n  var a00, a01, a02, a03;\n  var a10, a11, a12, a13;\n  var a20, a21, a22, a23;\n  var b00, b01, b02;\n  var b10, b11, b12;\n  var b20, b21, b22;\n\n  if (len < glMatrix.EPSILON) {\n    return null;\n  }\n\n  len = 1 / len;\n  x *= len;\n  y *= len;\n  z *= len;\n  s = Math.sin(rad);\n  c = Math.cos(rad);\n  t = 1 - c;\n  a00 = a[0];\n  a01 = a[1];\n  a02 = a[2];\n  a03 = a[3];\n  a10 = a[4];\n  a11 = a[5];\n  a12 = a[6];\n  a13 = a[7];\n  a20 = a[8];\n  a21 = a[9];\n  a22 = a[10];\n  a23 = a[11]; // Construct the elements of the rotation matrix\n\n  b00 = x * x * t + c;\n  b01 = y * x * t + z * s;\n  b02 = z * x * t - y * s;\n  b10 = x * y * t - z * s;\n  b11 = y * y * t + c;\n  b12 = z * y * t + x * s;\n  b20 = x * z * t + y * s;\n  b21 = y * z * t - x * s;\n  b22 = z * z * t + c; // Perform rotation-specific matrix multiplication\n\n  out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n  out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n  out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n  out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n  out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n  out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n  out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n  out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n  out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n  out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n  out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n  out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n  if (a !== out) {\n    // If the source and destination differ, copy the unchanged last row\n    out[12] = a[12];\n    out[13] = a[13];\n    out[14] = a[14];\n    out[15] = a[15];\n  }\n\n  return out;\n}\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateX(out, a, rad) {\n  var s = Math.sin(rad);\n  var c = Math.cos(rad);\n  var a10 = a[4];\n  var a11 = a[5];\n  var a12 = a[6];\n  var a13 = a[7];\n  var a20 = a[8];\n  var a21 = a[9];\n  var a22 = a[10];\n  var a23 = a[11];\n\n  if (a !== out) {\n    // If the source and destination differ, copy the unchanged rows\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    out[12] = a[12];\n    out[13] = a[13];\n    out[14] = a[14];\n    out[15] = a[15];\n  } // Perform axis-specific matrix multiplication\n\n\n  out[4] = a10 * c + a20 * s;\n  out[5] = a11 * c + a21 * s;\n  out[6] = a12 * c + a22 * s;\n  out[7] = a13 * c + a23 * s;\n  out[8] = a20 * c - a10 * s;\n  out[9] = a21 * c - a11 * s;\n  out[10] = a22 * c - a12 * s;\n  out[11] = a23 * c - a13 * s;\n  return out;\n}\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateY(out, a, rad) {\n  var s = Math.sin(rad);\n  var c = Math.cos(rad);\n  var a00 = a[0];\n  var a01 = a[1];\n  var a02 = a[2];\n  var a03 = a[3];\n  var a20 = a[8];\n  var a21 = a[9];\n  var a22 = a[10];\n  var a23 = a[11];\n\n  if (a !== out) {\n    // If the source and destination differ, copy the unchanged rows\n    out[4] = a[4];\n    out[5] = a[5];\n    out[6] = a[6];\n    out[7] = a[7];\n    out[12] = a[12];\n    out[13] = a[13];\n    out[14] = a[14];\n    out[15] = a[15];\n  } // Perform axis-specific matrix multiplication\n\n\n  out[0] = a00 * c - a20 * s;\n  out[1] = a01 * c - a21 * s;\n  out[2] = a02 * c - a22 * s;\n  out[3] = a03 * c - a23 * s;\n  out[8] = a00 * s + a20 * c;\n  out[9] = a01 * s + a21 * c;\n  out[10] = a02 * s + a22 * c;\n  out[11] = a03 * s + a23 * c;\n  return out;\n}\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function rotateZ(out, a, rad) {\n  var s = Math.sin(rad);\n  var c = Math.cos(rad);\n  var a00 = a[0];\n  var a01 = a[1];\n  var a02 = a[2];\n  var a03 = a[3];\n  var a10 = a[4];\n  var a11 = a[5];\n  var a12 = a[6];\n  var a13 = a[7];\n\n  if (a !== out) {\n    // If the source and destination differ, copy the unchanged last row\n    out[8] = a[8];\n    out[9] = a[9];\n    out[10] = a[10];\n    out[11] = a[11];\n    out[12] = a[12];\n    out[13] = a[13];\n    out[14] = a[14];\n    out[15] = a[15];\n  } // Perform axis-specific matrix multiplication\n\n\n  out[0] = a00 * c + a10 * s;\n  out[1] = a01 * c + a11 * s;\n  out[2] = a02 * c + a12 * s;\n  out[3] = a03 * c + a13 * s;\n  out[4] = a10 * c - a00 * s;\n  out[5] = a11 * c - a01 * s;\n  out[6] = a12 * c - a02 * s;\n  out[7] = a13 * c - a03 * s;\n  return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n *     mat4.identity(dest);\n *     mat4.translate(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\n\nexport function fromTranslation(out, v) {\n  out[0] = 1;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = 1;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = 1;\n  out[11] = 0;\n  out[12] = v[0];\n  out[13] = v[1];\n  out[14] = v[2];\n  out[15] = 1;\n  return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n *     mat4.identity(dest);\n *     mat4.scale(dest, dest, vec);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyVec3} v Scaling vector\n * @returns {mat4} out\n */\n\nexport function fromScaling(out, v) {\n  out[0] = v[0];\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = v[1];\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = v[2];\n  out[11] = 0;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = 0;\n  out[15] = 1;\n  return out;\n}\n/**\n * Creates a matrix from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n *     mat4.identity(dest);\n *     mat4.rotate(dest, dest, rad, axis);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @param {ReadonlyVec3} axis the axis to rotate around\n * @returns {mat4} out\n */\n\nexport function fromRotation(out, rad, axis) {\n  var x = axis[0],\n      y = axis[1],\n      z = axis[2];\n  var len = Math.hypot(x, y, z);\n  var s, c, t;\n\n  if (len < glMatrix.EPSILON) {\n    return null;\n  }\n\n  len = 1 / len;\n  x *= len;\n  y *= len;\n  z *= len;\n  s = Math.sin(rad);\n  c = Math.cos(rad);\n  t = 1 - c; // Perform rotation-specific matrix multiplication\n\n  out[0] = x * x * t + c;\n  out[1] = y * x * t + z * s;\n  out[2] = z * x * t - y * s;\n  out[3] = 0;\n  out[4] = x * y * t - z * s;\n  out[5] = y * y * t + c;\n  out[6] = z * y * t + x * s;\n  out[7] = 0;\n  out[8] = x * z * t + y * s;\n  out[9] = y * z * t - x * s;\n  out[10] = z * z * t + c;\n  out[11] = 0;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = 0;\n  out[15] = 1;\n  return out;\n}\n/**\n * Creates a matrix from the given angle around the X axis\n * This is equivalent to (but much faster than):\n *\n *     mat4.identity(dest);\n *     mat4.rotateX(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromXRotation(out, rad) {\n  var s = Math.sin(rad);\n  var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n  out[0] = 1;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = c;\n  out[6] = s;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = -s;\n  out[10] = c;\n  out[11] = 0;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = 0;\n  out[15] = 1;\n  return out;\n}\n/**\n * Creates a matrix from the given angle around the Y axis\n * This is equivalent to (but much faster than):\n *\n *     mat4.identity(dest);\n *     mat4.rotateY(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromYRotation(out, rad) {\n  var s = Math.sin(rad);\n  var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n  out[0] = c;\n  out[1] = 0;\n  out[2] = -s;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = 1;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = s;\n  out[9] = 0;\n  out[10] = c;\n  out[11] = 0;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = 0;\n  out[15] = 1;\n  return out;\n}\n/**\n * Creates a matrix from the given angle around the Z axis\n * This is equivalent to (but much faster than):\n *\n *     mat4.identity(dest);\n *     mat4.rotateZ(dest, dest, rad);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\n\nexport function fromZRotation(out, rad) {\n  var s = Math.sin(rad);\n  var c = Math.cos(rad); // Perform axis-specific matrix multiplication\n\n  out[0] = c;\n  out[1] = s;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = -s;\n  out[5] = c;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = 1;\n  out[11] = 0;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = 0;\n  out[15] = 1;\n  return out;\n}\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n *     mat4.identity(dest);\n *     mat4.translate(dest, vec);\n *     let quatMat = mat4.create();\n *     quat4.toMat4(quat, quatMat);\n *     mat4.multiply(dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslation(out, q, v) {\n  // Quaternion math\n  var x = q[0],\n      y = q[1],\n      z = q[2],\n      w = q[3];\n  var x2 = x + x;\n  var y2 = y + y;\n  var z2 = z + z;\n  var xx = x * x2;\n  var xy = x * y2;\n  var xz = x * z2;\n  var yy = y * y2;\n  var yz = y * z2;\n  var zz = z * z2;\n  var wx = w * x2;\n  var wy = w * y2;\n  var wz = w * z2;\n  out[0] = 1 - (yy + zz);\n  out[1] = xy + wz;\n  out[2] = xz - wy;\n  out[3] = 0;\n  out[4] = xy - wz;\n  out[5] = 1 - (xx + zz);\n  out[6] = yz + wx;\n  out[7] = 0;\n  out[8] = xz + wy;\n  out[9] = yz - wx;\n  out[10] = 1 - (xx + yy);\n  out[11] = 0;\n  out[12] = v[0];\n  out[13] = v[1];\n  out[14] = v[2];\n  out[15] = 1;\n  return out;\n}\n/**\n * Creates a new mat4 from a dual quat.\n *\n * @param {mat4} out Matrix\n * @param {ReadonlyQuat2} a Dual Quaternion\n * @returns {mat4} mat4 receiving operation result\n */\n\nexport function fromQuat2(out, a) {\n  var translation = new glMatrix.ARRAY_TYPE(3);\n  var bx = -a[0],\n      by = -a[1],\n      bz = -a[2],\n      bw = a[3],\n      ax = a[4],\n      ay = a[5],\n      az = a[6],\n      aw = a[7];\n  var magnitude = bx * bx + by * by + bz * bz + bw * bw; //Only scale if it makes sense\n\n  if (magnitude > 0) {\n    translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2 / magnitude;\n    translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2 / magnitude;\n    translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2 / magnitude;\n  } else {\n    translation[0] = (ax * bw + aw * bx + ay * bz - az * by) * 2;\n    translation[1] = (ay * bw + aw * by + az * bx - ax * bz) * 2;\n    translation[2] = (az * bw + aw * bz + ax * by - ay * bx) * 2;\n  }\n\n  fromRotationTranslation(out, a, translation);\n  return out;\n}\n/**\n * Returns the translation vector component of a transformation\n *  matrix. If a matrix is built with fromRotationTranslation,\n *  the returned vector will be the same as the translation vector\n *  originally supplied.\n * @param  {vec3} out Vector to receive translation component\n * @param  {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nexport function getTranslation(out, mat) {\n  out[0] = mat[12];\n  out[1] = mat[13];\n  out[2] = mat[14];\n  return out;\n}\n/**\n * Returns the scaling factor component of a transformation\n *  matrix. If a matrix is built with fromRotationTranslationScale\n *  with a normalized Quaternion paramter, the returned vector will be\n *  the same as the scaling vector\n *  originally supplied.\n * @param  {vec3} out Vector to receive scaling factor component\n * @param  {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nexport function getScaling(out, mat) {\n  var m11 = mat[0];\n  var m12 = mat[1];\n  var m13 = mat[2];\n  var m21 = mat[4];\n  var m22 = mat[5];\n  var m23 = mat[6];\n  var m31 = mat[8];\n  var m32 = mat[9];\n  var m33 = mat[10];\n  out[0] = Math.hypot(m11, m12, m13);\n  out[1] = Math.hypot(m21, m22, m23);\n  out[2] = Math.hypot(m31, m32, m33);\n  return out;\n}\n/**\n * Returns a quaternion representing the rotational component\n *  of a transformation matrix. If a matrix is built with\n *  fromRotationTranslation, the returned quaternion will be the\n *  same as the quaternion originally supplied.\n * @param {quat} out Quaternion to receive the rotation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {quat} out\n */\n\nexport function getRotation(out, mat) {\n  var scaling = new glMatrix.ARRAY_TYPE(3);\n  getScaling(scaling, mat);\n  var is1 = 1 / scaling[0];\n  var is2 = 1 / scaling[1];\n  var is3 = 1 / scaling[2];\n  var sm11 = mat[0] * is1;\n  var sm12 = mat[1] * is2;\n  var sm13 = mat[2] * is3;\n  var sm21 = mat[4] * is1;\n  var sm22 = mat[5] * is2;\n  var sm23 = mat[6] * is3;\n  var sm31 = mat[8] * is1;\n  var sm32 = mat[9] * is2;\n  var sm33 = mat[10] * is3;\n  var trace = sm11 + sm22 + sm33;\n  var S = 0;\n\n  if (trace > 0) {\n    S = Math.sqrt(trace + 1.0) * 2;\n    out[3] = 0.25 * S;\n    out[0] = (sm23 - sm32) / S;\n    out[1] = (sm31 - sm13) / S;\n    out[2] = (sm12 - sm21) / S;\n  } else if (sm11 > sm22 && sm11 > sm33) {\n    S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n    out[3] = (sm23 - sm32) / S;\n    out[0] = 0.25 * S;\n    out[1] = (sm12 + sm21) / S;\n    out[2] = (sm31 + sm13) / S;\n  } else if (sm22 > sm33) {\n    S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n    out[3] = (sm31 - sm13) / S;\n    out[0] = (sm12 + sm21) / S;\n    out[1] = 0.25 * S;\n    out[2] = (sm23 + sm32) / S;\n  } else {\n    S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n    out[3] = (sm12 - sm21) / S;\n    out[0] = (sm31 + sm13) / S;\n    out[1] = (sm23 + sm32) / S;\n    out[2] = 0.25 * S;\n  }\n\n  return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale\n * This is equivalent to (but much faster than):\n *\n *     mat4.identity(dest);\n *     mat4.translate(dest, vec);\n *     let quatMat = mat4.create();\n *     quat4.toMat4(quat, quatMat);\n *     mat4.multiply(dest, quatMat);\n *     mat4.scale(dest, scale)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslationScale(out, q, v, s) {\n  // Quaternion math\n  var x = q[0],\n      y = q[1],\n      z = q[2],\n      w = q[3];\n  var x2 = x + x;\n  var y2 = y + y;\n  var z2 = z + z;\n  var xx = x * x2;\n  var xy = x * y2;\n  var xz = x * z2;\n  var yy = y * y2;\n  var yz = y * z2;\n  var zz = z * z2;\n  var wx = w * x2;\n  var wy = w * y2;\n  var wz = w * z2;\n  var sx = s[0];\n  var sy = s[1];\n  var sz = s[2];\n  out[0] = (1 - (yy + zz)) * sx;\n  out[1] = (xy + wz) * sx;\n  out[2] = (xz - wy) * sx;\n  out[3] = 0;\n  out[4] = (xy - wz) * sy;\n  out[5] = (1 - (xx + zz)) * sy;\n  out[6] = (yz + wx) * sy;\n  out[7] = 0;\n  out[8] = (xz + wy) * sz;\n  out[9] = (yz - wx) * sz;\n  out[10] = (1 - (xx + yy)) * sz;\n  out[11] = 0;\n  out[12] = v[0];\n  out[13] = v[1];\n  out[14] = v[2];\n  out[15] = 1;\n  return out;\n}\n/**\n * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin\n * This is equivalent to (but much faster than):\n *\n *     mat4.identity(dest);\n *     mat4.translate(dest, vec);\n *     mat4.translate(dest, origin);\n *     let quatMat = mat4.create();\n *     quat4.toMat4(quat, quatMat);\n *     mat4.multiply(dest, quatMat);\n *     mat4.scale(dest, scale)\n *     mat4.translate(dest, negativeOrigin);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {ReadonlyVec3} v Translation vector\n * @param {ReadonlyVec3} s Scaling vector\n * @param {ReadonlyVec3} o The origin vector around which to scale and rotate\n * @returns {mat4} out\n */\n\nexport function fromRotationTranslationScaleOrigin(out, q, v, s, o) {\n  // Quaternion math\n  var x = q[0],\n      y = q[1],\n      z = q[2],\n      w = q[3];\n  var x2 = x + x;\n  var y2 = y + y;\n  var z2 = z + z;\n  var xx = x * x2;\n  var xy = x * y2;\n  var xz = x * z2;\n  var yy = y * y2;\n  var yz = y * z2;\n  var zz = z * z2;\n  var wx = w * x2;\n  var wy = w * y2;\n  var wz = w * z2;\n  var sx = s[0];\n  var sy = s[1];\n  var sz = s[2];\n  var ox = o[0];\n  var oy = o[1];\n  var oz = o[2];\n  var out0 = (1 - (yy + zz)) * sx;\n  var out1 = (xy + wz) * sx;\n  var out2 = (xz - wy) * sx;\n  var out4 = (xy - wz) * sy;\n  var out5 = (1 - (xx + zz)) * sy;\n  var out6 = (yz + wx) * sy;\n  var out8 = (xz + wy) * sz;\n  var out9 = (yz - wx) * sz;\n  var out10 = (1 - (xx + yy)) * sz;\n  out[0] = out0;\n  out[1] = out1;\n  out[2] = out2;\n  out[3] = 0;\n  out[4] = out4;\n  out[5] = out5;\n  out[6] = out6;\n  out[7] = 0;\n  out[8] = out8;\n  out[9] = out9;\n  out[10] = out10;\n  out[11] = 0;\n  out[12] = v[0] + ox - (out0 * ox + out4 * oy + out8 * oz);\n  out[13] = v[1] + oy - (out1 * ox + out5 * oy + out9 * oz);\n  out[14] = v[2] + oz - (out2 * ox + out6 * oy + out10 * oz);\n  out[15] = 1;\n  return out;\n}\n/**\n * Calculates a 4x4 matrix from the given quaternion\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat4} out\n */\n\nexport function fromQuat(out, q) {\n  var x = q[0],\n      y = q[1],\n      z = q[2],\n      w = q[3];\n  var x2 = x + x;\n  var y2 = y + y;\n  var z2 = z + z;\n  var xx = x * x2;\n  var yx = y * x2;\n  var yy = y * y2;\n  var zx = z * x2;\n  var zy = z * y2;\n  var zz = z * z2;\n  var wx = w * x2;\n  var wy = w * y2;\n  var wz = w * z2;\n  out[0] = 1 - yy - zz;\n  out[1] = yx + wz;\n  out[2] = zx - wy;\n  out[3] = 0;\n  out[4] = yx - wz;\n  out[5] = 1 - xx - zz;\n  out[6] = zy + wx;\n  out[7] = 0;\n  out[8] = zx + wy;\n  out[9] = zy - wx;\n  out[10] = 1 - xx - yy;\n  out[11] = 0;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = 0;\n  out[15] = 1;\n  return out;\n}\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function frustum(out, left, right, bottom, top, near, far) {\n  var rl = 1 / (right - left);\n  var tb = 1 / (top - bottom);\n  var nf = 1 / (near - far);\n  out[0] = near * 2 * rl;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = near * 2 * tb;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = (right + left) * rl;\n  out[9] = (top + bottom) * tb;\n  out[10] = (far + near) * nf;\n  out[11] = -1;\n  out[12] = 0;\n  out[13] = 0;\n  out[14] = far * near * 2 * nf;\n  out[15] = 0;\n  return out;\n}\n/**\n * Generates a perspective projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\n\nexport function perspectiveNO(out, fovy, aspect, near, far) {\n  var f = 1.0 / Math.tan(fovy / 2),\n      nf;\n  out[0] = f / aspect;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = f;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[11] = -1;\n  out[12] = 0;\n  out[13] = 0;\n  out[15] = 0;\n\n  if (far != null && far !== Infinity) {\n    nf = 1 / (near - far);\n    out[10] = (far + near) * nf;\n    out[14] = 2 * far * near * nf;\n  } else {\n    out[10] = -1;\n    out[14] = -2 * near;\n  }\n\n  return out;\n}\n/**\n * Alias for {@link mat4.perspectiveNO}\n * @function\n */\n\nexport var perspective = perspectiveNO;\n/**\n * Generates a perspective projection matrix suitable for WebGPU with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n * Passing null/undefined/no value for far will generate infinite projection matrix.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum, can be null or Infinity\n * @returns {mat4} out\n */\n\nexport function perspectiveZO(out, fovy, aspect, near, far) {\n  var f = 1.0 / Math.tan(fovy / 2),\n      nf;\n  out[0] = f / aspect;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = f;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[11] = -1;\n  out[12] = 0;\n  out[13] = 0;\n  out[15] = 0;\n\n  if (far != null && far !== Infinity) {\n    nf = 1 / (near - far);\n    out[10] = far * nf;\n    out[14] = far * near * nf;\n  } else {\n    out[10] = -1;\n    out[14] = -near;\n  }\n\n  return out;\n}\n/**\n * Generates a perspective projection matrix with the given field of view.\n * This is primarily useful for generating projection matrices to be used\n * with the still experiemental WebVR API.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Object} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function perspectiveFromFieldOfView(out, fov, near, far) {\n  var upTan = Math.tan(fov.upDegrees * Math.PI / 180.0);\n  var downTan = Math.tan(fov.downDegrees * Math.PI / 180.0);\n  var leftTan = Math.tan(fov.leftDegrees * Math.PI / 180.0);\n  var rightTan = Math.tan(fov.rightDegrees * Math.PI / 180.0);\n  var xScale = 2.0 / (leftTan + rightTan);\n  var yScale = 2.0 / (upTan + downTan);\n  out[0] = xScale;\n  out[1] = 0.0;\n  out[2] = 0.0;\n  out[3] = 0.0;\n  out[4] = 0.0;\n  out[5] = yScale;\n  out[6] = 0.0;\n  out[7] = 0.0;\n  out[8] = -((leftTan - rightTan) * xScale * 0.5);\n  out[9] = (upTan - downTan) * yScale * 0.5;\n  out[10] = far / (near - far);\n  out[11] = -1.0;\n  out[12] = 0.0;\n  out[13] = 0.0;\n  out[14] = far * near / (near - far);\n  out[15] = 0.0;\n  return out;\n}\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],\n * which matches WebGL/OpenGL's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function orthoNO(out, left, right, bottom, top, near, far) {\n  var lr = 1 / (left - right);\n  var bt = 1 / (bottom - top);\n  var nf = 1 / (near - far);\n  out[0] = -2 * lr;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = -2 * bt;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = 2 * nf;\n  out[11] = 0;\n  out[12] = (left + right) * lr;\n  out[13] = (top + bottom) * bt;\n  out[14] = (far + near) * nf;\n  out[15] = 1;\n  return out;\n}\n/**\n * Alias for {@link mat4.orthoNO}\n * @function\n */\n\nexport var ortho = orthoNO;\n/**\n * Generates a orthogonal projection matrix with the given bounds.\n * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],\n * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\n\nexport function orthoZO(out, left, right, bottom, top, near, far) {\n  var lr = 1 / (left - right);\n  var bt = 1 / (bottom - top);\n  var nf = 1 / (near - far);\n  out[0] = -2 * lr;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 0;\n  out[5] = -2 * bt;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 0;\n  out[9] = 0;\n  out[10] = nf;\n  out[11] = 0;\n  out[12] = (left + right) * lr;\n  out[13] = (top + bottom) * bt;\n  out[14] = near * nf;\n  out[15] = 1;\n  return out;\n}\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis.\n * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\n\nexport function lookAt(out, eye, center, up) {\n  var x0, x1, x2, y0, y1, y2, z0, z1, z2, len;\n  var eyex = eye[0];\n  var eyey = eye[1];\n  var eyez = eye[2];\n  var upx = up[0];\n  var upy = up[1];\n  var upz = up[2];\n  var centerx = center[0];\n  var centery = center[1];\n  var centerz = center[2];\n\n  if (Math.abs(eyex - centerx) < glMatrix.EPSILON && Math.abs(eyey - centery) < glMatrix.EPSILON && Math.abs(eyez - centerz) < glMatrix.EPSILON) {\n    return identity(out);\n  }\n\n  z0 = eyex - centerx;\n  z1 = eyey - centery;\n  z2 = eyez - centerz;\n  len = 1 / Math.hypot(z0, z1, z2);\n  z0 *= len;\n  z1 *= len;\n  z2 *= len;\n  x0 = upy * z2 - upz * z1;\n  x1 = upz * z0 - upx * z2;\n  x2 = upx * z1 - upy * z0;\n  len = Math.hypot(x0, x1, x2);\n\n  if (!len) {\n    x0 = 0;\n    x1 = 0;\n    x2 = 0;\n  } else {\n    len = 1 / len;\n    x0 *= len;\n    x1 *= len;\n    x2 *= len;\n  }\n\n  y0 = z1 * x2 - z2 * x1;\n  y1 = z2 * x0 - z0 * x2;\n  y2 = z0 * x1 - z1 * x0;\n  len = Math.hypot(y0, y1, y2);\n\n  if (!len) {\n    y0 = 0;\n    y1 = 0;\n    y2 = 0;\n  } else {\n    len = 1 / len;\n    y0 *= len;\n    y1 *= len;\n    y2 *= len;\n  }\n\n  out[0] = x0;\n  out[1] = y0;\n  out[2] = z0;\n  out[3] = 0;\n  out[4] = x1;\n  out[5] = y1;\n  out[6] = z1;\n  out[7] = 0;\n  out[8] = x2;\n  out[9] = y2;\n  out[10] = z2;\n  out[11] = 0;\n  out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n  out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n  out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n  out[15] = 1;\n  return out;\n}\n/**\n * Generates a matrix that makes something look at something else.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {ReadonlyVec3} eye Position of the viewer\n * @param {ReadonlyVec3} center Point the viewer is looking at\n * @param {ReadonlyVec3} up vec3 pointing up\n * @returns {mat4} out\n */\n\nexport function targetTo(out, eye, target, up) {\n  var eyex = eye[0],\n      eyey = eye[1],\n      eyez = eye[2],\n      upx = up[0],\n      upy = up[1],\n      upz = up[2];\n  var z0 = eyex - target[0],\n      z1 = eyey - target[1],\n      z2 = eyez - target[2];\n  var len = z0 * z0 + z1 * z1 + z2 * z2;\n\n  if (len > 0) {\n    len = 1 / Math.sqrt(len);\n    z0 *= len;\n    z1 *= len;\n    z2 *= len;\n  }\n\n  var x0 = upy * z2 - upz * z1,\n      x1 = upz * z0 - upx * z2,\n      x2 = upx * z1 - upy * z0;\n  len = x0 * x0 + x1 * x1 + x2 * x2;\n\n  if (len > 0) {\n    len = 1 / Math.sqrt(len);\n    x0 *= len;\n    x1 *= len;\n    x2 *= len;\n  }\n\n  out[0] = x0;\n  out[1] = x1;\n  out[2] = x2;\n  out[3] = 0;\n  out[4] = z1 * x2 - z2 * x1;\n  out[5] = z2 * x0 - z0 * x2;\n  out[6] = z0 * x1 - z1 * x0;\n  out[7] = 0;\n  out[8] = z0;\n  out[9] = z1;\n  out[10] = z2;\n  out[11] = 0;\n  out[12] = eyex;\n  out[13] = eyey;\n  out[14] = eyez;\n  out[15] = 1;\n  return out;\n}\n/**\n * Returns a string representation of a mat4\n *\n * @param {ReadonlyMat4} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n  return \"mat4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \", \" + a[9] + \", \" + a[10] + \", \" + a[11] + \", \" + a[12] + \", \" + a[13] + \", \" + a[14] + \", \" + a[15] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat4\n *\n * @param {ReadonlyMat4} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n  return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]);\n}\n/**\n * Adds two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function add(out, a, b) {\n  out[0] = a[0] + b[0];\n  out[1] = a[1] + b[1];\n  out[2] = a[2] + b[2];\n  out[3] = a[3] + b[3];\n  out[4] = a[4] + b[4];\n  out[5] = a[5] + b[5];\n  out[6] = a[6] + b[6];\n  out[7] = a[7] + b[7];\n  out[8] = a[8] + b[8];\n  out[9] = a[9] + b[9];\n  out[10] = a[10] + b[10];\n  out[11] = a[11] + b[11];\n  out[12] = a[12] + b[12];\n  out[13] = a[13] + b[13];\n  out[14] = a[14] + b[14];\n  out[15] = a[15] + b[15];\n  return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nexport function subtract(out, a, b) {\n  out[0] = a[0] - b[0];\n  out[1] = a[1] - b[1];\n  out[2] = a[2] - b[2];\n  out[3] = a[3] - b[3];\n  out[4] = a[4] - b[4];\n  out[5] = a[5] - b[5];\n  out[6] = a[6] - b[6];\n  out[7] = a[7] - b[7];\n  out[8] = a[8] - b[8];\n  out[9] = a[9] - b[9];\n  out[10] = a[10] - b[10];\n  out[11] = a[11] - b[11];\n  out[12] = a[12] - b[12];\n  out[13] = a[13] - b[13];\n  out[14] = a[14] - b[14];\n  out[15] = a[15] - b[15];\n  return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat4} out\n */\n\nexport function multiplyScalar(out, a, b) {\n  out[0] = a[0] * b;\n  out[1] = a[1] * b;\n  out[2] = a[2] * b;\n  out[3] = a[3] * b;\n  out[4] = a[4] * b;\n  out[5] = a[5] * b;\n  out[6] = a[6] * b;\n  out[7] = a[7] * b;\n  out[8] = a[8] * b;\n  out[9] = a[9] * b;\n  out[10] = a[10] * b;\n  out[11] = a[11] * b;\n  out[12] = a[12] * b;\n  out[13] = a[13] * b;\n  out[14] = a[14] * b;\n  out[15] = a[15] * b;\n  return out;\n}\n/**\n * Adds two mat4's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat4} out the receiving vector\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat4} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n  out[0] = a[0] + b[0] * scale;\n  out[1] = a[1] + b[1] * scale;\n  out[2] = a[2] + b[2] * scale;\n  out[3] = a[3] + b[3] * scale;\n  out[4] = a[4] + b[4] * scale;\n  out[5] = a[5] + b[5] * scale;\n  out[6] = a[6] + b[6] * scale;\n  out[7] = a[7] + b[7] * scale;\n  out[8] = a[8] + b[8] * scale;\n  out[9] = a[9] + b[9] * scale;\n  out[10] = a[10] + b[10] * scale;\n  out[11] = a[11] + b[11] * scale;\n  out[12] = a[12] + b[12] * scale;\n  out[13] = a[13] + b[13] * scale;\n  out[14] = a[14] + b[14] * scale;\n  out[15] = a[15] + b[15] * scale;\n  return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] && a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat4} a The first matrix.\n * @param {ReadonlyMat4} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n  var a0 = a[0],\n      a1 = a[1],\n      a2 = a[2],\n      a3 = a[3];\n  var a4 = a[4],\n      a5 = a[5],\n      a6 = a[6],\n      a7 = a[7];\n  var a8 = a[8],\n      a9 = a[9],\n      a10 = a[10],\n      a11 = a[11];\n  var a12 = a[12],\n      a13 = a[13],\n      a14 = a[14],\n      a15 = a[15];\n  var b0 = b[0],\n      b1 = b[1],\n      b2 = b[2],\n      b3 = b[3];\n  var b4 = b[4],\n      b5 = b[5],\n      b6 = b[6],\n      b7 = b[7];\n  var b8 = b[8],\n      b9 = b[9],\n      b10 = b[10],\n      b11 = b[11];\n  var b12 = b[12],\n      b13 = b[13],\n      b14 = b[14],\n      b15 = b[15];\n  return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8)) && Math.abs(a9 - b9) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a9), Math.abs(b9)) && Math.abs(a10 - b10) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a10), Math.abs(b10)) && Math.abs(a11 - b11) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a11), Math.abs(b11)) && Math.abs(a12 - b12) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a12), Math.abs(b12)) && Math.abs(a13 - b13) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a13), Math.abs(b13)) && Math.abs(a14 - b14) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a14), Math.abs(b14)) && Math.abs(a15 - b15) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a15), Math.abs(b15));\n}\n/**\n * Alias for {@link mat4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat4.subtract}\n * @function\n */\n\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\n/**\n * 3x3 Matrix\n * @module mat3\n */\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function create() {\n  var out = new glMatrix.ARRAY_TYPE(9);\n\n  if (glMatrix.ARRAY_TYPE != Float32Array) {\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[5] = 0;\n    out[6] = 0;\n    out[7] = 0;\n  }\n\n  out[0] = 1;\n  out[4] = 1;\n  out[8] = 1;\n  return out;\n}\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {ReadonlyMat4} a   the source 4x4 matrix\n * @returns {mat3} out\n */\n\nexport function fromMat4(out, a) {\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  out[3] = a[4];\n  out[4] = a[5];\n  out[5] = a[6];\n  out[6] = a[8];\n  out[7] = a[9];\n  out[8] = a[10];\n  return out;\n}\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function clone(a) {\n  var out = new glMatrix.ARRAY_TYPE(9);\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  out[3] = a[3];\n  out[4] = a[4];\n  out[5] = a[5];\n  out[6] = a[6];\n  out[7] = a[7];\n  out[8] = a[8];\n  return out;\n}\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function copy(out, a) {\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  out[3] = a[3];\n  out[4] = a[4];\n  out[5] = a[5];\n  out[6] = a[6];\n  out[7] = a[7];\n  out[8] = a[8];\n  return out;\n}\n/**\n * Create a new mat3 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} A new mat3\n */\n\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n  var out = new glMatrix.ARRAY_TYPE(9);\n  out[0] = m00;\n  out[1] = m01;\n  out[2] = m02;\n  out[3] = m10;\n  out[4] = m11;\n  out[5] = m12;\n  out[6] = m20;\n  out[7] = m21;\n  out[8] = m22;\n  return out;\n}\n/**\n * Set the components of a mat3 to the given values\n *\n * @param {mat3} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} out\n */\n\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n  out[0] = m00;\n  out[1] = m01;\n  out[2] = m02;\n  out[3] = m10;\n  out[4] = m11;\n  out[5] = m12;\n  out[6] = m20;\n  out[7] = m21;\n  out[8] = m22;\n  return out;\n}\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\n\nexport function identity(out) {\n  out[0] = 1;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 1;\n  out[5] = 0;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 1;\n  return out;\n}\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function transpose(out, a) {\n  // If we are transposing ourselves we can skip a few steps but have to cache some values\n  if (out === a) {\n    var a01 = a[1],\n        a02 = a[2],\n        a12 = a[5];\n    out[1] = a[3];\n    out[2] = a[6];\n    out[3] = a01;\n    out[5] = a[7];\n    out[6] = a02;\n    out[7] = a12;\n  } else {\n    out[0] = a[0];\n    out[1] = a[3];\n    out[2] = a[6];\n    out[3] = a[1];\n    out[4] = a[4];\n    out[5] = a[7];\n    out[6] = a[2];\n    out[7] = a[5];\n    out[8] = a[8];\n  }\n\n  return out;\n}\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function invert(out, a) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2];\n  var a10 = a[3],\n      a11 = a[4],\n      a12 = a[5];\n  var a20 = a[6],\n      a21 = a[7],\n      a22 = a[8];\n  var b01 = a22 * a11 - a12 * a21;\n  var b11 = -a22 * a10 + a12 * a20;\n  var b21 = a21 * a10 - a11 * a20; // Calculate the determinant\n\n  var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n  if (!det) {\n    return null;\n  }\n\n  det = 1.0 / det;\n  out[0] = b01 * det;\n  out[1] = (-a22 * a01 + a02 * a21) * det;\n  out[2] = (a12 * a01 - a02 * a11) * det;\n  out[3] = b11 * det;\n  out[4] = (a22 * a00 - a02 * a20) * det;\n  out[5] = (-a12 * a00 + a02 * a10) * det;\n  out[6] = b21 * det;\n  out[7] = (-a21 * a00 + a01 * a20) * det;\n  out[8] = (a11 * a00 - a01 * a10) * det;\n  return out;\n}\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function adjoint(out, a) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2];\n  var a10 = a[3],\n      a11 = a[4],\n      a12 = a[5];\n  var a20 = a[6],\n      a21 = a[7],\n      a22 = a[8];\n  out[0] = a11 * a22 - a12 * a21;\n  out[1] = a02 * a21 - a01 * a22;\n  out[2] = a01 * a12 - a02 * a11;\n  out[3] = a12 * a20 - a10 * a22;\n  out[4] = a00 * a22 - a02 * a20;\n  out[5] = a02 * a10 - a00 * a12;\n  out[6] = a10 * a21 - a11 * a20;\n  out[7] = a01 * a20 - a00 * a21;\n  out[8] = a00 * a11 - a01 * a10;\n  return out;\n}\n/**\n * Calculates the determinant of a mat3\n *\n * @param {ReadonlyMat3} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2];\n  var a10 = a[3],\n      a11 = a[4],\n      a12 = a[5];\n  var a20 = a[6],\n      a21 = a[7],\n      a22 = a[8];\n  return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n}\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function multiply(out, a, b) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2];\n  var a10 = a[3],\n      a11 = a[4],\n      a12 = a[5];\n  var a20 = a[6],\n      a21 = a[7],\n      a22 = a[8];\n  var b00 = b[0],\n      b01 = b[1],\n      b02 = b[2];\n  var b10 = b[3],\n      b11 = b[4],\n      b12 = b[5];\n  var b20 = b[6],\n      b21 = b[7],\n      b22 = b[8];\n  out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n  out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n  out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n  out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n  out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n  out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n  out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n  out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n  out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n  return out;\n}\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to translate\n * @param {ReadonlyVec2} v vector to translate by\n * @returns {mat3} out\n */\n\nexport function translate(out, a, v) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2],\n      a10 = a[3],\n      a11 = a[4],\n      a12 = a[5],\n      a20 = a[6],\n      a21 = a[7],\n      a22 = a[8],\n      x = v[0],\n      y = v[1];\n  out[0] = a00;\n  out[1] = a01;\n  out[2] = a02;\n  out[3] = a10;\n  out[4] = a11;\n  out[5] = a12;\n  out[6] = x * a00 + y * a10 + a20;\n  out[7] = x * a01 + y * a11 + a21;\n  out[8] = x * a02 + y * a12 + a22;\n  return out;\n}\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function rotate(out, a, rad) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2],\n      a10 = a[3],\n      a11 = a[4],\n      a12 = a[5],\n      a20 = a[6],\n      a21 = a[7],\n      a22 = a[8],\n      s = Math.sin(rad),\n      c = Math.cos(rad);\n  out[0] = c * a00 + s * a10;\n  out[1] = c * a01 + s * a11;\n  out[2] = c * a02 + s * a12;\n  out[3] = c * a10 - s * a00;\n  out[4] = c * a11 - s * a01;\n  out[5] = c * a12 - s * a02;\n  out[6] = a20;\n  out[7] = a21;\n  out[8] = a22;\n  return out;\n}\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\n\nexport function scale(out, a, v) {\n  var x = v[0],\n      y = v[1];\n  out[0] = x * a[0];\n  out[1] = x * a[1];\n  out[2] = x * a[2];\n  out[3] = y * a[3];\n  out[4] = y * a[4];\n  out[5] = y * a[5];\n  out[6] = a[6];\n  out[7] = a[7];\n  out[8] = a[8];\n  return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n *     mat3.identity(dest);\n *     mat3.translate(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Translation vector\n * @returns {mat3} out\n */\n\nexport function fromTranslation(out, v) {\n  out[0] = 1;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = 1;\n  out[5] = 0;\n  out[6] = v[0];\n  out[7] = v[1];\n  out[8] = 1;\n  return out;\n}\n/**\n * Creates a matrix from a given angle\n * This is equivalent to (but much faster than):\n *\n *     mat3.identity(dest);\n *     mat3.rotate(dest, dest, rad);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function fromRotation(out, rad) {\n  var s = Math.sin(rad),\n      c = Math.cos(rad);\n  out[0] = c;\n  out[1] = s;\n  out[2] = 0;\n  out[3] = -s;\n  out[4] = c;\n  out[5] = 0;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 1;\n  return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n *     mat3.identity(dest);\n *     mat3.scale(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Scaling vector\n * @returns {mat3} out\n */\n\nexport function fromScaling(out, v) {\n  out[0] = v[0];\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = v[1];\n  out[5] = 0;\n  out[6] = 0;\n  out[7] = 0;\n  out[8] = 1;\n  return out;\n}\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat2d} a the matrix to copy\n * @returns {mat3} out\n **/\n\nexport function fromMat2d(out, a) {\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = 0;\n  out[3] = a[2];\n  out[4] = a[3];\n  out[5] = 0;\n  out[6] = a[4];\n  out[7] = a[5];\n  out[8] = 1;\n  return out;\n}\n/**\n * Calculates a 3x3 matrix from the given quaternion\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat3} out\n */\n\nexport function fromQuat(out, q) {\n  var x = q[0],\n      y = q[1],\n      z = q[2],\n      w = q[3];\n  var x2 = x + x;\n  var y2 = y + y;\n  var z2 = z + z;\n  var xx = x * x2;\n  var yx = y * x2;\n  var yy = y * y2;\n  var zx = z * x2;\n  var zy = z * y2;\n  var zz = z * z2;\n  var wx = w * x2;\n  var wy = w * y2;\n  var wz = w * z2;\n  out[0] = 1 - yy - zz;\n  out[3] = yx - wz;\n  out[6] = zx + wy;\n  out[1] = yx + wz;\n  out[4] = 1 - xx - zz;\n  out[7] = zy - wx;\n  out[2] = zx - wy;\n  out[5] = zy + wx;\n  out[8] = 1 - xx - yy;\n  return out;\n}\n/**\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\n *\n * @returns {mat3} out\n */\n\nexport function normalFromMat4(out, a) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2],\n      a03 = a[3];\n  var a10 = a[4],\n      a11 = a[5],\n      a12 = a[6],\n      a13 = a[7];\n  var a20 = a[8],\n      a21 = a[9],\n      a22 = a[10],\n      a23 = a[11];\n  var a30 = a[12],\n      a31 = a[13],\n      a32 = a[14],\n      a33 = a[15];\n  var b00 = a00 * a11 - a01 * a10;\n  var b01 = a00 * a12 - a02 * a10;\n  var b02 = a00 * a13 - a03 * a10;\n  var b03 = a01 * a12 - a02 * a11;\n  var b04 = a01 * a13 - a03 * a11;\n  var b05 = a02 * a13 - a03 * a12;\n  var b06 = a20 * a31 - a21 * a30;\n  var b07 = a20 * a32 - a22 * a30;\n  var b08 = a20 * a33 - a23 * a30;\n  var b09 = a21 * a32 - a22 * a31;\n  var b10 = a21 * a33 - a23 * a31;\n  var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n  var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n  if (!det) {\n    return null;\n  }\n\n  det = 1.0 / det;\n  out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n  out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n  out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n  out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n  out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n  out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n  out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n  out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n  out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n  return out;\n}\n/**\n * Generates a 2D projection matrix with the given bounds\n *\n * @param {mat3} out mat3 frustum matrix will be written into\n * @param {number} width Width of your gl context\n * @param {number} height Height of gl context\n * @returns {mat3} out\n */\n\nexport function projection(out, width, height) {\n  out[0] = 2 / width;\n  out[1] = 0;\n  out[2] = 0;\n  out[3] = 0;\n  out[4] = -2 / height;\n  out[5] = 0;\n  out[6] = -1;\n  out[7] = 1;\n  out[8] = 1;\n  return out;\n}\n/**\n * Returns a string representation of a mat3\n *\n * @param {ReadonlyMat3} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n  return \"mat3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n  return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);\n}\n/**\n * Adds two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function add(out, a, b) {\n  out[0] = a[0] + b[0];\n  out[1] = a[1] + b[1];\n  out[2] = a[2] + b[2];\n  out[3] = a[3] + b[3];\n  out[4] = a[4] + b[4];\n  out[5] = a[5] + b[5];\n  out[6] = a[6] + b[6];\n  out[7] = a[7] + b[7];\n  out[8] = a[8] + b[8];\n  return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function subtract(out, a, b) {\n  out[0] = a[0] - b[0];\n  out[1] = a[1] - b[1];\n  out[2] = a[2] - b[2];\n  out[3] = a[3] - b[3];\n  out[4] = a[4] - b[4];\n  out[5] = a[5] - b[5];\n  out[6] = a[6] - b[6];\n  out[7] = a[7] - b[7];\n  out[8] = a[8] - b[8];\n  return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat3} out\n */\n\nexport function multiplyScalar(out, a, b) {\n  out[0] = a[0] * b;\n  out[1] = a[1] * b;\n  out[2] = a[2] * b;\n  out[3] = a[3] * b;\n  out[4] = a[4] * b;\n  out[5] = a[5] * b;\n  out[6] = a[6] * b;\n  out[7] = a[7] * b;\n  out[8] = a[8] * b;\n  return out;\n}\n/**\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat3} out the receiving vector\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat3} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n  out[0] = a[0] + b[0] * scale;\n  out[1] = a[1] + b[1] * scale;\n  out[2] = a[2] + b[2] * scale;\n  out[3] = a[3] + b[3] * scale;\n  out[4] = a[4] + b[4] * scale;\n  out[5] = a[5] + b[5] * scale;\n  out[6] = a[6] + b[6] * scale;\n  out[7] = a[7] + b[7] * scale;\n  out[8] = a[8] + b[8] * scale;\n  return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n  var a0 = a[0],\n      a1 = a[1],\n      a2 = a[2],\n      a3 = a[3],\n      a4 = a[4],\n      a5 = a[5],\n      a6 = a[6],\n      a7 = a[7],\n      a8 = a[8];\n  var b0 = b[0],\n      b1 = b[1],\n      b2 = b[2],\n      b3 = b[3],\n      b4 = b[4],\n      b5 = b[5],\n      b6 = b[6],\n      b7 = b[7],\n      b8 = b[8];\n  return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\n}\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat3.subtract}\n * @function\n */\n\nexport var sub = subtract;","import * as glMatrix from \"./common.js\";\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\n\nexport function create() {\n  var out = new glMatrix.ARRAY_TYPE(3);\n\n  if (glMatrix.ARRAY_TYPE != Float32Array) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n  }\n\n  return out;\n}\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {ReadonlyVec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\n\nexport function clone(a) {\n  var out = new glMatrix.ARRAY_TYPE(3);\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  return out;\n}\n/**\n * Calculates the length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n  var x = a[0];\n  var y = a[1];\n  var z = a[2];\n  return Math.hypot(x, y, z);\n}\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\n\nexport function fromValues(x, y, z) {\n  var out = new glMatrix.ARRAY_TYPE(3);\n  out[0] = x;\n  out[1] = y;\n  out[2] = z;\n  return out;\n}\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the source vector\n * @returns {vec3} out\n */\n\nexport function copy(out, a) {\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  return out;\n}\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\n\nexport function set(out, x, y, z) {\n  out[0] = x;\n  out[1] = y;\n  out[2] = z;\n  return out;\n}\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function add(out, a, b) {\n  out[0] = a[0] + b[0];\n  out[1] = a[1] + b[1];\n  out[2] = a[2] + b[2];\n  return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function subtract(out, a, b) {\n  out[0] = a[0] - b[0];\n  out[1] = a[1] - b[1];\n  out[2] = a[2] - b[2];\n  return out;\n}\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function multiply(out, a, b) {\n  out[0] = a[0] * b[0];\n  out[1] = a[1] * b[1];\n  out[2] = a[2] * b[2];\n  return out;\n}\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function divide(out, a, b) {\n  out[0] = a[0] / b[0];\n  out[1] = a[1] / b[1];\n  out[2] = a[2] / b[2];\n  return out;\n}\n/**\n * Math.ceil the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to ceil\n * @returns {vec3} out\n */\n\nexport function ceil(out, a) {\n  out[0] = Math.ceil(a[0]);\n  out[1] = Math.ceil(a[1]);\n  out[2] = Math.ceil(a[2]);\n  return out;\n}\n/**\n * Math.floor the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to floor\n * @returns {vec3} out\n */\n\nexport function floor(out, a) {\n  out[0] = Math.floor(a[0]);\n  out[1] = Math.floor(a[1]);\n  out[2] = Math.floor(a[2]);\n  return out;\n}\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function min(out, a, b) {\n  out[0] = Math.min(a[0], b[0]);\n  out[1] = Math.min(a[1], b[1]);\n  out[2] = Math.min(a[2], b[2]);\n  return out;\n}\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function max(out, a, b) {\n  out[0] = Math.max(a[0], b[0]);\n  out[1] = Math.max(a[1], b[1]);\n  out[2] = Math.max(a[2], b[2]);\n  return out;\n}\n/**\n * Math.round the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to round\n * @returns {vec3} out\n */\n\nexport function round(out, a) {\n  out[0] = Math.round(a[0]);\n  out[1] = Math.round(a[1]);\n  out[2] = Math.round(a[2]);\n  return out;\n}\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\n\nexport function scale(out, a, b) {\n  out[0] = a[0] * b;\n  out[1] = a[1] * b;\n  out[2] = a[2] * b;\n  return out;\n}\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n  out[0] = a[0] + b[0] * scale;\n  out[1] = a[1] + b[1] * scale;\n  out[2] = a[2] + b[2] * scale;\n  return out;\n}\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n  var x = b[0] - a[0];\n  var y = b[1] - a[1];\n  var z = b[2] - a[2];\n  return Math.hypot(x, y, z);\n}\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n  var x = b[0] - a[0];\n  var y = b[1] - a[1];\n  var z = b[2] - a[2];\n  return x * x + y * y + z * z;\n}\n/**\n * Calculates the squared length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n  var x = a[0];\n  var y = a[1];\n  var z = a[2];\n  return x * x + y * y + z * z;\n}\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to negate\n * @returns {vec3} out\n */\n\nexport function negate(out, a) {\n  out[0] = -a[0];\n  out[1] = -a[1];\n  out[2] = -a[2];\n  return out;\n}\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to invert\n * @returns {vec3} out\n */\n\nexport function inverse(out, a) {\n  out[0] = 1.0 / a[0];\n  out[1] = 1.0 / a[1];\n  out[2] = 1.0 / a[2];\n  return out;\n}\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a vector to normalize\n * @returns {vec3} out\n */\n\nexport function normalize(out, a) {\n  var x = a[0];\n  var y = a[1];\n  var z = a[2];\n  var len = x * x + y * y + z * z;\n\n  if (len > 0) {\n    //TODO: evaluate use of glm_invsqrt here?\n    len = 1 / Math.sqrt(len);\n  }\n\n  out[0] = a[0] * len;\n  out[1] = a[1] * len;\n  out[2] = a[2] * len;\n  return out;\n}\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @returns {vec3} out\n */\n\nexport function cross(out, a, b) {\n  var ax = a[0],\n      ay = a[1],\n      az = a[2];\n  var bx = b[0],\n      by = b[1],\n      bz = b[2];\n  out[0] = ay * bz - az * by;\n  out[1] = az * bx - ax * bz;\n  out[2] = ax * by - ay * bx;\n  return out;\n}\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function lerp(out, a, b, t) {\n  var ax = a[0];\n  var ay = a[1];\n  var az = a[2];\n  out[0] = ax + t * (b[0] - ax);\n  out[1] = ay + t * (b[1] - ay);\n  out[2] = az + t * (b[2] - az);\n  return out;\n}\n/**\n * Performs a hermite interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function hermite(out, a, b, c, d, t) {\n  var factorTimes2 = t * t;\n  var factor1 = factorTimes2 * (2 * t - 3) + 1;\n  var factor2 = factorTimes2 * (t - 2) + t;\n  var factor3 = factorTimes2 * (t - 1);\n  var factor4 = factorTimes2 * (3 - 2 * t);\n  out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n  out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n  out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n  return out;\n}\n/**\n * Performs a bezier interpolation with two control points\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the first operand\n * @param {ReadonlyVec3} b the second operand\n * @param {ReadonlyVec3} c the third operand\n * @param {ReadonlyVec3} d the fourth operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec3} out\n */\n\nexport function bezier(out, a, b, c, d, t) {\n  var inverseFactor = 1 - t;\n  var inverseFactorTimesTwo = inverseFactor * inverseFactor;\n  var factorTimes2 = t * t;\n  var factor1 = inverseFactorTimesTwo * inverseFactor;\n  var factor2 = 3 * t * inverseFactorTimesTwo;\n  var factor3 = 3 * factorTimes2 * inverseFactor;\n  var factor4 = factorTimes2 * t;\n  out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;\n  out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;\n  out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;\n  return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec3} out\n */\n\nexport function random(out, scale) {\n  scale = scale || 1.0;\n  var r = glMatrix.RANDOM() * 2.0 * Math.PI;\n  var z = glMatrix.RANDOM() * 2.0 - 1.0;\n  var zScale = Math.sqrt(1.0 - z * z) * scale;\n  out[0] = Math.cos(r) * zScale;\n  out[1] = Math.sin(r) * zScale;\n  out[2] = z * scale;\n  return out;\n}\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat4(out, a, m) {\n  var x = a[0],\n      y = a[1],\n      z = a[2];\n  var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n  w = w || 1.0;\n  out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n  out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n  out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n  return out;\n}\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat3} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\n\nexport function transformMat3(out, a, m) {\n  var x = a[0],\n      y = a[1],\n      z = a[2];\n  out[0] = x * m[0] + y * m[3] + z * m[6];\n  out[1] = x * m[1] + y * m[4] + z * m[7];\n  out[2] = x * m[2] + y * m[5] + z * m[8];\n  return out;\n}\n/**\n * Transforms the vec3 with a quat\n * Can also be used for dual quaternions. (Multiply it with the real part)\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec3} out\n */\n\nexport function transformQuat(out, a, q) {\n  // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed\n  var qx = q[0],\n      qy = q[1],\n      qz = q[2],\n      qw = q[3];\n  var x = a[0],\n      y = a[1],\n      z = a[2]; // var qvec = [qx, qy, qz];\n  // var uv = vec3.cross([], qvec, a);\n\n  var uvx = qy * z - qz * y,\n      uvy = qz * x - qx * z,\n      uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);\n\n  var uuvx = qy * uvz - qz * uvy,\n      uuvy = qz * uvx - qx * uvz,\n      uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);\n\n  var w2 = qw * 2;\n  uvx *= w2;\n  uvy *= w2;\n  uvz *= w2; // vec3.scale(uuv, uuv, 2);\n\n  uuvx *= 2;\n  uuvy *= 2;\n  uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));\n\n  out[0] = x + uvx + uuvx;\n  out[1] = y + uvy + uuvy;\n  out[2] = z + uvz + uuvz;\n  return out;\n}\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateX(out, a, b, rad) {\n  var p = [],\n      r = []; //Translate point to the origin\n\n  p[0] = a[0] - b[0];\n  p[1] = a[1] - b[1];\n  p[2] = a[2] - b[2]; //perform rotation\n\n  r[0] = p[0];\n  r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);\n  r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position\n\n  out[0] = r[0] + b[0];\n  out[1] = r[1] + b[1];\n  out[2] = r[2] + b[2];\n  return out;\n}\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateY(out, a, b, rad) {\n  var p = [],\n      r = []; //Translate point to the origin\n\n  p[0] = a[0] - b[0];\n  p[1] = a[1] - b[1];\n  p[2] = a[2] - b[2]; //perform rotation\n\n  r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);\n  r[1] = p[1];\n  r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position\n\n  out[0] = r[0] + b[0];\n  out[1] = r[1] + b[1];\n  out[2] = r[2] + b[2];\n  return out;\n}\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {ReadonlyVec3} a The vec3 point to rotate\n * @param {ReadonlyVec3} b The origin of the rotation\n * @param {Number} rad The angle of rotation in radians\n * @returns {vec3} out\n */\n\nexport function rotateZ(out, a, b, rad) {\n  var p = [],\n      r = []; //Translate point to the origin\n\n  p[0] = a[0] - b[0];\n  p[1] = a[1] - b[1];\n  p[2] = a[2] - b[2]; //perform rotation\n\n  r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);\n  r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);\n  r[2] = p[2]; //translate to correct position\n\n  out[0] = r[0] + b[0];\n  out[1] = r[1] + b[1];\n  out[2] = r[2] + b[2];\n  return out;\n}\n/**\n * Get the angle between two 3D vectors\n * @param {ReadonlyVec3} a The first operand\n * @param {ReadonlyVec3} b The second operand\n * @returns {Number} The angle in radians\n */\n\nexport function angle(a, b) {\n  var ax = a[0],\n      ay = a[1],\n      az = a[2],\n      bx = b[0],\n      by = b[1],\n      bz = b[2],\n      mag1 = Math.sqrt(ax * ax + ay * ay + az * az),\n      mag2 = Math.sqrt(bx * bx + by * by + bz * bz),\n      mag = mag1 * mag2,\n      cosine = mag && dot(a, b) / mag;\n  return Math.acos(Math.min(Math.max(cosine, -1), 1));\n}\n/**\n * Set the components of a vec3 to zero\n *\n * @param {vec3} out the receiving vector\n * @returns {vec3} out\n */\n\nexport function zero(out) {\n  out[0] = 0.0;\n  out[1] = 0.0;\n  out[2] = 0.0;\n  return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec3} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n  return \"vec3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \")\";\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec3} a The first vector.\n * @param {ReadonlyVec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n  var a0 = a[0],\n      a1 = a[1],\n      a2 = a[2];\n  var b0 = b[0],\n      b1 = b[1],\n      b2 = b[2];\n  return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2));\n}\n/**\n * Alias for {@link vec3.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec3.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec3.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec3.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec3.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec3.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n  var vec = create();\n  return function (a, stride, offset, count, fn, arg) {\n    var i, l;\n\n    if (!stride) {\n      stride = 3;\n    }\n\n    if (!offset) {\n      offset = 0;\n    }\n\n    if (count) {\n      l = Math.min(count * stride + offset, a.length);\n    } else {\n      l = a.length;\n    }\n\n    for (i = offset; i < l; i += stride) {\n      vec[0] = a[i];\n      vec[1] = a[i + 1];\n      vec[2] = a[i + 2];\n      fn(vec, vec, arg);\n      a[i] = vec[0];\n      a[i + 1] = vec[1];\n      a[i + 2] = vec[2];\n    }\n\n    return a;\n  };\n}();","import {\n\tAccessor,\n\tBufferUtils,\n\tDocument,\n\tMaterial,\n\tMesh,\n\tPrimitive,\n\tPrimitiveTarget,\n\tProperty,\n\tPropertyType,\n\tRoot,\n\tSkin,\n\tTexture,\n\tTransform,\n} from '@gltf-transform/core';\nimport { assignDefaults, createTransform, shallowEqualsArray } from './utils.js';\n\nconst NAME = 'dedup';\n\nexport interface DedupOptions {\n\t/** Keep properties with unique names, even if they are duplicates. */\n\tkeepUniqueNames?: boolean;\n\t/** List of {@link PropertyType} identifiers to be de-duplicated.*/\n\tpropertyTypes?: string[];\n}\n\nconst DEDUP_DEFAULTS: Required<DedupOptions> = {\n\tkeepUniqueNames: false,\n\tpropertyTypes: [\n\t\tPropertyType.ACCESSOR,\n\t\tPropertyType.MESH,\n\t\tPropertyType.TEXTURE,\n\t\tPropertyType.MATERIAL,\n\t\tPropertyType.SKIN,\n\t],\n};\n\n/**\n * Removes duplicate {@link Accessor}, {@link Mesh}, {@link Texture}, and {@link Material}\n * properties. Partially based on a\n * [gist by mattdesl](https://gist.github.com/mattdesl/aea40285e2d73916b6b9101b36d84da8). Only\n * accessors in mesh primitives, morph targets, and animation samplers are processed.\n *\n * Example:\n *\n * ```ts\n * document.getRoot().listMeshes(); // → [Mesh, Mesh, Mesh]\n *\n * await document.transform(dedup({propertyTypes: [PropertyType.MESH]}));\n *\n * document.getRoot().listMeshes(); // → [Mesh]\n * ```\n *\n * @category Transforms\n */\nexport function dedup(_options: DedupOptions = DEDUP_DEFAULTS): Transform {\n\tconst options = assignDefaults(DEDUP_DEFAULTS, _options);\n\n\tconst propertyTypes = new Set(options.propertyTypes);\n\tfor (const propertyType of options.propertyTypes) {\n\t\tif (!DEDUP_DEFAULTS.propertyTypes.includes(propertyType)) {\n\t\t\tthrow new Error(`${NAME}: Unsupported deduplication on type \"${propertyType}\".`);\n\t\t}\n\t}\n\n\treturn createTransform(NAME, (document: Document): void => {\n\t\tconst logger = document.getLogger();\n\n\t\tif (propertyTypes.has(PropertyType.ACCESSOR)) dedupAccessors(document);\n\t\tif (propertyTypes.has(PropertyType.TEXTURE)) dedupImages(document, options);\n\t\tif (propertyTypes.has(PropertyType.MATERIAL)) dedupMaterials(document, options);\n\t\tif (propertyTypes.has(PropertyType.MESH)) dedupMeshes(document, options);\n\t\tif (propertyTypes.has(PropertyType.SKIN)) dedupSkins(document, options);\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\nfunction dedupAccessors(document: Document): void {\n\tconst logger = document.getLogger();\n\n\t// Find all accessors used for mesh and animation data.\n\tconst indicesMap = new Map<string, Set<Accessor>>();\n\tconst attributeMap = new Map<string, Set<Accessor>>();\n\tconst inputMap = new Map<string, Set<Accessor>>();\n\tconst outputMap = new Map<string, Set<Accessor>>();\n\n\tconst meshes = document.getRoot().listMeshes();\n\tmeshes.forEach((mesh) => {\n\t\tmesh.listPrimitives().forEach((primitive) => {\n\t\t\tprimitive.listAttributes().forEach((accessor) => hashAccessor(accessor, attributeMap));\n\t\t\thashAccessor(primitive.getIndices(), indicesMap);\n\t\t});\n\t});\n\n\tfor (const animation of document.getRoot().listAnimations()) {\n\t\tfor (const sampler of animation.listSamplers()) {\n\t\t\thashAccessor(sampler.getInput(), inputMap);\n\t\t\thashAccessor(sampler.getOutput(), outputMap);\n\t\t}\n\t}\n\n\t// Add accessor to the appropriate hash group. Hashes are _non-unique_,\n\t// intended to quickly compare everything accept the underlying array.\n\tfunction hashAccessor(accessor: Accessor | null, group: Map<string, Set<Accessor>>): void {\n\t\tif (!accessor) return;\n\n\t\tconst hash = [\n\t\t\taccessor.getCount(),\n\t\t\taccessor.getType(),\n\t\t\taccessor.getComponentType(),\n\t\t\taccessor.getNormalized(),\n\t\t\taccessor.getSparse(),\n\t\t].join(':');\n\n\t\tlet hashSet = group.get(hash);\n\t\tif (!hashSet) group.set(hash, (hashSet = new Set<Accessor>()));\n\t\thashSet.add(accessor);\n\t}\n\n\t// Find duplicate accessors of a given type.\n\tfunction detectDuplicates(accessors: Accessor[], duplicates: Map<Accessor, Accessor>): void {\n\t\tfor (let i = 0; i < accessors.length; i++) {\n\t\t\tconst a = accessors[i];\n\t\t\tconst aData = BufferUtils.toView(a.getArray()!);\n\n\t\t\tif (duplicates.has(a)) continue;\n\n\t\t\tfor (let j = i + 1; j < accessors.length; j++) {\n\t\t\t\tconst b = accessors[j];\n\n\t\t\t\tif (duplicates.has(b)) continue;\n\n\t\t\t\t// Just compare the arrays — everything else was covered by the\n\t\t\t\t// hash. Comparing uint8 views is faster than comparing the\n\t\t\t\t// original typed arrays.\n\t\t\t\tif (BufferUtils.equals(aData, BufferUtils.toView(b.getArray()!))) {\n\t\t\t\t\tduplicates.set(b, a);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tlet total = 0;\n\tconst duplicates = new Map<Accessor, Accessor>();\n\tfor (const group of [attributeMap, indicesMap, inputMap, outputMap]) {\n\t\tfor (const hashGroup of group.values()) {\n\t\t\ttotal += hashGroup.size;\n\t\t\tdetectDuplicates(Array.from(hashGroup), duplicates);\n\t\t}\n\t}\n\n\tlogger.debug(`${NAME}: Merged ${duplicates.size} of ${total} accessors.`);\n\n\t// Dissolve duplicate vertex attributes and indices.\n\tmeshes.forEach((mesh) => {\n\t\tmesh.listPrimitives().forEach((primitive) => {\n\t\t\tprimitive.listAttributes().forEach((accessor) => {\n\t\t\t\tif (duplicates.has(accessor)) {\n\t\t\t\t\tprimitive.swap(accessor, duplicates.get(accessor) as Accessor);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst indices = primitive.getIndices();\n\t\t\tif (indices && duplicates.has(indices)) {\n\t\t\t\tprimitive.swap(indices, duplicates.get(indices) as Accessor);\n\t\t\t}\n\t\t});\n\t});\n\n\t// Dissolve duplicate animation sampler inputs and outputs.\n\tfor (const animation of document.getRoot().listAnimations()) {\n\t\tfor (const sampler of animation.listSamplers()) {\n\t\t\tconst input = sampler.getInput();\n\t\t\tconst output = sampler.getOutput();\n\t\t\tif (input && duplicates.has(input)) {\n\t\t\t\tsampler.swap(input, duplicates.get(input) as Accessor);\n\t\t\t}\n\t\t\tif (output && duplicates.has(output)) {\n\t\t\t\tsampler.swap(output, duplicates.get(output) as Accessor);\n\t\t\t}\n\t\t}\n\t}\n\n\tArray.from(duplicates.keys()).forEach((accessor) => accessor.dispose());\n}\n\nfunction dedupMeshes(document: Document, options: Required<DedupOptions>): void {\n\tconst logger = document.getLogger();\n\tconst root = document.getRoot();\n\n\t// Create Reference -> ID lookup table.\n\tconst refs = new Map<Accessor | Material, number>();\n\troot.listAccessors().forEach((accessor, index) => refs.set(accessor, index));\n\troot.listMaterials().forEach((material, index) => refs.set(material, index));\n\n\t// For each mesh, create a hashkey.\n\tconst numMeshes = root.listMeshes().length;\n\tconst uniqueMeshes = new Map<string, Mesh>();\n\tfor (const src of root.listMeshes()) {\n\t\t// For each mesh, create a hashkey.\n\t\tconst srcKeyItems = [];\n\t\tfor (const prim of src.listPrimitives()) {\n\t\t\tsrcKeyItems.push(createPrimitiveKey(prim, refs));\n\t\t}\n\n\t\t// If another mesh exists with the same key, replace all instances with that, and dispose\n\t\t// of the duplicate. If not, just cache it.\n\t\tlet meshKey = '';\n\t\tif (options.keepUniqueNames) meshKey += src.getName() + ';';\n\t\tmeshKey += srcKeyItems.join(';');\n\n\t\tif (uniqueMeshes.has(meshKey)) {\n\t\t\tconst targetMesh = uniqueMeshes.get(meshKey)!;\n\t\t\tsrc.listParents().forEach((parent) => {\n\t\t\t\tif (parent.propertyType !== PropertyType.ROOT) {\n\t\t\t\t\tparent.swap(src, targetMesh);\n\t\t\t\t}\n\t\t\t});\n\t\t\tsrc.dispose();\n\t\t} else {\n\t\t\tuniqueMeshes.set(meshKey, src);\n\t\t}\n\t}\n\n\tlogger.debug(`${NAME}: Merged ${numMeshes - uniqueMeshes.size} of ${numMeshes} meshes.`);\n}\n\nfunction dedupImages(document: Document, options: Required<DedupOptions>): void {\n\tconst logger = document.getLogger();\n\tconst root = document.getRoot();\n\tconst textures = root.listTextures();\n\tconst duplicates: Map<Texture, Texture> = new Map();\n\n\t// Compare each texture to every other texture — O(n²) — and mark duplicates for replacement.\n\tfor (let i = 0; i < textures.length; i++) {\n\t\tconst a = textures[i];\n\t\tconst aData = a.getImage();\n\n\t\tif (duplicates.has(a)) continue;\n\n\t\tfor (let j = i + 1; j < textures.length; j++) {\n\t\t\tconst b = textures[j];\n\t\t\tconst bData = b.getImage();\n\n\t\t\tif (duplicates.has(b)) continue;\n\n\t\t\t// URIs are intentionally not compared.\n\t\t\tif (a.getMimeType() !== b.getMimeType()) continue;\n\t\t\tif (options.keepUniqueNames && a.getName() !== b.getName()) continue;\n\n\t\t\tconst aSize = a.getSize();\n\t\t\tconst bSize = b.getSize();\n\t\t\tif (!aSize || !bSize) continue;\n\t\t\tif (aSize[0] !== bSize[0]) continue;\n\t\t\tif (aSize[1] !== bSize[1]) continue;\n\t\t\tif (!aData || !bData) continue;\n\t\t\tif (BufferUtils.equals(aData, bData)) {\n\t\t\t\tduplicates.set(b, a);\n\t\t\t}\n\t\t}\n\t}\n\n\tlogger.debug(`${NAME}: Merged ${duplicates.size} of ${root.listTextures().length} textures.`);\n\n\tArray.from(duplicates.entries()).forEach(([src, dst]) => {\n\t\tsrc.listParents().forEach((property) => {\n\t\t\tif (!(property instanceof Root)) property.swap(src, dst);\n\t\t});\n\t\tsrc.dispose();\n\t});\n}\n\nfunction dedupMaterials(document: Document, options: Required<DedupOptions>): void {\n\tconst logger = document.getLogger();\n\tconst root = document.getRoot();\n\tconst materials = root.listMaterials();\n\tconst duplicates = new Map<Material, Material>();\n\tconst modifierCache = new Map<Material, boolean>();\n\tconst skip = new Set<string>();\n\n\tif (!options.keepUniqueNames) {\n\t\tskip.add('name');\n\t}\n\n\t// Compare each material to every other material — O(n²) — and mark duplicates for replacement.\n\tfor (let i = 0; i < materials.length; i++) {\n\t\tconst a = materials[i];\n\n\t\tif (duplicates.has(a)) continue;\n\t\tif (hasModifier(a, modifierCache)) continue;\n\n\t\tfor (let j = i + 1; j < materials.length; j++) {\n\t\t\tconst b = materials[j];\n\n\t\t\tif (duplicates.has(b)) continue;\n\t\t\tif (hasModifier(b, modifierCache)) continue;\n\n\t\t\tif (a.equals(b, skip)) {\n\t\t\t\tduplicates.set(b, a);\n\t\t\t}\n\t\t}\n\t}\n\n\tlogger.debug(`${NAME}: Merged ${duplicates.size} of ${materials.length} materials.`);\n\n\tArray.from(duplicates.entries()).forEach(([src, dst]) => {\n\t\tsrc.listParents().forEach((property) => {\n\t\t\tif (!(property instanceof Root)) property.swap(src, dst);\n\t\t});\n\t\tsrc.dispose();\n\t});\n}\n\nfunction dedupSkins(document: Document, options: Required<DedupOptions>): void {\n\tconst logger = document.getLogger();\n\tconst root = document.getRoot();\n\tconst skins = root.listSkins();\n\tconst duplicates = new Map<Skin, Skin>();\n\tconst skip = new Set(['joints']);\n\n\tif (!options.keepUniqueNames) {\n\t\tskip.add('name');\n\t}\n\n\tfor (let i = 0; i < skins.length; i++) {\n\t\tconst a = skins[i];\n\n\t\tif (duplicates.has(a)) continue;\n\n\t\tfor (let j = i + 1; j < skins.length; j++) {\n\t\t\tconst b = skins[j];\n\t\t\tif (duplicates.has(b)) continue;\n\n\t\t\t// Check joints with shallow equality, not deep equality.\n\t\t\t// See: https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/RecursiveSkeletons\n\t\t\tif (a.equals(b, skip) && shallowEqualsArray(a.listJoints(), b.listJoints())) {\n\t\t\t\tduplicates.set(b, a);\n\t\t\t}\n\t\t}\n\t}\n\n\tlogger.debug(`${NAME}: Merged ${duplicates.size} of ${skins.length} skins.`);\n\n\tArray.from(duplicates.entries()).forEach(([src, dst]) => {\n\t\tsrc.listParents().forEach((property) => {\n\t\t\tif (!(property instanceof Root)) property.swap(src, dst);\n\t\t});\n\t\tsrc.dispose();\n\t});\n}\n\n/** Generates a key unique to the content of a primitive or target. */\nfunction createPrimitiveKey(prim: Primitive | PrimitiveTarget, refs: Map<Accessor | Material, number>): string {\n\tconst primKeyItems = [];\n\tfor (const semantic of prim.listSemantics()) {\n\t\tconst attribute = prim.getAttribute(semantic)!;\n\t\tprimKeyItems.push(semantic + ':' + refs.get(attribute));\n\t}\n\tif (prim instanceof Primitive) {\n\t\tconst indices = prim.getIndices();\n\t\tif (indices) {\n\t\t\tprimKeyItems.push('indices:' + refs.get(indices));\n\t\t}\n\t\tconst material = prim.getMaterial();\n\t\tif (material) {\n\t\t\tprimKeyItems.push('material:' + refs.get(material));\n\t\t}\n\t\tprimKeyItems.push('mode:' + prim.getMode());\n\t\tfor (const target of prim.listTargets()) {\n\t\t\tprimKeyItems.push('target:' + createPrimitiveKey(target, refs));\n\t\t}\n\t}\n\treturn primKeyItems.join(',');\n}\n\n/**\n * Detects dependencies modified by a parent reference, to conservatively prevent merging. When\n * implementing extensions like KHR_animation_pointer, the 'modifyChild' attribute should be added\n * to graph edges connecting the animation channel to the animated target property.\n *\n * NOTICE: Implementation is conservative, and could prevent merging two materials sharing the\n * same animated \"Clearcoat\" ExtensionProperty. While that scenario is possible for an in-memory\n * glTF Transform graph, valid glTF input files do not have that risk.\n */\nfunction hasModifier(prop: Property, cache: Map<Property, boolean>): boolean {\n\tif (cache.has(prop)) return cache.get(prop)!;\n\n\tconst graph = prop.getGraph();\n\tconst visitedNodes = new Set<Property>();\n\tconst edgeQueue = graph.listParentEdges(prop);\n\n\t// Search dependency subtree for 'modifyChild' attribute.\n\twhile (edgeQueue.length > 0) {\n\t\tconst edge = edgeQueue.pop()!;\n\t\tif (edge.getAttributes().modifyChild === true) {\n\t\t\tcache.set(prop, true);\n\t\t\treturn true;\n\t\t}\n\n\t\tconst child = edge.getChild();\n\t\tif (visitedNodes.has(child)) continue;\n\n\t\tfor (const childEdge of graph.listChildEdges(child)) {\n\t\t\tedgeQueue.push(childEdge);\n\t\t}\n\t}\n\n\tcache.set(prop, false);\n\treturn false;\n}\n","import * as glMatrix from \"./common.js\";\n/**\n * 4 Dimensional Vector\n * @module vec4\n */\n\n/**\n * Creates a new, empty vec4\n *\n * @returns {vec4} a new 4D vector\n */\n\nexport function create() {\n  var out = new glMatrix.ARRAY_TYPE(4);\n\n  if (glMatrix.ARRAY_TYPE != Float32Array) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n  }\n\n  return out;\n}\n/**\n * Creates a new vec4 initialized with values from an existing vector\n *\n * @param {ReadonlyVec4} a vector to clone\n * @returns {vec4} a new 4D vector\n */\n\nexport function clone(a) {\n  var out = new glMatrix.ARRAY_TYPE(4);\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  out[3] = a[3];\n  return out;\n}\n/**\n * Creates a new vec4 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} a new 4D vector\n */\n\nexport function fromValues(x, y, z, w) {\n  var out = new glMatrix.ARRAY_TYPE(4);\n  out[0] = x;\n  out[1] = y;\n  out[2] = z;\n  out[3] = w;\n  return out;\n}\n/**\n * Copy the values from one vec4 to another\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the source vector\n * @returns {vec4} out\n */\n\nexport function copy(out, a) {\n  out[0] = a[0];\n  out[1] = a[1];\n  out[2] = a[2];\n  out[3] = a[3];\n  return out;\n}\n/**\n * Set the components of a vec4 to the given values\n *\n * @param {vec4} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @param {Number} w W component\n * @returns {vec4} out\n */\n\nexport function set(out, x, y, z, w) {\n  out[0] = x;\n  out[1] = y;\n  out[2] = z;\n  out[3] = w;\n  return out;\n}\n/**\n * Adds two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function add(out, a, b) {\n  out[0] = a[0] + b[0];\n  out[1] = a[1] + b[1];\n  out[2] = a[2] + b[2];\n  out[3] = a[3] + b[3];\n  return out;\n}\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function subtract(out, a, b) {\n  out[0] = a[0] - b[0];\n  out[1] = a[1] - b[1];\n  out[2] = a[2] - b[2];\n  out[3] = a[3] - b[3];\n  return out;\n}\n/**\n * Multiplies two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function multiply(out, a, b) {\n  out[0] = a[0] * b[0];\n  out[1] = a[1] * b[1];\n  out[2] = a[2] * b[2];\n  out[3] = a[3] * b[3];\n  return out;\n}\n/**\n * Divides two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function divide(out, a, b) {\n  out[0] = a[0] / b[0];\n  out[1] = a[1] / b[1];\n  out[2] = a[2] / b[2];\n  out[3] = a[3] / b[3];\n  return out;\n}\n/**\n * Math.ceil the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to ceil\n * @returns {vec4} out\n */\n\nexport function ceil(out, a) {\n  out[0] = Math.ceil(a[0]);\n  out[1] = Math.ceil(a[1]);\n  out[2] = Math.ceil(a[2]);\n  out[3] = Math.ceil(a[3]);\n  return out;\n}\n/**\n * Math.floor the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to floor\n * @returns {vec4} out\n */\n\nexport function floor(out, a) {\n  out[0] = Math.floor(a[0]);\n  out[1] = Math.floor(a[1]);\n  out[2] = Math.floor(a[2]);\n  out[3] = Math.floor(a[3]);\n  return out;\n}\n/**\n * Returns the minimum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function min(out, a, b) {\n  out[0] = Math.min(a[0], b[0]);\n  out[1] = Math.min(a[1], b[1]);\n  out[2] = Math.min(a[2], b[2]);\n  out[3] = Math.min(a[3], b[3]);\n  return out;\n}\n/**\n * Returns the maximum of two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {vec4} out\n */\n\nexport function max(out, a, b) {\n  out[0] = Math.max(a[0], b[0]);\n  out[1] = Math.max(a[1], b[1]);\n  out[2] = Math.max(a[2], b[2]);\n  out[3] = Math.max(a[3], b[3]);\n  return out;\n}\n/**\n * Math.round the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to round\n * @returns {vec4} out\n */\n\nexport function round(out, a) {\n  out[0] = Math.round(a[0]);\n  out[1] = Math.round(a[1]);\n  out[2] = Math.round(a[2]);\n  out[3] = Math.round(a[3]);\n  return out;\n}\n/**\n * Scales a vec4 by a scalar number\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec4} out\n */\n\nexport function scale(out, a, b) {\n  out[0] = a[0] * b;\n  out[1] = a[1] * b;\n  out[2] = a[2] * b;\n  out[3] = a[3] * b;\n  return out;\n}\n/**\n * Adds two vec4's after scaling the second operand by a scalar value\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec4} out\n */\n\nexport function scaleAndAdd(out, a, b, scale) {\n  out[0] = a[0] + b[0] * scale;\n  out[1] = a[1] + b[1] * scale;\n  out[2] = a[2] + b[2] * scale;\n  out[3] = a[3] + b[3] * scale;\n  return out;\n}\n/**\n * Calculates the euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} distance between a and b\n */\n\nexport function distance(a, b) {\n  var x = b[0] - a[0];\n  var y = b[1] - a[1];\n  var z = b[2] - a[2];\n  var w = b[3] - a[3];\n  return Math.hypot(x, y, z, w);\n}\n/**\n * Calculates the squared euclidian distance between two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} squared distance between a and b\n */\n\nexport function squaredDistance(a, b) {\n  var x = b[0] - a[0];\n  var y = b[1] - a[1];\n  var z = b[2] - a[2];\n  var w = b[3] - a[3];\n  return x * x + y * y + z * z + w * w;\n}\n/**\n * Calculates the length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nexport function length(a) {\n  var x = a[0];\n  var y = a[1];\n  var z = a[2];\n  var w = a[3];\n  return Math.hypot(x, y, z, w);\n}\n/**\n * Calculates the squared length of a vec4\n *\n * @param {ReadonlyVec4} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\n\nexport function squaredLength(a) {\n  var x = a[0];\n  var y = a[1];\n  var z = a[2];\n  var w = a[3];\n  return x * x + y * y + z * z + w * w;\n}\n/**\n * Negates the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to negate\n * @returns {vec4} out\n */\n\nexport function negate(out, a) {\n  out[0] = -a[0];\n  out[1] = -a[1];\n  out[2] = -a[2];\n  out[3] = -a[3];\n  return out;\n}\n/**\n * Returns the inverse of the components of a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to invert\n * @returns {vec4} out\n */\n\nexport function inverse(out, a) {\n  out[0] = 1.0 / a[0];\n  out[1] = 1.0 / a[1];\n  out[2] = 1.0 / a[2];\n  out[3] = 1.0 / a[3];\n  return out;\n}\n/**\n * Normalize a vec4\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a vector to normalize\n * @returns {vec4} out\n */\n\nexport function normalize(out, a) {\n  var x = a[0];\n  var y = a[1];\n  var z = a[2];\n  var w = a[3];\n  var len = x * x + y * y + z * z + w * w;\n\n  if (len > 0) {\n    len = 1 / Math.sqrt(len);\n  }\n\n  out[0] = x * len;\n  out[1] = y * len;\n  out[2] = z * len;\n  out[3] = w * len;\n  return out;\n}\n/**\n * Calculates the dot product of two vec4's\n *\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @returns {Number} dot product of a and b\n */\n\nexport function dot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n/**\n * Returns the cross-product of three vectors in a 4-dimensional space\n *\n * @param {ReadonlyVec4} result the receiving vector\n * @param {ReadonlyVec4} U the first vector\n * @param {ReadonlyVec4} V the second vector\n * @param {ReadonlyVec4} W the third vector\n * @returns {vec4} result\n */\n\nexport function cross(out, u, v, w) {\n  var A = v[0] * w[1] - v[1] * w[0],\n      B = v[0] * w[2] - v[2] * w[0],\n      C = v[0] * w[3] - v[3] * w[0],\n      D = v[1] * w[2] - v[2] * w[1],\n      E = v[1] * w[3] - v[3] * w[1],\n      F = v[2] * w[3] - v[3] * w[2];\n  var G = u[0];\n  var H = u[1];\n  var I = u[2];\n  var J = u[3];\n  out[0] = H * F - I * E + J * D;\n  out[1] = -(G * F) + I * C - J * B;\n  out[2] = G * E - H * C + J * A;\n  out[3] = -(G * D) + H * B - I * A;\n  return out;\n}\n/**\n * Performs a linear interpolation between two vec4's\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the first operand\n * @param {ReadonlyVec4} b the second operand\n * @param {Number} t interpolation amount, in the range [0-1], between the two inputs\n * @returns {vec4} out\n */\n\nexport function lerp(out, a, b, t) {\n  var ax = a[0];\n  var ay = a[1];\n  var az = a[2];\n  var aw = a[3];\n  out[0] = ax + t * (b[0] - ax);\n  out[1] = ay + t * (b[1] - ay);\n  out[2] = az + t * (b[2] - az);\n  out[3] = aw + t * (b[3] - aw);\n  return out;\n}\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec4} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec4} out\n */\n\nexport function random(out, scale) {\n  scale = scale || 1.0; // Marsaglia, George. Choosing a Point from the Surface of a\n  // Sphere. Ann. Math. Statist. 43 (1972), no. 2, 645--646.\n  // http://projecteuclid.org/euclid.aoms/1177692644;\n\n  var v1, v2, v3, v4;\n  var s1, s2;\n\n  do {\n    v1 = glMatrix.RANDOM() * 2 - 1;\n    v2 = glMatrix.RANDOM() * 2 - 1;\n    s1 = v1 * v1 + v2 * v2;\n  } while (s1 >= 1);\n\n  do {\n    v3 = glMatrix.RANDOM() * 2 - 1;\n    v4 = glMatrix.RANDOM() * 2 - 1;\n    s2 = v3 * v3 + v4 * v4;\n  } while (s2 >= 1);\n\n  var d = Math.sqrt((1 - s1) / s2);\n  out[0] = scale * v1;\n  out[1] = scale * v2;\n  out[2] = scale * v3 * d;\n  out[3] = scale * v4 * d;\n  return out;\n}\n/**\n * Transforms the vec4 with a mat4.\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec4} out\n */\n\nexport function transformMat4(out, a, m) {\n  var x = a[0],\n      y = a[1],\n      z = a[2],\n      w = a[3];\n  out[0] = m[0] * x + m[4] * y + m[8] * z + m[12] * w;\n  out[1] = m[1] * x + m[5] * y + m[9] * z + m[13] * w;\n  out[2] = m[2] * x + m[6] * y + m[10] * z + m[14] * w;\n  out[3] = m[3] * x + m[7] * y + m[11] * z + m[15] * w;\n  return out;\n}\n/**\n * Transforms the vec4 with a quat\n *\n * @param {vec4} out the receiving vector\n * @param {ReadonlyVec4} a the vector to transform\n * @param {ReadonlyQuat} q quaternion to transform with\n * @returns {vec4} out\n */\n\nexport function transformQuat(out, a, q) {\n  var x = a[0],\n      y = a[1],\n      z = a[2];\n  var qx = q[0],\n      qy = q[1],\n      qz = q[2],\n      qw = q[3]; // calculate quat * vec\n\n  var ix = qw * x + qy * z - qz * y;\n  var iy = qw * y + qz * x - qx * z;\n  var iz = qw * z + qx * y - qy * x;\n  var iw = -qx * x - qy * y - qz * z; // calculate result * inverse quat\n\n  out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n  out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n  out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n  out[3] = a[3];\n  return out;\n}\n/**\n * Set the components of a vec4 to zero\n *\n * @param {vec4} out the receiving vector\n * @returns {vec4} out\n */\n\nexport function zero(out) {\n  out[0] = 0.0;\n  out[1] = 0.0;\n  out[2] = 0.0;\n  out[3] = 0.0;\n  return out;\n}\n/**\n * Returns a string representation of a vector\n *\n * @param {ReadonlyVec4} a vector to represent as a string\n * @returns {String} string representation of the vector\n */\n\nexport function str(a) {\n  return \"vec4(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \")\";\n}\n/**\n * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n  return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];\n}\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {ReadonlyVec4} a The first vector.\n * @param {ReadonlyVec4} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n  var a0 = a[0],\n      a1 = a[1],\n      a2 = a[2],\n      a3 = a[3];\n  var b0 = b[0],\n      b1 = b[1],\n      b2 = b[2],\n      b3 = b[3];\n  return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3));\n}\n/**\n * Alias for {@link vec4.subtract}\n * @function\n */\n\nexport var sub = subtract;\n/**\n * Alias for {@link vec4.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link vec4.divide}\n * @function\n */\n\nexport var div = divide;\n/**\n * Alias for {@link vec4.distance}\n * @function\n */\n\nexport var dist = distance;\n/**\n * Alias for {@link vec4.squaredDistance}\n * @function\n */\n\nexport var sqrDist = squaredDistance;\n/**\n * Alias for {@link vec4.length}\n * @function\n */\n\nexport var len = length;\n/**\n * Alias for {@link vec4.squaredLength}\n * @function\n */\n\nexport var sqrLen = squaredLength;\n/**\n * Perform some operation over an array of vec4s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec4. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec4s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\nexport var forEach = function () {\n  var vec = create();\n  return function (a, stride, offset, count, fn, arg) {\n    var i, l;\n\n    if (!stride) {\n      stride = 4;\n    }\n\n    if (!offset) {\n      offset = 0;\n    }\n\n    if (count) {\n      l = Math.min(count * stride + offset, a.length);\n    } else {\n      l = a.length;\n    }\n\n    for (i = offset; i < l; i += stride) {\n      vec[0] = a[i];\n      vec[1] = a[i + 1];\n      vec[2] = a[i + 2];\n      vec[3] = a[i + 3];\n      fn(vec, vec, arg);\n      a[i] = vec[0];\n      a[i + 1] = vec[1];\n      a[i + 2] = vec[2];\n      a[i + 3] = vec[3];\n    }\n\n    return a;\n  };\n}();","import { Texture } from '@gltf-transform/core';\n\nconst SRGB_PATTERN = /color|emissive|diffuse/i;\n\n/**\n * Returns the color space (if any) implied by the {@link Material} slots to\n * which a texture is assigned, or null for non-color textures. If the texture\n * is not connected to any {@link Material}, this function will also return\n * null — any metadata in the image file will be ignored.\n *\n * Under current glTF specifications, only 'srgb' and non-color (null) textures\n * are used.\n *\n * Example:\n *\n * ```typescript\n * import { getTextureColorSpace } from '@gltf-transform/functions';\n *\n * const baseColorTexture = material.getBaseColorTexture();\n * const normalTexture = material.getNormalTexture();\n *\n * getTextureColorSpace(baseColorTexture); // → 'srgb'\n * getTextureColorSpace(normalTexture); // → null\n * ```\n */\nexport function getTextureColorSpace(texture: Texture): string | null {\n\tconst graph = texture.getGraph();\n\tconst edges = graph.listParentEdges(texture);\n\tconst isSRGB = edges.some((edge) => {\n\t\treturn edge.getAttributes().isColor || SRGB_PATTERN.test(edge.getName());\n\t});\n\treturn isSRGB ? 'srgb' : null;\n}\n","import { ExtensionProperty, Material, Property, Texture, TextureInfo } from '@gltf-transform/core';\n\n/**\n * Lists all {@link TextureInfo} definitions associated with a given\n * {@link Texture}. May be used to determine which UV transforms\n * and texCoord indices are applied to the material, without explicitly\n * checking the material properties and extensions.\n *\n * Example:\n *\n * ```typescript\n * // Find TextureInfo instances associated with the texture.\n * const results = listTextureInfo(texture);\n *\n * // Find which UV sets (TEXCOORD_0, TEXCOORD_1, ...) are required.\n * const texCoords = results.map((info) => info.getTexCoord());\n * // → [0, 1]\n * ```\n */\nexport function listTextureInfo(texture: Texture): TextureInfo[] {\n\tconst graph = texture.getGraph();\n\tconst results = new Set<TextureInfo>();\n\n\tfor (const textureEdge of graph.listParentEdges(texture)) {\n\t\tconst parent = textureEdge.getParent();\n\t\tconst name = textureEdge.getName() + 'Info';\n\n\t\tfor (const edge of graph.listChildEdges(parent)) {\n\t\t\tconst child = edge.getChild();\n\t\t\tif (child instanceof TextureInfo && edge.getName() === name) {\n\t\t\t\tresults.add(child);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn Array.from(results);\n}\n\n/**\n * Lists all {@link TextureInfo} definitions associated with any {@link Texture}\n * on the given {@link Material}. May be used to determine which UV transforms\n * and texCoord indices are applied to the material, without explicitly\n * checking the material properties and extensions.\n *\n * Example:\n *\n * ```typescript\n * const results = listTextureInfoByMaterial(material);\n *\n * const texCoords = results.map((info) => info.getTexCoord());\n * // → [0, 1]\n * ```\n */\nexport function listTextureInfoByMaterial(material: Material): TextureInfo[] {\n\tconst graph = material.getGraph();\n\tconst visited = new Set<Property>();\n\tconst results = new Set<TextureInfo>();\n\n\tfunction traverse(prop: Material | ExtensionProperty) {\n\t\tconst textureInfoNames = new Set<string>();\n\n\t\tfor (const edge of graph.listChildEdges(prop)) {\n\t\t\tif (edge.getChild() instanceof Texture) {\n\t\t\t\ttextureInfoNames.add(edge.getName() + 'Info');\n\t\t\t}\n\t\t}\n\n\t\tfor (const edge of graph.listChildEdges(prop)) {\n\t\t\tconst child = edge.getChild();\n\t\t\tif (visited.has(child)) continue;\n\t\t\tvisited.add(child);\n\n\t\t\tif (child instanceof TextureInfo && textureInfoNames.has(edge.getName())) {\n\t\t\t\tresults.add(child);\n\t\t\t} else if (child instanceof ExtensionProperty) {\n\t\t\t\ttraverse(child);\n\t\t\t}\n\t\t}\n\t}\n\n\ttraverse(material);\n\treturn Array.from(results);\n}\n","import { Document, Texture } from '@gltf-transform/core';\n\n/**\n * Returns names of all texture slots using the given texture.\n *\n * Example:\n *\n * ```js\n * const slots = listTextureSlots(texture);\n * // → ['occlusionTexture', 'metallicRoughnesTexture']\n * ```\n */\nexport function listTextureSlots(texture: Texture): string[] {\n\tconst document = Document.fromGraph(texture.getGraph())!;\n\tconst root = document.getRoot();\n\tconst slots = texture\n\t\t.getGraph()\n\t\t.listParentEdges(texture)\n\t\t.filter((edge) => edge.getParent() !== root)\n\t\t.map((edge) => edge.getName());\n\treturn Array.from(new Set(slots));\n}\n","import {\n\tAnimationChannel,\n\tColorUtils,\n\tDocument,\n\tExtensionProperty,\n\tGraph,\n\tILogger,\n\tMaterial,\n\tNode,\n\tPrimitive,\n\tPrimitiveTarget,\n\tProperty,\n\tPropertyType,\n\tRoot,\n\tScene,\n\tTexture,\n\tTextureInfo,\n\tTransform,\n\tvec3,\n\tvec4,\n} from '@gltf-transform/core';\nimport { mul as mulVec3 } from 'gl-matrix/vec3';\nimport { add, create, len, mul, scale, sub } from 'gl-matrix/vec4';\nimport { NdArray } from 'ndarray';\nimport { getPixels } from 'ndarray-pixels';\nimport { getTextureColorSpace } from './get-texture-color-space.js';\nimport { listTextureInfoByMaterial } from './list-texture-info.js';\nimport { listTextureSlots } from './list-texture-slots.js';\nimport { assignDefaults, createTransform, isEmptyObject } from './utils.js';\n\nconst NAME = 'prune';\n\nconst EPS = 3 / 255;\n\nexport interface PruneOptions {\n\t/** List of {@link PropertyType} identifiers to be de-duplicated.*/\n\tpropertyTypes?: string[];\n\t/** Whether to keep empty leaf nodes. */\n\tkeepLeaves?: boolean;\n\t/** Whether to keep unused vertex attributes, such as UVs without an assigned texture. */\n\tkeepAttributes?: boolean;\n\t/** Whether to keep redundant mesh indices, where vertex count equals index count. */\n\tkeepIndices?: boolean;\n\t/** Whether to keep single-color textures that can be converted to material factors. */\n\tkeepSolidTextures?: boolean;\n\t/** Whether custom extras should prevent pruning a property. */\n\tkeepExtras?: boolean;\n}\n\nexport const PRUNE_DEFAULTS: Required<PruneOptions> = {\n\tpropertyTypes: [\n\t\tPropertyType.NODE,\n\t\tPropertyType.SKIN,\n\t\tPropertyType.MESH,\n\t\tPropertyType.CAMERA,\n\t\tPropertyType.PRIMITIVE,\n\t\tPropertyType.PRIMITIVE_TARGET,\n\t\tPropertyType.ANIMATION,\n\t\tPropertyType.MATERIAL,\n\t\tPropertyType.TEXTURE,\n\t\tPropertyType.ACCESSOR,\n\t\tPropertyType.BUFFER,\n\t],\n\tkeepLeaves: false,\n\tkeepAttributes: false,\n\tkeepIndices: false,\n\tkeepSolidTextures: false,\n\tkeepExtras: false,\n};\n\n/**\n * Removes properties from the file if they are not referenced by a {@link Scene}. Commonly helpful\n * for cleaning up after other operations, e.g. allowing a node to be detached and any unused\n * meshes, materials, or other resources to be removed automatically.\n *\n * Example:\n *\n * ```javascript\n * import { PropertyType } from '@gltf-transform/core';\n * import { prune } from '@gltf-transform/functions';\n *\n * document.getRoot().listMaterials(); // → [Material, Material]\n *\n * await document.transform(\n * \tprune({\n * \t\tpropertyTypes: [PropertyType.MATERIAL],\n * \t\tkeepExtras: true\n * \t})\n * );\n *\n * document.getRoot().listMaterials(); // → [Material]\n * ```\n *\n * By default, pruning will aggressively remove most unused resources. Use\n * {@link PruneOptions} to limit what is considered for pruning.\n *\n * @category Transforms\n */\nexport function prune(_options: PruneOptions = PRUNE_DEFAULTS): Transform {\n\tconst options = assignDefaults(PRUNE_DEFAULTS, _options);\n\tconst propertyTypes = new Set(options.propertyTypes);\n\tconst keepExtras = options.keepExtras;\n\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tconst logger = document.getLogger();\n\t\tconst root = document.getRoot();\n\t\tconst graph = document.getGraph();\n\n\t\tconst counter = new DisposeCounter();\n\n\t\tconst onDispose = (event: { target: Property }) => counter.dispose(event.target);\n\t\t// TODO(cleanup): Publish GraphEvent / GraphEventListener types from 'property-graph'.\n\t\t// biome-ignore lint/suspicious/noExplicitAny: TODO\n\t\tgraph.addEventListener('node:dispose', onDispose as any);\n\n\t\t// Prune top-down, so that low-level properties like accessors can be removed if the\n\t\t// properties referencing them are removed.\n\n\t\t// Prune empty Meshes.\n\t\tif (propertyTypes.has(PropertyType.MESH)) {\n\t\t\tfor (const mesh of root.listMeshes()) {\n\t\t\t\tif (mesh.listPrimitives().length > 0) continue;\n\t\t\t\tmesh.dispose();\n\t\t\t}\n\t\t}\n\n\t\tif (propertyTypes.has(PropertyType.NODE)) {\n\t\t\tif (!options.keepLeaves) {\n\t\t\t\tfor (const scene of root.listScenes()) {\n\t\t\t\t\tnodeTreeShake(graph, scene, keepExtras);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const node of root.listNodes()) {\n\t\t\t\ttreeShake(node, keepExtras);\n\t\t\t}\n\t\t}\n\n\t\tif (propertyTypes.has(PropertyType.SKIN)) {\n\t\t\tfor (const skin of root.listSkins()) {\n\t\t\t\ttreeShake(skin, keepExtras);\n\t\t\t}\n\t\t}\n\n\t\tif (propertyTypes.has(PropertyType.MESH)) {\n\t\t\tfor (const mesh of root.listMeshes()) {\n\t\t\t\ttreeShake(mesh, keepExtras);\n\t\t\t}\n\t\t}\n\n\t\tif (propertyTypes.has(PropertyType.CAMERA)) {\n\t\t\tfor (const camera of root.listCameras()) {\n\t\t\t\ttreeShake(camera, keepExtras);\n\t\t\t}\n\t\t}\n\n\t\tif (propertyTypes.has(PropertyType.PRIMITIVE)) {\n\t\t\tindirectTreeShake(graph, PropertyType.PRIMITIVE, keepExtras);\n\t\t}\n\n\t\tif (propertyTypes.has(PropertyType.PRIMITIVE_TARGET)) {\n\t\t\tindirectTreeShake(graph, PropertyType.PRIMITIVE_TARGET, keepExtras);\n\t\t}\n\n\t\t// Prune unused vertex attributes.\n\t\tif (!options.keepAttributes && propertyTypes.has(PropertyType.ACCESSOR)) {\n\t\t\tconst materialPrims = new Map<Material, Set<Primitive>>();\n\t\t\tfor (const mesh of root.listMeshes()) {\n\t\t\t\tfor (const prim of mesh.listPrimitives()) {\n\t\t\t\t\tconst material = prim.getMaterial();\n\t\t\t\t\tif (!material) continue;\n\n\t\t\t\t\tconst required = listRequiredSemantics(document, prim, material);\n\t\t\t\t\tconst unused = listUnusedSemantics(prim, required);\n\t\t\t\t\tpruneAttributes(prim, unused);\n\t\t\t\t\tprim.listTargets().forEach((target) => pruneAttributes(target, unused));\n\t\t\t\t\tmaterialPrims.has(material)\n\t\t\t\t\t\t? materialPrims.get(material)!.add(prim)\n\t\t\t\t\t\t: materialPrims.set(material, new Set([prim]));\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const [material, prims] of materialPrims) {\n\t\t\t\tshiftTexCoords(material, Array.from(prims));\n\t\t\t}\n\t\t}\n\n\t\t// Prune unused mesh indices.\n\t\tif (!options.keepIndices && propertyTypes.has(PropertyType.ACCESSOR)) {\n\t\t\tfor (const mesh of root.listMeshes()) {\n\t\t\t\tfor (const prim of mesh.listPrimitives()) {\n\t\t\t\t\tpruneIndices(prim);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Pruning animations is a bit more complicated:\n\t\t// (1) Remove channels without target nodes.\n\t\t// (2) Remove animations without channels.\n\t\t// (3) Remove samplers orphaned in the process.\n\t\tif (propertyTypes.has(PropertyType.ANIMATION)) {\n\t\t\tfor (const anim of root.listAnimations()) {\n\t\t\t\tfor (const channel of anim.listChannels()) {\n\t\t\t\t\tif (!channel.getTargetNode()) {\n\t\t\t\t\t\tchannel.dispose();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!anim.listChannels().length) {\n\t\t\t\t\tconst samplers = anim.listSamplers();\n\t\t\t\t\ttreeShake(anim, keepExtras);\n\t\t\t\t\tsamplers.forEach((sampler) => treeShake(sampler, keepExtras));\n\t\t\t\t} else {\n\t\t\t\t\tanim.listSamplers().forEach((sampler) => treeShake(sampler, keepExtras));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (propertyTypes.has(PropertyType.MATERIAL)) {\n\t\t\troot.listMaterials().forEach((material) => treeShake(material, keepExtras));\n\t\t}\n\n\t\tif (propertyTypes.has(PropertyType.TEXTURE)) {\n\t\t\troot.listTextures().forEach((texture) => treeShake(texture, keepExtras));\n\t\t\tif (!options.keepSolidTextures) {\n\t\t\t\tawait pruneSolidTextures(document);\n\t\t\t}\n\t\t}\n\n\t\tif (propertyTypes.has(PropertyType.ACCESSOR)) {\n\t\t\troot.listAccessors().forEach((accessor) => treeShake(accessor, keepExtras));\n\t\t}\n\n\t\tif (propertyTypes.has(PropertyType.BUFFER)) {\n\t\t\troot.listBuffers().forEach((buffer) => treeShake(buffer, keepExtras));\n\t\t}\n\n\t\t// TODO(bug): This process does not identify unused ExtensionProperty instances. That could\n\t\t// be a future enhancement, either tracking unlinked properties as if they were connected\n\t\t// to the Graph, or iterating over a property list provided by the Extension. Properties in\n\t\t// use by an Extension are correctly preserved, in the meantime.\n\n\t\t// TODO(cleanup): Publish GraphEvent / GraphEventListener types from 'property-graph'.\n\t\t// biome-ignore lint/suspicious/noExplicitAny: TODO\n\t\tgraph.removeEventListener('node:dispose', onDispose as any);\n\n\t\tif (!counter.empty()) {\n\t\t\tconst str = counter\n\t\t\t\t.entries()\n\t\t\t\t.map(([type, count]) => `${type} (${count})`)\n\t\t\t\t.join(', ');\n\t\t\tlogger.info(`${NAME}: Removed types... ${str}`);\n\t\t} else {\n\t\t\tlogger.debug(`${NAME}: No unused properties found.`);\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\n/**********************************************************************************************\n * Utility for disposing properties and reporting statistics afterward.\n */\n\nclass DisposeCounter {\n\tpublic readonly disposed: Record<string, number> = {};\n\n\tempty(): boolean {\n\t\tfor (const key in this.disposed) return false;\n\t\treturn true;\n\t}\n\n\tentries(): [string, number][] {\n\t\treturn Object.entries(this.disposed);\n\t}\n\n\t/** Records properties disposed by type. */\n\tdispose(prop: Property): void {\n\t\tthis.disposed[prop.propertyType] = this.disposed[prop.propertyType] || 0;\n\t\tthis.disposed[prop.propertyType]++;\n\t}\n}\n\n/**********************************************************************************************\n * Helper functions for the {@link prune} transform.\n *\n * IMPORTANT: These functions were previously declared in function scope, but\n * broke in the CommonJS build due to a buggy Babel transform. See:\n * https://github.com/donmccurdy/glTF-Transform/issues/1140\n */\n\n/** Disposes of the given property if it is unused. */\nfunction treeShake(prop: Property, keepExtras: boolean): void {\n\t// Consider a property unused if it has no references from another property, excluding\n\t// types Root and AnimationChannel.\n\tconst parents = prop.listParents().filter((p) => !(p instanceof Root || p instanceof AnimationChannel));\n\tconst needsExtras = keepExtras && !isEmptyObject(prop.getExtras());\n\tif (!parents.length && !needsExtras) {\n\t\tprop.dispose();\n\t}\n}\n\n/**\n * For property types the Root does not maintain references to, we'll need to search the\n * graph. It's possible that objects may have been constructed without any outbound links,\n * but since they're not on the graph they don't need to be tree-shaken.\n */\nfunction indirectTreeShake(graph: Graph<Property>, propertyType: string, keepExtras: boolean): void {\n\tfor (const edge of graph.listEdges()) {\n\t\tconst parent = edge.getParent();\n\t\tif (parent.propertyType === propertyType) {\n\t\t\ttreeShake(parent, keepExtras);\n\t\t}\n\t}\n}\n\n/** Iteratively prunes leaf Nodes without contents. */\nfunction nodeTreeShake(graph: Graph<Property>, prop: Node | Scene, keepExtras: boolean): void {\n\tprop.listChildren().forEach((child) => nodeTreeShake(graph, child, keepExtras));\n\n\tif (prop instanceof Scene) return;\n\n\tconst isUsed = graph.listParentEdges(prop).some((e) => {\n\t\tconst ptype = e.getParent().propertyType;\n\t\treturn ptype !== PropertyType.ROOT && ptype !== PropertyType.SCENE && ptype !== PropertyType.NODE;\n\t});\n\tconst isEmpty = graph.listChildren(prop).length === 0;\n\tconst needsExtras = keepExtras && !isEmptyObject(prop.getExtras());\n\tif (isEmpty && !isUsed && !needsExtras) {\n\t\tprop.dispose();\n\t}\n}\n\nfunction pruneAttributes(prim: Primitive | PrimitiveTarget, unused: string[]) {\n\tfor (const semantic of unused) {\n\t\tprim.setAttribute(semantic, null);\n\t}\n}\n\nfunction pruneIndices(prim: Primitive) {\n\tconst indices = prim.getIndices();\n\tconst indicesArray = indices && indices.getArray();\n\tconst attribute = prim.listAttributes()[0];\n\n\tif (!indicesArray || !attribute) {\n\t\treturn;\n\t}\n\n\tif (indices.getCount() !== attribute.getCount()) {\n\t\treturn;\n\t}\n\n\tfor (let i = 0, il = indicesArray.length; i < il; i++) {\n\t\tif (i !== indicesArray[i]) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tprim.setIndices(null);\n}\n\n/**\n * Lists vertex attribute semantics that are unused when rendering a given primitive.\n */\nfunction listUnusedSemantics(prim: Primitive | PrimitiveTarget, required: Set<string>): string[] {\n\tconst unused = [];\n\tfor (const semantic of prim.listSemantics()) {\n\t\tif (semantic === 'NORMAL' && !required.has(semantic)) {\n\t\t\tunused.push(semantic);\n\t\t} else if (semantic === 'TANGENT' && !required.has(semantic)) {\n\t\t\tunused.push(semantic);\n\t\t} else if (semantic.startsWith('TEXCOORD_') && !required.has(semantic)) {\n\t\t\tunused.push(semantic);\n\t\t} else if (semantic.startsWith('COLOR_') && semantic !== 'COLOR_0') {\n\t\t\tunused.push(semantic);\n\t\t}\n\t}\n\treturn unused;\n}\n\n/**\n * Lists vertex attribute semantics required by a material. Does not include\n * attributes that would be used unconditionally, like POSITION or NORMAL.\n */\nfunction listRequiredSemantics(\n\tdocument: Document,\n\tprim: Primitive,\n\tmaterial: Material | ExtensionProperty,\n\tsemantics = new Set<string>(),\n): Set<string> {\n\tconst graph = document.getGraph();\n\n\tconst edges = graph.listChildEdges(material);\n\tconst textureNames = new Set<string>();\n\n\tfor (const edge of edges) {\n\t\tif (edge.getChild() instanceof Texture) {\n\t\t\ttextureNames.add(edge.getName());\n\t\t}\n\t}\n\n\tfor (const edge of edges) {\n\t\tconst name = edge.getName();\n\t\tconst child = edge.getChild();\n\n\t\tif (child instanceof TextureInfo) {\n\t\t\tif (textureNames.has(name.replace(/Info$/, ''))) {\n\t\t\t\tsemantics.add(`TEXCOORD_${child.getTexCoord()}`);\n\t\t\t}\n\t\t}\n\n\t\tif (child instanceof Texture && name.match(/normalTexture/i)) {\n\t\t\tsemantics.add('TANGENT');\n\t\t}\n\n\t\tif (child instanceof ExtensionProperty) {\n\t\t\tlistRequiredSemantics(document, prim, child, semantics);\n\t\t}\n\n\t\t// TODO(#748): Does KHR_materials_anisotropy imply required vertex attributes?\n\t}\n\n\tconst isLit = material instanceof Material && !material.getExtension('KHR_materials_unlit');\n\tconst isPoints = prim.getMode() === Primitive.Mode.POINTS;\n\tif (isLit && !isPoints) {\n\t\tsemantics.add('NORMAL');\n\t}\n\n\treturn semantics;\n}\n\n/**\n * Shifts texCoord indices on the given material and primitives assigned to\n * that material, such that indices start at zero and ascend without gaps.\n * Prior to calling this function, the implementation must ensure that:\n * - All TEXCOORD_n attributes on these prims are used by the material.\n * - Material does not require any unavailable TEXCOORD_n attributes.\n *\n * TEXCOORD_n attributes on morph targets are shifted alongside the parent\n * prim, but gaps may remain in their semantic lists.\n */\nfunction shiftTexCoords(material: Material, prims: Primitive[]) {\n\t// Create map from srcTexCoord → dstTexCoord.\n\tconst textureInfoList = listTextureInfoByMaterial(material);\n\tconst texCoordSet = new Set(textureInfoList.map((info: TextureInfo) => info.getTexCoord()));\n\tconst texCoordList = Array.from(texCoordSet).sort();\n\tconst texCoordMap = new Map(texCoordList.map((texCoord, index) => [texCoord, index]));\n\tconst semanticMap = new Map(texCoordList.map((texCoord, index) => [`TEXCOORD_${texCoord}`, `TEXCOORD_${index}`]));\n\n\t// Update material.\n\tfor (const textureInfo of textureInfoList) {\n\t\tconst texCoord = textureInfo.getTexCoord();\n\t\ttextureInfo.setTexCoord(texCoordMap.get(texCoord)!);\n\t}\n\n\t// Update prims.\n\tfor (const prim of prims) {\n\t\tconst semantics = prim\n\t\t\t.listSemantics()\n\t\t\t.filter((semantic) => semantic.startsWith('TEXCOORD_'))\n\t\t\t.sort();\n\t\tupdatePrim(prim, semantics);\n\t\tprim.listTargets().forEach((target) => updatePrim(target, semantics));\n\t}\n\n\tfunction updatePrim(prim: Primitive | PrimitiveTarget, srcSemantics: string[]) {\n\t\tfor (const srcSemantic of srcSemantics) {\n\t\t\tconst uv = prim.getAttribute(srcSemantic);\n\t\t\tif (!uv) continue;\n\n\t\t\tconst dstSemantic = semanticMap.get(srcSemantic)!;\n\t\t\tif (dstSemantic === srcSemantic) continue;\n\n\t\t\tprim.setAttribute(dstSemantic, uv);\n\t\t\tprim.setAttribute(srcSemantic, null);\n\t\t}\n\t}\n}\n\n/**********************************************************************************************\n * Prune solid (single-color) textures.\n */\n\nasync function pruneSolidTextures(document: Document): Promise<void> {\n\tconst root = document.getRoot();\n\tconst graph = document.getGraph();\n\tconst logger = document.getLogger();\n\tconst textures = root.listTextures();\n\n\tconst pending = textures.map(async (texture) => {\n\t\tconst factor = await getTextureFactor(texture);\n\t\tif (!factor) return;\n\n\t\tif (getTextureColorSpace(texture) === 'srgb') {\n\t\t\tColorUtils.convertSRGBToLinear(factor, factor);\n\t\t}\n\n\t\tconst name = texture.getName() || texture.getURI();\n\t\tconst size = texture.getSize()?.join('x');\n\t\tconst slots = listTextureSlots(texture);\n\n\t\tfor (const edge of graph.listParentEdges(texture)) {\n\t\t\tconst parent = edge.getParent();\n\t\t\tif (parent !== root && applyMaterialFactor(parent as Material, factor, edge.getName(), logger)) {\n\t\t\t\tedge.dispose();\n\t\t\t}\n\t\t}\n\n\t\tif (texture.listParents().length === 1) {\n\t\t\ttexture.dispose();\n\t\t\tlogger.debug(`${NAME}: Removed solid-color texture \"${name}\" (${size}px ${slots.join(', ')})`);\n\t\t}\n\t});\n\n\tawait Promise.all(pending);\n}\n\nfunction applyMaterialFactor(\n\tmaterial: Material | ExtensionProperty,\n\tfactor: vec4,\n\tslot: string,\n\tlogger: ILogger,\n): boolean {\n\tif (material instanceof Material) {\n\t\tswitch (slot) {\n\t\t\tcase 'baseColorTexture':\n\t\t\t\tmaterial.setBaseColorFactor(mul(factor, factor, material.getBaseColorFactor()) as vec4);\n\t\t\t\treturn true;\n\t\t\tcase 'emissiveTexture':\n\t\t\t\tmaterial.setEmissiveFactor(\n\t\t\t\t\tmulVec3([0, 0, 0], factor.slice(0, 3) as vec3, material.getEmissiveFactor()) as vec3,\n\t\t\t\t);\n\t\t\t\treturn true;\n\t\t\tcase 'occlusionTexture':\n\t\t\t\treturn Math.abs(factor[0] - 1) <= EPS;\n\t\t\tcase 'metallicRoughnessTexture':\n\t\t\t\tmaterial.setRoughnessFactor(factor[1] * material.getRoughnessFactor());\n\t\t\t\tmaterial.setMetallicFactor(factor[2] * material.getMetallicFactor());\n\t\t\t\treturn true;\n\t\t\tcase 'normalTexture':\n\t\t\t\treturn len(sub(create(), factor, [0.5, 0.5, 1, 1])) <= EPS;\n\t\t}\n\t}\n\n\tlogger.warn(`${NAME}: Detected single-color ${slot} texture. Pruning ${slot} not yet supported.`);\n\treturn false;\n}\n\nasync function getTextureFactor(texture: Texture): Promise<vec4 | null> {\n\tconst pixels = await maybeGetPixels(texture);\n\tif (!pixels) return null;\n\n\tconst min: vec4 = [Infinity, Infinity, Infinity, Infinity];\n\tconst max: vec4 = [-Infinity, -Infinity, -Infinity, -Infinity];\n\tconst target: vec4 = [0, 0, 0, 0];\n\n\tconst [width, height] = pixels.shape;\n\n\tfor (let i = 0; i < width; i++) {\n\t\tfor (let j = 0; j < height; j++) {\n\t\t\tfor (let k = 0; k < 4; k++) {\n\t\t\t\tmin[k] = Math.min(min[k], pixels.get(i, j, k));\n\t\t\t\tmax[k] = Math.max(max[k], pixels.get(i, j, k));\n\t\t\t}\n\t\t}\n\n\t\tif (len(sub(target, max, min)) / 255 > EPS) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\treturn scale(target, add(target, max, min), 0.5 / 255) as vec4;\n}\n\nasync function maybeGetPixels(texture: Texture): Promise<NdArray<Uint8Array> | null> {\n\ttry {\n\t\treturn await getPixels(texture.getImage()!, texture.getMimeType());\n\t} catch {\n\t\treturn null;\n\t}\n}\n","import { Accessor, BufferUtils, Primitive } from '@gltf-transform/core';\nimport { deepListAttributes } from './utils.js';\n\n/** Flags 'empty' values in a Uint32Array index. */\nexport const EMPTY_U32 = 2 ** 32 - 1;\n\nexport class VertexStream {\n\tprivate attributes: { u8: Uint8Array; byteStride: number; paddedByteStride: number }[] = [];\n\n\t/** Temporary vertex views in 4-byte-aligned memory. */\n\tprivate u8: Uint8Array;\n\tprivate u32: Uint32Array;\n\n\tconstructor(prim: Primitive) {\n\t\tlet byteStride = 0;\n\t\tfor (const attribute of deepListAttributes(prim)) {\n\t\t\tbyteStride += this._initAttribute(attribute);\n\t\t}\n\t\tthis.u8 = new Uint8Array(byteStride);\n\t\tthis.u32 = new Uint32Array(this.u8.buffer);\n\t}\n\n\tprivate _initAttribute(attribute: Accessor): number {\n\t\tconst array = attribute.getArray()!;\n\t\tconst u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);\n\t\tconst byteStride = attribute.getElementSize() * attribute.getComponentSize();\n\t\tconst paddedByteStride = BufferUtils.padNumber(byteStride);\n\t\tthis.attributes.push({ u8, byteStride, paddedByteStride });\n\t\treturn paddedByteStride;\n\t}\n\n\thash(index: number): number {\n\t\t// Load vertex into 4-byte-aligned view.\n\t\tlet byteOffset = 0;\n\t\tfor (const { u8, byteStride, paddedByteStride } of this.attributes) {\n\t\t\tfor (let i = 0; i < paddedByteStride; i++) {\n\t\t\t\tif (i < byteStride) {\n\t\t\t\t\tthis.u8[byteOffset + i] = u8[index * byteStride + i];\n\t\t\t\t} else {\n\t\t\t\t\tthis.u8[byteOffset + i] = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbyteOffset += paddedByteStride;\n\t\t}\n\n\t\t// Compute hash.\n\t\treturn murmurHash2(0, this.u32);\n\t}\n\n\tequal(a: number, b: number): boolean {\n\t\tfor (const { u8, byteStride } of this.attributes) {\n\t\t\tfor (let j = 0; j < byteStride; j++) {\n\t\t\t\tif (u8[a * byteStride + j] !== u8[b * byteStride + j]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n}\n\n/**\n * References:\n * - https://github.com/mikolalysenko/murmurhash-js/blob/f19136e9f9c17f8cddc216ca3d44ec7c5c502f60/murmurhash2_gc.js#L14\n * - https://github.com/zeux/meshoptimizer/blob/e47e1be6d3d9513153188216455bdbed40a206ef/src/indexgenerator.cpp#L12\n */\nfunction murmurHash2(h: number, key: Uint32Array): number {\n\t// MurmurHash2\n\tconst m = 0x5bd1e995;\n\tconst r = 24;\n\n\tfor (let i = 0, il = key.length; i < il; i++) {\n\t\tlet k = key[i];\n\n\t\tk = Math.imul(k, m) >>> 0;\n\t\tk = (k ^ (k >> r)) >>> 0;\n\t\tk = Math.imul(k, m) >>> 0;\n\n\t\th = Math.imul(h, m) >>> 0;\n\t\th = (h ^ k) >>> 0;\n\t}\n\n\treturn h;\n}\n\nexport function hashLookup(\n\ttable: Uint32Array,\n\tbuckets: number,\n\tstream: VertexStream,\n\tkey: number,\n\tempty = EMPTY_U32,\n): number {\n\tconst hashmod = buckets - 1;\n\tconst hashval = stream.hash(key);\n\tlet bucket = hashval & hashmod;\n\n\tfor (let probe = 0; probe <= hashmod; probe++) {\n\t\tconst item = table[bucket];\n\n\t\tif (item === empty || stream.equal(item, key)) {\n\t\t\treturn bucket;\n\t\t}\n\n\t\tbucket = (bucket + probe + 1) & hashmod; // Hash collision.\n\t}\n\n\tthrow new Error('Hash table full.');\n}\n","import { Scene, Node, Mesh, Primitive, Accessor } from '@gltf-transform/core';\nimport { InstancedMesh } from '@gltf-transform/extensions';\n\n/**\n * Various methods of estimating a vertex count. For some background on why\n * multiple definitions of a vertex count should exist, see [_Vertex Count\n * Higher in Engine than in 3D Software_](https://shahriyarshahrabi.medium.com/vertex-count-higher-in-engine-than-in-3d-software-badc348ada66).\n * Totals for a {@link Scene}, {@link Node}, or {@link Mesh} will not\n * necessarily match the sum of the totals for each {@link Primitive}. Choose\n * the appropriate method for a relevant total or estimate:\n *\n * - {@link getSceneVertexCount}\n * - {@link getNodeVertexCount}\n * - {@link getMeshVertexCount}\n * - {@link getPrimitiveVertexCount}\n *\n * Many rendering features, such as volumetric transmission, may lead\n * to additional passes over some or all vertices. These tradeoffs are\n * implementation-dependent, and not considered here.\n */\nexport enum VertexCountMethod {\n\t/**\n\t * Expected number of vertices processed by the vertex shader for one render\n\t * pass, without considering the vertex cache.\n\t */\n\tRENDER = 'render',\n\n\t/**\n\t * Expected number of vertices processed by the vertex shader for one render\n\t * pass, assuming an Average Transform to Vertex Ratio (ATVR) of 1. Approaching\n\t * this result requires optimizing for locality of vertex references (see\n\t * {@link reorder}).\n\t *\n\t * References:\n\t * - [ACMR and ATVR](https://www.realtimerendering.com/blog/acmr-and-atvr/), Real-Time Rendering\n\t */\n\tRENDER_CACHED = 'render-cached',\n\n\t/**\n\t * Expected number of vertices uploaded to the GPU, assuming that a client\n\t * uploads each unique {@link Accessor} only once. Unless glTF vertex\n\t * attributes are pre-processed to a known buffer layout, and the client is\n\t * optimized for that buffer layout, this total will be optimistic.\n\t */\n\tUPLOAD = 'upload',\n\n\t/**\n\t * Expected number of vertices uploaded to the GPU, assuming that a client\n\t * uploads each unique {@link Primitive} individually, duplicating vertex\n\t * attribute {@link Accessor Accessors} shared by multiple primitives, but\n\t * never uploading the same Mesh or Primitive to GPU memory more than once.\n\t */\n\tUPLOAD_NAIVE = 'upload-naive',\n\n\t/**\n\t * Total number of unique vertices represented, considering all attributes of\n\t * each vertex, and removing any duplicates. Has no direct relationship to\n\t * runtime characteristics, but may be helpful in identifying asset\n\t * optimization opportunities.\n\t *\n\t * @hidden TODO(feat): Not yet implemented.\n\t * @internal\n\t */\n\tDISTINCT = 'distinct',\n\n\t/**\n\t * Total number of unique vertices represented, considering only vertex\n\t * positions, and removing any duplicates. Has no direct relationship to\n\t * runtime characteristics, but may be helpful in identifying asset\n\t * optimization opportunities.\n\t *\n\t * @hidden TODO(feat): Not yet implemented.\n\t * @internal\n\t */\n\tDISTINCT_POSITION = 'distinct-position',\n\n\t/**\n\t * Number of vertex positions never used by any {@link Primitive}. If all\n\t * vertices are unused, this total will match `UPLOAD`.\n\t */\n\tUNUSED = 'unused',\n}\n\n/**\n * Computes total number of vertices in a {@link Scene}, by the\n * specified method. Totals for the Scene will not necessarily match the sum\n * of the totals for each {@link Mesh} or {@link Primitive} within it. See\n * {@link VertexCountMethod} for available methods.\n */\nexport function getSceneVertexCount(scene: Scene, method: VertexCountMethod): number {\n\treturn _getSubtreeVertexCount(scene, method);\n}\n\n/**\n * Computes total number of vertices in a {@link Node}, by the\n * specified method. Totals for the node will not necessarily match the sum\n * of the totals for each {@link Mesh} or {@link Primitive} within it. See\n * {@link VertexCountMethod} for available methods.\n */\nexport function getNodeVertexCount(node: Node | Scene, method: VertexCountMethod): number {\n\treturn _getSubtreeVertexCount(node, method);\n}\n\nfunction _getSubtreeVertexCount(node: Node | Scene, method: VertexCountMethod): number {\n\tconst instancedMeshes: [number, Mesh][] = [];\n\tconst nonInstancedMeshes: Mesh[] = [];\n\tconst meshes: Mesh[] = [];\n\n\tnode.traverse((node) => {\n\t\tconst mesh = node.getMesh();\n\t\tconst batch = node.getExtension<InstancedMesh>('EXT_mesh_gpu_instancing');\n\t\tif (batch && mesh) {\n\t\t\tmeshes.push(mesh);\n\t\t\tinstancedMeshes.push([batch.listAttributes()[0]!.getCount(), mesh]);\n\t\t} else if (mesh) {\n\t\t\tmeshes.push(mesh);\n\t\t\tnonInstancedMeshes.push(mesh);\n\t\t}\n\t});\n\n\tconst prims = meshes.flatMap((mesh) => mesh.listPrimitives());\n\tconst positions = prims.map((prim) => prim.getAttribute('POSITION')!);\n\tconst uniquePositions = Array.from(new Set(positions));\n\tconst uniqueMeshes = Array.from(new Set(meshes));\n\tconst uniquePrims = Array.from(new Set(uniqueMeshes.flatMap((mesh) => mesh.listPrimitives())));\n\n\tswitch (method) {\n\t\tcase VertexCountMethod.RENDER:\n\t\tcase VertexCountMethod.RENDER_CACHED:\n\t\t\treturn (\n\t\t\t\t_sum(nonInstancedMeshes.map((mesh) => getMeshVertexCount(mesh, method))) +\n\t\t\t\t_sum(instancedMeshes.map(([batch, mesh]) => batch * getMeshVertexCount(mesh, method)))\n\t\t\t);\n\t\tcase VertexCountMethod.UPLOAD_NAIVE:\n\t\t\treturn _sum(uniqueMeshes.map((mesh) => getMeshVertexCount(mesh, method)));\n\t\tcase VertexCountMethod.UPLOAD:\n\t\t\treturn _sum(uniquePositions.map((attribute) => attribute.getCount()));\n\t\tcase VertexCountMethod.DISTINCT:\n\t\tcase VertexCountMethod.DISTINCT_POSITION:\n\t\t\treturn _assertNotImplemented(method);\n\t\tcase VertexCountMethod.UNUSED:\n\t\t\treturn _sumUnused(uniquePrims);\n\t\tdefault:\n\t\t\treturn _assertUnreachable(method);\n\t}\n}\n\n/**\n * Computes total number of vertices in a {@link Mesh}, by the\n * specified method. Totals for the Mesh will not necessarily match the sum\n * of the totals for each {@link Primitive} within it. See\n * {@link VertexCountMethod} for available methods.\n */\nexport function getMeshVertexCount(mesh: Mesh, method: VertexCountMethod): number {\n\tconst prims = mesh.listPrimitives();\n\tconst uniquePrims = Array.from(new Set(prims));\n\tconst uniquePositions = Array.from(new Set(uniquePrims.map((prim) => prim.getAttribute('POSITION')!)));\n\n\tswitch (method) {\n\t\tcase VertexCountMethod.RENDER:\n\t\tcase VertexCountMethod.RENDER_CACHED:\n\t\tcase VertexCountMethod.UPLOAD_NAIVE:\n\t\t\treturn _sum(prims.map((prim) => getPrimitiveVertexCount(prim, method)));\n\t\tcase VertexCountMethod.UPLOAD:\n\t\t\treturn _sum(uniquePositions.map((attribute) => attribute.getCount()));\n\t\tcase VertexCountMethod.DISTINCT:\n\t\tcase VertexCountMethod.DISTINCT_POSITION:\n\t\t\treturn _assertNotImplemented(method);\n\t\tcase VertexCountMethod.UNUSED:\n\t\t\treturn _sumUnused(uniquePrims);\n\t\tdefault:\n\t\t\treturn _assertUnreachable(method);\n\t}\n}\n\n/**\n * Computes total number of vertices in a {@link Primitive}, by the\n * specified method. See {@link VertexCountMethod} for available methods.\n */\nexport function getPrimitiveVertexCount(prim: Primitive, method: VertexCountMethod): number {\n\tconst position = prim.getAttribute('POSITION')!;\n\tconst indices = prim.getIndices();\n\n\tswitch (method) {\n\t\tcase VertexCountMethod.RENDER:\n\t\t\treturn indices ? indices.getCount() : position.getCount();\n\t\tcase VertexCountMethod.RENDER_CACHED:\n\t\t\treturn indices ? new Set(indices.getArray()).size : position.getCount();\n\t\tcase VertexCountMethod.UPLOAD_NAIVE:\n\t\tcase VertexCountMethod.UPLOAD:\n\t\t\treturn position.getCount();\n\t\tcase VertexCountMethod.DISTINCT:\n\t\tcase VertexCountMethod.DISTINCT_POSITION:\n\t\t\treturn _assertNotImplemented(method);\n\t\tcase VertexCountMethod.UNUSED:\n\t\t\treturn indices ? position.getCount() - new Set(indices.getArray()).size : 0;\n\t\tdefault:\n\t\t\treturn _assertUnreachable(method);\n\t}\n}\n\nfunction _sum(values: number[]): number {\n\tlet total = 0;\n\tfor (let i = 0; i < values.length; i++) {\n\t\ttotal += values[i];\n\t}\n\treturn total;\n}\n\nfunction _sumUnused(prims: Primitive[]) {\n\tconst attributeIndexMap = new Map<Accessor, Set<Accessor | null>>();\n\tfor (const prim of prims) {\n\t\tconst position = prim.getAttribute('POSITION')!;\n\t\tconst indices = prim.getIndices();\n\t\tconst indicesSet = attributeIndexMap.get(position) || new Set();\n\t\tindicesSet.add(indices);\n\t\tattributeIndexMap.set(position, indicesSet);\n\t}\n\n\tlet unused = 0;\n\tfor (const [position, indicesSet] of attributeIndexMap) {\n\t\tif (indicesSet.has(null)) continue;\n\n\t\tconst usedIndices = new Uint8Array(position.getCount());\n\t\tfor (const indices of indicesSet as Set<Accessor>) {\n\t\t\tconst indicesArray = indices.getArray()!;\n\t\t\tfor (let i = 0, il = indicesArray.length; i < il; i++) {\n\t\t\t\tusedIndices[indicesArray[i]] = 1;\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0, il = position.getCount(); i < il; i++) {\n\t\t\tif (usedIndices[i] === 0) unused++;\n\t\t}\n\t}\n\n\treturn unused;\n}\n\nfunction _assertNotImplemented<T>(x: unknown): T {\n\tthrow new Error(`Not implemented: ${x}`);\n}\n\nfunction _assertUnreachable<T>(x: never): T {\n\tthrow new Error(`Unexpected value: ${x}`);\n}\n","import { Accessor, Document, Primitive, TypedArray, TypedArrayConstructor } from '@gltf-transform/core';\nimport { createIndices, createIndicesEmpty, deepListAttributes, shallowCloneAccessor } from './utils.js';\nimport { VertexCountMethod, getPrimitiveVertexCount } from './get-vertex-count.js';\nimport { EMPTY_U32 } from './hash-table.js';\n\n/**\n * Rewrites a {@link Primitive} such that all unused vertices in its vertex\n * attributes are removed. When multiple Primitives share vertex attributes,\n * each indexing only a few, compaction can be used to produce Primitives\n * each having smaller, independent vertex streams instead.\n *\n * Regardless of whether the Primitive is indexed or contains unused vertices,\n * compaction will clone every {@link Accessor}. The resulting Primitive will\n * share no Accessors with other Primitives, allowing later changes to\n * the vertex stream to be applied in isolation.\n *\n * Example:\n *\n * ```javascript\n * import { compactPrimitive, transformMesh } from '@gltf-transform/functions';\n * import { fromTranslation } from 'gl-matrix/mat4';\n *\n * const mesh = document.getRoot().listMeshes().find((mesh) => mesh.getName() === 'MyMesh');\n * const prim = mesh.listPrimitives().find((prim) => { ... });\n *\n * // Compact primitive, removing unused vertices and detaching shared vertex\n * // attributes. Without compaction, `transformPrimitive` might affect other\n * // primitives sharing the same vertex attributes.\n * compactPrimitive(prim);\n *\n * // Transform primitive vertices, y += 10.\n * transformPrimitive(prim, fromTranslation([], [0, 10, 0]));\n * ```\n *\n * Parameters 'remap' and 'dstVertexCount' are optional. When either is\n * provided, the other must be provided as well. If one or both are missing,\n * both will be computed from the mesh indices.\n *\n * @param remap - Mapping. Array index represents vertex index in the source\n *\t\tattributes, array value represents index in the resulting compacted\n *\t\tprimitive. When omitted, calculated from indices.\n * @param dstVertexcount - Number of unique vertices in compacted primitive.\n *\t\tWhen omitted, calculated from indices.\n */\n// TODO(cleanup): Additional signatures currently break greendoc/parse.\n// export function compactPrimitive(prim: Primitive): Primitive;\n// export function compactPrimitive(prim: Primitive, remap: TypedArray, dstVertexCount: number): Primitive;\nexport function compactPrimitive(prim: Primitive, remap?: TypedArray, dstVertexCount?: number): Primitive {\n\tconst document = Document.fromGraph(prim.getGraph())!;\n\n\tif (!remap || !dstVertexCount) {\n\t\t[remap, dstVertexCount] = createCompactPlan(prim);\n\t}\n\n\t// Remap indices.\n\n\tconst srcIndices = prim.getIndices();\n\tconst srcIndicesArray = srcIndices ? srcIndices.getArray() : null;\n\tconst srcIndicesCount = getPrimitiveVertexCount(prim, VertexCountMethod.RENDER);\n\n\tconst dstIndices = document.createAccessor();\n\tconst dstIndicesCount = srcIndicesCount; // primitive count does not change.\n\tconst dstIndicesArray = createIndicesEmpty(dstIndicesCount, dstVertexCount);\n\n\tfor (let i = 0; i < dstIndicesCount; i++) {\n\t\tdstIndicesArray[i] = remap[srcIndicesArray ? srcIndicesArray[i] : i];\n\t}\n\n\tprim.setIndices(dstIndices.setArray(dstIndicesArray));\n\n\t// Remap vertices.\n\n\tconst srcAttributesPrev = deepListAttributes(prim);\n\n\tfor (const srcAttribute of prim.listAttributes()) {\n\t\tconst dstAttribute = shallowCloneAccessor(document, srcAttribute);\n\t\tcompactAttribute(srcAttribute, srcIndices, remap, dstAttribute, dstVertexCount);\n\t\tprim.swap(srcAttribute, dstAttribute);\n\t}\n\tfor (const target of prim.listTargets()) {\n\t\tfor (const srcAttribute of target.listAttributes()) {\n\t\t\tconst dstAttribute = shallowCloneAccessor(document, srcAttribute);\n\t\t\tcompactAttribute(srcAttribute, srcIndices, remap, dstAttribute, dstVertexCount);\n\t\t\ttarget.swap(srcAttribute, dstAttribute);\n\t\t}\n\t}\n\n\t// Clean up accessors.\n\n\tif (srcIndices && srcIndices.listParents().length === 1) {\n\t\tsrcIndices.dispose();\n\t}\n\tfor (const srcAttribute of srcAttributesPrev) {\n\t\tif (srcAttribute.listParents().length === 1) {\n\t\t\tsrcAttribute.dispose();\n\t\t}\n\t}\n\n\treturn prim;\n}\n\n/**\n * Copies srcAttribute to dstAttribute, using the given indices and remap (srcIndex -> dstIndex).\n * Any existing array in dstAttribute is replaced. Vertices not used by the index are eliminated,\n * leaving a compact attribute.\n * @hidden\n * @internal\n */\nexport function compactAttribute(\n\tsrcAttribute: Accessor,\n\tsrcIndices: Accessor | null,\n\tremap: TypedArray,\n\tdstAttribute: Accessor,\n\tdstVertexCount: number,\n): Accessor {\n\tconst elementSize = srcAttribute.getElementSize();\n\tconst srcArray = srcAttribute.getArray()!;\n\tconst srcIndicesArray = srcIndices ? srcIndices.getArray() : null;\n\tconst srcIndicesCount = srcIndices ? srcIndices.getCount() : srcAttribute.getCount();\n\tconst dstArray = new (srcArray.constructor as TypedArrayConstructor)(dstVertexCount * elementSize);\n\tconst dstDone = new Uint8Array(dstVertexCount);\n\n\tfor (let i = 0; i < srcIndicesCount; i++) {\n\t\tconst srcIndex = srcIndicesArray ? srcIndicesArray[i] : i;\n\t\tconst dstIndex = remap[srcIndex];\n\t\tif (dstDone[dstIndex]) continue;\n\n\t\tfor (let j = 0; j < elementSize; j++) {\n\t\t\tdstArray[dstIndex * elementSize + j] = srcArray[srcIndex * elementSize + j];\n\t\t}\n\n\t\tdstDone[dstIndex] = 1;\n\t}\n\n\treturn dstAttribute.setArray(dstArray);\n}\n\n/**\n * Creates a 'remap' and 'dstVertexCount' plan for indexed primitives,\n * such that they can be rewritten with {@link compactPrimitive} removing\n * any non-rendered vertices.\n * @hidden\n * @internal\n */\nfunction createCompactPlan(prim: Primitive): [Uint32Array, number] {\n\tconst srcVertexCount = getPrimitiveVertexCount(prim, VertexCountMethod.UPLOAD);\n\n\tconst indices = prim.getIndices();\n\tconst indicesArray = indices ? indices.getArray() : null;\n\tif (!indices || !indicesArray) {\n\t\treturn [createIndices(srcVertexCount, 1_000_000) as Uint32Array, srcVertexCount];\n\t}\n\n\tconst remap = new Uint32Array(srcVertexCount).fill(EMPTY_U32);\n\n\tlet dstVertexCount = 0;\n\n\tfor (let i = 0; i < indicesArray.length; i++) {\n\t\tconst srcIndex = indicesArray[i];\n\t\tif (remap[srcIndex] === EMPTY_U32) {\n\t\t\tremap[srcIndex] = dstVertexCount++;\n\t\t}\n\t}\n\n\treturn [remap, dstVertexCount];\n}\n","import { Document, Primitive, PropertyType, Transform } from '@gltf-transform/core';\nimport { dedup } from './dedup.js';\nimport { prune } from './prune.js';\nimport { EMPTY_U32, VertexStream, hashLookup } from './hash-table.js';\nimport { assignDefaults, ceilPowerOfTwo, createTransform, formatDeltaOp } from './utils.js';\nimport { compactPrimitive } from './compact-primitive.js';\nimport { VertexCountMethod, getPrimitiveVertexCount } from './get-vertex-count.js';\n\n/**\n * CONTRIBUTOR NOTES\n *\n * Ideally a weld() implementation should be fast, robust, and tunable. The\n * writeup below tracks my attempts to solve for these constraints.\n *\n * (Approach #1) Follow the mergeVertices() implementation of three.js,\n * hashing vertices with a string concatenation of all vertex attributes.\n * The approach does not allow per-attribute tolerance in local units.\n *\n * (Approach #2) Sort points along the X axis, then make cheaper\n * searches up/down the sorted list for merge candidates. While this allows\n * simpler comparison based on specified tolerance, it's much slower, even\n * for cases where choice of the X vs. Y or Z axes is reasonable.\n *\n * (Approach #3) Attempted a Delaunay triangulation in three dimensions,\n * expecting it would be an n * log(n) algorithm, but the only implementation\n * I found (with delaunay-triangulate) appeared to be much slower than that,\n * and was notably slower than the sort-based approach, just building the\n * Delaunay triangulation alone.\n *\n * (Approach #4) Hybrid of (1) and (2), assigning vertices to a spatial\n * grid, then searching the local neighborhood (27 cells) for weld candidates.\n *\n * (Approach #5) Based on Meshoptimizer's implementation, when tolerance=0\n * use a hashtable to find bitwise-equal vertices quickly. Vastly faster than\n * previous approaches, but without tolerance options.\n *\n * RESULTS: For the \"Lovecraftian\" sample model linked below, after joining,\n * a primitive with 873,000 vertices can be welded down to 230,000 vertices.\n * https://sketchfab.com/3d-models/sculpt-january-day-19-lovecraftian-34ad2501108e4fceb9394f5b816b9f42\n *\n * - (1) Not tested, but prior results suggest not robust enough.\n * - (2) 30s\n * - (3) 660s\n * - (4) 5s exhaustive, 1.5s non-exhaustive\n * - (5) 0.2s\n *\n * As of April 2024, the lossy weld was removed, leaving only approach #5. An\n * upcoming Meshoptimizer release will include a simplifyWithAttributes\n * function allowing simplification with weighted consideration of vertex\n * attributes, which I hope to support. With that, weld() may remain faster,\n * simpler, and more maintainable.\n */\n\nconst NAME = 'weld';\n\n/** Options for the {@link weld} function. */\nexport interface WeldOptions {\n\t/** Whether to overwrite existing indices. */\n\toverwrite?: boolean;\n\t/**\n\t * Whether to perform cleanup steps after completing the operation. Recommended, and enabled by\n\t * default. Cleanup removes temporary resources created during the operation, but may also remove\n\t * pre-existing unused or duplicate resources in the {@link Document}. Applications that require\n\t * keeping these resources may need to disable cleanup, instead calling {@link dedup} and\n\t * {@link prune} manually (with customized options) later in the processing pipeline.\n\t * @experimental\n\t */\n\tcleanup?: boolean;\n}\n\nexport const WELD_DEFAULTS: Required<WeldOptions> = {\n\toverwrite: true,\n\tcleanup: true,\n};\n\n/**\n * Welds {@link Primitive Primitives}, merging bitwise identical vertices. When\n * merged and indexed, data is shared more efficiently between vertices. File size\n * can be reduced, and the GPU uses the vertex cache more efficiently.\n *\n * Example:\n *\n * ```javascript\n * import { weld, getSceneVertexCount, VertexCountMethod } from '@gltf-transform/functions';\n *\n * const scene = document.getDefaultScene();\n * const srcVertexCount = getSceneVertexCount(scene, VertexCountMethod.UPLOAD);\n * await document.transform(weld());\n * const dstVertexCount = getSceneVertexCount(scene, VertexCountMethod.UPLOAD);\n * ```\n *\n * @category Transforms\n */\nexport function weld(_options: WeldOptions = WELD_DEFAULTS): Transform {\n\tconst options = assignDefaults(WELD_DEFAULTS, _options);\n\n\treturn createTransform(NAME, async (doc: Document): Promise<void> => {\n\t\tconst logger = doc.getLogger();\n\n\t\tfor (const mesh of doc.getRoot().listMeshes()) {\n\t\t\tfor (const prim of mesh.listPrimitives()) {\n\t\t\t\tweldPrimitive(prim, options);\n\n\t\t\t\tif (getPrimitiveVertexCount(prim, VertexCountMethod.RENDER) === 0) {\n\t\t\t\t\tprim.dispose();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (mesh.listPrimitives().length === 0) mesh.dispose();\n\t\t}\n\n\t\t// Welding removes degenerate meshes; prune leaf nodes afterward.\n\t\tif (options.cleanup) {\n\t\t\tawait doc.transform(\n\t\t\t\tprune({\n\t\t\t\t\tpropertyTypes: [PropertyType.ACCESSOR, PropertyType.NODE],\n\t\t\t\t\tkeepAttributes: true,\n\t\t\t\t\tkeepIndices: true,\n\t\t\t\t\tkeepLeaves: false,\n\t\t\t\t}),\n\t\t\t\tdedup({ propertyTypes: [PropertyType.ACCESSOR] }),\n\t\t\t);\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\n/**\n * Welds a {@link Primitive}, merging bitwise identical vertices. When merged\n * and indexed, data is shared more efficiently between vertices. File size can\n * be reduced, and the GPU uses the vertex cache more efficiently.\n *\n * Example:\n *\n * ```javascript\n * import { weldPrimitive, getMeshVertexCount, VertexCountMethod } from '@gltf-transform/functions';\n *\n * const mesh = document.getRoot().listMeshes()\n * \t.find((mesh) => mesh.getName() === 'Gizmo');\n *\n * const srcVertexCount = getMeshVertexCount(mesh, VertexCountMethod.UPLOAD);\n *\n * for (const prim of mesh.listPrimitives()) {\n *   weldPrimitive(prim);\n * }\n *\n * const dstVertexCount = getMeshVertexCount(mesh, VertexCountMethod.UPLOAD);\n * ```\n */\nexport function weldPrimitive(prim: Primitive, _options: WeldOptions = WELD_DEFAULTS): void {\n\tconst graph = prim.getGraph();\n\tconst document = Document.fromGraph(graph)!;\n\tconst logger = document.getLogger();\n\tconst options = { ...WELD_DEFAULTS, ..._options };\n\n\tif (prim.getIndices() && !options.overwrite) return;\n\tif (prim.getMode() === Primitive.Mode.POINTS) return;\n\n\tconst srcVertexCount = prim.getAttribute('POSITION')!.getCount();\n\tconst srcIndices = prim.getIndices();\n\tconst srcIndicesArray = srcIndices?.getArray();\n\tconst srcIndicesCount = srcIndices ? srcIndices.getCount() : srcVertexCount;\n\n\tconst stream = new VertexStream(prim);\n\tconst tableSize = ceilPowerOfTwo(srcVertexCount + srcVertexCount / 4);\n\tconst table = new Uint32Array(tableSize).fill(EMPTY_U32);\n\tconst writeMap = new Uint32Array(srcVertexCount).fill(EMPTY_U32); // oldIndex → newIndex\n\n\t// (1) Compare and identify indices to weld.\n\n\tlet dstVertexCount = 0;\n\n\tfor (let i = 0; i < srcIndicesCount; i++) {\n\t\tconst srcIndex = srcIndicesArray ? srcIndicesArray[i] : i;\n\t\tif (writeMap[srcIndex] !== EMPTY_U32) continue;\n\n\t\tconst hashIndex = hashLookup(table, tableSize, stream, srcIndex, EMPTY_U32);\n\t\tconst dstIndex = table[hashIndex];\n\n\t\tif (dstIndex === EMPTY_U32) {\n\t\t\ttable[hashIndex] = srcIndex;\n\t\t\twriteMap[srcIndex] = dstVertexCount++;\n\t\t} else {\n\t\t\twriteMap[srcIndex] = writeMap[dstIndex];\n\t\t}\n\t}\n\n\tlogger.debug(`${NAME}: ${formatDeltaOp(srcVertexCount, dstVertexCount)} vertices.`);\n\n\tcompactPrimitive(prim, writeMap, dstVertexCount);\n}\n","import { vec3, mat4, Accessor, Primitive, MathUtils } from '@gltf-transform/core';\nimport { create as createMat3, fromMat4, invert, transpose } from 'gl-matrix/mat3';\nimport { create as createVec3, normalize as normalizeVec3, transformMat3, transformMat4 } from 'gl-matrix/vec3';\nimport { weldPrimitive } from './weld.js';\nimport { determinant } from 'gl-matrix/mat4';\n\nconst { FLOAT } = Accessor.ComponentType;\n\n/**\n * Applies a transform matrix to a {@link Primitive}.\n *\n * All vertex attributes on the Primitive and its\n * {@link PrimitiveTarget PrimitiveTargets} are modified in place. If vertex\n * streams are shared with other Primitives, and overwriting the shared vertex\n * attributes is not desired, use {@link compactPrimitive} to pre-process\n * the Primitive or call {@link transformMesh} instead.\n *\n * Example:\n *\n * ```javascript\n * import { fromTranslation } from 'gl-matrix/mat4';\n * import { transformPrimitive } from '@gltf-transform/functions';\n *\n * // offset vertices, y += 10.\n * transformPrimitive(prim, fromTranslation([], [0, 10, 0]));\n * ```\n *\n * @param prim\n * @param matrix\n */\nexport function transformPrimitive(prim: Primitive, matrix: mat4): void {\n\t// Apply transform to base attributes.\n\tconst position = prim.getAttribute('POSITION');\n\tif (position) {\n\t\tapplyMatrix(matrix, position);\n\t}\n\n\tconst normal = prim.getAttribute('NORMAL');\n\tif (normal) {\n\t\tapplyNormalMatrix(matrix, normal);\n\t}\n\n\tconst tangent = prim.getAttribute('TANGENT');\n\tif (tangent) {\n\t\tapplyTangentMatrix(matrix, tangent);\n\t}\n\n\t// Apply transform to morph attributes.\n\tfor (const target of prim.listTargets()) {\n\t\tconst position = target.getAttribute('POSITION');\n\t\tif (position) {\n\t\t\tapplyMatrix(matrix, position);\n\t\t}\n\n\t\tconst normal = target.getAttribute('NORMAL');\n\t\tif (normal) {\n\t\t\tapplyNormalMatrix(matrix, normal);\n\t\t}\n\n\t\tconst tangent = target.getAttribute('TANGENT');\n\t\tif (tangent) {\n\t\t\tapplyTangentMatrix(matrix, tangent);\n\t\t}\n\t}\n\n\t// Reverse winding order if scale is negative.\n\t// See: https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/NegativeScaleTest\n\tif (determinant(matrix) < 0) {\n\t\treversePrimitiveWindingOrder(prim);\n\t}\n}\n\nfunction applyMatrix(matrix: mat4, attribute: Accessor) {\n\tconst componentType = attribute.getComponentType();\n\tconst normalized = attribute.getNormalized();\n\tconst srcArray = attribute.getArray()!;\n\tconst dstArray = componentType === FLOAT ? srcArray : new Float32Array(srcArray.length);\n\n\tconst vector = createVec3() as vec3;\n\tfor (let i = 0, il = attribute.getCount(); i < il; i++) {\n\t\tif (normalized) {\n\t\t\tvector[0] = MathUtils.decodeNormalizedInt(srcArray[i * 3], componentType);\n\t\t\tvector[1] = MathUtils.decodeNormalizedInt(srcArray[i * 3 + 1], componentType);\n\t\t\tvector[2] = MathUtils.decodeNormalizedInt(srcArray[i * 3 + 2], componentType);\n\t\t} else {\n\t\t\tvector[0] = srcArray[i * 3];\n\t\t\tvector[1] = srcArray[i * 3 + 1];\n\t\t\tvector[2] = srcArray[i * 3 + 2];\n\t\t}\n\n\t\ttransformMat4(vector, vector, matrix);\n\n\t\tdstArray[i * 3] = vector[0];\n\t\tdstArray[i * 3 + 1] = vector[1];\n\t\tdstArray[i * 3 + 2] = vector[2];\n\t}\n\n\tattribute.setArray(dstArray).setNormalized(false);\n}\n\nfunction applyNormalMatrix(matrix: mat4, attribute: Accessor) {\n\tconst array = attribute.getArray()!;\n\tconst normalized = attribute.getNormalized();\n\tconst componentType = attribute.getComponentType();\n\n\tconst normalMatrix = createMat3();\n\tfromMat4(normalMatrix, matrix);\n\tinvert(normalMatrix, normalMatrix);\n\ttranspose(normalMatrix, normalMatrix);\n\n\tconst vector = createVec3() as vec3;\n\tfor (let i = 0, il = attribute.getCount(); i < il; i++) {\n\t\tif (normalized) {\n\t\t\tvector[0] = MathUtils.decodeNormalizedInt(array[i * 3], componentType);\n\t\t\tvector[1] = MathUtils.decodeNormalizedInt(array[i * 3 + 1], componentType);\n\t\t\tvector[2] = MathUtils.decodeNormalizedInt(array[i * 3 + 2], componentType);\n\t\t} else {\n\t\t\tvector[0] = array[i * 3];\n\t\t\tvector[1] = array[i * 3 + 1];\n\t\t\tvector[2] = array[i * 3 + 2];\n\t\t}\n\n\t\ttransformMat3(vector, vector, normalMatrix);\n\t\tnormalizeVec3(vector, vector);\n\n\t\tif (normalized) {\n\t\t\tarray[i * 3] = MathUtils.decodeNormalizedInt(vector[0], componentType);\n\t\t\tarray[i * 3 + 1] = MathUtils.decodeNormalizedInt(vector[1], componentType);\n\t\t\tarray[i * 3 + 2] = MathUtils.decodeNormalizedInt(vector[2], componentType);\n\t\t} else {\n\t\t\tarray[i * 3] = vector[0];\n\t\t\tarray[i * 3 + 1] = vector[1];\n\t\t\tarray[i * 3 + 2] = vector[2];\n\t\t}\n\t}\n}\n\nfunction applyTangentMatrix(matrix: mat4, attribute: Accessor) {\n\tconst array = attribute.getArray()!;\n\tconst normalized = attribute.getNormalized();\n\tconst componentType = attribute.getComponentType();\n\n\tconst v3 = createVec3() as vec3;\n\tfor (let i = 0, il = attribute.getCount(); i < il; i++) {\n\t\tif (normalized) {\n\t\t\tv3[0] = MathUtils.decodeNormalizedInt(array[i * 4], componentType);\n\t\t\tv3[1] = MathUtils.decodeNormalizedInt(array[i * 4 + 1], componentType);\n\t\t\tv3[2] = MathUtils.decodeNormalizedInt(array[i * 4 + 2], componentType);\n\t\t} else {\n\t\t\tv3[0] = array[i * 4];\n\t\t\tv3[1] = array[i * 4 + 1];\n\t\t\tv3[2] = array[i * 4 + 2];\n\t\t}\n\n\t\t// mat4 affine matrix applied to vector, vector interpreted as a direction.\n\t\t// Reference: https://github.com/mrdoob/three.js/blob/9f4de99828c05e71c47e6de0beb4c6e7652e486a/src/math/Vector3.js#L286-L300\n\t\tv3[0] = matrix[0] * v3[0] + matrix[4] * v3[1] + matrix[8] * v3[2];\n\t\tv3[1] = matrix[1] * v3[0] + matrix[5] * v3[1] + matrix[9] * v3[2];\n\t\tv3[2] = matrix[2] * v3[0] + matrix[6] * v3[1] + matrix[10] * v3[2];\n\t\tnormalizeVec3(v3, v3);\n\n\t\tif (normalized) {\n\t\t\tarray[i * 4] = MathUtils.decodeNormalizedInt(v3[0], componentType);\n\t\t\tarray[i * 4 + 1] = MathUtils.decodeNormalizedInt(v3[1], componentType);\n\t\t\tarray[i * 4 + 2] = MathUtils.decodeNormalizedInt(v3[2], componentType);\n\t\t} else {\n\t\t\tarray[i * 4] = v3[0];\n\t\t\tarray[i * 4 + 1] = v3[1];\n\t\t\tarray[i * 4 + 2] = v3[2];\n\t\t}\n\t}\n}\n\nfunction reversePrimitiveWindingOrder(prim: Primitive) {\n\tif (prim.getMode() !== Primitive.Mode.TRIANGLES) return;\n\tif (!prim.getIndices()) weldPrimitive(prim);\n\n\tconst indices = prim.getIndices()!;\n\tfor (let i = 0, il = indices.getCount(); i < il; i += 3) {\n\t\tconst a = indices.getScalar(i);\n\t\tconst c = indices.getScalar(i + 2);\n\t\tindices.setScalar(i, c);\n\t\tindices.setScalar(i + 2, a);\n\t}\n}\n","import { mat4, Mesh, Primitive } from '@gltf-transform/core';\nimport { transformPrimitive } from './transform-primitive.js';\nimport { compactPrimitive } from './compact-primitive.js';\n\n/**\n * Applies a transform matrix to every {@link Primitive} in the given {@link Mesh}.\n *\n * For every Primitive in the Mesh, the operation first applies\n * {@link compactPrimitive} to isolate vertex streams, then calls\n * {@link transformPrimitive}. Transformed Mesh will no longer share vertex\n * attributes with any other Meshes — attributes are cloned before\n * transformation.\n *\n * Example:\n *\n * ```javascript\n * import { fromTranslation } from 'gl-matrix/mat4';\n * import { transformMesh } from '@gltf-transform/functions';\n *\n * // offset vertices, y += 10.\n * transformMesh(mesh, fromTranslation([], [0, 10, 0]));\n * ```\n *\n * @param mesh\n * @param matrix\n */\nexport function transformMesh(mesh: Mesh, matrix: mat4): void {\n\t// If primitives or morph targets are shared by other meshes, detach them.\n\tfor (const srcPrim of mesh.listPrimitives()) {\n\t\tconst dstPrim = shallowClonePrimitive(srcPrim, mesh);\n\t\tif (srcPrim !== dstPrim) {\n\t\t\tmesh.removePrimitive(srcPrim).addPrimitive(dstPrim);\n\t\t}\n\t}\n\n\t// Isolate vertex streams, remove unused vertices, and transform.\n\tfor (const prim of mesh.listPrimitives()) {\n\t\tcompactPrimitive(prim);\n\t\ttransformPrimitive(prim, matrix);\n\t}\n}\n\n/**\n * Conditionally clones a {@link Primitive} and its\n * {@link PrimitiveTarget PrimitiveTargets}, if any are shared with other\n * parents. If nothing is shared, nothing is cloned. Accessors and materials\n * are not cloned.\n *\n * @hidden\n * @internal\n */\nfunction shallowClonePrimitive(prim: Primitive, parentMesh: Mesh): Primitive {\n\tconst isSharedPrimitive = prim.listParents().some((parent) => parent instanceof Mesh && parent !== parentMesh);\n\tif (isSharedPrimitive) {\n\t\tprim = prim.clone();\n\t}\n\n\tfor (const target of prim.listTargets()) {\n\t\tconst isSharedTarget = target.listParents().some((parent) => parent instanceof Primitive && parent !== prim);\n\t\tif (isSharedTarget) {\n\t\t\tprim.removeTarget(target).addTarget(target.clone());\n\t\t}\n\t}\n\n\treturn prim;\n}\n","import { mat4, MathUtils, Node } from '@gltf-transform/core';\nimport { multiply as multiplyMat4 } from 'gl-matrix/mat4';\nimport { transformMesh } from './transform-mesh.js';\n\n// biome-ignore format: Readability.\nconst IDENTITY: mat4 = [\n  1, 0, 0, 0,\n  0, 1, 0, 0,\n  0, 0, 1, 0,\n  0, 0, 0, 1\n];\n\n/**\n * Clears local transform of the {@link Node}, applying the transform to children and meshes.\n *\n * - Applies transform to children\n * - Applies transform to {@link Mesh mesh}\n * - Resets {@link Light lights}, {@link Camera cameras}, and other attachments to the origin\n *\n * Example:\n *\n * ```typescript\n * import { clearNodeTransform } from '@gltf-transform/functions';\n *\n * node.getTranslation(); // → [ 5, 0, 0 ]\n * node.getMesh(); // → vertex data centered at origin\n *\n * clearNodeTransform(node);\n *\n * node.getTranslation(); // → [ 0, 0, 0 ]\n * node.getMesh(); // → vertex data centered at [ 5, 0, 0 ]\n * ```\n *\n * To clear _all_ transforms of a Node, first clear its inherited transforms with\n * {@link clearNodeParent}, then clear the local transform with {@link clearNodeTransform}.\n */\nexport function clearNodeTransform(node: Node): Node {\n\tconst mesh = node.getMesh();\n\tconst localMatrix = node.getMatrix();\n\n\tif (mesh && !MathUtils.eq(localMatrix, IDENTITY)) {\n\t\ttransformMesh(mesh, localMatrix);\n\t}\n\n\tfor (const child of node.listChildren()) {\n\t\tconst matrix = child.getMatrix();\n\t\tmultiplyMat4(matrix, matrix, localMatrix);\n\t\tchild.setMatrix(matrix);\n\t}\n\n\treturn node.setMatrix(IDENTITY);\n}\n","import { ComponentTypeToTypedArray, Document, Primitive } from '@gltf-transform/core';\nimport { getGLPrimitiveCount, shallowCloneAccessor } from './utils.js';\nimport { weldPrimitive } from './weld.js';\n\nconst { LINES, LINE_STRIP, LINE_LOOP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN } = Primitive.Mode;\n\n/**\n * Converts a LINE_STRIP or LINE_LOOP {@link Primitive} to LINES, which is\n * more widely supported. Any other topology given as input (points or\n * triangles) will throw an error.\n *\n * Example:\n *\n * ```javascript\n * import { convertPrimitiveToLines } from '@gltf-transform/functions';\n *\n * console.log(prim.getMode()); // 2 (LINE_LOOP)\n * convertPrimitiveToLines(prim);\n * console.log(prim.getMode()); // 1 (LINES)\n * ```\n */\nexport function convertPrimitiveToLines(prim: Primitive): void {\n\tconst graph = prim.getGraph();\n\tconst document = Document.fromGraph(graph)!;\n\n\t// Ensure indexed primitive.\n\tif (!prim.getIndices()) {\n\t\tweldPrimitive(prim);\n\t}\n\n\t// Allocate indices new GL primitives.\n\tconst srcIndices = prim.getIndices()!;\n\tconst srcIndicesArray = srcIndices.getArray()!;\n\tconst dstGLPrimitiveCount = getGLPrimitiveCount(prim);\n\tconst IndicesArray = ComponentTypeToTypedArray[srcIndices.getComponentType()];\n\tconst dstIndicesArray = new IndicesArray(dstGLPrimitiveCount * 2);\n\n\t// Generate GL primitives.\n\tconst srcMode = prim.getMode();\n\tif (srcMode === LINE_STRIP) {\n\t\t// https://glasnost.itcarlow.ie/~powerk/opengl/primitives/primitives.htm\n\t\tfor (let i = 0; i < dstGLPrimitiveCount; i++) {\n\t\t\tdstIndicesArray[i * 2] = srcIndicesArray[i];\n\t\t\tdstIndicesArray[i * 2 + 1] = srcIndicesArray[i + 1];\n\t\t}\n\t} else if (srcMode === LINE_LOOP) {\n\t\t// https://glasnost.itcarlow.ie/~powerk/opengl/primitives/primitives.htm\n\t\tfor (let i = 0; i < dstGLPrimitiveCount; i++) {\n\t\t\tif (i < dstGLPrimitiveCount - 1) {\n\t\t\t\tdstIndicesArray[i * 2] = srcIndicesArray[i];\n\t\t\t\tdstIndicesArray[i * 2 + 1] = srcIndicesArray[i + 1];\n\t\t\t} else {\n\t\t\t\tdstIndicesArray[i * 2] = srcIndicesArray[i];\n\t\t\t\tdstIndicesArray[i * 2 + 1] = srcIndicesArray[0];\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthrow new Error('Only LINE_STRIP and LINE_LOOP may be converted to LINES.');\n\t}\n\n\t// Update prim mode and indices.\n\tprim.setMode(LINES);\n\tconst root = document.getRoot();\n\tif (srcIndices.listParents().some((parent) => parent !== root && parent !== prim)) {\n\t\tprim.setIndices(shallowCloneAccessor(document, srcIndices).setArray(dstIndicesArray));\n\t} else {\n\t\tsrcIndices.setArray(dstIndicesArray);\n\t}\n}\n\n/**\n * Converts a TRIANGLE_STRIP or TRIANGLE_LOOP {@link Primitive} to TRIANGLES,\n * which is more widely supported. Any other topology given as input (points or\n * lines) will throw an error.\n *\n * Example:\n *\n * ```javascript\n * import { convertPrimitiveToTriangles } from '@gltf-transform/functions';\n *\n * console.log(prim.getMode()); // 5 (TRIANGLE_STRIP)\n * convertPrimitiveToTriangles(prim);\n * console.log(prim.getMode()); // 4 (TRIANGLES)\n * ```\n */\nexport function convertPrimitiveToTriangles(prim: Primitive): void {\n\tconst graph = prim.getGraph();\n\tconst document = Document.fromGraph(graph)!;\n\n\t// Ensure indexed primitive.\n\tif (!prim.getIndices()) {\n\t\tweldPrimitive(prim);\n\t}\n\n\t// Allocate indices new GL primitives.\n\tconst srcIndices = prim.getIndices()!;\n\tconst srcIndicesArray = srcIndices.getArray()!;\n\tconst dstGLPrimitiveCount = getGLPrimitiveCount(prim);\n\tconst IndicesArray = ComponentTypeToTypedArray[srcIndices.getComponentType()];\n\tconst dstIndicesArray = new IndicesArray(dstGLPrimitiveCount * 3);\n\n\t// Generate GL primitives.\n\tconst srcMode = prim.getMode();\n\tif (srcMode === TRIANGLE_STRIP) {\n\t\t// https://en.wikipedia.org/wiki/Triangle_strip\n\t\tfor (let i = 0, il = srcIndicesArray.length; i < il - 2; i++) {\n\t\t\tif (i % 2) {\n\t\t\t\tdstIndicesArray[i * 3] = srcIndicesArray[i + 1];\n\t\t\t\tdstIndicesArray[i * 3 + 1] = srcIndicesArray[i];\n\t\t\t\tdstIndicesArray[i * 3 + 2] = srcIndicesArray[i + 2];\n\t\t\t} else {\n\t\t\t\tdstIndicesArray[i * 3] = srcIndicesArray[i];\n\t\t\t\tdstIndicesArray[i * 3 + 1] = srcIndicesArray[i + 1];\n\t\t\t\tdstIndicesArray[i * 3 + 2] = srcIndicesArray[i + 2];\n\t\t\t}\n\t\t}\n\t} else if (srcMode === TRIANGLE_FAN) {\n\t\t// https://en.wikipedia.org/wiki/Triangle_fan\n\t\tfor (let i = 0; i < dstGLPrimitiveCount; i++) {\n\t\t\tdstIndicesArray[i * 3] = srcIndicesArray[0];\n\t\t\tdstIndicesArray[i * 3 + 1] = srcIndicesArray[i + 1];\n\t\t\tdstIndicesArray[i * 3 + 2] = srcIndicesArray[i + 2];\n\t\t}\n\t} else {\n\t\tthrow new Error('Only TRIANGLE_STRIP and TRIANGLE_FAN may be converted to TRIANGLES.');\n\t}\n\n\t// Update prim mode and indices.\n\tprim.setMode(TRIANGLES);\n\tconst root = document.getRoot();\n\tif (srcIndices.listParents().some((parent) => parent !== root && parent !== prim)) {\n\t\tprim.setIndices(shallowCloneAccessor(document, srcIndices).setArray(dstIndicesArray));\n\t} else {\n\t\tsrcIndices.setArray(dstIndicesArray);\n\t}\n}\n","import {\n\tMathUtils,\n\ttype Accessor,\n\ttype Document,\n\ttype GLTF,\n\ttype Primitive,\n\ttype Transform,\n\tTypedArray,\n} from '@gltf-transform/core';\nimport { KHRMeshQuantization } from '@gltf-transform/extensions';\nimport { assignDefaults, createTransform } from './utils.js';\n\nconst NAME = 'dequantize';\n\n/** Options for the {@link dequantize} function. */\nexport interface DequantizeOptions {\n\t/**\n\t * Pattern (regex) used to filter vertex attribute semantics for quantization.\n\t * Default: `/^((?!JOINTS_).)*$/`.\n\t */\n\tpattern?: RegExp;\n}\n\nconst DEQUANTIZE_DEFAULTS: Required<DequantizeOptions> = {\n\tpattern: /^((?!JOINTS_).)*$/,\n};\n\n/**\n * Dequantize {@link Primitive Primitives}, removing {@link KHRMeshQuantization `KHR_mesh_quantization`}\n * if present. Dequantization will increase the size of the mesh on disk and in memory, but may be\n * necessary for compatibility with applications that don't support quantization.\n *\n * Example:\n *\n * ```javascript\n * import { dequantizePrimitive } from '@gltf-transform/functions';\n *\n * await document.transform(dequantize());\n * ```\n *\n * @category Transforms\n */\nexport function dequantize(_options: DequantizeOptions = DEQUANTIZE_DEFAULTS): Transform {\n\tconst options = assignDefaults(DEQUANTIZE_DEFAULTS, _options);\n\n\treturn createTransform(NAME, (doc: Document): void => {\n\t\tconst logger = doc.getLogger();\n\t\tfor (const mesh of doc.getRoot().listMeshes()) {\n\t\t\tfor (const prim of mesh.listPrimitives()) {\n\t\t\t\tdequantizePrimitive(prim, options);\n\t\t\t}\n\t\t}\n\t\tdoc.createExtension(KHRMeshQuantization).dispose();\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\n/**\n * Dequantize a single {@link Primitive}, converting all vertex attributes to float32. Dequantization\n * will increase the size of the mesh on disk and in memory, but may be necessary for compatibility\n * with applications that don't support quantization.\n *\n * Example:\n *\n * ```javascript\n * import { dequantizePrimitive } from '@gltf-transform/functions';\n *\n * const mesh = document.getRoot().listMeshes().find((mesh) => mesh.getName() === 'MyMesh');\n *\n * for (const prim of mesh.listPrimitives()) {\n * \tdequantizePrimitive(prim);\n * }\n * ```\n */\nexport function dequantizePrimitive(prim: Primitive, _options = DEQUANTIZE_DEFAULTS): void {\n\tconst options = assignDefaults(DEQUANTIZE_DEFAULTS, _options);\n\n\tfor (const semantic of prim.listSemantics()) {\n\t\tif (options.pattern.test(semantic)) {\n\t\t\tdequantizeAttribute(prim.getAttribute(semantic)!);\n\t\t}\n\t}\n\n\tfor (const target of prim.listTargets()) {\n\t\tfor (const semantic of target.listSemantics()) {\n\t\t\tif (options.pattern.test(semantic)) {\n\t\t\t\tdequantizeAttribute(target.getAttribute(semantic)!);\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function dequantizeAttribute(attribute: Accessor): void {\n\tconst srcArray = attribute.getArray();\n\tif (!srcArray) return;\n\n\tconst dstArray = dequantizeAttributeArray(srcArray, attribute.getComponentType(), attribute.getNormalized());\n\n\tattribute.setArray(dstArray).setNormalized(false);\n}\n\nexport function dequantizeAttributeArray(\n\tsrcArray: TypedArray,\n\tcomponentType: GLTF.AccessorComponentType,\n\tnormalized: boolean,\n): Float32Array {\n\tconst dstArray = new Float32Array(srcArray.length);\n\n\tfor (let i = 0, il = srcArray.length; i < il; i++) {\n\t\tif (normalized) {\n\t\t\tdstArray[i] = MathUtils.decodeNormalizedInt(srcArray[i], componentType);\n\t\t} else {\n\t\t\tdstArray[i] = srcArray[i];\n\t\t}\n\t}\n\n\treturn dstArray;\n}\n","import { Document, Extension, Graph, Property, PropertyResolver, PropertyType } from '@gltf-transform/core';\n\nconst { TEXTURE_INFO, ROOT } = PropertyType;\ntype PropertyConstructor = new (g: Graph<Property>) => Property;\n\nconst NO_TRANSFER_TYPES = new Set<string>([TEXTURE_INFO, ROOT]);\n\n/**\n * Clones source {@link Document}, copying all properties and extensions within\n * it. Source document remains unchanged, and the two may be modified\n * independently after cloning.\n *\n * Example:\n *\n * ```javascript\n *\timport { cloneDocument } from '@gltf-transform/functions';\n *\n *\tconst targetDocument = cloneDocument(sourceDocument);\n * ```\n */\nexport function cloneDocument(source: Document): Document {\n\tconst target = new Document().setLogger(source.getLogger());\n\tconst resolve = createDefaultPropertyResolver(target, source);\n\tmergeDocuments(target, source, resolve);\n\n\t// Root properties (name, asset, default scene, extras) are not overwritten by\n\t// mergeDocuments(), and should be explicitly copied when cloning.\n\t// biome-ignore lint/suspicious/noExplicitAny: TODO\n\ttarget.getRoot().copy(source.getRoot(), resolve as any);\n\n\treturn target;\n}\n\n/**\n * Merges contents of source {@link Document} into target Document, without\n * modifying the source. Any extensions missing from the target will be added\n * {@link Scene Scenes} and {@link Buffer Buffers} are not combined —\n * the target Document may contain multiple Scenes and Buffers after this\n * operation. These may be cleaned up manually (see {@link unpartition}),\n * or document contents may be merged more granularly using\n * {@link copyToDocument}.\n *\n * Example:\n *\n * ```javascript\n *\timport { mergeDocuments, unpartition } from '@gltf-transform/functions';\n *\n *\t// Merge contents of sourceDocument into targetDocument.\n *\tmergeDocuments(targetDocument, sourceDocument);\n *\n *\t// (Optional) Remove all but one Buffer from the target Document.\n *\tawait targetDocument.transform(unpartition());\n * ```\n *\n * To merge several Scenes into one:\n *\n * ```javascript\n * import { mergeDocuments } from '@gltf-transform/functions';\n *\n * const map = mergeDocuments(targetDocument, sourceDocument);\n *\n * // Find original Scene.\n * const sceneA = targetDocument.getRoot().listScenes()[0];\n *\n * // Find counterpart of the source Scene in the target Document.\n * const sceneB = map.get(sourceDocument.getRoot().listScenes()[0]);\n *\n * // Create a Node, and append source Scene's direct children.\n * const rootNode = targetDocument.createNode()\n *\t\t.setName('SceneB')\n *\t\t.setPosition([10, 0, 0]);\n * for (const node of sceneB.listChildren()) {\n *\t\trootNode.addChild(node);\n * }\n *\n * // Append Node to original Scene, and dispose the empty Scene.\n * sceneA.addChild(rootNode);\n * sceneB.dispose();\n * ```\n */\nexport function mergeDocuments(\n\ttarget: Document,\n\tsource: Document,\n\tresolve?: PropertyResolver<Property>,\n): Map<Property, Property> {\n\tresolve ||= createDefaultPropertyResolver(target, source);\n\n\tfor (const sourceExtension of source.getRoot().listExtensionsUsed()) {\n\t\tconst targetExtension = target.createExtension(sourceExtension.constructor as new (doc: Document) => Extension);\n\t\tif (sourceExtension.isRequired()) targetExtension.setRequired(true);\n\t}\n\n\t// Root properties (name, asset, default scene, extras) are not overwritten.\n\treturn _copyToDocument(target, source, listNonRootProperties(source), resolve);\n}\n\n/**\n * Moves the specified {@link Property Properties} from the source\n * {@link Document} to the target Document, and removes them from the source.\n * Dependencies of the source properties will be copied into the\n * target, but not removed from the source. Returns a Map from source\n * properties to their counterparts in the target Document.\n *\n * Example:\n *\n * ```javascript\n *\timport { moveToDocument, prune } from '@gltf-transform/functions';\n *\n *\t// Move all materials from sourceDocument to targetDocument.\n *\tconst map = moveToDocument(targetDocument, sourceDocument, sourceDocument.listMaterials());\n *\n *\t// Find the new counterpart of `sourceMaterial` in the target Document.\n *\tconst targetMaterial = map.get(sourceMaterial);\n *\n *\t// (Optional) Remove any resources (like Textures) that may now be unused\n *\t// in the source Document after their parent Materials have been moved.\n *\tawait sourceDocument.transform(prune());\n * ```\n *\n * Moving a {@link Mesh}, {@link Animation}, or another resource depending on\n * a {@link Buffer} will create a copy of the source Buffer in the target\n * Document. If the target Document should contain only one Buffer, call\n * {@link unpartition} after moving properties.\n *\n * Repeated use of `moveToDocument` may create multiple copies of some\n * resources, particularly shared dependencies like {@link Texture Textures} or\n * {@link Accessor Accessors}. While duplicates can be cleaned up with\n * {@link dedup}, it is also possible to prevent duplicates by creating and\n * reusing the same resolver for all calls to `moveToDocument`:\n *\n * ```javascript\n *\timport { moveToDocument, createDefaultPropertyResolver } from '@gltf-transform/functions';\n *\n *\tconst resolve = createDefaultPropertyResolver(targetDocument, sourceDocument);\n *\n *\t// Move materials individually, without creating duplicates of shared textures.\n *\tmoveToDocument(targetDocument, sourceDocument, materialA, resolve);\n *\tmoveToDocument(targetDocument, sourceDocument, materialB, resolve);\n *\tmoveToDocument(targetDocument, sourceDocument, materialC, resolve);\n * ```\n *\n * If the transferred properties include {@link ExtensionProperty ExtensionProperties},\n * the associated {@link Extension Extensions} must be added to the target\n * Document first:\n *\n * ```javascript\n *\tfor (const sourceExtension of source.getRoot().listExtensionsUsed()) {\n *\t\tconst targetExtension = target.createExtension(sourceExtension.constructor);\n *\t\tif (sourceExtension.isRequired()) targetExtension.setRequired(true);\n *\t}\n * ```\n *\n * {@link Root} properties cannot be moved.\n *\n * {@link TextureInfo} properties cannot be given in the property list, but\n * are handled automatically when moving a {@link Material}.\n *\n * To copy properties without removing them from the source Document, see\n * {@link copyToDocument}.\n *\n * @experimental\n */\nexport function moveToDocument(\n\ttarget: Document,\n\tsource: Document,\n\tsourceProperties: Property[],\n\tresolve?: PropertyResolver<Property>,\n): Map<Property, Property> {\n\tconst targetProperties = copyToDocument(target, source, sourceProperties, resolve);\n\n\tfor (const property of sourceProperties) {\n\t\tproperty.dispose();\n\t}\n\n\treturn targetProperties;\n}\n\n/**\n * Copies the specified {@link Property Properties} from the source\n * {@link Document} to the target Document, leaving originals in the source.\n * Dependencies of the source properties will also be copied into the\n * target. Returns a Map from source properties to their counterparts in the\n * target Document.\n *\n * Example:\n *\n * ```javascript\n *\timport { copyToDocument } from '@gltf-transform/functions';\n *\n *\t// Copy all materials from sourceDocument to targetDocument.\n *\tconst map = copyToDocument(targetDocument, sourceDocument, sourceDocument.listMaterials());\n *\n *\t// Find the new counterpart of `sourceMaterial` in the target Document.\n *\tconst targetMaterial = map.get(sourceMaterial);\n * ```\n *\n * Copying a {@link Mesh}, {@link Animation}, or another resource depending on\n * a {@link Buffer} will create a copy of the source Buffer in the target\n * Document. If the target Document should contain only one Buffer, call\n * {@link unpartition} after copying properties.\n *\n * Repeated use of `copyToDocument` may create multiple copies of some\n * resources, particularly shared dependencies like {@link Texture Textures} or\n * {@link Accessor Accessors}. While duplicates can be cleaned up with\n * {@link dedup}, it is also possible to prevent duplicates by creating and\n * reusing the same resolver for all calls to `copyToDocument`:\n *\n * ```javascript\n *\timport { copyToDocument, createDefaultPropertyResolver } from '@gltf-transform/functions';\n *\n *\tconst resolve = createDefaultPropertyResolver(targetDocument, sourceDocument);\n *\n *\t// Copy materials individually, without creating duplicates of shared textures.\n *\tcopyToDocument(targetDocument, sourceDocument, materialA, resolve);\n *\tcopyToDocument(targetDocument, sourceDocument, materialB, resolve);\n *\tcopyToDocument(targetDocument, sourceDocument, materialC, resolve);\n * ```\n *\n * If the transferred properties include {@link ExtensionProperty ExtensionProperties},\n * the associated {@link Extension Extensions} must be added to the target\n * Document first:\n *\n * ```javascript\n *\tfor (const sourceExtension of source.getRoot().listExtensionsUsed()) {\n *\t\tconst targetExtension = target.createExtension(sourceExtension.constructor);\n *\t\tif (sourceExtension.isRequired()) targetExtension.setRequired(true);\n *\t}\n * ```\n *\n * {@link Root} properties cannot be copied.\n *\n * {@link TextureInfo} properties cannot be given in the property list, but\n * are handled automatically when copying a {@link Material}.\n *\n * To move properties to the target Document without leaving copies behind in\n * the source Document, use {@link moveToDocument} or dispose the properties\n * after copying.\n *\n * @experimental\n */\nexport function copyToDocument(\n\ttarget: Document,\n\tsource: Document,\n\tsourceProperties: Property[],\n\tresolve?: PropertyResolver<Property>,\n): Map<Property, Property> {\n\tconst sourcePropertyDependencies = new Set<Property>();\n\tfor (const property of sourceProperties) {\n\t\tif (NO_TRANSFER_TYPES.has(property.propertyType)) {\n\t\t\tthrow new Error(`Type \"${property.propertyType}\" cannot be transferred.`);\n\t\t}\n\t\tlistPropertyDependencies(property, sourcePropertyDependencies);\n\t}\n\treturn _copyToDocument(target, source, Array.from(sourcePropertyDependencies), resolve);\n}\n\n/** @internal */\nfunction _copyToDocument(\n\ttarget: Document,\n\tsource: Document,\n\tsourceProperties: Property[],\n\tresolve?: PropertyResolver<Property>,\n): Map<Property, Property> {\n\tresolve ||= createDefaultPropertyResolver(target, source);\n\n\t// Create stub classes for every Property in other Document.\n\tconst propertyMap = new Map<Property, Property>();\n\tfor (const sourceProp of sourceProperties) {\n\t\t// TextureInfo copy handled by Material or ExtensionProperty.\n\t\tif (!propertyMap.has(sourceProp) && sourceProp.propertyType !== TEXTURE_INFO) {\n\t\t\tpropertyMap.set(sourceProp, resolve(sourceProp));\n\t\t}\n\t}\n\n\t// Assemble relationships between Properties.\n\tfor (const [sourceProp, targetProp] of propertyMap.entries()) {\n\t\ttargetProp.copy(sourceProp, resolve);\n\t}\n\n\treturn propertyMap;\n}\n\n/**\n * Creates a default `resolve` implementation. May be used when moving\n * properties between {@link Document Documents} with {@link mergeDocuments},\n * {@link copyToDocument}, and {@link moveToDocument}. When the same resolver\n * is passed to multiple invocations, these functions will reuse previously-\n * transferred resources.\n *\n * @experimental\n */\nexport function createDefaultPropertyResolver(target: Document, source: Document): PropertyResolver<Property> {\n\tconst propertyMap = new Map<Property, Property>([[source.getRoot(), target.getRoot()]]);\n\n\treturn (sourceProp: Property): Property => {\n\t\t// TextureInfo lifecycle is bound to a Material or ExtensionProperty.\n\t\tif (sourceProp.propertyType === TEXTURE_INFO) return sourceProp;\n\n\t\tlet targetProp = propertyMap.get(sourceProp);\n\t\tif (!targetProp) {\n\t\t\t// Create stub class, defer copying properties.\n\t\t\tconst PropertyClass = sourceProp.constructor as PropertyConstructor;\n\t\t\ttargetProp = new PropertyClass(target.getGraph());\n\t\t\tpropertyMap.set(sourceProp, targetProp);\n\t\t}\n\n\t\treturn targetProp;\n\t};\n}\n\n/** @internal */\nfunction listPropertyDependencies(parent: Property, visited: Set<Property>): Set<Property> {\n\tconst graph = parent.getGraph();\n\tconst queue: Property[] = [parent];\n\n\tlet next: Property | undefined = undefined;\n\twhile ((next = queue.pop())) {\n\t\tvisited.add(next);\n\t\tfor (const child of graph.listChildren(next)) {\n\t\t\tif (!visited.has(child)) {\n\t\t\t\tqueue.push(child);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn visited;\n}\n\n/** @internal */\nfunction listNonRootProperties(document: Document): Property[] {\n\tconst visited = new Set<Property>();\n\tfor (const edge of document.getGraph().listEdges()) {\n\t\tvisited.add(edge.getChild());\n\t}\n\treturn Array.from(visited);\n}\n","import type { Document, Transform } from '@gltf-transform/core';\nimport { KHRDracoMeshCompression } from '@gltf-transform/extensions';\nimport { assignDefaults, createTransform } from './utils.js';\nimport { weld } from './weld.js';\n\nconst NAME = 'draco';\n\nexport interface DracoOptions {\n\tmethod?: 'edgebreaker' | 'sequential';\n\tencodeSpeed?: number;\n\tdecodeSpeed?: number;\n\tquantizePosition?: number;\n\tquantizeNormal?: number;\n\tquantizeColor?: number;\n\tquantizeTexcoord?: number;\n\tquantizeGeneric?: number;\n\tquantizationVolume?: 'mesh' | 'scene';\n}\n\nexport const DRACO_DEFAULTS: Required<DracoOptions> = {\n\tmethod: 'edgebreaker',\n\tencodeSpeed: 5,\n\tdecodeSpeed: 5,\n\tquantizePosition: 14,\n\tquantizeNormal: 10,\n\tquantizeColor: 8,\n\tquantizeTexcoord: 12,\n\tquantizeGeneric: 12,\n\tquantizationVolume: 'mesh',\n};\n\n/**\n * Applies Draco compression using {@link KHRDracoMeshCompression KHR_draco_mesh_compression}.\n * Draco compression can reduce the size of triangle geometry.\n *\n * This function is a thin wrapper around the {@link KHRDracoMeshCompression} extension.\n *\n * ### Example\n *\n * ```typescript\n * import { NodeIO } from '@gltf-transform/core';\n * import { KHRDracoMeshCompression } from '@gltf-transform/extensions';\n * import { draco } from '@gltf-transform/functions';\n * import draco3d from 'draco3dgltf';\n *\n * const io = new NodeIO()\n * \t.registerExtensions([KHRDracoMeshCompression])\n * \t.registerDependencies({\n * \t\t'draco3d.encoder': await draco3d.createEncoderModule()\n * \t});\n *\n * await document.transform(\n *   draco({method: 'edgebreaker'})\n * );\n *\n * await io.write('compressed.glb', document);\n * ```\n *\n * Compression is deferred until generating output with an I/O class.\n *\n * @category Transforms\n */\nexport function draco(_options: DracoOptions = DRACO_DEFAULTS): Transform {\n\tconst options = assignDefaults(DRACO_DEFAULTS, _options);\n\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tawait document.transform(weld());\n\t\tdocument\n\t\t\t.createExtension(KHRDracoMeshCompression)\n\t\t\t.setRequired(true)\n\t\t\t.setEncoderOptions({\n\t\t\t\tmethod:\n\t\t\t\t\toptions.method === 'edgebreaker'\n\t\t\t\t\t\t? KHRDracoMeshCompression.EncoderMethod.EDGEBREAKER\n\t\t\t\t\t\t: KHRDracoMeshCompression.EncoderMethod.SEQUENTIAL,\n\t\t\t\tencodeSpeed: options.encodeSpeed,\n\t\t\t\tdecodeSpeed: options.decodeSpeed,\n\t\t\t\tquantizationBits: {\n\t\t\t\t\tPOSITION: options.quantizePosition,\n\t\t\t\t\tNORMAL: options.quantizeNormal,\n\t\t\t\t\tCOLOR: options.quantizeColor,\n\t\t\t\t\tTEX_COORD: options.quantizeTexcoord,\n\t\t\t\t\tGENERIC: options.quantizeGeneric,\n\t\t\t\t},\n\t\t\t\tquantizationVolume: options.quantizationVolume,\n\t\t\t});\n\t});\n}\n","import { Document, Node, PropertyType, Transform } from '@gltf-transform/core';\nimport { clearNodeParent } from './clear-node-parent.js';\nimport { prune } from './prune.js';\nimport { assignDefaults, createTransform } from './utils.js';\n\nconst NAME = 'flatten';\n\n/** Options for the {@link flatten} function. */\nexport interface FlattenOptions {\n\t/**\n\t * Whether to perform cleanup steps after completing the operation. Recommended, and enabled by\n\t * default. Cleanup removes temporary resources created during the operation, but may also remove\n\t * pre-existing unused or duplicate resources in the {@link Document}. Applications that require\n\t * keeping these resources may need to disable cleanup, instead calling {@link dedup} and\n\t * {@link prune} manually (with customized options) later in the processing pipeline.\n\t * @experimental\n\t */\n\tcleanup?: boolean;\n}\n\nexport const FLATTEN_DEFAULTS: Required<FlattenOptions> = {\n\tcleanup: true,\n};\n\n/**\n * Flattens the scene graph, leaving {@link Node Nodes} with\n * {@link Mesh Meshes}, {@link Camera Cameras}, and other attachments\n * as direct children of the {@link Scene}. Skeletons and their\n * descendants are left in their original Node structure.\n *\n * {@link Animation} targeting a Node or its parents will\n * prevent that Node from being moved.\n *\n * Example:\n *\n * ```ts\n * import { flatten } from '@gltf-transform/functions';\n *\n * await document.transform(flatten());\n * ```\n *\n * @category Transforms\n */\nexport function flatten(_options: FlattenOptions = FLATTEN_DEFAULTS): Transform {\n\tconst options = assignDefaults(FLATTEN_DEFAULTS, _options);\n\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tconst root = document.getRoot();\n\t\tconst logger = document.getLogger();\n\n\t\t// (1) Mark joints.\n\t\tconst joints = new Set<Node>();\n\t\tfor (const skin of root.listSkins()) {\n\t\t\tfor (const joint of skin.listJoints()) {\n\t\t\t\tjoints.add(joint);\n\t\t\t}\n\t\t}\n\n\t\t// (2) Mark nodes with TRS animation.\n\t\tconst animated = new Set<Node>();\n\t\tfor (const animation of root.listAnimations()) {\n\t\t\tfor (const channel of animation.listChannels()) {\n\t\t\t\tconst node = channel.getTargetNode();\n\t\t\t\tif (node && channel.getTargetPath() !== 'weights') {\n\t\t\t\t\tanimated.add(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// (3) Mark descendants of joints and animated nodes.\n\t\tconst hasJointParent = new Set<Node>();\n\t\tconst hasAnimatedParent = new Set<Node>();\n\t\tfor (const scene of root.listScenes()) {\n\t\t\tscene.traverse((node) => {\n\t\t\t\tconst parent = node.getParentNode();\n\t\t\t\tif (!parent) return;\n\t\t\t\tif (joints.has(parent) || hasJointParent.has(parent)) {\n\t\t\t\t\thasJointParent.add(node);\n\t\t\t\t}\n\t\t\t\tif (animated.has(parent) || hasAnimatedParent.has(parent)) {\n\t\t\t\t\thasAnimatedParent.add(node);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// (4) For each affected node, in top-down order, clear parents.\n\t\tfor (const scene of root.listScenes()) {\n\t\t\tscene.traverse((node) => {\n\t\t\t\tif (animated.has(node)) return;\n\t\t\t\tif (hasJointParent.has(node)) return;\n\t\t\t\tif (hasAnimatedParent.has(node)) return;\n\n\t\t\t\tclearNodeParent(node);\n\t\t\t});\n\t\t}\n\n\t\t// TODO(feat): Transform animation channels, accounting for previously inherited transforms.\n\t\tif (animated.size) {\n\t\t\tlogger.debug(`${NAME}: Flattening node hierarchies with TRS animation not yet supported.`);\n\t\t}\n\n\t\t// (5) Clean up leaf nodes.\n\t\tif (options.cleanup) {\n\t\t\tawait document.transform(prune({ propertyTypes: [PropertyType.NODE], keepLeaves: false }));\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n","import { Scene, Node, getBounds as _getBounds, bbox } from '@gltf-transform/core';\n\n/**\n * Computes bounding box (AABB) in world space for the given {@link Node} or {@link Scene}.\n *\n * Example:\n *\n * ```ts\n * import { getBounds } from '@gltf-transform/functions';\n *\n * const {min, max} = getBounds(scene);\n * ```\n */\nexport function getBounds(node: Node | Scene): bbox {\n\treturn _getBounds(node);\n}\n","import {\n\tAccessor,\n\tDocument,\n\tExtensionProperty,\n\tGLTF,\n\tImageUtils,\n\tTexture,\n\tgetBounds,\n\tPropertyType,\n} from '@gltf-transform/core';\nimport { getGLPrimitiveCount } from './utils.js';\nimport { KHR_DF_MODEL_ETC1S, KHR_DF_MODEL_UASTC, read as readKTX } from 'ktx-parse';\nimport { VertexCountMethod, getMeshVertexCount, getSceneVertexCount } from './get-vertex-count.js';\n\n/** Inspects the contents of a glTF file and returns a JSON report. */\nexport function inspect(doc: Document): InspectReport {\n\treturn {\n\t\tscenes: listScenes(doc),\n\t\tmeshes: listMeshes(doc),\n\t\tmaterials: listMaterials(doc),\n\t\ttextures: listTextures(doc),\n\t\tanimations: listAnimations(doc),\n\t};\n}\n\n/** List scenes. */\nfunction listScenes(doc: Document): InspectPropertyReport<InspectSceneReport> {\n\tconst scenes = doc\n\t\t.getRoot()\n\t\t.listScenes()\n\t\t.map((scene) => {\n\t\t\tconst root = scene.listChildren()[0];\n\t\t\tconst sceneBounds = getBounds(scene);\n\t\t\treturn {\n\t\t\t\tname: scene.getName(),\n\t\t\t\trootName: root ? root.getName() : '',\n\t\t\t\tbboxMin: toPrecision(sceneBounds.min),\n\t\t\t\tbboxMax: toPrecision(sceneBounds.max),\n\t\t\t\trenderVertexCount: getSceneVertexCount(scene, VertexCountMethod.RENDER),\n\t\t\t\tuploadVertexCount: getSceneVertexCount(scene, VertexCountMethod.UPLOAD),\n\t\t\t\tuploadNaiveVertexCount: getSceneVertexCount(scene, VertexCountMethod.UPLOAD_NAIVE),\n\t\t\t};\n\t\t});\n\treturn { properties: scenes };\n}\n\n/** List meshes. */\nfunction listMeshes(doc: Document): InspectPropertyReport<InspectMeshReport> {\n\tconst meshes: InspectMeshReport[] = doc\n\t\t.getRoot()\n\t\t.listMeshes()\n\t\t.map((mesh) => {\n\t\t\tconst instances = mesh.listParents().filter((parent) => parent.propertyType !== PropertyType.ROOT).length;\n\t\t\tlet glPrimitives = 0;\n\t\t\tconst semantics = new Set<string>();\n\t\t\tconst meshIndices = new Set<string>();\n\t\t\tconst meshAccessors: Set<Accessor> = new Set();\n\n\t\t\tmesh.listPrimitives().forEach((prim) => {\n\t\t\t\tfor (const semantic of prim.listSemantics()) {\n\t\t\t\t\tconst attr = prim.getAttribute(semantic)!;\n\t\t\t\t\tsemantics.add(semantic + ':' + accessorToTypeLabel(attr));\n\t\t\t\t\tmeshAccessors.add(attr);\n\t\t\t\t}\n\t\t\t\tfor (const targ of prim.listTargets()) {\n\t\t\t\t\ttarg.listAttributes().forEach((attr) => meshAccessors.add(attr));\n\t\t\t\t}\n\t\t\t\tconst indices = prim.getIndices();\n\t\t\t\tif (indices) {\n\t\t\t\t\tmeshIndices.add(accessorToTypeLabel(indices));\n\t\t\t\t\tmeshAccessors.add(indices);\n\t\t\t\t}\n\t\t\t\tglPrimitives += getGLPrimitiveCount(prim);\n\t\t\t});\n\n\t\t\tlet size = 0;\n\t\t\tArray.from(meshAccessors).forEach((a) => (size += a.getArray()!.byteLength));\n\n\t\t\tconst modes = mesh.listPrimitives().map((prim) => MeshPrimitiveModeLabels[prim.getMode()]);\n\n\t\t\treturn {\n\t\t\t\tname: mesh.getName(),\n\t\t\t\tmode: Array.from(new Set(modes)),\n\t\t\t\tmeshPrimitives: mesh.listPrimitives().length,\n\t\t\t\tglPrimitives: glPrimitives,\n\t\t\t\tvertices: getMeshVertexCount(mesh, VertexCountMethod.UPLOAD),\n\t\t\t\tindices: Array.from(meshIndices).sort(),\n\t\t\t\tattributes: Array.from(semantics).sort(),\n\t\t\t\tinstances: instances,\n\t\t\t\tsize: size,\n\t\t\t};\n\t\t});\n\n\treturn { properties: meshes };\n}\n\n/** List materials. */\nfunction listMaterials(doc: Document): InspectPropertyReport<InspectMaterialReport> {\n\tconst materials: InspectMaterialReport[] = doc\n\t\t.getRoot()\n\t\t.listMaterials()\n\t\t.map((material) => {\n\t\t\tconst instances = material\n\t\t\t\t.listParents()\n\t\t\t\t.filter((parent) => parent.propertyType !== PropertyType.ROOT).length;\n\n\t\t\t// Find all texture slots attached to this material or its extensions.\n\t\t\tconst extensions = new Set<ExtensionProperty>(material.listExtensions());\n\t\t\tconst slots = doc\n\t\t\t\t.getGraph()\n\t\t\t\t.listEdges()\n\t\t\t\t.filter((ref) => {\n\t\t\t\t\tconst child = ref.getChild();\n\t\t\t\t\tconst parent = ref.getParent();\n\t\t\t\t\tif (child instanceof Texture && parent === material) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (child instanceof Texture && parent instanceof ExtensionProperty && extensions.has(parent)) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t})\n\t\t\t\t.map((ref) => ref.getName());\n\n\t\t\treturn {\n\t\t\t\tname: material.getName(),\n\t\t\t\tinstances,\n\t\t\t\ttextures: slots,\n\t\t\t\talphaMode: material.getAlphaMode(),\n\t\t\t\tdoubleSided: material.getDoubleSided(),\n\t\t\t};\n\t\t});\n\n\treturn { properties: materials };\n}\n\n/** List textures. */\nfunction listTextures(doc: Document): InspectPropertyReport<InspectTextureReport> {\n\tconst textures: InspectTextureReport[] = doc\n\t\t.getRoot()\n\t\t.listTextures()\n\t\t.map((texture) => {\n\t\t\tconst instances = texture\n\t\t\t\t.listParents()\n\t\t\t\t.filter((parent) => parent.propertyType !== PropertyType.ROOT).length;\n\n\t\t\tconst slots = doc\n\t\t\t\t.getGraph()\n\t\t\t\t.listParentEdges(texture)\n\t\t\t\t.filter((edge) => edge.getParent().propertyType !== PropertyType.ROOT)\n\t\t\t\t.map((edge) => edge.getName());\n\n\t\t\tconst resolution = ImageUtils.getSize(texture.getImage()!, texture.getMimeType());\n\n\t\t\tlet compression = '';\n\t\t\tif (texture.getMimeType() === 'image/ktx2') {\n\t\t\t\tconst container = readKTX(texture.getImage()!);\n\t\t\t\tconst dfd = container.dataFormatDescriptor[0];\n\t\t\t\tif (dfd.colorModel === KHR_DF_MODEL_ETC1S) {\n\t\t\t\t\tcompression = 'ETC1S';\n\t\t\t\t} else if (dfd.colorModel === KHR_DF_MODEL_UASTC) {\n\t\t\t\t\tcompression = 'UASTC';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tname: texture.getName(),\n\t\t\t\turi: texture.getURI(),\n\t\t\t\tslots: Array.from(new Set(slots)),\n\t\t\t\tinstances,\n\t\t\t\tmimeType: texture.getMimeType(),\n\t\t\t\tcompression,\n\t\t\t\tresolution: resolution ? resolution.join('x') : '',\n\t\t\t\tsize: texture.getImage()!.byteLength,\n\t\t\t\tgpuSize: ImageUtils.getVRAMByteLength(texture.getImage()!, texture.getMimeType()),\n\t\t\t};\n\t\t});\n\n\treturn { properties: textures };\n}\n\n/** List animations. */\nfunction listAnimations(doc: Document): InspectPropertyReport<InspectAnimationReport> {\n\tconst animations: InspectAnimationReport[] = doc\n\t\t.getRoot()\n\t\t.listAnimations()\n\t\t.map((anim) => {\n\t\t\tlet minTime = Infinity;\n\t\t\tlet maxTime = -Infinity;\n\t\t\tanim.listSamplers().forEach((sampler) => {\n\t\t\t\tconst input = sampler.getInput();\n\t\t\t\tif (!input) return;\n\t\t\t\tminTime = Math.min(minTime, input.getMin([])[0]);\n\t\t\t\tmaxTime = Math.max(maxTime, input.getMax([])[0]);\n\t\t\t});\n\n\t\t\tlet size = 0;\n\t\t\tlet keyframes = 0;\n\t\t\tconst accessors: Set<Accessor> = new Set();\n\t\t\tanim.listSamplers().forEach((sampler) => {\n\t\t\t\tconst input = sampler.getInput();\n\t\t\t\tconst output = sampler.getOutput();\n\t\t\t\tif (!input) return;\n\t\t\t\tkeyframes += input.getCount();\n\t\t\t\taccessors.add(input);\n\t\t\t\tif (!output) return;\n\t\t\t\taccessors.add(output);\n\t\t\t});\n\t\t\tArray.from(accessors).forEach((accessor) => {\n\t\t\t\tsize += accessor.getArray()!.byteLength;\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tname: anim.getName(),\n\t\t\t\tchannels: anim.listChannels().length,\n\t\t\t\tsamplers: anim.listSamplers().length,\n\t\t\t\tduration: Math.round((maxTime - minTime) * 1000) / 1000,\n\t\t\t\tkeyframes: keyframes,\n\t\t\t\tsize: size,\n\t\t\t};\n\t\t});\n\n\treturn { properties: animations };\n}\n\nexport interface InspectReport {\n\tscenes: InspectPropertyReport<InspectSceneReport>;\n\tmeshes: InspectPropertyReport<InspectMeshReport>;\n\tmaterials: InspectPropertyReport<InspectMaterialReport>;\n\ttextures: InspectPropertyReport<InspectTextureReport>;\n\tanimations: InspectPropertyReport<InspectAnimationReport>;\n}\n\nexport interface InspectPropertyReport<T> {\n\tproperties: T[];\n\terrors?: string[];\n\twarnings?: string[];\n}\n\nexport interface InspectSceneReport {\n\tname: string;\n\trootName: string;\n\tbboxMin: number[];\n\tbboxMax: number[];\n\trenderVertexCount: number;\n\tuploadVertexCount: number;\n\tuploadNaiveVertexCount: number;\n}\n\nexport interface InspectMeshReport {\n\tname: string;\n\tmeshPrimitives: number;\n\tmode: string[];\n\tvertices: number;\n\tglPrimitives: number;\n\tindices: string[];\n\tattributes: string[];\n\tinstances: number;\n\tsize: number;\n}\n\nexport interface InspectMaterialReport {\n\tname: string;\n\tinstances: number;\n\ttextures: string[];\n\talphaMode: GLTF.MaterialAlphaMode;\n\tdoubleSided: boolean;\n}\n\nexport interface InspectTextureReport {\n\tname: string;\n\turi: string;\n\tslots: string[];\n\tinstances: number;\n\tmimeType: string;\n\tresolution: string;\n\tcompression: string;\n\tsize: number;\n\tgpuSize: number | null;\n}\n\nexport interface InspectAnimationReport {\n\tname: string;\n\tchannels: number;\n\tsamplers: number;\n\tkeyframes: number;\n\tduration: number;\n\tsize: number;\n}\n\nconst MeshPrimitiveModeLabels = [\n\t'POINTS',\n\t'LINES',\n\t'LINE_LOOP',\n\t'LINE_STRIP',\n\t'TRIANGLES',\n\t'TRIANGLE_STRIP',\n\t'TRIANGLE_FAN',\n];\n\nconst NumericTypeLabels: Record<string, string> = {\n\tFloat32Array: 'f32',\n\tUint32Array: 'u32',\n\tUint16Array: 'u16',\n\tUint8Array: 'u8',\n\tInt32Array: 'i32',\n\tInt16Array: 'i16',\n\tInt8Array: 'i8',\n};\n\n/** Maps values in a vector to a finite precision. */\nfunction toPrecision(v: number[]): number[] {\n\tfor (let i = 0; i < v.length; i++) {\n\t\tif ((v[i] as number).toFixed) v[i] = Number(v[i].toFixed(5));\n\t}\n\treturn v;\n}\n\nfunction accessorToTypeLabel(accessor: Accessor): string {\n\tconst array = accessor.getArray()!;\n\tconst base = NumericTypeLabels[array.constructor.name] || '?';\n\tconst suffix = accessor.getNormalized() ? '_norm' : '';\n\treturn base + suffix;\n}\n","import { Document, ILogger, MathUtils, Mesh, Node, Primitive, Transform, vec3, vec4 } from '@gltf-transform/core';\nimport { InstancedMesh, EXTMeshGPUInstancing } from '@gltf-transform/extensions';\nimport { assignDefaults, createTransform } from './utils.js';\n\nconst NAME = 'instance';\n\nexport interface InstanceOptions {\n\t/** Minimum number of meshes considered eligible for instancing. Default: 5. */\n\tmin?: number;\n}\n\nexport const INSTANCE_DEFAULTS: Required<InstanceOptions> = {\n\tmin: 5,\n};\n\n/**\n * Creates GPU instances (with {@link EXTMeshGPUInstancing}) for shared {@link Mesh} references. In\n * engines supporting the extension, reused Meshes will be drawn with GPU instancing, greatly\n * reducing draw calls and improving performance in many cases. If you're not sure that identical\n * Meshes share vertex data and materials (\"linked duplicates\"), run {@link dedup} first to link them.\n *\n * Example:\n *\n * ```javascript\n * import { dedup, instance } from '@gltf-transform/functions';\n *\n * await document.transform(\n * \tdedup(),\n * \tinstance({min: 5}),\n * );\n * ```\n *\n * @category Transforms\n */\nexport function instance(_options: InstanceOptions = INSTANCE_DEFAULTS): Transform {\n\tconst options = assignDefaults(INSTANCE_DEFAULTS, _options);\n\n\treturn createTransform(NAME, (doc: Document): void => {\n\t\tconst logger = doc.getLogger();\n\t\tconst root = doc.getRoot();\n\n\t\tif (root.listAnimations().length) {\n\t\t\tlogger.warn(`${NAME}: Instancing is not currently supported for animated models.`);\n\t\t\tlogger.debug(`${NAME}: Complete.`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst batchExtension = doc.createExtension(EXTMeshGPUInstancing);\n\n\t\tlet numBatches = 0;\n\t\tlet numInstances = 0;\n\n\t\tfor (const scene of root.listScenes()) {\n\t\t\t// Gather a one-to-many Mesh/Node mapping, identifying what we can instance.\n\t\t\tconst meshInstances = new Map<Mesh, Set<Node>>();\n\t\t\tscene.traverse((node) => {\n\t\t\t\tconst mesh = node.getMesh();\n\t\t\t\tif (!mesh) return;\n\t\t\t\tif (node.getExtension('EXT_mesh_gpu_instancing')) return;\n\t\t\t\tmeshInstances.set(mesh, (meshInstances.get(mesh) || new Set<Node>()).add(node));\n\t\t\t});\n\n\t\t\t// For each Mesh, create an InstancedMesh and collect transforms.\n\t\t\tconst modifiedNodes = [];\n\t\t\tfor (const mesh of Array.from(meshInstances.keys())) {\n\t\t\t\tconst nodes = Array.from(meshInstances.get(mesh)!);\n\t\t\t\tif (nodes.length < options.min) continue;\n\t\t\t\tif (nodes.some((node) => node.getSkin())) continue;\n\n\t\t\t\t// Cannot preserve volumetric effects when instancing with varying scale.\n\t\t\t\t// See: https://github.com/KhronosGroup/glTF-Sample-Models/tree/master/2.0/AttenuationTest\n\t\t\t\tif (mesh.listPrimitives().some(hasVolume) && nodes.some(hasScale)) continue;\n\n\t\t\t\tconst batch = createBatch(doc, batchExtension, mesh, nodes.length);\n\t\t\t\tconst batchTranslation = batch.getAttribute('TRANSLATION')!;\n\t\t\t\tconst batchRotation = batch.getAttribute('ROTATION')!;\n\t\t\t\tconst batchScale = batch.getAttribute('SCALE')!;\n\n\t\t\t\tconst batchNode = doc.createNode().setMesh(mesh).setExtension('EXT_mesh_gpu_instancing', batch);\n\t\t\t\tscene.addChild(batchNode);\n\n\t\t\t\tlet needsTranslation = false;\n\t\t\t\tlet needsRotation = false;\n\t\t\t\tlet needsScale = false;\n\n\t\t\t\t// For each Node, write TRS properties into instance attributes.\n\t\t\t\tfor (let i = 0; i < nodes.length; i++) {\n\t\t\t\t\tlet t: vec3, r: vec4, s: vec3;\n\t\t\t\t\tconst node = nodes[i];\n\n\t\t\t\t\tbatchTranslation.setElement(i, (t = node.getWorldTranslation()));\n\t\t\t\t\tbatchRotation.setElement(i, (r = node.getWorldRotation()));\n\t\t\t\t\tbatchScale.setElement(i, (s = node.getWorldScale()));\n\n\t\t\t\t\tif (!MathUtils.eq(t, [0, 0, 0])) needsTranslation = true;\n\t\t\t\t\tif (!MathUtils.eq(r, [0, 0, 0, 1])) needsRotation = true;\n\t\t\t\t\tif (!MathUtils.eq(s, [1, 1, 1])) needsScale = true;\n\t\t\t\t}\n\n\t\t\t\tif (!needsTranslation) batchTranslation.dispose();\n\t\t\t\tif (!needsRotation) batchRotation.dispose();\n\t\t\t\tif (!needsScale) batchScale.dispose();\n\n\t\t\t\tif (!needsTranslation && !needsRotation && !needsScale) {\n\t\t\t\t\tbatchNode.dispose();\n\t\t\t\t\tbatch.dispose();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Mark nodes for cleanup.\n\t\t\t\tfor (const node of nodes) {\n\t\t\t\t\tnode.setMesh(null);\n\t\t\t\t\tmodifiedNodes.push(node);\n\t\t\t\t}\n\n\t\t\t\tnumBatches++;\n\t\t\t\tnumInstances += nodes.length;\n\t\t\t}\n\n\t\t\tpruneUnusedNodes(modifiedNodes, logger);\n\t\t}\n\n\t\tif (numBatches > 0) {\n\t\t\tlogger.info(`${NAME}: Created ${numBatches} batches, with ${numInstances} total instances.`);\n\t\t} else {\n\t\t\tlogger.info(`${NAME}: No meshes with >=${options.min} parent nodes were found.`);\n\t\t}\n\n\t\tif (batchExtension.listProperties().length === 0) {\n\t\t\tbatchExtension.dispose();\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\nfunction pruneUnusedNodes(nodes: Node[], logger: ILogger): void {\n\tlet node: Node | undefined;\n\tlet unusedNodes = 0;\n\twhile ((node = nodes.pop())) {\n\t\tif (\n\t\t\tnode.listChildren().length ||\n\t\t\tnode.getCamera() ||\n\t\t\tnode.getMesh() ||\n\t\t\tnode.getSkin() ||\n\t\t\tnode.listExtensions().length\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst nodeParent = node.getParentNode();\n\t\tif (nodeParent) nodes.push(nodeParent);\n\t\tnode.dispose();\n\t\tunusedNodes++;\n\t}\n\n\tlogger.debug(`${NAME}: Removed ${unusedNodes} unused nodes.`);\n}\n\nfunction hasVolume(prim: Primitive) {\n\tconst material = prim.getMaterial();\n\treturn !!(material && material.getExtension('KHR_materials_volume'));\n}\n\nfunction hasScale(node: Node) {\n\tconst scale = node.getWorldScale();\n\treturn !MathUtils.eq(scale, [1, 1, 1]);\n}\n\nfunction createBatch(doc: Document, batchExtension: EXTMeshGPUInstancing, mesh: Mesh, count: number): InstancedMesh {\n\tconst buffer = mesh.listPrimitives()[0].getAttribute('POSITION')!.getBuffer();\n\n\tconst batchTranslation = doc\n\t\t.createAccessor()\n\t\t.setType('VEC3')\n\t\t.setArray(new Float32Array(3 * count))\n\t\t.setBuffer(buffer);\n\tconst batchRotation = doc\n\t\t.createAccessor()\n\t\t.setType('VEC4')\n\t\t.setArray(new Float32Array(4 * count))\n\t\t.setBuffer(buffer);\n\tconst batchScale = doc\n\t\t.createAccessor()\n\t\t.setType('VEC3')\n\t\t.setArray(new Float32Array(3 * count))\n\t\t.setBuffer(buffer);\n\n\treturn batchExtension\n\t\t.createInstancedMesh()\n\t\t.setAttribute('TRANSLATION', batchTranslation)\n\t\t.setAttribute('ROTATION', batchRotation)\n\t\t.setAttribute('SCALE', batchScale);\n}\n","import { Document, Primitive, ComponentTypeToTypedArray, Accessor, TypedArray } from '@gltf-transform/core';\nimport { assignDefaults, createIndicesEmpty, createPrimGroupKey, shallowCloneAccessor } from './utils.js';\nimport { convertPrimitiveToLines, convertPrimitiveToTriangles } from './convert-primitive-mode.js';\n\ninterface JoinPrimitiveOptions {\n\tskipValidation?: boolean;\n}\n\nconst JOIN_PRIMITIVE_DEFAULTS: Required<JoinPrimitiveOptions> = {\n\tskipValidation: false,\n};\n\nconst EMPTY_U32 = 2 ** 32 - 1;\n\nconst { LINE_STRIP, LINE_LOOP, TRIANGLE_STRIP, TRIANGLE_FAN } = Primitive.Mode;\n\n/**\n * Given a list of compatible Mesh {@link Primitive Primitives}, returns new Primitive\n * containing their vertex data. Compatibility requires that all Primitives share the\n * same {@link Material Materials}, draw mode, and vertex attribute types. Primitives\n * using morph targets cannot currently be joined.\n *\n * Example:\n *\n * ```javascript\n * import { joinPrimitives } from '@gltf-transform/functions';\n *\n * // Succeeds if Primitives are compatible, or throws an error.\n * const result = joinPrimitives(mesh.listPrimitives());\n *\n * for (const prim of mesh.listPrimitives()) {\n * \tprim.dispose();\n * }\n *\n * mesh.addPrimitive(result);\n * ```\n */\nexport function joinPrimitives(prims: Primitive[], _options: JoinPrimitiveOptions = {}): Primitive {\n\tconst options = assignDefaults(JOIN_PRIMITIVE_DEFAULTS, _options);\n\tconst templatePrim = prims[0]!;\n\tconst document = Document.fromGraph(templatePrim.getGraph())!;\n\n\t// (1) Validation.\n\tif (!options.skipValidation && new Set(prims.map(createPrimGroupKey)).size > 1) {\n\t\tthrow new Error(\n\t\t\t'' +\n\t\t\t\t'Requires >=2 Primitives, sharing the same Material ' +\n\t\t\t\t'and Mode, with compatible vertex attributes and indices.',\n\t\t);\n\t}\n\n\t// (2) Convert all prims to POINTS, LINES, or TRIANGLES.\n\tfor (const prim of prims) {\n\t\tswitch (prim.getMode()) {\n\t\t\tcase LINE_STRIP:\n\t\t\tcase LINE_LOOP:\n\t\t\t\tconvertPrimitiveToLines(prim);\n\t\t\t\tbreak;\n\t\t\tcase TRIANGLE_STRIP:\n\t\t\tcase TRIANGLE_FAN:\n\t\t\t\tconvertPrimitiveToTriangles(prim);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst primRemaps = [] as Uint32Array[]; // remap[srcIndex] → dstIndex, by prim\n\tconst primVertexCounts = new Uint32Array(prims.length); // vertex count, by prim\n\n\tlet dstVertexCount = 0;\n\tlet dstIndicesCount = 0;\n\n\t// (3) Build remap lists.\n\tfor (let primIndex = 0; primIndex < prims.length; primIndex++) {\n\t\tconst srcPrim = prims[primIndex];\n\t\tconst srcIndices = srcPrim.getIndices();\n\t\tconst srcVertexCount = srcPrim.getAttribute('POSITION')!.getCount();\n\t\tconst srcIndicesArray = srcIndices ? srcIndices.getArray() : null;\n\t\tconst srcIndicesCount = srcIndices ? srcIndices.getCount() : srcVertexCount;\n\n\t\tconst remap = new Uint32Array(srcVertexCount).fill(EMPTY_U32);\n\n\t\tfor (let i = 0; i < srcIndicesCount; i++) {\n\t\t\tconst index = srcIndicesArray ? srcIndicesArray[i] : i;\n\t\t\tif (remap[index] === EMPTY_U32) {\n\t\t\t\tremap[index] = dstVertexCount++;\n\t\t\t\tprimVertexCounts[primIndex]++;\n\t\t\t}\n\t\t}\n\n\t\tprimRemaps.push(remap);\n\t\tdstIndicesCount += srcIndicesCount;\n\t}\n\n\t// (4) Allocate joined attributes.\n\tconst dstPrim = document.createPrimitive().setMode(templatePrim.getMode()).setMaterial(templatePrim.getMaterial());\n\tfor (const semantic of templatePrim.listSemantics()) {\n\t\tconst tplAttribute = templatePrim.getAttribute(semantic)!;\n\t\tconst AttributeArray = ComponentTypeToTypedArray[tplAttribute.getComponentType()];\n\t\tconst dstAttribute = shallowCloneAccessor(document, tplAttribute).setArray(\n\t\t\tnew AttributeArray(dstVertexCount * tplAttribute.getElementSize()),\n\t\t);\n\t\tdstPrim.setAttribute(semantic, dstAttribute);\n\t}\n\n\t// (5) Allocate joined indices.\n\tconst tplIndices = templatePrim.getIndices();\n\tconst dstIndices = tplIndices\n\t\t? shallowCloneAccessor(document, tplIndices).setArray(createIndicesEmpty(dstIndicesCount, dstVertexCount))\n\t\t: null;\n\tdstPrim.setIndices(dstIndices);\n\n\t// (6) Remap attributes into joined Primitive.\n\tlet dstIndicesOffset = 0;\n\tfor (let primIndex = 0; primIndex < primRemaps.length; primIndex++) {\n\t\tconst srcPrim = prims[primIndex];\n\t\tconst srcIndices = srcPrim.getIndices();\n\t\tconst srcIndicesCount = srcIndices ? srcIndices.getCount() : -1;\n\n\t\tconst remap = primRemaps[primIndex];\n\n\t\tif (srcIndices && dstIndices) {\n\t\t\tremapIndices(srcIndices, remap, dstIndices, dstIndicesOffset);\n\t\t\tdstIndicesOffset += srcIndicesCount;\n\t\t}\n\n\t\tfor (const semantic of dstPrim.listSemantics()) {\n\t\t\tconst srcAttribute = srcPrim.getAttribute(semantic)!;\n\t\t\tconst dstAttribute = dstPrim.getAttribute(semantic)!;\n\t\t\tremapAttribute(srcAttribute, srcIndices, remap, dstAttribute);\n\t\t}\n\t}\n\n\treturn dstPrim;\n}\n\n/**\n * Internal variant of {@link compactAttribute}. Unlike compactAttribute,\n * assumes the vertex count cannot change, and avoids cloning attributes.\n * @hidden\n * @internal\n */\nfunction remapAttribute(\n\tsrcAttribute: Accessor,\n\tsrcIndices: Accessor | null,\n\tremap: TypedArray,\n\tdstAttribute: Accessor,\n): void {\n\tconst elementSize = srcAttribute.getElementSize();\n\tconst srcIndicesArray = srcIndices ? srcIndices.getArray() : null;\n\tconst srcVertexCount = srcAttribute.getCount();\n\tconst srcArray = srcAttribute.getArray()!;\n\tconst dstArray = dstAttribute.getArray()!;\n\tconst done = new Uint8Array(srcAttribute.getCount());\n\n\tfor (let i = 0, il = srcIndices ? srcIndices.getCount() : srcVertexCount; i < il; i++) {\n\t\tconst srcIndex = srcIndicesArray ? srcIndicesArray[i] : i;\n\t\tconst dstIndex = remap[srcIndex];\n\t\tif (done[dstIndex]) continue;\n\n\t\tfor (let j = 0; j < elementSize; j++) {\n\t\t\tdstArray[dstIndex * elementSize + j] = srcArray[srcIndex * elementSize + j];\n\t\t}\n\n\t\tdone[dstIndex] = 1;\n\t}\n}\n\n/**\n * Internal variant of {@link compactPrimitive}'s index remapping. Avoids\n * cloning indices; writes directly to `dstIndices`.\n * @hidden\n * @internal\n */\nfunction remapIndices(srcIndices: Accessor, remap: TypedArray, dstIndices: Accessor, dstOffset: number): void {\n\tconst srcCount = srcIndices.getCount();\n\tconst srcArray = srcIndices.getArray()!;\n\tconst dstArray = dstIndices.getArray()!;\n\n\tfor (let i = 0; i < srcCount; i++) {\n\t\tconst srcIndex = srcArray[i];\n\t\tconst dstIndex = remap[srcIndex];\n\t\tdstArray[dstOffset + i] = dstIndex;\n\t}\n}\n","import {\n\tAnimationChannel,\n\tDocument,\n\tmat4,\n\tMesh,\n\tNode,\n\tPrimitive,\n\tPropertyType,\n\tScene,\n\tTransform,\n} from '@gltf-transform/core';\nimport { invert, multiply } from 'gl-matrix/mat4';\nimport { joinPrimitives } from './join-primitives.js';\nimport { prune } from './prune.js';\nimport { transformPrimitive } from './transform-primitive.js';\nimport { assignDefaults, createPrimGroupKey, createTransform, formatLong, isUsed } from './utils.js';\nimport { dequantizeAttribute } from './dequantize.js';\nimport { compactPrimitive } from './compact-primitive.js';\n\nconst NAME = 'join';\n\nconst { ROOT, NODE, MESH, PRIMITIVE, ACCESSOR } = PropertyType;\n\n// biome-ignore format: Readability.\nconst _matrix = [\n\t0, 0, 0, 0,\n\t0, 0, 0, 0,\n\t0, 0, 0, 0,\n\t0, 0, 0, 0,\n] as mat4;\n\n/** Options for the {@link join} function. */\nexport interface JoinOptions {\n\t/**\n\t * Prevents joining distinct {@link Mesh Meshes} and {@link Node Nodes}.\n\t * Joins only Primitives found within the same parent Mesh. To preserve\n\t * only _named_ Nodes and Meshes, use\n\t * {@link JoinOptions.keepNamed keepNamed} instead. Default: false.\n\t */\n\tkeepMeshes?: boolean;\n\t/**\n\t * Prevents joining _named_ {@link Mesh Meshes} and {@link Node Nodes}.\n\t * If {@link JoinOptions.keepMeshes keepMeshes} is enabled, keepNamed will\n\t * have no effect. Default: false.\n\t */\n\tkeepNamed?: boolean;\n\t/**\n\t * Whether to perform cleanup steps after completing the operation. Recommended, and enabled by\n\t * default. Cleanup removes temporary resources created during the operation, but may also remove\n\t * pre-existing unused or duplicate resources in the {@link Document}. Applications that require\n\t * keeping these resources may need to disable cleanup, instead calling {@link dedup} and\n\t * {@link prune} manually (with customized options) later in the processing pipeline.\n\t * @experimental\n\t */\n\tcleanup?: boolean;\n}\n\nexport const JOIN_DEFAULTS: Required<JoinOptions> = {\n\tkeepMeshes: false,\n\tkeepNamed: false,\n\tcleanup: true,\n};\n\n/**\n * Joins compatible {@link Primitive Primitives} and reduces draw calls.\n * Primitives are eligible for joining if they are members of the same\n * {@link Mesh} or, optionally, attached to sibling {@link Node Nodes}\n * in the scene hierarchy. For best results, apply {@link dedup} and\n * {@link flatten} first to maximize the number of Primitives that\n * can be joined.\n *\n * NOTE: In a Scene that heavily reuses the same Mesh data, joining may\n * increase vertex count. Consider alternatives, like\n * {@link instance instancing} with {@link EXTMeshGPUInstancing}.\n *\n * Example:\n *\n * ```ts\n * import { PropertyType } from '@gltf-transform/core';\n * import { join, flatten, dedup } from '@gltf-transform/functions';\n *\n * await document.transform(\n * \tdedup({ propertyTypes: [PropertyType.MATERIAL] }),\n * \tflatten(),\n * \tjoin({ keepNamed: false }),\n * );\n * ```\n *\n * @category Transforms\n */\nexport function join(_options: JoinOptions = JOIN_DEFAULTS): Transform {\n\tconst options = assignDefaults(JOIN_DEFAULTS, _options);\n\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tconst root = document.getRoot();\n\t\tconst logger = document.getLogger();\n\n\t\t// Join.\n\t\tfor (const scene of root.listScenes()) {\n\t\t\t_joinLevel(document, scene, options);\n\t\t\tscene.traverse((node) => _joinLevel(document, node, options));\n\t\t}\n\n\t\t// Clean up.\n\t\tif (options.cleanup) {\n\t\t\tawait document.transform(\n\t\t\t\tprune({\n\t\t\t\t\tpropertyTypes: [NODE, MESH, PRIMITIVE, ACCESSOR],\n\t\t\t\t\tkeepAttributes: true,\n\t\t\t\t\tkeepIndices: true,\n\t\t\t\t\tkeepLeaves: false,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\ninterface IJoinGroup {\n\tkey: string;\n\tprims: Primitive[];\n\tprimMeshes: Mesh[];\n\tprimNodes: Node[];\n\tdstNode: Node;\n\tdstMesh?: Mesh | undefined;\n}\n\nfunction _joinLevel(document: Document, parent: Node | Scene, options: Required<JoinOptions>) {\n\tconst logger = document.getLogger();\n\tconst groups = {} as Record<string, IJoinGroup>;\n\n\t// Scan for compatible Primitives.\n\tconst children = parent.listChildren();\n\tfor (let nodeIndex = 0; nodeIndex < children.length; nodeIndex++) {\n\t\tconst node = children[nodeIndex];\n\n\t\t// Skip animated nodes.\n\t\tconst isAnimated = node.listParents().some((p) => p instanceof AnimationChannel);\n\t\tif (isAnimated) continue;\n\n\t\t// Skip nodes without meshes.\n\t\tconst mesh = node.getMesh();\n\t\tif (!mesh) continue;\n\n\t\t// Skip nodes with instancing; unsupported.\n\t\tif (node.getExtension('EXT_mesh_gpu_instancing')) continue;\n\n\t\t// Skip nodes with skinning; unsupported.\n\t\tif (node.getSkin()) continue;\n\n\t\tfor (const prim of mesh.listPrimitives()) {\n\t\t\t// Skip prims with morph targets; unsupported.\n\t\t\tif (prim.listTargets().length > 0) continue;\n\n\t\t\t// Skip prims with volumetric materials; unsupported.\n\t\t\tconst material = prim.getMaterial();\n\t\t\tif (material && material.getExtension('KHR_materials_volume')) continue;\n\n\t\t\tcompactPrimitive(prim);\n\t\t\tdequantizeTransformableAttributes(prim);\n\n\t\t\tlet key = createPrimGroupKey(prim);\n\n\t\t\tconst isNamed = mesh.getName() || node.getName();\n\t\t\tif (options.keepMeshes || (options.keepNamed && isNamed)) {\n\t\t\t\tkey += `|${nodeIndex}`;\n\t\t\t}\n\n\t\t\tif (!(key in groups)) {\n\t\t\t\tgroups[key] = {\n\t\t\t\t\tprims: [] as Primitive[],\n\t\t\t\t\tprimMeshes: [] as Mesh[],\n\t\t\t\t\tprimNodes: [] as Node[],\n\t\t\t\t\tdstNode: node,\n\t\t\t\t\tdstMesh: undefined,\n\t\t\t\t} as IJoinGroup;\n\t\t\t}\n\n\t\t\tconst group = groups[key];\n\t\t\tgroup.prims.push(prim);\n\t\t\tgroup.primNodes.push(node);\n\t\t}\n\t}\n\n\t// Discard single-Primitive groups.\n\tconst joinGroups = Object.values(groups).filter(({ prims }) => prims.length > 1);\n\n\t// Unlink all affected Meshes at current level, before modifying Primitives.\n\tconst srcNodes = new Set<Node>(joinGroups.flatMap((group) => group.primNodes));\n\tfor (const node of srcNodes) {\n\t\tconst mesh = node.getMesh()!;\n\t\tconst isSharedMesh = mesh.listParents().some((parent) => {\n\t\t\treturn parent.propertyType !== ROOT && node !== parent;\n\t\t});\n\t\tif (isSharedMesh) {\n\t\t\tnode.setMesh(mesh.clone());\n\t\t}\n\t}\n\n\t// Update Meshes in groups.\n\tfor (const group of joinGroups) {\n\t\tconst { dstNode, primNodes } = group;\n\t\tgroup.dstMesh = dstNode.getMesh()!;\n\t\tgroup.primMeshes = primNodes.map((node) => node.getMesh()!);\n\t}\n\n\t// Join Primitives.\n\tfor (const group of joinGroups) {\n\t\tconst { prims, primNodes, primMeshes, dstNode, dstMesh } = group as Required<IJoinGroup>;\n\t\tconst dstMatrix = dstNode.getMatrix();\n\n\t\tfor (let i = 0; i < prims.length; i++) {\n\t\t\tconst primNode = primNodes[i];\n\t\t\tconst primMesh = primMeshes[i];\n\n\t\t\tlet prim = prims[i];\n\t\t\tprimMesh.removePrimitive(prim);\n\n\t\t\t// If Primitive is still in use after being removed from the\n\t\t\t// current mesh, above, make a deep copy. Because compactPrimitive()\n\t\t\t// was applied earlier in join(), we know the full vertex streams are\n\t\t\t// used, and no accessors are shared.\n\t\t\tif (isUsed(prim)) {\n\t\t\t\tprim = prims[i] = _deepClonePrimitive(prims[i]);\n\t\t\t}\n\n\t\t\t// Transform Primitive into new local coordinate space.\n\t\t\tif (primNode !== dstNode) {\n\t\t\t\tmultiply(_matrix, invert(_matrix, dstMatrix), primNode.getMatrix());\n\t\t\t\ttransformPrimitive(prim, _matrix);\n\t\t\t}\n\t\t}\n\n\t\tconst dstPrim = joinPrimitives(prims);\n\t\tconst dstVertexCount = dstPrim.listAttributes()[0].getCount();\n\t\tdstMesh.addPrimitive(dstPrim);\n\n\t\tlogger.debug(\n\t\t\t`${NAME}: Joined Primitives (${prims.length}) containing ` +\n\t\t\t\t`${formatLong(dstVertexCount)} vertices under Node \"${dstNode.getName()}\".`,\n\t\t);\n\t}\n}\n\nfunction _deepClonePrimitive(src: Primitive): Primitive {\n\t// compactPrimitive already applied; no vertices are unused.\n\tconst dst = src.clone();\n\tfor (const semantic of dst.listSemantics()) {\n\t\tdst.setAttribute(semantic, dst.getAttribute(semantic)!.clone());\n\t}\n\tconst indices = dst.getIndices();\n\tif (indices) dst.setIndices(indices.clone());\n\treturn dst;\n}\n\n/**\n * Dequantize attributes that would be affected by {@link transformPrimitive},\n * to avoid invalidating our primitive group keys.\n *\n * See: https://github.com/donmccurdy/glTF-Transform/issues/844\n */\nfunction dequantizeTransformableAttributes(prim: Primitive) {\n\tfor (const semantic of ['POSITION', 'NORMAL', 'TANGENT']) {\n\t\tconst attribute = prim.getAttribute(semantic);\n\t\tif (attribute) dequantizeAttribute(attribute);\n\t}\n}\n","import { Document, Texture } from '@gltf-transform/core';\nimport { Material, TextureChannel, PropertyType } from '@gltf-transform/core';\n\n/**\n * Returns a list of {@link TextureChannel TextureChannels} used by the given\n * texture. Determination is based only on the _role_ of the textures, e.g.\n * a texture used for the `occlusionTexture` will have (at least) a red channel\n * in use. See {@link getTextureChannelMask} for bitmask alternative.\n *\n * Example:\n *\n * ```js\n * const channels = listTextureChannels(texture);\n * if (channels.includes(TextureChannel.R)) {\n *   console.log('texture red channel used');\n * }\n * ```\n */\nexport function listTextureChannels(texture: Texture): TextureChannel[] {\n\tconst mask = getTextureChannelMask(texture);\n\tconst channels = [];\n\tif (mask & TextureChannel.R) channels.push(TextureChannel.R);\n\tif (mask & TextureChannel.G) channels.push(TextureChannel.G);\n\tif (mask & TextureChannel.B) channels.push(TextureChannel.B);\n\tif (mask & TextureChannel.A) channels.push(TextureChannel.A);\n\treturn channels;\n}\n\n/**\n * Returns bitmask of all {@link TextureChannel TextureChannels} used by the\n * given texture. Determination is based only on the _role_ of the textures, e.g.\n * a texture used for the `occlusionTexture` will have (at least) a red channel.\n * See {@link listTextureChannels} for an array alternative.\n *\n * Example:\n *\n * ```js\n * const mask = getTextureChannelMask(texture);\n * if (mask & TextureChannel.R) {\n *   console.log('texture red channel used');\n * }\n * ```\n */\nexport function getTextureChannelMask(texture: Texture): number {\n\tconst document = Document.fromGraph(texture.getGraph())!;\n\tlet mask = 0x0000;\n\tfor (const edge of document.getGraph().listParentEdges(texture)) {\n\t\tconst parent = edge.getParent();\n\t\tlet { channels } = edge.getAttributes() as { channels: number | undefined };\n\n\t\tif (\n\t\t\tchannels &&\n\t\t\tedge.getName() === 'baseColorTexture' &&\n\t\t\tparent instanceof Material &&\n\t\t\tparent.getAlphaMode() === Material.AlphaMode.OPAQUE\n\t\t) {\n\t\t\tchannels &= ~TextureChannel.A;\n\t\t}\n\n\t\tif (channels) {\n\t\t\tmask |= channels;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (parent.propertyType !== PropertyType.ROOT) {\n\t\t\tdocument.getLogger().warn(`Missing attribute \".channels\" on edge, \"${edge.getName()}\".`);\n\t\t}\n\t}\n\treturn mask;\n}\n","import { Accessor, Document, GLTF, Primitive, PropertyType, Transform } from '@gltf-transform/core';\nimport { prune } from './prune.js';\nimport { assignDefaults, createTransform, deepListAttributes, SetMap, shallowCloneAccessor } from './utils.js';\nimport type { MeshoptEncoder } from 'meshoptimizer';\nimport { compactAttribute } from './compact-primitive.js';\n\nconst NAME = 'reorder';\n\n/** Options for the {@link reorder} function. */\nexport interface ReorderOptions {\n\t/** MeshoptEncoder instance. */\n\tencoder: unknown;\n\t/**\n\t * Whether the order should be optimal for transmission size (recommended for Web)\n\t * or for GPU rendering performance. Default is 'size'.\n\t */\n\ttarget?: 'size' | 'performance';\n\t/**\n\t * Whether to perform cleanup steps after completing the operation. Recommended, and enabled by\n\t * default. Cleanup removes temporary resources created during the operation, but may also remove\n\t * pre-existing unused or duplicate resources in the {@link Document}. Applications that require\n\t * keeping these resources may need to disable cleanup, instead calling {@link dedup} and\n\t * {@link prune} manually (with customized options) later in the processing pipeline.\n\t * @experimental\n\t */\n\tcleanup?: boolean;\n}\n\nconst REORDER_DEFAULTS: Required<Omit<ReorderOptions, 'encoder'>> = {\n\ttarget: 'size',\n\tcleanup: true,\n};\n\n/**\n * Optimizes {@link Mesh} {@link Primitive Primitives} for locality of reference. Choose whether\n * the order should be optimal for transmission size (recommended for Web) or for GPU rendering\n * performance. Requires a MeshoptEncoder instance from the Meshoptimizer library.\n *\n * Example:\n *\n * ```ts\n * import { MeshoptEncoder } from 'meshoptimizer';\n * import { reorder } from '@gltf-transform/functions';\n *\n * await MeshoptEncoder.ready;\n *\n * await document.transform(\n * \treorder({encoder: MeshoptEncoder})\n * );\n * ```\n *\n * @category Transforms\n */\nexport function reorder(_options: ReorderOptions): Transform {\n\tconst options = assignDefaults(REORDER_DEFAULTS, _options);\n\tconst encoder = options.encoder as typeof MeshoptEncoder | undefined;\n\n\tif (!encoder) {\n\t\tthrow new Error(`${NAME}: encoder dependency required — install \"meshoptimizer\".`);\n\t}\n\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tconst logger = document.getLogger();\n\n\t\tawait encoder.ready;\n\n\t\tconst plan = createLayoutPlan(document);\n\n\t\tfor (const srcIndices of plan.indicesToAttributes.keys()) {\n\t\t\tlet indicesArray = srcIndices.getArray()!;\n\t\t\tif (!(indicesArray instanceof Uint32Array)) {\n\t\t\t\tindicesArray = new Uint32Array(indicesArray);\n\t\t\t} else {\n\t\t\t\tindicesArray = indicesArray.slice();\n\t\t\t}\n\n\t\t\t// Compute optimal order.\n\t\t\tconst [remap, unique] = encoder.reorderMesh(\n\t\t\t\tindicesArray,\n\t\t\t\tplan.indicesToMode.get(srcIndices) === Primitive.Mode.TRIANGLES,\n\t\t\t\toptions.target === 'size',\n\t\t\t);\n\n\t\t\tconst dstIndices = shallowCloneAccessor(document, srcIndices);\n\t\t\tdstIndices.setArray(unique <= 65534 ? new Uint16Array(indicesArray) : indicesArray);\n\n\t\t\t// Update affected primitives.\n\t\t\tfor (const srcAttribute of plan.indicesToAttributes.get(srcIndices)) {\n\t\t\t\tconst dstAttribute = shallowCloneAccessor(document, srcAttribute);\n\t\t\t\tcompactAttribute(srcAttribute, srcIndices, remap, dstAttribute, unique);\n\n\t\t\t\tfor (const prim of plan.indicesToPrimitives.get(srcIndices)) {\n\t\t\t\t\tif (prim.getIndices() === srcIndices) {\n\t\t\t\t\t\tprim.swap(srcIndices, dstIndices);\n\t\t\t\t\t}\n\n\t\t\t\t\tprim.swap(srcAttribute, dstAttribute);\n\t\t\t\t\tfor (const target of prim.listTargets()) {\n\t\t\t\t\t\ttarget.swap(srcAttribute, dstAttribute);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Clean up any attributes left unused by earlier cloning.\n\t\tif (options.cleanup) {\n\t\t\tawait document.transform(\n\t\t\t\tprune({\n\t\t\t\t\tpropertyTypes: [PropertyType.ACCESSOR],\n\t\t\t\t\tkeepAttributes: true,\n\t\t\t\t\tkeepIndices: true,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tif (!plan.indicesToAttributes.size) {\n\t\t\tlogger.warn(`${NAME}: No qualifying primitives found; may need to weld first.`);\n\t\t} else {\n\t\t\tlogger.debug(`${NAME}: Complete.`);\n\t\t}\n\t});\n}\n\n/** @hidden */\ninterface LayoutPlan {\n\tindicesToMode: Map<Accessor, GLTF.MeshPrimitiveMode>;\n\tindicesToPrimitives: SetMap<Accessor, Primitive>;\n\tindicesToAttributes: SetMap<Accessor, Accessor>;\n\tattributesToPrimitives: SetMap<Accessor, Primitive>;\n}\n\n/**\n * Constructs a plan for processing vertex streams, based on unique\n * index:attribute[] groups. Where different indices are used with the same\n * attributes, we'll end up splitting the primitives to not share attributes,\n * which appears to be consistent with the Meshopt implementation.\n *\n * @hidden\n */\nfunction createLayoutPlan(document: Document): LayoutPlan {\n\tconst indicesToMode = new Map<Accessor, GLTF.MeshPrimitiveMode>();\n\tconst indicesToPrimitives = new SetMap<Accessor, Primitive>();\n\tconst indicesToAttributes = new SetMap<Accessor, Accessor>();\n\tconst attributesToPrimitives = new SetMap<Accessor, Primitive>();\n\n\tfor (const mesh of document.getRoot().listMeshes()) {\n\t\tfor (const prim of mesh.listPrimitives()) {\n\t\t\tconst indices = prim.getIndices();\n\t\t\tif (!indices) continue;\n\n\t\t\tindicesToMode.set(indices, prim.getMode());\n\t\t\tindicesToPrimitives.add(indices, prim);\n\n\t\t\tfor (const attribute of deepListAttributes(prim)) {\n\t\t\t\tindicesToAttributes.add(indices, attribute);\n\t\t\t\tattributesToPrimitives.add(attribute, prim);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { indicesToPrimitives, indicesToAttributes, indicesToMode, attributesToPrimitives };\n}\n","import { Accessor, GLTF, MathUtils, Primitive, PrimitiveTarget, TypedArray, vec4 } from '@gltf-transform/core';\n\n/**\n * Sorts skinning weights from high to low, for each vertex of the input\n * {@link Primitive} or {@link PrimitiveTarget}, and normalizes the weights.\n * Optionally, uses the given 'limit' to remove least-significant joint\n * influences such that no vertex has more than 'limit' influences.\n *\n * Most realtime engines support a limited number of joint influences per vertex,\n * often 4 or 8. Sorting and removing the additional influences can reduce file\n * size and improve compatibility.\n *\n * Example:\n *\n * ```javascript\n * import { sortPrimitiveWeights } from '@gltf-transform/functions';\n *\n * const limit = 4;\n * for (const mesh of document.getRoot().listMeshes()) {\n * \tfor (const prim of mesh.listPrimitives()) {\n * \t\tsortPrimitiveWeights(prim, limit);\n * \t}\n * }\n * ```\n *\n * @param prim Input, to be modified in place.\n * @param limit Maximum number of joint influences per vertex. Must be a multiple of four.\n */\nexport function sortPrimitiveWeights(prim: Primitive | PrimitiveTarget, limit = Infinity) {\n\tif ((Number.isFinite(limit) && limit % 4) || limit <= 0) {\n\t\tthrow new Error(`Limit must be positive multiple of four.`);\n\t}\n\n\tconst vertexCount = prim.getAttribute('POSITION')!.getCount();\n\tconst setCount = prim.listSemantics().filter((name) => name.startsWith('WEIGHTS_')).length;\n\n\t// (1) Sort.\n\n\tconst indices = new Uint16Array(setCount * 4);\n\tconst srcWeights = new Float32Array(setCount * 4);\n\tconst dstWeights = new Float32Array(setCount * 4);\n\tconst srcJoints = new Uint32Array(setCount * 4);\n\tconst dstJoints = new Uint32Array(setCount * 4);\n\n\tfor (let i = 0; i < vertexCount; i++) {\n\t\tgetVertexArray(prim, i, 'WEIGHTS', srcWeights);\n\t\tgetVertexArray(prim, i, 'JOINTS', srcJoints);\n\n\t\t// Sort indices to create a lookup table, indices[dstIndex] → srcIndex,\n\t\t// indexed into the weights and joints arrays.\n\t\tfor (let j = 0; j < setCount * 4; j++) indices[j] = j;\n\t\tindices.sort((a, b) => (srcWeights[a] > srcWeights[b] ? -1 : 1));\n\n\t\t// Sort weights and joints.\n\t\tfor (let j = 0; j < indices.length; j++) {\n\t\t\tdstWeights[j] = srcWeights[indices[j]];\n\t\t\tdstJoints[j] = srcJoints[indices[j]];\n\t\t}\n\n\t\tsetVertexArray(prim, i, 'WEIGHTS', dstWeights);\n\t\tsetVertexArray(prim, i, 'JOINTS', dstJoints);\n\t}\n\n\t// (2) Limit.\n\tfor (let i = setCount; i * 4 > limit; i--) {\n\t\tconst weights = prim.getAttribute(`WEIGHTS_${i - 1}`)!;\n\t\tconst joints = prim.getAttribute(`JOINTS_${i - 1}`)!;\n\t\tprim.setAttribute(`WEIGHTS_${i - 1}`, null);\n\t\tprim.setAttribute(`JOINTS_${i - 1}`, null);\n\t\tif (weights.listParents().length === 1) weights.dispose();\n\t\tif (joints.listParents().length === 1) joints.dispose();\n\t}\n\n\t// (3) Normalize.\n\tnormalizePrimitiveWeights(prim);\n}\n\n// Utilities.\n\ntype PrimLike = Primitive | PrimitiveTarget;\n\nfunction normalizePrimitiveWeights(prim: PrimLike): void {\n\t// TODO(feat): Convert attributes to same component types when necessary.\n\tif (!isNormalizeSafe(prim)) return;\n\n\tconst vertexCount = prim.getAttribute('POSITION')!.getCount();\n\tconst setCount = prim.listSemantics().filter((name) => name.startsWith('WEIGHTS_')).length;\n\n\tconst templateAttribute = prim.getAttribute('WEIGHTS_0')!;\n\tconst templateArray = templateAttribute.getArray()!;\n\tconst componentType = templateAttribute.getComponentType();\n\tconst normalized = templateAttribute.getNormalized();\n\tconst normalizedComponentType = normalized ? componentType : undefined;\n\tconst delta = normalized ? MathUtils.decodeNormalizedInt(1, componentType) : Number.EPSILON;\n\tconst joints = new Uint32Array(setCount * 4).fill(0);\n\tconst weights = templateArray.slice(0, setCount * 4).fill(0);\n\n\tfor (let i = 0; i < vertexCount; i++) {\n\t\tgetVertexArray(prim, i, 'JOINTS', joints);\n\t\tgetVertexArray(prim, i, 'WEIGHTS', weights, normalizedComponentType);\n\n\t\tlet weightsSum = sum(weights, normalizedComponentType);\n\n\t\tif (weightsSum !== 0 && weightsSum !== 1) {\n\t\t\t// (1) If sum of weights not within δ of 1, renormalize all weights.\n\t\t\tif (Math.abs(1 - weightsSum) > delta) {\n\t\t\t\tfor (let j = 0; j < weights.length; j++) {\n\t\t\t\t\tif (normalized) {\n\t\t\t\t\t\tconst floatValue = MathUtils.decodeNormalizedInt(weights[j], componentType);\n\t\t\t\t\t\tweights[j] = MathUtils.encodeNormalizedInt(floatValue / weightsSum, componentType);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tweights[j] /= weightsSum;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tweightsSum = sum(weights, normalizedComponentType);\n\n\t\t\t// (2) Sum of normalized weights may still be off by δ. Compensate\n\t\t\t// in least-significant weight.\n\t\t\tif (normalized && weightsSum !== 1) {\n\t\t\t\tfor (let j = weights.length - 1; j >= 0; j--) {\n\t\t\t\t\tif (weights[j] > 0) {\n\t\t\t\t\t\t// Normalized integer encoding will clamp negative values, so separate the sign.\n\t\t\t\t\t\tconst delta = 1 - weightsSum;\n\t\t\t\t\t\tweights[j] += Math.sign(delta) * MathUtils.encodeNormalizedInt(Math.abs(delta), componentType);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// (3) Remove joint indices whose weights have fallen to zero.\n\t\tfor (let j = weights.length - 1; j >= 0; j--) {\n\t\t\tif (weights[j] === 0) {\n\t\t\t\tjoints[j] = 0;\n\t\t\t}\n\t\t}\n\n\t\tsetVertexArray(prim, i, 'JOINTS', joints);\n\t\tsetVertexArray(prim, i, 'WEIGHTS', weights, normalizedComponentType);\n\t}\n}\n\n/** Lists all values of a multi-set vertex attribute (WEIGHTS_#, ...) for given vertex. */\nfunction getVertexArray(\n\tprim: PrimLike,\n\tvertexIndex: number,\n\tprefix: string,\n\ttarget: TypedArray,\n\tnormalizedComponentType?: GLTF.AccessorComponentType,\n): TypedArray {\n\tlet weights: Accessor | null;\n\tconst el = [0, 0, 0, 0] as vec4;\n\tfor (let i = 0; (weights = prim.getAttribute(`${prefix}_${i}`)); i++) {\n\t\tweights.getElement(vertexIndex, el);\n\t\tfor (let j = 0; j < 4; j++) {\n\t\t\tif (normalizedComponentType) {\n\t\t\t\ttarget[i * 4 + j] = MathUtils.encodeNormalizedInt(el[j], normalizedComponentType);\n\t\t\t} else {\n\t\t\t\ttarget[i * 4 + j] = el[j];\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n}\n\n/** Sets all values of a multi-set vertex attribute (WEIGHTS_#, ...) for given vertex. */\nfunction setVertexArray(\n\tprim: PrimLike,\n\tvertexIndex: number,\n\tprefix: string,\n\tvalues: TypedArray,\n\tnormalizedComponentType?: GLTF.AccessorComponentType,\n): void {\n\tlet weights: Accessor | null;\n\tconst el = [0, 0, 0, 0] as vec4;\n\tfor (let i = 0; (weights = prim.getAttribute(`${prefix}_${i}`)); i++) {\n\t\tfor (let j = 0; j < 4; j++) {\n\t\t\tif (normalizedComponentType) {\n\t\t\t\tel[j] = MathUtils.decodeNormalizedInt(values[i * 4 + j], normalizedComponentType);\n\t\t\t} else {\n\t\t\t\tel[j] = values[i * 4 + j];\n\t\t\t}\n\t\t}\n\t\tweights.setElement(vertexIndex, el);\n\t}\n}\n\n/** Sum an array of numbers. */\nfunction sum(values: TypedArray, normalizedComponentType?: GLTF.AccessorComponentType): number {\n\tlet sum = 0;\n\tfor (let i = 0; i < values.length; i++) {\n\t\tif (normalizedComponentType) {\n\t\t\tsum += MathUtils.decodeNormalizedInt(values[i], normalizedComponentType);\n\t\t} else {\n\t\t\tsum += values[i];\n\t\t}\n\t}\n\treturn sum;\n}\n\n/** Returns true if attribute normalization is supported for this primitive. */\nfunction isNormalizeSafe(prim: PrimLike): boolean {\n\tconst attributes = prim\n\t\t.listSemantics()\n\t\t.filter((name) => name.startsWith('WEIGHTS_'))\n\t\t.map((name) => prim.getAttribute(name)!);\n\tconst normList = attributes.map((a) => a.getNormalized());\n\tconst typeList = attributes.map((a) => a.getComponentType());\n\treturn new Set(normList).size === 1 && new Set(typeList).size === 1;\n}\n","import {\n\tAccessor,\n\tAnimationChannel,\n\tbbox,\n\tDocument,\n\tILogger,\n\tmat4,\n\tMathUtils,\n\tMesh,\n\tNode,\n\tPrimitive,\n\tPrimitiveTarget,\n\tPropertyType,\n\tSkin,\n\tTransform,\n\tvec2,\n\tvec3,\n\tvec4,\n} from '@gltf-transform/core';\nimport { dedup } from './dedup.js';\nimport { fromRotationTranslationScale, fromScaling, invert, multiply as multiplyMat4 } from 'gl-matrix/mat4';\nimport { max, min, scale, transformMat4 } from 'gl-matrix/vec3';\nimport { InstancedMesh, KHRMeshQuantization } from '@gltf-transform/extensions';\nimport type { Volume } from '@gltf-transform/extensions';\nimport { prune } from './prune.js';\nimport { assignDefaults, createTransform } from './utils.js';\nimport { sortPrimitiveWeights } from './sort-primitive-weights.js';\nimport { getPrimitiveVertexCount, VertexCountMethod } from './get-vertex-count.js';\nimport { compactPrimitive } from './compact-primitive.js';\n\nconst NAME = 'quantize';\n\ntype TypedArrayConstructor =\n\t| Int8ArrayConstructor\n\t| Int16ArrayConstructor\n\t| Uint8ArrayConstructor\n\t| Uint16ArrayConstructor;\nconst SIGNED_INT = [Int8Array, Int16Array, Int32Array] as TypedArrayConstructor[];\n\nconst { TRANSLATION, ROTATION, SCALE, WEIGHTS } = AnimationChannel.TargetPath;\nconst TRS_CHANNELS = [TRANSLATION, ROTATION, SCALE];\n\n/** Options for the {@link quantize} function. */\nexport interface QuantizeOptions {\n\t/** Pattern (regex) used to filter vertex attribute semantics for quantization. Default: all. */\n\tpattern?: RegExp;\n\t/** Pattern (regex) used to filter morph target semantics for quantization. Default: `options.pattern`. */\n\tpatternTargets?: RegExp;\n\t/** Bounds for quantization grid. */\n\tquantizationVolume?: 'mesh' | 'scene';\n\t/** Quantization bits for `POSITION` attributes. */\n\tquantizePosition?: number;\n\t/** Quantization bits for `NORMAL` attributes. */\n\tquantizeNormal?: number;\n\t/** Quantization bits for `TEXCOORD_*` attributes. */\n\tquantizeTexcoord?: number;\n\t/** Quantization bits for `COLOR_*` attributes. */\n\tquantizeColor?: number;\n\t/** Quantization bits for `WEIGHT_*` attributes. */\n\tquantizeWeight?: number;\n\t/** Quantization bits for application-specific (`_*`) attributes. */\n\tquantizeGeneric?: number;\n\t/** Normalize weight attributes. */\n\tnormalizeWeights?: boolean;\n\t/**\n\t * Whether to perform cleanup steps after completing the operation. Recommended, and enabled by\n\t * default. Cleanup removes temporary resources created during the operation, but may also remove\n\t * pre-existing unused or duplicate resources in the {@link Document}. Applications that require\n\t * keeping these resources may need to disable cleanup, instead calling {@link dedup} and\n\t * {@link prune} manually (with customized options) later in the processing pipeline.\n\t * @experimental\n\t */\n\tcleanup?: boolean;\n}\n\nexport const QUANTIZE_DEFAULTS: Required<Omit<QuantizeOptions, 'patternTargets'>> = {\n\tpattern: /.*/,\n\tquantizationVolume: 'mesh',\n\tquantizePosition: 14,\n\tquantizeNormal: 10,\n\tquantizeTexcoord: 12,\n\tquantizeColor: 8,\n\tquantizeWeight: 8,\n\tquantizeGeneric: 12,\n\tnormalizeWeights: true,\n\tcleanup: true,\n};\n\n/**\n * References:\n * - https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n * - http://www.aclockworkberry.com/normal-unpacking-quantization-errors/\n * - https://www.mathworks.com/help/dsp/ref/uniformencoder.html\n * - https://oroboro.com/compressed-unit-vectors/\n */\n\n/**\n * Quantizes vertex attributes with `KHR_mesh_quantization`, reducing the size and memory footprint\n * of the file. Conceptually, quantization refers to snapping values to regular intervals; vertex\n * positions are snapped to a 3D grid, UVs to a 2D grid, and so on. When quantized to <= 16 bits,\n * larger component types may be more compactly stored as 16-bit or 8-bit attributes.\n *\n * Often, it can be useful to quantize to precision lower than the maximum allowed by the component\n * type. Positions quantized to 14 bits in a 16-bit accessor will occupy 16 bits in VRAM, but they\n * can be compressed further for network compression with lossless encodings such as ZSTD.\n *\n * Vertex positions are shifted into [-1,1] or [0,1] range before quantization. Compensating for\n * that shift, a transform is applied to the parent {@link Node}, or inverse bind matrices for a\n * {@link Skin} if applicable. Materials using {@link KHRMaterialsVolume} are adjusted to maintain\n * appearance. In future releases, UVs may also be transformed with {@link KHRTextureTransform}.\n * Currently UVs outside of [0,1] range are not quantized.\n *\n * In most cases, quantization requires {@link KHRMeshQuantization}; the extension will be added\n * automatically when `quantize()` is applied. When applying meshopt compression with\n * {@link EXTMeshoptCompression}, quantization is usually applied before compression.\n *\n * Example:\n *\n * ```javascript\n * import { quantize } from '@gltf-transform/functions';\n *\n * await document.transform(\n *   quantize({\n *\t\tquantizePosition: 14,\n *\t\tquantizeNormal: 10,\n *   }),\n * );\n * ```\n *\n * For the inverse operation, see {@link dequantize}.\n *\n * @category Transforms\n */\nexport function quantize(_options: QuantizeOptions = QUANTIZE_DEFAULTS): Transform {\n\tconst options = assignDefaults(QUANTIZE_DEFAULTS, {\n\t\tpatternTargets: _options.pattern || QUANTIZE_DEFAULTS.pattern,\n\t\t..._options,\n\t});\n\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tconst logger = document.getLogger();\n\t\tconst root = document.getRoot();\n\n\t\t// Compute vertex position quantization volume.\n\t\tlet nodeTransform: VectorTransform<vec3> | undefined = undefined;\n\t\tif (options.quantizationVolume === 'scene') {\n\t\t\tnodeTransform = getNodeTransform(expandBounds(root.listMeshes().map(getPositionQuantizationVolume)));\n\t\t}\n\n\t\t// Quantize mesh primitives.\n\t\tfor (const mesh of document.getRoot().listMeshes()) {\n\t\t\tif (options.quantizationVolume === 'mesh') {\n\t\t\t\tnodeTransform = getNodeTransform(getPositionQuantizationVolume(mesh));\n\t\t\t}\n\n\t\t\tif (nodeTransform && options.pattern.test('POSITION')) {\n\t\t\t\ttransformMeshParents(document, mesh, nodeTransform);\n\t\t\t\ttransformMeshMaterials(mesh, 1 / nodeTransform.scale);\n\t\t\t}\n\n\t\t\tfor (const prim of mesh.listPrimitives()) {\n\t\t\t\tconst renderCount = getPrimitiveVertexCount(prim, VertexCountMethod.RENDER);\n\t\t\t\tconst uploadCount = getPrimitiveVertexCount(prim, VertexCountMethod.UPLOAD);\n\t\t\t\tif (renderCount < uploadCount / 2) {\n\t\t\t\t\tcompactPrimitive(prim);\n\t\t\t\t}\n\t\t\t\tquantizePrimitive(document, prim, nodeTransform!, options);\n\t\t\t\tfor (const target of prim.listTargets()) {\n\t\t\t\t\tquantizePrimitive(document, target, nodeTransform!, options);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst needsExtension = root\n\t\t\t.listMeshes()\n\t\t\t.flatMap((mesh) => mesh.listPrimitives())\n\t\t\t.some(isQuantizedPrimitive);\n\t\tif (needsExtension) {\n\t\t\tdocument.createExtension(KHRMeshQuantization).setRequired(true);\n\t\t}\n\n\t\tif (options.cleanup) {\n\t\t\tawait document.transform(\n\t\t\t\tprune({\n\t\t\t\t\tpropertyTypes: [PropertyType.ACCESSOR, PropertyType.SKIN, PropertyType.MATERIAL],\n\t\t\t\t\tkeepAttributes: true,\n\t\t\t\t\tkeepIndices: true,\n\t\t\t\t\tkeepLeaves: true,\n\t\t\t\t\tkeepSolidTextures: true,\n\t\t\t\t}),\n\t\t\t\tdedup({\n\t\t\t\t\tpropertyTypes: [PropertyType.ACCESSOR, PropertyType.MATERIAL, PropertyType.SKIN],\n\t\t\t\t\tkeepUniqueNames: true,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\nfunction quantizePrimitive(\n\tdocument: Document,\n\tprim: Primitive | PrimitiveTarget,\n\tnodeTransform: VectorTransform<vec3>,\n\toptions: Required<QuantizeOptions>,\n): void {\n\tconst isTarget = prim instanceof PrimitiveTarget;\n\tconst logger = document.getLogger();\n\n\tfor (const semantic of prim.listSemantics()) {\n\t\tif (!isTarget && !options.pattern.test(semantic)) continue;\n\t\tif (isTarget && !options.patternTargets.test(semantic)) continue;\n\n\t\tconst srcAttribute = prim.getAttribute(semantic)!;\n\n\t\tconst { bits, ctor } = getQuantizationSettings(semantic, srcAttribute, logger, options);\n\n\t\tif (!ctor) continue;\n\t\tif (bits < 8 || bits > 16) throw new Error(`${NAME}: Requires bits = 8–16.`);\n\t\tif (srcAttribute.getComponentSize() <= bits / 8) continue;\n\n\t\tconst dstAttribute = srcAttribute.clone();\n\n\t\t// Remap position data.\n\t\tif (semantic === 'POSITION') {\n\t\t\tconst scale = nodeTransform.scale;\n\t\t\tconst transform: mat4 = [] as unknown as mat4;\n\t\t\t// Morph targets are relative offsets, don't translate them.\n\t\t\tprim instanceof Primitive\n\t\t\t\t? invert(transform, fromTransform(nodeTransform))\n\t\t\t\t: fromScaling(transform, [1 / scale, 1 / scale, 1 / scale]);\n\t\t\tfor (let i = 0, el: vec3 = [0, 0, 0], il = dstAttribute.getCount(); i < il; i++) {\n\t\t\t\tdstAttribute.getElement(i, el);\n\t\t\t\tdstAttribute.setElement(i, transformMat4(el, el, transform) as vec3);\n\t\t\t}\n\t\t}\n\n\t\t// Quantize the vertex attribute.\n\t\tquantizeAttribute(dstAttribute, ctor, bits);\n\t\tprim.setAttribute(semantic, dstAttribute);\n\t}\n\n\t// Normalize skinning weights.\n\tif (options.normalizeWeights && prim.getAttribute('WEIGHTS_0')) {\n\t\tsortPrimitiveWeights(prim, Infinity);\n\t}\n\n\tif (\n\t\tprim instanceof Primitive &&\n\t\tprim.getIndices() &&\n\t\tprim.listAttributes().length &&\n\t\tprim.listAttributes()[0]!.getCount() < 65535\n\t) {\n\t\tconst indices = prim.getIndices()!;\n\t\tindices.setArray(new Uint16Array(indices.getArray()!));\n\t}\n}\n\n/** Computes node quantization transforms in local space. */\nfunction getNodeTransform(volume: bbox): VectorTransform<vec3> {\n\tconst { min, max } = volume;\n\n\t// Scaling factor transforms [-1,1] box to the mesh AABB in local space.\n\t// See: https://github.com/donmccurdy/glTF-Transform/issues/328\n\tconst scale = Math.max(\n\t\t(max[0] - min[0]) / 2, // Divide because interval [-1,1] has length 2.\n\t\t(max[1] - min[1]) / 2,\n\t\t(max[2] - min[2]) / 2,\n\t);\n\n\t// Original center of the mesh, in local space.\n\tconst offset: vec3 = [\n\t\tmin[0] + (max[0] - min[0]) / 2,\n\t\tmin[1] + (max[1] - min[1]) / 2,\n\t\tmin[2] + (max[2] - min[2]) / 2,\n\t];\n\n\treturn { offset, scale };\n}\n\n/** Applies corrective scale and offset to nodes referencing a quantized Mesh. */\nfunction transformMeshParents(document: Document, mesh: Mesh, nodeTransform: VectorTransform<vec3>): void {\n\tconst transformMatrix = fromTransform(nodeTransform);\n\tfor (const parent of mesh.listParents()) {\n\t\tif (!(parent instanceof Node)) continue;\n\n\t\tconst animChannels = parent.listParents().filter((p) => p instanceof AnimationChannel) as AnimationChannel[];\n\t\tconst isAnimated = animChannels.some((channel) => TRS_CHANNELS.includes(channel.getTargetPath()!));\n\t\tconst isParentNode = parent.listChildren().length > 0;\n\n\t\tconst skin = parent.getSkin();\n\t\tif (skin) {\n\t\t\tparent.setSkin(transformSkin(skin, nodeTransform));\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst batch = parent.getExtension<InstancedMesh>('EXT_mesh_gpu_instancing');\n\t\tif (batch) {\n\t\t\tparent.setExtension('EXT_mesh_gpu_instancing', transformBatch(document, batch, nodeTransform));\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet targetNode: Node;\n\t\tif (isParentNode || isAnimated) {\n\t\t\ttargetNode = document.createNode('').setMesh(mesh);\n\t\t\tparent.addChild(targetNode).setMesh(null);\n\t\t\tanimChannels\n\t\t\t\t.filter((channel) => channel.getTargetPath() === WEIGHTS)\n\t\t\t\t.forEach((channel) => channel.setTargetNode(targetNode));\n\t\t} else {\n\t\t\ttargetNode = parent;\n\t\t}\n\n\t\tconst nodeMatrix = targetNode.getMatrix();\n\t\tmultiplyMat4(nodeMatrix, nodeMatrix, transformMatrix);\n\t\ttargetNode.setMatrix(nodeMatrix);\n\t}\n}\n\n/** Applies corrective scale and offset to skin IBMs. */\nfunction transformSkin(skin: Skin, nodeTransform: VectorTransform<vec3>): Skin {\n\tskin = skin.clone(); // quantize() does cleanup.\n\tconst transformMatrix = fromTransform(nodeTransform);\n\tconst inverseBindMatrices = skin.getInverseBindMatrices()!.clone();\n\tconst ibm = [] as unknown as mat4;\n\tfor (let i = 0, count = inverseBindMatrices.getCount(); i < count; i++) {\n\t\tinverseBindMatrices.getElement(i, ibm);\n\t\tmultiplyMat4(ibm, ibm, transformMatrix);\n\t\tinverseBindMatrices.setElement(i, ibm);\n\t}\n\treturn skin.setInverseBindMatrices(inverseBindMatrices);\n}\n\n/** Applies corrective scale and offset to GPU instancing batches. */\nfunction transformBatch(document: Document, batch: InstancedMesh, nodeTransform: VectorTransform<vec3>): InstancedMesh {\n\tif (!batch.getAttribute('TRANSLATION') && !batch.getAttribute('ROTATION') && !batch.getAttribute('SCALE')) {\n\t\treturn batch;\n\t}\n\n\tbatch = batch.clone(); // quantize() does cleanup.\n\n\tlet instanceTranslation = batch.getAttribute('TRANSLATION')?.clone();\n\tconst instanceRotation = batch.getAttribute('ROTATION')?.clone();\n\tlet instanceScale = batch.getAttribute('SCALE')?.clone();\n\n\tconst tpl = (instanceTranslation || instanceRotation || instanceScale)!;\n\n\tconst T_IDENTITY = [0, 0, 0] as vec3;\n\tconst R_IDENTITY = [0, 0, 0, 1] as vec4;\n\tconst S_IDENTITY = [1, 1, 1] as vec3;\n\n\t// Transformed batch may now require instance translation or scale.\n\t// See: https://github.com/donmccurdy/glTF-Transform/issues/1584\n\n\tif (!instanceTranslation && nodeTransform.offset) {\n\t\tinstanceTranslation = document.createAccessor().setType('VEC3').setArray(makeArray(tpl.getCount(), T_IDENTITY));\n\t}\n\n\tif (!instanceScale && nodeTransform.scale) {\n\t\tinstanceScale = document.createAccessor().setType('VEC3').setArray(makeArray(tpl.getCount(), S_IDENTITY));\n\t}\n\n\tconst t = [0, 0, 0] as vec3;\n\tconst r = [0, 0, 0, 1] as vec4;\n\tconst s = [1, 1, 1] as vec3;\n\n\t// biome-ignore format: Readability.\n\tconst instanceMatrix = [\n\t\t1, 0, 0, 0,\n\t\t0, 1, 0, 0,\n\t\t0, 0, 1, 0,\n\t\t0, 0, 0, 1,\n\t] as mat4;\n\n\tconst transformMatrix = fromTransform(nodeTransform);\n\n\tfor (let i = 0, count = tpl.getCount(); i < count; i++) {\n\t\tMathUtils.compose(\n\t\t\tinstanceTranslation ? (instanceTranslation.getElement(i, t) as vec3) : T_IDENTITY,\n\t\t\tinstanceRotation ? (instanceRotation.getElement(i, r) as vec4) : R_IDENTITY,\n\t\t\tinstanceScale ? (instanceScale.getElement(i, s) as vec3) : S_IDENTITY,\n\t\t\tinstanceMatrix,\n\t\t);\n\n\t\tmultiplyMat4(instanceMatrix, instanceMatrix, transformMatrix);\n\n\t\tMathUtils.decompose(instanceMatrix, t, r, s);\n\n\t\tif (instanceTranslation) instanceTranslation.setElement(i, t);\n\t\tif (instanceRotation) instanceRotation.setElement(i, r);\n\t\tif (instanceScale) instanceScale.setElement(i, s);\n\t}\n\n\tif (instanceTranslation) batch.setAttribute('TRANSLATION', instanceTranslation);\n\tif (instanceRotation) batch.setAttribute('ROTATION', instanceRotation);\n\tif (instanceScale) batch.setAttribute('SCALE', instanceScale);\n\n\treturn batch;\n}\n\n/** Applies corrective scale to volumetric materials, which give thickness in local units. */\nfunction transformMeshMaterials(mesh: Mesh, scale: number) {\n\tfor (const prim of mesh.listPrimitives()) {\n\t\tlet material = prim.getMaterial();\n\t\tif (!material) continue;\n\n\t\tlet volume = material.getExtension<Volume>('KHR_materials_volume');\n\t\tif (!volume || volume.getThicknessFactor() <= 0) continue;\n\n\t\t// quantize() does cleanup.\n\t\tvolume = volume.clone().setThicknessFactor(volume.getThicknessFactor() * scale);\n\t\tmaterial = material.clone().setExtension('KHR_materials_volume', volume);\n\t\tprim.setMaterial(material);\n\t}\n}\n\n/**\n * Quantizes an attribute to the given parameters.\n *\n * Uniformly remap 32-bit floats to reduced-precision 8- or 16-bit integers, so\n * that there are only 2^N unique values, for N within [8, 16].\n *\n * See: https://github.com/donmccurdy/glTF-Transform/issues/208\n */\nfunction quantizeAttribute(attribute: Accessor, ctor: TypedArrayConstructor, bits: number): void {\n\tconst dstArray = new ctor(attribute.getArray()!.length);\n\n\tconst signBits = SIGNED_INT.includes(ctor) ? 1 : 0;\n\tconst quantBits = bits - signBits;\n\tconst storageBits = ctor.BYTES_PER_ELEMENT * 8 - signBits;\n\n\tconst scale = Math.pow(2, quantBits) - 1;\n\tconst lo = storageBits - quantBits;\n\tconst hi = 2 * quantBits - storageBits;\n\tconst range = [signBits > 0 ? -1 : 0, 1] as vec2;\n\n\tfor (let i = 0, di = 0, el: number[] = []; i < attribute.getCount(); i++) {\n\t\tattribute.getElement(i, el);\n\t\tfor (let j = 0; j < el.length; j++) {\n\t\t\t// Clamp to range.\n\t\t\tlet value = clamp(el[j], range);\n\n\t\t\t// Map [0.0 ... 1.0] to [0 ... scale].\n\t\t\tvalue = Math.round(Math.abs(value) * scale);\n\n\t\t\t// Replicate msb to missing lsb.\n\t\t\tvalue = (value << lo) | (value >> hi);\n\n\t\t\t// Restore sign.\n\t\t\tdstArray[di++] = value * Math.sign(el[j]);\n\t\t}\n\t}\n\n\t// TODO(feat): Support sparse accessors, https://github.com/donmccurdy/glTF-Transform/issues/795\n\tattribute.setArray(dstArray).setNormalized(true).setSparse(false);\n}\n\nfunction getQuantizationSettings(\n\tsemantic: string,\n\tattribute: Accessor,\n\tlogger: ILogger,\n\toptions: Required<QuantizeOptions>,\n): { bits: number; ctor?: TypedArrayConstructor } {\n\tconst min = attribute.getMinNormalized([]);\n\tconst max = attribute.getMaxNormalized([]);\n\n\tlet bits: number;\n\tlet ctor: TypedArrayConstructor;\n\n\tif (semantic === 'POSITION') {\n\t\tbits = options.quantizePosition;\n\t\tctor = bits <= 8 ? Int8Array : Int16Array;\n\t} else if (semantic === 'NORMAL' || semantic === 'TANGENT') {\n\t\tbits = options.quantizeNormal;\n\t\tctor = bits <= 8 ? Int8Array : Int16Array;\n\t} else if (semantic.startsWith('COLOR_')) {\n\t\tbits = options.quantizeColor;\n\t\tctor = bits <= 8 ? Uint8Array : Uint16Array;\n\t} else if (semantic.startsWith('TEXCOORD_')) {\n\t\tif (min.some((v) => v < 0) || max.some((v) => v > 1)) {\n\t\t\tlogger.warn(`${NAME}: Skipping ${semantic}; out of [0,1] range.`);\n\t\t\treturn { bits: -1 };\n\t\t}\n\t\tbits = options.quantizeTexcoord;\n\t\tctor = bits <= 8 ? Uint8Array : Uint16Array;\n\t} else if (semantic.startsWith('JOINTS_')) {\n\t\tbits = Math.max(...attribute.getMax([])) <= 255 ? 8 : 16;\n\t\tctor = bits <= 8 ? Uint8Array : Uint16Array;\n\t\tif (attribute.getComponentSize() > bits / 8) {\n\t\t\tattribute.setArray(new ctor(attribute.getArray()!));\n\t\t}\n\t\treturn { bits: -1 };\n\t} else if (semantic.startsWith('WEIGHTS_')) {\n\t\tif (min.some((v) => v < 0) || max.some((v) => v > 1)) {\n\t\t\tlogger.warn(`${NAME}: Skipping ${semantic}; out of [0,1] range.`);\n\t\t\treturn { bits: -1 };\n\t\t}\n\t\tbits = options.quantizeWeight;\n\t\tctor = bits <= 8 ? Uint8Array : Uint16Array;\n\t} else if (semantic.startsWith('_')) {\n\t\tif (min.some((v) => v < -1) || max.some((v) => v > 1)) {\n\t\t\tlogger.warn(`${NAME}: Skipping ${semantic}; out of [-1,1] range.`);\n\t\t\treturn { bits: -1 };\n\t\t}\n\t\tbits = options.quantizeGeneric;\n\t\tctor = min.some((v) => v < 0)\n\t\t\t? (ctor = bits <= 8 ? Int8Array : Int16Array)\n\t\t\t: (ctor = bits <= 8 ? Uint8Array : Uint16Array);\n\t} else {\n\t\tthrow new Error(`${NAME}: Unexpected semantic, \"${semantic}\".`);\n\t}\n\n\treturn { bits, ctor };\n}\n\nfunction getPositionQuantizationVolume(mesh: Mesh): bbox {\n\tconst positions: Accessor[] = [];\n\tconst relativePositions: Accessor[] = [];\n\tfor (const prim of mesh.listPrimitives()) {\n\t\tconst attribute = prim.getAttribute('POSITION');\n\t\tif (attribute) positions.push(attribute);\n\t\tfor (const target of prim.listTargets()) {\n\t\t\tconst attribute = target.getAttribute('POSITION');\n\t\t\tif (attribute) relativePositions.push(attribute);\n\t\t}\n\t}\n\n\tif (positions.length === 0) {\n\t\tthrow new Error(`${NAME}: Missing \"POSITION\" attribute.`);\n\t}\n\n\tconst bbox = flatBounds<vec3>(positions, 3);\n\n\t// Morph target quantization volume is computed differently. First, ensure that the origin\n\t// <0, 0, 0> is in the quantization volume. Because we can't offset target positions (they're\n\t// relative deltas), default remapping will only map to a [-2, 2] AABB. Double the bounding box\n\t// to ensure scaling puts them within a [-1, 1] AABB instead.\n\tif (relativePositions.length > 0) {\n\t\tconst { min: relMin, max: relMax } = flatBounds<vec3>(relativePositions, 3);\n\t\tmin(bbox.min, bbox.min, min(relMin, scale(relMin, relMin, 2), [0, 0, 0]));\n\t\tmax(bbox.max, bbox.max, max(relMax, scale(relMax, relMax, 2), [0, 0, 0]));\n\t}\n\n\treturn bbox;\n}\n\nfunction isQuantizedAttribute(semantic: string, attribute: Accessor): boolean {\n\t// https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview\n\tconst componentSize = attribute.getComponentSize();\n\tif (semantic === 'POSITION') return componentSize < 4;\n\tif (semantic === 'NORMAL') return componentSize < 4;\n\tif (semantic === 'TANGENT') return componentSize < 4;\n\tif (semantic.startsWith('TEXCOORD_')) {\n\t\tconst componentType = attribute.getComponentType();\n\t\tconst normalized = attribute.getNormalized();\n\t\treturn (\n\t\t\tcomponentSize < 4 &&\n\t\t\t!(normalized && componentType === Accessor.ComponentType.UNSIGNED_BYTE) &&\n\t\t\t!(normalized && componentType === Accessor.ComponentType.UNSIGNED_SHORT)\n\t\t);\n\t}\n\treturn false;\n}\n\nfunction isQuantizedPrimitive(prim: Primitive | PrimitiveTarget): boolean {\n\tfor (const semantic of prim.listSemantics()) {\n\t\tconst attribute = prim.getAttribute('POSITION')!;\n\t\tif (isQuantizedAttribute(semantic, attribute)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\tif (prim.propertyType === PropertyType.PRIMITIVE) {\n\t\treturn prim.listTargets().some(isQuantizedPrimitive);\n\t}\n\treturn false;\n}\n\n/** Computes total min and max of all Accessors in a list. */\nfunction flatBounds<T = vec2 | vec3>(accessors: Accessor[], elementSize: number): { min: T; max: T } {\n\tconst min: number[] = new Array(elementSize).fill(Infinity);\n\tconst max: number[] = new Array(elementSize).fill(-Infinity);\n\n\tconst tmpMin: number[] = [];\n\tconst tmpMax: number[] = [];\n\n\tfor (const accessor of accessors) {\n\t\taccessor.getMinNormalized(tmpMin);\n\t\taccessor.getMaxNormalized(tmpMax);\n\t\tfor (let i = 0; i < elementSize; i++) {\n\t\t\tmin[i] = Math.min(min[i], tmpMin[i]);\n\t\t\tmax[i] = Math.max(max[i], tmpMax[i]);\n\t\t}\n\t}\n\n\treturn { min, max } as unknown as { min: T; max: T };\n}\n\nfunction expandBounds(bboxes: bbox[]): bbox {\n\tconst result = bboxes[0];\n\tfor (const bbox of bboxes) {\n\t\tmin(result.min, result.min, bbox.min);\n\t\tmax(result.max, result.max, bbox.max);\n\t}\n\treturn result;\n}\n\ninterface VectorTransform<T = vec2 | vec3 | vec4> {\n\toffset: T;\n\tscale: number;\n}\n\nfunction fromTransform(transform: VectorTransform<vec3>): mat4 {\n\treturn fromRotationTranslationScale([] as unknown as mat4, [0, 0, 0, 1], transform.offset, [\n\t\ttransform.scale,\n\t\ttransform.scale,\n\t\ttransform.scale,\n\t]) as mat4;\n}\n\nfunction clamp(value: number, range: vec2): number {\n\treturn Math.min(Math.max(value, range[0]), range[1]);\n}\n\nfunction makeArray(elementCount: number, initialElement: vec2 | vec3 | vec4) {\n\tconst elementSize = initialElement.length;\n\tconst array = new Float32Array(elementCount * elementSize);\n\n\tfor (let i = 0; i < elementCount; i++) {\n\t\tarray.set(initialElement, i * elementSize);\n\t}\n\n\treturn array;\n}\n","import type { Document, Transform } from '@gltf-transform/core';\nimport { EXTMeshoptCompression } from '@gltf-transform/extensions';\nimport type { MeshoptEncoder } from 'meshoptimizer';\nimport { reorder } from './reorder.js';\nimport { QUANTIZE_DEFAULTS, QuantizeOptions, quantize } from './quantize.js';\nimport { assignDefaults, createTransform } from './utils.js';\n\nexport interface MeshoptOptions extends Omit<QuantizeOptions, 'pattern' | 'patternTargets'> {\n\tencoder: unknown;\n\tlevel?: 'medium' | 'high';\n}\n\nexport const MESHOPT_DEFAULTS: Required<Omit<MeshoptOptions, 'encoder'>> = {\n\tlevel: 'high',\n\t...QUANTIZE_DEFAULTS,\n};\n\nconst NAME = 'meshopt';\n\n/**\n * Applies Meshopt compression using {@link EXTMeshoptCompression EXT_meshopt_compression}.\n * This type of compression can reduce the size of point, line, and triangle geometry,\n * morph targets, and animation data.\n *\n * This function is a thin wrapper around {@link reorder}, {@link quantize}, and\n * {@link EXTMeshoptCompression}, and exposes relatively few configuration options.\n * To access more options (like quantization bits) direct use of the underlying\n * functions is recommended.\n *\n * Example:\n *\n * ```javascript\n * import { MeshoptEncoder } from 'meshoptimizer';\n * import { meshopt } from '@gltf-transform/functions';\n *\n * await MeshoptEncoder.ready;\n *\n * await document.transform(\n *   meshopt({encoder: MeshoptEncoder, level: 'medium'})\n * );\n * ```\n *\n * Compression is deferred until generating output with an I/O class.\n *\n * @category Transforms\n */\nexport function meshopt(_options: MeshoptOptions): Transform {\n\tconst options = assignDefaults(MESHOPT_DEFAULTS, _options);\n\tconst encoder = options.encoder as typeof MeshoptEncoder | undefined;\n\n\tif (!encoder) {\n\t\tthrow new Error(`${NAME}: encoder dependency required — install \"meshoptimizer\".`);\n\t}\n\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tlet pattern: RegExp;\n\t\tlet patternTargets: RegExp;\n\t\tlet quantizeNormal = options.quantizeNormal;\n\n\t\tif (document.getRoot().listAccessors().length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\t// IMPORTANT: Vertex attributes should be quantized in 'high' mode IFF they are\n\t\t// _not_ filtered in 'packages/extensions/src/ext-meshopt-compression/encoder.ts'.\n\t\t// Note that normals and tangents use octahedral filters, but _morph_ normals\n\t\t// and tangents do not.\n\t\t// See: https://github.com/donmccurdy/glTF-Transform/issues/1142\n\t\tif (options.level === 'medium') {\n\t\t\tpattern = /.*/;\n\t\t\tpatternTargets = /.*/;\n\t\t} else {\n\t\t\tpattern = /^(POSITION|TEXCOORD|JOINTS|WEIGHTS|COLOR)(_\\d+)?$/;\n\t\t\tpatternTargets = /^(POSITION|TEXCOORD|JOINTS|WEIGHTS|COLOR|NORMAL|TANGENT)(_\\d+)?$/;\n\t\t\tquantizeNormal = Math.min(quantizeNormal, 8); // See meshopt::getMeshoptFilter.\n\t\t}\n\n\t\tawait document.transform(\n\t\t\treorder({\n\t\t\t\tencoder: encoder,\n\t\t\t\ttarget: 'size',\n\t\t\t}),\n\t\t\tquantize({\n\t\t\t\t...options,\n\t\t\t\tpattern,\n\t\t\t\tpatternTargets,\n\t\t\t\tquantizeNormal,\n\t\t\t}),\n\t\t);\n\n\t\tdocument\n\t\t\t.createExtension(EXTMeshoptCompression)\n\t\t\t.setRequired(true)\n\t\t\t.setEncoderOptions({\n\t\t\t\tmethod:\n\t\t\t\t\toptions.level === 'medium'\n\t\t\t\t\t\t? EXTMeshoptCompression.EncoderMethod.QUANTIZE\n\t\t\t\t\t\t: EXTMeshoptCompression.EncoderMethod.FILTER,\n\t\t\t});\n\t});\n}\n","import type { Document, Texture, Transform } from '@gltf-transform/core';\nimport {\n\tKHRMaterialsIOR,\n\tKHRMaterialsPBRSpecularGlossiness,\n\tKHRMaterialsSpecular,\n\tPBRSpecularGlossiness,\n} from '@gltf-transform/extensions';\nimport { createTransform, rewriteTexture } from './utils.js';\n\nconst NAME = 'metalRough';\n\nexport interface MetalRoughOptions {}\n\nconst METALROUGH_DEFAULTS: Required<MetalRoughOptions> = {};\n\n/**\n * Convert {@link Material}s from spec/gloss PBR workflow to metal/rough PBR workflow,\n * removing `KHR_materials_pbrSpecularGlossiness` and adding `KHR_materials_ior` and\n * `KHR_materials_specular`. The metal/rough PBR workflow is preferred for most use cases,\n * and is a prerequisite for other advanced PBR extensions provided by glTF.\n *\n * No options are currently implemented for this function.\n *\n * @category Transforms\n */\nexport function metalRough(_options: MetalRoughOptions = METALROUGH_DEFAULTS): Transform {\n\treturn createTransform(NAME, async (doc: Document): Promise<void> => {\n\t\tconst logger = doc.getLogger();\n\n\t\tconst extensionsUsed = doc\n\t\t\t.getRoot()\n\t\t\t.listExtensionsUsed()\n\t\t\t.map((ext) => ext.extensionName);\n\t\tif (!extensionsUsed.includes('KHR_materials_pbrSpecularGlossiness')) {\n\t\t\tlogger.warn(`${NAME}: KHR_materials_pbrSpecularGlossiness not found on document.`);\n\t\t\treturn;\n\t\t}\n\n\t\tconst iorExtension = doc.createExtension(KHRMaterialsIOR);\n\t\tconst specExtension = doc.createExtension(KHRMaterialsSpecular);\n\t\tconst specGlossExtension = doc.createExtension(KHRMaterialsPBRSpecularGlossiness);\n\n\t\tconst inputTextures = new Set<Texture | null>();\n\n\t\tfor (const material of doc.getRoot().listMaterials()) {\n\t\t\tconst specGloss = material.getExtension<PBRSpecularGlossiness>('KHR_materials_pbrSpecularGlossiness');\n\t\t\tif (!specGloss) continue;\n\n\t\t\t// Create specular extension.\n\t\t\tconst specular = specExtension\n\t\t\t\t.createSpecular()\n\t\t\t\t.setSpecularFactor(1.0)\n\t\t\t\t.setSpecularColorFactor(specGloss.getSpecularFactor());\n\n\t\t\t// Stash textures that might become unused, to check and clean up later.\n\t\t\tinputTextures.add(specGloss.getSpecularGlossinessTexture());\n\t\t\tinputTextures.add(material.getBaseColorTexture());\n\t\t\tinputTextures.add(material.getMetallicRoughnessTexture());\n\n\t\t\t// Set up a metal/rough PBR material with IOR=Infinity (or 0), metallic=0. This\n\t\t\t// representation is precise and reliable, but perhaps less convenient for artists\n\t\t\t// than deriving a metalness value. Unfortunately we can't do that without imprecise\n\t\t\t// heuristics, and perhaps user tuning.\n\t\t\t// See: https://github.com/KhronosGroup/glTF/pull/1719#issuecomment-674365677\n\t\t\tmaterial\n\t\t\t\t.setBaseColorFactor(specGloss.getDiffuseFactor())\n\t\t\t\t.setMetallicFactor(0)\n\t\t\t\t.setRoughnessFactor(1)\n\t\t\t\t.setExtension('KHR_materials_ior', iorExtension.createIOR().setIOR(1000))\n\t\t\t\t.setExtension('KHR_materials_specular', specular);\n\n\t\t\t// Move diffuse -> baseColor.\n\t\t\tconst diffuseTexture = specGloss.getDiffuseTexture();\n\t\t\tif (diffuseTexture) {\n\t\t\t\tmaterial.setBaseColorTexture(diffuseTexture);\n\t\t\t\tmaterial.getBaseColorTextureInfo()!.copy(specGloss.getDiffuseTextureInfo()!);\n\t\t\t}\n\n\t\t\t// Move specular + gloss -> specular + roughness.\n\t\t\tconst sgTexture = specGloss.getSpecularGlossinessTexture();\n\t\t\tif (sgTexture) {\n\t\t\t\t// specularGlossiness -> specular.\n\t\t\t\tconst sgTextureInfo = specGloss.getSpecularGlossinessTextureInfo()!;\n\t\t\t\tconst specularTexture = doc.createTexture();\n\t\t\t\tawait rewriteTexture(sgTexture, specularTexture, (pixels, i, j) => {\n\t\t\t\t\tpixels.set(i, j, 3, 255); // Remove glossiness.\n\t\t\t\t});\n\t\t\t\tspecular.setSpecularTexture(specularTexture);\n\t\t\t\tspecular.setSpecularColorTexture(specularTexture);\n\t\t\t\tspecular.getSpecularTextureInfo()!.copy(sgTextureInfo);\n\t\t\t\tspecular.getSpecularColorTextureInfo()!.copy(sgTextureInfo);\n\n\t\t\t\t// specularGlossiness -> roughness.\n\t\t\t\tconst glossinessFactor = specGloss.getGlossinessFactor();\n\t\t\t\tconst metalRoughTexture = doc.createTexture();\n\t\t\t\tawait rewriteTexture(sgTexture, metalRoughTexture, (pixels, i, j) => {\n\t\t\t\t\t// Invert glossiness.\n\t\t\t\t\tconst roughness = 255 - Math.round(pixels.get(i, j, 3) * glossinessFactor);\n\t\t\t\t\tpixels.set(i, j, 0, 0);\n\t\t\t\t\tpixels.set(i, j, 1, roughness);\n\t\t\t\t\tpixels.set(i, j, 2, 0);\n\t\t\t\t\tpixels.set(i, j, 3, 255);\n\t\t\t\t});\n\t\t\t\tmaterial.setMetallicRoughnessTexture(metalRoughTexture);\n\t\t\t\tmaterial.getMetallicRoughnessTextureInfo()!.copy(sgTextureInfo);\n\t\t\t} else {\n\t\t\t\tspecular.setSpecularColorFactor(specGloss.getSpecularFactor());\n\t\t\t\tmaterial.setRoughnessFactor(1 - specGloss.getGlossinessFactor());\n\t\t\t}\n\n\t\t\t// Remove KHR_materials_pbrSpecularGlossiness from the material.\n\t\t\tmaterial.setExtension('KHR_materials_pbrSpecularGlossiness', null);\n\t\t}\n\n\t\t// Remove KHR_materials_pbrSpecularGlossiness from the document.\n\t\tspecGlossExtension.dispose();\n\n\t\t// Clean up unused textures.\n\t\tfor (const tex of inputTextures) {\n\t\t\tif (tex && tex.listParents().length === 1) tex.dispose();\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n","import { Accessor, Document, Primitive, Transform, TypedArrayConstructor } from '@gltf-transform/core';\nimport { createTransform, formatDeltaOp, shallowCloneAccessor } from './utils.js';\n\nconst NAME = 'unweld';\n\n/** Options for the {@link unweld} function. */\nexport interface UnweldOptions {}\n\nconst UNWELD_DEFAULTS: UnweldOptions = {};\n\n/**\n * De-index {@link Primitive}s, disconnecting any shared vertices. This operation will generally\n * increase the number of vertices in a mesh, but may be helpful for some geometry operations or\n * for creating hard edges.\n *\n * No options are currently implemented for this function.\n *\n * @category Transforms\n */\nexport function unweld(_options: UnweldOptions = UNWELD_DEFAULTS): Transform {\n\treturn createTransform(NAME, (doc: Document): void => {\n\t\tconst logger = doc.getLogger();\n\t\tconst visited = new Map<Accessor, Map<Accessor, Accessor>>();\n\n\t\tfor (const mesh of doc.getRoot().listMeshes()) {\n\t\t\tfor (const prim of mesh.listPrimitives()) {\n\t\t\t\tunweldPrimitive(prim, visited);\n\t\t\t}\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\n/**\n * @hidden\n * @internal\n */\nexport function unweldPrimitive(prim: Primitive, visited = new Map<Accessor, Map<Accessor, Accessor>>()): void {\n\tconst indices = prim.getIndices();\n\tif (!indices) return;\n\n\tconst graph = prim.getGraph();\n\tconst document = Document.fromGraph(graph)!;\n\tconst logger = document.getLogger();\n\n\tconst srcVertexCount = prim.getAttribute('POSITION')!.getCount();\n\n\t// Vertex attributes.\n\tfor (const srcAttribute of prim.listAttributes()) {\n\t\tprim.swap(srcAttribute, unweldAttribute(document, srcAttribute, indices, visited));\n\n\t\t// Clean up.\n\t\tif (srcAttribute.listParents().length === 1) srcAttribute.dispose();\n\t}\n\n\t// Morph target vertex attributes.\n\tfor (const target of prim.listTargets()) {\n\t\tfor (const srcAttribute of target.listAttributes()) {\n\t\t\ttarget.swap(srcAttribute, unweldAttribute(document, srcAttribute, indices, visited));\n\n\t\t\t// Clean up.\n\t\t\tif (srcAttribute.listParents().length === 1) srcAttribute.dispose();\n\t\t}\n\t}\n\n\tconst dstVertexCount = prim.getAttribute('POSITION')!.getCount();\n\tlogger.debug(`${NAME}: ${formatDeltaOp(srcVertexCount, dstVertexCount)} vertices.`);\n\n\t// Clean up.\n\tprim.setIndices(null);\n\tif (indices.listParents().length === 1) indices.dispose();\n}\n\nfunction unweldAttribute(\n\tdocument: Document,\n\tsrcAttribute: Accessor,\n\tindices: Accessor,\n\tvisited: Map<Accessor, Map<Accessor, Accessor>>,\n): Accessor {\n\tif (visited.has(srcAttribute) && visited.get(srcAttribute)!.has(indices)) {\n\t\treturn visited.get(srcAttribute)!.get(indices)!;\n\t}\n\n\tconst srcArray = srcAttribute.getArray()!;\n\tconst TypedArray = srcArray.constructor as TypedArrayConstructor;\n\tconst dstArray = new TypedArray(indices.getCount() * srcAttribute.getElementSize());\n\n\tconst indicesArray = indices.getArray()!;\n\tconst elementSize = srcAttribute.getElementSize();\n\tfor (let i = 0, il = indices.getCount(); i < il; i++) {\n\t\tfor (let j = 0; j < elementSize; j++) {\n\t\t\tdstArray[i * elementSize + j] = srcArray[indicesArray[i] * elementSize + j];\n\t\t}\n\t}\n\n\tif (!visited.has(srcAttribute)) visited.set(srcAttribute, new Map());\n\tconst dstAttribute = shallowCloneAccessor(document, srcAttribute).setArray(dstArray);\n\tvisited.get(srcAttribute)!.set(indices, dstAttribute);\n\n\treturn dstAttribute;\n}\n","import type { Document, Transform, vec3 } from '@gltf-transform/core';\nimport { unweld } from './unweld.js';\nimport { assignDefaults, createTransform } from './utils.js';\nimport { normalize } from 'gl-matrix/vec3';\n\nconst NAME = 'normals';\n\n/** Options for the {@link normals} function. */\nexport interface NormalsOptions {\n\t/** Whether to overwrite existing `NORMAL` attributes. */\n\toverwrite?: boolean;\n}\n\nconst NORMALS_DEFAULTS: Required<NormalsOptions> = {\n\toverwrite: false,\n};\n\n/**\n * Generates flat vertex normals for mesh primitives.\n *\n * Example:\n *\n * ```ts\n * import { normals } from '@gltf-transform/functions';\n *\n * await document.transform(normals({overwrite: true}));\n * ```\n *\n * @category Transforms\n */\nexport function normals(_options: NormalsOptions = NORMALS_DEFAULTS): Transform {\n\tconst options = assignDefaults(NORMALS_DEFAULTS, _options);\n\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tconst logger = document.getLogger();\n\t\tlet modified = 0;\n\n\t\tawait document.transform(unweld());\n\n\t\tfor (const mesh of document.getRoot().listMeshes()) {\n\t\t\tfor (const prim of mesh.listPrimitives()) {\n\t\t\t\tconst position = prim.getAttribute('POSITION')!;\n\t\t\t\tlet normal = prim.getAttribute('NORMAL');\n\n\t\t\t\tif (options.overwrite && normal) {\n\t\t\t\t\tnormal.dispose();\n\t\t\t\t} else if (normal) {\n\t\t\t\t\tlogger.debug(`${NAME}: Skipping primitive: NORMAL found.`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tnormal = document\n\t\t\t\t\t.createAccessor()\n\t\t\t\t\t.setArray(new Float32Array(position.getCount() * 3))\n\t\t\t\t\t.setType('VEC3');\n\n\t\t\t\tconst a = [0, 0, 0] as vec3;\n\t\t\t\tconst b = [0, 0, 0] as vec3;\n\t\t\t\tconst c = [0, 0, 0] as vec3;\n\n\t\t\t\tfor (let i = 0; i < position.getCount(); i += 3) {\n\t\t\t\t\tposition.getElement(i + 0, a);\n\t\t\t\t\tposition.getElement(i + 1, b);\n\t\t\t\t\tposition.getElement(i + 2, c);\n\n\t\t\t\t\tconst faceNormal = computeNormal(a, b, c);\n\n\t\t\t\t\tnormal.setElement(i + 0, faceNormal);\n\t\t\t\t\tnormal.setElement(i + 1, faceNormal);\n\t\t\t\t\tnormal.setElement(i + 2, faceNormal);\n\t\t\t\t}\n\n\t\t\t\tprim.setAttribute('NORMAL', normal);\n\t\t\t\tmodified++;\n\t\t\t}\n\t\t}\n\n\t\tif (!modified) {\n\t\t\tlogger.warn(`${NAME}: No qualifying primitives found. See debug output.`);\n\t\t} else {\n\t\t\tlogger.debug(`${NAME}: Complete.`);\n\t\t}\n\t});\n}\n\n// https://stackoverflow.com/a/23709352/1314762\nfunction computeNormal(a: vec3, b: vec3, c: vec3): vec3 {\n\tconst A = [b[0] - a[0], b[1] - a[1], b[2] - a[2]];\n\tconst B = [c[0] - a[0], c[1] - a[1], c[2] - a[2]];\n\tconst n = [\n\t\tA[1] * B[2] - A[2] * B[1], //\n\t\tA[2] * B[0] - A[0] * B[2],\n\t\tA[0] * B[1] - A[1] * B[0],\n\t] as vec3;\n\treturn normalize([0, 0, 0], n) as vec3;\n}\n","import {\n\tColorUtils,\n\tDocument,\n\tMaterial,\n\tPrimitive,\n\tPropertyType,\n\tTexture,\n\tTextureInfo,\n\tTransform,\n\tvec4,\n} from '@gltf-transform/core';\nimport { assignDefaults, createTransform } from './utils.js';\nimport { prune } from './prune.js';\nimport ndarray, { NdArray, TypedArray } from 'ndarray';\nimport { savePixels } from 'ndarray-pixels';\n\nconst NAME = 'palette';\n\ntype TexturableProp = 'baseColor' | 'emissive' | 'metallicRoughness';\n\nexport interface PaletteOptions {\n\t/** Size (in pixels) of a single block within each palette texture. Default: 4. */\n\tblockSize?: number;\n\t/**\n\t * Minimum number of blocks in the palette texture. If fewer unique\n\t * material values are found, no palettes will be generated. Default: 5.\n\t */\n\tmin?: number;\n\t/**\n\t * Whether to keep unused vertex attributes, such as UVs without an assigned\n\t * texture. If kept, unused UV coordinates may prevent palette texture\n\t * creation. Default: false.\n\t */\n\tkeepAttributes?: boolean;\n\t/**\n\t * Whether to perform cleanup steps after completing the operation. Recommended, and enabled by\n\t * default. Cleanup removes temporary resources created during the operation, but may also remove\n\t * pre-existing unused or duplicate resources in the {@link Document}. Applications that require\n\t * keeping these resources may need to disable cleanup, instead calling {@link dedup} and\n\t * {@link prune} manually (with customized options) later in the processing pipeline.\n\t * @experimental\n\t */\n\tcleanup?: boolean;\n}\n\nexport const PALETTE_DEFAULTS: Required<PaletteOptions> = {\n\tblockSize: 4,\n\tmin: 5,\n\tkeepAttributes: false,\n\tcleanup: true,\n};\n\n/**\n * Creates palette textures containing all unique values of scalar\n * {@link Material} properties within the scene, then merges materials. For\n * scenes with many solid-colored materials (often found in CAD, architectural,\n * or low-poly styles), texture palettes can reduce the number of materials\n * used, and significantly increase the number of {@link Mesh} objects eligible\n * for {@link join} operations.\n *\n * Materials already containing texture coordinates (UVs) are not eligible for\n * texture palette optimizations. Currently only a material's base color,\n * alpha, emissive factor, metallic factor, and roughness factor are converted\n * to palette textures.\n *\n * Example:\n *\n * ```typescript\n * import { palette, flatten, dequantize, join } from '@gltf-transform/functions';\n *\n * await document.transform(\n * \tpalette({ min: 5 }),\n * \tflatten(),\n * \tdequantize(),\n * \tjoin()\n * );\n * ```\n *\n * The illustration below shows a typical base color palette texture:\n *\n * <img\n * \tsrc=\"/media/functions/palette.png\"\n * \talt=\"Row of colored blocks\"\n * \tstyle=\"width: 100%; max-width: 320px; image-rendering: pixelated;\">\n *\n * @category Transforms\n */\nexport function palette(_options: PaletteOptions = PALETTE_DEFAULTS): Transform {\n\tconst options = assignDefaults(PALETTE_DEFAULTS, _options);\n\tconst blockSize = Math.max(options.blockSize, 1);\n\tconst min = Math.max(options.min, 1);\n\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tconst logger = document.getLogger();\n\t\tconst root = document.getRoot();\n\n\t\t// Find and remove unused TEXCOORD_n attributes.\n\t\tif (!options.keepAttributes) {\n\t\t\tawait document.transform(\n\t\t\t\tprune({\n\t\t\t\t\tpropertyTypes: [PropertyType.ACCESSOR],\n\t\t\t\t\tkeepAttributes: false,\n\t\t\t\t\tkeepIndices: true,\n\t\t\t\t\tkeepLeaves: true,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tconst prims = new Set<Primitive>();\n\t\tconst materials = new Set<Material>();\n\n\t\t// (1) Gather list of eligible prims and materials.\n\n\t\tfor (const mesh of root.listMeshes()) {\n\t\t\tfor (const prim of mesh.listPrimitives()) {\n\t\t\t\tconst material = prim.getMaterial();\n\t\t\t\tif (!material || !!prim.getAttribute('TEXCOORD_0')) continue;\n\n\t\t\t\tprims.add(prim);\n\t\t\t\tmaterials.add(material);\n\t\t\t}\n\t\t}\n\n\t\t// (2) Gather list of distinct material properties.\n\n\t\tconst materialKeys = new Set<string>();\n\t\tconst materialKeyMap = new Map<Material, string>();\n\t\tconst materialProps: Record<TexturableProp, Set<string>> = {\n\t\t\tbaseColor: new Set<string>(),\n\t\t\temissive: new Set<string>(),\n\t\t\tmetallicRoughness: new Set<string>(),\n\t\t};\n\n\t\tfor (const material of materials) {\n\t\t\tconst baseColor = encodeRGBA(material.getBaseColorFactor().slice() as vec4);\n\t\t\tconst emissive = encodeRGBA([...material.getEmissiveFactor(), 1]);\n\t\t\tconst roughness = encodeFloat(material.getRoughnessFactor());\n\t\t\tconst metallic = encodeFloat(material.getMetallicFactor());\n\t\t\tconst key = `baseColor:${baseColor},emissive:${emissive},metallicRoughness:${metallic}${roughness}`;\n\t\t\tmaterialProps.baseColor.add(baseColor);\n\t\t\tmaterialProps.emissive.add(emissive);\n\t\t\tmaterialProps.metallicRoughness.add(metallic + '+' + roughness);\n\t\t\tmaterialKeys.add(key);\n\t\t\tmaterialKeyMap.set(material, key);\n\t\t}\n\n\t\t// logger.debug(`${NAME}:\\n${Array.from(materialKeys.values()).join('\\n')}`);\n\n\t\tconst keyCount = materialKeys.size;\n\t\tif (keyCount < min) {\n\t\t\tlogger.debug(`${NAME}: Found <${min} unique material properties. Exiting.`);\n\t\t\treturn;\n\t\t}\n\n\t\t// (3) Allocate palette textures.\n\n\t\tconst w = ceilPowerOfTwo(keyCount * blockSize);\n\t\tconst h = ceilPowerOfTwo(blockSize);\n\t\tconst padWidth = w - keyCount * blockSize;\n\n\t\tconst paletteTexturePixels: Record<TexturableProp, NdArray<Uint8Array> | null> = {\n\t\t\tbaseColor: null,\n\t\t\temissive: null,\n\t\t\tmetallicRoughness: null,\n\t\t};\n\n\t\t// Properties skipped for material equality comparisons.\n\t\tconst skipProps = new Set(['name', 'extras']);\n\t\tconst skip = (...props: string[]) => props.forEach((prop) => skipProps.add(prop));\n\n\t\tlet baseColorTexture: Texture | null = null;\n\t\tlet emissiveTexture: Texture | null = null;\n\t\tlet metallicRoughnessTexture: Texture | null = null;\n\n\t\tif (materialProps.baseColor.size >= min) {\n\t\t\tconst name = 'PaletteBaseColor';\n\t\t\tbaseColorTexture = document.createTexture(name).setURI(`${name}.png`);\n\t\t\tpaletteTexturePixels.baseColor = ndarray(new Uint8Array(w * h * 4), [w, h, 4]);\n\t\t\tskip('baseColorFactor', 'baseColorTexture', 'baseColorTextureInfo');\n\t\t}\n\t\tif (materialProps.emissive.size >= min) {\n\t\t\tconst name = 'PaletteEmissive';\n\t\t\temissiveTexture = document.createTexture(name).setURI(`${name}.png`);\n\t\t\tpaletteTexturePixels.emissive = ndarray(new Uint8Array(w * h * 4), [w, h, 4]);\n\t\t\tskip('emissiveFactor', 'emissiveTexture', 'emissiveTextureInfo');\n\t\t}\n\t\tif (materialProps.metallicRoughness.size >= min) {\n\t\t\tconst name = 'PaletteMetallicRoughness';\n\t\t\tmetallicRoughnessTexture = document.createTexture(name).setURI(`${name}.png`);\n\t\t\tpaletteTexturePixels.metallicRoughness = ndarray(new Uint8Array(w * h * 4), [w, h, 4]);\n\t\t\tskip('metallicFactor', 'roughnessFactor', 'metallicRoughnessTexture', 'metallicRoughnessTextureInfo');\n\t\t}\n\n\t\tif (!(baseColorTexture || emissiveTexture || metallicRoughnessTexture)) {\n\t\t\tlogger.debug(`${NAME}: No material property has >=${min} unique values. Exiting.`);\n\t\t\treturn;\n\t\t}\n\n\t\t// (4) Write blocks to palette textures.\n\n\t\tconst visitedKeys = new Set<string>();\n\t\tconst materialIndices = new Map<string, number>();\n\t\tconst paletteMaterials: Material[] = [];\n\n\t\tlet nextIndex = 0;\n\t\tfor (const material of materials) {\n\t\t\tconst key = materialKeyMap.get(material)!;\n\t\t\tif (visitedKeys.has(key)) continue;\n\n\t\t\tconst index = nextIndex++;\n\n\t\t\tif (paletteTexturePixels.baseColor) {\n\t\t\t\tconst pixels = paletteTexturePixels.baseColor;\n\t\t\t\tconst baseColor = [...material.getBaseColorFactor()] as vec4;\n\t\t\t\tColorUtils.convertLinearToSRGB(baseColor, baseColor);\n\t\t\t\twriteBlock(pixels, index, baseColor, blockSize);\n\t\t\t}\n\t\t\tif (paletteTexturePixels.emissive) {\n\t\t\t\tconst pixels = paletteTexturePixels.emissive;\n\t\t\t\tconst emissive = [...material.getEmissiveFactor(), 1] as vec4;\n\t\t\t\tColorUtils.convertLinearToSRGB(emissive, emissive);\n\t\t\t\twriteBlock(pixels, index, emissive, blockSize);\n\t\t\t}\n\t\t\tif (paletteTexturePixels.metallicRoughness) {\n\t\t\t\tconst pixels = paletteTexturePixels.metallicRoughness;\n\t\t\t\tconst metallic = material.getMetallicFactor();\n\t\t\t\tconst roughness = material.getRoughnessFactor();\n\t\t\t\twriteBlock(pixels, index, [0, roughness, metallic, 1], blockSize);\n\t\t\t}\n\n\t\t\tvisitedKeys.add(key);\n\t\t\tmaterialIndices.set(key, index);\n\t\t}\n\n\t\t// (5) Compress palette textures and assign to palette materials.\n\n\t\tconst mimeType = 'image/png';\n\n\t\tif (baseColorTexture) {\n\t\t\tconst image = await savePixels(paletteTexturePixels.baseColor!, mimeType);\n\t\t\tbaseColorTexture.setImage(image).setMimeType(mimeType);\n\t\t}\n\t\tif (emissiveTexture) {\n\t\t\tconst image = await savePixels(paletteTexturePixels.emissive!, mimeType);\n\t\t\temissiveTexture.setImage(image).setMimeType(mimeType);\n\t\t}\n\t\tif (metallicRoughnessTexture) {\n\t\t\tconst image = await savePixels(paletteTexturePixels.metallicRoughness!, mimeType);\n\t\t\tmetallicRoughnessTexture.setImage(image).setMimeType(mimeType);\n\t\t}\n\n\t\t// (6) Create palette materials, generate UVs, and assign both to prims.\n\n\t\tlet nextPaletteMaterialIndex = 1;\n\t\tfor (const prim of prims) {\n\t\t\tconst srcMaterial = prim.getMaterial()!;\n\t\t\tconst key = materialKeyMap.get(srcMaterial)!;\n\t\t\tconst blockIndex = materialIndices.get(key)!;\n\n\t\t\t// UVs are centered horizontally in each block, descending vertically\n\t\t\t// to form a diagonal line in the UV layout. Easy and compressible.\n\t\t\tconst baseUV = (blockIndex + 0.5) / keyCount;\n\t\t\tconst padUV = (baseUV * (w - padWidth)) / w;\n\n\t\t\tconst position = prim.getAttribute('POSITION')!;\n\t\t\tconst buffer = position.getBuffer();\n\t\t\tconst array = new Float32Array(position.getCount() * 2).fill(padUV);\n\t\t\tconst uv = document.createAccessor().setType('VEC2').setArray(array).setBuffer(buffer);\n\n\t\t\tlet dstMaterial;\n\t\t\tfor (const material of paletteMaterials) {\n\t\t\t\tif (material.equals(srcMaterial, skipProps)) {\n\t\t\t\t\tdstMaterial = material;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!dstMaterial) {\n\t\t\t\tconst suffix = (nextPaletteMaterialIndex++).toString().padStart(3, '0');\n\t\t\t\tdstMaterial = srcMaterial.clone().setName(`PaletteMaterial${suffix}`);\n\n\t\t\t\tif (baseColorTexture) {\n\t\t\t\t\tdstMaterial\n\t\t\t\t\t\t.setBaseColorFactor([1, 1, 1, 1])\n\t\t\t\t\t\t.setBaseColorTexture(baseColorTexture)\n\t\t\t\t\t\t.getBaseColorTextureInfo()!\n\t\t\t\t\t\t.setMinFilter(TextureInfo.MinFilter.NEAREST)\n\t\t\t\t\t\t.setMagFilter(TextureInfo.MagFilter.NEAREST);\n\t\t\t\t}\n\t\t\t\tif (emissiveTexture) {\n\t\t\t\t\tdstMaterial\n\t\t\t\t\t\t.setEmissiveFactor([1, 1, 1])\n\t\t\t\t\t\t.setEmissiveTexture(emissiveTexture)\n\t\t\t\t\t\t.getEmissiveTextureInfo()!\n\t\t\t\t\t\t.setMinFilter(TextureInfo.MinFilter.NEAREST)\n\t\t\t\t\t\t.setMagFilter(TextureInfo.MagFilter.NEAREST);\n\t\t\t\t}\n\t\t\t\tif (metallicRoughnessTexture) {\n\t\t\t\t\tdstMaterial\n\t\t\t\t\t\t.setMetallicFactor(1)\n\t\t\t\t\t\t.setRoughnessFactor(1)\n\t\t\t\t\t\t.setMetallicRoughnessTexture(metallicRoughnessTexture)\n\t\t\t\t\t\t.getMetallicRoughnessTextureInfo()!\n\t\t\t\t\t\t.setMinFilter(TextureInfo.MinFilter.NEAREST)\n\t\t\t\t\t\t.setMagFilter(TextureInfo.MagFilter.NEAREST);\n\t\t\t\t}\n\n\t\t\t\tpaletteMaterials.push(dstMaterial);\n\t\t\t}\n\n\t\t\tprim.setMaterial(dstMaterial).setAttribute('TEXCOORD_0', uv);\n\t\t}\n\n\t\tif (options.cleanup) {\n\t\t\tawait document.transform(prune({ propertyTypes: [PropertyType.MATERIAL] }));\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\n/** Encodes a floating-point value on the interval [0,1] at 8-bit precision. */\nfunction encodeFloat(value: number): string {\n\tconst hex = Math.round(value * 255).toString(16);\n\treturn hex.length === 1 ? '0' + hex : hex;\n}\n\n/** Encodes an RGBA color in Linear-sRGB-D65 color space. */\nfunction encodeRGBA(value: vec4): string {\n\tColorUtils.convertLinearToSRGB(value, value);\n\treturn value.map(encodeFloat).join('');\n}\n\n/** Returns the nearest higher power of two. */\nfunction ceilPowerOfTwo(value: number): number {\n\treturn Math.pow(2, Math.ceil(Math.log(value) / Math.LN2));\n}\n\n/** Writes an NxN block of pixels to an image, at the given block index. */\nfunction writeBlock(pixels: NdArray<TypedArray>, index: number, value: vec4, blockSize: number): void {\n\tfor (let i = 0; i < blockSize; i++) {\n\t\tfor (let j = 0; j < blockSize; j++) {\n\t\t\tpixels.set(index * blockSize + i, j, 0, value[0] * 255);\n\t\t\tpixels.set(index * blockSize + i, j, 1, value[1] * 255);\n\t\t\tpixels.set(index * blockSize + i, j, 2, value[2] * 255);\n\t\t\tpixels.set(index * blockSize + i, j, 3, value[3] * 255);\n\t\t}\n\t}\n}\n","import { Document, ILogger, PropertyType, Transform } from '@gltf-transform/core';\nimport { prune } from './prune.js';\nimport { assignDefaults, createTransform } from './utils.js';\n\nconst NAME = 'partition';\n\nexport interface PartitionOptions {\n\tanimations?: boolean | Array<string>;\n\tmeshes?: boolean | Array<string>;\n}\n\nconst PARTITION_DEFAULTS: Required<PartitionOptions> = {\n\tanimations: true,\n\tmeshes: true,\n};\n\n/**\n * Partitions the binary payload of a glTF file so separate mesh or animation data is in separate\n * `.bin` {@link Buffer}s. This technique may be useful for engines that support lazy-loading\n * specific binary resources as needed over the application lifecycle.\n *\n * Example:\n *\n * ```ts\n * document.getRoot().listBuffers(); // → [Buffer]\n *\n * await document.transform(partition({meshes: true}));\n *\n * document.getRoot().listBuffers(); // → [Buffer, Buffer, ...]\n * ```\n *\n * @category Transforms\n */\nexport function partition(_options: PartitionOptions = PARTITION_DEFAULTS): Transform {\n\tconst options = assignDefaults(PARTITION_DEFAULTS, _options);\n\n\treturn createTransform(NAME, async (doc: Document): Promise<void> => {\n\t\tconst logger = doc.getLogger();\n\n\t\tif (options.meshes !== false) partitionMeshes(doc, logger, options);\n\t\tif (options.animations !== false) partitionAnimations(doc, logger, options);\n\n\t\tif (!options.meshes && !options.animations) {\n\t\t\tlogger.warn(`${NAME}: Select animations or meshes to create a partition.`);\n\t\t}\n\n\t\tawait doc.transform(prune({ propertyTypes: [PropertyType.BUFFER] }));\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\nfunction partitionMeshes(doc: Document, logger: ILogger, options: Required<PartitionOptions>): void {\n\tconst existingURIs = new Set<string>(\n\t\tdoc\n\t\t\t.getRoot()\n\t\t\t.listBuffers()\n\t\t\t.map((b) => b.getURI()),\n\t);\n\n\tdoc.getRoot()\n\t\t.listMeshes()\n\t\t.forEach((mesh, meshIndex) => {\n\t\t\tif (Array.isArray(options.meshes) && !options.meshes.includes(mesh.getName())) {\n\t\t\t\tlogger.debug(`${NAME}: Skipping mesh #${meshIndex} with name \"${mesh.getName()}\".`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlogger.debug(`${NAME}: Creating buffer for mesh \"${mesh.getName()}\".`);\n\n\t\t\tconst buffer = doc\n\t\t\t\t.createBuffer(mesh.getName())\n\t\t\t\t.setURI(createBufferURI(mesh.getName() || 'mesh', existingURIs));\n\n\t\t\tmesh.listPrimitives().forEach((primitive) => {\n\t\t\t\tconst indices = primitive.getIndices();\n\t\t\t\tif (indices) indices.setBuffer(buffer);\n\t\t\t\tprimitive.listAttributes().forEach((attribute) => attribute.setBuffer(buffer));\n\t\t\t\tprimitive.listTargets().forEach((primTarget) => {\n\t\t\t\t\tprimTarget.listAttributes().forEach((attribute) => attribute.setBuffer(buffer));\n\t\t\t\t});\n\t\t\t});\n\t\t});\n}\n\nfunction partitionAnimations(doc: Document, logger: ILogger, options: Required<PartitionOptions>): void {\n\tconst existingURIs = new Set<string>(\n\t\tdoc\n\t\t\t.getRoot()\n\t\t\t.listBuffers()\n\t\t\t.map((b) => b.getURI()),\n\t);\n\n\tdoc.getRoot()\n\t\t.listAnimations()\n\t\t.forEach((anim, animIndex) => {\n\t\t\tif (Array.isArray(options.animations) && !options.animations.includes(anim.getName())) {\n\t\t\t\tlogger.debug(`${NAME}: Skipping animation #${animIndex} with name \"${anim.getName()}\".`);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlogger.debug(`${NAME}: Creating buffer for animation \"${anim.getName()}\".`);\n\n\t\t\tconst buffer = doc\n\t\t\t\t.createBuffer(anim.getName())\n\t\t\t\t.setURI(createBufferURI(anim.getName() || 'animation', existingURIs));\n\n\t\t\tanim.listSamplers().forEach((sampler) => {\n\t\t\t\tconst input = sampler.getInput();\n\t\t\t\tconst output = sampler.getOutput();\n\t\t\t\tif (input) input.setBuffer(buffer);\n\t\t\t\tif (output) output.setBuffer(buffer);\n\t\t\t});\n\t\t});\n}\n\nconst SANITIZE_BASENAME_RE = /[^\\w0–9-]+/g;\n\nfunction createBufferURI(basename: string, existing: Set<string>): string {\n\tbasename = basename.replace(SANITIZE_BASENAME_RE, '');\n\tlet uri = `${basename}.bin`;\n\tlet i = 1;\n\twhile (existing.has(uri)) uri = `${basename}_${i++}.bin`;\n\texisting.add(uri);\n\treturn uri;\n}\n","var InterpolationInternal;\n\n(function (InterpolationInternal) {\n  InterpolationInternal[InterpolationInternal[\"STEP\"] = 0] = \"STEP\";\n  InterpolationInternal[InterpolationInternal[\"LERP\"] = 1] = \"LERP\";\n  InterpolationInternal[InterpolationInternal[\"SLERP\"] = 2] = \"SLERP\";\n})(InterpolationInternal || (InterpolationInternal = {}));\n\nconst TO_INTERPOLATION_INTERNAL = {\n  step: InterpolationInternal.STEP,\n  lerp: InterpolationInternal.LERP,\n  slerp: InterpolationInternal.SLERP\n};\nconst EPSILON = 0.000001;\n\n/* Implementation */\n\nfunction resampleDebug(input, output, interpolation, tolerance = 1e-4) {\n  const elementSize = output.length / input.length;\n  const tmp = new Array(elementSize).fill(0);\n  const value = new Array(elementSize).fill(0);\n  const valueNext = new Array(elementSize).fill(0);\n  const valuePrev = new Array(elementSize).fill(0);\n  const lastIndex = input.length - 1;\n  let writeIndex = 1;\n\n  for (let i = 1; i < lastIndex; ++i) {\n    const timePrev = input[writeIndex - 1];\n    const time = input[i];\n    const timeNext = input[i + 1];\n    const t = (time - timePrev) / (timeNext - timePrev);\n    let keep = false; // Remove unnecessary adjacent keyframes.\n\n    if (time !== timeNext && (i !== 1 || time !== input[0])) {\n      getElement(output, writeIndex - 1, valuePrev);\n      getElement(output, i, value);\n      getElement(output, i + 1, valueNext);\n\n      if (interpolation === 'slerp') {\n        // Prune keyframes colinear with prev/next keyframes.\n        const sample = slerp(tmp, valuePrev, valueNext, t);\n        const angle = getAngle(valuePrev, value) + getAngle(value, valueNext);\n        keep = !eq(value, sample, tolerance) || angle + Number.EPSILON >= Math.PI;\n      } else if (interpolation === 'lerp') {\n        // Prune keyframes colinear with prev/next keyframes.\n        const sample = vlerp(tmp, valuePrev, valueNext, t);\n        keep = !eq(value, sample, tolerance);\n      } else if (interpolation === 'step') {\n        // Prune keyframes identical to prev/next keyframes.\n        keep = !eq(value, valuePrev) || !eq(value, valueNext);\n      }\n    } // In-place compaction.\n\n\n    if (keep) {\n      if (i !== writeIndex) {\n        input[writeIndex] = input[i];\n        setElement(output, writeIndex, getElement(output, i, tmp));\n      }\n\n      writeIndex++;\n    }\n  } // Flush last keyframe (compaction looks ahead).\n\n\n  if (lastIndex > 0) {\n    input[writeIndex] = input[lastIndex];\n    setElement(output, writeIndex, getElement(output, lastIndex, tmp));\n    writeIndex++;\n  }\n\n  return writeIndex;\n}\n/* Utilities */\n\nfunction getElement(array, index, target) {\n  for (let i = 0, elementSize = target.length; i < elementSize; i++) {\n    target[i] = array[index * elementSize + i];\n  }\n\n  return target;\n}\n\nfunction setElement(array, index, value) {\n  for (let i = 0, elementSize = value.length; i < elementSize; i++) {\n    array[index * elementSize + i] = value[i];\n  }\n}\n\nfunction eq(a, b, tolerance = 0) {\n  if (a.length !== b.length) {\n    return false;\n  }\n\n  for (let i = 0; i < a.length; i++) {\n    if (Math.abs(a[i] - b[i]) > tolerance) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction lerp(v0, v1, t) {\n  return v0 * (1 - t) + v1 * t;\n}\n\nfunction vlerp(out, a, b, t) {\n  for (let i = 0; i < a.length; i++) out[i] = lerp(a[i], b[i], t);\n\n  return out;\n} // From gl-matrix.\n\n\nfunction slerp(out, a, b, t) {\n  // benchmarks:\n  //    http://jsperf.com/quaternion-slerp-implementations\n  let ax = a[0],\n      ay = a[1],\n      az = a[2],\n      aw = a[3];\n  let bx = b[0],\n      by = b[1],\n      bz = b[2],\n      bw = b[3];\n  let omega, cosom, sinom, scale0, scale1; // calc cosine\n\n  cosom = ax * bx + ay * by + az * bz + aw * bw; // adjust signs (if necessary)\n\n  if (cosom < 0.0) {\n    cosom = -cosom;\n    bx = -bx;\n    by = -by;\n    bz = -bz;\n    bw = -bw;\n  } // calculate coefficients\n\n\n  if (1.0 - cosom > EPSILON) {\n    // standard case (slerp)\n    omega = Math.acos(cosom);\n    sinom = Math.sin(omega);\n    scale0 = Math.sin((1.0 - t) * omega) / sinom;\n    scale1 = Math.sin(t * omega) / sinom;\n  } else {\n    // \"from\" and \"to\" quaternions are very close\n    //  ... so we can do a linear interpolation\n    scale0 = 1.0 - t;\n    scale1 = t;\n  } // calculate final values\n\n\n  out[0] = scale0 * ax + scale1 * bx;\n  out[1] = scale0 * ay + scale1 * by;\n  out[2] = scale0 * az + scale1 * bz;\n  out[3] = scale0 * aw + scale1 * bw;\n  return out;\n}\n\nfunction getAngle(a, b) {\n  const dotproduct = dot(a, b);\n  return Math.acos(2 * dotproduct * dotproduct - 1);\n}\n\nfunction dot(a, b) {\n  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n}\n\n/** WASM loader for Web environments. */\nconst wasm = /* #__PURE__ */fetch( /* #__PURE__ */new URL('./release.wasm', import.meta.url)).then(response => response.arrayBuffer()).then(buffer => new Uint8Array(buffer));\n\n// SETUP\n///////////////////////////////////////////////////////////////////////////////\n\nlet exports;\nconst ready = /* #__PURE__ */new Promise(async (resolve, reject) => {\n  try {\n    const module = await WebAssembly.compile(await wasm);\n    exports = await instantiate(module, {});\n    resolve();\n  } catch (e) {\n    reject(e);\n  }\n});\n\nasync function instantiate(module, imports = {}) {\n  const instance = await WebAssembly.instantiate(module, {\n    env: Object.assign(Object.create(globalThis), {}, {\n      abort: __abort\n    })\n  });\n  return instance.exports;\n} ///////////////////////////////////////////////////////////////////////////////\n// PUBLIC API\n///////////////////////////////////////////////////////////////////////////////\n\n\nconst CHUNK_SIZE = 1024; // The first and last keyframes cannot be removed in any given step, but we need to\n// somehow remove keyframes on chunk boundaries. So after processing each chunk,\n// we copy its last two keyframes in front of the next chunk, and run from there.\n//\n// 🟩 ⬜️ ⬜️ ⬜️ ⬜️ ⬜️                  // chunk 1, original\n// 🟩 ⬜️ 🟨 🟥                       // chunk 1, resampled\n//            🟨 🟥 🟩 ⬜️ ⬜️ ⬜️       // chunk 2, original\n//            🟨 🟩 ⬜️ ⬜️            // chunk 2, resampled\n// ...\n\nfunction resample(input, output, interpolation, tolerance = 1e-4) {\n  __assert(!!exports, 'Await \"ready\" before using module.');\n\n  __assert(input instanceof Float32Array, 'Missing Float32Array input.');\n\n  __assert(output instanceof Float32Array, 'Missing Float32Array output.');\n\n  const outputSize = output.length / input.length;\n\n  __assert(Number.isInteger(outputSize), 'Invalid input/output counts.');\n\n  __assert(interpolation in TO_INTERPOLATION_INTERNAL, 'Invalid interpolation.');\n\n  __assert(Number.isFinite(tolerance), 'Invalid tolerance');\n\n  const interpVal = TO_INTERPOLATION_INTERNAL[interpolation];\n  const srcCount = input.length;\n  let dstCount = 0;\n\n  for (let chunkStart = 0; chunkStart < input.length; chunkStart += CHUNK_SIZE) {\n    const chunkCount = Math.min(srcCount - chunkStart, CHUNK_SIZE); // Allocate a two-keyframe prefix for all chunks after the first.\n\n    const prefixCount = chunkStart > 0 ? 2 : 0;\n    const chunkInput = new Float32Array(input.buffer, input.byteOffset + (chunkStart - prefixCount) * Float32Array.BYTES_PER_ELEMENT, chunkCount + prefixCount);\n    const chunkOutput = new Float32Array(output.buffer, output.byteOffset + (chunkStart - prefixCount) * outputSize * Float32Array.BYTES_PER_ELEMENT, (chunkCount + prefixCount) * outputSize); // Copy prefix to start of next chunk.\n\n    if (prefixCount > 0) {\n      input.copyWithin(chunkStart - prefixCount, dstCount - prefixCount, dstCount);\n      output.copyWithin((chunkStart - prefixCount) * outputSize, (dstCount - prefixCount) * outputSize, dstCount * outputSize);\n    }\n\n    const inputPtr = __retain(__lowerStaticArray(chunkInput, 4, 2));\n\n    const outputPtr = __retain(__lowerStaticArray(chunkOutput, 4, 2));\n\n    try {\n      exports.__setArgumentsLength(4);\n\n      const count = exports.resample(inputPtr, outputPtr, interpVal, tolerance) >>> 0;\n      dstCount -= prefixCount;\n\n      __liftStaticArray(inputPtr, input, dstCount, count);\n\n      __liftStaticArray(outputPtr, output, dstCount * outputSize, count * outputSize);\n\n      dstCount += count;\n    } finally {\n      __release(inputPtr);\n\n      __release(outputPtr);\n\n      exports.__collect();\n    }\n  } // console.log(`Memory: ${exports.memory.buffer.byteLength} bytes`);\n\n\n  return dstCount;\n} ///////////////////////////////////////////////////////////////////////////////\n// INTERNAL\n///////////////////////////////////////////////////////////////////////////////\n\nfunction __assert(cond, msg) {\n  if (!cond) throw new Error(msg);\n}\n\nfunction __retain(ptr) {\n  exports.__pin(ptr);\n\n  return ptr;\n}\n\nfunction __release(ptr) {\n  exports.__unpin(ptr);\n\n  return ptr;\n}\n\nfunction __liftString(ptr) {\n  if (!ptr) return null;\n  const end = ptr + new Uint32Array(exports.memory.buffer)[ptr - 4 >>> 2] >>> 1,\n        memoryU16 = new Uint16Array(exports.memory.buffer);\n  let start = ptr >>> 1,\n      string = '';\n\n  while (end - start > 1024) string += String.fromCharCode(...memoryU16.subarray(start, start += 1024));\n\n  return string + String.fromCharCode(...memoryU16.subarray(start, end));\n}\n\nfunction __lowerStaticArray(values, id, align) {\n  const ptr = exports.__pin(exports.__new(values.length << align, id)) >>> 0;\n  new Float32Array(exports.memory.buffer, ptr, values.length).set(values);\n\n  exports.__unpin(ptr);\n\n  return ptr;\n}\n\nfunction __liftStaticArray(ptr, values, offset, count) {\n  values.set(new Float32Array(exports.memory.buffer, ptr, count), offset);\n}\n\nfunction __abort(messagePtr, fileNamePtr, lineNumber, columnNumber) {\n  const message = __liftString(messagePtr >>> 0);\n\n  const fileName = __liftString(fileNamePtr >>> 0);\n\n  lineNumber = lineNumber >>> 0;\n  columnNumber = columnNumber >>> 0;\n\n  (() => {\n    throw Error(`${message} in ${fileName}:${lineNumber}:${columnNumber}`);\n  })();\n}\n\nexport { ready, resample, resampleDebug };\n//# sourceMappingURL=keyframe-resample-browser.modern.js.map\n","import {\n\tAccessor,\n\tAnimationSampler,\n\tComponentTypeToTypedArray,\n\tDocument,\n\tGLTF,\n\tMathUtils,\n\tPropertyType,\n\tRoot,\n\tTransform,\n\tTypedArray,\n} from '@gltf-transform/core';\nimport { dedup } from './dedup.js';\nimport { assignDefaults, createTransform } from './utils.js';\nimport { resampleDebug } from 'keyframe-resample';\n\nconst NAME = 'resample';\n\nconst EMPTY_ARRAY = new Float32Array(0);\n\nexport interface ResampleOptions {\n\tready?: Promise<void>;\n\tresample?: unknown; // glTF-Transform/issues/996\n\ttolerance?: number;\n\t/**\n\t * Whether to perform cleanup steps after completing the operation. Recommended, and enabled by\n\t * default. Cleanup removes temporary resources created during the operation, but may also remove\n\t * pre-existing unused or duplicate resources in the {@link Document}. Applications that require\n\t * keeping these resources may need to disable cleanup, instead calling {@link dedup} and\n\t * {@link prune} manually (with customized options) later in the processing pipeline.\n\t * @experimental\n\t */\n\tcleanup?: boolean;\n}\n\nconst RESAMPLE_DEFAULTS: Required<ResampleOptions> = {\n\tready: Promise.resolve(),\n\tresample: resampleDebug,\n\ttolerance: 1e-4,\n\tcleanup: true,\n};\n\n/**\n * Resample {@link AnimationChannel AnimationChannels}, losslessly deduplicating keyframes to\n * reduce file size. Duplicate keyframes are commonly present in animation 'baked' by the\n * authoring software to apply IK constraints or other software-specific features.\n *\n * Optionally, a WebAssembly implementation from the\n * [`keyframe-resample`](https://github.com/donmccurdy/keyframe-resample-wasm) library may be\n * provided. The WebAssembly version is usually much faster at processing large animation\n * sequences, but may not be compatible with all runtimes and JavaScript build tools.\n *\n * Result: (0,0,0,0,1,1,1,0,0,0,0,0,0,0) → (0,0,1,1,0,0)\n *\n * Example:\n *\n * ```\n * import { resample } from '@gltf-transform/functions';\n * import { ready, resample as resampleWASM } from 'keyframe-resample';\n *\n * // JavaScript (slower)\n * await document.transform(resample());\n *\n * // WebAssembly (faster)\n * await document.transform(resample({ ready, resample: resampleWASM }));\n * ```\n *\n * @privateRemarks Implementation based on THREE.KeyframeTrack#optimize().\n * @category Transforms\n */\nexport function resample(_options: ResampleOptions = RESAMPLE_DEFAULTS): Transform {\n\tconst options = assignDefaults(RESAMPLE_DEFAULTS, _options);\n\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tconst accessorsVisited = new Set<Accessor>();\n\t\tconst srcAccessorCount = document.getRoot().listAccessors().length;\n\t\tconst logger = document.getLogger();\n\n\t\tconst ready = options.ready;\n\t\tconst resample = options.resample as typeof resampleDebug;\n\n\t\tawait ready;\n\n\t\tfor (const animation of document.getRoot().listAnimations()) {\n\t\t\tconst samplerTargetPaths = new Map<AnimationSampler, GLTF.AnimationChannelTargetPath>();\n\t\t\tfor (const channel of animation.listChannels()) {\n\t\t\t\tsamplerTargetPaths.set(channel.getSampler()!, channel.getTargetPath()!);\n\t\t\t}\n\n\t\t\tfor (const sampler of animation.listSamplers()) {\n\t\t\t\tconst samplerInterpolation = sampler.getInterpolation();\n\n\t\t\t\tif (samplerInterpolation === 'STEP' || samplerInterpolation === 'LINEAR') {\n\t\t\t\t\tconst input = sampler.getInput()!;\n\t\t\t\t\tconst output = sampler.getOutput()!;\n\n\t\t\t\t\taccessorsVisited.add(input);\n\t\t\t\t\taccessorsVisited.add(output);\n\n\t\t\t\t\t// biome-ignore format: Readability.\n\t\t\t\t\tconst tmpTimes = toFloat32Array(\n\t\t\t\t\t\tinput.getArray()!,\n\t\t\t\t\t\tinput.getComponentType(),\n\t\t\t\t\t\tinput.getNormalized()\n\t\t\t\t\t);\n\t\t\t\t\tconst tmpValues = toFloat32Array(\n\t\t\t\t\t\toutput.getArray()!,\n\t\t\t\t\t\toutput.getComponentType(),\n\t\t\t\t\t\toutput.getNormalized(),\n\t\t\t\t\t);\n\n\t\t\t\t\tconst elementSize = tmpValues.length / tmpTimes.length;\n\t\t\t\t\tconst srcCount = tmpTimes.length;\n\t\t\t\t\tlet dstCount: number;\n\n\t\t\t\t\tif (samplerInterpolation === 'STEP') {\n\t\t\t\t\t\tdstCount = resample(tmpTimes, tmpValues, 'step', options.tolerance);\n\t\t\t\t\t} else if (samplerTargetPaths.get(sampler) === 'rotation') {\n\t\t\t\t\t\tdstCount = resample(tmpTimes, tmpValues, 'slerp', options.tolerance);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdstCount = resample(tmpTimes, tmpValues, 'lerp', options.tolerance);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (dstCount < srcCount) {\n\t\t\t\t\t\t// Clone the input/output accessors, without cloning their underlying\n\t\t\t\t\t\t// arrays. Then assign the resampled data.\n\t\t\t\t\t\tconst srcTimes = input.getArray()!;\n\t\t\t\t\t\tconst srcValues = output.getArray()!;\n\n\t\t\t\t\t\tconst dstTimes = fromFloat32Array(\n\t\t\t\t\t\t\tnew Float32Array(tmpTimes.buffer, tmpTimes.byteOffset, dstCount),\n\t\t\t\t\t\t\tinput.getComponentType(),\n\t\t\t\t\t\t\tinput.getNormalized(),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst dstValues = fromFloat32Array(\n\t\t\t\t\t\t\tnew Float32Array(tmpValues.buffer, tmpValues.byteOffset, dstCount * elementSize),\n\t\t\t\t\t\t\toutput.getComponentType(),\n\t\t\t\t\t\t\toutput.getNormalized(),\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tinput.setArray(EMPTY_ARRAY);\n\t\t\t\t\t\toutput.setArray(EMPTY_ARRAY);\n\n\t\t\t\t\t\tsampler.setInput(input.clone().setArray(dstTimes));\n\t\t\t\t\t\tsampler.setOutput(output.clone().setArray(dstValues));\n\n\t\t\t\t\t\tinput.setArray(srcTimes);\n\t\t\t\t\t\toutput.setArray(srcValues);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const accessor of Array.from(accessorsVisited.values())) {\n\t\t\tconst used = accessor.listParents().some((p) => !(p instanceof Root));\n\t\t\tif (!used) accessor.dispose();\n\t\t}\n\n\t\t// Resampling may result in duplicate input or output sampler\n\t\t// accessors. Find and remove the duplicates after processing.\n\t\tconst dstAccessorCount = document.getRoot().listAccessors().length;\n\t\tif (dstAccessorCount > srcAccessorCount && options.cleanup) {\n\t\t\tawait document.transform(dedup({ propertyTypes: [PropertyType.ACCESSOR] }));\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\n/** Returns a copy of the source array, as a denormalized Float32Array. */\nfunction toFloat32Array(\n\tsrcArray: TypedArray,\n\tcomponentType: GLTF.AccessorComponentType,\n\tnormalized: boolean,\n): Float32Array {\n\tif (srcArray instanceof Float32Array) return srcArray.slice();\n\tconst dstArray = new Float32Array(srcArray);\n\tif (!normalized) return dstArray;\n\n\tfor (let i = 0; i < dstArray.length; i++) {\n\t\tdstArray[i] = MathUtils.decodeNormalizedInt(dstArray[i], componentType);\n\t}\n\n\treturn dstArray;\n}\n\n/** Returns a copy of the source array, with specified component type and normalization. */\nfunction fromFloat32Array(\n\tsrcArray: Float32Array,\n\tcomponentType: GLTF.AccessorComponentType,\n\tnormalized: boolean,\n): TypedArray {\n\tif (componentType === Accessor.ComponentType.FLOAT) return srcArray.slice();\n\tconst TypedArray = ComponentTypeToTypedArray[componentType];\n\tconst dstArray = new TypedArray(srcArray.length);\n\n\tfor (let i = 0; i < dstArray.length; i++) {\n\t\tdstArray[i] = normalized ? MathUtils.encodeNormalizedInt(srcArray[i], componentType) : srcArray[i];\n\t}\n\n\treturn dstArray;\n}\n","import { Accessor, AnimationChannel, AnimationSampler, Document, Transform } from '@gltf-transform/core';\nimport { assignDefaults, createTransform } from './utils.js';\n\nconst NAME = 'sequence';\n\nexport interface SequenceOptions {\n\t/** Frames per second, where one node is shown each frame. Default 10. */\n\tfps?: number;\n\t/** Pattern (regex) used to filter nodes for the sequence. Required. */\n\tpattern: RegExp;\n\t/** Name of the new animation. */\n\tname?: string;\n\t/** Whether to sort the nodes by name, or use original order. Default true. */\n\tsort?: boolean;\n}\n\nconst SEQUENCE_DEFAULTS: Required<SequenceOptions> = {\n\tname: '',\n\tfps: 10,\n\tpattern: /.*/,\n\tsort: true,\n};\n\n/**\n * Creates an {@link Animation} displaying each of the specified {@link Node}s sequentially.\n *\n * @category Transforms\n */\nexport function sequence(_options: SequenceOptions = SEQUENCE_DEFAULTS): Transform {\n\tconst options = assignDefaults(SEQUENCE_DEFAULTS, _options);\n\n\treturn createTransform(NAME, (doc: Document): void => {\n\t\tconst logger = doc.getLogger();\n\t\tconst root = doc.getRoot();\n\t\tconst fps = options.fps;\n\n\t\t// Collect sequence nodes.\n\t\tconst sequenceNodes = root.listNodes().filter((node) => node.getName().match(options.pattern));\n\n\t\t// Sort by node name.\n\t\tif (options.sort) {\n\t\t\tsequenceNodes.sort((a, b) => (a.getName() > b.getName() ? 1 : -1));\n\t\t}\n\n\t\t// Create animation cycling visibility of each node.\n\t\tconst anim = doc.createAnimation(options.name);\n\t\tconst animBuffer = root.listBuffers()[0];\n\t\tsequenceNodes.forEach((node, i) => {\n\t\t\t// Create keyframe tracks that show each node for a single frame.\n\t\t\tlet inputArray;\n\t\t\tlet outputArray;\n\t\t\tif (i === 0) {\n\t\t\t\tinputArray = [i / fps, (i + 1) / fps];\n\t\t\t\toutputArray = [1, 1, 1, 0, 0, 0];\n\t\t\t} else if (i === sequenceNodes.length - 1) {\n\t\t\t\tinputArray = [(i - 1) / fps, i / fps];\n\t\t\t\toutputArray = [0, 0, 0, 1, 1, 1];\n\t\t\t} else {\n\t\t\t\tinputArray = [(i - 1) / fps, i / fps, (i + 1) / fps];\n\t\t\t\toutputArray = [0, 0, 0, 1, 1, 1, 0, 0, 0];\n\t\t\t}\n\n\t\t\t// Append channel to animation sequence.\n\t\t\tconst input = doc.createAccessor().setArray(new Float32Array(inputArray)).setBuffer(animBuffer);\n\t\t\tconst output = doc\n\t\t\t\t.createAccessor()\n\t\t\t\t.setArray(new Float32Array(outputArray))\n\t\t\t\t.setBuffer(animBuffer)\n\t\t\t\t.setType(Accessor.Type.VEC3);\n\t\t\tconst sampler = doc\n\t\t\t\t.createAnimationSampler()\n\t\t\t\t.setInterpolation(AnimationSampler.Interpolation.STEP)\n\t\t\t\t.setInput(input)\n\t\t\t\t.setOutput(output);\n\t\t\tconst channel = doc\n\t\t\t\t.createAnimationChannel()\n\t\t\t\t.setTargetNode(node)\n\t\t\t\t.setTargetPath(AnimationChannel.TargetPath.SCALE)\n\t\t\t\t.setSampler(sampler);\n\t\t\tanim.addSampler(sampler).addChannel(channel);\n\t\t});\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n","import { Document, Primitive, PropertyType, Transform } from '@gltf-transform/core';\nimport {\n\tcreateTransform,\n\tformatDeltaOp,\n\tdeepListAttributes,\n\tdeepSwapAttribute,\n\tshallowCloneAccessor,\n\tassignDefaults,\n} from './utils.js';\nimport { weld } from './weld.js';\nimport type { MeshoptSimplifier } from 'meshoptimizer';\nimport { dedup } from './dedup.js';\nimport { prune } from './prune.js';\nimport { dequantizeAttributeArray } from './dequantize.js';\nimport { unweldPrimitive } from './unweld.js';\nimport { convertPrimitiveToTriangles } from './convert-primitive-mode.js';\nimport { compactAttribute, compactPrimitive } from './compact-primitive.js';\nimport { VertexCountMethod, getPrimitiveVertexCount } from './get-vertex-count.js';\n\nconst NAME = 'simplify';\n\nconst { POINTS, LINES, LINE_STRIP, LINE_LOOP, TRIANGLES, TRIANGLE_STRIP, TRIANGLE_FAN } = Primitive.Mode;\n\n/** Options for the {@link simplify} function. */\nexport interface SimplifyOptions {\n\t/** MeshoptSimplifier instance. */\n\tsimplifier: unknown;\n\t/** Target ratio (0–1) of vertices to keep. Default: 0.0 (0%). */\n\tratio?: number;\n\t/** Limit on error, as a fraction of mesh radius. Default: 0.0001 (0.01%). */\n\terror?: number;\n\t/**\n\t * Whether to lock topological borders of the mesh. May be necessary when\n\t * adjacent 'chunks' of a large mesh (e.g. terrain) share a border, helping\n\t * to ensure no seams appear.\n\t */\n\tlockBorder?: boolean;\n\t/**\n\t * Whether to perform cleanup steps after completing the operation. Recommended, and enabled by\n\t * default. Cleanup removes temporary resources created during the operation, but may also remove\n\t * pre-existing unused or duplicate resources in the {@link Document}. Applications that require\n\t * keeping these resources may need to disable cleanup, instead calling {@link dedup} and\n\t * {@link prune} manually (with customized options) later in the processing pipeline.\n\t * @experimental\n\t */\n\tcleanup?: boolean;\n}\n\nexport const SIMPLIFY_DEFAULTS: Required<Omit<SimplifyOptions, 'simplifier'>> = {\n\tratio: 0.0,\n\terror: 0.0001,\n\tlockBorder: false,\n\tcleanup: true,\n};\n\n/**\n * Simplification algorithm, based on meshoptimizer, producing meshes with fewer\n * triangles and vertices. Simplification is lossy, but the algorithm aims to\n * preserve visual quality as much as possible for given parameters.\n *\n * The algorithm aims to reach the target 'ratio', while minimizing error. If\n * error exceeds the specified 'error' threshold, the algorithm will quit\n * before reaching the target ratio. Examples:\n *\n * - ratio=0.0, error=0.0001: Aims for maximum simplification, constrained to 0.01% error.\n * - ratio=0.5, error=0.0001: Aims for 50% simplification, constrained to 0.01% error.\n * - ratio=0.5, error=1: Aims for 50% simplification, unconstrained by error.\n *\n * Topology, particularly split vertices, will also limit the simplifier. For\n * best results, apply a {@link weld} operation before simplification.\n *\n * Example:\n *\n * ```javascript\n * import { simplify, weld } from '@gltf-transform/functions';\n * import { MeshoptSimplifier } from 'meshoptimizer';\n *\n * await document.transform(\n *   weld({}),\n *   simplify({ simplifier: MeshoptSimplifier, ratio: 0.75, error: 0.001 })\n * );\n * ```\n *\n * References:\n * - https://github.com/zeux/meshoptimizer/blob/master/js/README.md#simplifier\n *\n * @category Transforms\n */\nexport function simplify(_options: SimplifyOptions): Transform {\n\tconst options = assignDefaults(SIMPLIFY_DEFAULTS, _options);\n\n\tconst simplifier = options.simplifier as typeof MeshoptSimplifier | undefined;\n\n\tif (!simplifier) {\n\t\tthrow new Error(`${NAME}: simplifier dependency required — install \"meshoptimizer\".`);\n\t}\n\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tconst logger = document.getLogger();\n\n\t\tawait simplifier.ready;\n\t\tawait document.transform(weld({ overwrite: false, cleanup: options.cleanup }));\n\n\t\tlet numUnsupported = 0;\n\n\t\t// Simplify mesh primitives.\n\t\tfor (const mesh of document.getRoot().listMeshes()) {\n\t\t\tfor (const prim of mesh.listPrimitives()) {\n\t\t\t\tconst mode = prim.getMode();\n\t\t\t\tif (mode === TRIANGLES || mode === TRIANGLE_STRIP || mode === TRIANGLE_FAN) {\n\t\t\t\t\tsimplifyPrimitive(prim, options);\n\t\t\t\t\tif (getPrimitiveVertexCount(prim, VertexCountMethod.RENDER) === 0) {\n\t\t\t\t\t\tprim.dispose();\n\t\t\t\t\t}\n\t\t\t\t} else if (prim.getMode() === POINTS && !!simplifier.simplifyPoints) {\n\t\t\t\t\tsimplifyPrimitive(prim, options);\n\t\t\t\t\tif (getPrimitiveVertexCount(prim, VertexCountMethod.RENDER) === 0) {\n\t\t\t\t\t\tprim.dispose();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tnumUnsupported++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (mesh.listPrimitives().length === 0) mesh.dispose();\n\t\t}\n\n\t\tif (numUnsupported > 0) {\n\t\t\tlogger.warn(`${NAME}: Skipping simplification of ${numUnsupported} primitives: Unsupported draw mode.`);\n\t\t}\n\n\t\t// Where simplification removes meshes, we may need to prune leaf nodes.\n\t\tif (options.cleanup) {\n\t\t\tawait document.transform(\n\t\t\t\tprune({\n\t\t\t\t\tpropertyTypes: [PropertyType.ACCESSOR, PropertyType.NODE],\n\t\t\t\t\tkeepAttributes: true,\n\t\t\t\t\tkeepIndices: true,\n\t\t\t\t\tkeepLeaves: false,\n\t\t\t\t}),\n\t\t\t\tdedup({ propertyTypes: [PropertyType.ACCESSOR] }),\n\t\t\t);\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\n/** @hidden */\nexport function simplifyPrimitive(prim: Primitive, _options: SimplifyOptions): Primitive {\n\tconst options = { ...SIMPLIFY_DEFAULTS, ..._options } as Required<SimplifyOptions>;\n\tconst simplifier = options.simplifier as typeof MeshoptSimplifier;\n\tconst graph = prim.getGraph();\n\tconst document = Document.fromGraph(graph)!;\n\tconst logger = document.getLogger();\n\n\tswitch (prim.getMode()) {\n\t\tcase POINTS:\n\t\t\treturn _simplifyPoints(document, prim, options);\n\t\tcase LINES:\n\t\tcase LINE_STRIP:\n\t\tcase LINE_LOOP:\n\t\t\tlogger.warn(`${NAME}: Skipping primitive simplification: Unsupported draw mode.`);\n\t\t\treturn prim;\n\t\tcase TRIANGLE_STRIP:\n\t\tcase TRIANGLE_FAN:\n\t\t\tconvertPrimitiveToTriangles(prim);\n\t\t\tbreak;\n\t}\n\n\t// (1) If primitive draws <50% of its vertex stream, compact before simplification.\n\n\tconst srcVertexCount = getPrimitiveVertexCount(prim, VertexCountMethod.UPLOAD);\n\tconst srcIndexCount = getPrimitiveVertexCount(prim, VertexCountMethod.RENDER);\n\tif (srcIndexCount < srcVertexCount / 2) {\n\t\tcompactPrimitive(prim);\n\t}\n\n\tconst position = prim.getAttribute('POSITION')!;\n\tconst srcIndices = prim.getIndices()!;\n\n\tlet positionArray = position.getArray()!;\n\tlet indicesArray = srcIndices.getArray()!;\n\n\t// (2) Gather attributes and indices in Meshopt-compatible format.\n\n\tif (!(positionArray instanceof Float32Array)) {\n\t\tpositionArray = dequantizeAttributeArray(positionArray, position.getComponentType(), position.getNormalized());\n\t}\n\tif (!(indicesArray instanceof Uint32Array)) {\n\t\tindicesArray = new Uint32Array(indicesArray);\n\t}\n\n\t// (3) Run simplification.\n\n\tconst targetCount = Math.floor((options.ratio * srcIndexCount) / 3) * 3;\n\tconst flags = options.lockBorder ? ['LockBorder'] : [];\n\n\tconst [dstIndicesArray, error] = simplifier.simplify(\n\t\tindicesArray,\n\t\tpositionArray,\n\t\t3,\n\t\ttargetCount,\n\t\toptions.error,\n\t\tflags as 'LockBorder'[],\n\t);\n\n\t// (4) Assign subset of indexes; compact primitive.\n\n\tprim.setIndices(shallowCloneAccessor(document, srcIndices).setArray(dstIndicesArray));\n\tif (srcIndices.listParents().length === 1) srcIndices.dispose();\n\tcompactPrimitive(prim);\n\n\tconst dstVertexCount = getPrimitiveVertexCount(prim, VertexCountMethod.UPLOAD);\n\tif (dstVertexCount <= 65534) {\n\t\tprim.getIndices()!.setArray(new Uint16Array(prim.getIndices()!.getArray()!));\n\t}\n\n\tlogger.debug(`${NAME}: ${formatDeltaOp(srcVertexCount, dstVertexCount)} vertices, error: ${error.toFixed(4)}.`);\n\n\treturn prim;\n}\n\nfunction _simplifyPoints(document: Document, prim: Primitive, options: Required<SimplifyOptions>): Primitive {\n\tconst simplifier = options.simplifier as typeof MeshoptSimplifier;\n\tconst logger = document.getLogger();\n\n\tconst indices = prim.getIndices();\n\tif (indices) unweldPrimitive(prim);\n\n\tconst position = prim.getAttribute('POSITION')!;\n\tconst color = prim.getAttribute('COLOR_0');\n\tconst srcVertexCount = position.getCount();\n\n\tlet positionArray = position.getArray()!;\n\tlet colorArray = color ? color.getArray()! : undefined;\n\tconst colorStride = color ? color.getComponentSize() : undefined;\n\n\t// (1) Gather attributes in Meshopt-compatible format.\n\n\tif (!(positionArray instanceof Float32Array)) {\n\t\tpositionArray = dequantizeAttributeArray(positionArray, position.getComponentType(), position.getNormalized());\n\t}\n\tif (colorArray && !(colorArray instanceof Float32Array)) {\n\t\tcolorArray = dequantizeAttributeArray(colorArray, position.getComponentType(), position.getNormalized());\n\t}\n\n\t// (2) Run simplification.\n\n\tsimplifier.useExperimentalFeatures = true;\n\tconst targetCount = Math.floor(options.ratio * srcVertexCount);\n\tconst dstIndicesArray = simplifier.simplifyPoints(positionArray, 3, targetCount, colorArray, colorStride);\n\tsimplifier.useExperimentalFeatures = false;\n\n\t// (3) Write vertex attributes.\n\n\tconst [remap, unique] = simplifier.compactMesh(dstIndicesArray);\n\n\tlogger.debug(`${NAME}: ${formatDeltaOp(position.getCount(), unique)} vertices.`);\n\n\tfor (const srcAttribute of deepListAttributes(prim)) {\n\t\tconst dstAttribute = shallowCloneAccessor(document, srcAttribute);\n\t\tcompactAttribute(srcAttribute, null, remap, dstAttribute, unique);\n\t\tdeepSwapAttribute(prim, srcAttribute, dstAttribute);\n\t\tif (srcAttribute.listParents().length === 1) srcAttribute.dispose();\n\t}\n\n\treturn prim;\n}\n","import { Document, MathUtils, Transform } from '@gltf-transform/core';\nimport { assignDefaults, createTransform } from './utils.js';\n\nconst NAME = 'sparse';\n\n/** Options for the {@link sparse} function. */\nexport interface SparseOptions {\n\t/**\n\t * Threshold ratio used to determine when an accessor should be sparse.\n\t * Default: 1 / 3.\n\t */\n\tratio: number;\n}\n\nconst SPARSE_DEFAULTS: Required<SparseOptions> = {\n\tratio: 1 / 3,\n};\n\n/**\n * Scans all {@link Accessor Accessors} in the Document, detecting whether each Accessor\n * would benefit from sparse data storage. Currently, sparse data storage is used only\n * when many values (>= ratio) are zeroes. Particularly for assets using morph target\n * (\"shape key\") animation, sparse data storage may significantly reduce file sizes.\n *\n * Example:\n *\n * ```ts\n * import { sparse } from '@gltf-transform/functions';\n *\n * accessor.getArray(); // → [ 0, 0, 0, 0, 0, 25.0, 0, 0, ... ]\n * accessor.getSparse(); // → false\n *\n * await document.transform(sparse({ratio: 1 / 10}));\n *\n * accessor.getSparse(); // → true\n * ```\n *\n * @experimental\n * @category Transforms\n */\nexport function sparse(_options: SparseOptions = SPARSE_DEFAULTS): Transform {\n\tconst options = assignDefaults(SPARSE_DEFAULTS, _options);\n\n\tconst ratio = options.ratio;\n\tif (ratio < 0 || ratio > 1) {\n\t\tthrow new Error(`${NAME}: Ratio must be between 0 and 1.`);\n\t}\n\n\treturn createTransform(NAME, (document: Document): void => {\n\t\tconst root = document.getRoot();\n\t\tconst logger = document.getLogger();\n\n\t\tlet modifiedCount = 0;\n\n\t\tfor (const accessor of root.listAccessors()) {\n\t\t\tconst count = accessor.getCount();\n\t\t\tconst base = Array(accessor.getElementSize()).fill(0);\n\t\t\tconst el = Array(accessor.getElementSize()).fill(0);\n\n\t\t\tlet nonZeroCount = 0;\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\taccessor.getElement(i, el);\n\t\t\t\tif (!MathUtils.eq(el, base, 0)) nonZeroCount++;\n\t\t\t\tif (nonZeroCount / count >= ratio) break;\n\t\t\t}\n\n\t\t\tconst sparse = nonZeroCount / count < ratio;\n\t\t\tif (sparse !== accessor.getSparse()) {\n\t\t\t\taccessor.setSparse(sparse);\n\t\t\t\tmodifiedCount++;\n\t\t\t}\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Updated ${modifiedCount} accessors.`);\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n","import {\n\tBufferUtils,\n\tDocument,\n\tFileUtils,\n\tImageUtils,\n\tTexture,\n\tTextureChannel,\n\tTransform,\n\tvec2,\n} from '@gltf-transform/core';\nimport { EXTTextureAVIF, EXTTextureWebP } from '@gltf-transform/extensions';\nimport { getTextureChannelMask } from './list-texture-channels.js';\nimport { listTextureSlots } from './list-texture-slots.js';\nimport type sharp from 'sharp';\nimport { assignDefaults, createTransform, fitPowerOfTwo, fitWithin, formatBytes } from './utils.js';\nimport { getPixels, savePixels } from 'ndarray-pixels';\nimport ndarray from 'ndarray';\nimport { lanczos2, lanczos3 } from 'ndarray-lanczos';\n\nconst NAME = 'textureCompress';\n\ntype Format = (typeof TEXTURE_COMPRESS_SUPPORTED_FORMATS)[number];\nexport const TEXTURE_COMPRESS_SUPPORTED_FORMATS = ['jpeg', 'png', 'webp', 'avif'] as const;\nconst SUPPORTED_MIME_TYPES = ['image/jpeg', 'image/png', 'image/webp', 'image/avif'];\n\n/** Resampling filter methods. LANCZOS3 is sharper, LANCZOS2 is smoother. */\nexport enum TextureResizeFilter {\n\t/** Lanczos3 (sharp) */\n\tLANCZOS3 = 'lanczos3',\n\t/** Lanczos2 (smooth) */\n\tLANCZOS2 = 'lanczos2',\n}\n\nexport interface TextureCompressOptions {\n\t/** Instance of the Sharp encoder, which must be installed from the\n\t * 'sharp' package and provided by the caller. When not provided, a\n\t * platform-specific fallback implementation will be used, and most\n\t * quality- and compression-related options are ignored.\n\t */\n\tencoder?: unknown;\n\t/**\n\t * Target image format. If specified, included textures in other formats\n\t * will be converted. Default: original format.\n\t */\n\ttargetFormat?: Format;\n\t/**\n\t * Resizes textures to given maximum width/height, preserving aspect ratio.\n\t * For example, a 4096x8192 texture, resized with limit [2048, 2048] will\n\t * be reduced to 1024x2048.\n\t *\n\t * Presets \"nearest-pot\", \"ceil-pot\", and \"floor-pot\" resize textures to\n\t * power-of-two dimensions, for older graphics APIs including WebGL 1.0.\n\t */\n\tresize?: vec2 | 'nearest-pot' | 'ceil-pot' | 'floor-pot';\n\t/** Interpolation used if resizing. Default: TextureResizeFilter.LANCZOS3. */\n\tresizeFilter?: TextureResizeFilter;\n\t/** Pattern identifying textures to compress, matched to name or URI. */\n\tpattern?: RegExp | null;\n\t/**\n\t * Pattern matching the format(s) to be compressed or converted. Some examples\n\t * of formats include \"jpeg\" and \"png\".\n\t */\n\tformats?: RegExp | null;\n\t/**\n\t * Pattern matching the material texture slot(s) to be compressed or converted.\n\t * Some examples of slot names include \"baseColorTexture\", \"occlusionTexture\",\n\t * \"metallicRoughnessTexture\", and \"normalTexture\".\n\t */\n\tslots?: RegExp | null;\n\n\t/** Quality, 1-100. Default: auto. */\n\tquality?: number | null;\n\t/**\n\t * Level of CPU effort to reduce file size, 0-100. PNG, WebP, and AVIF\n\t * only. Supported only when a Sharp encoder is provided. Default: auto.\n\t */\n\teffort?: number | null;\n\t/**\n\t * Use lossless compression mode. WebP and AVIF only. Supported only when a\n\t * Sharp encoder is provided. Default: false.\n\t */\n\tlossless?: boolean;\n\t/**\n\t * Use near lossless compression mode. WebP only. Supported only when a\n\t * Sharp encoder is provided. Default: false.\n\t */\n\tnearLossless?: boolean;\n\n\t/**\n\t * Attempts to avoid processing images that could exceed memory or other other\n\t * limits, throwing an error instead. Default: true.\n\t * @experimental\n\t */\n\tlimitInputPixels?: boolean;\n}\n\nexport type CompressTextureOptions = Omit<TextureCompressOptions, 'pattern' | 'formats' | 'slots'>;\n\n// IMPORTANT: No defaults for quality flags, see https://github.com/donmccurdy/glTF-Transform/issues/969.\nexport const TEXTURE_COMPRESS_DEFAULTS: Omit<TextureCompressOptions, 'resize' | 'targetFormat' | 'encoder'> = {\n\tresizeFilter: TextureResizeFilter.LANCZOS3,\n\tpattern: undefined,\n\tformats: undefined,\n\tslots: undefined,\n\tquality: undefined,\n\teffort: undefined,\n\tlossless: false,\n\tnearLossless: false,\n\tlimitInputPixels: true,\n};\n\n/**\n * Optimizes images, optionally resizing or converting to JPEG, PNG, WebP, or AVIF formats.\n *\n * For best results use a Node.js environment, install the `sharp` module, and\n * provide an encoder. When the encoder is omitted — `sharp` works only in Node.js —\n * the implementation will use a platform-specific fallback encoder, and most\n * quality- and compression-related options are ignored.\n *\n * Example:\n *\n * ```javascript\n * import { textureCompress } from '@gltf-transform/functions';\n * import sharp from 'sharp';\n *\n * // (A) Optimize without conversion.\n * await document.transform(\n * \ttextureCompress({encoder: sharp})\n * );\n *\n * // (B) Optimize and convert images to WebP.\n * await document.transform(\n * \ttextureCompress({\n * \t\tencoder: sharp,\n * \t\ttargetFormat: 'webp',\n * \t\tslots: /^(?!normalTexture).*$/ // exclude normal maps\n * \t})\n * );\n *\n * // (C) Resize and convert images to WebP in a browser, without a Sharp\n * // encoder. Most quality- and compression-related options are ignored.\n * await document.transform(\n * \ttextureCompress({ targetFormat: 'webp', resize: [1024, 1024] })\n * );\n * ```\n *\n * @category Transforms\n */\nexport function textureCompress(_options: TextureCompressOptions): Transform {\n\tconst options = assignDefaults(TEXTURE_COMPRESS_DEFAULTS, _options);\n\tconst targetFormat = options.targetFormat as Format | undefined;\n\tconst patternRe = options.pattern;\n\tconst formatsRe = options.formats;\n\tconst slotsRe = options.slots;\n\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tconst logger = document.getLogger();\n\t\tconst textures = document.getRoot().listTextures();\n\n\t\tawait Promise.all(\n\t\t\ttextures.map(async (texture, textureIndex) => {\n\t\t\t\tconst slots = listTextureSlots(texture);\n\t\t\t\tconst channels = getTextureChannelMask(texture);\n\t\t\t\tconst textureLabel =\n\t\t\t\t\ttexture.getURI() ||\n\t\t\t\t\ttexture.getName() ||\n\t\t\t\t\t`${textureIndex + 1}/${document.getRoot().listTextures().length}`;\n\t\t\t\tconst prefix = `${NAME}(${textureLabel})`;\n\n\t\t\t\t// FILTER: Exclude textures that don't match (a) 'slots' or (b) expected formats.\n\n\t\t\t\tif (!SUPPORTED_MIME_TYPES.includes(texture.getMimeType())) {\n\t\t\t\t\tlogger.debug(`${prefix}: Skipping, unsupported texture type \"${texture.getMimeType()}\".`);\n\t\t\t\t\treturn;\n\t\t\t\t} else if (patternRe && !patternRe.test(texture.getName()) && !patternRe.test(texture.getURI())) {\n\t\t\t\t\tlogger.debug(`${prefix}: Skipping, excluded by \"pattern\" parameter.`);\n\t\t\t\t\treturn;\n\t\t\t\t} else if (formatsRe && !formatsRe.test(texture.getMimeType())) {\n\t\t\t\t\tlogger.debug(`${prefix}: Skipping, \"${texture.getMimeType()}\" excluded by \"formats\" parameter.`);\n\t\t\t\t\treturn;\n\t\t\t\t} else if (slotsRe && slots.length && !slots.some((slot) => slotsRe.test(slot))) {\n\t\t\t\t\tlogger.debug(`${prefix}: Skipping, [${slots.join(', ')}] excluded by \"slots\" parameter.`);\n\t\t\t\t\treturn;\n\t\t\t\t} else if (options.targetFormat === 'jpeg' && channels & TextureChannel.A) {\n\t\t\t\t\tlogger.warn(`${prefix}: Skipping, [${slots.join(', ')}] requires alpha channel.`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst srcFormat = getFormat(texture);\n\t\t\t\tconst dstFormat = targetFormat || srcFormat;\n\t\t\t\tlogger.debug(`${prefix}: Format = ${srcFormat} → ${dstFormat}`);\n\t\t\t\tlogger.debug(`${prefix}: Slots = [${slots.join(', ')}]`);\n\n\t\t\t\tconst srcImage = texture.getImage()!;\n\t\t\t\tconst srcByteLength = srcImage.byteLength;\n\n\t\t\t\tawait compressTexture(texture, options);\n\n\t\t\t\tconst dstImage = texture.getImage()!;\n\t\t\t\tconst dstByteLength = dstImage.byteLength;\n\n\t\t\t\tconst flag = srcImage === dstImage ? ' (SKIPPED' : '';\n\n\t\t\t\tlogger.debug(`${prefix}: Size = ${formatBytes(srcByteLength)} → ${formatBytes(dstByteLength)}${flag}`);\n\t\t\t}),\n\t\t);\n\n\t\t// Attach EXT_texture_webp if needed.\n\t\tconst webpExtension = document.createExtension(EXTTextureWebP);\n\t\tif (textures.some((texture) => texture.getMimeType() === 'image/webp')) {\n\t\t\twebpExtension.setRequired(true);\n\t\t} else {\n\t\t\twebpExtension.dispose();\n\t\t}\n\n\t\t// Attach EXT_texture_avif if needed.\n\t\tconst avifExtension = document.createExtension(EXTTextureAVIF);\n\t\tif (textures.some((texture) => texture.getMimeType() === 'image/avif')) {\n\t\t\tavifExtension.setRequired(true);\n\t\t} else {\n\t\t\tavifExtension.dispose();\n\t\t}\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\n/**\n * Optimizes a single {@link Texture}, optionally resizing or converting to JPEG, PNG, WebP, or AVIF formats.\n *\n * For best results use a Node.js environment, install the `sharp` module, and\n * provide an encoder. When the encoder is omitted — `sharp` works only in Node.js —\n * the implementation will use a platform-specific fallback encoder, and most\n * quality- and compression-related options are ignored.\n *\n * Example:\n *\n * ```javascript\n * import { compressTexture } from '@gltf-transform/functions';\n * import sharp from 'sharp';\n *\n * const texture = document.getRoot().listTextures()\n * \t.find((texture) => texture.getName() === 'MyTexture');\n *\n * // (A) Node.js.\n * await compressTexture(texture, {\n * \tencoder: sharp,\n * \ttargetFormat: 'webp',\n * \tresize: [1024, 1024]\n * });\n *\n * // (B) Web.\n * await compressTexture(texture, {\n * \ttargetFormat: 'webp',\n * \tresize: [1024, 1024]\n * });\n * ```\n */\nexport async function compressTexture(texture: Texture, _options: CompressTextureOptions) {\n\tconst options = { ...TEXTURE_COMPRESS_DEFAULTS, ..._options } as Required<CompressTextureOptions>;\n\tconst encoder = options.encoder as typeof sharp | null;\n\n\tconst srcURI = texture.getURI();\n\tconst srcFormat = getFormat(texture);\n\tconst dstFormat = options.targetFormat || srcFormat;\n\tconst srcMimeType = texture.getMimeType();\n\tconst dstMimeType = `image/${dstFormat}`;\n\n\tconst srcImage = texture.getImage()!;\n\tconst dstImage = encoder\n\t\t? await _encodeWithSharp(srcImage, srcMimeType, dstMimeType, options)\n\t\t: await _encodeWithNdarrayPixels(srcImage, srcMimeType, dstMimeType, options);\n\n\tconst srcByteLength = srcImage.byteLength;\n\tconst dstByteLength = dstImage.byteLength;\n\n\tif (srcMimeType === dstMimeType && dstByteLength >= srcByteLength && !options.resize) {\n\t\t// Skip if src/dst formats match and dst is larger than the original.\n\t\treturn;\n\t} else if (srcMimeType === dstMimeType) {\n\t\t// Overwrite if src/dst formats match and dst is smaller than the original.\n\t\ttexture.setImage(dstImage);\n\t} else {\n\t\t// Overwrite, then update path and MIME type if src/dst formats differ.\n\t\tconst srcExtension = srcURI ? FileUtils.extension(srcURI) : ImageUtils.mimeTypeToExtension(srcMimeType);\n\t\tconst dstExtension = ImageUtils.mimeTypeToExtension(dstMimeType);\n\t\tconst dstURI = texture.getURI().replace(new RegExp(`\\\\.${srcExtension}$`), `.${dstExtension}`);\n\t\ttexture.setImage(dstImage).setMimeType(dstMimeType).setURI(dstURI);\n\t}\n}\n\nasync function _encodeWithSharp(\n\tsrcImage: Uint8Array,\n\t_srcMimeType: string,\n\tdstMimeType: string,\n\toptions: Required<CompressTextureOptions>,\n): Promise<Uint8Array> {\n\tconst encoder = options.encoder as typeof sharp;\n\tlet encoderOptions: sharp.JpegOptions | sharp.PngOptions | sharp.WebpOptions | sharp.AvifOptions = {};\n\n\tconst dstFormat = getFormatFromMimeType(dstMimeType);\n\n\tswitch (dstFormat) {\n\t\tcase 'jpeg':\n\t\t\tencoderOptions = { quality: options.quality } as sharp.JpegOptions;\n\t\t\tbreak;\n\t\tcase 'png':\n\t\t\tencoderOptions = {\n\t\t\t\tquality: options.quality,\n\t\t\t\teffort: remap(options.effort, 100, 10),\n\t\t\t} as sharp.PngOptions;\n\t\t\tbreak;\n\t\tcase 'webp':\n\t\t\tencoderOptions = {\n\t\t\t\tquality: options.quality,\n\t\t\t\teffort: remap(options.effort, 100, 6),\n\t\t\t\tlossless: options.lossless,\n\t\t\t\tnearLossless: options.nearLossless,\n\t\t\t} as sharp.WebpOptions;\n\t\t\tbreak;\n\t\tcase 'avif':\n\t\t\tencoderOptions = {\n\t\t\t\tquality: options.quality,\n\t\t\t\teffort: remap(options.effort, 100, 9),\n\t\t\t\tlossless: options.lossless,\n\t\t\t} as sharp.AvifOptions;\n\t\t\tbreak;\n\t}\n\n\tconst limitInputPixels = options.limitInputPixels;\n\tconst instance = encoder(srcImage, { limitInputPixels }).toFormat(dstFormat, encoderOptions);\n\n\tif (options.resize) {\n\t\tconst srcSize = ImageUtils.getSize(srcImage, _srcMimeType)!;\n\t\tconst dstSize = Array.isArray(options.resize)\n\t\t\t? fitWithin(srcSize, options.resize)\n\t\t\t: fitPowerOfTwo(srcSize, options.resize);\n\t\tinstance.resize(dstSize[0], dstSize[1], { fit: 'fill', kernel: options.resizeFilter });\n\t}\n\n\treturn BufferUtils.toView(await instance.toBuffer());\n}\n\nasync function _encodeWithNdarrayPixels(\n\tsrcImage: Uint8Array,\n\tsrcMimeType: string,\n\tdstMimeType: string,\n\toptions: Required<CompressTextureOptions>,\n): Promise<Uint8Array> {\n\tconst srcPixels = (await getPixels(srcImage, srcMimeType)) as ndarray.NdArray<Uint8Array>;\n\n\tif (options.resize) {\n\t\tconst [w, h] = srcPixels.shape;\n\t\tconst dstSize = Array.isArray(options.resize)\n\t\t\t? fitWithin([w, h], options.resize)\n\t\t\t: fitPowerOfTwo([w, h], options.resize);\n\t\tconst dstPixels = ndarray(new Uint8Array(dstSize[0] * dstSize[1] * 4), [...dstSize, 4]);\n\t\toptions.resizeFilter === TextureResizeFilter.LANCZOS3\n\t\t\t? lanczos3(srcPixels, dstPixels)\n\t\t\t: lanczos2(srcPixels, dstPixels);\n\t\treturn savePixels(dstPixels, dstMimeType);\n\t}\n\n\treturn savePixels(srcPixels, dstMimeType);\n}\n\nfunction getFormat(texture: Texture): Format {\n\treturn getFormatFromMimeType(texture.getMimeType());\n}\n\nfunction getFormatFromMimeType(mimeType: string): Format {\n\tconst format = mimeType.split('/').pop() as Format | undefined;\n\tif (!format || !TEXTURE_COMPRESS_SUPPORTED_FORMATS.includes(format)) {\n\t\tthrow new Error(`Unknown MIME type \"${mimeType}\".`);\n\t}\n\treturn format;\n}\n\nfunction remap(value: number | null | undefined, srcMax: number, dstMax: number): number | undefined {\n\tif (value == null) return undefined;\n\treturn Math.round((value / srcMax) * dstMax);\n}\n","import { Accessor, Document, ILogger, Primitive, Transform, TypedArray, uuid } from '@gltf-transform/core';\nimport { assignDefaults, createTransform } from './utils.js';\n\nconst NAME = 'tangents';\n\n/** Options for the {@link tangents} function. */\nexport interface TangentsOptions {\n\t/**\n\t * Callback function to generate tangents from position, uv, and normal attributes.\n\t * Generally, users will want to provide the `generateTangents` from the\n\t * [mikktspace](https://github.com/donmccurdy/mikktspace-wasm) library, which is not\n\t * included by default.\n\t */\n\tgenerateTangents?: (pos: Float32Array, norm: Float32Array, uv: Float32Array) => Float32Array;\n\t/** Whether to overwrite existing `TANGENT` attributes. */\n\toverwrite?: boolean;\n}\n\nconst TANGENTS_DEFAULTS: Required<Omit<TangentsOptions, 'generateTangents'>> = {\n\toverwrite: false,\n};\n\n/**\n * Generates MikkTSpace vertex tangents for mesh primitives, which may fix rendering issues\n * occuring with some baked normal maps. Requires access to the [mikktspace](https://github.com/donmccurdy/mikktspace-wasm)\n * WASM package, or equivalent.\n *\n * Example:\n *\n * ```ts\n * import { generateTangents } from 'mikktspace';\n * import { tangents } from '@gltf-transform/functions';\n *\n * await document.transform(\n * \ttangents({generateTangents})\n * );\n * ```\n *\n * @category Transforms\n */\nexport function tangents(_options: TangentsOptions = TANGENTS_DEFAULTS): Transform {\n\tconst options = assignDefaults(TANGENTS_DEFAULTS, _options);\n\n\tif (!options.generateTangents) {\n\t\tthrow new Error(`${NAME}: generateTangents callback required — install \"mikktspace\".`);\n\t}\n\n\treturn createTransform(NAME, (doc: Document): void => {\n\t\tconst logger = doc.getLogger();\n\t\tconst attributeIDs = new Map<TypedArray, string>();\n\t\tconst tangentCache = new Map<string, Accessor>();\n\t\tlet modified = 0;\n\n\t\tfor (const mesh of doc.getRoot().listMeshes()) {\n\t\t\tconst meshName = mesh.getName();\n\t\t\tconst meshPrimitives = mesh.listPrimitives();\n\n\t\t\tfor (let i = 0; i < meshPrimitives.length; i++) {\n\t\t\t\tconst prim = meshPrimitives[i];\n\n\t\t\t\t// Skip primitives for which we can't compute tangents.\n\t\t\t\tif (!filterPrimitive(prim, logger, meshName, i, options.overwrite)) continue;\n\n\t\t\t\tconst texcoordSemantic = getNormalTexcoord(prim);\n\n\t\t\t\t// Nullability conditions checked by filterPrimitive() above.\n\t\t\t\tconst position = prim.getAttribute('POSITION')!.getArray()!;\n\t\t\t\tconst normal = prim.getAttribute('NORMAL')!.getArray()!;\n\t\t\t\tconst texcoord = prim.getAttribute(texcoordSemantic)!.getArray()!;\n\n\t\t\t\t// Compute UUIDs for each attribute.\n\t\t\t\tconst positionID = attributeIDs.get(position) || uuid();\n\t\t\t\tattributeIDs.set(position, positionID);\n\n\t\t\t\tconst normalID = attributeIDs.get(normal) || uuid();\n\t\t\t\tattributeIDs.set(normal, normalID);\n\n\t\t\t\tconst texcoordID = attributeIDs.get(texcoord) || uuid();\n\t\t\t\tattributeIDs.set(texcoord, texcoordID);\n\n\t\t\t\t// Dispose of previous TANGENT accessor if only used by this primitive (and Root).\n\t\t\t\tconst prevTangent = prim.getAttribute('TANGENT');\n\t\t\t\tif (prevTangent && prevTangent.listParents().length === 2) prevTangent.dispose();\n\n\t\t\t\t// If we've already computed tangents for this pos/norm/uv set, reuse them.\n\t\t\t\tconst attributeHash = `${positionID}|${normalID}|${texcoordID}`;\n\t\t\t\tlet tangent = tangentCache.get(attributeHash);\n\t\t\t\tif (tangent) {\n\t\t\t\t\tlogger.debug(`${NAME}: Found cache for primitive ${i} of mesh \"${meshName}\".`);\n\t\t\t\t\tprim.setAttribute('TANGENT', tangent);\n\t\t\t\t\tmodified++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Otherwise, generate tangents with the 'mikktspace' WASM library.\n\t\t\t\tlogger.debug(`${NAME}: Generating for primitive ${i} of mesh \"${meshName}\".`);\n\t\t\t\tconst tangentBuffer = prim.getAttribute('POSITION')!.getBuffer();\n\t\t\t\tconst tangentArray = options.generateTangents!(\n\t\t\t\t\tposition instanceof Float32Array ? position : new Float32Array(position),\n\t\t\t\t\tnormal instanceof Float32Array ? normal : new Float32Array(normal),\n\t\t\t\t\ttexcoord instanceof Float32Array ? texcoord : new Float32Array(texcoord),\n\t\t\t\t);\n\n\t\t\t\t// See: https://github.com/KhronosGroup/glTF-Sample-Models/issues/174\n\t\t\t\tfor (let i = 3; i < tangentArray.length; i += 4) tangentArray[i] *= -1;\n\n\t\t\t\ttangent = doc.createAccessor().setBuffer(tangentBuffer).setArray(tangentArray).setType('VEC4');\n\t\t\t\tprim.setAttribute('TANGENT', tangent);\n\n\t\t\t\ttangentCache.set(attributeHash, tangent);\n\t\t\t\tmodified++;\n\t\t\t}\n\t\t}\n\n\t\tif (!modified) {\n\t\t\tlogger.warn(`${NAME}: No qualifying primitives found. See debug output.`);\n\t\t} else {\n\t\t\tlogger.debug(`${NAME}: Complete.`);\n\t\t}\n\t});\n}\n\nfunction getNormalTexcoord(prim: Primitive): string {\n\tconst material = prim.getMaterial();\n\tif (!material) return 'TEXCOORD_0';\n\n\tconst normalTextureInfo = material.getNormalTextureInfo();\n\tif (!normalTextureInfo) return 'TEXCOORD_0';\n\n\tconst texcoord = normalTextureInfo.getTexCoord();\n\tconst semantic = `TEXCOORD_${texcoord}`;\n\tif (prim.getAttribute(semantic)) return semantic;\n\n\treturn 'TEXCOORD_0';\n}\n\nfunction filterPrimitive(prim: Primitive, logger: ILogger, meshName: string, i: number, overwrite: boolean): boolean {\n\tif (\n\t\tprim.getMode() !== Primitive.Mode.TRIANGLES ||\n\t\t!prim.getAttribute('POSITION') ||\n\t\t!prim.getAttribute('NORMAL') ||\n\t\t!prim.getAttribute('TEXCOORD_0')\n\t) {\n\t\tlogger.debug(\n\t\t\t`${NAME}: Skipping primitive ${i} of mesh \"${meshName}\": primitives must` +\n\t\t\t\t' have attributes=[POSITION, NORMAL, TEXCOORD_0] and mode=TRIANGLES.',\n\t\t);\n\t\treturn false;\n\t}\n\n\tif (prim.getAttribute('TANGENT') && !overwrite) {\n\t\tlogger.debug(`${NAME}: Skipping primitive ${i} of mesh \"${meshName}\": TANGENT found.`);\n\t\treturn false;\n\t}\n\n\tif (prim.getIndices()) {\n\t\tlogger.warn(`${NAME}: Skipping primitive ${i} of mesh \"${meshName}\": primitives must` + ' be unwelded.');\n\t\treturn false;\n\t}\n\n\treturn true;\n}\n","import { Accessor, Document, Node, Transform } from '@gltf-transform/core';\nimport { EXTMeshGPUInstancing, InstancedMesh } from '@gltf-transform/extensions';\nimport { createTransform } from './utils.js';\n\nconst NAME = 'uninstance';\n\nexport interface UninstanceOptions {}\nconst UNINSTANCE_DEFAULTS: Required<UninstanceOptions> = {};\n\n/**\n * Removes extension {@link EXTMeshGPUInstancing}, reversing the effects of the\n * {@link instance} transform or similar instancing operations. For each {@link Node}\n * associated with an {@link InstancedMesh}, the Node's {@link Mesh} and InstancedMesh will\n * be detached. In their place, one Node per instance will be attached to the original\n * Node as children, associated with the same Mesh. The extension, `EXT_mesh_gpu_instancing`,\n * will be removed from the {@link Document}.\n *\n * In applications that support `EXT_mesh_gpu_instancing`, removing the extension\n * is likely to substantially increase draw calls and reduce performance. Removing\n * the extension may be helpful for compatibility in applications without such support.\n *\n * Example:\n *\n * ```ts\n * import { uninstance } from '@gltf-transform/functions';\n *\n * document.getRoot().listNodes(); // → [ Node x 10 ]\n *\n * await document.transform(uninstance());\n *\n * document.getRoot().listNodes(); // → [ Node x 1000 ]\n * ```\n *\n * @category Transforms\n */\nexport function uninstance(_options: UninstanceOptions = UNINSTANCE_DEFAULTS): Transform {\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tconst logger = document.getLogger();\n\t\tconst root = document.getRoot();\n\n\t\tconst instanceAttributes = new Set<Accessor>();\n\n\t\tfor (const srcNode of document.getRoot().listNodes()) {\n\t\t\tconst batch = srcNode.getExtension<InstancedMesh>('EXT_mesh_gpu_instancing');\n\t\t\tif (!batch) continue;\n\n\t\t\t// For each instance, attach a new Node under the source Node.\n\t\t\tfor (const instanceNode of createInstanceNodes(srcNode)) {\n\t\t\t\tsrcNode.addChild(instanceNode);\n\t\t\t}\n\n\t\t\tfor (const instanceAttribute of batch.listAttributes()) {\n\t\t\t\tinstanceAttributes.add(instanceAttribute);\n\t\t\t}\n\n\t\t\tsrcNode.setMesh(null);\n\t\t\tbatch.dispose();\n\t\t}\n\n\t\t// Clean up unused instance attributes.\n\t\tfor (const attribute of instanceAttributes) {\n\t\t\tif (attribute.listParents().every((parent) => parent === root)) {\n\t\t\t\tattribute.dispose();\n\t\t\t}\n\t\t}\n\n\t\t// Remove Extension from Document.\n\t\tdocument.createExtension(EXTMeshGPUInstancing).dispose();\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n\n/**\n * Given a {@link Node} with an {@link InstancedMesh} extension, returns a list\n * containing one Node per instance in the InstancedMesh. Each Node will have\n * the transform (translation/rotation/scale) of the corresponding instance,\n * and will be assigned to the same {@link Mesh}.\n *\n * May be used to unpack instancing previously applied with {@link instance}\n * and {@link EXTMeshGPUInstancing}. For a transform that applies this operation\n * to the entire {@link Document}, see {@link uninstance}.\n *\n * Example:\n * ```javascript\n * import { createInstanceNodes } from '@gltf-transform/functions';\n *\n * for (const instanceNode of createInstanceNodes(batchNode)) {\n *  batchNode.addChild(instanceNode);\n * }\n *\n * batchNode.setMesh(null).setExtension('EXTMeshGPUInstancing', null);\n * ```\n */\nexport function createInstanceNodes(batchNode: Node): Node[] {\n\tconst batch = batchNode.getExtension<InstancedMesh>('EXT_mesh_gpu_instancing');\n\tif (!batch) return [];\n\n\tconst semantics = batch.listSemantics();\n\tif (semantics.length === 0) return [];\n\n\tconst document = Document.fromGraph(batchNode.getGraph())!;\n\tconst instanceCount = batch.listAttributes()[0].getCount();\n\tconst instanceCountDigits = String(instanceCount).length;\n\tconst mesh = batchNode.getMesh();\n\tconst batchName = batchNode.getName();\n\n\tconst instanceNodes = [];\n\n\t// For each instance construct a Node, assign attributes, and push to list.\n\tfor (let i = 0; i < instanceCount; i++) {\n\t\tconst instanceNode = document.createNode().setMesh(mesh);\n\n\t\t// MyNode_001, MyNode_002, ...\n\t\tif (batchName) {\n\t\t\tconst paddedIndex = String(i).padStart(instanceCountDigits, '0');\n\t\t\tinstanceNode.setName(`${batchName}_${paddedIndex}`);\n\t\t}\n\n\t\t// TRS attributes are applied to node transform; all other attributes are extras.\n\t\tfor (const semantic of semantics) {\n\t\t\tconst attribute = batch.getAttribute(semantic)!;\n\t\t\tswitch (semantic) {\n\t\t\t\tcase 'TRANSLATION':\n\t\t\t\t\tinstanceNode.setTranslation(attribute.getElement(i, [0, 0, 0]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ROTATION':\n\t\t\t\t\tinstanceNode.setRotation(attribute.getElement(i, [0, 0, 0, 1]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'SCALE':\n\t\t\t\t\tinstanceNode.setScale(attribute.getElement(i, [1, 1, 1]));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\t_setInstanceExtras(instanceNode, semantic, attribute, i);\n\t\t\t}\n\t\t}\n\n\t\tinstanceNodes.push(instanceNode);\n\t}\n\n\treturn instanceNodes;\n}\n\nfunction _setInstanceExtras(node: Node, semantic: string, attribute: Accessor, index: number): void {\n\tconst value = attribute.getType() === 'SCALAR' ? attribute.getScalar(index) : attribute.getElement(index, []);\n\tnode.setExtras({ ...node.getExtras(), [semantic]: value });\n}\n","import type { Document, Transform } from '@gltf-transform/core';\nimport { KHRMaterialsUnlit } from '@gltf-transform/extensions';\n\n/**\n * @category Transforms\n */\nexport function unlit(): Transform {\n\treturn (doc: Document): void => {\n\t\tconst unlitExtension = doc.createExtension(KHRMaterialsUnlit) as KHRMaterialsUnlit;\n\t\tconst unlit = unlitExtension.createUnlit();\n\t\tdoc.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tmaterial.setExtension('KHR_materials_unlit', unlit);\n\t\t\t});\n\t};\n}\n","import type { Document, Transform } from '@gltf-transform/core';\nimport { createTransform } from './utils.js';\n\nconst NAME = 'unpartition';\n\nexport interface UnpartitionOptions {}\nconst UNPARTITION_DEFAULTS: Required<UnpartitionOptions> = {};\n\n/**\n * Removes partitions from the binary payload of a glTF file, so that the asset\n * contains at most one (1) `.bin` {@link Buffer}. This process reverses the\n * changes from a {@link partition} transform.\n *\n * Example:\n *\n * ```ts\n * document.getRoot().listBuffers(); // → [Buffer, Buffer, ...]\n *\n * await document.transform(unpartition());\n *\n * document.getRoot().listBuffers(); // → [Buffer]\n * ```\n *\n * @category Transforms\n */\nexport function unpartition(_options: UnpartitionOptions = UNPARTITION_DEFAULTS): Transform {\n\treturn createTransform(NAME, async (document: Document): Promise<void> => {\n\t\tconst logger = document.getLogger();\n\n\t\tconst buffer = document.getRoot().listBuffers()[0];\n\t\tdocument\n\t\t\t.getRoot()\n\t\t\t.listAccessors()\n\t\t\t.forEach((a) => a.setBuffer(buffer));\n\t\tdocument\n\t\t\t.getRoot()\n\t\t\t.listBuffers()\n\t\t\t.forEach((b, index) => (index > 0 ? b.dispose() : null));\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n","import type { Accessor, Document, Primitive, Transform, vec3 } from '@gltf-transform/core';\nimport { createTransform } from './utils.js';\n\nconst NAME = 'vertexColorSpace';\n\n/** Options for the {@link vertexColorSpace} function. */\nexport interface ColorSpaceOptions {\n\t/** Input color space of vertex colors, to be converted to \"srgb-linear\". Required. */\n\tinputColorSpace: 'srgb' | 'srgb-linear';\n}\n\n/**\n * Vertex color color space correction. The glTF format requires vertex colors to be stored\n * in Linear Rec. 709 D65 color space, and this function provides a way to correct vertex\n * colors that are (incorrectly) stored in sRGB.\n *\n * Example:\n *\n * ```typescript\n * import { vertexColorSpace } from '@gltf-transform/functions';\n *\n * await document.transform(\n *   vertexColorSpace({ inputColorSpace: 'srgb' })\n * );\n * ```\n *\n * @category Transforms\n */\nexport function vertexColorSpace(options: ColorSpaceOptions): Transform {\n\treturn createTransform(NAME, (doc: Document): void => {\n\t\tconst logger = doc.getLogger();\n\n\t\tconst inputColorSpace = (options.inputColorSpace || '').toLowerCase();\n\n\t\tif (inputColorSpace === 'srgb-linear') {\n\t\t\tlogger.info(`${NAME}: Vertex colors already linear. Skipping conversion.`);\n\t\t\treturn;\n\t\t}\n\n\t\tif (inputColorSpace !== 'srgb') {\n\t\t\tlogger.error(\n\t\t\t\t`${NAME}: Unknown input color space \"${inputColorSpace}\" – should be \"srgb\" or ` +\n\t\t\t\t\t'\"srgb-linear\". Skipping conversion.',\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tconst converted = new Set<Accessor>();\n\n\t\t// Source: THREE.Color\n\t\tfunction sRGBToLinear(c: number): number {\n\t\t\treturn c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\n\t\t}\n\n\t\tfunction updatePrimitive(primitive: Primitive): void {\n\t\t\tconst color = [0, 0, 0] as vec3;\n\t\t\tlet attribute: Accessor | null;\n\t\t\tfor (let i = 0; (attribute = primitive.getAttribute(`COLOR_${i}`)); i++) {\n\t\t\t\tif (converted.has(attribute)) continue;\n\n\t\t\t\tfor (let j = 0; j < attribute.getCount(); j++) {\n\t\t\t\t\tattribute.getElement(j, color);\n\t\t\t\t\tcolor[0] = sRGBToLinear(color[0]);\n\t\t\t\t\tcolor[1] = sRGBToLinear(color[1]);\n\t\t\t\t\tcolor[2] = sRGBToLinear(color[2]);\n\t\t\t\t\tattribute.setElement(j, color);\n\t\t\t\t}\n\n\t\t\t\tconverted.add(attribute);\n\t\t\t}\n\t\t}\n\n\t\tdoc.getRoot()\n\t\t\t.listMeshes()\n\t\t\t.forEach((mesh) => mesh.listPrimitives().forEach(updatePrimitive));\n\n\t\tlogger.debug(`${NAME}: Complete.`);\n\t});\n}\n"],"names":["rewriteTexture","source","target","fn","Promise","resolve","srcImage","getImage","getPixels","getMimeType","then","pixels","i","shape","j","savePixels","dstImage","setImage","setMimeType","e","reject","POINTS","LINES","LINE_STRIP","LINE_LOOP","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","Primitive","Mode","createTransform","name","Object","defineProperty","value","isTransformPending","context","initial","pending","initialIndex","stack","lastIndexOf","pendingIndex","assignDefaults","defaults","options","result","key","undefined","getGLPrimitiveCount","prim","indices","getIndices","position","getAttribute","getMode","getCount","Error","SetMap","constructor","_map","Map","size","has","k","add","v","entry","get","Set","set","keys","formatBytes","bytes","decimals","dm","sizes","Math","floor","log","parseFloat","pow","toFixed","_longFormatter","Intl","NumberFormat","maximumFractionDigits","formatLong","x","format","formatDelta","a","b","prefix","suffix","abs","formatDeltaOp","deepListAttributes","accessors","attribute","listAttributes","push","listTargets","Array","from","deepSwapAttribute","src","dst","swap","shallowEqualsArray","length","shallowCloneAccessor","document","accessor","createAccessor","getName","setArray","getArray","setType","getType","setBuffer","getBuffer","setNormalized","getNormalized","setSparse","getSparse","createIndices","count","maxIndex","array","createIndicesEmpty","Uint16Array","Uint32Array","isUsed","prop","listParents","some","parent","propertyType","PropertyType","ROOT","isEmptyObject","object","createPrimGroupKey","Document","fromGraph","getGraph","material","getMaterial","materialIndex","getRoot","listMaterials","indexOf","mode","BASIC_MODE_MAPPING","attributes","listSemantics","sort","map","semantic","elementSize","getElementSize","componentType","getComponentType","join","targets","fitWithin","limit","maxWidth","maxHeight","srcWidth","srcHeight","dstWidth","dstHeight","fitPowerOfTwo","method","isPowerOfTwo","nearestPowerOfTwo","ceilPowerOfTwo","floorPowerOfTwo","lo","hi","LN2","ceil","NAME","CENTER_DEFAULTS","pivot","center","_options","doc","logger","getLogger","root","isAnimated","listAnimations","listSkins","listScenes","forEach","scene","index","debug","bbox","getBounds","max","min","offset","offsetNode","createNode","setTranslation","listChildren","child","addChild","t","getTranslation","listNodeScenes","node","visited","getParentNode","filter","Scene","clearNodeParent","scenes","setMatrix","getWorldMatrix","removeChild","invert","multiply","create","glMatrix.ARRAY_TYPE","scale","mul","DEDUP_DEFAULTS","keepUniqueNames","propertyTypes","ACCESSOR","MESH","TEXTURE","MATERIAL","SKIN","dedup","includes","dedupAccessors","dedupImages","dedupMaterials","dedupMeshes","dedupSkins","indicesMap","attributeMap","inputMap","outputMap","meshes","listMeshes","mesh","listPrimitives","primitive","hashAccessor","animation","sampler","listSamplers","getInput","getOutput","group","hash","hashSet","detectDuplicates","duplicates","aData","BufferUtils","toView","equals","total","hashGroup","values","input","output","dispose","refs","listAccessors","numMeshes","uniqueMeshes","srcKeyItems","createPrimitiveKey","meshKey","targetMesh","textures","listTextures","bData","aSize","getSize","bSize","entries","_ref","property","Root","materials","modifierCache","skip","hasModifier","_ref2","skins","listJoints","_ref3","primKeyItems","cache","graph","visitedNodes","edgeQueue","listParentEdges","edge","pop","getAttributes","modifyChild","getChild","childEdge","listChildEdges","SRGB_PATTERN","getTextureColorSpace","texture","edges","isSRGB","isColor","test","listTextureInfo","results","textureEdge","getParent","TextureInfo","listTextureInfoByMaterial","traverse","textureInfoNames","Texture","ExtensionProperty","listTextureSlots","slots","maybeGetPixels","_catch","getTextureFactor","Infinity","width","height","len","sub","EPS","pruneSolidTextures","factor","_texture$getSize","ColorUtils","convertSRGBToLinear","getURI","applyMaterialFactor","all","PRUNE_DEFAULTS","NODE","CAMERA","PRIMITIVE","PRIMITIVE_TARGET","ANIMATION","BUFFER","keepLeaves","keepAttributes","keepIndices","keepSolidTextures","keepExtras","prune","_temp3","treeShake","listBuffers","buffer","removeEventListener","onDispose","counter","empty","str","type","info","DisposeCounter","event","addEventListener","nodeTreeShake","listNodes","skin","camera","listCameras","indirectTreeShake","materialPrims","required","listRequiredSemantics","unused","listUnusedSemantics","pruneAttributes","prims","shiftTexCoords","pruneIndices","anim","channel","listChannels","getTargetNode","samplers","_temp2","_temp","disposed","parents","p","AnimationChannel","needsExtras","getExtras","listEdges","ptype","SCENE","isEmpty","setAttribute","indicesArray","il","setIndices","startsWith","semantics","textureNames","replace","getTexCoord","match","isLit","Material","getExtension","isPoints","textureInfoList","texCoordSet","texCoordList","texCoordMap","texCoord","semanticMap","textureInfo","setTexCoord","updatePrim","srcSemantics","srcSemantic","uv","dstSemantic","slot","setBaseColorFactor","getBaseColorFactor","setEmissiveFactor","mulVec3","slice","getEmissiveFactor","setRoughnessFactor","getRoughnessFactor","setMetallicFactor","getMetallicFactor","warn","EMPTY_U32","VertexStream","u8","u32","byteStride","_initAttribute","Uint8Array","byteOffset","byteLength","getComponentSize","paddedByteStride","padNumber","murmurHash2","equal","h","m","r","imul","hashLookup","table","buckets","stream","hashmod","hashval","bucket","probe","item","VertexCountMethod","getSceneVertexCount","_getSubtreeVertexCount","getNodeVertexCount","instancedMeshes","nonInstancedMeshes","getMesh","batch","flatMap","positions","uniquePositions","uniquePrims","RENDER","RENDER_CACHED","_sum","getMeshVertexCount","UPLOAD_NAIVE","UPLOAD","DISTINCT","DISTINCT_POSITION","_assertNotImplemented","UNUSED","_sumUnused","_assertUnreachable","getPrimitiveVertexCount","attributeIndexMap","indicesSet","usedIndices","compactPrimitive","remap","dstVertexCount","createCompactPlan","srcIndices","srcIndicesArray","srcIndicesCount","dstIndices","dstIndicesCount","dstIndicesArray","srcAttributesPrev","srcAttribute","dstAttribute","compactAttribute","srcArray","dstArray","dstDone","srcIndex","dstIndex","srcVertexCount","fill","WELD_DEFAULTS","overwrite","cleanup","weld","weldPrimitive","transform","tableSize","writeMap","hashIndex","FLOAT","Accessor","ComponentType","transformPrimitive","matrix","applyMatrix","normal","applyNormalMatrix","tangent","applyTangentMatrix","determinant","reversePrimitiveWindingOrder","normalized","Float32Array","vector","createVec3","MathUtils","decodeNormalizedInt","transformMat4","normalMatrix","createMat3","fromMat4","transpose","transformMat3","normalizeVec3","v3","getScalar","c","setScalar","transformMesh","srcPrim","dstPrim","shallowClonePrimitive","removePrimitive","addPrimitive","parentMesh","isSharedPrimitive","Mesh","clone","isSharedTarget","removeTarget","addTarget","IDENTITY","clearNodeTransform","localMatrix","getMatrix","eq","multiplyMat4","convertPrimitiveToLines","dstGLPrimitiveCount","IndicesArray","ComponentTypeToTypedArray","srcMode","setMode","convertPrimitiveToTriangles","DEQUANTIZE_DEFAULTS","pattern","dequantize","dequantizePrimitive","createExtension","KHRMeshQuantization","dequantizeAttribute","dequantizeAttributeArray","TEXTURE_INFO","NO_TRANSFER_TYPES","cloneDocument","setLogger","createDefaultPropertyResolver","mergeDocuments","copy","sourceExtension","listExtensionsUsed","targetExtension","isRequired","setRequired","_copyToDocument","listNonRootProperties","moveToDocument","sourceProperties","targetProperties","copyToDocument","sourcePropertyDependencies","listPropertyDependencies","propertyMap","sourceProp","targetProp","PropertyClass","queue","next","DRACO_DEFAULTS","encodeSpeed","decodeSpeed","quantizePosition","quantizeNormal","quantizeColor","quantizeTexcoord","quantizeGeneric","quantizationVolume","draco","KHRDracoMeshCompression","setEncoderOptions","EncoderMethod","EDGEBREAKER","SEQUENTIAL","quantizationBits","POSITION","NORMAL","COLOR","TEX_COORD","GENERIC","FLATTEN_DEFAULTS","flatten","joints","joint","animated","getTargetPath","hasJointParent","hasAnimatedParent","_getBounds","inspect","animations","sceneBounds","rootName","bboxMin","toPrecision","bboxMax","renderVertexCount","uploadVertexCount","uploadNaiveVertexCount","properties","instances","glPrimitives","meshIndices","meshAccessors","attr","accessorToTypeLabel","targ","modes","MeshPrimitiveModeLabels","meshPrimitives","vertices","extensions","listExtensions","ref","alphaMode","getAlphaMode","doubleSided","getDoubleSided","resolution","ImageUtils","compression","container","readKTX","dfd","dataFormatDescriptor","colorModel","KHR_DF_MODEL_ETC1S","KHR_DF_MODEL_UASTC","uri","mimeType","gpuSize","getVRAMByteLength","minTime","maxTime","getMin","getMax","keyframes","channels","duration","round","NumericTypeLabels","Int32Array","Int16Array","Int8Array","Number","base","INSTANCE_DEFAULTS","instance","batchExtension","EXTMeshGPUInstancing","numBatches","numInstances","meshInstances","modifiedNodes","nodes","getSkin","hasVolume","hasScale","createBatch","batchTranslation","batchRotation","batchScale","batchNode","setMesh","setExtension","needsTranslation","needsRotation","needsScale","s","setElement","getWorldTranslation","getWorldRotation","getWorldScale","pruneUnusedNodes","listProperties","unusedNodes","getCamera","nodeParent","createInstancedMesh","JOIN_PRIMITIVE_DEFAULTS","skipValidation","joinPrimitives","templatePrim","primRemaps","primVertexCounts","primIndex","createPrimitive","setMaterial","tplAttribute","AttributeArray","tplIndices","dstIndicesOffset","remapIndices","remapAttribute","done","dstOffset","srcCount","_matrix","JOIN_DEFAULTS","keepMeshes","keepNamed","_joinLevel","groups","children","nodeIndex","dequantizeTransformableAttributes","isNamed","primMeshes","primNodes","dstNode","dstMesh","joinGroups","srcNodes","isSharedMesh","dstMatrix","primNode","primMesh","_deepClonePrimitive","listTextureChannels","mask","getTextureChannelMask","TextureChannel","R","G","B","A","AlphaMode","OPAQUE","REORDER_DEFAULTS","reorder","encoder","ready","plan","indicesToAttributes","createLayoutPlan","unique","reorderMesh","indicesToMode","indicesToPrimitives","attributesToPrimitives","sortPrimitiveWeights","isFinite","vertexCount","setCount","srcWeights","dstWeights","srcJoints","dstJoints","getVertexArray","setVertexArray","weights","normalizePrimitiveWeights","isNormalizeSafe","templateAttribute","templateArray","normalizedComponentType","delta","EPSILON","weightsSum","sum","floatValue","encodeNormalizedInt","sign","vertexIndex","el","getElement","normList","typeList","SIGNED_INT","TRANSLATION","ROTATION","SCALE","WEIGHTS","TargetPath","TRS_CHANNELS","QUANTIZE_DEFAULTS","quantizeWeight","normalizeWeights","quantize","patternTargets","nodeTransform","getNodeTransform","expandBounds","getPositionQuantizationVolume","transformMeshParents","transformMeshMaterials","renderCount","uploadCount","quantizePrimitive","needsExtension","isQuantizedPrimitive","isTarget","PrimitiveTarget","bits","ctor","getQuantizationSettings","fromTransform","fromScaling","quantizeAttribute","volume","transformMatrix","Node","animChannels","isParentNode","setSkin","transformSkin","transformBatch","targetNode","setTargetNode","nodeMatrix","inverseBindMatrices","getInverseBindMatrices","ibm","setInverseBindMatrices","_batch$getAttribute","_batch$getAttribute2","_batch$getAttribute3","instanceTranslation","instanceRotation","instanceScale","tpl","T_IDENTITY","R_IDENTITY","S_IDENTITY","makeArray","instanceMatrix","compose","decompose","getThicknessFactor","setThicknessFactor","signBits","quantBits","storageBits","BYTES_PER_ELEMENT","range","di","clamp","getMinNormalized","getMaxNormalized","relativePositions","flatBounds","relMin","relMax","isQuantizedAttribute","componentSize","UNSIGNED_BYTE","UNSIGNED_SHORT","tmpMin","tmpMax","bboxes","fromRotationTranslationScale","elementCount","initialElement","MESHOPT_DEFAULTS","level","meshopt","EXTMeshoptCompression","QUANTIZE","FILTER","_settle","pact","state","_Pact","o","bind","observer","prototype","onFulfilled","onRejected","_this","_isSettledPact","thenable","metalRough","_temp4","specGlossExtension","tex","inputTextures","extensionsUsed","ext","extensionName","iorExtension","KHRMaterialsIOR","specExtension","KHRMaterialsSpecular","KHRMaterialsPBRSpecularGlossiness","_forOf","specGloss","specular","createSpecular","setSpecularFactor","setSpecularColorFactor","getSpecularFactor","getSpecularGlossinessTexture","getBaseColorTexture","getMetallicRoughnessTexture","getDiffuseFactor","createIOR","setIOR","diffuseTexture","getDiffuseTexture","setBaseColorTexture","getBaseColorTextureInfo","getDiffuseTextureInfo","sgTexture","sgTextureInfo","getSpecularGlossinessTextureInfo","specularTexture","createTexture","setSpecularTexture","setSpecularColorTexture","getSpecularTextureInfo","getSpecularColorTextureInfo","glossinessFactor","getGlossinessFactor","metalRoughTexture","roughness","setMetallicRoughnessTexture","getMetallicRoughnessTextureInfo","unweld","unweldPrimitive","unweldAttribute","TypedArray","NORMALS_DEFAULTS","normals","modified","faceNormal","computeNormal","n","normalize","PALETTE_DEFAULTS","blockSize","palette","_temp10","_temp8","_temp6","nextPaletteMaterialIndex","srcMaterial","materialKeyMap","blockIndex","materialIndices","baseUV","keyCount","padUV","w","padWidth","dstMaterial","paletteMaterials","skipProps","toString","padStart","setName","baseColorTexture","setMinFilter","MinFilter","NEAREST","setMagFilter","MagFilter","emissiveTexture","setEmissiveTexture","getEmissiveTextureInfo","metallicRoughnessTexture","paletteTexturePixels","metallicRoughness","image","_temp5","emissive","materialKeys","materialProps","baseColor","encodeRGBA","encodeFloat","metallic","call","arguments","setURI","ndarray","visitedKeys","nextIndex","convertLinearToSRGB","writeBlock","_temp7","_temp9","hex","PARTITION_DEFAULTS","partition","partitionMeshes","partitionAnimations","existingURIs","meshIndex","isArray","createBuffer","createBufferURI","primTarget","animIndex","SANITIZE_BASENAME_RE","basename","existing","EMPTY_ARRAY","RESAMPLE_DEFAULTS","resample","resampleDebug","tolerance","accessorsVisited","srcAccessorCount","samplerTargetPaths","getSampler","samplerInterpolation","getInterpolation","tmpTimes","toFloat32Array","tmpValues","dstCount","srcTimes","srcValues","dstTimes","fromFloat32Array","dstValues","setInput","setOutput","used","dstAccessorCount","SEQUENCE_DEFAULTS","fps","sequence","sequenceNodes","createAnimation","animBuffer","inputArray","outputArray","Type","VEC3","createAnimationSampler","setInterpolation","AnimationSampler","Interpolation","STEP","createAnimationChannel","setTargetPath","setSampler","addSampler","addChannel","SIMPLIFY_DEFAULTS","ratio","error","lockBorder","simplify","simplifier","numUnsupported","simplifyPrimitive","simplifyPoints","_simplifyPoints","srcIndexCount","positionArray","targetCount","flags","color","colorArray","colorStride","useExperimentalFeatures","compactMesh","SPARSE_DEFAULTS","sparse","modifiedCount","nonZeroCount","_encodeWithNdarrayPixels","srcMimeType","dstMimeType","srcPixels","resize","dstSize","dstPixels","resizeFilter","TextureResizeFilter","LANCZOS3","lanczos3","lanczos2","_encodeWithSharp","_srcMimeType","encoderOptions","dstFormat","getFormatFromMimeType","quality","effort","lossless","nearLossless","limitInputPixels","toFormat","srcSize","fit","kernel","_toView","toBuffer","_instance$toBuffer","compressTexture","TEXTURE_COMPRESS_DEFAULTS","srcURI","srcFormat","getFormat","targetFormat","srcByteLength","dstByteLength","srcExtension","FileUtils","extension","mimeTypeToExtension","dstExtension","dstURI","RegExp","TEXTURE_COMPRESS_SUPPORTED_FORMATS","SUPPORTED_MIME_TYPES","formats","textureCompress","patternRe","formatsRe","slotsRe","textureIndex","textureLabel","flag","webpExtension","EXTTextureWebP","avifExtension","EXTTextureAVIF","split","srcMax","dstMax","TANGENTS_DEFAULTS","tangents","generateTangents","attributeIDs","tangentCache","meshName","filterPrimitive","texcoordSemantic","getNormalTexcoord","texcoord","positionID","uuid","normalID","texcoordID","prevTangent","attributeHash","tangentBuffer","tangentArray","normalTextureInfo","getNormalTextureInfo","uninstance","instanceAttributes","srcNode","instanceNode","createInstanceNodes","instanceAttribute","every","instanceCount","instanceCountDigits","String","batchName","instanceNodes","paddedIndex","setRotation","setScale","_setInstanceExtras","setExtras","unlit","unlitExtension","KHRMaterialsUnlit","createUnlit","unpartition","vertexColorSpace","inputColorSpace","toLowerCase","converted","sRGBToLinear","updatePrimitive"],"mappings":"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GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACtD,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACtD,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACtD,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACtD,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACtD,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC;AACtD,EAAE,OAAO,GAAG,CAAC;AACb,CAAC;AA4CD;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,CAAC,EAAE;AAC/B,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACjB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAClB,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACjB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACjB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACjB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAClB,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC,EAAE,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClC;AACA,EAAE,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/E,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,UAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE;AACpC,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACjB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAClB,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACjB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACjB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACjB,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAClB;AACA,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChB,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACrD,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACrD,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACb,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACb,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACrD,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC;AACtD,EAAE,GAAG,CAAC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"}