{"version":3,"file":"index.cjs","sources":["../src/constants.ts","../src/ext-mesh-gpu-instancing/instanced-mesh.ts","../src/ext-mesh-gpu-instancing/mesh-gpu-instancing.ts","../src/ext-meshopt-compression/constants.ts","../src/ext-meshopt-compression/decoder.ts","../src/ext-meshopt-compression/encoder.ts","../src/ext-meshopt-compression/meshopt-compression.ts","../src/ext-texture-avif/texture-avif.ts","../src/ext-texture-webp/texture-webp.ts","../src/khr-draco-mesh-compression/decoder.ts","../src/khr-draco-mesh-compression/encoder.ts","../src/khr-draco-mesh-compression/draco-mesh-compression.ts","../src/khr-lights-punctual/light.ts","../src/khr-lights-punctual/lights-punctual.ts","../src/khr-materials-anisotropy/anisotropy.ts","../src/khr-materials-anisotropy/materials-anisotropy.ts","../src/khr-materials-clearcoat/clearcoat.ts","../src/khr-materials-clearcoat/materials-clearcoat.ts","../src/khr-materials-diffuse-transmission/diffuse-transmission.ts","../src/khr-materials-diffuse-transmission/materials-diffuse-transmission.ts","../src/khr-materials-dispersion/dispersion.ts","../src/khr-materials-dispersion/materials-dispersion.ts","../src/khr-materials-emissive-strength/emissive-strength.ts","../src/khr-materials-emissive-strength/materials-emissive-strength.ts","../src/khr-materials-ior/ior.ts","../src/khr-materials-ior/materials-ior.ts","../src/khr-materials-iridescence/iridescence.ts","../src/khr-materials-iridescence/materials-iridescence.ts","../src/khr-materials-pbr-specular-glossiness/pbr-specular-glossiness.ts","../src/khr-materials-pbr-specular-glossiness/materials-pbr-specular-glossiness.ts","../src/khr-materials-sheen/sheen.ts","../src/khr-materials-sheen/materials-sheen.ts","../src/khr-materials-specular/specular.ts","../src/khr-materials-specular/materials-specular.ts","../src/khr-materials-transmission/transmission.ts","../src/khr-materials-transmission/materials-transmission.ts","../src/khr-materials-unlit/unlit.ts","../src/khr-materials-unlit/materials-unlit.ts","../src/khr-materials-variants/mapping.ts","../src/khr-materials-variants/mapping-list.ts","../src/khr-materials-variants/variant.ts","../src/khr-materials-variants/materials-variants.ts","../src/khr-materials-volume/volume.ts","../src/khr-materials-volume/materials-volume.ts","../src/khr-mesh-quantization/mesh-quantization.ts","../src/khr-node-visibility/visibility.ts","../src/khr-node-visibility/node-visibility.ts","../src/khr-texture-basisu/texture-basisu.ts","../src/khr-texture-transform/transform.ts","../src/khr-texture-transform/texture-transform.ts","../src/khr-xmp-json-ld/packet.ts","../src/khr-xmp-json-ld/xmp.ts","../src/index.ts"],"sourcesContent":["export const EXT_MESH_GPU_INSTANCING = 'EXT_mesh_gpu_instancing';\nexport const EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';\nexport const EXT_TEXTURE_WEBP = 'EXT_texture_webp';\nexport const EXT_TEXTURE_AVIF = 'EXT_texture_avif';\nexport const KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\nexport const KHR_LIGHTS_PUNCTUAL = 'KHR_lights_punctual';\nexport const KHR_MATERIALS_ANISOTROPY = 'KHR_materials_anisotropy';\nexport const KHR_MATERIALS_CLEARCOAT = 'KHR_materials_clearcoat';\nexport const KHR_MATERIALS_DIFFUSE_TRANSMISSION = 'KHR_materials_diffuse_transmission';\nexport const KHR_MATERIALS_DISPERSION = 'KHR_materials_dispersion';\nexport const KHR_MATERIALS_EMISSIVE_STRENGTH = 'KHR_materials_emissive_strength';\nexport const KHR_MATERIALS_IOR = 'KHR_materials_ior';\nexport const KHR_MATERIALS_IRIDESCENCE = 'KHR_materials_iridescence';\nexport const KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS = 'KHR_materials_pbrSpecularGlossiness';\nexport const KHR_MATERIALS_SHEEN = 'KHR_materials_sheen';\nexport const KHR_MATERIALS_SPECULAR = 'KHR_materials_specular';\nexport const KHR_MATERIALS_TRANSMISSION = 'KHR_materials_transmission';\nexport const KHR_MATERIALS_UNLIT = 'KHR_materials_unlit';\nexport const KHR_MATERIALS_VOLUME = 'KHR_materials_volume';\nexport const KHR_MATERIALS_VARIANTS = 'KHR_materials_variants';\nexport const KHR_MESH_QUANTIZATION = 'KHR_mesh_quantization';\nexport const KHR_NODE_VISIBILITY = 'KHR_node_visibility';\nexport const KHR_TEXTURE_BASISU = 'KHR_texture_basisu';\nexport const KHR_TEXTURE_TRANSFORM = 'KHR_texture_transform';\nexport const KHR_XMP_JSON_LD = 'KHR_xmp_json_ld';\n","import {\n\ttype Accessor,\n\tExtensionProperty,\n\ttype IProperty,\n\ttype Nullable,\n\tPropertyType,\n\tRefMap,\n} from '@gltf-transform/core';\nimport { EXT_MESH_GPU_INSTANCING } from '../constants.js';\n\ninterface IInstancedMesh extends IProperty {\n\tattributes: RefMap<Accessor>;\n}\n\n// See BufferViewUsage in `writer-context.ts`.\nexport const INSTANCE_ATTRIBUTE = 'INSTANCE_ATTRIBUTE';\n\n/**\n * Defines GPU instances of a {@link Mesh} under one {@link Node}. See {@link EXTMeshGPUInstancing}.\n */\nexport class InstancedMesh extends ExtensionProperty<IInstancedMesh> {\n\tpublic static EXTENSION_NAME: typeof EXT_MESH_GPU_INSTANCING = EXT_MESH_GPU_INSTANCING;\n\tpublic declare extensionName: typeof EXT_MESH_GPU_INSTANCING;\n\tpublic declare propertyType: 'InstancedMesh';\n\tpublic declare parentTypes: [PropertyType.NODE];\n\n\tprotected init(): void {\n\t\tthis.extensionName = EXT_MESH_GPU_INSTANCING;\n\t\tthis.propertyType = 'InstancedMesh';\n\t\tthis.parentTypes = [PropertyType.NODE];\n\t}\n\n\tprotected getDefaults(): Nullable<IInstancedMesh> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, { attributes: new RefMap<Accessor>() });\n\t}\n\n\t/** Returns an instance attribute as an {@link Accessor}. */\n\tpublic getAttribute(semantic: string): Accessor | null {\n\t\treturn this.getRefMap('attributes', semantic);\n\t}\n\n\t/**\n\t * Sets an instance attribute to an {@link Accessor}. All attributes must have the same\n\t * instance count.\n\t */\n\tpublic setAttribute(semantic: string, accessor: Accessor | null): this {\n\t\treturn this.setRefMap('attributes', semantic, accessor, { usage: INSTANCE_ATTRIBUTE });\n\t}\n\n\t/**\n\t * Lists all instance attributes {@link Accessor}s associated with the InstancedMesh. Order\n\t * will be consistent with the order returned by {@link .listSemantics}().\n\t */\n\tpublic listAttributes(): Accessor[] {\n\t\treturn this.listRefMapValues('attributes');\n\t}\n\n\t/**\n\t * Lists all instance attribute semantics associated with the primitive. Order will be\n\t * consistent with the order returned by {@link .listAttributes}().\n\t */\n\tpublic listSemantics(): string[] {\n\t\treturn this.listRefMapKeys('attributes');\n\t}\n}\n","import { Extension, PropertyType, type ReaderContext, type WriterContext } from '@gltf-transform/core';\nimport { EXT_MESH_GPU_INSTANCING } from '../constants.js';\nimport { INSTANCE_ATTRIBUTE, InstancedMesh } from './instanced-mesh.js';\n\ninterface InstancedMeshDef {\n\tattributes: {\n\t\t[name: string]: number;\n\t};\n}\n\n/**\n * [`EXT_mesh_gpu_instancing`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing/)\n * prepares mesh data for efficient GPU instancing.\n *\n * GPU instancing allows engines to render many copies of a single mesh at once using a small number\n * of draw calls. Instancing is particularly useful for things like trees, grass, road signs, etc.\n * Keep in mind that predefined batches, as used in this extension, may prevent frustum culling\n * within a batch. Dividing batches into collocated cells may be preferable to using a single large\n * batch.\n *\n * > _**NOTICE:** While this extension stores mesh data optimized for GPU instancing, it\n * > is important to note that (1) GPU instancing and other optimizations are possible — and\n * > encouraged — even without this extension, and (2) other common meanings of the term\n * > \"instancing\" exist, distinct from this extension. See\n * > [Appendix: Motivation and Purpose](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing#appendix-motivation-and-purpose)\n * > of the `EXT_mesh_gpu_instancing` specification._\n *\n * Properties:\n * - {@link InstancedMesh}\n *\n * ### Example\n *\n * The `EXTMeshGPUInstancing` class provides a single {@link ExtensionProperty} type, `InstancedMesh`,\n * which may be attached to any {@link Node} instance. For example:\n *\n * ```typescript\n * import { EXTMeshGPUInstancing } from '@gltf-transform/extensions';\n *\n * // Create standard mesh, node, and scene hierarchy.\n * // ...\n *\n * // Assign positions for each instance.\n * const batchPositions = doc.createAccessor('instance_positions')\n * \t.setArray(new Float32Array([\n * \t\t0, 0, 0,\n * \t\t1, 0, 0,\n * \t\t2, 0, 0,\n * \t]))\n * \t.setType(Accessor.Type.VEC3)\n * \t.setBuffer(buffer);\n *\n * // Assign IDs for each instance.\n * const batchIDs = doc.createAccessor('instance_ids')\n * \t.setArray(new Uint8Array([0, 1, 2]))\n * \t.setType(Accessor.Type.SCALAR)\n * \t.setBuffer(buffer);\n *\n * // Create an Extension attached to the Document.\n * const batchExtension = document.createExtension(EXTMeshGPUInstancing)\n * \t.setRequired(true);\n * const batch = batchExtension.createInstancedMesh()\n * \t.setAttribute('TRANSLATION', batchPositions)\n * \t.setAttribute('_ID', batchIDs);\n *\n * node\n * \t.setMesh(mesh)\n * \t.setExtension('EXT_mesh_gpu_instancing', batch);\n * ```\n *\n * Standard instance attributes are `TRANSLATION`, `ROTATION`, and `SCALE`, and support the accessor\n * types allowed by the extension specification. Custom instance attributes are allowed, and should\n * be prefixed with an underscore (`_*`).\n */\nexport class EXTMeshGPUInstancing extends Extension {\n\tpublic readonly extensionName: typeof EXT_MESH_GPU_INSTANCING = EXT_MESH_GPU_INSTANCING;\n\t/** @hidden */\n\tpublic readonly provideTypes: PropertyType[] = [PropertyType.NODE];\n\t/** @hidden */\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.ACCESSOR];\n\tpublic static readonly EXTENSION_NAME: typeof EXT_MESH_GPU_INSTANCING = EXT_MESH_GPU_INSTANCING;\n\n\t/** Creates a new InstancedMesh property for use on a {@link Node}. */\n\tpublic createInstancedMesh(): InstancedMesh {\n\t\treturn new InstancedMesh(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tconst nodeDefs = jsonDoc.json.nodes || [];\n\t\tnodeDefs.forEach((nodeDef, nodeIndex) => {\n\t\t\tif (!nodeDef.extensions || !nodeDef.extensions[EXT_MESH_GPU_INSTANCING]) return;\n\n\t\t\tconst instancedMeshDef = nodeDef.extensions[EXT_MESH_GPU_INSTANCING] as InstancedMeshDef;\n\t\t\tconst instancedMesh = this.createInstancedMesh();\n\n\t\t\tfor (const semantic in instancedMeshDef.attributes) {\n\t\t\t\tinstancedMesh.setAttribute(semantic, context.accessors[instancedMeshDef.attributes[semantic]]);\n\t\t\t}\n\n\t\t\tcontext.nodes[nodeIndex].setExtension(EXT_MESH_GPU_INSTANCING, instancedMesh);\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\t// Set usage for instance attribute accessors, so they are stored in separate buffer\n\t\t// views grouped by parent reference.\n\t\tcontext.accessorUsageGroupedByParent.add(INSTANCE_ATTRIBUTE);\n\t\tfor (const prop of this.properties) {\n\t\t\tfor (const attribute of (prop as InstancedMesh).listAttributes()) {\n\t\t\t\tcontext.addAccessorToUsageGroup(attribute, INSTANCE_ATTRIBUTE);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listNodes()\n\t\t\t.forEach((node) => {\n\t\t\t\tconst instancedMesh = node.getExtension<InstancedMesh>(EXT_MESH_GPU_INSTANCING);\n\t\t\t\tif (instancedMesh) {\n\t\t\t\t\tconst nodeIndex = context.nodeIndexMap.get(node)!;\n\t\t\t\t\tconst nodeDef = jsonDoc.json.nodes![nodeIndex];\n\n\t\t\t\t\tconst instancedMeshDef = { attributes: {} } as InstancedMeshDef;\n\n\t\t\t\t\tinstancedMesh.listSemantics().forEach((semantic) => {\n\t\t\t\t\t\tconst attribute = instancedMesh.getAttribute(semantic)!;\n\t\t\t\t\t\tinstancedMeshDef.attributes[semantic] = context.accessorIndexMap.get(attribute)!;\n\t\t\t\t\t});\n\n\t\t\t\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\t\t\t\tnodeDef.extensions[EXT_MESH_GPU_INSTANCING] = instancedMeshDef;\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import type { GLTF, TypedArray } from '@gltf-transform/core';\n\nexport enum EncoderMethod {\n\tQUANTIZE = 'quantize',\n\tFILTER = 'filter',\n}\n\nexport interface MeshoptBufferExtension {\n\tfallback?: boolean;\n}\n\nexport enum MeshoptMode {\n\tATTRIBUTES = 'ATTRIBUTES',\n\tTRIANGLES = 'TRIANGLES',\n\tINDICES = 'INDICES',\n}\n\nexport enum MeshoptFilter {\n\t/** No filter — quantize only. */\n\tNONE = 'NONE',\n\t/** Four 8- or 16-bit normalized values. */\n\tOCTAHEDRAL = 'OCTAHEDRAL',\n\t/** Four 16-bit normalized values. */\n\tQUATERNION = 'QUATERNION',\n\t/** K single-precision floating point values. */\n\tEXPONENTIAL = 'EXPONENTIAL',\n}\n\nexport interface MeshoptBufferViewExtension {\n\tbuffer: number;\n\tbyteOffset: number;\n\tbyteLength: number;\n\tbyteStride: number;\n\tcount: number;\n\tmode: MeshoptMode;\n\tfilter?: MeshoptFilter;\n}\n\n/**\n * When using filters, the accessor definition written to the file will not necessarily have the\n * same properties as the input accessor. For example, octahedral encoding requires int8 or int16\n * output, so float32 input must be ignored.\n */\nexport interface PreparedAccessor {\n\tarray: TypedArray;\n\tbyteStride: number;\n\tnormalized: boolean;\n\tcomponentType: GLTF.AccessorComponentType;\n\tmin?: number[];\n\tmax?: number[];\n}\n","import type { GLTF } from '@gltf-transform/core';\nimport { EXT_MESHOPT_COMPRESSION } from '../constants.js';\nimport type { MeshoptBufferExtension } from './constants.js';\n\n/**\n * Returns true for a fallback buffer, else false.\n *\n *   - All references to the fallback buffer must come from bufferViews that\n *     have a EXT_meshopt_compression extension specified.\n *   - No references to the fallback buffer may come from\n *     EXT_meshopt_compression extension JSON.\n */\nexport function isFallbackBuffer(bufferDef: GLTF.IBuffer): boolean {\n\tif (!bufferDef.extensions || !bufferDef.extensions[EXT_MESHOPT_COMPRESSION]) return false;\n\tconst fallbackDef = bufferDef.extensions[EXT_MESHOPT_COMPRESSION] as MeshoptBufferExtension;\n\treturn !!fallbackDef.fallback;\n}\n","import {\n\tAccessor,\n\tAnimationChannel,\n\tAnimationSampler,\n\tBufferUtils,\n\ttype Document,\n\ttype GLTF,\n\tMathUtils,\n\tPrimitive,\n\tPropertyType,\n\tRoot,\n\ttype TypedArray,\n\ttype TypedArrayConstructor,\n\tWriterContext,\n} from '@gltf-transform/core';\nimport type { MeshoptEncoder } from 'meshoptimizer';\nimport { MeshoptFilter, MeshoptMode, type PreparedAccessor } from './constants.js';\n\nconst { BYTE, SHORT, FLOAT } = Accessor.ComponentType;\nconst { encodeNormalizedInt, decodeNormalizedInt } = MathUtils;\n\n/** Pre-processes array with required filters or padding. */\nexport function prepareAccessor(\n\taccessor: Accessor,\n\tencoder: typeof MeshoptEncoder,\n\tmode: MeshoptMode,\n\tfilterOptions: { filter: MeshoptFilter; bits?: number },\n): PreparedAccessor {\n\tconst { filter, bits } = filterOptions as { filter: MeshoptFilter; bits: number };\n\tconst result: PreparedAccessor = {\n\t\tarray: accessor.getArray()!,\n\t\tbyteStride: accessor.getElementSize() * accessor.getComponentSize(),\n\t\tcomponentType: accessor.getComponentType(),\n\t\tnormalized: accessor.getNormalized(),\n\t};\n\n\tif (mode !== MeshoptMode.ATTRIBUTES) return result;\n\n\tif (filter !== MeshoptFilter.NONE) {\n\t\tlet array = accessor.getNormalized() ? decodeNormalizedIntArray(accessor) : new Float32Array(result.array);\n\n\t\tswitch (filter) {\n\t\t\tcase MeshoptFilter.EXPONENTIAL: // → K single-precision floating point values.\n\t\t\t\tresult.byteStride = accessor.getElementSize() * 4;\n\t\t\t\tresult.componentType = FLOAT;\n\t\t\t\tresult.normalized = false;\n\t\t\t\tresult.array = encoder.encodeFilterExp(\n\t\t\t\t\tarray,\n\t\t\t\t\taccessor.getCount(),\n\t\t\t\t\tresult.byteStride,\n\t\t\t\t\tbits,\n\t\t\t\t) as Uint8Array<ArrayBuffer>;\n\t\t\t\tbreak;\n\n\t\t\tcase MeshoptFilter.OCTAHEDRAL: // → four 8- or 16-bit normalized values.\n\t\t\t\tresult.byteStride = bits > 8 ? 8 : 4;\n\t\t\t\tresult.componentType = bits > 8 ? SHORT : BYTE;\n\t\t\t\tresult.normalized = true;\n\t\t\t\tarray = accessor.getElementSize() === 3 ? padNormals(array) : array;\n\t\t\t\tresult.array = encoder.encodeFilterOct(\n\t\t\t\t\tarray,\n\t\t\t\t\taccessor.getCount(),\n\t\t\t\t\tresult.byteStride,\n\t\t\t\t\tbits,\n\t\t\t\t) as Uint8Array<ArrayBuffer>;\n\t\t\t\tbreak;\n\n\t\t\tcase MeshoptFilter.QUATERNION: // → four 16-bit normalized values.\n\t\t\t\tresult.byteStride = 8;\n\t\t\t\tresult.componentType = SHORT;\n\t\t\t\tresult.normalized = true;\n\t\t\t\tresult.array = encoder.encodeFilterQuat(\n\t\t\t\t\tarray,\n\t\t\t\t\taccessor.getCount(),\n\t\t\t\t\tresult.byteStride,\n\t\t\t\t\tbits,\n\t\t\t\t) as Uint8Array<ArrayBuffer>;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error('Invalid filter.');\n\t\t}\n\n\t\tresult.min = accessor.getMin([]);\n\t\tresult.max = accessor.getMax([]);\n\t\tif (accessor.getNormalized()) {\n\t\t\tresult.min = result.min.map((v) => decodeNormalizedInt(v, accessor.getComponentType()));\n\t\t\tresult.max = result.max.map((v) => decodeNormalizedInt(v, accessor.getComponentType()));\n\t\t}\n\t\tif (result.normalized) {\n\t\t\tresult.min = result.min.map((v) => encodeNormalizedInt(v, result.componentType));\n\t\t\tresult.max = result.max.map((v) => encodeNormalizedInt(v, result.componentType));\n\t\t}\n\t} else if (result.byteStride % 4) {\n\t\tresult.array = padArrayElements(result.array, accessor.getElementSize());\n\t\tresult.byteStride = result.array.byteLength / accessor.getCount();\n\t}\n\n\treturn result;\n}\n\nfunction decodeNormalizedIntArray(attribute: Accessor): Float32Array {\n\tconst componentType = attribute.getComponentType();\n\tconst srcArray = attribute.getArray()!;\n\tconst dstArray = new Float32Array(srcArray.length);\n\tfor (let i = 0; i < srcArray.length; i++) {\n\t\tdstArray[i] = decodeNormalizedInt(srcArray[i], componentType);\n\t}\n\treturn dstArray;\n}\n\n/** Pads array to 4 byte alignment, required for Meshopt ATTRIBUTE buffer views. */\nexport function padArrayElements<T extends TypedArray>(srcArray: T, elementSize: number): T {\n\tconst byteStride = BufferUtils.padNumber(srcArray.BYTES_PER_ELEMENT * elementSize);\n\tconst elementStride = byteStride / srcArray.BYTES_PER_ELEMENT;\n\tconst elementCount = srcArray.length / elementSize;\n\n\tconst dstArray = new (srcArray.constructor as TypedArrayConstructor)(elementCount * elementStride) as T;\n\n\tfor (let i = 0; i * elementSize < srcArray.length; i++) {\n\t\tfor (let j = 0; j < elementSize; j++) {\n\t\t\tdstArray[i * elementStride + j] = srcArray[i * elementSize + j];\n\t\t}\n\t}\n\n\treturn dstArray;\n}\n\n/** Pad normals with a .w component for octahedral encoding. */\nfunction padNormals(srcArray: Float32Array): Float32Array {\n\tconst dstArray = new Float32Array((srcArray.length * 4) / 3);\n\tfor (let i = 0, il = srcArray.length / 3; i < il; i++) {\n\t\tdstArray[i * 4] = srcArray[i * 3];\n\t\tdstArray[i * 4 + 1] = srcArray[i * 3 + 1];\n\t\tdstArray[i * 4 + 2] = srcArray[i * 3 + 2];\n\t}\n\treturn dstArray;\n}\n\nexport function getMeshoptMode(accessor: Accessor, usage: string): MeshoptMode {\n\tif (usage === WriterContext.BufferViewUsage.ELEMENT_ARRAY_BUFFER) {\n\t\tconst isTriangles = accessor.listParents().some((parent) => {\n\t\t\treturn parent instanceof Primitive && parent.getMode() === Primitive.Mode.TRIANGLES;\n\t\t});\n\t\treturn isTriangles ? MeshoptMode.TRIANGLES : MeshoptMode.INDICES;\n\t}\n\n\treturn MeshoptMode.ATTRIBUTES;\n}\n\nexport function getMeshoptFilter(accessor: Accessor, doc: Document): { filter: MeshoptFilter; bits?: number } {\n\tconst refs = doc\n\t\t.getGraph()\n\t\t.listParentEdges(accessor)\n\t\t.filter((edge) => !(edge.getParent() instanceof Root));\n\n\tfor (const ref of refs) {\n\t\tconst refName = ref.getName();\n\t\tconst refKey = (ref.getAttributes().key || '') as string;\n\t\tconst isDelta = ref.getParent().propertyType === PropertyType.PRIMITIVE_TARGET;\n\n\t\t// Indices.\n\t\tif (refName === 'indices') return { filter: MeshoptFilter.NONE };\n\n\t\t// Attributes.\n\t\t//\n\t\t// NOTES:\n\t\t// - Vertex attributes should be filtered IFF they are _not_ quantized in\n\t\t//   'packages/cli/src/transforms/meshopt.ts'.\n\t\t// - POSITION and TEXCOORD_0 could use exponential filtering, but this produces broken\n\t\t//   output in some cases (e.g. Matilda.glb), for unknown reasons. gltfpack uses manual\n\t\t//   quantization for these attributes.\n\t\t// - NORMAL and TANGENT attributes use Octahedral filters, but deltas in morphs do not.\n\t\t// - When specifying bit depth for vertex attributes, check the defaults in `quantize.ts`\n\t\t//\t and overrides in `meshopt.ts`. Don't store deltas at higher precision than base.\n\t\tif (refName === 'attributes') {\n\t\t\tif (refKey === 'POSITION') return { filter: MeshoptFilter.NONE };\n\t\t\tif (refKey === 'TEXCOORD_0') return { filter: MeshoptFilter.NONE };\n\t\t\tif (refKey.startsWith('JOINTS_')) return { filter: MeshoptFilter.NONE };\n\t\t\tif (refKey.startsWith('WEIGHTS_')) return { filter: MeshoptFilter.NONE };\n\t\t\tif (refKey === 'NORMAL' || refKey === 'TANGENT') {\n\t\t\t\treturn isDelta ? { filter: MeshoptFilter.NONE } : { filter: MeshoptFilter.OCTAHEDRAL, bits: 8 };\n\t\t\t}\n\t\t}\n\n\t\t// Animation.\n\t\tif (refName === 'output') {\n\t\t\tconst targetPath = getTargetPath(accessor);\n\t\t\tif (targetPath === 'rotation') return { filter: MeshoptFilter.QUATERNION, bits: 16 };\n\t\t\tif (targetPath === 'translation') return { filter: MeshoptFilter.EXPONENTIAL, bits: 12 };\n\t\t\tif (targetPath === 'scale') return { filter: MeshoptFilter.EXPONENTIAL, bits: 12 };\n\t\t\treturn { filter: MeshoptFilter.NONE };\n\t\t}\n\n\t\t// See: https://github.com/donmccurdy/glTF-Transform/issues/489\n\t\tif (refName === 'input') return { filter: MeshoptFilter.NONE };\n\n\t\tif (refName === 'inverseBindMatrices') return { filter: MeshoptFilter.NONE };\n\t}\n\n\treturn { filter: MeshoptFilter.NONE };\n}\n\nexport function getTargetPath(accessor: Accessor): GLTF.AnimationChannelTargetPath | null {\n\tfor (const sampler of accessor.listParents()) {\n\t\tif (!(sampler instanceof AnimationSampler)) continue;\n\t\tfor (const channel of sampler.listParents()) {\n\t\t\tif (!(channel instanceof AnimationChannel)) continue;\n\t\t\treturn channel.getTargetPath();\n\t\t}\n\t}\n\treturn null;\n}\n","import {\n\tAccessor,\n\ttype Buffer,\n\tBufferUtils,\n\tExtension,\n\tGLB_BUFFER,\n\ttype GLTF,\n\ttype Property,\n\tPropertyType,\n\ttype ReaderContext,\n\tWriterContext,\n} from '@gltf-transform/core';\nimport type { MeshoptDecoder, MeshoptEncoder } from 'meshoptimizer';\nimport { EXT_MESHOPT_COMPRESSION } from '../constants.js';\nimport { EncoderMethod, type MeshoptBufferViewExtension, MeshoptFilter } from './constants.js';\nimport { isFallbackBuffer } from './decoder.js';\nimport { getMeshoptFilter, getMeshoptMode, getTargetPath, prepareAccessor } from './encoder.js';\n\ninterface EncoderOptions {\n\tmethod?: EncoderMethod;\n}\n\nconst DEFAULT_ENCODER_OPTIONS: Required<EncoderOptions> = {\n\tmethod: EncoderMethod.QUANTIZE,\n};\n\ntype MeshoptBufferView = { extensions: { [EXT_MESHOPT_COMPRESSION]: MeshoptBufferViewExtension } };\ntype EncodedBufferView = GLTF.IBufferView & MeshoptBufferView;\n\n/**\n * [`EXT_meshopt_compression`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Vendor/EXT_meshopt_compression/)\n * provides compression and fast decoding for geometry, morph targets, and animations.\n *\n * Meshopt compression (based on the [meshoptimizer](https://github.com/zeux/meshoptimizer)\n * library) offers a lightweight decoder with very fast runtime decompression, and is\n * appropriate for models of any size. Meshopt can reduce the transmission sizes of geometry,\n * morph targets, animation, and other numeric data stored in buffer views. When textures are\n * large, other complementary compression methods should be used as well.\n *\n * For the full benefits of meshopt compression, **apply gzip, brotli, or another lossless\n * compression method** to the resulting .glb, .gltf, or .bin files. Meshopt specifically\n * pre-optimizes assets for this purpose — without this secondary compression, the size\n * reduction is considerably less.\n *\n * Be aware that decompression happens before uploading to the GPU. While Meshopt decoding is\n * considerably faster than Draco decoding, neither compression method will improve runtime\n * performance directly. To improve framerate, you'll need to simplify the geometry by reducing\n * vertex count or draw calls — not just compress it. Finally, be aware that Meshopt compression is\n * lossy: repeatedly compressing and decompressing a model in a pipeline will lose precision, so\n * compression should generally be the last stage of an art workflow, and uncompressed original\n * files should be kept.\n *\n * The meshoptimizer library ([github](https://github.com/zeux/meshoptimizer/tree/master/js),\n * [npm](https://www.npmjs.com/package/meshoptimizer)) is a required dependency for reading or\n * writing files, and must be provided by the application. Compression may alternatively be applied\n * with the [gltfpack](https://github.com/zeux/meshoptimizer/tree/master/gltf) tool.\n *\n * ### Example — Read\n *\n * To read glTF files using Meshopt compression, ensure that the extension\n * and a decoder are registered. Geometry and other data are decompressed\n * while reading the file.\n *\n * ```typescript\n * import { NodeIO } from '@gltf-transform/core';\n * import { EXTMeshoptCompression } from '@gltf-transform/extensions';\n * import { MeshoptDecoder } from 'meshoptimizer';\n *\n * await MeshoptDecoder.ready;\n *\n * const io = new NodeIO()\n * \t.registerExtensions([EXTMeshoptCompression])\n * \t.registerDependencies({ 'meshopt.decoder': MeshoptDecoder });\n *\n * // Read and decode.\n * const document = await io.read('compressed.glb');\n * ```\n *\n * ### Example — Write\n *\n * The simplest way to apply Meshopt compression is with the {@link meshopt}\n * transform. The extension and an encoder must be registered.\n *\n * ```typescript\n * import { NodeIO } from '@gltf-transform/core';\n * import { EXTMeshoptCompression } from '@gltf-transform/extensions';\n * import { meshopt } from '@gltf-transform/functions';\n * import { MeshoptEncoder } from 'meshoptimizer';\n *\n * await MeshoptEncoder.ready;\n *\n * const io = new NodeIO()\n * \t.registerExtensions([EXTMeshoptCompression])\n * \t.registerDependencies({ 'meshopt.encoder': MeshoptEncoder });\n *\n * await document.transform(\n *   meshopt({encoder: MeshoptEncoder, level: 'medium'})\n * );\n *\n * await io.write('compressed-medium.glb', document);\n * ```\n *\n * ### Example — Advanced\n *\n * Internally, the {@link meshopt} transform reorders and quantizes vertex data\n * to preparate for compression. If you prefer different pre-processing, the\n * EXTMeshoptCompression extension can be added to the document manually:\n *\n * ```typescript\n * import { reorder, quantize } from '@gltf-transform/functions';\n * import { EXTMeshoptCompression } from '@gltf-transform/extensions';\n * import { MeshoptEncoder } from 'meshoptimizer';\n *\n * await document.transform(\n * \treorder({encoder: MeshoptEncoder}),\n * \tquantize()\n * );\n *\n * document.createExtension(EXTMeshoptCompression)\n * \t.setRequired(true)\n * \t.setEncoderOptions({ method: EXTMeshoptCompression.EncoderMethod.QUANTIZE });\n * ```\n *\n * In either case, compression is deferred until generating output with an I/O\n * class.\n */\nexport class EXTMeshoptCompression extends Extension {\n\tpublic readonly extensionName: typeof EXT_MESHOPT_COMPRESSION = EXT_MESHOPT_COMPRESSION;\n\t/** @hidden */\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.BUFFER, PropertyType.PRIMITIVE];\n\t/** @hidden */\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.BUFFER, PropertyType.ACCESSOR];\n\t/** @hidden */\n\tpublic readonly readDependencies: string[] = ['meshopt.decoder'];\n\t/** @hidden */\n\tpublic readonly writeDependencies: string[] = ['meshopt.encoder'];\n\n\tpublic static readonly EXTENSION_NAME: typeof EXT_MESHOPT_COMPRESSION = EXT_MESHOPT_COMPRESSION;\n\tpublic static readonly EncoderMethod: typeof EncoderMethod = EncoderMethod;\n\n\tprivate _decoder: typeof MeshoptDecoder | null = null;\n\tprivate _decoderFallbackBufferMap = new Map<Buffer, Buffer>();\n\tprivate _encoder: typeof MeshoptEncoder | null = null;\n\tprivate _encoderOptions: Required<EncoderOptions> = DEFAULT_ENCODER_OPTIONS;\n\tprivate _encoderFallbackBuffer: Buffer | null = null;\n\tprivate _encoderBufferViews: { [key: string]: EncodedBufferView } = {};\n\tprivate _encoderBufferViewData: { [key: string]: Uint8Array[] } = {};\n\tprivate _encoderBufferViewAccessors: { [key: string]: GLTF.IAccessor[] } = {};\n\n\t/** @hidden */\n\tpublic install(key: string, dependency: unknown): this {\n\t\tif (key === 'meshopt.decoder') {\n\t\t\tthis._decoder = dependency as typeof MeshoptDecoder;\n\t\t}\n\t\tif (key === 'meshopt.encoder') {\n\t\t\tthis._encoder = dependency as typeof MeshoptEncoder;\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Configures Meshopt options for quality/compression tuning. The two methods rely on different\n\t * pre-processing before compression, and should be compared on the basis of (a) quality/loss\n\t * and (b) final asset size after _also_ applying a lossless compression such as gzip or brotli.\n\t *\n\t * - QUANTIZE: Default. Pre-process with {@link quantize quantize()} (lossy to specified\n\t * \tprecision) before applying lossless Meshopt compression. Offers a considerable compression\n\t * \tratio with or without further supercompression. Equivalent to `gltfpack -c`.\n\t * - FILTER: Pre-process with lossy filters to improve compression, before applying lossless\n\t *\tMeshopt compression. While output may initially be larger than with the QUANTIZE method,\n\t *\tthis method will benefit more from supercompression (e.g. gzip or brotli). Equivalent to\n\t * \t`gltfpack -cc`.\n\t *\n\t * Output with the FILTER method will generally be smaller after supercompression (e.g. gzip or\n\t * brotli) is applied, but may be larger than QUANTIZE output without it. Decoding is very fast\n\t * with both methods.\n\t *\n\t * Example:\n\t *\n\t * ```ts\n\t * import { EXTMeshoptCompression } from '@gltf-transform/extensions';\n\t *\n\t * doc.createExtension(EXTMeshoptCompression)\n\t * \t.setRequired(true)\n\t * \t.setEncoderOptions({\n\t * \t\tmethod: EXTMeshoptCompression.EncoderMethod.QUANTIZE\n\t * \t});\n\t * ```\n\t */\n\tpublic setEncoderOptions(options: EncoderOptions): this {\n\t\tthis._encoderOptions = { ...DEFAULT_ENCODER_OPTIONS, ...options };\n\t\treturn this;\n\t}\n\n\t/**********************************************************************************************\n\t * Decoding.\n\t */\n\n\t/** @internal Checks preconditions, decodes buffer views, and creates decoded primitives. */\n\tpublic preread(context: ReaderContext, propertyType: PropertyType): this {\n\t\tif (!this._decoder) {\n\t\t\tif (!this.isRequired()) return this;\n\t\t\tthrow new Error(`[${EXT_MESHOPT_COMPRESSION}] Please install extension dependency, \"meshopt.decoder\".`);\n\t\t}\n\t\tif (!this._decoder.supported) {\n\t\t\tif (!this.isRequired()) return this;\n\t\t\tthrow new Error(`[${EXT_MESHOPT_COMPRESSION}]: Missing WASM support.`);\n\t\t}\n\n\t\tif (propertyType === PropertyType.BUFFER) {\n\t\t\tthis._prereadBuffers(context);\n\t\t} else if (propertyType === PropertyType.PRIMITIVE) {\n\t\t\tthis._prereadPrimitives(context);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/** @internal Decode buffer views. */\n\tprivate _prereadBuffers(context: ReaderContext): void {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tconst viewDefs = jsonDoc.json.bufferViews || [];\n\t\tviewDefs.forEach((viewDef, index) => {\n\t\t\tif (!viewDef.extensions || !viewDef.extensions[EXT_MESHOPT_COMPRESSION]) return;\n\n\t\t\tconst meshoptDef = viewDef.extensions[EXT_MESHOPT_COMPRESSION] as MeshoptBufferViewExtension;\n\t\t\tconst byteOffset = meshoptDef.byteOffset || 0;\n\t\t\tconst byteLength = meshoptDef.byteLength || 0;\n\t\t\tconst count = meshoptDef.count;\n\t\t\tconst stride = meshoptDef.byteStride;\n\t\t\tconst result = new Uint8Array(count * stride);\n\n\t\t\tconst bufferDef = jsonDoc.json.buffers![meshoptDef.buffer];\n\t\t\t// TODO(cleanup): Should be encapsulated in writer-context.ts.\n\t\t\tconst resource = bufferDef.uri ? jsonDoc.resources[bufferDef.uri] : jsonDoc.resources[GLB_BUFFER];\n\t\t\tconst source = BufferUtils.toView(resource, byteOffset, byteLength);\n\n\t\t\tthis._decoder!.decodeGltfBuffer(result, count, stride, source, meshoptDef.mode, meshoptDef.filter);\n\n\t\t\tcontext.bufferViews[index] = result;\n\t\t});\n\t}\n\n\t/**\n\t * Mark fallback buffers and replacements.\n\t *\n\t * Note: Alignment with primitives is arbitrary; this just needs to happen\n\t * after Buffers have been parsed.\n\t * @internal\n\t */\n\tprivate _prereadPrimitives(context: ReaderContext): void {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst viewDefs = jsonDoc.json.bufferViews || [];\n\n\t\t//\n\t\tviewDefs.forEach((viewDef) => {\n\t\t\tif (!viewDef.extensions || !viewDef.extensions[EXT_MESHOPT_COMPRESSION]) return;\n\n\t\t\tconst meshoptDef = viewDef.extensions[EXT_MESHOPT_COMPRESSION] as MeshoptBufferViewExtension;\n\n\t\t\tconst buffer = context.buffers[meshoptDef.buffer];\n\t\t\tconst fallbackBuffer = context.buffers[viewDef.buffer];\n\t\t\tconst fallbackBufferDef = jsonDoc.json.buffers![viewDef.buffer];\n\t\t\tif (isFallbackBuffer(fallbackBufferDef)) {\n\t\t\t\tthis._decoderFallbackBufferMap.set(fallbackBuffer, buffer);\n\t\t\t}\n\t\t});\n\t}\n\n\t/** @hidden Removes Fallback buffers, if extension is required. */\n\tpublic read(_context: ReaderContext): this {\n\t\tif (!this.isRequired()) return this;\n\n\t\t// Replace fallback buffers.\n\t\tfor (const [fallbackBuffer, buffer] of this._decoderFallbackBufferMap) {\n\t\t\tfor (const parent of fallbackBuffer.listParents()) {\n\t\t\t\tif (parent instanceof Accessor) {\n\t\t\t\t\tparent.swap(fallbackBuffer, buffer);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfallbackBuffer.dispose();\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**********************************************************************************************\n\t * Encoding.\n\t */\n\n\t/** @internal Claims accessors that can be compressed and writes compressed buffer views. */\n\tpublic prewrite(context: WriterContext, propertyType: PropertyType): this {\n\t\tif (propertyType === PropertyType.ACCESSOR) {\n\t\t\tthis._prewriteAccessors(context);\n\t\t} else if (propertyType === PropertyType.BUFFER) {\n\t\t\tthis._prewriteBuffers(context);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/** @internal Claims accessors that can be compressed. */\n\tprivate _prewriteAccessors(context: WriterContext): void {\n\t\tconst json = context.jsonDoc.json;\n\t\tconst encoder = this._encoder!;\n\t\tconst options = this._encoderOptions;\n\t\tconst graph = this.document.getGraph();\n\n\t\tconst fallbackBuffer = this.document.createBuffer(); // Disposed on write.\n\t\tconst fallbackBufferIndex = this.document.getRoot().listBuffers().indexOf(fallbackBuffer);\n\n\t\tlet nextID = 1;\n\t\tconst parentToID = new Map<Property, number>();\n\t\tconst getParentID = (property: Property): number => {\n\t\t\tfor (const parent of graph.listParents(property)) {\n\t\t\t\tif (parent.propertyType === PropertyType.ROOT) continue;\n\t\t\t\tlet id = parentToID.get(property);\n\t\t\t\tif (id === undefined) parentToID.set(property, (id = nextID++));\n\t\t\t\treturn id;\n\t\t\t}\n\t\t\treturn -1;\n\t\t};\n\n\t\tthis._encoderFallbackBuffer = fallbackBuffer;\n\t\tthis._encoderBufferViews = {};\n\t\tthis._encoderBufferViewData = {};\n\t\tthis._encoderBufferViewAccessors = {};\n\n\t\tfor (const accessor of this.document.getRoot().listAccessors()) {\n\t\t\t// See: https://github.com/donmccurdy/glTF-Transform/pull/323#issuecomment-898791251\n\t\t\t// Example: https://skfb.ly/6qAD8\n\t\t\tif (getTargetPath(accessor) === 'weights') continue;\n\n\t\t\t// See: https://github.com/donmccurdy/glTF-Transform/issues/289\n\t\t\tif (accessor.getSparse()) continue;\n\n\t\t\tconst usage = context.getAccessorUsage(accessor);\n\t\t\tconst parentID = context.accessorUsageGroupedByParent.has(usage) ? getParentID(accessor) : null;\n\t\t\tconst mode = getMeshoptMode(accessor, usage);\n\t\t\tconst filter =\n\t\t\t\toptions.method === EncoderMethod.FILTER\n\t\t\t\t\t? getMeshoptFilter(accessor, this.document)\n\t\t\t\t\t: { filter: MeshoptFilter.NONE };\n\t\t\tconst preparedAccessor = prepareAccessor(accessor, encoder, mode, filter);\n\t\t\tconst { array, byteStride } = preparedAccessor;\n\n\t\t\tconst buffer = accessor.getBuffer();\n\t\t\tif (!buffer) throw new Error(`${EXT_MESHOPT_COMPRESSION}: Missing buffer for accessor.`);\n\t\t\tconst bufferIndex = this.document.getRoot().listBuffers().indexOf(buffer);\n\n\t\t\t// Buffer view grouping key.\n\t\t\tconst key = [usage, parentID, mode, filter.filter, byteStride, bufferIndex].join(':');\n\n\t\t\tlet bufferView = this._encoderBufferViews[key];\n\t\t\tlet bufferViewData = this._encoderBufferViewData[key];\n\t\t\tlet bufferViewAccessors = this._encoderBufferViewAccessors[key];\n\n\t\t\t// Write new buffer view, if needed.\n\t\t\tif (!bufferView || !bufferViewData) {\n\t\t\t\tbufferViewAccessors = this._encoderBufferViewAccessors[key] = [];\n\t\t\t\tbufferViewData = this._encoderBufferViewData[key] = [];\n\t\t\t\tbufferView = this._encoderBufferViews[key] = {\n\t\t\t\t\tbuffer: fallbackBufferIndex,\n\t\t\t\t\ttarget: WriterContext.USAGE_TO_TARGET[usage],\n\t\t\t\t\tbyteOffset: 0,\n\t\t\t\t\tbyteLength: 0,\n\t\t\t\t\tbyteStride: usage === WriterContext.BufferViewUsage.ARRAY_BUFFER ? byteStride : undefined,\n\t\t\t\t\textensions: {\n\t\t\t\t\t\t[EXT_MESHOPT_COMPRESSION]: {\n\t\t\t\t\t\t\tbuffer: bufferIndex,\n\t\t\t\t\t\t\tbyteOffset: 0,\n\t\t\t\t\t\t\tbyteLength: 0,\n\t\t\t\t\t\t\tmode: mode,\n\t\t\t\t\t\t\tfilter: filter.filter !== MeshoptFilter.NONE ? filter.filter : undefined,\n\t\t\t\t\t\t\tbyteStride: byteStride,\n\t\t\t\t\t\t\tcount: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t// Write accessor.\n\t\t\tconst accessorDef = context.createAccessorDef(accessor);\n\t\t\taccessorDef.componentType = preparedAccessor.componentType;\n\t\t\taccessorDef.normalized = preparedAccessor.normalized;\n\t\t\taccessorDef.byteOffset = bufferView.byteLength;\n\t\t\tif (accessorDef.min && preparedAccessor.min) accessorDef.min = preparedAccessor.min;\n\t\t\tif (accessorDef.max && preparedAccessor.max) accessorDef.max = preparedAccessor.max;\n\t\t\tcontext.accessorIndexMap.set(accessor, json.accessors!.length);\n\t\t\tjson.accessors!.push(accessorDef);\n\t\t\tbufferViewAccessors.push(accessorDef);\n\n\t\t\t// Update buffer view.\n\t\t\tbufferViewData.push(new Uint8Array(array.buffer, array.byteOffset, array.byteLength));\n\t\t\tbufferView.byteLength += array.byteLength;\n\t\t\tbufferView.extensions.EXT_meshopt_compression.count += accessor.getCount();\n\t\t}\n\t}\n\n\t/** @internal Writes compressed buffer views. */\n\tprivate _prewriteBuffers(context: WriterContext): void {\n\t\tconst encoder = this._encoder!;\n\n\t\tfor (const key in this._encoderBufferViews) {\n\t\t\tconst bufferView = this._encoderBufferViews[key];\n\t\t\tconst bufferViewData = this._encoderBufferViewData[key];\n\t\t\tconst buffer = this.document.getRoot().listBuffers()[bufferView.extensions[EXT_MESHOPT_COMPRESSION].buffer];\n\t\t\tconst otherBufferViews = context.otherBufferViews.get(buffer) || [];\n\n\t\t\tconst { count, byteStride, mode } = bufferView.extensions[EXT_MESHOPT_COMPRESSION];\n\t\t\tconst srcArray = BufferUtils.concat(bufferViewData);\n\t\t\tconst dstArray = encoder.encodeGltfBuffer(srcArray, count, byteStride, mode);\n\t\t\tconst compressedData = BufferUtils.pad(dstArray);\n\n\t\t\tbufferView.extensions[EXT_MESHOPT_COMPRESSION].byteLength = dstArray.byteLength;\n\n\t\t\tbufferViewData.length = 0;\n\t\t\tbufferViewData.push(compressedData);\n\t\t\totherBufferViews.push(compressedData);\n\t\t\tcontext.otherBufferViews.set(buffer, otherBufferViews);\n\t\t}\n\t}\n\n\t/** @hidden Puts encoded data into glTF output. */\n\tpublic write(context: WriterContext): this {\n\t\tlet fallbackBufferByteOffset = 0;\n\n\t\t// Write final encoded buffer view properties.\n\t\tfor (const key in this._encoderBufferViews) {\n\t\t\tconst bufferView = this._encoderBufferViews[key];\n\t\t\tconst bufferViewData = this._encoderBufferViewData[key][0];\n\t\t\tconst bufferViewIndex = context.otherBufferViewsIndexMap.get(bufferViewData)!;\n\n\t\t\tconst bufferViewAccessors = this._encoderBufferViewAccessors[key];\n\t\t\tfor (const accessorDef of bufferViewAccessors) {\n\t\t\t\taccessorDef.bufferView = bufferViewIndex;\n\t\t\t}\n\n\t\t\tconst finalBufferViewDef = context.jsonDoc.json.bufferViews![bufferViewIndex];\n\t\t\tconst compressedByteOffset = finalBufferViewDef.byteOffset || 0;\n\n\t\t\tObject.assign(finalBufferViewDef, bufferView);\n\t\t\tfinalBufferViewDef.byteOffset = fallbackBufferByteOffset;\n\t\t\tconst bufferViewExtensionDef = finalBufferViewDef.extensions![\n\t\t\t\tEXT_MESHOPT_COMPRESSION\n\t\t\t] as MeshoptBufferViewExtension;\n\t\t\tbufferViewExtensionDef.byteOffset = compressedByteOffset;\n\n\t\t\tfallbackBufferByteOffset += BufferUtils.padNumber(bufferView.byteLength);\n\t\t}\n\n\t\t// Write final fallback buffer.\n\t\tconst fallbackBuffer = this._encoderFallbackBuffer!;\n\t\tconst fallbackBufferIndex = context.bufferIndexMap.get(fallbackBuffer)!;\n\t\tconst fallbackBufferDef = context.jsonDoc.json.buffers![fallbackBufferIndex];\n\t\tfallbackBufferDef.byteLength = fallbackBufferByteOffset;\n\t\tfallbackBufferDef.extensions = { [EXT_MESHOPT_COMPRESSION]: { fallback: true } };\n\t\tfallbackBuffer.dispose();\n\n\t\treturn this;\n\t}\n}\n","import {\n\tBufferUtils,\n\tExtension,\n\tImageUtils,\n\ttype ImageUtilsFormat,\n\tPropertyType,\n\ttype ReaderContext,\n\ttype vec2,\n\ttype WriterContext,\n} from '@gltf-transform/core';\nimport { EXT_TEXTURE_AVIF } from '../constants.js';\n\nclass AVIFImageUtils implements ImageUtilsFormat {\n\tmatch(array: Uint8Array): boolean {\n\t\treturn array.length >= 12 && BufferUtils.decodeText(array.slice(4, 12)) === 'ftypavif';\n\t}\n\t/**\n\t * Probes size of AVIF or HEIC image. Assumes a single static image, without\n\t * orientation or other metadata that would affect dimensions.\n\t */\n\tgetSize(array: Uint8Array): vec2 | null {\n\t\tif (!this.match(array)) return null;\n\n\t\t// References:\n\t\t// - https://stackoverflow.com/questions/66222773/how-to-get-image-dimensions-from-an-avif-file\n\t\t// - https://github.com/nodeca/probe-image-size/blob/master/lib/parse_sync/avif.js\n\n\t\tconst view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n\n\t\tlet box = unbox(view, 0);\n\t\tif (!box) return null;\n\n\t\tlet offset = box.end;\n\t\twhile ((box = unbox(view, offset))) {\n\t\t\tif (box.type === 'meta') {\n\t\t\t\toffset = box.start + 4; // version + flags\n\t\t\t} else if (box.type === 'iprp' || box.type === 'ipco') {\n\t\t\t\toffset = box.start;\n\t\t\t} else if (box.type === 'ispe') {\n\t\t\t\treturn [view.getUint32(box.start + 4), view.getUint32(box.start + 8)];\n\t\t\t} else if (box.type === 'mdat') {\n\t\t\t\tbreak; // mdat should be last, unlikely to find metadata past here.\n\t\t\t} else {\n\t\t\t\toffset = box.end;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\tgetChannels(_buffer: Uint8Array): number {\n\t\treturn 4;\n\t}\n}\n\n/**\n * [`EXT_texture_avif`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif/)\n * enables AVIF images for any material texture.\n *\n * AVIF offers greatly reduced transmission size, but\n * [requires browser support](https://caniuse.com/avif). Like PNG and JPEG, an AVIF image is\n * *fully decompressed* when uploaded to the GPU, which increases upload time and GPU memory cost.\n * For seamless uploads and minimal GPU memory cost, it is necessary to use a GPU texture format\n * like Basis Universal, with the `KHR_texture_basisu` extension.\n *\n * Defining no {@link ExtensionProperty} types, this {@link Extension} is simply attached to the\n * {@link Document}, and affects the entire Document by allowing use of the `image/avif` MIME type\n * and passing AVIF image data to the {@link Texture.setImage} method. Without the Extension, the\n * same MIME types and image data would yield an invalid glTF document, under the stricter core glTF\n * specification.\n *\n * Properties:\n * - N/A\n *\n * ### Example\n *\n * ```typescript\n * import { TextureAVIF } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const avifExtension = document.createExtension(TextureAVIF)\n * \t.setRequired(true);\n * document.createTexture('MyAVIFTexture')\n * \t.setMimeType('image/avif')\n * \t.setImage(fs.readFileSync('my-texture.avif'));\n * ```\n *\n * AVIF conversion is not done automatically when adding the extension as shown above — you must\n * convert the image data first, then pass the `.avif` payload to {@link Texture.setImage}.\n *\n * When the `EXT_texture_avif` extension is added to a file by glTF-Transform, the extension should\n * always be required. This tool does not support writing assets that \"fall back\" to optional PNG or\n * JPEG image data.\n */\nexport class EXTTextureAVIF extends Extension {\n\tpublic readonly extensionName: typeof EXT_TEXTURE_AVIF = EXT_TEXTURE_AVIF;\n\t/** @hidden */\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.TEXTURE];\n\tpublic static readonly EXTENSION_NAME: typeof EXT_TEXTURE_AVIF = EXT_TEXTURE_AVIF;\n\n\t/** @hidden */\n\tpublic static register(): void {\n\t\tImageUtils.registerFormat('image/avif', new AVIFImageUtils());\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst textureDefs = context.jsonDoc.json.textures || [];\n\t\ttextureDefs.forEach((textureDef) => {\n\t\t\tif (textureDef.extensions && textureDef.extensions[EXT_TEXTURE_AVIF]) {\n\t\t\t\ttextureDef.source = (textureDef.extensions[EXT_TEXTURE_AVIF] as { source: number }).source;\n\t\t\t}\n\t\t});\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listTextures()\n\t\t\t.forEach((texture) => {\n\t\t\t\tif (texture.getMimeType() === 'image/avif') {\n\t\t\t\t\tconst imageIndex = context.imageIndexMap.get(texture);\n\t\t\t\t\tconst textureDefs = jsonDoc.json.textures || [];\n\t\t\t\t\ttextureDefs.forEach((textureDef) => {\n\t\t\t\t\t\tif (textureDef.source === imageIndex) {\n\t\t\t\t\t\t\ttextureDef.extensions = textureDef.extensions || {};\n\t\t\t\t\t\t\ttextureDef.extensions[EXT_TEXTURE_AVIF] = { source: textureDef.source };\n\t\t\t\t\t\t\tdelete textureDef.source;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n\ninterface IBox {\n\ttype: string;\n\tstart: number;\n\tend: number;\n}\n\nfunction unbox(data: DataView, offset: number): IBox | null {\n\tif (data.byteLength < 4 + offset) return null;\n\n\t// size includes first 4 bytes (length)\n\tconst size = data.getUint32(offset);\n\tif (data.byteLength < size + offset || size < 8) return null;\n\n\treturn {\n\t\ttype: BufferUtils.decodeText(new Uint8Array(data.buffer, data.byteOffset + offset + 4, 4)),\n\t\tstart: offset + 8,\n\t\tend: offset + size,\n\t};\n}\n","import {\n\tBufferUtils,\n\tExtension,\n\tImageUtils,\n\ttype ImageUtilsFormat,\n\tPropertyType,\n\ttype ReaderContext,\n\ttype vec2,\n\ttype WriterContext,\n} from '@gltf-transform/core';\nimport { EXT_TEXTURE_WEBP } from '../constants.js';\n\nclass WEBPImageUtils implements ImageUtilsFormat {\n\tmatch(array: Uint8Array): boolean {\n\t\treturn array.length >= 12 && array[8] === 87 && array[9] === 69 && array[10] === 66 && array[11] === 80;\n\t}\n\tgetSize(array: Uint8Array): vec2 | null {\n\t\t// Reference: http://tools.ietf.org/html/rfc6386\n\t\tconst RIFF = BufferUtils.decodeText(array.slice(0, 4));\n\t\tconst WEBP = BufferUtils.decodeText(array.slice(8, 12));\n\t\tif (RIFF !== 'RIFF' || WEBP !== 'WEBP') return null;\n\n\t\tconst view = new DataView(array.buffer, array.byteOffset);\n\n\t\t// Reference: https://wiki.tcl-lang.org/page/Reading+WEBP+image+dimensions\n\t\tlet offset = 12;\n\t\twhile (offset < view.byteLength) {\n\t\t\tconst chunkId = BufferUtils.decodeText(\n\t\t\t\tnew Uint8Array([\n\t\t\t\t\tview.getUint8(offset),\n\t\t\t\t\tview.getUint8(offset + 1),\n\t\t\t\t\tview.getUint8(offset + 2),\n\t\t\t\t\tview.getUint8(offset + 3),\n\t\t\t\t]),\n\t\t\t);\n\t\t\tconst chunkByteLength = view.getUint32(offset + 4, true);\n\t\t\tif (chunkId === 'VP8 ') {\n\t\t\t\tconst width = view.getInt16(offset + 14, true) & 0x3fff;\n\t\t\t\tconst height = view.getInt16(offset + 16, true) & 0x3fff;\n\t\t\t\treturn [width, height];\n\t\t\t} else if (chunkId === 'VP8L') {\n\t\t\t\tconst b0 = view.getUint8(offset + 9);\n\t\t\t\tconst b1 = view.getUint8(offset + 10);\n\t\t\t\tconst b2 = view.getUint8(offset + 11);\n\t\t\t\tconst b3 = view.getUint8(offset + 12);\n\t\t\t\tconst width = 1 + (((b1 & 0x3f) << 8) | b0);\n\t\t\t\tconst height = 1 + (((b3 & 0xf) << 10) | (b2 << 2) | ((b1 & 0xc0) >> 6));\n\t\t\t\treturn [width, height];\n\t\t\t}\n\t\t\toffset += 8 + chunkByteLength + (chunkByteLength % 2);\n\t\t}\n\n\t\treturn null;\n\t}\n\tgetChannels(_buffer: Uint8Array): number {\n\t\treturn 4;\n\t}\n}\n\n/**\n * [`EXT_texture_webp`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp/)\n * enables WebP images for any material texture.\n *\n * WebP offers greatly reduced transmission size, but\n * [requires browser support](https://caniuse.com/webp). Like PNG and JPEG, a WebP image is\n * *fully decompressed* when uploaded to the GPU, which increases upload time and GPU memory cost.\n * For seamless uploads and minimal GPU memory cost, it is necessary to use a GPU texture format\n * like Basis Universal, with the `KHR_texture_basisu` extension.\n *\n * Defining no {@link ExtensionProperty} types, this {@link Extension} is simply attached to the\n * {@link Document}, and affects the entire Document by allowing use of the `image/webp` MIME type\n * and passing WebP image data to the {@link Texture.setImage} method. Without the Extension, the\n * same MIME types and image data would yield an invalid glTF document, under the stricter core glTF\n * specification.\n *\n * Properties:\n * - N/A\n *\n * ### Example\n *\n * ```typescript\n * import { EXTTextureWebP } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const webpExtension = document.createExtension(EXTTextureWebP)\n * \t.setRequired(true);\n * document.createTexture('MyWebPTexture')\n * \t.setMimeType('image/webp')\n * \t.setImage(fs.readFileSync('my-texture.webp'));\n * ```\n *\n * WebP conversion is not done automatically when adding the extension as shown above — you must\n * convert the image data first, then pass the `.webp` payload to {@link Texture.setImage}.\n *\n * When the `EXT_texture_webp` extension is added to a file by glTF-Transform, the extension should\n * always be required. This tool does not support writing assets that \"fall back\" to optional PNG or\n * JPEG image data.\n */\nexport class EXTTextureWebP extends Extension {\n\tpublic readonly extensionName: typeof EXT_TEXTURE_WEBP = EXT_TEXTURE_WEBP;\n\t/** @hidden */\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.TEXTURE];\n\tpublic static readonly EXTENSION_NAME: typeof EXT_TEXTURE_WEBP = EXT_TEXTURE_WEBP;\n\n\t/** @hidden */\n\tpublic static register(): void {\n\t\tImageUtils.registerFormat('image/webp', new WEBPImageUtils());\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst textureDefs = context.jsonDoc.json.textures || [];\n\t\ttextureDefs.forEach((textureDef) => {\n\t\t\tif (textureDef.extensions && textureDef.extensions[EXT_TEXTURE_WEBP]) {\n\t\t\t\ttextureDef.source = (textureDef.extensions[EXT_TEXTURE_WEBP] as { source: number }).source;\n\t\t\t}\n\t\t});\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listTextures()\n\t\t\t.forEach((texture) => {\n\t\t\t\tif (texture.getMimeType() === 'image/webp') {\n\t\t\t\t\tconst imageIndex = context.imageIndexMap.get(texture);\n\t\t\t\t\tconst textureDefs = jsonDoc.json.textures || [];\n\t\t\t\t\ttextureDefs.forEach((textureDef) => {\n\t\t\t\t\t\tif (textureDef.source === imageIndex) {\n\t\t\t\t\t\t\ttextureDef.extensions = textureDef.extensions || {};\n\t\t\t\t\t\t\ttextureDef.extensions[EXT_TEXTURE_WEBP] = { source: textureDef.source };\n\t\t\t\t\t\t\tdelete textureDef.source;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import { Accessor, type GLTF, type TypedArray, type TypedArrayConstructor } from '@gltf-transform/core';\nimport type { Attribute, DataType, Decoder, DecoderModule, Mesh } from 'draco3dgltf';\nimport { KHR_DRACO_MESH_COMPRESSION } from '../constants.js';\n\nexport let decoderModule: DecoderModule;\n\n// Initialized when decoder module loads.\nlet COMPONENT_ARRAY: { [key: number]: TypedArrayConstructor };\nlet DATA_TYPE: { [key: number]: DataType };\n\nexport function decodeGeometry(decoder: Decoder, data: Uint8Array): Mesh {\n\tconst buffer = new decoderModule.DecoderBuffer();\n\ttry {\n\t\tbuffer.Init(data as unknown as Int8Array, data.length);\n\n\t\tconst geometryType = decoder.GetEncodedGeometryType(buffer);\n\t\tif (geometryType !== decoderModule.TRIANGULAR_MESH) {\n\t\t\tthrow new Error(`[${KHR_DRACO_MESH_COMPRESSION}] Unknown geometry type.`);\n\t\t}\n\n\t\tconst dracoMesh = new decoderModule.Mesh();\n\t\tconst status = decoder.DecodeBufferToMesh(buffer, dracoMesh);\n\n\t\tif (!status.ok() || dracoMesh.ptr === 0) {\n\t\t\tthrow new Error(`[${KHR_DRACO_MESH_COMPRESSION}] Decoding failure.`);\n\t\t}\n\n\t\treturn dracoMesh;\n\t} finally {\n\t\tdecoderModule.destroy(buffer);\n\t}\n}\n\nexport function decodeIndex(decoder: Decoder, mesh: Mesh): Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer> {\n\tconst numFaces = mesh.num_faces();\n\tconst numIndices = numFaces * 3;\n\n\tlet ptr: number;\n\tlet indices: Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>;\n\n\tif (mesh.num_points() <= 65534) {\n\t\tconst byteLength = numIndices * Uint16Array.BYTES_PER_ELEMENT;\n\t\tptr = decoderModule._malloc(byteLength);\n\t\tdecoder.GetTrianglesUInt16Array(mesh, byteLength, ptr);\n\t\tindices = new Uint16Array(decoderModule.HEAPU16.buffer, ptr, numIndices).slice();\n\t} else {\n\t\tconst byteLength = numIndices * Uint32Array.BYTES_PER_ELEMENT;\n\t\tptr = decoderModule._malloc(byteLength);\n\t\tdecoder.GetTrianglesUInt32Array(mesh, byteLength, ptr);\n\t\tindices = new Uint32Array(decoderModule.HEAPU32.buffer, ptr, numIndices).slice();\n\t}\n\n\tdecoderModule._free(ptr);\n\n\treturn indices;\n}\n\nexport function decodeAttribute(\n\tdecoder: Decoder,\n\tmesh: Mesh,\n\tattribute: Attribute,\n\taccessorDef: GLTF.IAccessor,\n): TypedArray {\n\tconst dataType = DATA_TYPE[accessorDef.componentType];\n\tconst ArrayCtor = COMPONENT_ARRAY[accessorDef.componentType];\n\tconst numComponents = attribute.num_components();\n\tconst numPoints = mesh.num_points();\n\tconst numValues = numPoints * numComponents;\n\tconst byteLength: number = numValues * ArrayCtor.BYTES_PER_ELEMENT;\n\n\tconst ptr = decoderModule._malloc(byteLength);\n\tdecoder.GetAttributeDataArrayForAllPoints(mesh, attribute, dataType, byteLength, ptr);\n\tconst array: TypedArray = new ArrayCtor(decoderModule.HEAPF32.buffer as ArrayBuffer, ptr, numValues).slice();\n\tdecoderModule._free(ptr);\n\n\treturn array;\n}\n\nexport function initDecoderModule(_decoderModule: DecoderModule): void {\n\tdecoderModule = _decoderModule;\n\n\tCOMPONENT_ARRAY = {\n\t\t[Accessor.ComponentType.FLOAT]: Float32Array,\n\t\t[Accessor.ComponentType.UNSIGNED_INT]: Uint32Array,\n\t\t[Accessor.ComponentType.UNSIGNED_SHORT]: Uint16Array,\n\t\t[Accessor.ComponentType.UNSIGNED_BYTE]: Uint8Array,\n\t\t[Accessor.ComponentType.SHORT]: Int16Array,\n\t\t[Accessor.ComponentType.BYTE]: Int8Array,\n\t};\n\n\tDATA_TYPE = {\n\t\t[Accessor.ComponentType.FLOAT]: decoderModule.DT_FLOAT32,\n\t\t[Accessor.ComponentType.UNSIGNED_INT]: decoderModule.DT_UINT32,\n\t\t[Accessor.ComponentType.UNSIGNED_SHORT]: decoderModule.DT_UINT16,\n\t\t[Accessor.ComponentType.UNSIGNED_BYTE]: decoderModule.DT_UINT8,\n\t\t[Accessor.ComponentType.SHORT]: decoderModule.DT_INT16,\n\t\t[Accessor.ComponentType.BYTE]: decoderModule.DT_INT8,\n\t};\n}\n","import { Accessor, type bbox, type GLTF, type Primitive, type TypedArray } from '@gltf-transform/core';\nimport type { EncoderModule, Mesh, MeshBuilder } from 'draco3dgltf';\n\nexport let encoderModule: EncoderModule;\n\nexport enum EncoderMethod {\n\tEDGEBREAKER = 1,\n\tSEQUENTIAL = 0,\n}\n\nenum AttributeEnum {\n\tPOSITION = 'POSITION',\n\tNORMAL = 'NORMAL',\n\tCOLOR = 'COLOR',\n\tTEX_COORD = 'TEX_COORD',\n\tGENERIC = 'GENERIC',\n}\n\nconst DEFAULT_QUANTIZATION_BITS = {\n\t[AttributeEnum.POSITION]: 14,\n\t[AttributeEnum.NORMAL]: 10,\n\t[AttributeEnum.COLOR]: 8,\n\t[AttributeEnum.TEX_COORD]: 12,\n\t[AttributeEnum.GENERIC]: 12,\n};\n\nexport interface EncodedPrimitive {\n\tnumVertices: number;\n\tnumIndices: number;\n\tdata: Uint8Array;\n\tattributeIDs: { [key: string]: number };\n}\n\nexport interface EncoderOptions {\n\tdecodeSpeed?: number;\n\tencodeSpeed?: number;\n\tmethod?: EncoderMethod;\n\tquantizationBits?: { [key: string]: number };\n\tquantizationVolume?: 'mesh' | 'scene' | bbox;\n}\n\nconst DEFAULT_ENCODER_OPTIONS: EncoderOptions = {\n\tdecodeSpeed: 5,\n\tencodeSpeed: 5,\n\tmethod: EncoderMethod.EDGEBREAKER,\n\tquantizationBits: DEFAULT_QUANTIZATION_BITS,\n\tquantizationVolume: 'mesh',\n};\n\nexport function initEncoderModule(_encoderModule: EncoderModule): void {\n\tencoderModule = _encoderModule;\n}\n\n/**\n * References:\n * - https://github.com/mrdoob/three.js/blob/dev/examples/js/exporters/DRACOExporter.js\n * - https://github.com/CesiumGS/gltf-pipeline/blob/master/lib/compressDracoMeshes.js\n */\nexport function encodeGeometry(prim: Primitive, _options: EncoderOptions = DEFAULT_ENCODER_OPTIONS): EncodedPrimitive {\n\tconst options = { ...DEFAULT_ENCODER_OPTIONS, ..._options } as Required<EncoderOptions>;\n\toptions.quantizationBits = { ...DEFAULT_QUANTIZATION_BITS, ..._options.quantizationBits };\n\n\tconst builder = new encoderModule.MeshBuilder();\n\tconst mesh = new encoderModule.Mesh();\n\n\tconst encoder = new encoderModule.ExpertEncoder(mesh);\n\n\tconst attributeIDs: { [key: string]: number } = {};\n\tconst dracoBuffer = new encoderModule.DracoInt8Array();\n\n\tconst hasMorphTargets = prim.listTargets().length > 0;\n\tlet hasSparseAttributes = false;\n\n\tfor (const semantic of prim.listSemantics()) {\n\t\tconst attribute = prim.getAttribute(semantic)!;\n\n\t\tif (attribute.getSparse()) {\n\t\t\thasSparseAttributes = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst attributeEnum = getAttributeEnum(semantic);\n\t\tconst attributeID: number = addAttribute(\n\t\t\tbuilder,\n\t\t\tattribute.getComponentType(),\n\t\t\tmesh,\n\t\t\tencoderModule[attributeEnum],\n\t\t\tattribute.getCount(),\n\t\t\tattribute.getElementSize(),\n\t\t\tattribute.getArray()!,\n\t\t);\n\n\t\tif (attributeID === -1) throw new Error(`Error compressing \"${semantic}\" attribute.`);\n\n\t\tattributeIDs[semantic] = attributeID;\n\t\tif (options.quantizationVolume === 'mesh' || semantic !== 'POSITION') {\n\t\t\tencoder.SetAttributeQuantization(attributeID, options.quantizationBits[attributeEnum]);\n\t\t} else if (typeof options.quantizationVolume === 'object') {\n\t\t\tconst { quantizationVolume } = options;\n\t\t\tconst range = Math.max(\n\t\t\t\tquantizationVolume.max[0] - quantizationVolume.min[0],\n\t\t\t\tquantizationVolume.max[1] - quantizationVolume.min[1],\n\t\t\t\tquantizationVolume.max[2] - quantizationVolume.min[2],\n\t\t\t);\n\t\t\tencoder.SetAttributeExplicitQuantization(\n\t\t\t\tattributeID,\n\t\t\t\toptions.quantizationBits[attributeEnum],\n\t\t\t\tattribute.getElementSize(),\n\t\t\t\tquantizationVolume.min,\n\t\t\t\trange,\n\t\t\t);\n\t\t} else {\n\t\t\tthrow new Error('Invalid quantization volume state.');\n\t\t}\n\t}\n\n\tconst indices = prim.getIndices();\n\tif (!indices) throw new EncodingError('Primitive must have indices.');\n\n\tbuilder.AddFacesToMesh(mesh, indices.getCount() / 3, indices.getArray() as unknown as Uint32Array);\n\n\tencoder.SetSpeedOptions(options.encodeSpeed, options.decodeSpeed);\n\tencoder.SetTrackEncodedProperties(true);\n\n\t// TODO(cleanup): Use edgebreaker without deduplication if possible.\n\t// See https://github.com/google/draco/issues/929.\n\tif (options.method === EncoderMethod.SEQUENTIAL || hasMorphTargets || hasSparseAttributes) {\n\t\tencoder.SetEncodingMethod(encoderModule.MESH_SEQUENTIAL_ENCODING);\n\t} else {\n\t\tencoder.SetEncodingMethod(encoderModule.MESH_EDGEBREAKER_ENCODING);\n\t}\n\n\t// Encode, preserving vertex order for primitives with morph targets and sparse accessors.\n\tconst byteLength = encoder.EncodeToDracoBuffer(!(hasMorphTargets || hasSparseAttributes), dracoBuffer);\n\tif (byteLength <= 0) throw new EncodingError('Error applying Draco compression.');\n\n\tconst data = new Uint8Array(byteLength);\n\tfor (let i = 0; i < byteLength; ++i) {\n\t\tdata[i] = dracoBuffer.GetValue(i);\n\t}\n\n\tconst numVertices = encoder.GetNumberOfEncodedPoints();\n\tconst numIndices = encoder.GetNumberOfEncodedFaces() * 3;\n\n\tencoderModule.destroy(dracoBuffer);\n\tencoderModule.destroy(mesh);\n\tencoderModule.destroy(builder);\n\tencoderModule.destroy(encoder);\n\n\treturn { numVertices, numIndices, data, attributeIDs };\n}\n\nfunction getAttributeEnum(semantic: string): AttributeEnum {\n\tif (semantic === 'POSITION') {\n\t\treturn AttributeEnum.POSITION;\n\t} else if (semantic === 'NORMAL') {\n\t\treturn AttributeEnum.NORMAL;\n\t} else if (semantic.startsWith('COLOR_')) {\n\t\treturn AttributeEnum.COLOR;\n\t} else if (semantic.startsWith('TEXCOORD_')) {\n\t\treturn AttributeEnum.TEX_COORD;\n\t}\n\treturn AttributeEnum.GENERIC;\n}\n\nfunction addAttribute(\n\tbuilder: MeshBuilder,\n\tcomponentType: GLTF.AccessorComponentType,\n\tmesh: Mesh,\n\tattribute: number,\n\tcount: number,\n\titemSize: number,\n\tarray: TypedArray,\n): number {\n\tswitch (componentType) {\n\t\tcase Accessor.ComponentType.UNSIGNED_BYTE:\n\t\t\treturn builder.AddUInt8Attribute(mesh, attribute, count, itemSize, array);\n\t\tcase Accessor.ComponentType.BYTE:\n\t\t\treturn builder.AddInt8Attribute(mesh, attribute, count, itemSize, array);\n\t\tcase Accessor.ComponentType.UNSIGNED_SHORT:\n\t\t\treturn builder.AddUInt16Attribute(mesh, attribute, count, itemSize, array);\n\t\tcase Accessor.ComponentType.SHORT:\n\t\t\treturn builder.AddInt16Attribute(mesh, attribute, count, itemSize, array);\n\t\tcase Accessor.ComponentType.UNSIGNED_INT:\n\t\t\treturn builder.AddUInt32Attribute(mesh, attribute, count, itemSize, array);\n\t\tcase Accessor.ComponentType.FLOAT:\n\t\t\treturn builder.AddFloatAttribute(mesh, attribute, count, itemSize, array);\n\t\tdefault:\n\t\t\tthrow new Error(`Unexpected component type, \"${componentType}\".`);\n\t}\n}\n\nexport class EncodingError extends Error {}\n","import {\n\tAccessor,\n\tBufferUtils,\n\ttype bbox,\n\ttype Document,\n\tExtension,\n\tGLB_BUFFER,\n\tgetBounds,\n\tPrimitive,\n\tPropertyType,\n\ttype ReaderContext,\n\ttype WriterContext,\n} from '@gltf-transform/core';\nimport type { Decoder, DecoderModule, EncoderModule, Mesh } from 'draco3dgltf';\nimport { KHR_DRACO_MESH_COMPRESSION } from '../constants.js';\nimport { decodeAttribute, decodeGeometry, decodeIndex, initDecoderModule } from './decoder.js';\nimport {\n\ttype EncodedPrimitive,\n\tEncoderMethod,\n\ttype EncoderOptions,\n\tEncodingError,\n\tencodeGeometry,\n\tinitEncoderModule,\n} from './encoder.js';\n\ninterface DracoPrimitiveExtension {\n\tbufferView: number;\n\tattributes: {\n\t\t[name: string]: number;\n\t};\n}\n\ninterface DracoWriterContext {\n\tprimitiveHashMap: Map<Primitive, string>;\n\tprimitiveEncodingMap: Map<string, EncodedPrimitive>;\n}\n\n/**\n * [`KHR_draco_mesh_compression`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_draco_mesh_compression/)\n * provides advanced compression for mesh geometry.\n *\n * For models where geometry is a significant factor (>1 MB), Draco can reduce filesize by ~95%\n * in many cases. When animation or textures are large, other complementary compression methods\n * should be used as well. For geometry <1MB, the size of the WASM decoder library may outweigh\n * size savings.\n *\n * Be aware that decompression happens before uploading to the GPU — this will add some latency to\n * the parsing process, and means that compressing geometry with  Draco does _not_ affect runtime\n * performance. To improve framerate, you'll need to simplify the geometry by reducing vertex count\n * or draw calls — not just compress it. Finally, be aware that Draco compression is lossy:\n * repeatedly compressing and decompressing a model in a pipeline will lose precision, so\n * compression should generally be the last stage of an art workflow, and uncompressed original\n * files should be kept.\n *\n * A decoder or encoder from the `draco3dgltf` npm module for Node.js (or\n * [elsewhere for web](https://stackoverflow.com/a/66978236/1314762)) is required for reading and writing,\n * and must be provided by the application.\n *\n * ### Encoding options\n *\n * Two compression methods are available: 'edgebreaker' and 'sequential'. The\n * edgebreaker method will give higher compression in general, but changes the\n * order of the model's vertices. To preserve index order, use sequential\n * compression. When a mesh uses morph targets, or a high decoding speed is\n * selected, sequential compression will automatically be chosen.\n *\n * Both speed options affect the encoder's choice of algorithms. For example, a\n * requirement for fast decoding may prevent the encoder from using the best\n * compression methods even if the encoding speed is set to 0. In general, the\n * faster of the two options limits the choice of features that can be used by the\n * encoder. Setting --decodeSpeed to be faster than the --encodeSpeed may allow\n * the encoder to choose the optimal method out of the available features for the\n * given --decodeSpeed.\n *\n * ### Example — Read\n *\n * To read glTF files using Draco compression, ensure that the extension\n * and a decoder are registered. Geometry is decompressed while reading.\n *\n * ```typescript\n * import { NodeIO } from '@gltf-transform/core';\n * import { KHRDracoMeshCompression } from '@gltf-transform/extensions';\n * import draco3d from 'draco3dgltf';\n *\n * const io = new NodeIO()\n * \t.registerExtensions([KHRDracoMeshCompression])\n * \t.registerDependencies({\n * \t\t'draco3d.decoder': await draco3d.createDecoderModule()\n * \t});\n *\n * // Read and decode.\n * const document = await io.read('compressed.glb');\n * ```\n *\n * ### Example — Write\n *\n * The simplest way to apply Draco compression is with the {@link draco}\n * transform. The extension and an encoder must be registered.\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 * ### Example\n *\n * Equivalently, the KHRDracoMeshCompression extension can be added manually to a document.\n *\n * ```typescript\n * import { KHRDracoMeshCompression } from '@gltf-transform/extensions';\n *\n * document.createExtension(KHRDracoMeshCompression)\n * \t.setRequired(true)\n * \t.setEncoderOptions({\n * \t\tmethod: KHRDracoMeshCompression.EncoderMethod.EDGEBREAKER,\n * \t\tencodeSpeed: 5,\n * \t\tdecodeSpeed: 5,\n * \t});\n *\n * await io.write('compressed.glb', document);\n * ```\n *\n * In either case, Compression is deferred until generating output with an\n * I/O class.\n */\nexport class KHRDracoMeshCompression extends Extension {\n\tpublic readonly extensionName: typeof KHR_DRACO_MESH_COMPRESSION = KHR_DRACO_MESH_COMPRESSION;\n\t/** @hidden */\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.PRIMITIVE];\n\t/** @hidden */\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.ACCESSOR];\n\t/** @hidden */\n\tpublic readonly readDependencies: string[] = ['draco3d.decoder'];\n\t/** @hidden */\n\tpublic readonly writeDependencies: string[] = ['draco3d.encoder'];\n\n\tpublic static readonly EXTENSION_NAME: typeof KHR_DRACO_MESH_COMPRESSION = KHR_DRACO_MESH_COMPRESSION;\n\n\t/**\n\t * Compression method. `EncoderMethod.EDGEBREAKER` usually provides a higher compression ratio,\n\t * while `EncoderMethod.SEQUENTIAL` better preserves original vertex order.\n\t */\n\tpublic static readonly EncoderMethod: typeof EncoderMethod = EncoderMethod;\n\n\tprivate _decoderModule: DecoderModule | null = null;\n\tprivate _encoderModule: EncoderModule | null = null;\n\tprivate _encoderOptions: EncoderOptions = {};\n\n\t/** @hidden */\n\tpublic install(key: string, dependency: unknown): this {\n\t\tif (key === 'draco3d.decoder') {\n\t\t\tthis._decoderModule = dependency as DecoderModule;\n\t\t\tinitDecoderModule(this._decoderModule);\n\t\t}\n\t\tif (key === 'draco3d.encoder') {\n\t\t\tthis._encoderModule = dependency as EncoderModule;\n\t\t\tinitEncoderModule(this._encoderModule);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Sets Draco compression options. Compression does not take effect until the Document is\n\t * written with an I/O class.\n\t *\n\t * Defaults:\n\t * ```\n\t * decodeSpeed?: number = 5;\n\t * encodeSpeed?: number = 5;\n\t * method?: EncoderMethod = EncoderMethod.EDGEBREAKER;\n\t * quantizationBits?: {[ATTRIBUTE_NAME]: bits};\n\t * quantizationVolume?: 'mesh' | 'scene' | bbox = 'mesh';\n\t * ```\n\t */\n\tpublic setEncoderOptions(options: EncoderOptions): this {\n\t\tthis._encoderOptions = options;\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tif (!this._decoderModule) {\n\t\t\tthrow new Error(`[${KHR_DRACO_MESH_COMPRESSION}] Please install extension dependency, \"draco3d.decoder\".`);\n\t\t}\n\n\t\tconst logger = this.document.getLogger();\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst dracoMeshes: Map<number, [Decoder, Mesh]> = new Map();\n\n\t\ttry {\n\t\t\tconst meshDefs = jsonDoc.json.meshes || [];\n\t\t\tfor (const meshDef of meshDefs) {\n\t\t\t\tfor (const primDef of meshDef.primitives) {\n\t\t\t\t\tif (!primDef.extensions || !primDef.extensions[KHR_DRACO_MESH_COMPRESSION]) continue;\n\n\t\t\t\t\tconst dracoDef = primDef.extensions[KHR_DRACO_MESH_COMPRESSION] as DracoPrimitiveExtension;\n\t\t\t\t\tlet [decoder, dracoMesh] = dracoMeshes.get(dracoDef.bufferView) || [];\n\n\t\t\t\t\tif (!dracoMesh || !decoder) {\n\t\t\t\t\t\tconst bufferViewDef = jsonDoc.json.bufferViews![dracoDef.bufferView];\n\t\t\t\t\t\tconst bufferDef = jsonDoc.json.buffers![bufferViewDef.buffer];\n\t\t\t\t\t\t// TODO(cleanup): Should be encapsulated in writer-context.ts.\n\t\t\t\t\t\tconst resource = bufferDef.uri\n\t\t\t\t\t\t\t? jsonDoc.resources[bufferDef.uri]\n\t\t\t\t\t\t\t: jsonDoc.resources[GLB_BUFFER];\n\n\t\t\t\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\t\t\t\tconst byteLength = bufferViewDef.byteLength;\n\t\t\t\t\t\tconst compressedData = BufferUtils.toView(resource, byteOffset, byteLength);\n\n\t\t\t\t\t\tdecoder = new this._decoderModule.Decoder();\n\t\t\t\t\t\tdracoMesh = decodeGeometry(decoder, compressedData);\n\t\t\t\t\t\tdracoMeshes.set(dracoDef.bufferView, [decoder, dracoMesh]);\n\t\t\t\t\t\tlogger.debug(\n\t\t\t\t\t\t\t`[${KHR_DRACO_MESH_COMPRESSION}] Decompressed ${compressedData.byteLength} bytes.`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Attributes.\n\t\t\t\t\tfor (const semantic in dracoDef.attributes) {\n\t\t\t\t\t\tconst accessorDef = context.jsonDoc.json.accessors![primDef.attributes[semantic]];\n\t\t\t\t\t\tconst dracoAttribute = decoder.GetAttributeByUniqueId(dracoMesh, dracoDef.attributes[semantic]);\n\t\t\t\t\t\tconst attributeArray = decodeAttribute(decoder, dracoMesh, dracoAttribute, accessorDef);\n\t\t\t\t\t\tcontext.accessors[primDef.attributes[semantic]].setArray(attributeArray);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Indices. Optional, see https://github.com/google/draco/issues/720.\n\t\t\t\t\tif (primDef.indices !== undefined) {\n\t\t\t\t\t\tcontext.accessors[primDef.indices].setArray(decodeIndex(decoder, dracoMesh));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tfor (const [decoder, dracoMesh] of Array.from(dracoMeshes.values())) {\n\t\t\t\tthis._decoderModule.destroy(decoder);\n\t\t\t\tthis._decoderModule.destroy(dracoMesh);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext, _propertyType: PropertyType): this {\n\t\tif (!this._encoderModule) {\n\t\t\tthrow new Error(`[${KHR_DRACO_MESH_COMPRESSION}] Please install extension dependency, \"draco3d.encoder\".`);\n\t\t}\n\n\t\tconst logger = this.document.getLogger();\n\t\tlogger.debug(`[${KHR_DRACO_MESH_COMPRESSION}] Compression options: ${JSON.stringify(this._encoderOptions)}`);\n\n\t\tconst primitiveHashMap = listDracoPrimitives(this.document);\n\t\tconst primitiveEncodingMap = new Map<string, EncodedPrimitive>();\n\n\t\tlet quantizationVolume: bbox | 'mesh' = 'mesh';\n\t\tif (this._encoderOptions.quantizationVolume === 'scene') {\n\t\t\tif (this.document.getRoot().listScenes().length !== 1) {\n\t\t\t\tlogger.warn(`[${KHR_DRACO_MESH_COMPRESSION}]: quantizationVolume=scene requires exactly 1 scene.`);\n\t\t\t} else {\n\t\t\t\tquantizationVolume = getBounds(this.document.getRoot().listScenes().pop()!);\n\t\t\t}\n\t\t}\n\n\t\tfor (const prim of Array.from(primitiveHashMap.keys())) {\n\t\t\tconst primHash = primitiveHashMap.get(prim);\n\t\t\tif (!primHash) throw new Error('Unexpected primitive.');\n\n\t\t\t// Reuse an existing EncodedPrimitive, if possible.\n\t\t\tif (primitiveEncodingMap.has(primHash)) {\n\t\t\t\tprimitiveEncodingMap.set(primHash, primitiveEncodingMap.get(primHash)!);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst indices = prim.getIndices()!; // Condition for listDracoPrimitives().\n\t\t\tconst accessorDefs = context.jsonDoc.json.accessors!;\n\n\t\t\t// Create a new EncodedPrimitive.\n\t\t\tlet encodedPrim: EncodedPrimitive;\n\t\t\ttry {\n\t\t\t\tencodedPrim = encodeGeometry(prim, { ...this._encoderOptions, quantizationVolume });\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof EncodingError) {\n\t\t\t\t\tlogger.warn(`[${KHR_DRACO_MESH_COMPRESSION}]: ${e.message} Skipping primitive compression.`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t}\n\n\t\t\tprimitiveEncodingMap.set(primHash, encodedPrim);\n\n\t\t\t// Create indices definition, update count.\n\t\t\tconst indicesDef = context.createAccessorDef(indices);\n\t\t\tindicesDef.count = encodedPrim.numIndices;\n\t\t\tcontext.accessorIndexMap.set(indices, accessorDefs.length);\n\t\t\taccessorDefs.push(indicesDef);\n\n\t\t\t// In rare cases Draco increases vertex count, requiring a larger index component type.\n\t\t\t// https://github.com/donmccurdy/glTF-Transform/issues/1370\n\t\t\tif (encodedPrim.numVertices > 65534 && Accessor.getComponentSize(indicesDef.componentType) <= 2) {\n\t\t\t\tindicesDef.componentType = Accessor.ComponentType.UNSIGNED_INT;\n\t\t\t} else if (encodedPrim.numVertices > 254 && Accessor.getComponentSize(indicesDef.componentType) <= 1) {\n\t\t\t\tindicesDef.componentType = Accessor.ComponentType.UNSIGNED_SHORT;\n\t\t\t}\n\n\t\t\t// Create attribute definitions, update count.\n\t\t\tfor (const semantic of prim.listSemantics()) {\n\t\t\t\tconst attribute = prim.getAttribute(semantic)!;\n\t\t\t\tif (encodedPrim.attributeIDs[semantic] === undefined) continue; // sparse\n\n\t\t\t\tconst attributeDef = context.createAccessorDef(attribute);\n\t\t\t\tattributeDef.count = encodedPrim.numVertices;\n\t\t\t\tcontext.accessorIndexMap.set(attribute, accessorDefs.length);\n\t\t\t\taccessorDefs.push(attributeDef);\n\t\t\t}\n\n\t\t\t// Map compressed buffer view to a Buffer.\n\t\t\tconst buffer = prim.getAttribute('POSITION')!.getBuffer() || this.document.getRoot().listBuffers()[0];\n\t\t\tif (!context.otherBufferViews.has(buffer)) context.otherBufferViews.set(buffer, []);\n\t\t\tcontext.otherBufferViews.get(buffer)!.push(encodedPrim.data);\n\t\t}\n\n\t\tlogger.debug(`[${KHR_DRACO_MESH_COMPRESSION}] Compressed ${primitiveHashMap.size} primitives.`);\n\n\t\tcontext.extensionData[KHR_DRACO_MESH_COMPRESSION] = {\n\t\t\tprimitiveHashMap,\n\t\t\tprimitiveEncodingMap,\n\t\t} as DracoWriterContext;\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(context: WriterContext): this {\n\t\tconst dracoContext: DracoWriterContext = context.extensionData[\n\t\t\tKHR_DRACO_MESH_COMPRESSION\n\t\t] as DracoWriterContext;\n\n\t\tfor (const mesh of this.document.getRoot().listMeshes()) {\n\t\t\tconst meshDef = context.jsonDoc.json.meshes![context.meshIndexMap.get(mesh)!];\n\t\t\tfor (let i = 0; i < mesh.listPrimitives().length; i++) {\n\t\t\t\tconst prim = mesh.listPrimitives()[i];\n\t\t\t\tconst primDef = meshDef.primitives[i];\n\n\t\t\t\tconst primHash = dracoContext.primitiveHashMap.get(prim);\n\t\t\t\tif (!primHash) continue;\n\n\t\t\t\tconst encodedPrim = dracoContext.primitiveEncodingMap.get(primHash)!;\n\t\t\t\tif (!encodedPrim) continue;\n\n\t\t\t\tprimDef.extensions = primDef.extensions || {};\n\t\t\t\tprimDef.extensions[KHR_DRACO_MESH_COMPRESSION] = {\n\t\t\t\t\tbufferView: context.otherBufferViewsIndexMap.get(encodedPrim.data),\n\t\t\t\t\tattributes: encodedPrim.attributeIDs,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// Omit the extension if nothing was compressed.\n\t\tif (!dracoContext.primitiveHashMap.size) {\n\t\t\tconst json = context.jsonDoc.json;\n\t\t\tjson.extensionsUsed = (json.extensionsUsed || []).filter((name) => name !== KHR_DRACO_MESH_COMPRESSION);\n\t\t\tjson.extensionsRequired = (json.extensionsRequired || []).filter(\n\t\t\t\t(name) => name !== KHR_DRACO_MESH_COMPRESSION,\n\t\t\t);\n\t\t}\n\n\t\treturn this;\n\t}\n}\n\n/**\n * Returns a list of Primitives compatible with Draco compression. If any required preconditions\n * fail, and would break assumptions required for compression, this function will throw an error.\n */\nfunction listDracoPrimitives(doc: Document): Map<Primitive, string> {\n\tconst logger = doc.getLogger();\n\tconst included = new Set<Primitive>();\n\tconst excluded = new Set<Primitive>();\n\n\tlet nonIndexed = 0;\n\tlet nonTriangles = 0;\n\n\t// Support compressing only indexed, mode=TRIANGLES primitives.\n\tfor (const mesh of doc.getRoot().listMeshes()) {\n\t\tfor (const prim of mesh.listPrimitives()) {\n\t\t\tif (!prim.getIndices()) {\n\t\t\t\texcluded.add(prim);\n\t\t\t\tnonIndexed++;\n\t\t\t} else if (prim.getMode() !== Primitive.Mode.TRIANGLES) {\n\t\t\t\texcluded.add(prim);\n\t\t\t\tnonTriangles++;\n\t\t\t} else {\n\t\t\t\tincluded.add(prim);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (nonIndexed > 0) {\n\t\tlogger.warn(\n\t\t\t`[${KHR_DRACO_MESH_COMPRESSION}] Skipping Draco compression of ${nonIndexed} non-indexed primitives.`,\n\t\t);\n\t}\n\tif (nonTriangles > 0) {\n\t\tlogger.warn(\n\t\t\t`[${KHR_DRACO_MESH_COMPRESSION}] Skipping Draco compression of ${nonTriangles} non-TRIANGLES primitives.`,\n\t\t);\n\t}\n\n\t// Create an Accessor->index mapping.\n\tconst accessors = doc.getRoot().listAccessors();\n\tconst accessorIndices = new Map<Accessor, number>();\n\tfor (let i = 0; i < accessors.length; i++) accessorIndices.set(accessors[i], i);\n\n\t// For each compressed Primitive, create a hash key identifying its accessors. Map each\n\t// compressed Primitive and Accessor to this hash key.\n\tconst includedAccessors = new Map<Accessor, string>();\n\tconst includedHashKeys = new Set<string>();\n\tconst primToHashKey = new Map<Primitive, string>();\n\tfor (const prim of Array.from(included)) {\n\t\tlet hashKey = createHashKey(prim, accessorIndices);\n\n\t\t// If accessors of an identical primitive have already been checked, we're done.\n\t\tif (includedHashKeys.has(hashKey)) {\n\t\t\tprimToHashKey.set(prim, hashKey);\n\t\t\tcontinue;\n\t\t}\n\n\t\t// If any accessors are already in use, but the same hashKey hasn't been written, then we\n\t\t// need to create copies of these accessors for the current encoded primitive. We can't\n\t\t// reuse the same compressed accessor for two encoded primitives, because Draco might\n\t\t// change the vertex count, change the vertex order, or cause other conflicts.\n\t\tif (includedAccessors.has(prim.getIndices()!)) {\n\t\t\tconst indices = prim.getIndices()!; // Condition for 'included' list.\n\t\t\tconst dstIndices = indices.clone();\n\t\t\taccessorIndices.set(dstIndices, doc.getRoot().listAccessors().length - 1);\n\t\t\tprim.swap(indices, dstIndices); // TODO(cleanup): I/O should not modify Document.\n\t\t}\n\t\tfor (const attribute of prim.listAttributes()) {\n\t\t\tif (includedAccessors.has(attribute)) {\n\t\t\t\tconst dstAttribute = attribute.clone();\n\t\t\t\taccessorIndices.set(dstAttribute, doc.getRoot().listAccessors().length - 1);\n\t\t\t\tprim.swap(attribute, dstAttribute); // TODO(cleanup): I/O should not modify Document.\n\t\t\t}\n\t\t}\n\n\t\t// With conflicts resolved, compute the hash key again.\n\t\thashKey = createHashKey(prim, accessorIndices);\n\n\t\t// Commit the primitive and its accessors to the hash key.\n\t\tincludedHashKeys.add(hashKey);\n\t\tprimToHashKey.set(prim, hashKey);\n\t\tincludedAccessors.set(prim.getIndices()!, hashKey);\n\t\tfor (const attribute of prim.listAttributes()) {\n\t\t\tincludedAccessors.set(attribute, hashKey);\n\t\t}\n\t}\n\n\t// For each compressed Accessor, ensure that it isn't used except by a Primitive.\n\tfor (const accessor of Array.from(includedAccessors.keys())) {\n\t\tconst parentTypes = new Set(accessor.listParents().map((prop) => prop.propertyType));\n\t\tif (parentTypes.size !== 2 || !parentTypes.has(PropertyType.PRIMITIVE) || !parentTypes.has(PropertyType.ROOT)) {\n\t\t\tthrow new Error(\n\t\t\t\t`[${KHR_DRACO_MESH_COMPRESSION}] Compressed accessors must only be used as indices or vertex attributes.`,\n\t\t\t);\n\t\t}\n\t}\n\n\t// For each compressed Primitive, ensure that Accessors are mapped only to the same hash key.\n\tfor (const prim of Array.from(included)) {\n\t\tconst hashKey = primToHashKey.get(prim);\n\t\tconst indices = prim.getIndices()!; // Condition for 'included' list.\n\t\tif (\n\t\t\tincludedAccessors.get(indices) !== hashKey ||\n\t\t\tprim.listAttributes().some((attr) => includedAccessors.get(attr) !== hashKey)\n\t\t) {\n\t\t\tthrow new Error(`[${KHR_DRACO_MESH_COMPRESSION}] Draco primitives must share all, or no, accessors.`);\n\t\t}\n\t}\n\n\t// For each excluded Primitive, ensure that no Accessors are compressed.\n\tfor (const prim of Array.from(excluded)) {\n\t\tconst indices = prim.getIndices()!; // Condition for 'included' list.\n\t\tif (includedAccessors.has(indices) || prim.listAttributes().some((attr) => includedAccessors.has(attr))) {\n\t\t\tthrow new Error(\n\t\t\t\t`[${KHR_DRACO_MESH_COMPRESSION}] Accessor cannot be shared by compressed and uncompressed primitives.`,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn primToHashKey;\n}\n\nfunction createHashKey(prim: Primitive, indexMap: Map<Accessor, number>): string {\n\tconst hashElements = [];\n\tconst indices = prim.getIndices()!; // Condition for 'included' list.\n\n\thashElements.push(indexMap.get(indices));\n\tfor (const attribute of prim.listAttributes()) {\n\t\thashElements.push(indexMap.get(attribute));\n\t}\n\n\treturn hashElements.sort().join('|');\n}\n","import { ExtensionProperty, type IProperty, type Nullable, PropertyType, type vec3 } from '@gltf-transform/core';\nimport { KHR_LIGHTS_PUNCTUAL } from '../constants.js';\n\ninterface ILight extends IProperty {\n\tcolor: vec3;\n\tintensity: number;\n\ttype: PunctualLightType;\n\trange: number | null;\n\tinnerConeAngle: number;\n\touterConeAngle: number;\n}\n\ntype PunctualLightType = 'point' | 'spot' | 'directional';\n\n/**\n * Defines a light attached to a {@link Node}. See {@link KHRLightsPunctual}.\n */\nexport class Light extends ExtensionProperty<ILight> {\n\tpublic static EXTENSION_NAME: typeof KHR_LIGHTS_PUNCTUAL = KHR_LIGHTS_PUNCTUAL;\n\tpublic declare extensionName: typeof KHR_LIGHTS_PUNCTUAL;\n\tpublic declare propertyType: 'Light';\n\tpublic declare parentTypes: [PropertyType.NODE];\n\n\t/**********************************************************************************************\n\t * CONSTANTS.\n\t */\n\n\tpublic static Type: Record<string, PunctualLightType> = {\n\t\tPOINT: 'point',\n\t\tSPOT: 'spot',\n\t\tDIRECTIONAL: 'directional',\n\t};\n\n\t/**********************************************************************************************\n\t * INSTANCE.\n\t */\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_LIGHTS_PUNCTUAL;\n\t\tthis.propertyType = 'Light';\n\t\tthis.parentTypes = [PropertyType.NODE];\n\t}\n\n\tprotected getDefaults(): Nullable<ILight> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, {\n\t\t\tcolor: [1, 1, 1] as vec3,\n\t\t\tintensity: 1,\n\t\t\ttype: Light.Type.POINT,\n\t\t\trange: null,\n\t\t\tinnerConeAngle: 0,\n\t\t\touterConeAngle: Math.PI / 4,\n\t\t});\n\t}\n\n\t/**********************************************************************************************\n\t * COLOR.\n\t */\n\n\t/** Light color; Linear-sRGB components. */\n\tpublic getColor(): vec3 {\n\t\treturn this.get('color');\n\t}\n\n\t/** Light color; Linear-sRGB components. */\n\tpublic setColor(color: vec3): this {\n\t\treturn this.set('color', color);\n\t}\n\n\t/**********************************************************************************************\n\t * INTENSITY.\n\t */\n\n\t/**\n\t * Brightness of light. Units depend on the type of light: point and spot lights use luminous\n\t * intensity in candela (lm/sr) while directional lights use illuminance in lux (lm/m2).\n\t */\n\tpublic getIntensity(): number {\n\t\treturn this.get('intensity');\n\t}\n\n\t/**\n\t * Brightness of light. Units depend on the type of light: point and spot lights use luminous\n\t * intensity in candela (lm/sr) while directional lights use illuminance in lux (lm/m2).\n\t */\n\tpublic setIntensity(intensity: number): this {\n\t\treturn this.set('intensity', intensity);\n\t}\n\n\t/**********************************************************************************************\n\t * TYPE.\n\t */\n\n\t/** Type. */\n\tpublic getType(): PunctualLightType {\n\t\treturn this.get('type');\n\t}\n\n\t/** Type. */\n\tpublic setType(type: PunctualLightType): this {\n\t\treturn this.set('type', type);\n\t}\n\n\t/**********************************************************************************************\n\t * RANGE.\n\t */\n\n\t/**\n\t * Hint defining a distance cutoff at which the light's intensity may be considered to have\n\t * reached zero. Supported only for point and spot lights. Must be > 0. When undefined, range\n\t * is assumed to be infinite.\n\t */\n\tpublic getRange(): number | null {\n\t\treturn this.get('range');\n\t}\n\n\t/**\n\t * Hint defining a distance cutoff at which the light's intensity may be considered to have\n\t * reached zero. Supported only for point and spot lights. Must be > 0. When undefined, range\n\t * is assumed to be infinite.\n\t */\n\tpublic setRange(range: number | null): this {\n\t\treturn this.set('range', range);\n\t}\n\n\t/**********************************************************************************************\n\t * SPOT LIGHT PROPERTIES\n\t */\n\n\t/**\n\t * Angle, in radians, from centre of spotlight where falloff begins. Must be >= 0 and\n\t * < outerConeAngle.\n\t */\n\tpublic getInnerConeAngle(): number {\n\t\treturn this.get('innerConeAngle');\n\t}\n\n\t/**\n\t * Angle, in radians, from centre of spotlight where falloff begins. Must be >= 0 and\n\t * < outerConeAngle.\n\t */\n\tpublic setInnerConeAngle(angle: number): this {\n\t\treturn this.set('innerConeAngle', angle);\n\t}\n\n\t/**\n\t * Angle, in radians, from centre of spotlight where falloff ends. Must be > innerConeAngle and\n\t * <= PI / 2.0.\n\t */\n\tpublic getOuterConeAngle(): number {\n\t\treturn this.get('outerConeAngle');\n\t}\n\n\t/**\n\t * Angle, in radians, from centre of spotlight where falloff ends. Must be > innerConeAngle and\n\t * <= PI / 2.0.\n\t */\n\tpublic setOuterConeAngle(angle: number): this {\n\t\treturn this.set('outerConeAngle', angle);\n\t}\n}\n","import { Extension, MathUtils, type ReaderContext, type vec3, type WriterContext } from '@gltf-transform/core';\nimport { KHR_LIGHTS_PUNCTUAL } from '../constants.js';\nimport { Light } from './light.js';\n\ninterface LightsPunctualRootDef {\n\tlights?: LightDef[];\n}\n\ninterface LightsPunctualNodeDef {\n\tlight: number;\n}\n\ninterface LightDef {\n\tname?: string;\n\tcolor?: vec3;\n\tintensity?: number;\n\trange?: number;\n\ttype: 'spot' | 'point' | 'directional';\n\tspot?: {\n\t\tinnerConeAngle?: number;\n\t\touterConeAngle?: number;\n\t};\n}\n\n/**\n * [`KHR_lights_punctual`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_lights_punctual/) defines three \"punctual\" light types: directional, point and\n * spot.\n *\n * Punctual lights are parameterized, infinitely small points that emit light in\n * well-defined directions and intensities. Lights are referenced by nodes and inherit the transform\n * of that node.\n *\n * Properties:\n * - {@link Light}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRLightsPunctual, Light, LightType } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const lightsExtension = document.createExtension(KHRLightsPunctual);\n *\n * // Create a Light property.\n * const light = lightsExtension.createLight()\n *\t.setType(LightType.POINT)\n *\t.setIntensity(2.0)\n *\t.setColor([1.0, 0.0, 0.0]);\n *\n * // Attach the property to a Material.\n * node.setExtension('KHR_lights_punctual', light);\n * ```\n */\nexport class KHRLightsPunctual extends Extension {\n\tpublic readonly extensionName: typeof KHR_LIGHTS_PUNCTUAL = KHR_LIGHTS_PUNCTUAL;\n\tpublic static readonly EXTENSION_NAME: typeof KHR_LIGHTS_PUNCTUAL = KHR_LIGHTS_PUNCTUAL;\n\n\t/** Creates a new punctual Light property for use on a {@link Node}. */\n\tpublic createLight(name = ''): Light {\n\t\treturn new Light(this.document.getGraph(), name);\n\t}\n\n\t/** @hidden */\n\tpublic read(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tif (!jsonDoc.json.extensions || !jsonDoc.json.extensions[KHR_LIGHTS_PUNCTUAL]) return this;\n\n\t\tconst rootDef = jsonDoc.json.extensions[KHR_LIGHTS_PUNCTUAL] as LightsPunctualRootDef;\n\t\tconst lightDefs = rootDef.lights || ([] as LightDef[]);\n\t\tconst lights = lightDefs.map((lightDef) => {\n\t\t\tconst light = this.createLight()\n\t\t\t\t.setName(lightDef.name || '')\n\t\t\t\t.setType(lightDef.type);\n\n\t\t\tif (lightDef.color !== undefined) light.setColor(lightDef.color);\n\t\t\tif (lightDef.intensity !== undefined) light.setIntensity(lightDef.intensity);\n\t\t\tif (lightDef.range !== undefined) light.setRange(lightDef.range);\n\n\t\t\tif (lightDef.spot?.innerConeAngle !== undefined) {\n\t\t\t\tlight.setInnerConeAngle(lightDef.spot.innerConeAngle);\n\t\t\t}\n\t\t\tif (lightDef.spot?.outerConeAngle !== undefined) {\n\t\t\t\tlight.setOuterConeAngle(lightDef.spot.outerConeAngle);\n\t\t\t}\n\n\t\t\treturn light;\n\t\t});\n\n\t\tjsonDoc.json.nodes!.forEach((nodeDef, nodeIndex) => {\n\t\t\tif (!nodeDef.extensions || !nodeDef.extensions[KHR_LIGHTS_PUNCTUAL]) return;\n\t\t\tconst lightNodeDef = nodeDef.extensions[KHR_LIGHTS_PUNCTUAL] as LightsPunctualNodeDef;\n\t\t\tcontext.nodes[nodeIndex].setExtension(KHR_LIGHTS_PUNCTUAL, lights[lightNodeDef.light]);\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tif (this.properties.size === 0) return this;\n\n\t\tconst lightDefs = [];\n\t\tconst lightIndexMap = new Map<Light, number>();\n\n\t\tfor (const property of this.properties) {\n\t\t\tconst light = property as Light;\n\t\t\tconst lightDef = { type: light.getType() } as LightDef;\n\n\t\t\tif (!MathUtils.eq(light.getColor(), [1, 1, 1])) lightDef.color = light.getColor();\n\t\t\tif (light.getIntensity() !== 1) lightDef.intensity = light.getIntensity();\n\t\t\tif (light.getRange() != null) lightDef.range = light.getRange()!;\n\n\t\t\tif (light.getName()) lightDef.name = light.getName();\n\n\t\t\tif (light.getType() === Light.Type.SPOT) {\n\t\t\t\tlightDef.spot = {\n\t\t\t\t\tinnerConeAngle: light.getInnerConeAngle(),\n\t\t\t\t\touterConeAngle: light.getOuterConeAngle(),\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tlightDefs.push(lightDef);\n\t\t\tlightIndexMap.set(light, lightDefs.length - 1);\n\t\t}\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listNodes()\n\t\t\t.forEach((node) => {\n\t\t\t\tconst light = node.getExtension<Light>(KHR_LIGHTS_PUNCTUAL);\n\t\t\t\tif (light) {\n\t\t\t\t\tconst nodeIndex = context.nodeIndexMap.get(node)!;\n\t\t\t\t\tconst nodeDef = jsonDoc.json.nodes![nodeIndex];\n\t\t\t\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\t\t\t\tnodeDef.extensions[KHR_LIGHTS_PUNCTUAL] = { light: lightIndexMap.get(light) };\n\t\t\t\t}\n\t\t\t});\n\n\t\tjsonDoc.json.extensions = jsonDoc.json.extensions || {};\n\t\tjsonDoc.json.extensions[KHR_LIGHTS_PUNCTUAL] = { lights: lightDefs };\n\n\t\treturn this;\n\t}\n}\n","import {\n\tExtensionProperty,\n\ttype IProperty,\n\ttype Nullable,\n\tPropertyType,\n\ttype Texture,\n\tTextureChannel,\n\tTextureInfo,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_ANISOTROPY } from '../constants.js';\n\ninterface IAnisotropy extends IProperty {\n\tanisotropyStrength: number;\n\tanisotropyRotation: number;\n\tanisotropyTexture: Texture;\n\tanisotropyTextureInfo: TextureInfo;\n}\n\nconst { R, G, B } = TextureChannel;\n\n/**\n * Defines anisotropy (directionally-dependent reflections) on a PBR {@link Material}. See\n * {@link KHRMaterialsAnisotropy}.\n */\nexport class Anisotropy extends ExtensionProperty<IAnisotropy> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_ANISOTROPY = KHR_MATERIALS_ANISOTROPY;\n\tpublic declare extensionName: typeof KHR_MATERIALS_ANISOTROPY;\n\tpublic declare propertyType: 'Anisotropy';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_ANISOTROPY;\n\t\tthis.propertyType = 'Anisotropy';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n\n\tprotected getDefaults(): Nullable<IAnisotropy> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, {\n\t\t\tanisotropyStrength: 0.0,\n\t\t\tanisotropyRotation: 0.0,\n\t\t\tanisotropyTexture: null,\n\t\t\tanisotropyTextureInfo: new TextureInfo(this.graph, 'anisotropyTextureInfo'),\n\t\t});\n\t}\n\n\t/**********************************************************************************************\n\t * Anisotropy strength.\n\t */\n\n\t/** Anisotropy strength. */\n\tpublic getAnisotropyStrength(): number {\n\t\treturn this.get('anisotropyStrength');\n\t}\n\n\t/** Anisotropy strength. */\n\tpublic setAnisotropyStrength(strength: number): this {\n\t\treturn this.set('anisotropyStrength', strength);\n\t}\n\n\t/**********************************************************************************************\n\t * Anisotropy rotation.\n\t */\n\n\t/** Anisotropy rotation; linear multiplier. */\n\tpublic getAnisotropyRotation(): number {\n\t\treturn this.get('anisotropyRotation');\n\t}\n\n\t/** Anisotropy rotation; linear multiplier. */\n\tpublic setAnisotropyRotation(rotation: number): this {\n\t\treturn this.set('anisotropyRotation', rotation);\n\t}\n\n\t/**********************************************************************************************\n\t * Anisotropy texture.\n\t */\n\n\t/**\n\t * Anisotropy texture. Red and green channels represent the anisotropy\n\t * direction in [-1, 1] tangent, bitangent space, to be rotated by\n\t * anisotropyRotation. The blue channel contains strength as [0, 1] to be\n\t * multiplied by anisotropyStrength.\n\t */\n\tpublic getAnisotropyTexture(): Texture | null {\n\t\treturn this.getRef('anisotropyTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its anisotropy texture. If no\n\t * texture is attached, {@link TextureInfo} is `null`.\n\t */\n\tpublic getAnisotropyTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('anisotropyTexture') ? this.getRef('anisotropyTextureInfo') : null;\n\t}\n\n\t/** Anisotropy texture. See {@link Anisotropy.getAnisotropyTexture getAnisotropyTexture}. */\n\tpublic setAnisotropyTexture(texture: Texture | null): this {\n\t\treturn this.setRef('anisotropyTexture', texture, { channels: R | G | B });\n\t}\n}\n","import { Extension, type GLTF, PropertyType, type ReaderContext, type WriterContext } from '@gltf-transform/core';\nimport { KHR_MATERIALS_ANISOTROPY } from '../constants.js';\nimport { Anisotropy } from './anisotropy.js';\n\ninterface AnisotropyDef {\n\tanisotropyStrength: number;\n\tanisotropyRotation: number;\n\tanisotropyTexture: GLTF.ITextureInfo;\n}\n\n/**\n * [`KHR_materials_anisotropy`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_anisotropy/)\n * defines anisotropy (directionally-dependent reflections) on a PBR material.\n *\n * ![Illustration](/media/extensions/khr-materials-anisotropy.jpg)\n *\n * > _**Figure:** Effect of each color channel in the anisotropyTexture. Left\n * > to right: the full anisotropy texture, filling the red channel with black,\n * > filling the green channel with black, filling the blue channel with black.\n * > Source: [Khronos Group & Wayfair](https://github.com/KhronosGroup/glTF-Sample-Assets/tree/main/Models/AnisotropyBarnLamp)._\n *\n * This extension defines the anisotropic property of a material as observable with brushed metals\n * for instance. An asymmetric specular lobe model is introduced to allow for such phenomena. The\n * visually distinct feature of that lobe is the elongated appearance of the specular reflection.\n * For a single punctual light source, the specular reflection will eventually degenerate into a\n * zero width line in the limit, that is where the material is fully anisotropic, as opposed to be\n * fully isotropic in which case the specular reflection is radially symmetric.\n *\n * Properties:\n * - {@link Anisotropy}\n *\n * ### Example\n *\n * The `KHRMaterialsAnisotropy` class provides a single {@link ExtensionProperty} type, `Anisotropy`,\n * which may be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsAnisotropy, Anisotropy } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const anisotropyExtension = document.createExtension(KHRMaterialsAnisotropy);\n *\n * // Create an Anisotropy property.\n * const anisotropy = anisotropyExtension.createAnisotropy()\n * \t.setAnisotropyStrength(1.0)\n * \t.setAnisotropyRotation(Math.PI / 4);\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_anisotropy', anisotropy);\n * ```\n */\nexport class KHRMaterialsAnisotropy extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_ANISOTROPY = KHR_MATERIALS_ANISOTROPY;\n\tpublic readonly extensionName: typeof KHR_MATERIALS_ANISOTROPY = KHR_MATERIALS_ANISOTROPY;\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.MESH];\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.MESH];\n\n\t/** Creates a new Anisotropy property for use on a {@link Material}. */\n\tpublic createAnisotropy(): Anisotropy {\n\t\treturn new Anisotropy(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(_context: WriterContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst materialDefs = jsonDoc.json.materials || [];\n\t\tconst textureDefs = jsonDoc.json.textures || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_ANISOTROPY]) {\n\t\t\t\tconst anisotropy = this.createAnisotropy();\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_ANISOTROPY, anisotropy);\n\n\t\t\t\tconst anisotropyDef = materialDef.extensions[KHR_MATERIALS_ANISOTROPY] as AnisotropyDef;\n\n\t\t\t\t// Factors.\n\n\t\t\t\tif (anisotropyDef.anisotropyStrength !== undefined) {\n\t\t\t\t\tanisotropy.setAnisotropyStrength(anisotropyDef.anisotropyStrength);\n\t\t\t\t}\n\t\t\t\tif (anisotropyDef.anisotropyRotation !== undefined) {\n\t\t\t\t\tanisotropy.setAnisotropyRotation(anisotropyDef.anisotropyRotation);\n\t\t\t\t}\n\n\t\t\t\t// Textures.\n\n\t\t\t\tif (anisotropyDef.anisotropyTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = anisotropyDef.anisotropyTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tanisotropy.setAnisotropyTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(anisotropy.getAnisotropyTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tconst anisotropy = material.getExtension<Anisotropy>(KHR_MATERIALS_ANISOTROPY);\n\t\t\t\tif (anisotropy) {\n\t\t\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\n\t\t\t\t\t// Factors.\n\n\t\t\t\t\tconst anisotropyDef = (materialDef.extensions[KHR_MATERIALS_ANISOTROPY] = {} as AnisotropyDef);\n\n\t\t\t\t\tif (anisotropy.getAnisotropyStrength() > 0) {\n\t\t\t\t\t\tanisotropyDef.anisotropyStrength = anisotropy.getAnisotropyStrength();\n\t\t\t\t\t}\n\t\t\t\t\tif (anisotropy.getAnisotropyRotation() !== 0) {\n\t\t\t\t\t\tanisotropyDef.anisotropyRotation = anisotropy.getAnisotropyRotation();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Textures.\n\n\t\t\t\t\tif (anisotropy.getAnisotropyTexture()) {\n\t\t\t\t\t\tconst texture = anisotropy.getAnisotropyTexture()!;\n\t\t\t\t\t\tconst textureInfo = anisotropy.getAnisotropyTextureInfo()!;\n\t\t\t\t\t\tanisotropyDef.anisotropyTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import {\n\tExtensionProperty,\n\ttype IProperty,\n\ttype Nullable,\n\tPropertyType,\n\ttype Texture,\n\tTextureChannel,\n\tTextureInfo,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_CLEARCOAT } from '../constants.js';\n\ninterface IClearcoat extends IProperty {\n\tclearcoatFactor: number;\n\tclearcoatTexture: Texture;\n\tclearcoatTextureInfo: TextureInfo;\n\n\tclearcoatRoughnessFactor: number;\n\tclearcoatRoughnessTexture: Texture;\n\tclearcoatRoughnessTextureInfo: TextureInfo;\n\n\tclearcoatNormalScale: number;\n\tclearcoatNormalTexture: Texture;\n\tclearcoatNormalTextureInfo: TextureInfo;\n}\n\nconst { R, G, B } = TextureChannel;\n\n/**\n * Defines clear coat for a PBR material. See {@link KHRMaterialsClearcoat}.\n */\nexport class Clearcoat extends ExtensionProperty<IClearcoat> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_CLEARCOAT = KHR_MATERIALS_CLEARCOAT;\n\tpublic declare extensionName: typeof KHR_MATERIALS_CLEARCOAT;\n\tpublic declare propertyType: 'Clearcoat';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_CLEARCOAT;\n\t\tthis.propertyType = 'Clearcoat';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n\n\tprotected getDefaults(): Nullable<IClearcoat> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, {\n\t\t\tclearcoatFactor: 0,\n\t\t\tclearcoatTexture: null,\n\t\t\tclearcoatTextureInfo: new TextureInfo(this.graph, 'clearcoatTextureInfo'),\n\n\t\t\tclearcoatRoughnessFactor: 0,\n\t\t\tclearcoatRoughnessTexture: null,\n\t\t\tclearcoatRoughnessTextureInfo: new TextureInfo(this.graph, 'clearcoatRoughnessTextureInfo'),\n\n\t\t\tclearcoatNormalScale: 1,\n\t\t\tclearcoatNormalTexture: null,\n\t\t\tclearcoatNormalTextureInfo: new TextureInfo(this.graph, 'clearcoatNormalTextureInfo'),\n\t\t});\n\t}\n\n\t/**********************************************************************************************\n\t * Clearcoat.\n\t */\n\n\t/** Clearcoat; linear multiplier. See {@link Clearcoat.getClearcoatTexture getClearcoatTexture}. */\n\tpublic getClearcoatFactor(): number {\n\t\treturn this.get('clearcoatFactor');\n\t}\n\n\t/** Clearcoat; linear multiplier. See {@link Clearcoat.getClearcoatTexture getClearcoatTexture}. */\n\tpublic setClearcoatFactor(factor: number): this {\n\t\treturn this.set('clearcoatFactor', factor);\n\t}\n\n\t/**\n\t * Clearcoat texture; linear multiplier. The `r` channel of this texture specifies an amount\n\t * [0-1] of coating over the surface of the material, which may have its own roughness and\n\t * normal map properties.\n\t */\n\tpublic getClearcoatTexture(): Texture | null {\n\t\treturn this.getRef('clearcoatTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its clearcoat texture. If no texture is attached,\n\t * {@link TextureInfo} is `null`.\n\t */\n\tpublic getClearcoatTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('clearcoatTexture') ? this.getRef('clearcoatTextureInfo') : null;\n\t}\n\n\t/** Sets clearcoat texture. See {@link Clearcoat.getClearcoatTexture getClearcoatTexture}. */\n\tpublic setClearcoatTexture(texture: Texture | null): this {\n\t\treturn this.setRef('clearcoatTexture', texture, { channels: R });\n\t}\n\n\t/**********************************************************************************************\n\t * Clearcoat roughness.\n\t */\n\n\t/**\n\t * Clearcoat roughness; linear multiplier.\n\t * See {@link Clearcoat.getClearcoatRoughnessTexture getClearcoatRoughnessTexture}.\n\t */\n\tpublic getClearcoatRoughnessFactor(): number {\n\t\treturn this.get('clearcoatRoughnessFactor');\n\t}\n\n\t/**\n\t * Clearcoat roughness; linear multiplier.\n\t * See {@link Clearcoat.getClearcoatRoughnessTexture getClearcoatRoughnessTexture}.\n\t */\n\tpublic setClearcoatRoughnessFactor(factor: number): this {\n\t\treturn this.set('clearcoatRoughnessFactor', factor);\n\t}\n\n\t/**\n\t * Clearcoat roughness texture; linear multiplier. The `g` channel of this texture specifies\n\t * roughness, independent of the base layer's roughness.\n\t */\n\tpublic getClearcoatRoughnessTexture(): Texture | null {\n\t\treturn this.getRef('clearcoatRoughnessTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its clearcoat roughness texture. If no texture is\n\t * attached, {@link TextureInfo} is `null`.\n\t */\n\tpublic getClearcoatRoughnessTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('clearcoatRoughnessTexture') ? this.getRef('clearcoatRoughnessTextureInfo') : null;\n\t}\n\n\t/**\n\t * Sets clearcoat roughness texture.\n\t * See {@link Clearcoat.getClearcoatRoughnessTexture getClearcoatRoughnessTexture}.\n\t */\n\tpublic setClearcoatRoughnessTexture(texture: Texture | null): this {\n\t\treturn this.setRef('clearcoatRoughnessTexture', texture, { channels: G });\n\t}\n\n\t/**********************************************************************************************\n\t * Clearcoat normals.\n\t */\n\n\t/** Clearcoat normal scale. See {@link Clearcoat.getClearcoatNormalTexture getClearcoatNormalTexture}. */\n\tpublic getClearcoatNormalScale(): number {\n\t\treturn this.get('clearcoatNormalScale');\n\t}\n\n\t/** Clearcoat normal scale. See {@link Clearcoat.getClearcoatNormalTexture getClearcoatNormalTexture}. */\n\tpublic setClearcoatNormalScale(scale: number): this {\n\t\treturn this.set('clearcoatNormalScale', scale);\n\t}\n\n\t/**\n\t * Clearcoat normal map. Independent of the material base layer normal map.\n\t */\n\tpublic getClearcoatNormalTexture(): Texture | null {\n\t\treturn this.getRef('clearcoatNormalTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its clearcoat normal texture. If no texture is\n\t * attached, {@link TextureInfo} is `null`.\n\t */\n\tpublic getClearcoatNormalTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('clearcoatNormalTexture') ? this.getRef('clearcoatNormalTextureInfo') : null;\n\t}\n\n\t/** Sets clearcoat normal texture. See {@link Clearcoat.getClearcoatNormalTexture getClearcoatNormalTexture}. */\n\tpublic setClearcoatNormalTexture(texture: Texture | null): this {\n\t\treturn this.setRef('clearcoatNormalTexture', texture, { channels: R | G | B });\n\t}\n}\n","import { Extension, type GLTF, PropertyType, type ReaderContext, type WriterContext } from '@gltf-transform/core';\nimport { KHR_MATERIALS_CLEARCOAT } from '../constants.js';\nimport { Clearcoat } from './clearcoat.js';\n\ninterface ClearcoatDef {\n\tclearcoatFactor?: number;\n\tclearcoatRoughnessFactor?: number;\n\tclearcoatTexture?: GLTF.ITextureInfo;\n\tclearcoatRoughnessTexture?: GLTF.ITextureInfo;\n\tclearcoatNormalTexture?: GLTF.IMaterialNormalTextureInfo;\n}\n\n/**\n * [KHR_materials_clearcoat](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_clearcoat/)\n * defines a clear coating on a glTF PBR material.\n *\n * ![Illustration](/media/extensions/khr-materials-clearcoat.png)\n *\n * > _**Figure:** Comparison of a carbon-fiber material without clearcoat (left) and with clearcoat\n * > (right). Source: [Filament](https://google.github.io/filament/Materials.html)._\n *\n * A clear coat is a common technique used in Physically-Based\n * Rendering for a protective layer applied to a base material.\n * Commonly used to represent car paint, carbon fiber, or thin lacquers.\n *\n * Properties:\n * - {@link Clearcoat}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsClearcoat, Clearcoat } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const clearcoatExtension = document.createExtension(KHRMaterialsClearcoat);\n *\n * // Create Clearcoat property.\n * const clearcoat = clearcoatExtension.createClearcoat()\n *\t.setClearcoatFactor(1.0);\n *\n * // Assign to a Material.\n * material.setExtension('KHR_materials_clearcoat', clearcoat);\n * ```\n */\nexport class KHRMaterialsClearcoat extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_CLEARCOAT = KHR_MATERIALS_CLEARCOAT;\n\tpublic readonly extensionName: typeof KHR_MATERIALS_CLEARCOAT = KHR_MATERIALS_CLEARCOAT;\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.MESH];\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.MESH];\n\n\t/** Creates a new Clearcoat property for use on a {@link Material}. */\n\tpublic createClearcoat(): Clearcoat {\n\t\treturn new Clearcoat(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(_context: WriterContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst materialDefs = jsonDoc.json.materials || [];\n\t\tconst textureDefs = jsonDoc.json.textures || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_CLEARCOAT]) {\n\t\t\t\tconst clearcoat = this.createClearcoat();\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_CLEARCOAT, clearcoat);\n\n\t\t\t\tconst clearcoatDef = materialDef.extensions[KHR_MATERIALS_CLEARCOAT] as ClearcoatDef;\n\n\t\t\t\t// Factors.\n\n\t\t\t\tif (clearcoatDef.clearcoatFactor !== undefined) {\n\t\t\t\t\tclearcoat.setClearcoatFactor(clearcoatDef.clearcoatFactor);\n\t\t\t\t}\n\t\t\t\tif (clearcoatDef.clearcoatRoughnessFactor !== undefined) {\n\t\t\t\t\tclearcoat.setClearcoatRoughnessFactor(clearcoatDef.clearcoatRoughnessFactor);\n\t\t\t\t}\n\n\t\t\t\t// Textures.\n\n\t\t\t\tif (clearcoatDef.clearcoatTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = clearcoatDef.clearcoatTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tclearcoat.setClearcoatTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(clearcoat.getClearcoatTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t\tif (clearcoatDef.clearcoatRoughnessTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = clearcoatDef.clearcoatRoughnessTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tclearcoat.setClearcoatRoughnessTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(clearcoat.getClearcoatRoughnessTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t\tif (clearcoatDef.clearcoatNormalTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = clearcoatDef.clearcoatNormalTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tclearcoat.setClearcoatNormalTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(clearcoat.getClearcoatNormalTextureInfo()!, textureInfoDef);\n\t\t\t\t\tif (textureInfoDef.scale !== undefined) {\n\t\t\t\t\t\tclearcoat.setClearcoatNormalScale(textureInfoDef.scale);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tconst clearcoat = material.getExtension<Clearcoat>(KHR_MATERIALS_CLEARCOAT);\n\t\t\t\tif (clearcoat) {\n\t\t\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\n\t\t\t\t\t// Factors.\n\n\t\t\t\t\tconst clearcoatDef = (materialDef.extensions[KHR_MATERIALS_CLEARCOAT] = {\n\t\t\t\t\t\tclearcoatFactor: clearcoat.getClearcoatFactor(),\n\t\t\t\t\t\tclearcoatRoughnessFactor: clearcoat.getClearcoatRoughnessFactor(),\n\t\t\t\t\t} as ClearcoatDef);\n\n\t\t\t\t\t// Textures.\n\n\t\t\t\t\tif (clearcoat.getClearcoatTexture()) {\n\t\t\t\t\t\tconst texture = clearcoat.getClearcoatTexture()!;\n\t\t\t\t\t\tconst textureInfo = clearcoat.getClearcoatTextureInfo()!;\n\t\t\t\t\t\tclearcoatDef.clearcoatTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t\tif (clearcoat.getClearcoatRoughnessTexture()) {\n\t\t\t\t\t\tconst texture = clearcoat.getClearcoatRoughnessTexture()!;\n\t\t\t\t\t\tconst textureInfo = clearcoat.getClearcoatRoughnessTextureInfo()!;\n\t\t\t\t\t\tclearcoatDef.clearcoatRoughnessTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t\tif (clearcoat.getClearcoatNormalTexture()) {\n\t\t\t\t\t\tconst texture = clearcoat.getClearcoatNormalTexture()!;\n\t\t\t\t\t\tconst textureInfo = clearcoat.getClearcoatNormalTextureInfo()!;\n\t\t\t\t\t\tclearcoatDef.clearcoatNormalTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t\tif (clearcoat.getClearcoatNormalScale() !== 1) {\n\t\t\t\t\t\t\tclearcoatDef.clearcoatNormalTexture.scale = clearcoat.getClearcoatNormalScale();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import {\n\tExtensionProperty,\n\ttype IProperty,\n\ttype Nullable,\n\tPropertyType,\n\ttype Texture,\n\tTextureChannel,\n\tTextureInfo,\n\ttype vec3,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_DIFFUSE_TRANSMISSION } from '../constants.js';\n\ninterface IDiffuseTransmission extends IProperty {\n\tdiffuseTransmissionFactor: number;\n\tdiffuseTransmissionTexture: Texture;\n\tdiffuseTransmissionTextureInfo: TextureInfo;\n\tdiffuseTransmissionColorFactor: vec3;\n\tdiffuseTransmissionColorTexture: Texture;\n\tdiffuseTransmissionColorTextureInfo: TextureInfo;\n}\n\nconst { R, G, B, A } = TextureChannel;\n\n/**\n * Defines diffuse transmission on a PBR {@link Material}. See {@link KHRMaterialsDiffuseTransmission}.\n *\n * @experimental KHR_materials_diffuse_transmission is not yet ratified by the Khronos Group.\n */\nexport class DiffuseTransmission extends ExtensionProperty<IDiffuseTransmission> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_DIFFUSE_TRANSMISSION = KHR_MATERIALS_DIFFUSE_TRANSMISSION;\n\tpublic declare extensionName: typeof KHR_MATERIALS_DIFFUSE_TRANSMISSION;\n\tpublic declare propertyType: 'DiffuseTransmission';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_DIFFUSE_TRANSMISSION;\n\t\tthis.propertyType = 'DiffuseTransmission';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n\n\tprotected getDefaults(): Nullable<IDiffuseTransmission> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, {\n\t\t\tdiffuseTransmissionFactor: 0.0,\n\t\t\tdiffuseTransmissionTexture: null,\n\t\t\tdiffuseTransmissionTextureInfo: new TextureInfo(this.graph, 'diffuseTransmissionTextureInfo'),\n\t\t\tdiffuseTransmissionColorFactor: [1.0, 1.0, 1.0] as vec3,\n\t\t\tdiffuseTransmissionColorTexture: null,\n\t\t\tdiffuseTransmissionColorTextureInfo: new TextureInfo(this.graph, 'diffuseTransmissionColorTextureInfo'),\n\t\t});\n\t}\n\n\t/**********************************************************************************************\n\t * Diffuse transmission.\n\t */\n\n\t/**\n\t * Percentage of reflected, non-specularly reflected light that is transmitted through the\n\t * surface via the Lambertian diffuse transmission, i.e., the strength of the diffuse\n\t * transmission effect.\n\t */\n\tpublic getDiffuseTransmissionFactor(): number {\n\t\treturn this.get('diffuseTransmissionFactor');\n\t}\n\n\t/**\n\t * Percentage of reflected, non-specularly reflected light that is transmitted through the\n\t * surface via the Lambertian diffuse transmission, i.e., the strength of the diffuse\n\t * transmission effect.\n\t */\n\tpublic setDiffuseTransmissionFactor(factor: number): this {\n\t\treturn this.set('diffuseTransmissionFactor', factor);\n\t}\n\n\t/**\n\t * Texture that defines the strength of the diffuse transmission effect, stored in the alpha (A)\n\t * channel. Will be multiplied by the diffuseTransmissionFactor.\n\t */\n\tpublic getDiffuseTransmissionTexture(): Texture | null {\n\t\treturn this.getRef('diffuseTransmissionTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its diffuse transmission texture. If no texture is attached,\n\t * {@link TextureInfo} is `null`.\n\t */\n\tpublic getDiffuseTransmissionTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('diffuseTransmissionTexture') ? this.getRef('diffuseTransmissionTextureInfo') : null;\n\t}\n\n\t/**\n\t * Texture that defines the strength of the diffuse transmission effect, stored in the alpha (A)\n\t * channel. Will be multiplied by the diffuseTransmissionFactor.\n\t */\n\tpublic setDiffuseTransmissionTexture(texture: Texture | null): this {\n\t\treturn this.setRef('diffuseTransmissionTexture', texture, { channels: A });\n\t}\n\n\t/**********************************************************************************************\n\t * Diffuse transmission color.\n\t */\n\n\t/** Color of the transmitted light; Linear-sRGB components. */\n\tpublic getDiffuseTransmissionColorFactor(): vec3 {\n\t\treturn this.get('diffuseTransmissionColorFactor');\n\t}\n\n\t/** Color of the transmitted light; Linear-sRGB components. */\n\tpublic setDiffuseTransmissionColorFactor(factor: vec3): this {\n\t\treturn this.set('diffuseTransmissionColorFactor', factor);\n\t}\n\n\t/**\n\t * Texture that defines the color of the transmitted light, stored in the RGB channels and\n\t * encoded in sRGB. This texture will be multiplied by diffuseTransmissionColorFactor.\n\t */\n\tpublic getDiffuseTransmissionColorTexture(): Texture | null {\n\t\treturn this.getRef('diffuseTransmissionColorTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its diffuse transmission color texture. If no\n\t * texture is attached, {@link TextureInfo} is `null`.\n\t */\n\tpublic getDiffuseTransmissionColorTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('diffuseTransmissionColorTexture')\n\t\t\t? this.getRef('diffuseTransmissionColorTextureInfo')\n\t\t\t: null;\n\t}\n\n\t/**\n\t * Texture that defines the color of the transmitted light, stored in the RGB channels and\n\t * encoded in sRGB. This texture will be multiplied by diffuseTransmissionColorFactor.\n\t */\n\tpublic setDiffuseTransmissionColorTexture(texture: Texture | null): this {\n\t\treturn this.setRef('diffuseTransmissionColorTexture', texture, { channels: R | G | B });\n\t}\n}\n","import { Extension, type GLTF, type ReaderContext, type vec3, type WriterContext } from '@gltf-transform/core';\nimport { KHR_MATERIALS_DIFFUSE_TRANSMISSION } from '../constants.js';\nimport { DiffuseTransmission } from './diffuse-transmission.js';\n\ninterface DiffuseTransmissionDef {\n\tdiffuseTransmissionFactor?: number;\n\tdiffuseTransmissionTexture?: GLTF.ITextureInfo;\n\tdiffuseTransmissionColorFactor?: vec3;\n\tdiffuseTransmissionColorTexture?: GLTF.ITextureInfo;\n}\n\n/**\n * [KHR_materials_diffuse_transmission](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/)\n * defines diffuse transmission on a glTF PBR material.\n *\n * ![Illustration](/media/extensions/khr-materials-diffuse-transmission.png)\n *\n * > _**Figure:** Sphere using `KHR_materials_diffuse_transmission` with varying roughness (0.0, 0.2, 0.4).\n * > Source: Khronos Group._\n *\n * Adds a Lambertian diffuse transmission BSDF to the metallic-roughness\n * material. Thin, dielectric objects like leaves or paper diffusely transmit\n * incoming light to the opposite side of the surface. For optically thick\n * media (volumes) with short scattering distances and therefore dense\n * scattering behavior, a diffuse transmission lobe is a phenomenological\n * plausible and cheap approximation.\n *\n * Properties:\n * - {@link DiffuseTransmission}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsDiffuseTransmission, DiffuseTransmission } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const diffuseTransmissionExtension = document.createExtension(KHRMaterialsDiffuseTransmission);\n *\n * // Create DiffuseTransmission property.\n * const diffuseTransmission = diffuseTransmission.createDiffuseTransmission()\n *\t.setDiffuseTransmissionFactor(1.0);\n *\n * // Assign to a Material.\n * material.setExtension('KHR_materials_diffuse_transmission', diffuseTransmission);\n * ```\n *\n * @experimental KHR_materials_diffuse_transmission is not yet ratified by the Khronos Group.\n */\nexport class KHRMaterialsDiffuseTransmission extends Extension {\n\tpublic readonly extensionName: typeof KHR_MATERIALS_DIFFUSE_TRANSMISSION = KHR_MATERIALS_DIFFUSE_TRANSMISSION;\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_DIFFUSE_TRANSMISSION =\n\t\tKHR_MATERIALS_DIFFUSE_TRANSMISSION;\n\n\t/** Creates a new DiffuseTransmission property for use on a {@link Material}. */\n\tpublic createDiffuseTransmission(): DiffuseTransmission {\n\t\treturn new DiffuseTransmission(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst materialDefs = jsonDoc.json.materials || [];\n\t\tconst textureDefs = jsonDoc.json.textures || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_DIFFUSE_TRANSMISSION]) {\n\t\t\t\tconst transmission = this.createDiffuseTransmission();\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_DIFFUSE_TRANSMISSION, transmission);\n\n\t\t\t\tconst transmissionDef = materialDef.extensions[\n\t\t\t\t\tKHR_MATERIALS_DIFFUSE_TRANSMISSION\n\t\t\t\t] as DiffuseTransmissionDef;\n\n\t\t\t\t// Factors.\n\n\t\t\t\tif (transmissionDef.diffuseTransmissionFactor !== undefined) {\n\t\t\t\t\ttransmission.setDiffuseTransmissionFactor(transmissionDef.diffuseTransmissionFactor);\n\t\t\t\t}\n\n\t\t\t\tif (transmissionDef.diffuseTransmissionColorFactor !== undefined) {\n\t\t\t\t\ttransmission.setDiffuseTransmissionColorFactor(transmissionDef.diffuseTransmissionColorFactor);\n\t\t\t\t}\n\n\t\t\t\t// Textures.\n\n\t\t\t\tif (transmissionDef.diffuseTransmissionTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = transmissionDef.diffuseTransmissionTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\ttransmission.setDiffuseTransmissionTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(transmission.getDiffuseTransmissionTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\n\t\t\t\tif (transmissionDef.diffuseTransmissionColorTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = transmissionDef.diffuseTransmissionColorTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\ttransmission.setDiffuseTransmissionColorTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(transmission.getDiffuseTransmissionColorTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tfor (const material of this.document.getRoot().listMaterials()) {\n\t\t\tconst transmission = material.getExtension<DiffuseTransmission>(KHR_MATERIALS_DIFFUSE_TRANSMISSION);\n\t\t\tif (!transmission) continue;\n\n\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\n\t\t\t// Factors.\n\n\t\t\tconst transmissionDef = (materialDef.extensions[KHR_MATERIALS_DIFFUSE_TRANSMISSION] = {\n\t\t\t\tdiffuseTransmissionFactor: transmission.getDiffuseTransmissionFactor(),\n\t\t\t\tdiffuseTransmissionColorFactor: transmission.getDiffuseTransmissionColorFactor(),\n\t\t\t} as DiffuseTransmissionDef);\n\n\t\t\t// Textures.\n\n\t\t\tif (transmission.getDiffuseTransmissionTexture()) {\n\t\t\t\tconst texture = transmission.getDiffuseTransmissionTexture()!;\n\t\t\t\tconst textureInfo = transmission.getDiffuseTransmissionTextureInfo()!;\n\t\t\t\ttransmissionDef.diffuseTransmissionTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t}\n\n\t\t\tif (transmission.getDiffuseTransmissionColorTexture()) {\n\t\t\t\tconst texture = transmission.getDiffuseTransmissionColorTexture()!;\n\t\t\t\tconst textureInfo = transmission.getDiffuseTransmissionColorTextureInfo()!;\n\t\t\t\ttransmissionDef.diffuseTransmissionColorTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n}\n","import { ExtensionProperty, type IProperty, type Nullable, PropertyType } from '@gltf-transform/core';\nimport { KHR_MATERIALS_DISPERSION } from '../constants.js';\n\ninterface IDispersion extends IProperty {\n\tdispersion: number;\n}\n\n/**\n * Defines dispersion for a PBR {@link Material}. See {@link KHRMaterialsDispersion}.\n */\nexport class Dispersion extends ExtensionProperty<IDispersion> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_DISPERSION = KHR_MATERIALS_DISPERSION;\n\tpublic declare extensionName: typeof KHR_MATERIALS_DISPERSION;\n\tpublic declare propertyType: 'Dispersion';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_DISPERSION;\n\t\tthis.propertyType = 'Dispersion';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n\n\tprotected getDefaults(): Nullable<IDispersion> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, { dispersion: 0 });\n\t}\n\n\t/**********************************************************************************************\n\t * Dispersion.\n\t */\n\n\t/** Dispersion. */\n\tpublic getDispersion(): number {\n\t\treturn this.get('dispersion');\n\t}\n\n\t/** Dispersion. */\n\tpublic setDispersion(dispersion: number): this {\n\t\treturn this.set('dispersion', dispersion);\n\t}\n}\n","import { Extension, PropertyType, type ReaderContext, type WriterContext } from '@gltf-transform/core';\nimport { KHR_MATERIALS_DISPERSION } from '../constants.js';\nimport { Dispersion } from './dispersion.js';\n\ninterface DispersionDef {\n\tdispersion?: number;\n}\n\n/**\n * [KHR_materials_dispersion](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_dispersion/)\n * defines dispersion on a glTF PBR material.\n *\n * ![illustration](/media/extensions/khr-materials-dispersion.jpg)\n *\n * > _**Figure:** Prisms demonstrating volumetric refraction and dispersion, for varying\n * > values of dispersion and IOR. Source: Khronos Group, rendered in Adobe Stager._\n *\n * Dispersion enables configuring the strength of the angular separation of colors (chromatic\n * aberration) transmitting through a relatively clear volume.  It is an enhancement to the\n * default `KHR_materials_volume` transmission model which assumes no dispersion.\n *\n * Properties:\n * - {@link Dispersion}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsDispersion, Dispersion } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const dispersionExtension = document.createExtension(KHRMaterialsDispersion);\n *\n * // Create Dispersion property.\n * const dispersion = dispersionExtension.createDispersion().setDispersion(1.0);\n *\n * // Assign to a Material.\n * material.setExtension('KHR_materials_dispersion', dispersion);\n * ```\n */\nexport class KHRMaterialsDispersion extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_DISPERSION = KHR_MATERIALS_DISPERSION;\n\tpublic readonly extensionName: typeof KHR_MATERIALS_DISPERSION = KHR_MATERIALS_DISPERSION;\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.MESH];\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.MESH];\n\n\t/** Creates a new Dispersion property for use on a {@link Material}. */\n\tpublic createDispersion(): Dispersion {\n\t\treturn new Dispersion(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(_context: WriterContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst materialDefs = jsonDoc.json.materials || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_DISPERSION]) {\n\t\t\t\tconst dispersion = this.createDispersion();\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_DISPERSION, dispersion);\n\n\t\t\t\tconst dispersionDef = materialDef.extensions[KHR_MATERIALS_DISPERSION] as DispersionDef;\n\n\t\t\t\t// Factors.\n\n\t\t\t\tif (dispersionDef.dispersion !== undefined) {\n\t\t\t\t\tdispersion.setDispersion(dispersionDef.dispersion);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tconst dispersion = material.getExtension<Dispersion>(KHR_MATERIALS_DISPERSION);\n\t\t\t\tif (dispersion) {\n\t\t\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\n\t\t\t\t\t// Factors.\n\n\t\t\t\t\tmaterialDef.extensions[KHR_MATERIALS_DISPERSION] = {\n\t\t\t\t\t\tdispersion: dispersion.getDispersion(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import { ExtensionProperty, type IProperty, type Nullable, PropertyType } from '@gltf-transform/core';\nimport { KHR_MATERIALS_EMISSIVE_STRENGTH } from '../constants.js';\n\ninterface IEmissiveStrength extends IProperty {\n\temissiveStrength: number;\n}\n\n/**\n * Defines emissive strength for a PBR {@link Material}, allowing high-dynamic-range\n * (HDR) emissive materials. See {@link KHRMaterialsEmissiveStrength}.\n */\nexport class EmissiveStrength extends ExtensionProperty<IEmissiveStrength> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_EMISSIVE_STRENGTH = KHR_MATERIALS_EMISSIVE_STRENGTH;\n\tpublic declare extensionName: typeof KHR_MATERIALS_EMISSIVE_STRENGTH;\n\tpublic declare propertyType: 'EmissiveStrength';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_EMISSIVE_STRENGTH;\n\t\tthis.propertyType = 'EmissiveStrength';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n\n\tprotected getDefaults(): Nullable<IEmissiveStrength> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, { emissiveStrength: 1.0 });\n\t}\n\n\t/**********************************************************************************************\n\t * EmissiveStrength.\n\t */\n\n\t/** EmissiveStrength. */\n\tpublic getEmissiveStrength(): number {\n\t\treturn this.get('emissiveStrength');\n\t}\n\n\t/** EmissiveStrength. */\n\tpublic setEmissiveStrength(strength: number): this {\n\t\treturn this.set('emissiveStrength', strength);\n\t}\n}\n","import { Extension, PropertyType, type ReaderContext, type WriterContext } from '@gltf-transform/core';\nimport { KHR_MATERIALS_EMISSIVE_STRENGTH } from '../constants.js';\nimport { EmissiveStrength } from './emissive-strength.js';\n\ninterface EmissiveStrengthDef {\n\temissiveStrength?: number;\n}\n\n/**\n * [KHR_materials_emissive_strength](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_emissive_strength/)\n * defines emissive strength and enables high-dynamic-range (HDR) emissive materials.\n *\n * ![Illustration](/media/extensions/khr-materials-emissive-strength.jpg)\n *\n * > _**Figure:** Cubes with emissive color #59BCF3 and emissive strength\n * > increasing from 1 to 256 nits, left to right. Rendered in [three.js](https://threejs.org/),\n * > with independent point lighting and a bloom effect.\n * > Source: [Don McCurdy](https://www.donmccurdy.com/2024/04/27/emission-and-bloom/)._\n *\n * The core glTF 2.0 material model includes {@link Material.setEmissiveFactor `emissiveFactor`}\n * and {@link Material.setEmissiveTexture `emissiveTexture`} to control the color and intensity\n * of the light being emitted by the material, clamped to the range [0.0, 1.0]. However, in\n * PBR environments with HDR reflections and lighting, stronger emission effects may be desirable.\n *\n * In this extension, a new {@link EmissiveStrength.setEmissiveStrength `emissiveStrength`} scalar\n * factor is supplied, which governs the upper limit of emissive strength per material and may be\n * given arbitrarily high values.\n *\n * For implementations where a physical light unit is needed, the units for the multiplicative\n * product of the emissive texture and factor are candela per square meter (cd / m2), sometimes\n * called _nits_. Many realtime rendering engines simplify this calculation by assuming that an\n * emissive factor of 1.0 results in a fully exposed pixel.\n *\n * Properties:\n * - {@link EmissiveStrength}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsEmissiveStrength, EmissiveStrength } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const emissiveStrengthExtension = document.createExtension(KHRMaterialsEmissiveStrength);\n *\n * // Create EmissiveStrength property.\n * const emissiveStrength = emissiveStrengthExtension\n * \t.createEmissiveStrength().setEmissiveStrength(5.0);\n *\n * // Assign to a Material.\n * material.setExtension('KHR_materials_emissive_strength', emissiveStrength);\n * ```\n */\nexport class KHRMaterialsEmissiveStrength extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_EMISSIVE_STRENGTH = KHR_MATERIALS_EMISSIVE_STRENGTH;\n\tpublic readonly extensionName: typeof KHR_MATERIALS_EMISSIVE_STRENGTH = KHR_MATERIALS_EMISSIVE_STRENGTH;\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.MESH];\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.MESH];\n\n\t/** Creates a new EmissiveStrength property for use on a {@link Material}. */\n\tpublic createEmissiveStrength(): EmissiveStrength {\n\t\treturn new EmissiveStrength(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(_context: WriterContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst materialDefs = jsonDoc.json.materials || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_EMISSIVE_STRENGTH]) {\n\t\t\t\tconst emissiveStrength = this.createEmissiveStrength();\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_EMISSIVE_STRENGTH, emissiveStrength);\n\n\t\t\t\tconst emissiveStrengthDef = materialDef.extensions[\n\t\t\t\t\tKHR_MATERIALS_EMISSIVE_STRENGTH\n\t\t\t\t] as EmissiveStrengthDef;\n\n\t\t\t\t// Factors.\n\n\t\t\t\tif (emissiveStrengthDef.emissiveStrength !== undefined) {\n\t\t\t\t\temissiveStrength.setEmissiveStrength(emissiveStrengthDef.emissiveStrength);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tconst emissiveStrength = material.getExtension<EmissiveStrength>(KHR_MATERIALS_EMISSIVE_STRENGTH);\n\t\t\t\tif (emissiveStrength) {\n\t\t\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\n\t\t\t\t\t// Factors.\n\n\t\t\t\t\tmaterialDef.extensions[KHR_MATERIALS_EMISSIVE_STRENGTH] = {\n\t\t\t\t\t\temissiveStrength: emissiveStrength.getEmissiveStrength(),\n\t\t\t\t\t} as EmissiveStrengthDef;\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import { ExtensionProperty, type IProperty, type Nullable, PropertyType } from '@gltf-transform/core';\nimport { KHR_MATERIALS_IOR } from '../constants.js';\n\ninterface IIOR extends IProperty {\n\tior: number;\n}\n\n/**\n * Defines index of refraction for a PBR {@link Material}. See {@link KHRMaterialsIOR}.\n */\nexport class IOR extends ExtensionProperty<IIOR> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_IOR = KHR_MATERIALS_IOR;\n\tpublic declare extensionName: typeof KHR_MATERIALS_IOR;\n\tpublic declare propertyType: 'IOR';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_IOR;\n\t\tthis.propertyType = 'IOR';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n\n\tprotected getDefaults(): Nullable<IIOR> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, { ior: 1.5 });\n\t}\n\n\t/**********************************************************************************************\n\t * IOR.\n\t */\n\n\t/** IOR. */\n\tpublic getIOR(): number {\n\t\treturn this.get('ior');\n\t}\n\n\t/** IOR. */\n\tpublic setIOR(ior: number): this {\n\t\treturn this.set('ior', ior);\n\t}\n}\n","import { Extension, PropertyType, type ReaderContext, type WriterContext } from '@gltf-transform/core';\nimport { KHR_MATERIALS_IOR } from '../constants.js';\nimport { IOR } from './ior.js';\n\ninterface IORDef {\n\tior?: number;\n}\n\n/**\n * [KHR_materials_ior](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_ior/)\n * defines index of refraction on a glTF PBR material.\n *\n * The dielectric BRDF of the metallic-roughness material in glTF uses a fixed value of 1.5 for the\n * index of refraction. This is a good fit for many plastics and glass, but not for other materials\n * like water or asphalt, sapphire or diamond. `KHR_materials_ior` allows users to set the index of\n * refraction to a certain value.\n *\n * Properties:\n * - {@link IOR}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsIOR, IOR } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const iorExtension = document.createExtension(KHRMaterialsIOR);\n *\n * // Create IOR property.\n * const ior = iorExtension.createIOR().setIOR(1.0);\n *\n * // Assign to a Material.\n * material.setExtension('KHR_materials_ior', ior);\n * ```\n */\nexport class KHRMaterialsIOR extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_IOR = KHR_MATERIALS_IOR;\n\tpublic readonly extensionName: typeof KHR_MATERIALS_IOR = KHR_MATERIALS_IOR;\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.MESH];\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.MESH];\n\n\t/** Creates a new IOR property for use on a {@link Material}. */\n\tpublic createIOR(): IOR {\n\t\treturn new IOR(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(_context: WriterContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst materialDefs = jsonDoc.json.materials || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_IOR]) {\n\t\t\t\tconst ior = this.createIOR();\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_IOR, ior);\n\n\t\t\t\tconst iorDef = materialDef.extensions[KHR_MATERIALS_IOR] as IORDef;\n\n\t\t\t\t// Factors.\n\n\t\t\t\tif (iorDef.ior !== undefined) {\n\t\t\t\t\tior.setIOR(iorDef.ior);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tconst ior = material.getExtension<IOR>(KHR_MATERIALS_IOR);\n\t\t\t\tif (ior) {\n\t\t\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\n\t\t\t\t\t// Factors.\n\n\t\t\t\t\tmaterialDef.extensions[KHR_MATERIALS_IOR] = {\n\t\t\t\t\t\tior: ior.getIOR(),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import {\n\tExtensionProperty,\n\ttype IProperty,\n\ttype Nullable,\n\tPropertyType,\n\ttype Texture,\n\tTextureChannel,\n\tTextureInfo,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_IRIDESCENCE } from '../constants.js';\n\ninterface IIridescence extends IProperty {\n\tiridescenceFactor: number;\n\tiridescenceTexture: Texture;\n\tiridescenceTextureInfo: TextureInfo;\n\tiridescenceIOR: number;\n\tiridescenceThicknessMinimum: number;\n\tiridescenceThicknessMaximum: number;\n\tiridescenceThicknessTexture: Texture;\n\tiridescenceThicknessTextureInfo: TextureInfo;\n}\n\nconst { R, G } = TextureChannel;\n\n/**\n * Defines iridescence (thin film interference) on a PBR {@link Material}. See {@link KHRMaterialsIridescence}.\n */\nexport class Iridescence extends ExtensionProperty<IIridescence> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_IRIDESCENCE = KHR_MATERIALS_IRIDESCENCE;\n\tpublic declare extensionName: typeof KHR_MATERIALS_IRIDESCENCE;\n\tpublic declare propertyType: 'Iridescence';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_IRIDESCENCE;\n\t\tthis.propertyType = 'Iridescence';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n\n\tprotected getDefaults(): Nullable<IIridescence> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, {\n\t\t\tiridescenceFactor: 0.0,\n\t\t\tiridescenceTexture: null,\n\t\t\tiridescenceTextureInfo: new TextureInfo(this.graph, 'iridescenceTextureInfo'),\n\t\t\tiridescenceIOR: 1.3,\n\t\t\tiridescenceThicknessMinimum: 100,\n\t\t\tiridescenceThicknessMaximum: 400,\n\t\t\tiridescenceThicknessTexture: null,\n\t\t\tiridescenceThicknessTextureInfo: new TextureInfo(this.graph, 'iridescenceThicknessTextureInfo'),\n\t\t});\n\t}\n\n\t/**********************************************************************************************\n\t * Iridescence.\n\t */\n\n\t/** Iridescence; linear multiplier. See {@link Iridescence.getIridescenceTexture getIridescenceTexture}. */\n\tpublic getIridescenceFactor(): number {\n\t\treturn this.get('iridescenceFactor');\n\t}\n\n\t/** Iridescence; linear multiplier. See {@link Iridescence.getIridescenceTexture getIridescenceTexture}. */\n\tpublic setIridescenceFactor(factor: number): this {\n\t\treturn this.set('iridescenceFactor', factor);\n\t}\n\n\t/**\n\t * Iridescence intensity.\n\t *\n\t * Only the red (R) channel is used for iridescence intensity, but this texture may optionally\n\t * be packed with additional data in the other channels.\n\t */\n\tpublic getIridescenceTexture(): Texture | null {\n\t\treturn this.getRef('iridescenceTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its iridescence texture. If no texture is attached,\n\t * {@link TextureInfo} is `null`.\n\t */\n\tpublic getIridescenceTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('iridescenceTexture') ? this.getRef('iridescenceTextureInfo') : null;\n\t}\n\n\t/** Iridescence intensity. See {@link Iridescence.getIridescenceTexture getIridescenceTexture}. */\n\tpublic setIridescenceTexture(texture: Texture | null): this {\n\t\treturn this.setRef('iridescenceTexture', texture, { channels: R });\n\t}\n\n\t/**********************************************************************************************\n\t * Iridescence IOR.\n\t */\n\n\t/** Index of refraction of the dielectric thin-film layer. */\n\tpublic getIridescenceIOR(): number {\n\t\treturn this.get('iridescenceIOR');\n\t}\n\n\t/** Index of refraction of the dielectric thin-film layer. */\n\tpublic setIridescenceIOR(ior: number): this {\n\t\treturn this.set('iridescenceIOR', ior);\n\t}\n\n\t/**********************************************************************************************\n\t * Iridescence thickness.\n\t */\n\n\t/** Minimum thickness of the thin-film layer, in nanometers (nm). */\n\tpublic getIridescenceThicknessMinimum(): number {\n\t\treturn this.get('iridescenceThicknessMinimum');\n\t}\n\n\t/** Minimum thickness of the thin-film layer, in nanometers (nm). */\n\tpublic setIridescenceThicknessMinimum(thickness: number): this {\n\t\treturn this.set('iridescenceThicknessMinimum', thickness);\n\t}\n\n\t/** Maximum thickness of the thin-film layer, in nanometers (nm). */\n\tpublic getIridescenceThicknessMaximum(): number {\n\t\treturn this.get('iridescenceThicknessMaximum');\n\t}\n\n\t/** Maximum thickness of the thin-film layer, in nanometers (nm). */\n\tpublic setIridescenceThicknessMaximum(thickness: number): this {\n\t\treturn this.set('iridescenceThicknessMaximum', thickness);\n\t}\n\n\t/**\n\t * The green channel of this texture defines the thickness of the\n\t * thin-film layer by blending between the minimum and maximum thickness.\n\t */\n\tpublic getIridescenceThicknessTexture(): Texture | null {\n\t\treturn this.getRef('iridescenceThicknessTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its iridescence thickness texture.\n\t * If no texture is attached, {@link TextureInfo} is `null`.\n\t */\n\tpublic getIridescenceThicknessTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('iridescenceThicknessTexture') ? this.getRef('iridescenceThicknessTextureInfo') : null;\n\t}\n\n\t/**\n\t * Sets iridescence thickness texture.\n\t * See {@link Iridescence.getIridescenceThicknessTexture getIridescenceThicknessTexture}.\n\t */\n\tpublic setIridescenceThicknessTexture(texture: Texture | null): this {\n\t\treturn this.setRef('iridescenceThicknessTexture', texture, { channels: G });\n\t}\n}\n","import { Extension, type GLTF, PropertyType, type ReaderContext, type WriterContext } from '@gltf-transform/core';\nimport { KHR_MATERIALS_IRIDESCENCE } from '../constants.js';\nimport { Iridescence } from './iridescence.js';\n\ninterface IridescenceDef {\n\tiridescenceFactor: number;\n\tiridescenceTexture: GLTF.ITextureInfo;\n\tiridescenceIor: number;\n\tiridescenceThicknessMinimum: number;\n\tiridescenceThicknessMaximum: number;\n\tiridescenceThicknessTexture: GLTF.ITextureInfo;\n}\n\n/**\n * [`KHR_materials_iridescence`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_iridescence/)\n * defines iridescence (thin film interference) on a PBR material.\n *\n * ![Illustration](/media/extensions/khr-materials-iridescence.png)\n *\n * > _**Figure:** Varying levels of iridescence IOR values.\n * > Source: [Khronos Group](https://github.com/KhronosGroup/gltf/tree/main/extensions/2.0/Khronos/KHR_materials_iridescence)._\n *\n * Iridescence describes an effect where hue varies depending on the viewing\n * angle and illumination angle: A thin-film of a semi-transparent layer\n * results in inter-reflections and due to thin-film interference, certain\n * wavelengths get absorbed or amplified. Iridescence can be seen on soap\n * bubbles, oil films, or on the wings of many insects. With this extension,\n * thickness and index of refraction (IOR) of the thin-film can be specified,\n * enabling iridescent materials.\n *\n * Properties:\n * - {@link Iridescence}\n *\n * ### Example\n *\n * The `KHRMaterialsIridescence` class provides a single {@link ExtensionProperty} type, `Iridescence`,\n * which may be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsIridescence, Iridescence } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const iridescenceExtension = document.createExtension(KHRMaterialsIridescence);\n *\n * // Create an Iridescence property.\n * const iridescence = iridescenceExtension.createIridescence()\n * \t.setIridescenceFactor(1.0)\n * \t.setIridescenceIOR(1.8);\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_iridescence', iridescence);\n * ```\n */\nexport class KHRMaterialsIridescence extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_IRIDESCENCE = KHR_MATERIALS_IRIDESCENCE;\n\tpublic readonly extensionName: typeof KHR_MATERIALS_IRIDESCENCE = KHR_MATERIALS_IRIDESCENCE;\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.MESH];\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.MESH];\n\n\t/** Creates a new Iridescence property for use on a {@link Material}. */\n\tpublic createIridescence(): Iridescence {\n\t\treturn new Iridescence(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(_context: WriterContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst materialDefs = jsonDoc.json.materials || [];\n\t\tconst textureDefs = jsonDoc.json.textures || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_IRIDESCENCE]) {\n\t\t\t\tconst iridescence = this.createIridescence();\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_IRIDESCENCE, iridescence);\n\n\t\t\t\tconst iridescenceDef = materialDef.extensions[KHR_MATERIALS_IRIDESCENCE] as IridescenceDef;\n\n\t\t\t\t// Factors.\n\n\t\t\t\tif (iridescenceDef.iridescenceFactor !== undefined) {\n\t\t\t\t\tiridescence.setIridescenceFactor(iridescenceDef.iridescenceFactor);\n\t\t\t\t}\n\t\t\t\tif (iridescenceDef.iridescenceIor !== undefined) {\n\t\t\t\t\tiridescence.setIridescenceIOR(iridescenceDef.iridescenceIor);\n\t\t\t\t}\n\t\t\t\tif (iridescenceDef.iridescenceThicknessMinimum !== undefined) {\n\t\t\t\t\tiridescence.setIridescenceThicknessMinimum(iridescenceDef.iridescenceThicknessMinimum);\n\t\t\t\t}\n\t\t\t\tif (iridescenceDef.iridescenceThicknessMaximum !== undefined) {\n\t\t\t\t\tiridescence.setIridescenceThicknessMaximum(iridescenceDef.iridescenceThicknessMaximum);\n\t\t\t\t}\n\n\t\t\t\t// Textures.\n\n\t\t\t\tif (iridescenceDef.iridescenceTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = iridescenceDef.iridescenceTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tiridescence.setIridescenceTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(iridescence.getIridescenceTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t\tif (iridescenceDef.iridescenceThicknessTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = iridescenceDef.iridescenceThicknessTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tiridescence.setIridescenceThicknessTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(iridescence.getIridescenceThicknessTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tconst iridescence = material.getExtension<Iridescence>(KHR_MATERIALS_IRIDESCENCE);\n\t\t\t\tif (iridescence) {\n\t\t\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\n\t\t\t\t\t// Factors.\n\n\t\t\t\t\tconst iridescenceDef = (materialDef.extensions[KHR_MATERIALS_IRIDESCENCE] = {} as IridescenceDef);\n\n\t\t\t\t\tif (iridescence.getIridescenceFactor() > 0) {\n\t\t\t\t\t\tiridescenceDef.iridescenceFactor = iridescence.getIridescenceFactor();\n\t\t\t\t\t}\n\t\t\t\t\tif (iridescence.getIridescenceIOR() !== 1.3) {\n\t\t\t\t\t\tiridescenceDef.iridescenceIor = iridescence.getIridescenceIOR();\n\t\t\t\t\t}\n\t\t\t\t\tif (iridescence.getIridescenceThicknessMinimum() !== 100) {\n\t\t\t\t\t\tiridescenceDef.iridescenceThicknessMinimum = iridescence.getIridescenceThicknessMinimum();\n\t\t\t\t\t}\n\t\t\t\t\tif (iridescence.getIridescenceThicknessMaximum() !== 400) {\n\t\t\t\t\t\tiridescenceDef.iridescenceThicknessMaximum = iridescence.getIridescenceThicknessMaximum();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Textures.\n\n\t\t\t\t\tif (iridescence.getIridescenceTexture()) {\n\t\t\t\t\t\tconst texture = iridescence.getIridescenceTexture()!;\n\t\t\t\t\t\tconst textureInfo = iridescence.getIridescenceTextureInfo()!;\n\t\t\t\t\t\tiridescenceDef.iridescenceTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t\tif (iridescence.getIridescenceThicknessTexture()) {\n\t\t\t\t\t\tconst texture = iridescence.getIridescenceThicknessTexture()!;\n\t\t\t\t\t\tconst textureInfo = iridescence.getIridescenceThicknessTextureInfo()!;\n\t\t\t\t\t\tiridescenceDef.iridescenceThicknessTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import {\n\tExtensionProperty,\n\ttype IProperty,\n\ttype Nullable,\n\tPropertyType,\n\ttype Texture,\n\tTextureChannel,\n\tTextureInfo,\n\ttype vec3,\n\ttype vec4,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS } from '../constants.js';\n\ninterface IPBRSpecularGlossiness extends IProperty {\n\tdiffuseFactor: vec4;\n\tdiffuseTexture: Texture;\n\tdiffuseTextureInfo: TextureInfo;\n\tspecularFactor: vec3;\n\tglossinessFactor: number;\n\tspecularGlossinessTexture: Texture;\n\tspecularGlossinessTextureInfo: TextureInfo;\n}\n\nconst { R, G, B, A } = TextureChannel;\n\n/**\n * Converts a {@link Material} to a spec/gloss workflow. See {@link KHRMaterialsPBRSpecularGlossiness}.\n */\nexport class PBRSpecularGlossiness extends ExtensionProperty<IPBRSpecularGlossiness> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS = KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;\n\tpublic declare extensionName: typeof KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;\n\tpublic declare propertyType: 'PBRSpecularGlossiness';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;\n\t\tthis.propertyType = 'PBRSpecularGlossiness';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n\n\tprotected getDefaults(): Nullable<IPBRSpecularGlossiness> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, {\n\t\t\tdiffuseFactor: [1.0, 1.0, 1.0, 1.0] as vec4,\n\t\t\tdiffuseTexture: null,\n\t\t\tdiffuseTextureInfo: new TextureInfo(this.graph, 'diffuseTextureInfo'),\n\t\t\tspecularFactor: [1.0, 1.0, 1.0] as vec3,\n\t\t\tglossinessFactor: 1.0,\n\t\t\tspecularGlossinessTexture: null,\n\t\t\tspecularGlossinessTextureInfo: new TextureInfo(this.graph, 'specularGlossinessTextureInfo'),\n\t\t});\n\t}\n\n\t/**********************************************************************************************\n\t * Diffuse.\n\t */\n\n\t/** Diffuse; Linear-sRGB components. See {@link PBRSpecularGlossiness.getDiffuseTexture getDiffuseTexture}. */\n\tpublic getDiffuseFactor(): vec4 {\n\t\treturn this.get('diffuseFactor');\n\t}\n\n\t/** Diffuse; Linear-sRGB components. See {@link PBRSpecularGlossiness.getDiffuseTexture getDiffuseTexture}. */\n\tpublic setDiffuseFactor(factor: vec4): this {\n\t\treturn this.set('diffuseFactor', factor);\n\t}\n\n\t/**\n\t * Diffuse texture; sRGB. Alternative to baseColorTexture, used within the\n\t * spec/gloss PBR workflow.\n\t */\n\tpublic getDiffuseTexture(): Texture | null {\n\t\treturn this.getRef('diffuseTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its diffuse texture. If no texture is attached,\n\t * {@link TextureInfo} is `null`.\n\t */\n\tpublic getDiffuseTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('diffuseTexture') ? this.getRef('diffuseTextureInfo') : null;\n\t}\n\n\t/** Sets diffuse texture. See {@link PBRSpecularGlossiness.getDiffuseTexture getDiffuseTexture}. */\n\tpublic setDiffuseTexture(texture: Texture | null): this {\n\t\treturn this.setRef('diffuseTexture', texture, { channels: R | G | B | A, isColor: true });\n\t}\n\n\t/**********************************************************************************************\n\t * Specular.\n\t */\n\n\t/** Specular; linear multiplier. */\n\tpublic getSpecularFactor(): vec3 {\n\t\treturn this.get('specularFactor');\n\t}\n\n\t/** Specular; linear multiplier. */\n\tpublic setSpecularFactor(factor: vec3): this {\n\t\treturn this.set('specularFactor', factor);\n\t}\n\n\t/**********************************************************************************************\n\t * Glossiness.\n\t */\n\n\t/** Glossiness; linear multiplier. */\n\tpublic getGlossinessFactor(): number {\n\t\treturn this.get('glossinessFactor');\n\t}\n\n\t/** Glossiness; linear multiplier. */\n\tpublic setGlossinessFactor(factor: number): this {\n\t\treturn this.set('glossinessFactor', factor);\n\t}\n\n\t/**********************************************************************************************\n\t * Specular/Glossiness.\n\t */\n\n\t/** Spec/gloss texture; linear multiplier. */\n\tpublic getSpecularGlossinessTexture(): Texture | null {\n\t\treturn this.getRef('specularGlossinessTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its spec/gloss texture. If no texture is attached,\n\t * {@link TextureInfo} is `null`.\n\t */\n\tpublic getSpecularGlossinessTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('specularGlossinessTexture') ? this.getRef('specularGlossinessTextureInfo') : null;\n\t}\n\n\t/** Spec/gloss texture; linear multiplier. */\n\tpublic setSpecularGlossinessTexture(texture: Texture | null): this {\n\t\treturn this.setRef('specularGlossinessTexture', texture, { channels: R | G | B | A });\n\t}\n}\n","import {\n\tExtension,\n\ttype GLTF,\n\tPropertyType,\n\ttype ReaderContext,\n\ttype vec3,\n\ttype vec4,\n\ttype WriterContext,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS } from '../constants.js';\nimport { PBRSpecularGlossiness } from './pbr-specular-glossiness.js';\n\ninterface SpecularGlossinessDef {\n\tdiffuseFactor?: vec4;\n\tspecularFactor: vec3;\n\tglossinessFactor: number;\n\tdiffuseTexture?: GLTF.ITextureInfo;\n\tspecularGlossinessTexture?: GLTF.ITextureInfo;\n}\n\n/**\n * [`KHR_materials_pbrSpecularGlossiness`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness/)\n * converts a PBR material from the default metal/rough workflow to a spec/gloss workflow.\n *\n * > _**NOTICE:** The spec/gloss workflow does _not_ support other PBR extensions such as clearcoat,\n * > transmission, IOR, etc. For the complete PBR feature set and specular data, use the\n * > {@link KHRMaterialsSpecular} extension instead, which provides specular data within a metal/rough\n * > workflow._\n *\n * ![Illustration](/media/extensions/khr-material-pbr-specular-glossiness.png)\n *\n * > _**Figure:** Components of a PBR spec/gloss material. Source: Khronos Group._\n *\n * Properties:\n * - {@link PBRSpecularGlossiness}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsPBRSpecularGlossiness } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const specGlossExtension = document.createExtension(KHRMaterialsPBRSpecularGlossiness);\n *\n * // Create a PBRSpecularGlossiness property.\n * const specGloss = specGlossExtension.createPBRSpecularGlossiness()\n * \t.setSpecularFactor(1.0);\n *\n * // // Assign to a Material.\n * material.setExtension('KHR_materials_pbrSpecularGlossiness', specGloss);\n * ```\n */\nexport class KHRMaterialsPBRSpecularGlossiness extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS =\n\t\tKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;\n\tpublic readonly extensionName: typeof KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS = KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.MESH];\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.MESH];\n\n\t/** Creates a new PBRSpecularGlossiness property for use on a {@link Material}. */\n\tpublic createPBRSpecularGlossiness(): PBRSpecularGlossiness {\n\t\treturn new PBRSpecularGlossiness(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(_context: WriterContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst materialDefs = jsonDoc.json.materials || [];\n\t\tconst textureDefs = jsonDoc.json.textures || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]) {\n\t\t\t\tconst specGloss = this.createPBRSpecularGlossiness();\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS, specGloss);\n\n\t\t\t\tconst specGlossDef = materialDef.extensions[\n\t\t\t\t\tKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS\n\t\t\t\t] as SpecularGlossinessDef;\n\n\t\t\t\t// Factors.\n\n\t\t\t\tif (specGlossDef.diffuseFactor !== undefined) {\n\t\t\t\t\tspecGloss.setDiffuseFactor(specGlossDef.diffuseFactor);\n\t\t\t\t}\n\t\t\t\tif (specGlossDef.specularFactor !== undefined) {\n\t\t\t\t\tspecGloss.setSpecularFactor(specGlossDef.specularFactor);\n\t\t\t\t}\n\t\t\t\tif (specGlossDef.glossinessFactor !== undefined) {\n\t\t\t\t\tspecGloss.setGlossinessFactor(specGlossDef.glossinessFactor);\n\t\t\t\t}\n\n\t\t\t\t// Textures.\n\n\t\t\t\tif (specGlossDef.diffuseTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = specGlossDef.diffuseTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tspecGloss.setDiffuseTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(specGloss.getDiffuseTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t\tif (specGlossDef.specularGlossinessTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = specGlossDef.specularGlossinessTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tspecGloss.setSpecularGlossinessTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(specGloss.getSpecularGlossinessTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tconst specGloss = material.getExtension<PBRSpecularGlossiness>(KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS);\n\t\t\t\tif (specGloss) {\n\t\t\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\n\t\t\t\t\t// Factors.\n\n\t\t\t\t\tconst specGlossDef = (materialDef.extensions[KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS] = {\n\t\t\t\t\t\tdiffuseFactor: specGloss.getDiffuseFactor(),\n\t\t\t\t\t\tspecularFactor: specGloss.getSpecularFactor(),\n\t\t\t\t\t\tglossinessFactor: specGloss.getGlossinessFactor(),\n\t\t\t\t\t} as SpecularGlossinessDef);\n\n\t\t\t\t\t// Textures.\n\n\t\t\t\t\tif (specGloss.getDiffuseTexture()) {\n\t\t\t\t\t\tconst texture = specGloss.getDiffuseTexture()!;\n\t\t\t\t\t\tconst textureInfo = specGloss.getDiffuseTextureInfo()!;\n\t\t\t\t\t\tspecGlossDef.diffuseTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t\tif (specGloss.getSpecularGlossinessTexture()) {\n\t\t\t\t\t\tconst texture = specGloss.getSpecularGlossinessTexture()!;\n\t\t\t\t\t\tconst textureInfo = specGloss.getSpecularGlossinessTextureInfo()!;\n\t\t\t\t\t\tspecGlossDef.specularGlossinessTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import {\n\tExtensionProperty,\n\ttype IProperty,\n\ttype Nullable,\n\tPropertyType,\n\ttype Texture,\n\tTextureChannel,\n\tTextureInfo,\n\ttype vec3,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_SHEEN } from '../constants.js';\n\ninterface ISheen extends IProperty {\n\tsheenColorFactor: vec3;\n\tsheenColorTexture: Texture;\n\tsheenColorTextureInfo: TextureInfo;\n\tsheenRoughnessFactor: number;\n\tsheenRoughnessTexture: Texture;\n\tsheenRoughnessTextureInfo: TextureInfo;\n}\n\nconst { R, G, B, A } = TextureChannel;\n\n/**\n * Defines sheen on a PBR {@link Material}. See {@link KHRMaterialsSheen}.\n */\nexport class Sheen extends ExtensionProperty<ISheen> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_SHEEN = KHR_MATERIALS_SHEEN;\n\tpublic declare extensionName: typeof KHR_MATERIALS_SHEEN;\n\tpublic declare propertyType: 'Sheen';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_SHEEN;\n\t\tthis.propertyType = 'Sheen';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n\n\tprotected getDefaults(): Nullable<ISheen> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, {\n\t\t\tsheenColorFactor: [0.0, 0.0, 0.0] as vec3,\n\t\t\tsheenColorTexture: null,\n\t\t\tsheenColorTextureInfo: new TextureInfo(this.graph, 'sheenColorTextureInfo'),\n\t\t\tsheenRoughnessFactor: 0.0,\n\t\t\tsheenRoughnessTexture: null,\n\t\t\tsheenRoughnessTextureInfo: new TextureInfo(this.graph, 'sheenRoughnessTextureInfo'),\n\t\t});\n\t}\n\n\t/**********************************************************************************************\n\t * Sheen color.\n\t */\n\n\t/** Sheen; linear multiplier. */\n\tpublic getSheenColorFactor(): vec3 {\n\t\treturn this.get('sheenColorFactor');\n\t}\n\n\t/** Sheen; linear multiplier. */\n\tpublic setSheenColorFactor(factor: vec3): this {\n\t\treturn this.set('sheenColorFactor', factor);\n\t}\n\n\t/**\n\t * Sheen color texture, in sRGB colorspace.\n\t */\n\tpublic getSheenColorTexture(): Texture | null {\n\t\treturn this.getRef('sheenColorTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its sheen color texture. If no texture is attached,\n\t * {@link TextureInfo} is `null`.\n\t */\n\tpublic getSheenColorTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('sheenColorTexture') ? this.getRef('sheenColorTextureInfo') : null;\n\t}\n\n\t/** Sets sheen color texture. See {@link Sheen.getSheenColorTexture getSheenColorTexture}. */\n\tpublic setSheenColorTexture(texture: Texture | null): this {\n\t\treturn this.setRef('sheenColorTexture', texture, { channels: R | G | B, isColor: true });\n\t}\n\n\t/**********************************************************************************************\n\t * Sheen roughness.\n\t */\n\n\t/** Sheen roughness; linear multiplier. See {@link Sheen.getSheenRoughnessTexture getSheenRoughnessTexture}. */\n\tpublic getSheenRoughnessFactor(): number {\n\t\treturn this.get('sheenRoughnessFactor');\n\t}\n\n\t/** Sheen roughness; linear multiplier. See {@link Sheen.getSheenRoughnessTexture getSheenRoughnessTexture}. */\n\tpublic setSheenRoughnessFactor(factor: number): this {\n\t\treturn this.set('sheenRoughnessFactor', factor);\n\t}\n\n\t/**\n\t * Sheen roughness texture; linear multiplier. The `a` channel of this texture specifies\n\t * roughness, independent of the base layer's roughness.\n\t */\n\tpublic getSheenRoughnessTexture(): Texture | null {\n\t\treturn this.getRef('sheenRoughnessTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its sheen roughness texture. If no texture is\n\t * attached, {@link TextureInfo} is `null`.\n\t */\n\tpublic getSheenRoughnessTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('sheenRoughnessTexture') ? this.getRef('sheenRoughnessTextureInfo') : null;\n\t}\n\n\t/**\n\t * Sets sheen roughness texture.  The `a` channel of this texture specifies\n\t * roughness, independent of the base layer's roughness.\n\t */\n\tpublic setSheenRoughnessTexture(texture: Texture | null): this {\n\t\treturn this.setRef('sheenRoughnessTexture', texture, { channels: A });\n\t}\n}\n","import {\n\tExtension,\n\ttype GLTF,\n\tPropertyType,\n\ttype ReaderContext,\n\ttype vec3,\n\ttype WriterContext,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_SHEEN } from '../constants.js';\nimport { Sheen } from './sheen.js';\n\ninterface SheenDef {\n\tsheenColorFactor?: vec3;\n\tsheenRoughnessFactor?: number;\n\tsheenColorTexture?: GLTF.ITextureInfo;\n\tsheenRoughnessTexture?: GLTF.ITextureInfo;\n}\n\n/**\n * [`KHR_materials_sheen`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_sheen/)\n * defines a velvet-like sheen layered on a glTF PBR material.\n *\n * ![Illustration](/media/extensions/khr-materials-sheen.png)\n *\n * > _**Figure:** A cushion, showing high material roughness and low sheen roughness. Soft\n * > highlights at edges of the material show backscattering from microfibers. Source: Khronos\n * > Group._\n *\n * A sheen layer is a common technique used in Physically-Based Rendering to represent\n * cloth and fabric materials.\n *\n * Properties:\n * - {@link Sheen}\n *\n * ### Example\n *\n * The `KHRMaterialsSheen` class provides a single {@link ExtensionProperty} type, `Sheen`,\n * which may be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsSheen, Sheen } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const sheenExtension = document.createExtension(KHRMaterialsSheen);\n *\n * // Create a Sheen property.\n * const sheen = sheenExtension.createSheen()\n * \t.setSheenColorFactor([1.0, 1.0, 1.0]);\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_sheen', sheen);\n * ```\n */\nexport class KHRMaterialsSheen extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_SHEEN = KHR_MATERIALS_SHEEN;\n\tpublic readonly extensionName: typeof KHR_MATERIALS_SHEEN = KHR_MATERIALS_SHEEN;\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.MESH];\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.MESH];\n\n\t/** Creates a new Sheen property for use on a {@link Material}. */\n\tpublic createSheen(): Sheen {\n\t\treturn new Sheen(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(_context: WriterContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst materialDefs = jsonDoc.json.materials || [];\n\t\tconst textureDefs = jsonDoc.json.textures || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_SHEEN]) {\n\t\t\t\tconst sheen = this.createSheen();\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_SHEEN, sheen);\n\n\t\t\t\tconst sheenDef = materialDef.extensions[KHR_MATERIALS_SHEEN] as SheenDef;\n\n\t\t\t\t// Factors.\n\n\t\t\t\tif (sheenDef.sheenColorFactor !== undefined) {\n\t\t\t\t\tsheen.setSheenColorFactor(sheenDef.sheenColorFactor);\n\t\t\t\t}\n\t\t\t\tif (sheenDef.sheenRoughnessFactor !== undefined) {\n\t\t\t\t\tsheen.setSheenRoughnessFactor(sheenDef.sheenRoughnessFactor);\n\t\t\t\t}\n\n\t\t\t\t// Textures.\n\n\t\t\t\tif (sheenDef.sheenColorTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = sheenDef.sheenColorTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tsheen.setSheenColorTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(sheen.getSheenColorTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t\tif (sheenDef.sheenRoughnessTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = sheenDef.sheenRoughnessTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tsheen.setSheenRoughnessTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(sheen.getSheenRoughnessTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tconst sheen = material.getExtension<Sheen>(KHR_MATERIALS_SHEEN);\n\t\t\t\tif (sheen) {\n\t\t\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\n\t\t\t\t\t// Factors.\n\n\t\t\t\t\tconst sheenDef = (materialDef.extensions[KHR_MATERIALS_SHEEN] = {\n\t\t\t\t\t\tsheenColorFactor: sheen.getSheenColorFactor(),\n\t\t\t\t\t\tsheenRoughnessFactor: sheen.getSheenRoughnessFactor(),\n\t\t\t\t\t} as SheenDef);\n\n\t\t\t\t\t// Textures.\n\n\t\t\t\t\tif (sheen.getSheenColorTexture()) {\n\t\t\t\t\t\tconst texture = sheen.getSheenColorTexture()!;\n\t\t\t\t\t\tconst textureInfo = sheen.getSheenColorTextureInfo()!;\n\t\t\t\t\t\tsheenDef.sheenColorTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t\tif (sheen.getSheenRoughnessTexture()) {\n\t\t\t\t\t\tconst texture = sheen.getSheenRoughnessTexture()!;\n\t\t\t\t\t\tconst textureInfo = sheen.getSheenRoughnessTextureInfo()!;\n\t\t\t\t\t\tsheenDef.sheenRoughnessTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import {\n\tExtensionProperty,\n\ttype IProperty,\n\ttype Nullable,\n\tPropertyType,\n\ttype Texture,\n\tTextureChannel,\n\tTextureInfo,\n\ttype vec3,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_SPECULAR } from '../constants.js';\n\ninterface ISpecular extends IProperty {\n\tspecularFactor: number;\n\tspecularTexture: Texture;\n\tspecularTextureInfo: TextureInfo;\n\tspecularColorFactor: vec3;\n\tspecularColorTexture: Texture;\n\tspecularColorTextureInfo: TextureInfo;\n}\n\nconst { R, G, B, A } = TextureChannel;\n\n/**\n * Defines specular reflectivity on a PBR {@link Material}. See {@link KHRMaterialsSpecular}.\n */\nexport class Specular extends ExtensionProperty<ISpecular> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_SPECULAR = KHR_MATERIALS_SPECULAR;\n\tpublic declare extensionName: typeof KHR_MATERIALS_SPECULAR;\n\tpublic declare propertyType: 'Specular';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_SPECULAR;\n\t\tthis.propertyType = 'Specular';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n\n\tprotected getDefaults(): Nullable<ISpecular> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, {\n\t\t\tspecularFactor: 1.0,\n\t\t\tspecularTexture: null,\n\t\t\tspecularTextureInfo: new TextureInfo(this.graph, 'specularTextureInfo'),\n\t\t\tspecularColorFactor: [1.0, 1.0, 1.0] as vec3,\n\t\t\tspecularColorTexture: null,\n\t\t\tspecularColorTextureInfo: new TextureInfo(this.graph, 'specularColorTextureInfo'),\n\t\t});\n\t}\n\n\t/**********************************************************************************************\n\t * Specular.\n\t */\n\n\t/** Specular; linear multiplier. See {@link Specular.getSpecularTexture getSpecularTexture}. */\n\tpublic getSpecularFactor(): number {\n\t\treturn this.get('specularFactor');\n\t}\n\n\t/** Specular; linear multiplier. See {@link Specular.getSpecularTexture getSpecularTexture}. */\n\tpublic setSpecularFactor(factor: number): this {\n\t\treturn this.set('specularFactor', factor);\n\t}\n\n\t/** Specular color; Linear-sRGB components. See {@link Specular.getSpecularTexture getSpecularTexture}. */\n\tpublic getSpecularColorFactor(): vec3 {\n\t\treturn this.get('specularColorFactor');\n\t}\n\n\t/** Specular color; Linear-sRGB components. See {@link Specular.getSpecularTexture getSpecularTexture}. */\n\tpublic setSpecularColorFactor(factor: vec3): this {\n\t\treturn this.set('specularColorFactor', factor);\n\t}\n\n\t/**\n\t * Specular texture; linear multiplier. Configures the strength of the specular reflection in\n\t * the dielectric BRDF. A value of zero disables the specular reflection, resulting in a pure\n\t * diffuse material.\n\t *\n\t * Only the alpha (A) channel is used for specular strength, but this texture may optionally\n\t * be packed with specular color (RGB) into a single texture.\n\t */\n\tpublic getSpecularTexture(): Texture | null {\n\t\treturn this.getRef('specularTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its specular texture. If no texture is attached,\n\t * {@link TextureInfo} is `null`.\n\t */\n\tpublic getSpecularTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('specularTexture') ? this.getRef('specularTextureInfo') : null;\n\t}\n\n\t/** Sets specular texture. See {@link Specular.getSpecularTexture getSpecularTexture}. */\n\tpublic setSpecularTexture(texture: Texture | null): this {\n\t\treturn this.setRef('specularTexture', texture, { channels: A });\n\t}\n\n\t/**\n\t * Specular color texture; linear multiplier. Defines the F0 color of the specular reflection\n\t * (RGB channels, encoded in sRGB) in the the dielectric BRDF.\n\t *\n\t * Only RGB channels are used here, but this texture may optionally be packed with a specular\n\t * factor (A) into a single texture.\n\t */\n\tpublic getSpecularColorTexture(): Texture | null {\n\t\treturn this.getRef('specularColorTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its specular color texture. If no texture is\n\t * attached, {@link TextureInfo} is `null`.\n\t */\n\tpublic getSpecularColorTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('specularColorTexture') ? this.getRef('specularColorTextureInfo') : null;\n\t}\n\n\t/** Sets specular color texture. See {@link Specular.getSpecularColorTexture getSpecularColorTexture}. */\n\tpublic setSpecularColorTexture(texture: Texture | null): this {\n\t\treturn this.setRef('specularColorTexture', texture, { channels: R | G | B, isColor: true });\n\t}\n}\n","import {\n\tExtension,\n\ttype GLTF,\n\tMathUtils,\n\tPropertyType,\n\ttype ReaderContext,\n\ttype vec3,\n\ttype WriterContext,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_SPECULAR } from '../constants.js';\nimport { Specular } from './specular.js';\n\ninterface SpecularDef {\n\tspecularFactor?: number;\n\tspecularColorFactor?: vec3;\n\tspecularTexture?: GLTF.ITextureInfo;\n\tspecularColorTexture?: GLTF.ITextureInfo;\n}\n\n/**\n * [`KHR_materials_specular`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_specular/)\n * adjusts the strength of the specular reflection in the dielectric BRDF.\n *\n * KHRMaterialsSpecular is a better alternative to the older\n * {@link KHRMaterialsPBRSpecularGlossiness KHR_materials_pbrSpecularGlossiness} extension, and\n * provides specular information while remaining within a metal/rough PBR workflow. A\n * value of zero disables the specular reflection, resulting in a pure diffuse material.\n *\n * Properties:\n * - {@link Specular}\n *\n * ### Example\n *\n * The `KHRMaterialsSpecular` class provides a single {@link ExtensionProperty} type, `Specular`,\n * which may be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsSpecular, Specular } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const specularExtension = document.createExtension(KHRMaterialsSpecular);\n *\n * // Create a Specular property.\n * const specular = specularExtension.createSpecular()\n * \t.setSpecularFactor(1.0);\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_specular', specular);\n * ```\n */\nexport class KHRMaterialsSpecular extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_SPECULAR = KHR_MATERIALS_SPECULAR;\n\tpublic readonly extensionName: typeof KHR_MATERIALS_SPECULAR = KHR_MATERIALS_SPECULAR;\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.MESH];\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.MESH];\n\n\t/** Creates a new Specular property for use on a {@link Material}. */\n\tpublic createSpecular(): Specular {\n\t\treturn new Specular(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(_context: WriterContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst materialDefs = jsonDoc.json.materials || [];\n\t\tconst textureDefs = jsonDoc.json.textures || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_SPECULAR]) {\n\t\t\t\tconst specular = this.createSpecular();\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_SPECULAR, specular);\n\n\t\t\t\tconst specularDef = materialDef.extensions[KHR_MATERIALS_SPECULAR] as SpecularDef;\n\n\t\t\t\t// Factors.\n\n\t\t\t\tif (specularDef.specularFactor !== undefined) {\n\t\t\t\t\tspecular.setSpecularFactor(specularDef.specularFactor);\n\t\t\t\t}\n\t\t\t\tif (specularDef.specularColorFactor !== undefined) {\n\t\t\t\t\tspecular.setSpecularColorFactor(specularDef.specularColorFactor);\n\t\t\t\t}\n\n\t\t\t\t// Textures.\n\n\t\t\t\tif (specularDef.specularTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = specularDef.specularTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tspecular.setSpecularTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(specular.getSpecularTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t\tif (specularDef.specularColorTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = specularDef.specularColorTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tspecular.setSpecularColorTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(specular.getSpecularColorTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tconst specular = material.getExtension<Specular>(KHR_MATERIALS_SPECULAR);\n\t\t\t\tif (specular) {\n\t\t\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\n\t\t\t\t\t// Factors.\n\n\t\t\t\t\tconst specularDef = (materialDef.extensions[KHR_MATERIALS_SPECULAR] = {} as SpecularDef);\n\n\t\t\t\t\tif (specular.getSpecularFactor() !== 1) {\n\t\t\t\t\t\tspecularDef.specularFactor = specular.getSpecularFactor();\n\t\t\t\t\t}\n\t\t\t\t\tif (!MathUtils.eq(specular.getSpecularColorFactor(), [1, 1, 1])) {\n\t\t\t\t\t\tspecularDef.specularColorFactor = specular.getSpecularColorFactor();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Textures.\n\n\t\t\t\t\tif (specular.getSpecularTexture()) {\n\t\t\t\t\t\tconst texture = specular.getSpecularTexture()!;\n\t\t\t\t\t\tconst textureInfo = specular.getSpecularTextureInfo()!;\n\t\t\t\t\t\tspecularDef.specularTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t\tif (specular.getSpecularColorTexture()) {\n\t\t\t\t\t\tconst texture = specular.getSpecularColorTexture()!;\n\t\t\t\t\t\tconst textureInfo = specular.getSpecularColorTextureInfo()!;\n\t\t\t\t\t\tspecularDef.specularColorTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import {\n\tExtensionProperty,\n\ttype IProperty,\n\ttype Nullable,\n\tPropertyType,\n\ttype Texture,\n\tTextureChannel,\n\tTextureInfo,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_TRANSMISSION } from '../constants.js';\n\ninterface ITransmission extends IProperty {\n\ttransmissionFactor: number;\n\ttransmissionTexture: Texture;\n\ttransmissionTextureInfo: TextureInfo;\n}\n\nconst { R } = TextureChannel;\n\n/**\n * Defines optical transmission on a PBR {@link Material}. See {@link KHRMaterialsTransmission}.\n */\nexport class Transmission extends ExtensionProperty<ITransmission> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_TRANSMISSION = KHR_MATERIALS_TRANSMISSION;\n\tpublic declare extensionName: typeof KHR_MATERIALS_TRANSMISSION;\n\tpublic declare propertyType: 'Transmission';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_TRANSMISSION;\n\t\tthis.propertyType = 'Transmission';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n\n\tprotected getDefaults(): Nullable<ITransmission> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, {\n\t\t\ttransmissionFactor: 0.0,\n\t\t\ttransmissionTexture: null,\n\t\t\ttransmissionTextureInfo: new TextureInfo(this.graph, 'transmissionTextureInfo'),\n\t\t});\n\t}\n\n\t/**********************************************************************************************\n\t * Transmission.\n\t */\n\n\t/** Transmission; linear multiplier. See {@link Transmission.getTransmissionTexture getTransmissionTexture}. */\n\tpublic getTransmissionFactor(): number {\n\t\treturn this.get('transmissionFactor');\n\t}\n\n\t/** Transmission; linear multiplier. See {@link Transmission.getTransmissionTexture getTransmissionTexture}. */\n\tpublic setTransmissionFactor(factor: number): this {\n\t\treturn this.set('transmissionFactor', factor);\n\t}\n\n\t/**\n\t * Transmission texture; linear multiplier. The `r` channel of this texture specifies\n\t * transmission [0-1] of the material's surface. By default this is a thin transparency\n\t * effect, but volume effects (refraction, subsurface scattering) may be introduced with the\n\t * addition of the `KHR_materials_volume` extension.\n\t */\n\tpublic getTransmissionTexture(): Texture | null {\n\t\treturn this.getRef('transmissionTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its transmission texture. If no texture is attached,\n\t * {@link TextureInfo} is `null`.\n\t */\n\tpublic getTransmissionTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('transmissionTexture') ? this.getRef('transmissionTextureInfo') : null;\n\t}\n\n\t/** Sets transmission texture. See {@link Transmission.getTransmissionTexture getTransmissionTexture}. */\n\tpublic setTransmissionTexture(texture: Texture | null): this {\n\t\treturn this.setRef('transmissionTexture', texture, { channels: R });\n\t}\n}\n","import { Extension, type GLTF, PropertyType, type ReaderContext, type WriterContext } from '@gltf-transform/core';\nimport { KHR_MATERIALS_TRANSMISSION } from '../constants.js';\nimport { Transmission } from './transmission.js';\n\ninterface TransmissionDef {\n\ttransmissionFactor?: number;\n\ttransmissionTexture?: GLTF.ITextureInfo;\n}\n\n/**\n * [`KHR_materials_transmission`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_transmission/)\n * provides a common type of optical transparency: infinitely-thin materials with no refraction,\n * scattering, or dispersion.\n *\n * ![Illustration](/media/extensions/khr-materials-transmission.png)\n *\n * > _**Figure:** Sphere using `KHR_materials_transmission` with varying roughness (0.0, 0.2, 0.4).\n * > Source: Khronos Group._\n *\n * While default PBR materials using alpha blending become invisible as their opacity approaches\n * zero, a transmissive material continues to reflect light in a glass-like manner, even at low\n * transmission values. When combined with {@link KHRMaterialsVolume}, transmission may be used for\n * thicker materials and refractive effects.\n *\n * Properties:\n * - {@link Transmission}\n *\n * ### Example\n *\n * The `KHRMaterialsTransmission` class provides a single {@link ExtensionProperty} type,\n * `Transmission`, which may be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsTransmission, Transmission } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const transmissionExtension = document.createExtension(KHRMaterialsTransmission);\n *\n * // Create a Transmission property.\n * const transmission = transmissionExtension.createTransmission()\n * \t.setTransmissionFactor(1.0);\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_transmission', transmission);\n * ```\n */\nexport class KHRMaterialsTransmission extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_TRANSMISSION = KHR_MATERIALS_TRANSMISSION;\n\tpublic readonly extensionName: typeof KHR_MATERIALS_TRANSMISSION = KHR_MATERIALS_TRANSMISSION;\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.MESH];\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.MESH];\n\n\t/** Creates a new Transmission property for use on a {@link Material}. */\n\tpublic createTransmission(): Transmission {\n\t\treturn new Transmission(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(_context: WriterContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst materialDefs = jsonDoc.json.materials || [];\n\t\tconst textureDefs = jsonDoc.json.textures || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_TRANSMISSION]) {\n\t\t\t\tconst transmission = this.createTransmission();\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_TRANSMISSION, transmission);\n\n\t\t\t\tconst transmissionDef = materialDef.extensions[KHR_MATERIALS_TRANSMISSION] as TransmissionDef;\n\n\t\t\t\t// Factors.\n\n\t\t\t\tif (transmissionDef.transmissionFactor !== undefined) {\n\t\t\t\t\ttransmission.setTransmissionFactor(transmissionDef.transmissionFactor);\n\t\t\t\t}\n\n\t\t\t\t// Textures.\n\n\t\t\t\tif (transmissionDef.transmissionTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = transmissionDef.transmissionTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\ttransmission.setTransmissionTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(transmission.getTransmissionTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tconst transmission = material.getExtension<Transmission>(KHR_MATERIALS_TRANSMISSION);\n\t\t\t\tif (transmission) {\n\t\t\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\n\t\t\t\t\t// Factors.\n\n\t\t\t\t\tconst transmissionDef = (materialDef.extensions[KHR_MATERIALS_TRANSMISSION] = {\n\t\t\t\t\t\ttransmissionFactor: transmission.getTransmissionFactor(),\n\t\t\t\t\t} as TransmissionDef);\n\n\t\t\t\t\t// Textures.\n\n\t\t\t\t\tif (transmission.getTransmissionTexture()) {\n\t\t\t\t\t\tconst texture = transmission.getTransmissionTexture()!;\n\t\t\t\t\t\tconst textureInfo = transmission.getTransmissionTextureInfo()!;\n\t\t\t\t\t\ttransmissionDef.transmissionTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import { ExtensionProperty, PropertyType } from '@gltf-transform/core';\nimport { KHR_MATERIALS_UNLIT } from '../constants.js';\n\n/**\n * Converts a PBR {@link Material} to an unlit shading model. See {@link KHRMaterialsUnlit}.\n */\nexport class Unlit extends ExtensionProperty {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_UNLIT = KHR_MATERIALS_UNLIT;\n\tpublic declare extensionName: typeof KHR_MATERIALS_UNLIT;\n\tpublic declare propertyType: 'Unlit';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_UNLIT;\n\t\tthis.propertyType = 'Unlit';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n}\n","import { Extension, PropertyType, type ReaderContext, type WriterContext } from '@gltf-transform/core';\nimport { KHR_MATERIALS_UNLIT } from '../constants.js';\nimport { Unlit } from './unlit.js';\n\n/**\n * [`KHR_materials_unlit`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_unlit/)\n * defines an unlit shading model for use in glTF 2.0 materials.\n *\n * ![Illustration](/media/extensions/khr-materials-unlit.png)\n *\n * > _**Figure:** Unlit materials are useful for flat shading, stylized effects, and for improving\n * > performance on mobile devices. Source: [Model by Hayden VanEarden](https://sketchfab.com/3d-models/summertime-kirby-c5711316103a4d67a62c34cfe8710938)._\n *\n * Unlit (also \"Shadeless\" or \"Constant\") materials provide a simple alternative to the Physically\n * Based Rendering (PBR) shading models provided by the core specification. Unlit materials are\n * often useful for cheaper rendering on performance-contrained devices, e.g. mobile phones.\n * Additionally, unlit materials can be very useful in achieving stylized, non-photo-realistic\n * effects like hand painted illustrative styles or baked toon shaders.\n *\n * Properties:\n * - {@link Unlit}\n *\n * ### Example\n *\n * The `KHRMaterialsUnlit` class provides a single {@link ExtensionProperty} type, `Unlit`, which may\n * be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsUnlit, Unlit } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const unlitExtension = document.createExtension(KHRMaterialsUnlit);\n *\n * // Create an Unlit property.\n * const unlit = unlitExtension.createUnlit();\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_unlit', unlit);\n * ```\n */\nexport class KHRMaterialsUnlit extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_UNLIT = KHR_MATERIALS_UNLIT;\n\tpublic readonly extensionName: typeof KHR_MATERIALS_UNLIT = KHR_MATERIALS_UNLIT;\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.MESH];\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.MESH];\n\n\t/** Creates a new Unlit property for use on a {@link Material}. */\n\tpublic createUnlit(): Unlit {\n\t\treturn new Unlit(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(_context: WriterContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst materialDefs = context.jsonDoc.json.materials || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_UNLIT]) {\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_UNLIT, this.createUnlit());\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tif (material.getExtension<Unlit>(KHR_MATERIALS_UNLIT)) {\n\t\t\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\t\t\t\tmaterialDef.extensions[KHR_MATERIALS_UNLIT] = {};\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import { ExtensionProperty, type IProperty, type Material, type Nullable, RefSet } from '@gltf-transform/core';\nimport { KHR_MATERIALS_VARIANTS } from '../constants.js';\nimport type { Variant } from './variant.js';\n\ninterface IMapping extends IProperty {\n\tmaterial: Material;\n\tvariants: RefSet<Variant>;\n}\n\n/**\n * Maps {@link Variant}s to {@link Material}s. See {@link KHRMaterialsVariants}.\n */\nexport class Mapping extends ExtensionProperty<IMapping> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_VARIANTS = KHR_MATERIALS_VARIANTS;\n\tpublic declare extensionName: typeof KHR_MATERIALS_VARIANTS;\n\tpublic declare propertyType: 'Mapping';\n\tpublic declare parentTypes: ['MappingList'];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_VARIANTS;\n\t\tthis.propertyType = 'Mapping';\n\t\tthis.parentTypes = ['MappingList'];\n\t}\n\n\tprotected getDefaults(): Nullable<IMapping> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, { material: null, variants: new RefSet<Variant>() });\n\t}\n\n\t/** The {@link Material} designated for this {@link Primitive}, under the given variants. */\n\tpublic getMaterial(): Material | null {\n\t\treturn this.getRef('material');\n\t}\n\n\t/** The {@link Material} designated for this {@link Primitive}, under the given variants. */\n\tpublic setMaterial(material: Material | null): this {\n\t\treturn this.setRef('material', material);\n\t}\n\n\t/** Adds a {@link Variant} to this mapping. */\n\tpublic addVariant(variant: Variant): this {\n\t\treturn this.addRef('variants', variant);\n\t}\n\n\t/** Removes a {@link Variant} from this mapping. */\n\tpublic removeVariant(variant: Variant): this {\n\t\treturn this.removeRef('variants', variant);\n\t}\n\n\t/** Lists {@link Variant}s in this mapping. */\n\tpublic listVariants(): Variant[] {\n\t\treturn this.listRefs('variants');\n\t}\n}\n","import { ExtensionProperty, type IProperty, type Nullable, PropertyType, RefSet } from '@gltf-transform/core';\nimport { KHR_MATERIALS_VARIANTS } from '../constants.js';\nimport type { Mapping } from './mapping.js';\n\ninterface IMappingList extends IProperty {\n\tmappings: RefSet<Mapping>;\n}\n\n/**\n * List of material variant {@link Mapping}s. See {@link KHRMaterialsVariants}.\n */\nexport class MappingList extends ExtensionProperty<IMappingList> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_VARIANTS = KHR_MATERIALS_VARIANTS;\n\tpublic declare extensionName: typeof KHR_MATERIALS_VARIANTS;\n\tpublic declare propertyType: 'MappingList';\n\tpublic declare parentTypes: [PropertyType.PRIMITIVE];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_VARIANTS;\n\t\tthis.propertyType = 'MappingList';\n\t\tthis.parentTypes = [PropertyType.PRIMITIVE];\n\t}\n\n\tprotected getDefaults(): Nullable<IMappingList> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, { mappings: new RefSet<Mapping>() });\n\t}\n\n\t/** Adds a {@link Mapping} to this mapping. */\n\tpublic addMapping(mapping: Mapping): this {\n\t\treturn this.addRef('mappings', mapping);\n\t}\n\n\t/** Removes a {@link Mapping} from the list for this {@link Primitive}. */\n\tpublic removeMapping(mapping: Mapping): this {\n\t\treturn this.removeRef('mappings', mapping);\n\t}\n\n\t/** Lists {@link Mapping}s in this {@link Primitive}. */\n\tpublic listMappings(): Mapping[] {\n\t\treturn this.listRefs('mappings');\n\t}\n}\n","import { ExtensionProperty } from '@gltf-transform/core';\nimport { KHR_MATERIALS_VARIANTS } from '../constants.js';\n\n/**\n * Defines a variant of a {@link Material}. See {@link KHRMaterialsVariants}.\n */\nexport class Variant extends ExtensionProperty {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_VARIANTS = KHR_MATERIALS_VARIANTS;\n\tpublic declare extensionName: typeof KHR_MATERIALS_VARIANTS;\n\tpublic declare propertyType: 'Variant';\n\tpublic declare parentTypes: ['MappingList'];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_VARIANTS;\n\t\tthis.propertyType = 'Variant';\n\t\tthis.parentTypes = ['MappingList'];\n\t}\n}\n","import { Extension, type ReaderContext, type WriterContext } from '@gltf-transform/core';\nimport { KHR_MATERIALS_VARIANTS } from '../constants.js';\nimport { Mapping } from './mapping.js';\nimport { MappingList } from './mapping-list.js';\nimport { Variant } from './variant.js';\n\ninterface VariantsRootDef {\n\tvariants: VariantDef[];\n}\n\ninterface VariantDef {\n\tname?: string;\n}\n\ninterface VariantPrimDef {\n\tmappings: VariantMappingDef[];\n}\n\ninterface VariantMappingDef {\n\tmaterial: number;\n\tvariants: number[];\n}\n\n/**\n * [`KHR_materials_variants`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_variants/)\n * defines alternate {@link Material} states for any {@link Primitive} in the scene.\n *\n * ![Illustration](/media/extensions/khr-materials-variants.jpg)\n *\n * > _**Figure:** A sneaker, in three material variants. Source: Khronos Group._\n *\n * Uses include product configurators, night/day states, healthy/damaged states, etc. The\n * `KHRMaterialsVariants` class provides three {@link ExtensionProperty} types: `Variant`, `Mapping`,\n * and `MappingList`. When attached to {@link Primitive} properties, these offer flexible ways of\n * defining the variants available to an application. Triggering a variant is out of scope of this\n * extension, but could be handled in the application with a UI dropdown, particular game states,\n * and so on.\n *\n * Mesh geometry cannot be changed by this extension, although another extension\n * (tentative: `KHR_mesh_variants`) is under consideration by the Khronos Group, for that purpose.\n *\n * Properties:\n * - {@link Variant}\n * - {@link Mapping}\n * - {@link MappingList}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsVariants } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const variantExtension = document.createExtension(KHRMaterialsVariants);\n *\n * // Create some Variant states.\n * const healthyVariant = variantExtension.createVariant('Healthy');\n * const damagedVariant = variantExtension.createVariant('Damaged');\n *\n * // Create mappings from a Variant state to a Material.\n * const healthyMapping = variantExtension.createMapping()\n * \t.addVariant(healthyVariant)\n * \t.setMaterial(healthyMat);\n * const damagedMapping = variantExtension.createMapping()\n * \t.addVariant(damagedVariant)\n * \t.setMaterial(damagedMat);\n *\n * // Attach the mappings to a Primitive.\n * primitive.setExtension(\n * \t'KHR_materials_variants',\n * \tvariantExtension.createMappingList()\n * \t\t.addMapping(healthyMapping)\n * \t\t.addMapping(damagedMapping)\n * );\n * ```\n *\n * A few notes about this extension:\n *\n * 1. Viewers that don't recognized this extension will show the default material for each primitive\n * \t instead, so assign that material accordingly. This material can be — but doesn't have to be —\n * \t associated with one of the available variants.\n * 2. Mappings can list multiple Variants. In that case, the first Mapping containing an active\n * \t Variant will be chosen by the viewer.\n * 3. Variant names are how these states are identified, so choose informative names.\n * 4. When writing the file to an unpacked `.gltf`, instead of an embedded `.glb`, viewers will have\n * \t the option of downloading only textures associated with the default state, and lazy-loading\n * \t any textures for inactive Variants only when they are needed.\n */\nexport class KHRMaterialsVariants extends Extension {\n\tpublic readonly extensionName: typeof KHR_MATERIALS_VARIANTS = KHR_MATERIALS_VARIANTS;\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_VARIANTS = KHR_MATERIALS_VARIANTS;\n\n\t/** Creates a new MappingList property. */\n\tpublic createMappingList(): MappingList {\n\t\treturn new MappingList(this.document.getGraph());\n\t}\n\n\t/** Creates a new Variant property. */\n\tpublic createVariant(name = ''): Variant {\n\t\treturn new Variant(this.document.getGraph(), name);\n\t}\n\n\t/** Creates a new Mapping property. */\n\tpublic createMapping(): Mapping {\n\t\treturn new Mapping(this.document.getGraph());\n\t}\n\n\t/** Lists all Variants on the current Document. */\n\tpublic listVariants(): Variant[] {\n\t\treturn Array.from(this.properties).filter((prop) => prop instanceof Variant) as Variant[];\n\t}\n\n\t/** @hidden */\n\tpublic read(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tif (!jsonDoc.json.extensions || !jsonDoc.json.extensions[KHR_MATERIALS_VARIANTS]) return this;\n\n\t\t// Read all top-level variant names.\n\t\tconst variantsRootDef = jsonDoc.json.extensions[KHR_MATERIALS_VARIANTS] as VariantsRootDef;\n\t\tconst variantDefs = variantsRootDef.variants || [];\n\t\tconst variants = variantDefs.map((variantDef) => this.createVariant().setName(variantDef.name || ''));\n\n\t\t// For each mesh primitive, read its material/variant mappings.\n\t\tconst meshDefs = jsonDoc.json.meshes || [];\n\t\tmeshDefs.forEach((meshDef, meshIndex) => {\n\t\t\tconst mesh = context.meshes[meshIndex];\n\t\t\tconst primDefs = meshDef.primitives || [];\n\n\t\t\tprimDefs.forEach((primDef, primIndex) => {\n\t\t\t\tif (!primDef.extensions || !primDef.extensions[KHR_MATERIALS_VARIANTS]) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst mappingList = this.createMappingList();\n\n\t\t\t\tconst variantPrimDef = primDef.extensions[KHR_MATERIALS_VARIANTS] as VariantPrimDef;\n\t\t\t\tfor (const mappingDef of variantPrimDef.mappings) {\n\t\t\t\t\tconst mapping = this.createMapping();\n\n\t\t\t\t\tif (mappingDef.material !== undefined) {\n\t\t\t\t\t\tmapping.setMaterial(context.materials[mappingDef.material]);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const variantIndex of mappingDef.variants || []) {\n\t\t\t\t\t\tmapping.addVariant(variants[variantIndex]);\n\t\t\t\t\t}\n\n\t\t\t\t\tmappingList.addMapping(mapping);\n\t\t\t\t}\n\n\t\t\t\tmesh.listPrimitives()[primIndex].setExtension(KHR_MATERIALS_VARIANTS, mappingList);\n\t\t\t});\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tconst variants = this.listVariants();\n\t\tif (!variants.length) return this;\n\n\t\t// Write all top-level variant names.\n\t\tconst variantDefs = [];\n\t\tconst variantIndexMap = new Map<Variant, number>();\n\t\tfor (const variant of variants) {\n\t\t\tvariantIndexMap.set(variant, variantDefs.length);\n\t\t\tvariantDefs.push(context.createPropertyDef(variant));\n\t\t}\n\n\t\t// For each mesh primitive, write its material/variant mappings.\n\t\tfor (const mesh of this.document.getRoot().listMeshes()) {\n\t\t\tconst meshIndex = context.meshIndexMap.get(mesh)!;\n\n\t\t\tmesh.listPrimitives().forEach((prim, primIndex) => {\n\t\t\t\tconst mappingList = prim.getExtension<MappingList>(KHR_MATERIALS_VARIANTS);\n\t\t\t\tif (!mappingList) return;\n\n\t\t\t\tconst primDef = context.jsonDoc.json.meshes![meshIndex].primitives[primIndex];\n\n\t\t\t\tconst mappingDefs = mappingList.listMappings().map((mapping) => {\n\t\t\t\t\tconst mappingDef = context.createPropertyDef(mapping) as VariantMappingDef;\n\n\t\t\t\t\tconst material = mapping.getMaterial();\n\t\t\t\t\tif (material) {\n\t\t\t\t\t\tmappingDef.material = context.materialIndexMap.get(material)!;\n\t\t\t\t\t}\n\n\t\t\t\t\tmappingDef.variants = mapping.listVariants().map((variant) => variantIndexMap.get(variant)!);\n\n\t\t\t\t\treturn mappingDef;\n\t\t\t\t});\n\n\t\t\t\tprimDef.extensions = primDef.extensions || {};\n\t\t\t\tprimDef.extensions[KHR_MATERIALS_VARIANTS] = { mappings: mappingDefs };\n\t\t\t});\n\t\t}\n\n\t\tjsonDoc.json.extensions = jsonDoc.json.extensions || {};\n\t\tjsonDoc.json.extensions[KHR_MATERIALS_VARIANTS] = { variants: variantDefs };\n\n\t\treturn this;\n\t}\n}\n","import {\n\tExtensionProperty,\n\ttype IProperty,\n\ttype Nullable,\n\tPropertyType,\n\ttype Texture,\n\tTextureChannel,\n\tTextureInfo,\n\ttype vec3,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_VOLUME } from '../constants.js';\n\ninterface IVolume extends IProperty {\n\tthicknessFactor: number;\n\tthicknessTexture: Texture;\n\tthicknessTextureInfo: TextureInfo;\n\tattenuationDistance: number;\n\tattenuationColor: vec3;\n}\n\nconst { G } = TextureChannel;\n\n/**\n * Defines volume on a PBR {@link Material}. See {@link KHRMaterialsVolume}.\n */\nexport class Volume extends ExtensionProperty<IVolume> {\n\tpublic static EXTENSION_NAME: typeof KHR_MATERIALS_VOLUME = KHR_MATERIALS_VOLUME;\n\tpublic declare extensionName: typeof KHR_MATERIALS_VOLUME;\n\tpublic declare propertyType: 'Volume';\n\tpublic declare parentTypes: [PropertyType.MATERIAL];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_MATERIALS_VOLUME;\n\t\tthis.propertyType = 'Volume';\n\t\tthis.parentTypes = [PropertyType.MATERIAL];\n\t}\n\n\tprotected getDefaults(): Nullable<IVolume> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, {\n\t\t\tthicknessFactor: 0.0,\n\t\t\tthicknessTexture: null,\n\t\t\tthicknessTextureInfo: new TextureInfo(this.graph, 'thicknessTexture'),\n\t\t\tattenuationDistance: Infinity,\n\t\t\tattenuationColor: [1.0, 1.0, 1.0] as vec3,\n\t\t});\n\t}\n\n\t/**********************************************************************************************\n\t * Thickness.\n\t */\n\n\t/**\n\t * Thickness of the volume beneath the surface in meters in the local coordinate system of the\n\t * node. If the value is 0 the material is thin-walled. Otherwise the material is a volume\n\t * boundary. The doubleSided property has no effect on volume boundaries.\n\t */\n\tpublic getThicknessFactor(): number {\n\t\treturn this.get('thicknessFactor');\n\t}\n\n\t/**\n\t * Thickness of the volume beneath the surface in meters in the local coordinate system of the\n\t * node. If the value is 0 the material is thin-walled. Otherwise the material is a volume\n\t * boundary. The doubleSided property has no effect on volume boundaries.\n\t */\n\tpublic setThicknessFactor(factor: number): this {\n\t\treturn this.set('thicknessFactor', factor);\n\t}\n\n\t/**\n\t * Texture that defines the thickness, stored in the G channel. This will be multiplied by\n\t * thicknessFactor.\n\t */\n\tpublic getThicknessTexture(): Texture | null {\n\t\treturn this.getRef('thicknessTexture');\n\t}\n\n\t/**\n\t * Settings affecting the material's use of its thickness texture. If no texture is attached,\n\t * {@link TextureInfo} is `null`.\n\t */\n\tpublic getThicknessTextureInfo(): TextureInfo | null {\n\t\treturn this.getRef('thicknessTexture') ? this.getRef('thicknessTextureInfo') : null;\n\t}\n\n\t/**\n\t * Texture that defines the thickness, stored in the G channel. This will be multiplied by\n\t * thicknessFactor.\n\t */\n\tpublic setThicknessTexture(texture: Texture | null): this {\n\t\treturn this.setRef('thicknessTexture', texture, { channels: G });\n\t}\n\n\t/**********************************************************************************************\n\t * Attenuation.\n\t */\n\n\t/**\n\t * Density of the medium given as the average distance in meters that light travels in the\n\t * medium before interacting with a particle.\n\t */\n\tpublic getAttenuationDistance(): number {\n\t\treturn this.get('attenuationDistance');\n\t}\n\n\t/**\n\t * Density of the medium given as the average distance in meters that light travels in the\n\t * medium before interacting with a particle.\n\t */\n\tpublic setAttenuationDistance(distance: number): this {\n\t\treturn this.set('attenuationDistance', distance);\n\t}\n\n\t/**\n\t * Color (linear) that white light turns into due to absorption when reaching the attenuation\n\t * distance.\n\t */\n\tpublic getAttenuationColor(): vec3 {\n\t\treturn this.get('attenuationColor');\n\t}\n\n\t/**\n\t * Color (linear) that white light turns into due to absorption when reaching the attenuation\n\t * distance.\n\t */\n\tpublic setAttenuationColor(color: vec3): this {\n\t\treturn this.set('attenuationColor', color);\n\t}\n}\n","import {\n\tExtension,\n\ttype GLTF,\n\tMathUtils,\n\tPropertyType,\n\ttype ReaderContext,\n\ttype vec3,\n\ttype WriterContext,\n} from '@gltf-transform/core';\nimport { KHR_MATERIALS_VOLUME } from '../constants.js';\nimport { Volume } from './volume.js';\n\ninterface VolumeDef {\n\tthicknessFactor?: number;\n\tthicknessTexture?: GLTF.ITextureInfo;\n\tattenuationDistance?: number;\n\tattenuationColor?: vec3;\n}\n\n/**\n * [KHR_materials_volume](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_volume/)\n * adds refraction, absorption, or scattering to a glTF PBR material already using transmission or\n * translucency.\n *\n * ![Illustration](/media/extensions/khr-materials-volume.png)\n *\n * > _**Figure:** Base color changes the amount of light passing through the volume boundary\n * > (left). The overall color of the object is the same everywhere, as if the object is covered\n * > with a colored, transparent foil. Absorption changes the amount of light traveling through the\n * > volume (right). The overall color depends on the distance the light traveled through it; at\n * > small distances (tail of the dragon) less light is absorbed and the color is brighter than at\n * > large distances. Source: Khronos Group._\n *\n * By default, a glTF 2.0 material describes the scattering properties of a surface enclosing an\n * infinitely thin volume. The surface defined by the mesh represents a thin wall. The volume\n * extension makes it possible to turn the surface into an interface between volumes. The mesh to\n * which the material is attached defines the boundaries of an homogeneous medium and therefore must\n * be manifold. Volumes provide effects like refraction, absorption and scattering. Scattering\n * effects will require future (TBD) extensions.\n *\n * The volume extension must be combined with {@link KHRMaterialsTransmission} or\n * `KHR_materials_translucency` in order to define entry of light into the volume.\n *\n * Properties:\n * - {@link Volume}\n *\n * ### Example\n *\n * The `KHRMaterialsVolume` class provides a single {@link ExtensionProperty} type, `Volume`, which\n * may be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsVolume, Volume } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const volumeExtension = document.createExtension(KHRMaterialsVolume);\n *\n * // Create a Volume property.\n * const volume = volumeExtension.createVolume()\n * \t.setThicknessFactor(1.0)\n * \t.setThicknessTexture(texture)\n * \t.setAttenuationDistance(1.0)\n * \t.setAttenuationColorFactor([1, 0.5, 0.5]);\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_volume', volume);\n * ```\n *\n * A thickness texture is required in most realtime renderers, and can be baked in software such as\n * Blender or Substance Painter. When `thicknessFactor = 0`, all volumetric effects are disabled.\n */\nexport class KHRMaterialsVolume extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MATERIALS_VOLUME = KHR_MATERIALS_VOLUME;\n\tpublic readonly extensionName: typeof KHR_MATERIALS_VOLUME = KHR_MATERIALS_VOLUME;\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.MESH];\n\tpublic readonly prewriteTypes: PropertyType[] = [PropertyType.MESH];\n\n\t/** Creates a new Volume property for use on a {@link Material}. */\n\tpublic createVolume(): Volume {\n\t\treturn new Volume(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(_context: WriterContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst materialDefs = jsonDoc.json.materials || [];\n\t\tconst textureDefs = jsonDoc.json.textures || [];\n\t\tmaterialDefs.forEach((materialDef, materialIndex) => {\n\t\t\tif (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_VOLUME]) {\n\t\t\t\tconst volume = this.createVolume();\n\t\t\t\tcontext.materials[materialIndex].setExtension(KHR_MATERIALS_VOLUME, volume);\n\n\t\t\t\tconst volumeDef = materialDef.extensions[KHR_MATERIALS_VOLUME] as VolumeDef;\n\n\t\t\t\t// Factors.\n\n\t\t\t\tif (volumeDef.thicknessFactor !== undefined) {\n\t\t\t\t\tvolume.setThicknessFactor(volumeDef.thicknessFactor);\n\t\t\t\t}\n\t\t\t\tif (volumeDef.attenuationDistance !== undefined) {\n\t\t\t\t\tvolume.setAttenuationDistance(volumeDef.attenuationDistance);\n\t\t\t\t}\n\t\t\t\tif (volumeDef.attenuationColor !== undefined) {\n\t\t\t\t\tvolume.setAttenuationColor(volumeDef.attenuationColor);\n\t\t\t\t}\n\n\t\t\t\t// Textures.\n\n\t\t\t\tif (volumeDef.thicknessTexture !== undefined) {\n\t\t\t\t\tconst textureInfoDef = volumeDef.thicknessTexture;\n\t\t\t\t\tconst texture = context.textures[textureDefs[textureInfoDef.index].source!];\n\t\t\t\t\tvolume.setThicknessTexture(texture);\n\t\t\t\t\tcontext.setTextureInfo(volume.getThicknessTextureInfo()!, textureInfoDef);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic prewrite(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listMaterials()\n\t\t\t.forEach((material) => {\n\t\t\t\tconst volume = material.getExtension<Volume>(KHR_MATERIALS_VOLUME);\n\t\t\t\tif (volume) {\n\t\t\t\t\tconst materialIndex = context.materialIndexMap.get(material)!;\n\t\t\t\t\tconst materialDef = jsonDoc.json.materials![materialIndex];\n\t\t\t\t\tmaterialDef.extensions = materialDef.extensions || {};\n\n\t\t\t\t\t// Factors.\n\n\t\t\t\t\tconst volumeDef = (materialDef.extensions[KHR_MATERIALS_VOLUME] = {} as VolumeDef);\n\n\t\t\t\t\tif (volume.getThicknessFactor() > 0) {\n\t\t\t\t\t\tvolumeDef.thicknessFactor = volume.getThicknessFactor();\n\t\t\t\t\t}\n\t\t\t\t\tif (Number.isFinite(volume.getAttenuationDistance())) {\n\t\t\t\t\t\tvolumeDef.attenuationDistance = volume.getAttenuationDistance();\n\t\t\t\t\t}\n\t\t\t\t\tif (!MathUtils.eq(volume.getAttenuationColor(), [1, 1, 1])) {\n\t\t\t\t\t\tvolumeDef.attenuationColor = volume.getAttenuationColor();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Textures.\n\n\t\t\t\t\tif (volume.getThicknessTexture()) {\n\t\t\t\t\t\tconst texture = volume.getThicknessTexture()!;\n\t\t\t\t\t\tconst textureInfo = volume.getThicknessTextureInfo()!;\n\t\t\t\t\t\tvolumeDef.thicknessTexture = context.createTextureInfoDef(texture, textureInfo);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import { Extension, type ReaderContext, type WriterContext } from '@gltf-transform/core';\nimport { KHR_MESH_QUANTIZATION } from '../constants.js';\n\n/**\n * [`KHR_mesh_quantization`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/)\n * expands allowed component types for vertex attributes to include 16- and 8-bit storage.\n *\n * Quantization provides a memory/precision tradeoff — depending on the application needs, 16-bit or\n * 8-bit storage can be sufficient for mesh geometry, at 1/2 or 1/4 the size. For example, a 10x10\n * mesh might be written to a uint16 {@link Accessor}, with values `0–65536`, normalized to be\n * interpreted as `0–1`. With an additional 10x scale on any node {@link Node} instantiating the\n * quantized {@link Mesh}, the model retains its original scale with a minimal quality loss and\n * up to 50% file size reduction.\n *\n * Defining no {@link ExtensionProperty} types, this {@link Extension} is simply attached to the\n * {@link Document}, and affects the entire Document by allowing more flexible use of\n * {@link Accessor} types for vertex attributes. Without the Extension, the same use of these data\n * types would yield an invalid glTF document, under the stricter core glTF specification.\n *\n * Properties:\n * - N/A\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMeshQuantization } from '@gltf-transform/extensions';\n * import { quantize } from '@gltf-transform/functions';\n *\n * // Create an Extension attached to the Document.\n * const quantizationExtension = document.createExtension(KHRMeshQuantization).setRequired(true);\n *\n * // Use Uint16Array, Uint8Array, Int16Array, and Int8Array in vertex accessors manually,\n * // or apply the provided quantize() function to compute quantized accessors automatically:\n * await document.transform(quantize({\n * \tquantizePosition: 16,\n * \tquantizeNormal: 12,\n * \tquantizeTexcoord: 14\n * }));\n * ```\n *\n * For more documentation about automatic quantization, see the {@link quantize} function.\n */\nexport class KHRMeshQuantization extends Extension {\n\tpublic readonly extensionName: typeof KHR_MESH_QUANTIZATION = KHR_MESH_QUANTIZATION;\n\tpublic static readonly EXTENSION_NAME: typeof KHR_MESH_QUANTIZATION = KHR_MESH_QUANTIZATION;\n\n\t/** @hidden */\n\tread(_: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\twrite(_: WriterContext): this {\n\t\treturn this;\n\t}\n}\n","import { ExtensionProperty, type IProperty, type Nullable, PropertyType } from '@gltf-transform/core';\nimport { KHR_NODE_VISIBILITY } from '../constants.js';\n\ninterface IVisibility extends IProperty {\n\tvisible: boolean;\n}\n\n/**\n * Defines visibility of a {@link Node} and its descendants. See {@link KHRNodeVisibility}.\n *\n * @experimental KHR_node_visibility is not yet ratified by the Khronos Group.\n */\nexport class Visibility extends ExtensionProperty<IVisibility> {\n\tpublic static EXTENSION_NAME: typeof KHR_NODE_VISIBILITY = KHR_NODE_VISIBILITY;\n\tpublic declare extensionName: typeof KHR_NODE_VISIBILITY;\n\tpublic declare propertyType: 'Visibility';\n\tpublic declare parentTypes: [PropertyType.NODE];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_NODE_VISIBILITY;\n\t\tthis.propertyType = 'Visibility';\n\t\tthis.parentTypes = [PropertyType.NODE];\n\t}\n\n\tprotected getDefaults(): Nullable<IVisibility> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, { visible: true });\n\t}\n\n\t/** Visibility of node and descendants. */\n\tpublic getVisible(): boolean {\n\t\treturn this.get('visible');\n\t}\n\n\t/** Visibility of node and descendants. */\n\tpublic setVisible(visible: boolean): this {\n\t\treturn this.set('visible', visible);\n\t}\n}\n","import { Extension, type ReaderContext, type WriterContext } from '@gltf-transform/core';\nimport { KHR_NODE_VISIBILITY } from '../constants.js';\nimport { Visibility } from './visibility.js';\n\ninterface VisibilityDef {\n\tvisible?: boolean;\n}\n\n/**\n * [KHR_node_visibility](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_node_visibility/)\n * defines visibility of a {@link Node} and its descendants.\n *\n * Properties:\n * - {@link Visibility}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRNodeVisibility, Visibility } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const visibilityExtension = document.createExtension(KHRNodeVisibility);\n *\n * // Create Visibility property.\n * const visibility = visibilityExtension.createVisibility().setVisible(false);\n *\n * // Assign to a Node.\n * node.setExtension('KHR_node_visibility', visibility);\n * ```\n *\n * @experimental KHR_node_visibility is not yet ratified by the Khronos Group.\n */\nexport class KHRNodeVisibility extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_NODE_VISIBILITY = KHR_NODE_VISIBILITY;\n\tpublic readonly extensionName: typeof KHR_NODE_VISIBILITY = KHR_NODE_VISIBILITY;\n\n\t/** Creates a new Visibility property for use on a {@link Node}. */\n\tpublic createVisibility(): Visibility {\n\t\treturn new Visibility(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(context: ReaderContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\t\tconst nodeDefs = jsonDoc.json.nodes || [];\n\n\t\tnodeDefs.forEach((nodeDef, nodeIndex) => {\n\t\t\tif (nodeDef.extensions && nodeDef.extensions[KHR_NODE_VISIBILITY]) {\n\t\t\t\tconst visibility = this.createVisibility();\n\t\t\t\tcontext.nodes[nodeIndex].setExtension(KHR_NODE_VISIBILITY, visibility);\n\t\t\t\tconst visibilityDef = nodeDef.extensions[KHR_NODE_VISIBILITY] as VisibilityDef;\n\t\t\t\tif (visibilityDef.visible !== undefined) {\n\t\t\t\t\tvisibility.setVisible(visibilityDef.visible);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tfor (const node of this.document.getRoot().listNodes()) {\n\t\t\tconst visibility = node.getExtension<Visibility>(KHR_NODE_VISIBILITY);\n\t\t\tif (!visibility) continue;\n\n\t\t\tconst nodeIndex = context.nodeIndexMap.get(node)!;\n\t\t\tconst nodeDef = jsonDoc.json.nodes![nodeIndex];\n\t\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\t\tnodeDef.extensions[KHR_NODE_VISIBILITY] = { visible: visibility.getVisible() };\n\t\t}\n\n\t\treturn this;\n\t}\n}\n","import {\n\tExtension,\n\tImageUtils,\n\ttype ImageUtilsFormat,\n\tPropertyType,\n\ttype ReaderContext,\n\ttype vec2,\n\ttype WriterContext,\n} from '@gltf-transform/core';\nimport { KHR_DF_MODEL_ETC1S, KHR_DF_MODEL_UASTC, read as readKTX } from 'ktx-parse';\nimport { KHR_TEXTURE_BASISU } from '../constants.js';\n\ninterface BasisuDef {\n\tsource: number;\n}\n\nclass KTX2ImageUtils implements ImageUtilsFormat {\n\tmatch(array: Uint8Array): boolean {\n\t\treturn (\n\t\t\tarray[0] === 0xab &&\n\t\t\tarray[1] === 0x4b &&\n\t\t\tarray[2] === 0x54 &&\n\t\t\tarray[3] === 0x58 &&\n\t\t\tarray[4] === 0x20 &&\n\t\t\tarray[5] === 0x32 &&\n\t\t\tarray[6] === 0x30 &&\n\t\t\tarray[7] === 0xbb &&\n\t\t\tarray[8] === 0x0d &&\n\t\t\tarray[9] === 0x0a &&\n\t\t\tarray[10] === 0x1a &&\n\t\t\tarray[11] === 0x0a\n\t\t);\n\t}\n\tgetSize(array: Uint8Array): vec2 {\n\t\tconst container = readKTX(array);\n\t\treturn [container.pixelWidth, container.pixelHeight];\n\t}\n\tgetChannels(array: Uint8Array): number {\n\t\tconst container = readKTX(array);\n\t\tconst dfd = container.dataFormatDescriptor[0];\n\t\tif (dfd.colorModel === KHR_DF_MODEL_ETC1S) {\n\t\t\treturn dfd.samples.length === 2 && (dfd.samples[1].channelType & 0xf) === 15 ? 4 : 3;\n\t\t} else if (dfd.colorModel === KHR_DF_MODEL_UASTC) {\n\t\t\treturn (dfd.samples[0].channelType & 0xf) === 3 ? 4 : 3;\n\t\t}\n\t\tthrow new Error(`Unexpected KTX2 colorModel, \"${dfd.colorModel}\".`);\n\t}\n\tgetVRAMByteLength(array: Uint8Array): number {\n\t\tconst container = readKTX(array);\n\t\tconst hasAlpha = this.getChannels(array) > 3;\n\n\t\tlet uncompressedBytes = 0;\n\t\tfor (let i = 0; i < container.levels.length; i++) {\n\t\t\tconst level = container.levels[i];\n\n\t\t\t// Use level.uncompressedByteLength for UASTC; for ETC1S it's 0.\n\t\t\tif (level.uncompressedByteLength) {\n\t\t\t\tuncompressedBytes += level.uncompressedByteLength;\n\t\t\t} else {\n\t\t\t\tconst levelWidth = Math.max(1, Math.floor(container.pixelWidth / Math.pow(2, i)));\n\t\t\t\tconst levelHeight = Math.max(1, Math.floor(container.pixelHeight / Math.pow(2, i)));\n\t\t\t\tconst blockSize = hasAlpha ? 16 : 8;\n\t\t\t\tuncompressedBytes += (levelWidth / 4) * (levelHeight / 4) * blockSize;\n\t\t\t}\n\t\t}\n\n\t\treturn uncompressedBytes;\n\t}\n}\n\n/**\n * [`KHR_texture_basisu`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu)\n * enables KTX2 GPU textures with Basis Universal supercompression for any material texture.\n *\n * GPU texture formats, unlike traditional image formats, remain compressed in GPU memory. As a\n * result, they (1) upload to the GPU much more quickly, and (2) require much less GPU memory. In\n * certain cases they may also have smaller filesizes than PNG or JPEG textures, but this is not\n * guaranteed. GPU textures often require more careful tuning during compression to maintain image\n * quality, but this extra effort is worthwhile for applications that need to maintain a smooth\n * framerate while uploading images, or where GPU memory is limited.\n *\n * Defining no {@link ExtensionProperty} types, this {@link Extension} is simply attached to the\n * {@link Document}, and affects the entire Document by allowing use of the `image/ktx2` MIME type\n * and passing KTX2 image data to the {@link Texture.setImage} method. Without the Extension, the\n * same MIME types and image data would yield an invalid glTF document, under the stricter core glTF\n * specification.\n *\n * Properties:\n * - N/A\n *\n * ### Example\n *\n * ```typescript\n * import { KHRTextureBasisu } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const basisuExtension = document.createExtension(KHRTextureBasisu)\n * \t.setRequired(true);\n * document.createTexture('MyCompressedTexture')\n * \t.setMimeType('image/ktx2')\n * \t.setImage(fs.readFileSync('my-texture.ktx2'));\n * ```\n *\n * Compression is not done automatically when adding the extension as shown above — you must\n * compress the image data first, then pass the `.ktx2` payload to {@link Texture.setImage}. The\n * glTF Transform CLI has functions to help with this, or any similar KTX2-capable\n * utility will work.\n *\n * When the `KHR_texture_basisu` extension is added to a file by glTF Transform, the extension\n * should always be required. This tool does not support writing assets that \"fall back\" to optional\n * PNG or JPEG image data.\n *\n * > _**NOTICE:** Compressing some textures — particularly 3-component (RGB) normal maps, and\n * > occlusion/roughness/metalness maps, may give poor results with the ETC1S compression option.\n * > These issues can often be avoided with the larger UASTC compression option, or by upscaling the\n * > texture before compressing it.\n * >\n * > For best results when authoring new textures, use\n * > [texture dilation](https://docs.substance3d.com/spdoc/padding-134643719.html) and minimize\n * > prominent UV seams._\n */\nexport class KHRTextureBasisu extends Extension {\n\tpublic static readonly EXTENSION_NAME: typeof KHR_TEXTURE_BASISU = KHR_TEXTURE_BASISU;\n\tpublic readonly extensionName: typeof KHR_TEXTURE_BASISU = KHR_TEXTURE_BASISU;\n\t/** @hidden */\n\tpublic readonly prereadTypes: PropertyType[] = [PropertyType.TEXTURE];\n\n\t/** @hidden */\n\tpublic static register(): void {\n\t\tImageUtils.registerFormat('image/ktx2', new KTX2ImageUtils());\n\t}\n\n\t/** @hidden */\n\tpublic preread(context: ReaderContext): this {\n\t\tif (context.jsonDoc.json.textures) {\n\t\t\tcontext.jsonDoc.json.textures!.forEach((textureDef) => {\n\t\t\t\tif (textureDef.extensions && textureDef.extensions[KHR_TEXTURE_BASISU]) {\n\t\t\t\t\tconst basisuDef = textureDef.extensions[KHR_TEXTURE_BASISU] as BasisuDef;\n\t\t\t\t\ttextureDef.source = basisuDef.source;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic read(_context: ReaderContext): this {\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(context: WriterContext): this {\n\t\tconst jsonDoc = context.jsonDoc;\n\n\t\tthis.document\n\t\t\t.getRoot()\n\t\t\t.listTextures()\n\t\t\t.forEach((texture) => {\n\t\t\t\tif (texture.getMimeType() === 'image/ktx2') {\n\t\t\t\t\tconst imageIndex = context.imageIndexMap.get(texture);\n\t\t\t\t\tjsonDoc.json.textures!.forEach((textureDef) => {\n\t\t\t\t\t\tif (textureDef.source === imageIndex) {\n\t\t\t\t\t\t\ttextureDef.extensions = textureDef.extensions || {};\n\t\t\t\t\t\t\ttextureDef.extensions[KHR_TEXTURE_BASISU] = { source: textureDef.source };\n\t\t\t\t\t\t\tdelete textureDef.source;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\treturn this;\n\t}\n}\n","import { ExtensionProperty, type IProperty, type Nullable, PropertyType, type vec2 } from '@gltf-transform/core';\nimport { KHR_TEXTURE_TRANSFORM } from '../constants.js';\n\ninterface ITransform extends IProperty {\n\toffset: vec2;\n\trotation: number;\n\tscale: vec2;\n\ttexCoord: number | null; // null → do not override TextureInfo.\n}\n\n/**\n * Defines UV transform for a {@link TextureInfo}. See {@link KHRTextureTransform}.\n */\nexport class Transform extends ExtensionProperty<ITransform> {\n\tpublic static EXTENSION_NAME: typeof KHR_TEXTURE_TRANSFORM = KHR_TEXTURE_TRANSFORM;\n\tpublic declare extensionName: typeof KHR_TEXTURE_TRANSFORM;\n\tpublic declare propertyType: 'Transform';\n\tpublic declare parentTypes: [PropertyType.TEXTURE_INFO];\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_TEXTURE_TRANSFORM;\n\t\tthis.propertyType = 'Transform';\n\t\tthis.parentTypes = [PropertyType.TEXTURE_INFO];\n\t}\n\n\tprotected getDefaults(): Nullable<ITransform> {\n\t\treturn Object.assign(super.getDefaults() as IProperty, {\n\t\t\toffset: [0.0, 0.0] as vec2,\n\t\t\trotation: 0,\n\t\t\tscale: [1.0, 1.0] as vec2,\n\t\t\ttexCoord: null,\n\t\t});\n\t}\n\n\tpublic getOffset(): vec2 {\n\t\treturn this.get('offset');\n\t}\n\tpublic setOffset(offset: vec2): this {\n\t\treturn this.set('offset', offset);\n\t}\n\n\tpublic getRotation(): number {\n\t\treturn this.get('rotation');\n\t}\n\tpublic setRotation(rotation: number): this {\n\t\treturn this.set('rotation', rotation);\n\t}\n\n\tpublic getScale(): vec2 {\n\t\treturn this.get('scale');\n\t}\n\tpublic setScale(scale: vec2): this {\n\t\treturn this.set('scale', scale);\n\t}\n\n\tpublic getTexCoord(): number | null {\n\t\treturn this.get('texCoord');\n\t}\n\tpublic setTexCoord(texCoord: number | null): this {\n\t\treturn this.set('texCoord', texCoord);\n\t}\n}\n","import { Extension, MathUtils, type ReaderContext, type vec2, type WriterContext } from '@gltf-transform/core';\nimport { KHR_TEXTURE_TRANSFORM } from '../constants.js';\nimport { Transform } from './transform.js';\n\ninterface TransformDef {\n\toffset?: vec2;\n\trotation?: number;\n\tscale?: vec2;\n\ttexCoord?: number;\n}\n\n/**\n * [`KHR_texture_transform`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_texture_transform/)\n * adds offset, rotation, and scale to {@link TextureInfo} properties.\n *\n * Affine UV transforms are useful for reducing the number of textures the GPU must load, improving\n * performance when used in techniques like texture atlases. UV transforms cannot be animated at\n * this time.\n *\n * Properties:\n * - {@link Transform}\n *\n * ### Example\n *\n * The `KHRTextureTransform` class provides a single {@link ExtensionProperty} type, `Transform`, which\n * may be attached to any {@link TextureInfo} instance. For example:\n *\n * ```typescript\n * import { KHRTextureTransform } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const transformExtension = document.createExtension(KHRTextureTransform)\n * \t.setRequired(true);\n *\n * // Create a reusable Transform.\n * const transform = transformExtension.createTransform()\n * \t.setScale([100, 100]);\n *\n * // Apply the Transform to a Material's baseColorTexture.\n * document.createMaterial()\n * \t.setBaseColorTexture(myTexture)\n * \t.getBaseColorTextureInfo()\n * \t.setExtension('KHR_texture_transform', transform);\n * ```\n */\nexport class KHRTextureTransform extends Extension {\n\tpublic readonly extensionName: typeof KHR_TEXTURE_TRANSFORM = KHR_TEXTURE_TRANSFORM;\n\tpublic static readonly EXTENSION_NAME: typeof KHR_TEXTURE_TRANSFORM = KHR_TEXTURE_TRANSFORM;\n\n\t/** Creates a new Transform property for use on a {@link TextureInfo}. */\n\tpublic createTransform(): Transform {\n\t\treturn new Transform(this.document.getGraph());\n\t}\n\n\t/** @hidden */\n\tpublic read(context: ReaderContext): this {\n\t\tfor (const [textureInfo, textureInfoDef] of Array.from(context.textureInfos.entries())) {\n\t\t\tif (!textureInfoDef.extensions || !textureInfoDef.extensions[KHR_TEXTURE_TRANSFORM]) continue;\n\n\t\t\tconst transform = this.createTransform();\n\t\t\tconst transformDef = textureInfoDef.extensions[KHR_TEXTURE_TRANSFORM] as TransformDef;\n\n\t\t\tif (transformDef.offset !== undefined) transform.setOffset(transformDef.offset);\n\t\t\tif (transformDef.rotation !== undefined) transform.setRotation(transformDef.rotation);\n\t\t\tif (transformDef.scale !== undefined) transform.setScale(transformDef.scale);\n\t\t\tif (transformDef.texCoord !== undefined) transform.setTexCoord(transformDef.texCoord);\n\n\t\t\ttextureInfo.setExtension(KHR_TEXTURE_TRANSFORM, transform);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(context: WriterContext): this {\n\t\tconst textureInfoEntries = Array.from(context.textureInfoDefMap.entries());\n\t\tfor (const [textureInfo, textureInfoDef] of textureInfoEntries) {\n\t\t\tconst transform = textureInfo.getExtension<Transform>(KHR_TEXTURE_TRANSFORM);\n\t\t\tif (!transform) continue;\n\n\t\t\ttextureInfoDef.extensions = textureInfoDef.extensions || {};\n\t\t\tconst transformDef = {} as TransformDef;\n\n\t\t\tconst eq = MathUtils.eq;\n\t\t\tif (!eq(transform.getOffset(), [0, 0])) transformDef.offset = transform.getOffset();\n\t\t\tif (transform.getRotation() !== 0) transformDef.rotation = transform.getRotation();\n\t\t\tif (!eq(transform.getScale(), [1, 1])) transformDef.scale = transform.getScale();\n\t\t\tif (transform.getTexCoord() != null) transformDef.texCoord = transform.getTexCoord()!;\n\n\t\t\ttextureInfoDef.extensions[KHR_TEXTURE_TRANSFORM] = transformDef;\n\t\t}\n\t\treturn this;\n\t}\n}\n","import { ExtensionProperty, type IProperty, type Nullable, PropertyType } from '@gltf-transform/core';\nimport { KHR_XMP_JSON_LD } from '../constants.js';\n\ntype Term = string;\ntype TermDefinition = string | Record<string, string>;\n\ntype Value = string | number | boolean;\n\nconst PARENT_TYPES: PropertyType[] = [\n\tPropertyType.ROOT,\n\tPropertyType.SCENE,\n\tPropertyType.NODE,\n\tPropertyType.MESH,\n\tPropertyType.MATERIAL,\n\tPropertyType.TEXTURE,\n\tPropertyType.ANIMATION,\n];\n\ninterface IPacket extends IProperty {\n\t// https://json-ld.org/spec/latest/json-ld/#the-context\n\tcontext: Record<Term, TermDefinition>;\n\tproperties: Record<string, Value | Record<string, unknown>>;\n}\n\n/**\n * Defines an XMP packet associated with a Document or Property. See {@link KHRXMP}.\n */\nexport class Packet extends ExtensionProperty<IPacket> {\n\tpublic declare propertyType: 'Packet';\n\tpublic declare parentTypes: typeof PARENT_TYPES;\n\tpublic declare extensionName: typeof KHR_XMP_JSON_LD;\n\tpublic static EXTENSION_NAME: typeof KHR_XMP_JSON_LD = KHR_XMP_JSON_LD;\n\n\tprotected init(): void {\n\t\tthis.extensionName = KHR_XMP_JSON_LD;\n\t\tthis.propertyType = 'Packet';\n\t\tthis.parentTypes = PARENT_TYPES;\n\t}\n\n\tprotected getDefaults(): Nullable<IPacket> {\n\t\treturn Object.assign(super.getDefaults(), { context: {}, properties: {} });\n\t}\n\n\t/**********************************************************************************************\n\t * Context.\n\t */\n\n\t/**\n\t * Returns the XMP context definition URL for the given term.\n\t * See: https://json-ld.org/spec/latest/json-ld/#the-context\n\t * @param term Case-sensitive term. Usually a concise, lowercase, alphanumeric identifier.\n\t */\n\tpublic getContext(): Record<Term, TermDefinition> {\n\t\treturn this.get('context');\n\t}\n\n\t/**\n\t * Sets the XMP context definition URL for the given term.\n\t * See: https://json-ld.org/spec/latest/json-ld/#the-context\n\t *\n\t * Example:\n\t *\n\t * ```typescript\n\t * packet.setContext({\n\t *   dc: 'http://purl.org/dc/elements/1.1/',\n\t *   model3d: 'https://schema.khronos.org/model3d/xsd/1.0/',\n\t * });\n\t * ```\n\t *\n\t * @param term Case-sensitive term. Usually a concise, lowercase, alphanumeric identifier.\n\t * @param definition URI for XMP namespace.\n\t */\n\tpublic setContext(context: Record<Term, TermDefinition>): this {\n\t\treturn this.set('context', { ...context });\n\t}\n\n\t/**********************************************************************************************\n\t * Properties.\n\t */\n\n\t/**\n\t * Lists properties defined in this packet.\n\t *\n\t * Example:\n\t *\n\t * ```typescript\n\t * packet.listProperties(); // → ['dc:Language', 'dc:Creator', 'xmp:CreateDate']\n\t * ```\n\t */\n\tpublic listProperties(): string[] {\n\t\treturn Object.keys(this.get('properties'));\n\t}\n\n\t/**\n\t * Returns the value of a property, as a literal or JSONLD object.\n\t *\n\t * Example:\n\t *\n\t * ```typescript\n\t * packet.getProperty('dc:Creator'); // → {\"@list\": [\"Acme, Inc.\"]}\n\t * packet.getProperty('dc:Title'); // → {\"@type\": \"rdf:Alt\", \"rdf:_1\": {\"@language\": \"en-US\", \"@value\": \"Lamp\"}}\n\t * packet.getProperty('xmp:CreateDate'); // → \"2022-01-01\"\n\t * ```\n\t */\n\tpublic getProperty(name: string): Value | Record<string, unknown> | null {\n\t\tconst properties = this.get('properties');\n\t\treturn name in properties ? properties[name] : null;\n\t}\n\n\t/**\n\t * Sets the value of a property, as a literal or JSONLD object.\n\t *\n\t * Example:\n\t *\n\t * ```typescript\n\t * packet.setProperty('dc:Creator', {'@list': ['Acme, Inc.']});\n\t * packet.setProperty('dc:Title', {\n\t * \t'@type': 'rdf:Alt',\n\t * \t'rdf:_1': {'@language': 'en-US', '@value': 'Lamp'}\n\t * });\n\t * packet.setProperty('model3d:preferredSurfaces', {'@list': ['vertical']});\n\t * ```\n\t */\n\tpublic setProperty(name: string, value: Value | Record<string, unknown>): this {\n\t\tthis._assertContext(name);\n\n\t\tconst properties = { ...this.get('properties') };\n\t\tif (value) {\n\t\t\tproperties[name] = value;\n\t\t} else {\n\t\t\tdelete properties[name];\n\t\t}\n\t\treturn this.set('properties', properties);\n\t}\n\n\t/**********************************************************************************************\n\t * Serialize / Deserialize.\n\t */\n\n\t/**\n\t * Serializes the packet context and properties to a JSONLD object.\n\t */\n\tpublic toJSONLD(): Record<string, unknown> {\n\t\tconst context = copyJSON(this.get('context'));\n\t\tconst properties = copyJSON(this.get('properties'));\n\t\treturn { '@context': context, ...properties };\n\t}\n\n\t/**\n\t * Deserializes a JSONLD packet, then overwrites existing context and properties with\n\t * the new values.\n\t */\n\tpublic fromJSONLD(jsonld: Record<string, unknown>): this {\n\t\tjsonld = copyJSON(jsonld);\n\n\t\t// Context.\n\t\tconst context = jsonld['@context'] as Record<Term, TermDefinition>;\n\t\tif (context) this.set('context', context);\n\t\tdelete jsonld['@context'];\n\n\t\t// Properties.\n\t\treturn this.set('properties', jsonld as Record<string, string | Record<string, unknown>>);\n\t}\n\n\t/**********************************************************************************************\n\t * Validation.\n\t */\n\n\t/** @hidden */\n\tprivate _assertContext(name: string) {\n\t\tconst prefix = name.split(':')[0];\n\t\tif (!(prefix in this.get('context'))) {\n\t\t\tthrow new Error(`${KHR_XMP_JSON_LD}: Missing context for term, \"${name}\".`);\n\t\t}\n\t}\n}\n\nfunction copyJSON<T>(object: T): T {\n\treturn JSON.parse(JSON.stringify(object));\n}\n","import {\n\ttype Animation,\n\tExtension,\n\ttype GLTF,\n\ttype Material,\n\ttype Mesh,\n\ttype Node,\n\tPropertyType,\n\ttype ReaderContext,\n\ttype Scene,\n\ttype Texture,\n\ttype WriterContext,\n} from '@gltf-transform/core';\nimport { KHR_XMP_JSON_LD } from '../constants.js';\nimport { Packet } from './packet.js';\n\ntype XMPPacketDef = Record<string, unknown>;\n\ntype XMPParentDef =\n\t| GLTF.IAsset\n\t| GLTF.IScene\n\t| GLTF.INode\n\t| GLTF.IMesh\n\t| GLTF.IMaterial\n\t| GLTF.ITexture\n\t| GLTF.IAnimation;\n\ninterface XMPPropertyDef {\n\tpacket: number;\n}\n\ninterface XMPRootDef {\n\tpackets?: XMPPacketDef[];\n}\n\n/**\n * [KHR_xmp_json_ld](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_xmp_json_ld/)\n * defines XMP metadata associated with a glTF asset.\n *\n * XMP metadata provides standardized fields describing the content, provenance, usage\n * restrictions, or other attributes of a 3D model. XMP metadata does not generally affect the\n * parsing or runtime behavior of the content — for that, use custom extensions, custom vertex\n * attributes, or extras. Similarly, storage mechanisms other than XMP should be preferred\n * for binary content like mesh data, animations, or textures.\n *\n * Generally XMP metadata is associated with the entire glTF asset by attaching an XMP {@link Packet}\n * to the document {@link Root}. In less common cases where metadata must be associated with\n * specific subsets of a document, XMP Packets may be attached to {@link Scene}, {@link Node},\n * {@link Mesh}, {@link Material}, {@link Texture}, or {@link Animation} properties.\n *\n * Within each packet, XMP properties become available when an\n * [XMP namespace](https://www.adobe.io/xmp/docs/XMPNamespaces/) is registered\n * with {@link Packet.setContext}. Packets cannot use properties whose namespaces are not\n * registered as context. While not all XMP namespaces are relevant to 3D assets, some common\n * namespaces provide useful metadata about authorship and provenance. Additionally, the `model3d`\n * namespace provides certain properties specific to 3D content, such as Augmented Reality (AR)\n * orientation data.\n *\n * Common XMP contexts for 3D models include:\n *\n * | Prefix      | URI                                         | Name                           |\n * |:------------|:--------------------------------------------|:-------------------------------|\n * | `dc`        | http://purl.org/dc/elements/1.1/            | Dublin Core                    |\n * | `model3d`   | https://schema.khronos.org/model3d/xsd/1.0/ | Model 3D                       |\n * | `rdf`       | http://www.w3.org/1999/02/22-rdf-syntax-ns# | Resource Description Framework |\n * | `xmp`       | http://ns.adobe.com/xap/1.0/                | XMP                            |\n * | `xmpRights` | http://ns.adobe.com/xap/1.0/rights/         | XMP Rights Management          |\n *\n * Only the XMP contexts required for a packet should be assigned, and different packets\n * in the same asset may use different contexts. For greater detail on available XMP\n * contexts and how to use them in glTF assets, see the\n * [3DC Metadata Recommendations](https://github.com/KhronosGroup/3DC-Metadata-Recommendations/blob/main/model3d.md).\n *\n * Properties:\n * - {@link Packet}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRXMP, Packet } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const xmpExtension = document.createExtension(KHRXMP);\n *\n * // Create Packet property.\n * const packet = xmpExtension.createPacket()\n * \t.setContext({\n * \t\tdc: 'http://purl.org/dc/elements/1.1/',\n * \t})\n *\t.setProperty('dc:Creator', {\"@list\": [\"Acme, Inc.\"]});\n *\n * // Option 1: Assign to Document Root.\n * document.getRoot().setExtension('KHR_xmp_json_ld', packet);\n *\n * // Option 2: Assign to a specific Property.\n * texture.setExtension('KHR_xmp_json_ld', packet);\n * ```\n */\nexport class KHRXMP extends Extension {\n\tpublic readonly extensionName: typeof KHR_XMP_JSON_LD = KHR_XMP_JSON_LD;\n\tpublic static readonly EXTENSION_NAME: typeof KHR_XMP_JSON_LD = KHR_XMP_JSON_LD;\n\n\t/** Creates a new XMP packet, to be linked with a {@link Document} or {@link Property Properties}. */\n\tpublic createPacket(): Packet {\n\t\treturn new Packet(this.document.getGraph());\n\t}\n\n\t/** Lists XMP packets currently defined in a {@link Document}. */\n\tpublic listPackets(): Packet[] {\n\t\treturn Array.from(this.properties) as Packet[];\n\t}\n\n\t/** @hidden */\n\tpublic read(context: ReaderContext): this {\n\t\tconst extensionDef = context.jsonDoc.json.extensions?.[KHR_XMP_JSON_LD] as XMPRootDef | undefined;\n\t\tif (!extensionDef || !extensionDef.packets) return this;\n\n\t\t// Deserialize packets.\n\t\tconst json = context.jsonDoc.json;\n\t\tconst root = this.document.getRoot();\n\t\tconst packets = extensionDef.packets.map((packetDef) => this.createPacket().fromJSONLD(packetDef));\n\n\t\tconst defLists = [\n\t\t\t[json.asset],\n\t\t\tjson.scenes,\n\t\t\tjson.nodes,\n\t\t\tjson.meshes,\n\t\t\tjson.materials,\n\t\t\tjson.images,\n\t\t\tjson.animations,\n\t\t];\n\n\t\tconst propertyLists = [\n\t\t\t[root],\n\t\t\troot.listScenes(),\n\t\t\troot.listNodes(),\n\t\t\troot.listMeshes(),\n\t\t\troot.listMaterials(),\n\t\t\troot.listTextures(),\n\t\t\troot.listAnimations(),\n\t\t];\n\n\t\t// Assign packets.\n\t\tfor (let i = 0; i < defLists.length; i++) {\n\t\t\tconst defs = defLists[i] || [];\n\t\t\tfor (let j = 0; j < defs.length; j++) {\n\t\t\t\tconst def = defs[j];\n\t\t\t\tif (def.extensions && def.extensions[KHR_XMP_JSON_LD]) {\n\t\t\t\t\tconst xmpDef = def.extensions[KHR_XMP_JSON_LD] as XMPPropertyDef;\n\t\t\t\t\tpropertyLists[i][j].setExtension(KHR_XMP_JSON_LD, packets[xmpDef.packet]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/** @hidden */\n\tpublic write(context: WriterContext): this {\n\t\tconst { json } = context.jsonDoc;\n\n\t\tconst packetDefs = [];\n\n\t\tfor (const packet of this.properties as Set<Packet>) {\n\t\t\t// Serialize packets.\n\t\t\tpacketDefs.push(packet.toJSONLD());\n\n\t\t\t// Assign packets.\n\n\t\t\tfor (const parent of packet.listParents()) {\n\t\t\t\tlet parentDef: XMPParentDef | null;\n\n\t\t\t\tswitch (parent.propertyType) {\n\t\t\t\t\tcase PropertyType.ROOT:\n\t\t\t\t\t\tparentDef = json.asset;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PropertyType.SCENE:\n\t\t\t\t\t\tparentDef = json.scenes![context.sceneIndexMap.get(parent as Scene)!];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PropertyType.NODE:\n\t\t\t\t\t\tparentDef = json.nodes![context.nodeIndexMap.get(parent as Node)!];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PropertyType.MESH:\n\t\t\t\t\t\tparentDef = json.meshes![context.meshIndexMap.get(parent as Mesh)!];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PropertyType.MATERIAL:\n\t\t\t\t\t\tparentDef = json.materials![context.materialIndexMap.get(parent as Material)!];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PropertyType.TEXTURE:\n\t\t\t\t\t\tparentDef = json.images![context.imageIndexMap.get(parent as Texture)!];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PropertyType.ANIMATION:\n\t\t\t\t\t\tparentDef = json.animations![context.animationIndexMap.get(parent as Animation)!];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tparentDef = null;\n\t\t\t\t\t\tthis.document\n\t\t\t\t\t\t\t.getLogger()\n\t\t\t\t\t\t\t.warn(`[${KHR_XMP_JSON_LD}]: Unsupported parent property, \"${parent.propertyType}\"`);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (!parentDef) continue;\n\n\t\t\t\tparentDef.extensions = parentDef.extensions || {};\n\t\t\t\tparentDef.extensions[KHR_XMP_JSON_LD] = { packet: packetDefs.length - 1 };\n\t\t\t}\n\t\t}\n\n\t\tif (packetDefs.length > 0) {\n\t\t\tjson.extensions = json.extensions || {};\n\t\t\tjson.extensions[KHR_XMP_JSON_LD] = { packets: packetDefs };\n\t\t}\n\n\t\treturn this;\n\t}\n}\n","import type { Extension } from '@gltf-transform/core';\nimport { EXTMeshGPUInstancing } from './ext-mesh-gpu-instancing/index.js';\nimport { EXTMeshoptCompression } from './ext-meshopt-compression/index.js';\nimport { EXTTextureAVIF } from './ext-texture-avif/index.js';\nimport { EXTTextureWebP } from './ext-texture-webp/index.js';\nimport { KHRDracoMeshCompression } from './khr-draco-mesh-compression/index.js';\nimport { KHRLightsPunctual } from './khr-lights-punctual/index.js';\nimport { KHRMaterialsAnisotropy } from './khr-materials-anisotropy/index.js';\nimport { KHRMaterialsClearcoat } from './khr-materials-clearcoat/index.js';\nimport { KHRMaterialsDiffuseTransmission } from './khr-materials-diffuse-transmission/materials-diffuse-transmission.js';\nimport { KHRMaterialsDispersion } from './khr-materials-dispersion/index.js';\nimport { KHRMaterialsEmissiveStrength } from './khr-materials-emissive-strength/index.js';\nimport { KHRMaterialsIOR } from './khr-materials-ior/index.js';\nimport { KHRMaterialsIridescence } from './khr-materials-iridescence/index.js';\nimport { KHRMaterialsPBRSpecularGlossiness } from './khr-materials-pbr-specular-glossiness/index.js';\nimport { KHRMaterialsSheen } from './khr-materials-sheen/index.js';\nimport { KHRMaterialsSpecular } from './khr-materials-specular/index.js';\nimport { KHRMaterialsTransmission } from './khr-materials-transmission/index.js';\nimport { KHRMaterialsUnlit } from './khr-materials-unlit/index.js';\nimport { KHRMaterialsVariants } from './khr-materials-variants/index.js';\nimport { KHRMaterialsVolume } from './khr-materials-volume/index.js';\nimport { KHRMeshQuantization } from './khr-mesh-quantization/index.js';\nimport { KHRNodeVisibility } from './khr-node-visibility/node-visibility.js';\nimport { KHRTextureBasisu } from './khr-texture-basisu/index.js';\nimport { KHRTextureTransform } from './khr-texture-transform/index.js';\nimport { KHRXMP } from './khr-xmp-json-ld/index.js';\n\nexport const KHRONOS_EXTENSIONS: (typeof Extension)[] = [\n\tKHRDracoMeshCompression,\n\tKHRLightsPunctual,\n\tKHRMaterialsAnisotropy,\n\tKHRMaterialsClearcoat,\n\tKHRMaterialsDiffuseTransmission,\n\tKHRMaterialsDispersion,\n\tKHRMaterialsEmissiveStrength,\n\tKHRMaterialsIOR,\n\tKHRMaterialsIridescence,\n\tKHRMaterialsPBRSpecularGlossiness,\n\tKHRMaterialsSpecular,\n\tKHRMaterialsSheen,\n\tKHRMaterialsTransmission,\n\tKHRMaterialsUnlit,\n\tKHRMaterialsVariants,\n\tKHRMaterialsVolume,\n\tKHRMeshQuantization,\n\tKHRNodeVisibility,\n\tKHRTextureBasisu,\n\tKHRTextureTransform,\n\tKHRXMP,\n];\n\nexport const ALL_EXTENSIONS: (typeof Extension)[] = [\n\tEXTMeshGPUInstancing,\n\tEXTMeshoptCompression,\n\tEXTTextureAVIF,\n\tEXTTextureWebP,\n\t...KHRONOS_EXTENSIONS,\n];\n\nexport * from './ext-mesh-gpu-instancing/index.js';\nexport * from './ext-meshopt-compression/index.js';\nexport * from './ext-texture-avif/index.js';\nexport * from './ext-texture-webp/index.js';\nexport * from './khr-draco-mesh-compression/index.js';\nexport * from './khr-lights-punctual/index.js';\nexport * from './khr-materials-anisotropy/index.js';\nexport * from './khr-materials-clearcoat/index.js';\nexport * from './khr-materials-diffuse-transmission/index.js';\nexport * from './khr-materials-dispersion/index.js';\nexport * from './khr-materials-emissive-strength/index.js';\nexport * from './khr-materials-ior/index.js';\nexport * from './khr-materials-iridescence/index.js';\nexport * from './khr-materials-pbr-specular-glossiness/index.js';\nexport * from './khr-materials-sheen/index.js';\nexport * from './khr-materials-specular/index.js';\nexport * from './khr-materials-transmission/index.js';\nexport * from './khr-materials-unlit/index.js';\nexport * from './khr-materials-variants/index.js';\nexport * from './khr-materials-volume/index.js';\nexport * from './khr-mesh-quantization/index.js';\nexport * from './khr-node-visibility/index.js';\nexport * from './khr-texture-basisu/index.js';\nexport * from './khr-texture-transform/index.js';\nexport * from './khr-xmp-json-ld/index.js';\n"],"names":["EXT_MESH_GPU_INSTANCING","EXT_MESHOPT_COMPRESSION","EXT_TEXTURE_WEBP","EXT_TEXTURE_AVIF","KHR_DRACO_MESH_COMPRESSION","KHR_LIGHTS_PUNCTUAL","KHR_MATERIALS_ANISOTROPY","KHR_MATERIALS_CLEARCOAT","KHR_MATERIALS_DIFFUSE_TRANSMISSION","KHR_MATERIALS_DISPERSION","KHR_MATERIALS_EMISSIVE_STRENGTH","KHR_MATERIALS_IOR","KHR_MATERIALS_IRIDESCENCE","KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS","KHR_MATERIALS_SHEEN","KHR_MATERIALS_SPECULAR","KHR_MATERIALS_TRANSMISSION","KHR_MATERIALS_UNLIT","KHR_MATERIALS_VOLUME","KHR_MATERIALS_VARIANTS","KHR_MESH_QUANTIZATION","KHR_NODE_VISIBILITY","KHR_TEXTURE_BASISU","KHR_TEXTURE_TRANSFORM","KHR_XMP_JSON_LD","INSTANCE_ATTRIBUTE","InstancedMesh","ExtensionProperty","init","extensionName","propertyType","parentTypes","PropertyType","NODE","getDefaults","Object","assign","attributes","RefMap","getAttribute","semantic","getRefMap","setAttribute","accessor","setRefMap","usage","listAttributes","listRefMapValues","listSemantics","listRefMapKeys","EXTENSION_NAME","EXTMeshGPUInstancing","Extension","constructor","args","provideTypes","prewriteTypes","ACCESSOR","createInstancedMesh","document","getGraph","read","context","jsonDoc","nodeDefs","json","nodes","forEach","nodeDef","nodeIndex","extensions","instancedMeshDef","instancedMesh","accessors","setExtension","prewrite","accessorUsageGroupedByParent","add","prop","properties","attribute","addAccessorToUsageGroup","write","getRoot","listNodes","node","getExtension","nodeIndexMap","get","accessorIndexMap","EncoderMethod","MeshoptMode","MeshoptFilter","isFallbackBuffer","bufferDef","fallbackDef","fallback","BYTE","SHORT","FLOAT","Accessor","ComponentType","encodeNormalizedInt","decodeNormalizedInt","MathUtils","prepareAccessor","encoder","mode","filterOptions","filter","bits","result","array","getArray","byteStride","getElementSize","getComponentSize","componentType","getComponentType","normalized","getNormalized","ATTRIBUTES","NONE","decodeNormalizedIntArray","Float32Array","EXPONENTIAL","encodeFilterExp","getCount","OCTAHEDRAL","padNormals","encodeFilterOct","QUATERNION","encodeFilterQuat","Error","min","getMin","max","getMax","map","v","padArrayElements","byteLength","srcArray","dstArray","length","i","elementSize","BufferUtils","padNumber","BYTES_PER_ELEMENT","elementStride","elementCount","j","il","getMeshoptMode","WriterContext","BufferViewUsage","ELEMENT_ARRAY_BUFFER","isTriangles","listParents","some","parent","Primitive","getMode","Mode","TRIANGLES","INDICES","getMeshoptFilter","doc","refs","listParentEdges","edge","getParent","Root","ref","refName","getName","refKey","getAttributes","key","isDelta","PRIMITIVE_TARGET","startsWith","targetPath","getTargetPath","sampler","AnimationSampler","channel","AnimationChannel","DEFAULT_ENCODER_OPTIONS","method","QUANTIZE","EXTMeshoptCompression","prereadTypes","BUFFER","PRIMITIVE","readDependencies","writeDependencies","_decoder","_decoderFallbackBufferMap","Map","_encoder","_encoderOptions","_encoderFallbackBuffer","_encoderBufferViews","_encoderBufferViewData","_encoderBufferViewAccessors","install","dependency","setEncoderOptions","options","preread","isRequired","supported","_prereadBuffers","_prereadPrimitives","viewDefs","bufferViews","viewDef","index","meshoptDef","byteOffset","count","stride","Uint8Array","buffers","buffer","resource","uri","resources","GLB_BUFFER","source","toView","decodeGltfBuffer","fallbackBuffer","fallbackBufferDef","set","_context","swap","dispose","_prewriteAccessors","_prewriteBuffers","graph","createBuffer","fallbackBufferIndex","listBuffers","indexOf","nextID","parentToID","getParentID","property","ROOT","id","undefined","listAccessors","getSparse","getAccessorUsage","parentID","has","FILTER","preparedAccessor","getBuffer","bufferIndex","join","bufferView","bufferViewData","bufferViewAccessors","target","USAGE_TO_TARGET","ARRAY_BUFFER","accessorDef","createAccessorDef","push","EXT_meshopt_compression","otherBufferViews","concat","encodeGltfBuffer","compressedData","pad","fallbackBufferByteOffset","bufferViewIndex","otherBufferViewsIndexMap","finalBufferViewDef","compressedByteOffset","bufferViewExtensionDef","bufferIndexMap","AVIFImageUtils","match","decodeText","slice","getSize","view","DataView","box","unbox","offset","end","type","start","getUint32","getChannels","_buffer","EXTTextureAVIF","TEXTURE","register","ImageUtils","registerFormat","textureDefs","textures","textureDef","listTextures","texture","getMimeType","imageIndex","imageIndexMap","data","size","WEBPImageUtils","RIFF","WEBP","chunkId","getUint8","chunkByteLength","width","getInt16","height","b0","b1","b2","b3","EXTTextureWebP","decoderModule","COMPONENT_ARRAY","DATA_TYPE","decodeGeometry","decoder","DecoderBuffer","Init","geometryType","GetEncodedGeometryType","TRIANGULAR_MESH","dracoMesh","Mesh","status","DecodeBufferToMesh","ok","ptr","destroy","decodeIndex","mesh","numFaces","num_faces","numIndices","indices","num_points","Uint16Array","_malloc","GetTrianglesUInt16Array","HEAPU16","Uint32Array","GetTrianglesUInt32Array","HEAPU32","_free","decodeAttribute","dataType","ArrayCtor","numComponents","num_components","numPoints","numValues","GetAttributeDataArrayForAllPoints","HEAPF32","initDecoderModule","_decoderModule","UNSIGNED_INT","UNSIGNED_SHORT","UNSIGNED_BYTE","Int16Array","Int8Array","DT_FLOAT32","DT_UINT32","DT_UINT16","DT_UINT8","DT_INT16","DT_INT8","encoderModule","AttributeEnum","DEFAULT_QUANTIZATION_BITS","POSITION","NORMAL","COLOR","TEX_COORD","GENERIC","decodeSpeed","encodeSpeed","EDGEBREAKER","quantizationBits","quantizationVolume","initEncoderModule","_encoderModule","encodeGeometry","prim","_options","builder","MeshBuilder","ExpertEncoder","attributeIDs","dracoBuffer","DracoInt8Array","hasMorphTargets","listTargets","hasSparseAttributes","attributeEnum","getAttributeEnum","attributeID","addAttribute","SetAttributeQuantization","range","Math","SetAttributeExplicitQuantization","getIndices","EncodingError","AddFacesToMesh","SetSpeedOptions","SetTrackEncodedProperties","SEQUENTIAL","SetEncodingMethod","MESH_SEQUENTIAL_ENCODING","MESH_EDGEBREAKER_ENCODING","EncodeToDracoBuffer","GetValue","numVertices","GetNumberOfEncodedPoints","GetNumberOfEncodedFaces","itemSize","AddUInt8Attribute","AddInt8Attribute","AddUInt16Attribute","AddInt16Attribute","AddUInt32Attribute","AddFloatAttribute","KHRDracoMeshCompression","logger","getLogger","dracoMeshes","meshDefs","meshes","meshDef","primDef","primitives","dracoDef","bufferViewDef","Decoder","debug","dracoAttribute","GetAttributeByUniqueId","attributeArray","setArray","Array","from","values","_propertyType","JSON","stringify","primitiveHashMap","listDracoPrimitives","primitiveEncodingMap","listScenes","warn","getBounds","pop","keys","primHash","accessorDefs","encodedPrim","e","message","indicesDef","attributeDef","extensionData","dracoContext","listMeshes","meshIndexMap","listPrimitives","extensionsUsed","name","extensionsRequired","included","Set","excluded","nonIndexed","nonTriangles","accessorIndices","includedAccessors","includedHashKeys","primToHashKey","hashKey","createHashKey","dstIndices","clone","dstAttribute","attr","indexMap","hashElements","sort","Light","color","intensity","Type","POINT","innerConeAngle","outerConeAngle","PI","getColor","setColor","getIntensity","setIntensity","getType","setType","getRange","setRange","getInnerConeAngle","setInnerConeAngle","angle","getOuterConeAngle","setOuterConeAngle","SPOT","DIRECTIONAL","KHRLightsPunctual","createLight","rootDef","lightDefs","lights","lightDef","_lightDef$spot","_lightDef$spot2","light","setName","spot","lightNodeDef","lightIndexMap","eq","R","G","B","TextureChannel","Anisotropy","MATERIAL","anisotropyStrength","anisotropyRotation","anisotropyTexture","anisotropyTextureInfo","TextureInfo","getAnisotropyStrength","setAnisotropyStrength","strength","getAnisotropyRotation","setAnisotropyRotation","rotation","getAnisotropyTexture","getRef","getAnisotropyTextureInfo","setAnisotropyTexture","setRef","channels","KHRMaterialsAnisotropy","MESH","createAnisotropy","materialDefs","materials","materialDef","materialIndex","anisotropy","anisotropyDef","textureInfoDef","setTextureInfo","listMaterials","material","materialIndexMap","textureInfo","createTextureInfoDef","Clearcoat","clearcoatFactor","clearcoatTexture","clearcoatTextureInfo","clearcoatRoughnessFactor","clearcoatRoughnessTexture","clearcoatRoughnessTextureInfo","clearcoatNormalScale","clearcoatNormalTexture","clearcoatNormalTextureInfo","getClearcoatFactor","setClearcoatFactor","factor","getClearcoatTexture","getClearcoatTextureInfo","setClearcoatTexture","getClearcoatRoughnessFactor","setClearcoatRoughnessFactor","getClearcoatRoughnessTexture","getClearcoatRoughnessTextureInfo","setClearcoatRoughnessTexture","getClearcoatNormalScale","setClearcoatNormalScale","scale","getClearcoatNormalTexture","getClearcoatNormalTextureInfo","setClearcoatNormalTexture","KHRMaterialsClearcoat","createClearcoat","clearcoat","clearcoatDef","A","DiffuseTransmission","diffuseTransmissionFactor","diffuseTransmissionTexture","diffuseTransmissionTextureInfo","diffuseTransmissionColorFactor","diffuseTransmissionColorTexture","diffuseTransmissionColorTextureInfo","getDiffuseTransmissionFactor","setDiffuseTransmissionFactor","getDiffuseTransmissionTexture","getDiffuseTransmissionTextureInfo","setDiffuseTransmissionTexture","getDiffuseTransmissionColorFactor","setDiffuseTransmissionColorFactor","getDiffuseTransmissionColorTexture","getDiffuseTransmissionColorTextureInfo","setDiffuseTransmissionColorTexture","KHRMaterialsDiffuseTransmission","createDiffuseTransmission","transmission","transmissionDef","Dispersion","dispersion","getDispersion","setDispersion","KHRMaterialsDispersion","createDispersion","dispersionDef","EmissiveStrength","emissiveStrength","getEmissiveStrength","setEmissiveStrength","KHRMaterialsEmissiveStrength","createEmissiveStrength","emissiveStrengthDef","IOR","ior","getIOR","setIOR","KHRMaterialsIOR","createIOR","iorDef","Iridescence","iridescenceFactor","iridescenceTexture","iridescenceTextureInfo","iridescenceIOR","iridescenceThicknessMinimum","iridescenceThicknessMaximum","iridescenceThicknessTexture","iridescenceThicknessTextureInfo","getIridescenceFactor","setIridescenceFactor","getIridescenceTexture","getIridescenceTextureInfo","setIridescenceTexture","getIridescenceIOR","setIridescenceIOR","getIridescenceThicknessMinimum","setIridescenceThicknessMinimum","thickness","getIridescenceThicknessMaximum","setIridescenceThicknessMaximum","getIridescenceThicknessTexture","getIridescenceThicknessTextureInfo","setIridescenceThicknessTexture","KHRMaterialsIridescence","createIridescence","iridescence","iridescenceDef","iridescenceIor","PBRSpecularGlossiness","diffuseFactor","diffuseTexture","diffuseTextureInfo","specularFactor","glossinessFactor","specularGlossinessTexture","specularGlossinessTextureInfo","getDiffuseFactor","setDiffuseFactor","getDiffuseTexture","getDiffuseTextureInfo","setDiffuseTexture","isColor","getSpecularFactor","setSpecularFactor","getGlossinessFactor","setGlossinessFactor","getSpecularGlossinessTexture","getSpecularGlossinessTextureInfo","setSpecularGlossinessTexture","KHRMaterialsPBRSpecularGlossiness","createPBRSpecularGlossiness","specGloss","specGlossDef","Sheen","sheenColorFactor","sheenColorTexture","sheenColorTextureInfo","sheenRoughnessFactor","sheenRoughnessTexture","sheenRoughnessTextureInfo","getSheenColorFactor","setSheenColorFactor","getSheenColorTexture","getSheenColorTextureInfo","setSheenColorTexture","getSheenRoughnessFactor","setSheenRoughnessFactor","getSheenRoughnessTexture","getSheenRoughnessTextureInfo","setSheenRoughnessTexture","KHRMaterialsSheen","createSheen","sheen","sheenDef","Specular","specularTexture","specularTextureInfo","specularColorFactor","specularColorTexture","specularColorTextureInfo","getSpecularColorFactor","setSpecularColorFactor","getSpecularTexture","getSpecularTextureInfo","setSpecularTexture","getSpecularColorTexture","getSpecularColorTextureInfo","setSpecularColorTexture","KHRMaterialsSpecular","createSpecular","specular","specularDef","Transmission","transmissionFactor","transmissionTexture","transmissionTextureInfo","getTransmissionFactor","setTransmissionFactor","getTransmissionTexture","getTransmissionTextureInfo","setTransmissionTexture","KHRMaterialsTransmission","createTransmission","Unlit","KHRMaterialsUnlit","createUnlit","Mapping","variants","RefSet","getMaterial","setMaterial","addVariant","variant","addRef","removeVariant","removeRef","listVariants","listRefs","MappingList","mappings","addMapping","mapping","removeMapping","listMappings","Variant","KHRMaterialsVariants","createMappingList","createVariant","createMapping","variantsRootDef","variantDefs","variantDef","meshIndex","primDefs","primIndex","mappingList","variantPrimDef","mappingDef","variantIndex","variantIndexMap","createPropertyDef","mappingDefs","Volume","thicknessFactor","thicknessTexture","thicknessTextureInfo","attenuationDistance","Infinity","attenuationColor","getThicknessFactor","setThicknessFactor","getThicknessTexture","getThicknessTextureInfo","setThicknessTexture","getAttenuationDistance","setAttenuationDistance","distance","getAttenuationColor","setAttenuationColor","KHRMaterialsVolume","createVolume","volume","volumeDef","Number","isFinite","KHRMeshQuantization","_","Visibility","visible","getVisible","setVisible","KHRNodeVisibility","createVisibility","visibility","visibilityDef","KTX2ImageUtils","container","readKTX","pixelWidth","pixelHeight","dfd","dataFormatDescriptor","colorModel","KHR_DF_MODEL_ETC1S","samples","channelType","KHR_DF_MODEL_UASTC","getVRAMByteLength","hasAlpha","uncompressedBytes","levels","level","uncompressedByteLength","levelWidth","floor","pow","levelHeight","blockSize","KHRTextureBasisu","basisuDef","Transform","TEXTURE_INFO","texCoord","getOffset","setOffset","getRotation","setRotation","getScale","setScale","getTexCoord","setTexCoord","KHRTextureTransform","createTransform","textureInfos","entries","transform","transformDef","textureInfoEntries","textureInfoDefMap","PARENT_TYPES","SCENE","ANIMATION","Packet","getContext","setContext","listProperties","getProperty","setProperty","value","_assertContext","toJSONLD","copyJSON","fromJSONLD","jsonld","prefix","split","object","parse","KHRXMP","createPacket","listPackets","_context$jsonDoc$json","extensionDef","packets","root","packetDef","defLists","asset","scenes","images","animations","propertyLists","listAnimations","defs","def","xmpDef","packet","packetDefs","parentDef","sceneIndexMap","animationIndexMap","KHRONOS_EXTENSIONS","ALL_EXTENSIONS"],"mappings":"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"}