{"version":3,"file":"cps.js","sources":["../../src/EventDispatcher.ts","../../src/logging.ts","../../src/DomainModel.ts","../../src/domain.ts","../../node_modules/three/build/three.module.js","../../src/IIID.js","../../src/assets.ts","../../src/utils/gammaCorrect.ts","../../src/utils.ts","../../src/SelectionManager.ts","../../src/CommandHistory.ts","../../src/Application.ts","../../src/utils/rouler.ts","../../src/utils/animateOpen.ts","../../node_modules/three/examples/jsm/geometries/TextGeometry.js","../../node_modules/three/examples/jsm/loaders/FontLoader.js","../../src/utils/createTechDrawingLabel.ts","../../src/utils/directionalPosition.ts","../../src/measurement.ts","../../src/controllers/wallControllers.ts","../../src/utils/lookAtWall.ts","../../src/utils/makeKitchenLights.ts","../../src/utils/optimizeDirectionalShadow.ts","../../src/utils/makeMainLights.ts","../../src/config.ts","../../src/BaseFactory.ts","../../src/MemoryCache.ts","../../node_modules/three/examples/jsm/utils/BufferGeometryUtils.js","../../node_modules/three/examples/jsm/loaders/GLTFLoader.js","../../src/utils/traverseGenerator.ts","../../src/Signal.ts","../../src/MaterialFactory.ts","../../src/views/BaseView.ts","../../node_modules/three/examples/jsm/loaders/OBJLoader.js","../../src/ModelLoader.ts","../../src/geometry.ts","../../src/views/ApplianceView.ts","../../src/mw/MeshWriter.ts","../../src/mw/ops.ts","../../src/mw/prims.ts","../../src/ParametricCache.ts","../../src/data/SkuData.ts","../../src/data/TsvDataSource.ts","../../src/data/JarlinCatalogData.ts","../../src/views/CabinetView.ts","../../src/views/CubbyView.ts","../../src/views/DividerView.ts","../../src/controllers/baseViewControllers.ts","../../src/views/HandleView.ts","../../src/controllers/doorControllers.ts","../../src/views/DoorView.ts","../../src/views/DrawerView.ts","../../src/views/GenericAssetView.ts","../../src/views/HookRackView.ts","../../src/views/MurphybedView.ts","../../src/views/ObstructionView.ts","../../src/views/ParametricPartView.ts","../../src/views/LightsView.ts","../../src/views/StackLayoutHepler.ts","../../src/views/SectionView.ts","../../src/views/VerticalPanelView.ts","../../src/views/WallView.ts","../../src/utils/toTechnicalDocument.ts","../../node_modules/three/examples/jsm/utils/TextureUtils.js","../../node_modules/three/examples/jsm/exporters/GLTFExporter.js","../../node_modules/three/examples/jsm/exporters/OBJExporter.js","../../src/views/ClosetUnitView.ts","../../src/views/CrownMoldingView.ts","../../src/views/CountertopView.ts","../../src/views/RoomView.ts","../../src/DefaultsManager.ts","../../src/dev.ts","../../src/tools/Tool.ts","../../node_modules/three/examples/jsm/controls/OrbitControls.js","../../src/tools/OrbitTool.ts","../../src/RenderPipeline.ts","../../src/apps/transitional/TransitionalApp.ts"],"sourcesContent":["\ntype handler = (...args: unknown[]) => unknown;\n\n/**\n * A SetMap extends the standard Map class with an add method so that its values\n * are always a Set. This is useful for grouping objects under a common key.\n */\nclass SetMap extends Map> {\n\n /**\n * Adds a value into the Set instance that is stored under the given key. If\n * this is the first value associated with this key, then the underlying Set\n * is created.\n * @param key - the key object; since this is a Map it can be any type\n * @param value - the stored item\n * @returns - returns the map object\n */\n add(key: K, value: V) {\n if(this.has(key)) {\n let s: Set = this.get(key);\n s.add(value);\n } else {\n let s: Set = new Set();\n s.add(value);\n this.set(key, s);\n }\n return this;\n }\n\n /**\n * Deletes the given value from the underlying set. Note that this will not\n * leave an empty set under the given key, so the `has` method will\n * correctly tell you whether all the entries under the key have been\n * removed.\n * @param key - the key object; since this is a Map it can be any type\n * @param value - the stored item\n * @returns - true if the item was an element of the set under the\n * given key, false otherwise.\n */\n deleteValue(key: K, value: V) {\n if(this.has(key)) {\n let s = this.get(key);\n var result = s.delete(value);\n if(s.size == 0)\n super.delete(key);\n return result;\n } else {\n return false;\n }\n }\n\n /**\n * Create copies of the Map and all of its contained Sets. This does not\n * copy any of the keys or values contained therein.\n * @returns A new SetMap containing all of the same key and value\n * references.\n */\n clone() {\n const result = new SetMap();\n for(let key of this.keys()) {\n let value = new Set(this.get(key));\n result.set(key, value);\n }\n return result;\n }\n\n /**\n * Generates the revesre mapping such that each value becomes a key and\n * each key becomes a value.\n */\n reverse(): SetMap {\n const result: SetMap = new SetMap();\n for(let [m, ns] of this.entries()){\n for(let n of ns) {\n result.add(n, m);\n }\n }\n return result;\n }\n\n}\n\n/**\n * Like the browser's EventDispatcher interface, this EventDispatcher mixin (a\n * class factory function), allows classes to simply and easily handle routing\n * events.\n */\nexport default class EventDispatcher {\n\n private handlers: SetMap = new SetMap();\n\n\n on(type: string, handler: handler) {\n this.handlers.add(type, handler);\n }\n\n once(type: string, handler: handler) {\n const wrapper = () => {\n handler();\n this.off(type, wrapper);\n }\n this.on(type, wrapper);\n }\n\n when(type: string) {\n return new Promise((resolve, _reject) => {\n this.once(type, resolve);\n })\n }\n\n off(type: string, handler?: handler) {\n if(!handler == null){\n this.handlers.delete(type);\n } else {\n this.handlers.deleteValue(type, handler);\n }\n }\n\n alloff() {\n this.handlers = new SetMap();\n }\n\n trigger(type: string, ...args: unknown[]) {\n let queue = this.handlers.get(type);\n if(queue){\n let copy: Array = Array.from(queue);\n for(let handler of copy){\n try {\n handler(...args);\n } catch(error) {\n console.error(error);\n }\n }\n }\n }\n\n /**\n * Making a batch update to an event dispatcher suspends triggering\n * until after the batch is complete. This is emphatically not thread\n * safe, but it's JavaScript, so the EventDispatcher instance should\n * always be thread local. If that ever changes... woe betide.\n */\n batch(fn: () => void) {\n let events = new Array();\n // adds a trigger implementation to this instance only\n this.trigger = (type, ...args) => {\n events.push({type, args});\n }\n\n fn();\n\n delete this.trigger; // fall back to the prototype implementation\n for(let {type, args} of events) {\n this.trigger(type, ...args);\n }\n }\n\n /**\n * Binding registers an event handler for a given type of event and\n * executes that handler immediately. Thus, binding is equivalent to\n * on(..., nowandlater(fn)), where fn is the handler function you'd pass\n * to the on method.\n */\n bind(property: string, handler: handler) {\n this.on(property, handler);\n handler();\n }\n}\n","const GLOBAL_LOGGERS = new Map();\n\nexport const TRACE = 1;\nexport const DEBUG = 2;\nexport const INFO = 3;\nexport const WARN = 4;\nexport const ERROR = 5;\n\n/**\n * Set the level for all newly created loggers.\n */\nexport const setGlobalLevel = (level: number) => {\n for(let logger of GLOBAL_LOGGERS.values()) {\n logger.level = level;\n }\n}\n\n/**\n * This is the first point of interaction with the logger module. The suggested\n * usage is:\n *\n * ```\n * import logging from './logging';\n * const log = logging(\"name\");\n * ```\n */\nconst getLogger = (name: string): Logger => {\n if(GLOBAL_LOGGERS.has(name)) {\n return GLOBAL_LOGGERS.get(name);\n } else {\n const logger = new Logger();\n GLOBAL_LOGGERS.set(name, logger);\n return logger;\n }\n}\nexport default getLogger;\n\n/**\n * The Logger class implements the trace, debug, info, warn, and error methods.\n * Each logger instance has an integer level property that can be set to one\n * of the constants (TRACE, DEBUG, etc.) on the Logger prototype.\n *\n * There's usually no need to directly instantiate a logger. The default\n * export, getLogger, gets a global, per-module, Logger instance.\n */\nexport class Logger {\n\n level: number;\n\n public TRACE = TRACE;\n public DEBUG = DEBUG\n public INFO = INFO;\n public WARN = WARN;\n public ERROR = ERROR;\n\n constructor() {\n this.level = ERROR;\n\n for(let method of ['trace', 'debug', 'info', 'warn', 'error', 'temp'])\n {\n this[method] = this[method].bind(this);\n }\n }\n\n prefix() {\n return (new Date()).toISOString();\n }\n\n trace(...args: unknown[]) {\n if(this.level <= this.TRACE)\n console.trace(this.prefix(), 'trace', ...args);\n }\n\n debug(...args: unknown[]) {\n // console.debug is suppressed by default in some browsers, so using\n // console.log instead is a simple way to take back control.\n if(this.level <= this.DEBUG)\n console.log(this.prefix(), 'debug', ...args);\n }\n\n info(...args: unknown[]) {\n if(this.level <= this.INFO)\n console.info(this.prefix(), 'info', ...args);\n }\n\n warn(...args: unknown[]) {\n if(this.level <= this.WARN)\n console.warn(this.prefix(), 'warn', ...args);\n }\n\n error(...args: unknown[]) {\n // Never drop errors.\n console.error(this.prefix(), 'error', ...args);\n }\n\n /**\n * Temp logs are show unconditionally under the presumption that they'll be\n * deleted before they're committed to production code.\n */\n temp(...args: unknown[]) {\n console.log(this.prefix(), 'TEMP', ...args);\n }\n}\n\n","import EventDispatcher from './EventDispatcher';\nimport logger from './logging';\n\nconst log = logger('domain');\n\nexport default abstract class DomainModel extends EventDispatcher {\n\n /**\n * The fields map will contain a value for every field defined on the\n * class, including null or undefined values. Thus the keys may be used as\n * as list of fields on the class at runtime. (NB: for the map class, after\n * running `map.set('p', undefined)`, the query `map.has('p')` will be\n * true.\n */\n protected fields: Map;\n\n /**\n * This is a sparse map of field names and values that temporarily hide the\n * values in the fields map. The values remain temporary until a commit\n * call copies them into the fields map.\n */\n protected temporary: Map = new Map();\n\n public parent?: DomainModel;\n\n static fromJSON(_data: unknown, _parent?: DomainModel): DomainModel {\n return null;\n }\n\n /**\n * @param parent The domain model that owns this instance either directly\n * as a property, or indirectly in an array. This is set automatically by \n * fromJSON().\n */\n constructor(parent?: DomainModel)\n {\n super();\n this.parent = parent;\n this.fields = new Map();\n }\n\n /**\n * Gets the current value of a field. The value returned will be whatever\n * temporary value is currently in use or the last committed value if there\n * has been no change since the last commit.\n */\n get(field: string): unknown {\n if(this.temporary.has(field)) {\n return this.temporary.get(field);\n } else {\n const value = this.fields.get(field);\n if(Array.isArray(value)) {\n // If we are dealing with an array field, then we want to\n // return a proxy that will route updates to the temporary.\n // The temporary is lazily initialized from a clone of the\n // original.\n const proxy = new Proxy(value, {\n set: (_target, property, value) => {\n let temp = this.temporary.get(field);\n if(! temp) {\n temp = Array.from(\n this.fields.get(field) as Iterable);\n this.temporary.set(field, temp);\n }\n temp[property] = value;\n return true;\n },\n\n get: (target, property) => {\n let temp = this.temporary.get(field);\n if(temp) {\n return temp[property];\n } else {\n return target[property];\n }\n }\n });\n return proxy;\n } else {\n return value;\n }\n }\n }\n\n /**\n * Gets the last committed value of a field, bypassing the temporary\n * fields.\n */\n original(field: string): unknown{\n return this.fields.get(field);\n }\n\n /**\n * Sets the value of the given field. The get method will then return the\n * given value. The new value can be reverted by calling the reset method,\n * or it can be made \"permanent\" by calling the commit method. If the given\n * value is different to the last set value, then an event is triggered for\n * the field name.\n */\n set(field: string, value: unknown) {\n if(this.fields.has(field)) {\n let oldValue = this.get(field);\n if(value !== oldValue) {\n this.temporary.set(field, value);\n this.trigger(field);\n this.trigger('change', field);\n }\n }\n else {\n log.error(`Attempt to set non-existent field named \"${field}\"`);\n }\n }\n\n /**\n * Commit the temporary values. This is like committing a database\n * transaction in the sense that any values you set on the domain model\n * appear to be changed, but can be rolled back by calling reset. Once you\n * call commit, the new values are now the baseline for the next reset.\n */\n commit(recursive: boolean = false) {\n for(let [field, value] of this.temporary) {\n this.fields.set(field, value);\n }\n this.temporary.clear();\n\n if(recursive) {\n for(let value of this.fields.values()) {\n if(value instanceof DomainModel) {\n value.commit(true);\n } else if(Array.isArray(value)) {\n for(let item of value) {\n if(item instanceof DomainModel) {\n item.commit(true);\n }\n }\n }\n }\n }\n\n this.trigger('commit');\n }\n\n /**\n * Clear out any temporary values and revert to the last committed set of\n * field values.\n */\n reset() {\n // Resetting should trigger all the change events as these take on a\n // new value.\n this.batch(() => {\n for(let field of this.temporary.keys()) {\n this.set(field, this.fields.get(field));\n }\n this.temporary.clear();\n });\n this.trigger('reset');\n }\n\n /**\n * This converts the field values to a plain old JavaScript object so that\n * the JSON.stringify() method can work on domain models. Note that any\n * temporary values that have not been committed will be ignored.\n */\n toJSON() {\n var result = new Object();\n\n for(let [key, value] of this.fields) {\n if( value != null\n && typeof(value) == 'object'\n && ('toJSON' in value))\n {\n value = (value as any).toJSON();\n } else if( value != null && Array.isArray(value) ) {\n // Note that this will not support multi-dimensional arrays; if\n // we need to support that, this method can be implemented as\n // a call to a recursive function instead\n value = value.map(item => {\n if(typeof item == 'object' && 'toJSON' in item) {\n return (item as any).toJSON();\n } else {\n return item;\n }\n });\n }\n result[key] = value;\n }\n return result;\n }\n\n /**\n * Recursively dump all event handlers bound to this object. This happens\n * during app.refresh() so that old views don't continue to receive events\n * from the model.\n */\n unbindAll() {\n this.alloff();\n\n const allValues = [\n ...this.fields.values(),\n ...this.temporary.values()\n ];\n for(let value of allValues) {\n if(value instanceof DomainModel) {\n value.unbindAll();\n } else if(Array.isArray(value)) {\n for(let item of value) {\n if(item instanceof DomainModel) {\n item.unbindAll();\n }\n }\n }\n }\n }\n\n /**\n * Similar to the traverse function of the Object3D class from three.js,\n * this will visit the current domain model and all of its children and\n * call the given function on every domain model instance. Each model is\n * visited first, then each of its children.\n */\n traverse(fn: (model: DomainModel) => void) {\n try {\n fn(this);\n } catch(error) {\n log.error('DomainModel.traverse', error);\n }\n for(const field of this.fields.values()) {\n if(field == null) {\n continue;\n }\n else if(field instanceof DomainModel) {\n field.traverse(fn);\n }\n else if(Array.isArray(field)) {\n if(field.length > 0 && field[0] instanceof DomainModel) {\n for(const item of field) {\n item.traverse(fn);\n }\n }\n }\n }\n }\n\n /**\n * A generator version of the member's traverse() function. This doesn't\n * use a callback so it can be exited early.\n */\n static *traverse(model: DomainModel) {\n if(!model) return;\n yield model;\n for(const field of model.fields.values()) {\n if(field == null) {\n continue;\n }\n else if(field instanceof DomainModel) {\n yield* DomainModel.traverse(field);\n }\n else if(Array.isArray(field)) {\n if(field.length > 0 && field[0] instanceof DomainModel) {\n for(const item of field) {\n yield* DomainModel.traverse(item);\n }\n }\n }\n }\n\n }\n}\n\n\n\n","/*\n * ------------------------------\n * GENERATED CODE - DO NOT EDIT\n * ------------------------------\n *\n * Generated from:\n * - src/domain.model\n * - codegen/templates/domain.ts.mustache\n * - codegen/gen_domain.ts.ts\n *\n */\n\nimport DomainModel from './DomainModel';\n\n\nexport class Appliance extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"id\", null);\n this.fields.set(\"cabinetId\", null);\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"type\", null);\n this.fields.set(\"make\", null);\n this.fields.set(\"model\", null);\n this.fields.set(\"userChoice\", null);\n this.fields.set(\"materials\", []);\n this.fields.set(\"position\", new Vector3());\n this.fields.set(\"rotation\", new Vector3());\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n }\n get id(): string {\n return this.get(\"id\") as string;\n }\n\n set id(value: string) {\n this.set(\"id\", value);\n }\n get cabinetId(): string {\n return this.get(\"cabinetId\") as string;\n }\n\n set cabinetId(value: string) {\n this.set(\"cabinetId\", value);\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get type(): string {\n return this.get(\"type\") as string;\n }\n\n set type(value: string) {\n this.set(\"type\", value);\n }\n get make(): string {\n return this.get(\"make\") as string;\n }\n\n set make(value: string) {\n this.set(\"make\", value);\n }\n get model(): string {\n return this.get(\"model\") as string;\n }\n\n set model(value: string) {\n this.set(\"model\", value);\n }\n get userChoice(): \"inclusion\" | \"exclusion\" | \"location\" {\n return this.get(\"userChoice\") as \"inclusion\" | \"exclusion\" | \"location\";\n }\n\n set userChoice(value: \"inclusion\" | \"exclusion\" | \"location\") {\n this.set(\"userChoice\", value);\n }\n get materials(): Array {\n return this.get(\"materials\") as Array;\n }\n\n set materials(value: Array) {\n this.set(\"materials\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Appliance {\n const clone = new Appliance(parent ?? this.parent);\n if(deep) {\n clone.id = this.id;\n clone.cabinetId = this.cabinetId;\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.type = this.type;\n clone.make = this.make;\n clone.model = this.model;\n clone.userChoice = this.userChoice;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.materials = this.materials.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Appliance\n {\n const result = new Appliance(parent);\n\n if(!data) {\n return result;\n }\n\n result.id = data[\"id\"] ?? null;\n result.cabinetId = data[\"cabinetId\"] ?? null;\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.type = data[\"type\"] ?? null;\n result.make = data[\"make\"] ?? null;\n result.model = data[\"model\"] ?? null;\n result.userChoice = data[\"userChoice\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : new Vector3();\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : new Vector3();\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.materials = data[\"materials\"] ?\n data[\"materials\"].map(\n (item: any) => Material.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Cabinet extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"id\", null);\n this.fields.set(\"sku\", null);\n this.fields.set(\"userChoice\", null);\n this.fields.set(\"position\", new Vector3());\n this.fields.set(\"rotation\", new Vector3());\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n }\n get id(): string {\n return this.get(\"id\") as string;\n }\n\n set id(value: string) {\n this.set(\"id\", value);\n }\n get sku(): string {\n return this.get(\"sku\") as string;\n }\n\n set sku(value: string) {\n this.set(\"sku\", value);\n }\n get userChoice(): \"inclusion\" | \"exclusion\" | \"location\" {\n return this.get(\"userChoice\") as \"inclusion\" | \"exclusion\" | \"location\";\n }\n\n set userChoice(value: \"inclusion\" | \"exclusion\" | \"location\") {\n this.set(\"userChoice\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Cabinet {\n const clone = new Cabinet(parent ?? this.parent);\n if(deep) {\n clone.id = this.id;\n clone.sku = this.sku;\n clone.userChoice = this.userChoice;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Cabinet\n {\n const result = new Cabinet(parent);\n\n if(!data) {\n return result;\n }\n\n result.id = data[\"id\"] ?? null;\n result.sku = data[\"sku\"] ?? null;\n result.userChoice = data[\"userChoice\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : new Vector3();\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : new Vector3();\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n\n result.commit();\n return result;\n }\n}\n\n\nexport class ClosetConfig extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"standardHeights\", []);\n this.fields.set(\"defaults\", Defaults.fromJSON({}));\n }\n get standardHeights(): Array {\n return this.get(\"standardHeights\") as Array;\n }\n\n set standardHeights(value: Array) {\n this.set(\"standardHeights\", value);\n }\n get defaults(): Defaults {\n return this.get(\"defaults\") as Defaults;\n }\n\n set defaults(value: Defaults) {\n this.set(\"defaults\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): ClosetConfig {\n const clone = new ClosetConfig(parent ?? this.parent);\n if(deep) {\n clone.defaults = this.defaults?.clone(true, clone);\n clone.standardHeights = Array.from(this.standardHeights);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): ClosetConfig\n {\n const result = new ClosetConfig(parent);\n\n if(!data) {\n return result;\n }\n\n result.defaults = data[\"defaults\"] ?\n Defaults.fromJSON(data[\"defaults\"], result)\n : Defaults.fromJSON({});\n result.standardHeights = data[\"standardHeights\"] ?? [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Defaults extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"style\", StyleDefaults.fromJSON({}));\n this.fields.set(\"material\", MaterialDefaults.fromJSON({}));\n }\n get style(): StyleDefaults {\n return this.get(\"style\") as StyleDefaults;\n }\n\n set style(value: StyleDefaults) {\n this.set(\"style\", value);\n }\n get material(): MaterialDefaults {\n return this.get(\"material\") as MaterialDefaults;\n }\n\n set material(value: MaterialDefaults) {\n this.set(\"material\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Defaults {\n const clone = new Defaults(parent ?? this.parent);\n if(deep) {\n clone.style = this.style?.clone(true, clone);\n clone.material = this.material?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Defaults\n {\n const result = new Defaults(parent);\n\n if(!data) {\n return result;\n }\n\n result.style = data[\"style\"] ?\n StyleDefaults.fromJSON(data[\"style\"], result)\n : StyleDefaults.fromJSON({});\n result.material = data[\"material\"] ?\n MaterialDefaults.fromJSON(data[\"material\"], result)\n : MaterialDefaults.fromJSON({});\n\n result.commit();\n return result;\n }\n}\n\n\nexport class GenericSku extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"id\", null);\n this.fields.set(\"sku\", null);\n this.fields.set(\"position\", new Vector3());\n this.fields.set(\"rotation\", new Vector3());\n }\n get id(): string {\n return this.get(\"id\") as string;\n }\n\n set id(value: string) {\n this.set(\"id\", value);\n }\n get sku(): string {\n return this.get(\"sku\") as string;\n }\n\n set sku(value: string) {\n this.set(\"sku\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): GenericSku {\n const clone = new GenericSku(parent ?? this.parent);\n if(deep) {\n clone.id = this.id;\n clone.sku = this.sku;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): GenericSku\n {\n const result = new GenericSku(parent);\n\n if(!data) {\n return result;\n }\n\n result.id = data[\"id\"] ?? null;\n result.sku = data[\"sku\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : new Vector3();\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : new Vector3();\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Obstruction extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"id\", null);\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"type\", null);\n this.fields.set(\"position\", new Vector3());\n this.fields.set(\"rotation\", new Vector3());\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n }\n get id(): string {\n return this.get(\"id\") as string;\n }\n\n set id(value: string) {\n this.set(\"id\", value);\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get type(): string {\n return this.get(\"type\") as string;\n }\n\n set type(value: string) {\n this.set(\"type\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Obstruction {\n const clone = new Obstruction(parent ?? this.parent);\n if(deep) {\n clone.id = this.id;\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.type = this.type;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Obstruction\n {\n const result = new Obstruction(parent);\n\n if(!data) {\n return result;\n }\n\n result.id = data[\"id\"] ?? null;\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.type = data[\"type\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : new Vector3();\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : new Vector3();\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n\n result.commit();\n return result;\n }\n}\n\n\nexport class DoorObstruction extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"id\", null);\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"hinge\", \"right\");\n this.fields.set(\"swing\", \"in\");\n this.fields.set(\"position\", new Vector3());\n this.fields.set(\"rotation\", new Vector3());\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n }\n get id(): string {\n return this.get(\"id\") as string;\n }\n\n set id(value: string) {\n this.set(\"id\", value);\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get hinge(): \"left\" | \"right\" | \"double\" | \"pocket\" | \"pocket-double\" | \"bi-fold-left\" | \"bi-fold-right\" | \"bi-fold-double\" | \"bypass\" {\n return this.get(\"hinge\") as \"left\" | \"right\" | \"double\" | \"pocket\" | \"pocket-double\" | \"bi-fold-left\" | \"bi-fold-right\" | \"bi-fold-double\" | \"bypass\";\n }\n\n set hinge(value: \"left\" | \"right\" | \"double\" | \"pocket\" | \"pocket-double\" | \"bi-fold-left\" | \"bi-fold-right\" | \"bi-fold-double\" | \"bypass\") {\n this.set(\"hinge\", value);\n }\n get swing(): \"in\" | \"out\" {\n return this.get(\"swing\") as \"in\" | \"out\";\n }\n\n set swing(value: \"in\" | \"out\") {\n this.set(\"swing\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): DoorObstruction {\n const clone = new DoorObstruction(parent ?? this.parent);\n if(deep) {\n clone.id = this.id;\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.hinge = this.hinge;\n clone.swing = this.swing;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): DoorObstruction\n {\n const result = new DoorObstruction(parent);\n\n if(!data) {\n return result;\n }\n\n result.id = data[\"id\"] ?? null;\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.hinge = data[\"hinge\"] ?? \"right\";\n result.swing = data[\"swing\"] ?? \"in\";\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : new Vector3();\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : new Vector3();\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n\n result.commit();\n return result;\n }\n}\n\n\nexport class StyleDefaults extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"base\", null);\n this.fields.set(\"crown\", null);\n this.fields.set(\"doorFrame\", null);\n this.fields.set(\"doorPanel\", null);\n this.fields.set(\"drawerFrame\", null);\n this.fields.set(\"drawerPanel\", null);\n this.fields.set(\"fence\", null);\n this.fields.set(\"hardware\", null);\n this.fields.set(\"rod\", null);\n }\n get base(): string {\n return this.get(\"base\") as string;\n }\n\n set base(value: string) {\n this.set(\"base\", value);\n }\n get crown(): string {\n return this.get(\"crown\") as string;\n }\n\n set crown(value: string) {\n this.set(\"crown\", value);\n }\n get doorFrame(): string {\n return this.get(\"doorFrame\") as string;\n }\n\n set doorFrame(value: string) {\n this.set(\"doorFrame\", value);\n }\n get doorPanel(): string {\n return this.get(\"doorPanel\") as string;\n }\n\n set doorPanel(value: string) {\n this.set(\"doorPanel\", value);\n }\n get drawerFrame(): string {\n return this.get(\"drawerFrame\") as string;\n }\n\n set drawerFrame(value: string) {\n this.set(\"drawerFrame\", value);\n }\n get drawerPanel(): string {\n return this.get(\"drawerPanel\") as string;\n }\n\n set drawerPanel(value: string) {\n this.set(\"drawerPanel\", value);\n }\n get fence(): string {\n return this.get(\"fence\") as string;\n }\n\n set fence(value: string) {\n this.set(\"fence\", value);\n }\n get hardware(): string {\n return this.get(\"hardware\") as string;\n }\n\n set hardware(value: string) {\n this.set(\"hardware\", value);\n }\n get rod(): string {\n return this.get(\"rod\") as string;\n }\n\n set rod(value: string) {\n this.set(\"rod\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): StyleDefaults {\n const clone = new StyleDefaults(parent ?? this.parent);\n if(deep) {\n clone.base = this.base;\n clone.crown = this.crown;\n clone.doorFrame = this.doorFrame;\n clone.doorPanel = this.doorPanel;\n clone.drawerFrame = this.drawerFrame;\n clone.drawerPanel = this.drawerPanel;\n clone.fence = this.fence;\n clone.hardware = this.hardware;\n clone.rod = this.rod;\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): StyleDefaults\n {\n const result = new StyleDefaults(parent);\n\n if(!data) {\n return result;\n }\n\n result.base = data[\"base\"] ?? null;\n result.crown = data[\"crown\"] ?? null;\n result.doorFrame = data[\"doorFrame\"] ?? null;\n result.doorPanel = data[\"doorPanel\"] ?? null;\n result.drawerFrame = data[\"drawerFrame\"] ?? null;\n result.drawerPanel = data[\"drawerPanel\"] ?? null;\n result.fence = data[\"fence\"] ?? null;\n result.hardware = data[\"hardware\"] ?? null;\n result.rod = data[\"rod\"] ?? null;\n\n result.commit();\n return result;\n }\n}\n\n\nexport class ClosetUnit extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"id\", null);\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"thickness\", 0.75);\n this.fields.set(\"topShelf\", null);\n this.fields.set(\"bottomShelf\", null);\n this.fields.set(\"toeKick\", false);\n this.fields.set(\"materials\", []);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n this.fields.set(\"content\", Section.fromJSON({}));\n }\n get id(): string {\n return this.get(\"id\") as string;\n }\n\n set id(value: string) {\n this.set(\"id\", value);\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get thickness(): 1 | 0.75 | 0.5 {\n return this.get(\"thickness\") as 1 | 0.75 | 0.5;\n }\n\n set thickness(value: 1 | 0.75 | 0.5) {\n this.set(\"thickness\", value);\n }\n get topShelf(): number {\n return this.get(\"topShelf\") as number;\n }\n\n set topShelf(value: number) {\n this.set(\"topShelf\", value);\n }\n get bottomShelf(): number {\n return this.get(\"bottomShelf\") as number;\n }\n\n set bottomShelf(value: number) {\n this.set(\"bottomShelf\", value);\n }\n get toeKick(): boolean {\n return this.get(\"toeKick\") as boolean;\n }\n\n set toeKick(value: boolean) {\n this.set(\"toeKick\", value);\n }\n get materials(): Array {\n return this.get(\"materials\") as Array;\n }\n\n set materials(value: Array) {\n this.set(\"materials\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n get content(): Section {\n return this.get(\"content\") as Section;\n }\n\n set content(value: Section) {\n this.set(\"content\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): ClosetUnit {\n const clone = new ClosetUnit(parent ?? this.parent);\n if(deep) {\n clone.id = this.id;\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.thickness = this.thickness;\n clone.topShelf = this.topShelf;\n clone.bottomShelf = this.bottomShelf;\n clone.toeKick = this.toeKick;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.content = this.content?.clone(true, clone);\n clone.materials = this.materials.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): ClosetUnit\n {\n const result = new ClosetUnit(parent);\n\n if(!data) {\n return result;\n }\n\n result.id = data[\"id\"] ?? null;\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.thickness = data[\"thickness\"] ?? 0.75;\n result.topShelf = data[\"topShelf\"] ?? null;\n result.bottomShelf = data[\"bottomShelf\"] ?? null;\n result.toeKick = data[\"toeKick\"] ?? false;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.content = data[\"content\"] ?\n Section.fromJSON(data[\"content\"], result)\n : Section.fromJSON({});\n result.materials = data[\"materials\"] ?\n data[\"materials\"].map(\n (item: any) => Material.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Cubby extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"opacity\", 1);\n this.fields.set(\"diagonal\", false);\n this.fields.set(\"thickness\", 0.5);\n this.fields.set(\"countY\", null);\n this.fields.set(\"countX\", null);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n this.fields.set(\"faceMaterial\", Material.fromJSON({}));\n this.fields.set(\"boxMaterial\", Material.fromJSON({}));\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get opacity(): number {\n return this.get(\"opacity\") as number;\n }\n\n set opacity(value: number) {\n this.set(\"opacity\", value);\n }\n get diagonal(): boolean {\n return this.get(\"diagonal\") as boolean;\n }\n\n set diagonal(value: boolean) {\n this.set(\"diagonal\", value);\n }\n get thickness(): 1 | 0.75 | 0.5 {\n return this.get(\"thickness\") as 1 | 0.75 | 0.5;\n }\n\n set thickness(value: 1 | 0.75 | 0.5) {\n this.set(\"thickness\", value);\n }\n get countY(): number {\n return this.get(\"countY\") as number;\n }\n\n set countY(value: number) {\n this.set(\"countY\", value);\n }\n get countX(): number {\n return this.get(\"countX\") as number;\n }\n\n set countX(value: number) {\n this.set(\"countX\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n get faceMaterial(): Material {\n return this.get(\"faceMaterial\") as Material;\n }\n\n set faceMaterial(value: Material) {\n this.set(\"faceMaterial\", value);\n }\n get boxMaterial(): Material {\n return this.get(\"boxMaterial\") as Material;\n }\n\n set boxMaterial(value: Material) {\n this.set(\"boxMaterial\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Cubby {\n const clone = new Cubby(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.opacity = this.opacity;\n clone.diagonal = this.diagonal;\n clone.thickness = this.thickness;\n clone.countY = this.countY;\n clone.countX = this.countX;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.faceMaterial = this.faceMaterial?.clone(true, clone);\n clone.boxMaterial = this.boxMaterial?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Cubby\n {\n const result = new Cubby(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.opacity = data[\"opacity\"] ?? 1;\n result.diagonal = data[\"diagonal\"] ?? false;\n result.thickness = data[\"thickness\"] ?? 0.5;\n result.countY = data[\"countY\"] ?? null;\n result.countX = data[\"countX\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.faceMaterial = data[\"faceMaterial\"] ?\n Material.fromJSON(data[\"faceMaterial\"], result)\n : Material.fromJSON({});\n result.boxMaterial = data[\"boxMaterial\"] ?\n Material.fromJSON(data[\"boxMaterial\"], result)\n : Material.fromJSON({});\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Divider extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"opacity\", 1);\n this.fields.set(\"orientation\", null);\n this.fields.set(\"thickness\", null);\n this.fields.set(\"materials\", []);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get opacity(): number {\n return this.get(\"opacity\") as number;\n }\n\n set opacity(value: number) {\n this.set(\"opacity\", value);\n }\n get orientation(): \"horizontal\" | \"vertical\" {\n return this.get(\"orientation\") as \"horizontal\" | \"vertical\";\n }\n\n set orientation(value: \"horizontal\" | \"vertical\") {\n this.set(\"orientation\", value);\n }\n get thickness(): 1 | 0.75 | 0.5 | null {\n const value = this.get(\"thickness\") as 1 | 0.75 | 0.5 | null;\n if(value == null && this.parent) {\n return (this.parent as any).thickness;\n } else {\n return value;\n }\n }\n\n set thickness(value: 1 | 0.75 | 0.5 | null) {\n this.set(\"thickness\", value);\n }\n get materials(): Array {\n return this.get(\"materials\") as Array;\n }\n\n set materials(value: Array) {\n this.set(\"materials\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Divider {\n const clone = new Divider(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.opacity = this.opacity;\n clone.orientation = this.orientation;\n clone.thickness = this.thickness;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.materials = this.materials.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Divider\n {\n const result = new Divider(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.opacity = data[\"opacity\"] ?? 1;\n result.orientation = data[\"orientation\"] ?? null;\n result.thickness = data[\"thickness\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.materials = data[\"materials\"] ?\n data[\"materials\"].map(\n (item: any) => Material.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Door extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"hinge\", \"left\");\n this.fields.set(\"open\", 0);\n this.fields.set(\"opacity\", 1);\n this.fields.set(\"type\", \"door\");\n this.fields.set(\"layerId\", null);\n this.fields.set(\"handles\", []);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n this.fields.set(\"frame\", null);\n this.fields.set(\"panel\", Panel.fromJSON({}));\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get hinge(): \"bottom\" | \"top\" | \"left\" | \"right\" | \"double\" {\n return this.get(\"hinge\") as \"bottom\" | \"top\" | \"left\" | \"right\" | \"double\";\n }\n\n set hinge(value: \"bottom\" | \"top\" | \"left\" | \"right\" | \"double\") {\n this.set(\"hinge\", value);\n }\n get open(): number {\n return this.get(\"open\") as number;\n }\n\n set open(value: number) {\n this.set(\"open\", value);\n }\n get opacity(): number {\n return this.get(\"opacity\") as number;\n }\n\n set opacity(value: number) {\n this.set(\"opacity\", value);\n }\n get type(): \"hamper\" | \"door\" {\n return this.get(\"type\") as \"hamper\" | \"door\";\n }\n\n set type(value: \"hamper\" | \"door\") {\n this.set(\"type\", value);\n }\n get layerId(): string {\n return this.get(\"layerId\") as string;\n }\n\n set layerId(value: string) {\n this.set(\"layerId\", value);\n }\n get handles(): Array {\n return this.get(\"handles\") as Array;\n }\n\n set handles(value: Array) {\n this.set(\"handles\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n get frame(): Frame {\n return this.get(\"frame\") as Frame;\n }\n\n set frame(value: Frame) {\n this.set(\"frame\", value);\n }\n get panel(): Panel {\n return this.get(\"panel\") as Panel;\n }\n\n set panel(value: Panel) {\n this.set(\"panel\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Door {\n const clone = new Door(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.hinge = this.hinge;\n clone.open = this.open;\n clone.opacity = this.opacity;\n clone.type = this.type;\n clone.layerId = this.layerId;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.frame = this.frame?.clone(true, clone);\n clone.panel = this.panel?.clone(true, clone);\n clone.handles = this.handles.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Door\n {\n const result = new Door(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.hinge = data[\"hinge\"] ?? \"left\";\n result.open = data[\"open\"] ?? 0;\n result.opacity = data[\"opacity\"] ?? 1;\n result.type = data[\"type\"] ?? \"door\";\n result.layerId = data[\"layerId\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.frame = data[\"frame\"] ?\n Frame.fromJSON(data[\"frame\"], result)\n : null;\n result.panel = data[\"panel\"] ?\n Panel.fromJSON(data[\"panel\"], result)\n : Panel.fromJSON({});\n result.handles = data[\"handles\"] ?\n data[\"handles\"].map(\n (item: any) => Handle.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Drawer extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"opacity\", 1);\n this.fields.set(\"open\", 0);\n this.fields.set(\"scoop\", null);\n this.fields.set(\"type\", null);\n this.fields.set(\"layerId\", null);\n this.fields.set(\"handles\", []);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n this.fields.set(\"frame\", null);\n this.fields.set(\"panel\", Panel.fromJSON({}));\n this.fields.set(\"box\", DrawerBox.fromJSON({}));\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get opacity(): number {\n return this.get(\"opacity\") as number;\n }\n\n set opacity(value: number) {\n this.set(\"opacity\", value);\n }\n get open(): number {\n return this.get(\"open\") as number;\n }\n\n set open(value: number) {\n this.set(\"open\", value);\n }\n get scoop(): boolean {\n return this.get(\"scoop\") as boolean;\n }\n\n set scoop(value: boolean) {\n this.set(\"scoop\", value);\n }\n get type(): string {\n return this.get(\"type\") as string;\n }\n\n set type(value: string) {\n this.set(\"type\", value);\n }\n get layerId(): string {\n return this.get(\"layerId\") as string;\n }\n\n set layerId(value: string) {\n this.set(\"layerId\", value);\n }\n get handles(): Array {\n return this.get(\"handles\") as Array;\n }\n\n set handles(value: Array) {\n this.set(\"handles\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n get frame(): Frame {\n return this.get(\"frame\") as Frame;\n }\n\n set frame(value: Frame) {\n this.set(\"frame\", value);\n }\n get panel(): Panel {\n return this.get(\"panel\") as Panel;\n }\n\n set panel(value: Panel) {\n this.set(\"panel\", value);\n }\n get box(): DrawerBox {\n return this.get(\"box\") as DrawerBox;\n }\n\n set box(value: DrawerBox) {\n this.set(\"box\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Drawer {\n const clone = new Drawer(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.opacity = this.opacity;\n clone.open = this.open;\n clone.scoop = this.scoop;\n clone.type = this.type;\n clone.layerId = this.layerId;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.frame = this.frame?.clone(true, clone);\n clone.panel = this.panel?.clone(true, clone);\n clone.box = this.box?.clone(true, clone);\n clone.handles = this.handles.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Drawer\n {\n const result = new Drawer(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.opacity = data[\"opacity\"] ?? 1;\n result.open = data[\"open\"] ?? 0;\n result.scoop = data[\"scoop\"] ?? null;\n result.type = data[\"type\"] ?? null;\n result.layerId = data[\"layerId\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.frame = data[\"frame\"] ?\n Frame.fromJSON(data[\"frame\"], result)\n : null;\n result.panel = data[\"panel\"] ?\n Panel.fromJSON(data[\"panel\"], result)\n : Panel.fromJSON({});\n result.box = data[\"box\"] ?\n DrawerBox.fromJSON(data[\"box\"], result)\n : DrawerBox.fromJSON({});\n result.handles = data[\"handles\"] ?\n data[\"handles\"].map(\n (item: any) => Handle.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class DrawerBox extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"front\", null);\n this.fields.set(\"material\", Material.fromJSON({}));\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get front(): boolean {\n return this.get(\"front\") as boolean;\n }\n\n set front(value: boolean) {\n this.set(\"front\", value);\n }\n get material(): Material {\n return this.get(\"material\") as Material;\n }\n\n set material(value: Material) {\n this.set(\"material\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): DrawerBox {\n const clone = new DrawerBox(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.front = this.front;\n clone.material = this.material?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): DrawerBox\n {\n const result = new DrawerBox(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.front = data[\"front\"] ?? null;\n result.material = data[\"material\"] ?\n Material.fromJSON(data[\"material\"], result)\n : Material.fromJSON({});\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Frame extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"style\", \"frame_original_2.5in\");\n this.fields.set(\"material\", Material.fromJSON({}));\n }\n get style(): string {\n return this.get(\"style\") as string;\n }\n\n set style(value: string) {\n this.set(\"style\", value);\n }\n get material(): Material {\n return this.get(\"material\") as Material;\n }\n\n set material(value: Material) {\n this.set(\"material\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Frame {\n const clone = new Frame(parent ?? this.parent);\n if(deep) {\n clone.style = this.style;\n clone.material = this.material?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Frame\n {\n const result = new Frame(parent);\n\n if(!data) {\n return result;\n }\n\n result.style = data[\"style\"] ?? \"frame_original_2.5in\";\n result.material = data[\"material\"] ?\n Material.fromJSON(data[\"material\"], result)\n : Material.fromJSON({});\n\n result.commit();\n return result;\n }\n}\n\n\nexport class GenericAsset extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"assetId\", null);\n this.fields.set(\"filename\", null);\n this.fields.set(\"opacity\", 1);\n this.fields.set(\"type\", null);\n this.fields.set(\"layerId\", null);\n this.fields.set(\"availableWidths\", []);\n this.fields.set(\"materials\", []);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get assetId(): string {\n return this.get(\"assetId\") as string;\n }\n\n set assetId(value: string) {\n this.set(\"assetId\", value);\n }\n get filename(): string {\n return this.get(\"filename\") as string;\n }\n\n set filename(value: string) {\n this.set(\"filename\", value);\n }\n get opacity(): number {\n return this.get(\"opacity\") as number;\n }\n\n set opacity(value: number) {\n this.set(\"opacity\", value);\n }\n get type(): string {\n return this.get(\"type\") as string;\n }\n\n set type(value: string) {\n this.set(\"type\", value);\n }\n get layerId(): string {\n return this.get(\"layerId\") as string;\n }\n\n set layerId(value: string) {\n this.set(\"layerId\", value);\n }\n get availableWidths(): Array {\n return this.get(\"availableWidths\") as Array;\n }\n\n set availableWidths(value: Array) {\n this.set(\"availableWidths\", value);\n }\n get materials(): Array {\n return this.get(\"materials\") as Array;\n }\n\n set materials(value: Array) {\n this.set(\"materials\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): GenericAsset {\n const clone = new GenericAsset(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.assetId = this.assetId;\n clone.filename = this.filename;\n clone.opacity = this.opacity;\n clone.type = this.type;\n clone.layerId = this.layerId;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.availableWidths = Array.from(this.availableWidths);\n clone.materials = this.materials.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): GenericAsset\n {\n const result = new GenericAsset(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.assetId = data[\"assetId\"] ?? null;\n result.filename = data[\"filename\"] ?? null;\n result.opacity = data[\"opacity\"] ?? 1;\n result.type = data[\"type\"] ?? null;\n result.layerId = data[\"layerId\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.availableWidths = data[\"availableWidths\"] ?? [];\n result.materials = data[\"materials\"] ?\n data[\"materials\"].map(\n (item: any) => Material.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Handle extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"assetId\", null);\n this.fields.set(\"isExtrusionPull\", null);\n this.fields.set(\"style\", null);\n this.fields.set(\"opacity\", 1);\n this.fields.set(\"side\", null);\n this.fields.set(\"materials\", []);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get assetId(): string {\n return this.get(\"assetId\") as string;\n }\n\n set assetId(value: string) {\n this.set(\"assetId\", value);\n }\n get isExtrusionPull(): boolean {\n return this.get(\"isExtrusionPull\") as boolean;\n }\n\n set isExtrusionPull(value: boolean) {\n this.set(\"isExtrusionPull\", value);\n }\n get style(): string {\n return this.get(\"style\") as string;\n }\n\n set style(value: string) {\n this.set(\"style\", value);\n }\n get opacity(): number {\n return this.get(\"opacity\") as number;\n }\n\n set opacity(value: number) {\n this.set(\"opacity\", value);\n }\n get side(): null | \"top\" | \"bottom\" | \"left\" | \"right\" {\n return this.get(\"side\") as null | \"top\" | \"bottom\" | \"left\" | \"right\";\n }\n\n set side(value: null | \"top\" | \"bottom\" | \"left\" | \"right\") {\n this.set(\"side\", value);\n }\n get materials(): Array {\n return this.get(\"materials\") as Array;\n }\n\n set materials(value: Array) {\n this.set(\"materials\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Handle {\n const clone = new Handle(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.assetId = this.assetId;\n clone.isExtrusionPull = this.isExtrusionPull;\n clone.style = this.style;\n clone.opacity = this.opacity;\n clone.side = this.side;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.materials = this.materials.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Handle\n {\n const result = new Handle(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.assetId = data[\"assetId\"] ?? null;\n result.isExtrusionPull = data[\"isExtrusionPull\"] ?? null;\n result.style = data[\"style\"] ?? null;\n result.opacity = data[\"opacity\"] ?? 1;\n result.side = data[\"side\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.materials = data[\"materials\"] ?\n data[\"materials\"].map(\n (item: any) => Material.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class HookRack extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"opacity\", 1);\n this.fields.set(\"count\", null);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n this.fields.set(\"panel\", Panel.fromJSON({}));\n this.fields.set(\"hook\", null);\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get opacity(): number {\n return this.get(\"opacity\") as number;\n }\n\n set opacity(value: number) {\n this.set(\"opacity\", value);\n }\n get count(): number {\n return this.get(\"count\") as number;\n }\n\n set count(value: number) {\n this.set(\"count\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n get panel(): Panel {\n return this.get(\"panel\") as Panel;\n }\n\n set panel(value: Panel) {\n this.set(\"panel\", value);\n }\n get hook(): GenericAsset {\n return this.get(\"hook\") as GenericAsset;\n }\n\n set hook(value: GenericAsset) {\n this.set(\"hook\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): HookRack {\n const clone = new HookRack(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.opacity = this.opacity;\n clone.count = this.count;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.panel = this.panel?.clone(true, clone);\n clone.hook = this.hook?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): HookRack\n {\n const result = new HookRack(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.opacity = data[\"opacity\"] ?? 1;\n result.count = data[\"count\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.panel = data[\"panel\"] ?\n Panel.fromJSON(data[\"panel\"], result)\n : Panel.fromJSON({});\n result.hook = data[\"hook\"] ?\n GenericAsset.fromJSON(data[\"hook\"], result)\n : null;\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Interval extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"start\", null);\n this.fields.set(\"width\", null);\n }\n get start(): number {\n return this.get(\"start\") as number;\n }\n\n set start(value: number) {\n this.set(\"start\", value);\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Interval {\n const clone = new Interval(parent ?? this.parent);\n if(deep) {\n clone.start = this.start;\n clone.width = this.width;\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Interval\n {\n const result = new Interval(parent);\n\n if(!data) {\n return result;\n }\n\n result.start = data[\"start\"] ?? null;\n result.width = data[\"width\"] ?? null;\n\n result.commit();\n return result;\n }\n}\n\n\nexport class KitchenApplicationMetadata extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"chatUserMessage\", null);\n this.fields.set(\"chatBotMessage\", null);\n this.fields.set(\"selectedObjectId\", null);\n this.fields.set(\"applicationRequest\", null);\n this.fields.set(\"render\", null);\n this.fields.set(\"resizeOptions\", []);\n this.fields.set(\"replaceOptions\", []);\n }\n get chatUserMessage(): string {\n return this.get(\"chatUserMessage\") as string;\n }\n\n set chatUserMessage(value: string) {\n this.set(\"chatUserMessage\", value);\n }\n get chatBotMessage(): string {\n return this.get(\"chatBotMessage\") as string;\n }\n\n set chatBotMessage(value: string) {\n this.set(\"chatBotMessage\", value);\n }\n get selectedObjectId(): string {\n return this.get(\"selectedObjectId\") as string;\n }\n\n set selectedObjectId(value: string) {\n this.set(\"selectedObjectId\", value);\n }\n get applicationRequest(): \"get-resize-options\" | \"resize\" | \"get-replace-options\" | \"replace\" | \"move\" | \"remove\" {\n return this.get(\"applicationRequest\") as \"get-resize-options\" | \"resize\" | \"get-replace-options\" | \"replace\" | \"move\" | \"remove\";\n }\n\n set applicationRequest(value: \"get-resize-options\" | \"resize\" | \"get-replace-options\" | \"replace\" | \"move\" | \"remove\") {\n this.set(\"applicationRequest\", value);\n }\n get render(): boolean {\n return this.get(\"render\") as boolean;\n }\n\n set render(value: boolean) {\n this.set(\"render\", value);\n }\n get resizeOptions(): Array {\n return this.get(\"resizeOptions\") as Array;\n }\n\n set resizeOptions(value: Array) {\n this.set(\"resizeOptions\", value);\n }\n get replaceOptions(): Array {\n return this.get(\"replaceOptions\") as Array;\n }\n\n set replaceOptions(value: Array) {\n this.set(\"replaceOptions\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): KitchenApplicationMetadata {\n const clone = new KitchenApplicationMetadata(parent ?? this.parent);\n if(deep) {\n clone.chatUserMessage = this.chatUserMessage;\n clone.chatBotMessage = this.chatBotMessage;\n clone.selectedObjectId = this.selectedObjectId;\n clone.applicationRequest = this.applicationRequest;\n clone.render = this.render;\n clone.resizeOptions = this.resizeOptions.map(\n item => item.clone(true, clone));\n clone.replaceOptions = this.replaceOptions.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): KitchenApplicationMetadata\n {\n const result = new KitchenApplicationMetadata(parent);\n\n if(!data) {\n return result;\n }\n\n result.chatUserMessage = data[\"chatUserMessage\"] ?? null;\n result.chatBotMessage = data[\"chatBotMessage\"] ?? null;\n result.selectedObjectId = data[\"selectedObjectId\"] ?? null;\n result.applicationRequest = data[\"applicationRequest\"] ?? null;\n result.render = data[\"render\"] ?? null;\n result.resizeOptions = data[\"resizeOptions\"] ?\n data[\"resizeOptions\"].map(\n (item: any) => SkuOption.fromJSON(item, result))\n : [];\n result.replaceOptions = data[\"replaceOptions\"] ?\n data[\"replaceOptions\"].map(\n (item: any) => SkuOption.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Lights extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"type\", \"puck\");\n this.fields.set(\"count\", null);\n this.fields.set(\"materials\", []);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get type(): \"puck\" | \"strip\" {\n return this.get(\"type\") as \"puck\" | \"strip\";\n }\n\n set type(value: \"puck\" | \"strip\") {\n this.set(\"type\", value);\n }\n get count(): number {\n return this.get(\"count\") as number;\n }\n\n set count(value: number) {\n this.set(\"count\", value);\n }\n get materials(): Array {\n return this.get(\"materials\") as Array;\n }\n\n set materials(value: Array) {\n this.set(\"materials\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Lights {\n const clone = new Lights(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.type = this.type;\n clone.count = this.count;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.materials = this.materials.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Lights\n {\n const result = new Lights(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.type = data[\"type\"] ?? \"puck\";\n result.count = data[\"count\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.materials = data[\"materials\"] ?\n data[\"materials\"].map(\n (item: any) => Material.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Material extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"assetId\", null);\n this.fields.set(\"type\", null);\n this.fields.set(\"color\", null);\n this.fields.set(\"tint\", null);\n this.fields.set(\"cubemap\", null);\n this.fields.set(\"cubemapSuffix\", null);\n }\n get assetId(): string {\n return this.get(\"assetId\") as string;\n }\n\n set assetId(value: string) {\n this.set(\"assetId\", value);\n }\n get type(): string {\n return this.get(\"type\") as string;\n }\n\n set type(value: string) {\n this.set(\"type\", value);\n }\n get color(): string {\n return this.get(\"color\") as string;\n }\n\n set color(value: string) {\n this.set(\"color\", value);\n }\n get tint(): string {\n return this.get(\"tint\") as string;\n }\n\n set tint(value: string) {\n this.set(\"tint\", value);\n }\n get cubemap(): string {\n return this.get(\"cubemap\") as string;\n }\n\n set cubemap(value: string) {\n this.set(\"cubemap\", value);\n }\n get cubemapSuffix(): string {\n return this.get(\"cubemapSuffix\") as string;\n }\n\n set cubemapSuffix(value: string) {\n this.set(\"cubemapSuffix\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Material {\n const clone = new Material(parent ?? this.parent);\n if(deep) {\n clone.assetId = this.assetId;\n clone.type = this.type;\n clone.color = this.color;\n clone.tint = this.tint;\n clone.cubemap = this.cubemap;\n clone.cubemapSuffix = this.cubemapSuffix;\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Material\n {\n const result = new Material(parent);\n\n if(!data) {\n return result;\n }\n\n result.assetId = data[\"assetId\"] ?? null;\n result.type = data[\"type\"] ?? null;\n result.color = data[\"color\"] ?? null;\n result.tint = data[\"tint\"] ?? null;\n result.cubemap = data[\"cubemap\"] ?? null;\n result.cubemapSuffix = data[\"cubemapSuffix\"] ?? null;\n\n result.commit();\n return result;\n }\n}\n\n\nexport class MaterialDefaults extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"backing\", null);\n this.fields.set(\"base\", null);\n this.fields.set(\"basket\", null);\n this.fields.set(\"crown\", null);\n this.fields.set(\"door\", null);\n this.fields.set(\"drawer\", null);\n this.fields.set(\"drawerBox\", null);\n this.fields.set(\"edgeband\", null);\n this.fields.set(\"fence\", null);\n this.fields.set(\"hamper\", null);\n this.fields.set(\"hardware\", null);\n this.fields.set(\"light\", null);\n this.fields.set(\"melamineCountertop\", null);\n this.fields.set(\"rod\", null);\n this.fields.set(\"shelving\", null);\n this.fields.set(\"spinner\", null);\n this.fields.set(\"tagFabric\", null);\n this.fields.set(\"tagMetal\", null);\n this.fields.set(\"toeKick\", null);\n this.fields.set(\"vertical\", null);\n }\n get backing(): Material {\n return this.get(\"backing\") as Material;\n }\n\n set backing(value: Material) {\n this.set(\"backing\", value);\n }\n get base(): Material {\n return this.get(\"base\") as Material;\n }\n\n set base(value: Material) {\n this.set(\"base\", value);\n }\n get basket(): Material {\n return this.get(\"basket\") as Material;\n }\n\n set basket(value: Material) {\n this.set(\"basket\", value);\n }\n get crown(): Material {\n return this.get(\"crown\") as Material;\n }\n\n set crown(value: Material) {\n this.set(\"crown\", value);\n }\n get door(): Material {\n return this.get(\"door\") as Material;\n }\n\n set door(value: Material) {\n this.set(\"door\", value);\n }\n get drawer(): Material {\n return this.get(\"drawer\") as Material;\n }\n\n set drawer(value: Material) {\n this.set(\"drawer\", value);\n }\n get drawerBox(): Material {\n return this.get(\"drawerBox\") as Material;\n }\n\n set drawerBox(value: Material) {\n this.set(\"drawerBox\", value);\n }\n get edgeband(): Material {\n return this.get(\"edgeband\") as Material;\n }\n\n set edgeband(value: Material) {\n this.set(\"edgeband\", value);\n }\n get fence(): Material {\n return this.get(\"fence\") as Material;\n }\n\n set fence(value: Material) {\n this.set(\"fence\", value);\n }\n get hamper(): Material {\n return this.get(\"hamper\") as Material;\n }\n\n set hamper(value: Material) {\n this.set(\"hamper\", value);\n }\n get hardware(): Material {\n return this.get(\"hardware\") as Material;\n }\n\n set hardware(value: Material) {\n this.set(\"hardware\", value);\n }\n get light(): Material {\n return this.get(\"light\") as Material;\n }\n\n set light(value: Material) {\n this.set(\"light\", value);\n }\n get melamineCountertop(): Material {\n return this.get(\"melamineCountertop\") as Material;\n }\n\n set melamineCountertop(value: Material) {\n this.set(\"melamineCountertop\", value);\n }\n get rod(): Material {\n return this.get(\"rod\") as Material;\n }\n\n set rod(value: Material) {\n this.set(\"rod\", value);\n }\n get shelving(): Material {\n return this.get(\"shelving\") as Material;\n }\n\n set shelving(value: Material) {\n this.set(\"shelving\", value);\n }\n get spinner(): Material {\n return this.get(\"spinner\") as Material;\n }\n\n set spinner(value: Material) {\n this.set(\"spinner\", value);\n }\n get tagFabric(): Material {\n return this.get(\"tagFabric\") as Material;\n }\n\n set tagFabric(value: Material) {\n this.set(\"tagFabric\", value);\n }\n get tagMetal(): Material {\n return this.get(\"tagMetal\") as Material;\n }\n\n set tagMetal(value: Material) {\n this.set(\"tagMetal\", value);\n }\n get toeKick(): Material {\n return this.get(\"toeKick\") as Material;\n }\n\n set toeKick(value: Material) {\n this.set(\"toeKick\", value);\n }\n get vertical(): Material {\n return this.get(\"vertical\") as Material;\n }\n\n set vertical(value: Material) {\n this.set(\"vertical\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): MaterialDefaults {\n const clone = new MaterialDefaults(parent ?? this.parent);\n if(deep) {\n clone.backing = this.backing?.clone(true, clone);\n clone.base = this.base?.clone(true, clone);\n clone.basket = this.basket?.clone(true, clone);\n clone.crown = this.crown?.clone(true, clone);\n clone.door = this.door?.clone(true, clone);\n clone.drawer = this.drawer?.clone(true, clone);\n clone.drawerBox = this.drawerBox?.clone(true, clone);\n clone.edgeband = this.edgeband?.clone(true, clone);\n clone.fence = this.fence?.clone(true, clone);\n clone.hamper = this.hamper?.clone(true, clone);\n clone.hardware = this.hardware?.clone(true, clone);\n clone.light = this.light?.clone(true, clone);\n clone.melamineCountertop = this.melamineCountertop?.clone(true, clone);\n clone.rod = this.rod?.clone(true, clone);\n clone.shelving = this.shelving?.clone(true, clone);\n clone.spinner = this.spinner?.clone(true, clone);\n clone.tagFabric = this.tagFabric?.clone(true, clone);\n clone.tagMetal = this.tagMetal?.clone(true, clone);\n clone.toeKick = this.toeKick?.clone(true, clone);\n clone.vertical = this.vertical?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): MaterialDefaults\n {\n const result = new MaterialDefaults(parent);\n\n if(!data) {\n return result;\n }\n\n result.backing = data[\"backing\"] ?\n Material.fromJSON(data[\"backing\"], result)\n : null;\n result.base = data[\"base\"] ?\n Material.fromJSON(data[\"base\"], result)\n : null;\n result.basket = data[\"basket\"] ?\n Material.fromJSON(data[\"basket\"], result)\n : null;\n result.crown = data[\"crown\"] ?\n Material.fromJSON(data[\"crown\"], result)\n : null;\n result.door = data[\"door\"] ?\n Material.fromJSON(data[\"door\"], result)\n : null;\n result.drawer = data[\"drawer\"] ?\n Material.fromJSON(data[\"drawer\"], result)\n : null;\n result.drawerBox = data[\"drawerBox\"] ?\n Material.fromJSON(data[\"drawerBox\"], result)\n : null;\n result.edgeband = data[\"edgeband\"] ?\n Material.fromJSON(data[\"edgeband\"], result)\n : null;\n result.fence = data[\"fence\"] ?\n Material.fromJSON(data[\"fence\"], result)\n : null;\n result.hamper = data[\"hamper\"] ?\n Material.fromJSON(data[\"hamper\"], result)\n : null;\n result.hardware = data[\"hardware\"] ?\n Material.fromJSON(data[\"hardware\"], result)\n : null;\n result.light = data[\"light\"] ?\n Material.fromJSON(data[\"light\"], result)\n : null;\n result.melamineCountertop = data[\"melamineCountertop\"] ?\n Material.fromJSON(data[\"melamineCountertop\"], result)\n : null;\n result.rod = data[\"rod\"] ?\n Material.fromJSON(data[\"rod\"], result)\n : null;\n result.shelving = data[\"shelving\"] ?\n Material.fromJSON(data[\"shelving\"], result)\n : null;\n result.spinner = data[\"spinner\"] ?\n Material.fromJSON(data[\"spinner\"], result)\n : null;\n result.tagFabric = data[\"tagFabric\"] ?\n Material.fromJSON(data[\"tagFabric\"], result)\n : null;\n result.tagMetal = data[\"tagMetal\"] ?\n Material.fromJSON(data[\"tagMetal\"], result)\n : null;\n result.toeKick = data[\"toeKick\"] ?\n Material.fromJSON(data[\"toeKick\"], result)\n : null;\n result.vertical = data[\"vertical\"] ?\n Material.fromJSON(data[\"vertical\"], result)\n : null;\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Molding extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"crown\", null);\n this.fields.set(\"base\", null);\n }\n get crown(): string {\n return this.get(\"crown\") as string;\n }\n\n set crown(value: string) {\n this.set(\"crown\", value);\n }\n get base(): string {\n return this.get(\"base\") as string;\n }\n\n set base(value: string) {\n this.set(\"base\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Molding {\n const clone = new Molding(parent ?? this.parent);\n if(deep) {\n clone.crown = this.crown;\n clone.base = this.base;\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Molding\n {\n const result = new Molding(parent);\n\n if(!data) {\n return result;\n }\n\n result.crown = data[\"crown\"] ?? null;\n result.base = data[\"base\"] ?? null;\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Murphybed extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"size\", null);\n this.fields.set(\"direction\", null);\n this.fields.set(\"open\", 0);\n this.fields.set(\"opacity\", 1);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n this.fields.set(\"mattress\", GenericAsset.fromJSON({}));\n this.fields.set(\"door\", Door.fromJSON({}));\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get size(): \"queen\" | \"full\" | \"twin\" {\n return this.get(\"size\") as \"queen\" | \"full\" | \"twin\";\n }\n\n set size(value: \"queen\" | \"full\" | \"twin\") {\n this.set(\"size\", value);\n }\n get direction(): \"horizontal\" | \"vertical\" {\n return this.get(\"direction\") as \"horizontal\" | \"vertical\";\n }\n\n set direction(value: \"horizontal\" | \"vertical\") {\n this.set(\"direction\", value);\n }\n get open(): number {\n return this.get(\"open\") as number;\n }\n\n set open(value: number) {\n this.set(\"open\", value);\n }\n get opacity(): number {\n return this.get(\"opacity\") as number;\n }\n\n set opacity(value: number) {\n this.set(\"opacity\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n get mattress(): GenericAsset {\n return this.get(\"mattress\") as GenericAsset;\n }\n\n set mattress(value: GenericAsset) {\n this.set(\"mattress\", value);\n }\n get door(): Door {\n return this.get(\"door\") as Door;\n }\n\n set door(value: Door) {\n this.set(\"door\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Murphybed {\n const clone = new Murphybed(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.size = this.size;\n clone.direction = this.direction;\n clone.open = this.open;\n clone.opacity = this.opacity;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.mattress = this.mattress?.clone(true, clone);\n clone.door = this.door?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Murphybed\n {\n const result = new Murphybed(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.size = data[\"size\"] ?? null;\n result.direction = data[\"direction\"] ?? null;\n result.open = data[\"open\"] ?? 0;\n result.opacity = data[\"opacity\"] ?? 1;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.mattress = data[\"mattress\"] ?\n GenericAsset.fromJSON(data[\"mattress\"], result)\n : GenericAsset.fromJSON({});\n result.door = data[\"door\"] ?\n Door.fromJSON(data[\"door\"], result)\n : Door.fromJSON({});\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Panel extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"style\", null);\n this.fields.set(\"grain\", null);\n this.fields.set(\"material\", Material.fromJSON({}));\n }\n get style(): string {\n return this.get(\"style\") as string;\n }\n\n set style(value: string) {\n this.set(\"style\", value);\n }\n get grain(): \"horizontal\" | \"vertical\" {\n return this.get(\"grain\") as \"horizontal\" | \"vertical\";\n }\n\n set grain(value: \"horizontal\" | \"vertical\") {\n this.set(\"grain\", value);\n }\n get material(): Material {\n return this.get(\"material\") as Material;\n }\n\n set material(value: Material) {\n this.set(\"material\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Panel {\n const clone = new Panel(parent ?? this.parent);\n if(deep) {\n clone.style = this.style;\n clone.grain = this.grain;\n clone.material = this.material?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Panel\n {\n const result = new Panel(parent);\n\n if(!data) {\n return result;\n }\n\n result.style = data[\"style\"] ?? null;\n result.grain = data[\"grain\"] ?? null;\n result.material = data[\"material\"] ?\n Material.fromJSON(data[\"material\"], result)\n : Material.fromJSON({});\n\n result.commit();\n return result;\n }\n}\n\n\nexport class ParametricPart extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"opacity\", 1);\n this.fields.set(\"name\", null);\n this.fields.set(\"materials\", []);\n this.fields.set(\"position\", new Vector3());\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get opacity(): number {\n return this.get(\"opacity\") as number;\n }\n\n set opacity(value: number) {\n this.set(\"opacity\", value);\n }\n get name(): string {\n return this.get(\"name\") as string;\n }\n\n set name(value: string) {\n this.set(\"name\", value);\n }\n get materials(): Array {\n return this.get(\"materials\") as Array;\n }\n\n set materials(value: Array) {\n this.set(\"materials\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): ParametricPart {\n const clone = new ParametricPart(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.opacity = this.opacity;\n clone.name = this.name;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.materials = this.materials.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): ParametricPart\n {\n const result = new ParametricPart(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.opacity = data[\"opacity\"] ?? 1;\n result.name = data[\"name\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : new Vector3();\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.materials = data[\"materials\"] ?\n data[\"materials\"].map(\n (item: any) => Material.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Room extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"manufacturer\", null);\n this.fields.set(\"line\", null);\n this.fields.set(\"walls\", []);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n this.fields.set(\"primaryDoor\", null);\n this.fields.set(\"floor\", Material.fromJSON({}));\n this.fields.set(\"molding\", Molding.fromJSON({}));\n }\n get manufacturer(): string {\n return this.get(\"manufacturer\") as string;\n }\n\n set manufacturer(value: string) {\n this.set(\"manufacturer\", value);\n }\n get line(): string {\n return this.get(\"line\") as string;\n }\n\n set line(value: string) {\n this.set(\"line\", value);\n }\n get walls(): Array {\n return this.get(\"walls\") as Array;\n }\n\n set walls(value: Array) {\n this.set(\"walls\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n get primaryDoor(): DoorObstruction {\n return this.get(\"primaryDoor\") as DoorObstruction;\n }\n\n set primaryDoor(value: DoorObstruction) {\n this.set(\"primaryDoor\", value);\n }\n get floor(): Material {\n return this.get(\"floor\") as Material;\n }\n\n set floor(value: Material) {\n this.set(\"floor\", value);\n }\n get molding(): Molding {\n return this.get(\"molding\") as Molding;\n }\n\n set molding(value: Molding) {\n this.set(\"molding\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Room {\n const clone = new Room(parent ?? this.parent);\n if(deep) {\n clone.manufacturer = this.manufacturer;\n clone.line = this.line;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.primaryDoor = this.primaryDoor?.clone(true, clone);\n clone.floor = this.floor?.clone(true, clone);\n clone.molding = this.molding?.clone(true, clone);\n clone.walls = this.walls.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Room\n {\n const result = new Room(parent);\n\n if(!data) {\n return result;\n }\n\n result.manufacturer = data[\"manufacturer\"] ?? null;\n result.line = data[\"line\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.primaryDoor = data[\"primaryDoor\"] ?\n DoorObstruction.fromJSON(data[\"primaryDoor\"], result)\n : null;\n result.floor = data[\"floor\"] ?\n Material.fromJSON(data[\"floor\"], result)\n : Material.fromJSON({});\n result.molding = data[\"molding\"] ?\n Molding.fromJSON(data[\"molding\"], result)\n : Molding.fromJSON({});\n result.walls = data[\"walls\"] ?\n data[\"walls\"].map(\n (item: any) => Wall.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Section extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"orientation\", null);\n this.fields.set(\"alignment\", \"start\");\n this.fields.set(\"thickness\", null);\n this.fields.set(\"sections\", []);\n this.fields.set(\"dividers\", []);\n this.fields.set(\"parametricParts\", []);\n this.fields.set(\"assets\", []);\n this.fields.set(\"drawers\", []);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n this.fields.set(\"door\", null);\n this.fields.set(\"cubby\", null);\n this.fields.set(\"lights\", null);\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n const value = this.get(\"depth\") as number;\n if(value == null && this.parent) {\n return (this.parent as any).depth;\n } else {\n return value;\n }\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get orientation(): \"row\" | \"column\" {\n return this.get(\"orientation\") as \"row\" | \"column\";\n }\n\n set orientation(value: \"row\" | \"column\") {\n this.set(\"orientation\", value);\n }\n get alignment(): \"start\" | \"end\" {\n return this.get(\"alignment\") as \"start\" | \"end\";\n }\n\n set alignment(value: \"start\" | \"end\") {\n this.set(\"alignment\", value);\n }\n get thickness(): 1 | 0.75 | 0.5 | null {\n const value = this.get(\"thickness\") as 1 | 0.75 | 0.5 | null;\n if(value == null && this.parent) {\n return (this.parent as any).thickness;\n } else {\n return value;\n }\n }\n\n set thickness(value: 1 | 0.75 | 0.5 | null) {\n this.set(\"thickness\", value);\n }\n get sections(): Array
{\n return this.get(\"sections\") as Array
;\n }\n\n set sections(value: Array
) {\n this.set(\"sections\", value);\n }\n get dividers(): Array {\n return this.get(\"dividers\") as Array;\n }\n\n set dividers(value: Array) {\n this.set(\"dividers\", value);\n }\n get parametricParts(): Array {\n return this.get(\"parametricParts\") as Array;\n }\n\n set parametricParts(value: Array) {\n this.set(\"parametricParts\", value);\n }\n get assets(): Array {\n return this.get(\"assets\") as Array;\n }\n\n set assets(value: Array) {\n this.set(\"assets\", value);\n }\n get drawers(): Array {\n return this.get(\"drawers\") as Array;\n }\n\n set drawers(value: Array) {\n this.set(\"drawers\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n get door(): Door {\n return this.get(\"door\") as Door;\n }\n\n set door(value: Door) {\n this.set(\"door\", value);\n }\n get cubby(): Cubby {\n return this.get(\"cubby\") as Cubby;\n }\n\n set cubby(value: Cubby) {\n this.set(\"cubby\", value);\n }\n get lights(): Lights {\n return this.get(\"lights\") as Lights;\n }\n\n set lights(value: Lights) {\n this.set(\"lights\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Section {\n const clone = new Section(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.orientation = this.orientation;\n clone.alignment = this.alignment;\n clone.thickness = this.thickness;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.door = this.door?.clone(true, clone);\n clone.cubby = this.cubby?.clone(true, clone);\n clone.lights = this.lights?.clone(true, clone);\n clone.sections = this.sections.map(\n item => item.clone(true, clone));\n clone.dividers = this.dividers.map(\n item => item.clone(true, clone));\n clone.parametricParts = this.parametricParts.map(\n item => item.clone(true, clone));\n clone.assets = this.assets.map(\n item => item.clone(true, clone));\n clone.drawers = this.drawers.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Section\n {\n const result = new Section(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.orientation = data[\"orientation\"] ?? null;\n result.alignment = data[\"alignment\"] ?? \"start\";\n result.thickness = data[\"thickness\"] ?? null;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.door = data[\"door\"] ?\n Door.fromJSON(data[\"door\"], result)\n : null;\n result.cubby = data[\"cubby\"] ?\n Cubby.fromJSON(data[\"cubby\"], result)\n : null;\n result.lights = data[\"lights\"] ?\n Lights.fromJSON(data[\"lights\"], result)\n : null;\n result.sections = data[\"sections\"] ?\n data[\"sections\"].map(\n (item: any) => Section.fromJSON(item, result))\n : [];\n result.dividers = data[\"dividers\"] ?\n data[\"dividers\"].map(\n (item: any) => Divider.fromJSON(item, result))\n : [];\n result.parametricParts = data[\"parametricParts\"] ?\n data[\"parametricParts\"].map(\n (item: any) => ParametricPart.fromJSON(item, result))\n : [];\n result.assets = data[\"assets\"] ?\n data[\"assets\"].map(\n (item: any) => GenericAsset.fromJSON(item, result))\n : [];\n result.drawers = data[\"drawers\"] ?\n data[\"drawers\"].map(\n (item: any) => Drawer.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class SkuOption extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"sku\", null);\n this.fields.set(\"comment\", null);\n }\n get sku(): string {\n return this.get(\"sku\") as string;\n }\n\n set sku(value: string) {\n this.set(\"sku\", value);\n }\n get comment(): string {\n return this.get(\"comment\") as string;\n }\n\n set comment(value: string) {\n this.set(\"comment\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): SkuOption {\n const clone = new SkuOption(parent ?? this.parent);\n if(deep) {\n clone.sku = this.sku;\n clone.comment = this.comment;\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): SkuOption\n {\n const result = new SkuOption(parent);\n\n if(!data) {\n return result;\n }\n\n result.sku = data[\"sku\"] ?? null;\n result.comment = data[\"comment\"] ?? null;\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Specification extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"version\", null);\n this.fields.set(\"room\", Room.fromJSON({}));\n this.fields.set(\"metadata\", KitchenApplicationMetadata.fromJSON({}));\n this.fields.set(\"unsatisfiedUserChoices\", UnsatisfiedUserChoices.fromJSON({}));\n }\n get version(): string {\n return this.get(\"version\") as string;\n }\n\n set version(value: string) {\n this.set(\"version\", value);\n }\n get room(): Room {\n return this.get(\"room\") as Room;\n }\n\n set room(value: Room) {\n this.set(\"room\", value);\n }\n get metadata(): KitchenApplicationMetadata {\n return this.get(\"metadata\") as KitchenApplicationMetadata;\n }\n\n set metadata(value: KitchenApplicationMetadata) {\n this.set(\"metadata\", value);\n }\n get unsatisfiedUserChoices(): UnsatisfiedUserChoices {\n return this.get(\"unsatisfiedUserChoices\") as UnsatisfiedUserChoices;\n }\n\n set unsatisfiedUserChoices(value: UnsatisfiedUserChoices) {\n this.set(\"unsatisfiedUserChoices\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Specification {\n const clone = new Specification(parent ?? this.parent);\n if(deep) {\n clone.version = this.version;\n clone.room = this.room?.clone(true, clone);\n clone.metadata = this.metadata?.clone(true, clone);\n clone.unsatisfiedUserChoices = this.unsatisfiedUserChoices?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Specification\n {\n const result = new Specification(parent);\n\n if(!data) {\n return result;\n }\n\n result.version = data[\"version\"] ?? null;\n result.room = data[\"room\"] ?\n Room.fromJSON(data[\"room\"], result)\n : Room.fromJSON({});\n result.metadata = data[\"metadata\"] ?\n KitchenApplicationMetadata.fromJSON(data[\"metadata\"], result)\n : KitchenApplicationMetadata.fromJSON({});\n result.unsatisfiedUserChoices = data[\"unsatisfiedUserChoices\"] ?\n UnsatisfiedUserChoices.fromJSON(data[\"unsatisfiedUserChoices\"], result)\n : UnsatisfiedUserChoices.fromJSON({});\n\n result.commit();\n return result;\n }\n}\n\n\nexport class UnsatisfiedApplianceChoice extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"reason\", null);\n this.fields.set(\"object\", null);\n }\n get reason(): string {\n return this.get(\"reason\") as string;\n }\n\n set reason(value: string) {\n this.set(\"reason\", value);\n }\n get object(): Appliance {\n return this.get(\"object\") as Appliance;\n }\n\n set object(value: Appliance) {\n this.set(\"object\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): UnsatisfiedApplianceChoice {\n const clone = new UnsatisfiedApplianceChoice(parent ?? this.parent);\n if(deep) {\n clone.reason = this.reason;\n clone.object = this.object?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): UnsatisfiedApplianceChoice\n {\n const result = new UnsatisfiedApplianceChoice(parent);\n\n if(!data) {\n return result;\n }\n\n result.reason = data[\"reason\"] ?? null;\n result.object = data[\"object\"] ?\n Appliance.fromJSON(data[\"object\"], result)\n : null;\n\n result.commit();\n return result;\n }\n}\n\n\nexport class UnsatisfiedCabinetChoice extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"reason\", null);\n this.fields.set(\"object\", null);\n }\n get reason(): string {\n return this.get(\"reason\") as string;\n }\n\n set reason(value: string) {\n this.set(\"reason\", value);\n }\n get object(): Cabinet {\n return this.get(\"object\") as Cabinet;\n }\n\n set object(value: Cabinet) {\n this.set(\"object\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): UnsatisfiedCabinetChoice {\n const clone = new UnsatisfiedCabinetChoice(parent ?? this.parent);\n if(deep) {\n clone.reason = this.reason;\n clone.object = this.object?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): UnsatisfiedCabinetChoice\n {\n const result = new UnsatisfiedCabinetChoice(parent);\n\n if(!data) {\n return result;\n }\n\n result.reason = data[\"reason\"] ?? null;\n result.object = data[\"object\"] ?\n Cabinet.fromJSON(data[\"object\"], result)\n : null;\n\n result.commit();\n return result;\n }\n}\n\n\nexport class UnsatisfiedUserChoices extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"appliances\", []);\n this.fields.set(\"cabinets\", []);\n }\n get appliances(): Array {\n return this.get(\"appliances\") as Array;\n }\n\n set appliances(value: Array) {\n this.set(\"appliances\", value);\n }\n get cabinets(): Array {\n return this.get(\"cabinets\") as Array;\n }\n\n set cabinets(value: Array) {\n this.set(\"cabinets\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): UnsatisfiedUserChoices {\n const clone = new UnsatisfiedUserChoices(parent ?? this.parent);\n if(deep) {\n clone.appliances = this.appliances.map(\n item => item.clone(true, clone));\n clone.cabinets = this.cabinets.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): UnsatisfiedUserChoices\n {\n const result = new UnsatisfiedUserChoices(parent);\n\n if(!data) {\n return result;\n }\n\n result.appliances = data[\"appliances\"] ?\n data[\"appliances\"].map(\n (item: any) => UnsatisfiedApplianceChoice.fromJSON(item, result))\n : [];\n result.cabinets = data[\"cabinets\"] ?\n data[\"cabinets\"].map(\n (item: any) => UnsatisfiedCabinetChoice.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Vector2 extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"x\", 0);\n this.fields.set(\"y\", 0);\n }\n get x(): number {\n return this.get(\"x\") as number;\n }\n\n set x(value: number) {\n this.set(\"x\", value);\n }\n get y(): number {\n return this.get(\"y\") as number;\n }\n\n set y(value: number) {\n this.set(\"y\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Vector2 {\n const clone = new Vector2(parent ?? this.parent);\n if(deep) {\n clone.x = this.x;\n clone.y = this.y;\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Vector2\n {\n const result = new Vector2(parent);\n\n if(!data) {\n return result;\n }\n\n result.x = data[\"x\"] ?? 0;\n result.y = data[\"y\"] ?? 0;\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Vector3 extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"x\", 0);\n this.fields.set(\"y\", 0);\n this.fields.set(\"z\", 0);\n }\n get x(): number {\n return this.get(\"x\") as number;\n }\n\n set x(value: number) {\n this.set(\"x\", value);\n }\n get y(): number {\n return this.get(\"y\") as number;\n }\n\n set y(value: number) {\n this.set(\"y\", value);\n }\n get z(): number {\n return this.get(\"z\") as number;\n }\n\n set z(value: number) {\n this.set(\"z\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Vector3 {\n const clone = new Vector3(parent ?? this.parent);\n if(deep) {\n clone.x = this.x;\n clone.y = this.y;\n clone.z = this.z;\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Vector3\n {\n const result = new Vector3(parent);\n\n if(!data) {\n return result;\n }\n\n result.x = data[\"x\"] ?? 0;\n result.y = data[\"y\"] ?? 0;\n result.z = data[\"z\"] ?? 0;\n\n result.commit();\n return result;\n }\n}\n\n\nexport class VerticalPanel extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"width\", null);\n this.fields.set(\"height\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"thickness\", 0.75);\n this.fields.set(\"style\", null);\n this.fields.set(\"mirror\", false);\n this.fields.set(\"opacity\", 1);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n this.fields.set(\"material\", Material.fromJSON({}));\n }\n get width(): number {\n return this.get(\"width\") as number;\n }\n\n set width(value: number) {\n this.set(\"width\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get thickness(): 1 | 0.75 | 0.5 {\n return this.get(\"thickness\") as 1 | 0.75 | 0.5;\n }\n\n set thickness(value: 1 | 0.75 | 0.5) {\n this.set(\"thickness\", value);\n }\n get style(): string {\n return this.get(\"style\") as string;\n }\n\n set style(value: string) {\n this.set(\"style\", value);\n }\n get mirror(): boolean {\n return this.get(\"mirror\") as boolean;\n }\n\n set mirror(value: boolean) {\n this.set(\"mirror\", value);\n }\n get opacity(): number {\n return this.get(\"opacity\") as number;\n }\n\n set opacity(value: number) {\n this.set(\"opacity\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n get material(): Material {\n return this.get(\"material\") as Material;\n }\n\n set material(value: Material) {\n this.set(\"material\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): VerticalPanel {\n const clone = new VerticalPanel(parent ?? this.parent);\n if(deep) {\n clone.width = this.width;\n clone.height = this.height;\n clone.depth = this.depth;\n clone.thickness = this.thickness;\n clone.style = this.style;\n clone.mirror = this.mirror;\n clone.opacity = this.opacity;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.material = this.material?.clone(true, clone);\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): VerticalPanel\n {\n const result = new VerticalPanel(parent);\n\n if(!data) {\n return result;\n }\n\n result.width = data[\"width\"] ?? null;\n result.height = data[\"height\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.thickness = data[\"thickness\"] ?? 0.75;\n result.style = data[\"style\"] ?? null;\n result.mirror = data[\"mirror\"] ?? false;\n result.opacity = data[\"opacity\"] ?? 1;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.material = data[\"material\"] ?\n Material.fromJSON(data[\"material\"], result)\n : Material.fromJSON({});\n\n result.commit();\n return result;\n }\n}\n\n\nexport class Wall extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"id\", null);\n this.fields.set(\"parentId\", null);\n this.fields.set(\"nominalLength\", null);\n this.fields.set(\"depth\", null);\n this.fields.set(\"visible\", true);\n this.fields.set(\"island\", null);\n this.fields.set(\"showOpenSpace\", null);\n this.fields.set(\"leftExtension\", 0);\n this.fields.set(\"rightExtension\", 0);\n this.fields.set(\"showExtension\", false);\n this.fields.set(\"prefill\", null);\n this.fields.set(\"thickness\", 0.75);\n this.fields.set(\"heights\", []);\n this.fields.set(\"panels\", []);\n this.fields.set(\"doors\", []);\n this.fields.set(\"drawers\", []);\n this.fields.set(\"dividers\", []);\n this.fields.set(\"assets\", []);\n this.fields.set(\"beds\", []);\n this.fields.set(\"parametricParts\", []);\n this.fields.set(\"hookRacks\", []);\n this.fields.set(\"cubbies\", []);\n this.fields.set(\"sections\", []);\n this.fields.set(\"cabinets\", []);\n this.fields.set(\"appliances\", []);\n this.fields.set(\"obstructions\", []);\n this.fields.set(\"doorObstructions\", []);\n this.fields.set(\"closetUnits\", []);\n this.fields.set(\"openSpaces\", []);\n this.fields.set(\"position\", Vector3.fromJSON({}));\n this.fields.set(\"rotation\", Vector3.fromJSON({}));\n this.fields.set(\"scale\", Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1}));\n this.fields.set(\"material\", Material.fromJSON({}));\n }\n get id(): string {\n return this.get(\"id\") as string;\n }\n\n set id(value: string) {\n this.set(\"id\", value);\n }\n get parentId(): string {\n return this.get(\"parentId\") as string;\n }\n\n set parentId(value: string) {\n this.set(\"parentId\", value);\n }\n get nominalLength(): number {\n return this.get(\"nominalLength\") as number;\n }\n\n set nominalLength(value: number) {\n this.set(\"nominalLength\", value);\n }\n get depth(): number {\n return this.get(\"depth\") as number;\n }\n\n set depth(value: number) {\n this.set(\"depth\", value);\n }\n get visible(): boolean {\n return this.get(\"visible\") as boolean;\n }\n\n set visible(value: boolean) {\n this.set(\"visible\", value);\n }\n get island(): boolean {\n return this.get(\"island\") as boolean;\n }\n\n set island(value: boolean) {\n this.set(\"island\", value);\n }\n get showOpenSpace(): boolean {\n return this.get(\"showOpenSpace\") as boolean;\n }\n\n set showOpenSpace(value: boolean) {\n this.set(\"showOpenSpace\", value);\n }\n get leftExtension(): number {\n return this.get(\"leftExtension\") as number;\n }\n\n set leftExtension(value: number) {\n this.set(\"leftExtension\", value);\n }\n get rightExtension(): number {\n return this.get(\"rightExtension\") as number;\n }\n\n set rightExtension(value: number) {\n this.set(\"rightExtension\", value);\n }\n get showExtension(): boolean {\n return this.get(\"showExtension\") as boolean;\n }\n\n set showExtension(value: boolean) {\n this.set(\"showExtension\", value);\n }\n get prefill(): \"all\" | \"fill\" | null {\n return this.get(\"prefill\") as \"all\" | \"fill\" | null;\n }\n\n set prefill(value: \"all\" | \"fill\" | null) {\n this.set(\"prefill\", value);\n }\n get thickness(): 1 | 0.75 | 0.5 {\n return this.get(\"thickness\") as 1 | 0.75 | 0.5;\n }\n\n set thickness(value: 1 | 0.75 | 0.5) {\n this.set(\"thickness\", value);\n }\n get heights(): Array {\n return this.get(\"heights\") as Array;\n }\n\n set heights(value: Array) {\n this.set(\"heights\", value);\n }\n get panels(): Array {\n return this.get(\"panels\") as Array;\n }\n\n set panels(value: Array) {\n this.set(\"panels\", value);\n }\n get doors(): Array {\n return this.get(\"doors\") as Array;\n }\n\n set doors(value: Array) {\n this.set(\"doors\", value);\n }\n get drawers(): Array {\n return this.get(\"drawers\") as Array;\n }\n\n set drawers(value: Array) {\n this.set(\"drawers\", value);\n }\n get dividers(): Array {\n return this.get(\"dividers\") as Array;\n }\n\n set dividers(value: Array) {\n this.set(\"dividers\", value);\n }\n get assets(): Array {\n return this.get(\"assets\") as Array;\n }\n\n set assets(value: Array) {\n this.set(\"assets\", value);\n }\n get beds(): Array {\n return this.get(\"beds\") as Array;\n }\n\n set beds(value: Array) {\n this.set(\"beds\", value);\n }\n get parametricParts(): Array {\n return this.get(\"parametricParts\") as Array;\n }\n\n set parametricParts(value: Array) {\n this.set(\"parametricParts\", value);\n }\n get hookRacks(): Array {\n return this.get(\"hookRacks\") as Array;\n }\n\n set hookRacks(value: Array) {\n this.set(\"hookRacks\", value);\n }\n get cubbies(): Array {\n return this.get(\"cubbies\") as Array;\n }\n\n set cubbies(value: Array) {\n this.set(\"cubbies\", value);\n }\n get sections(): Array
{\n return this.get(\"sections\") as Array
;\n }\n\n set sections(value: Array
) {\n this.set(\"sections\", value);\n }\n get cabinets(): Array {\n return this.get(\"cabinets\") as Array;\n }\n\n set cabinets(value: Array) {\n this.set(\"cabinets\", value);\n }\n get appliances(): Array {\n return this.get(\"appliances\") as Array;\n }\n\n set appliances(value: Array) {\n this.set(\"appliances\", value);\n }\n get obstructions(): Array {\n return this.get(\"obstructions\") as Array;\n }\n\n set obstructions(value: Array) {\n this.set(\"obstructions\", value);\n }\n get doorObstructions(): Array {\n return this.get(\"doorObstructions\") as Array;\n }\n\n set doorObstructions(value: Array) {\n this.set(\"doorObstructions\", value);\n }\n get closetUnits(): Array {\n return this.get(\"closetUnits\") as Array;\n }\n\n set closetUnits(value: Array) {\n this.set(\"closetUnits\", value);\n }\n get openSpaces(): Array {\n return this.get(\"openSpaces\") as Array;\n }\n\n set openSpaces(value: Array) {\n this.set(\"openSpaces\", value);\n }\n get position(): Vector3 {\n return this.get(\"position\") as Vector3;\n }\n\n set position(value: Vector3) {\n this.set(\"position\", value);\n }\n get rotation(): Vector3 {\n return this.get(\"rotation\") as Vector3;\n }\n\n set rotation(value: Vector3) {\n this.set(\"rotation\", value);\n }\n get scale(): Vector3 {\n return this.get(\"scale\") as Vector3;\n }\n\n set scale(value: Vector3) {\n this.set(\"scale\", value);\n }\n get material(): Material {\n return this.get(\"material\") as Material;\n }\n\n set material(value: Material) {\n this.set(\"material\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): Wall {\n const clone = new Wall(parent ?? this.parent);\n if(deep) {\n clone.id = this.id;\n clone.parentId = this.parentId;\n clone.nominalLength = this.nominalLength;\n clone.depth = this.depth;\n clone.visible = this.visible;\n clone.island = this.island;\n clone.showOpenSpace = this.showOpenSpace;\n clone.leftExtension = this.leftExtension;\n clone.rightExtension = this.rightExtension;\n clone.showExtension = this.showExtension;\n clone.prefill = this.prefill;\n clone.thickness = this.thickness;\n clone.position = this.position?.clone(true, clone);\n clone.rotation = this.rotation?.clone(true, clone);\n clone.scale = this.scale?.clone(true, clone);\n clone.material = this.material?.clone(true, clone);\n clone.heights = this.heights.map(\n item => item.clone(true, clone));\n clone.panels = this.panels.map(\n item => item.clone(true, clone));\n clone.doors = this.doors.map(\n item => item.clone(true, clone));\n clone.drawers = this.drawers.map(\n item => item.clone(true, clone));\n clone.dividers = this.dividers.map(\n item => item.clone(true, clone));\n clone.assets = this.assets.map(\n item => item.clone(true, clone));\n clone.beds = this.beds.map(\n item => item.clone(true, clone));\n clone.parametricParts = this.parametricParts.map(\n item => item.clone(true, clone));\n clone.hookRacks = this.hookRacks.map(\n item => item.clone(true, clone));\n clone.cubbies = this.cubbies.map(\n item => item.clone(true, clone));\n clone.sections = this.sections.map(\n item => item.clone(true, clone));\n clone.cabinets = this.cabinets.map(\n item => item.clone(true, clone));\n clone.appliances = this.appliances.map(\n item => item.clone(true, clone));\n clone.obstructions = this.obstructions.map(\n item => item.clone(true, clone));\n clone.doorObstructions = this.doorObstructions.map(\n item => item.clone(true, clone));\n clone.closetUnits = this.closetUnits.map(\n item => item.clone(true, clone));\n clone.openSpaces = this.openSpaces.map(\n item => item.clone(true, clone));\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): Wall\n {\n const result = new Wall(parent);\n\n if(!data) {\n return result;\n }\n\n result.id = data[\"id\"] ?? null;\n result.parentId = data[\"parentId\"] ?? null;\n result.nominalLength = data[\"nominalLength\"] ?? null;\n result.depth = data[\"depth\"] ?? null;\n result.visible = data[\"visible\"] ?? true;\n result.island = data[\"island\"] ?? null;\n result.showOpenSpace = data[\"showOpenSpace\"] ?? null;\n result.leftExtension = data[\"leftExtension\"] ?? 0;\n result.rightExtension = data[\"rightExtension\"] ?? 0;\n result.showExtension = data[\"showExtension\"] ?? false;\n result.prefill = data[\"prefill\"] ?? null;\n result.thickness = data[\"thickness\"] ?? 0.75;\n result.position = data[\"position\"] ?\n Vector3.fromJSON(data[\"position\"], result)\n : Vector3.fromJSON({});\n result.rotation = data[\"rotation\"] ?\n Vector3.fromJSON(data[\"rotation\"], result)\n : Vector3.fromJSON({});\n result.scale = data[\"scale\"] ?\n Vector3.fromJSON(data[\"scale\"], result)\n : Vector3.fromJSON({\"x\":1,\"y\":1,\"z\":1});\n result.material = data[\"material\"] ?\n Material.fromJSON(data[\"material\"], result)\n : Material.fromJSON({});\n result.heights = data[\"heights\"] ?\n data[\"heights\"].map(\n (item: any) => WallHeight.fromJSON(item, result))\n : [];\n result.panels = data[\"panels\"] ?\n data[\"panels\"].map(\n (item: any) => VerticalPanel.fromJSON(item, result))\n : [];\n result.doors = data[\"doors\"] ?\n data[\"doors\"].map(\n (item: any) => Door.fromJSON(item, result))\n : [];\n result.drawers = data[\"drawers\"] ?\n data[\"drawers\"].map(\n (item: any) => Drawer.fromJSON(item, result))\n : [];\n result.dividers = data[\"dividers\"] ?\n data[\"dividers\"].map(\n (item: any) => Divider.fromJSON(item, result))\n : [];\n result.assets = data[\"assets\"] ?\n data[\"assets\"].map(\n (item: any) => GenericAsset.fromJSON(item, result))\n : [];\n result.beds = data[\"beds\"] ?\n data[\"beds\"].map(\n (item: any) => Murphybed.fromJSON(item, result))\n : [];\n result.parametricParts = data[\"parametricParts\"] ?\n data[\"parametricParts\"].map(\n (item: any) => ParametricPart.fromJSON(item, result))\n : [];\n result.hookRacks = data[\"hookRacks\"] ?\n data[\"hookRacks\"].map(\n (item: any) => HookRack.fromJSON(item, result))\n : [];\n result.cubbies = data[\"cubbies\"] ?\n data[\"cubbies\"].map(\n (item: any) => Cubby.fromJSON(item, result))\n : [];\n result.sections = data[\"sections\"] ?\n data[\"sections\"].map(\n (item: any) => Section.fromJSON(item, result))\n : [];\n result.cabinets = data[\"cabinets\"] ?\n data[\"cabinets\"].map(\n (item: any) => Cabinet.fromJSON(item, result))\n : [];\n result.appliances = data[\"appliances\"] ?\n data[\"appliances\"].map(\n (item: any) => Appliance.fromJSON(item, result))\n : [];\n result.obstructions = data[\"obstructions\"] ?\n data[\"obstructions\"].map(\n (item: any) => Obstruction.fromJSON(item, result))\n : [];\n result.doorObstructions = data[\"doorObstructions\"] ?\n data[\"doorObstructions\"].map(\n (item: any) => DoorObstruction.fromJSON(item, result))\n : [];\n result.closetUnits = data[\"closetUnits\"] ?\n data[\"closetUnits\"].map(\n (item: any) => ClosetUnit.fromJSON(item, result))\n : [];\n result.openSpaces = data[\"openSpaces\"] ?\n data[\"openSpaces\"].map(\n (item: any) => Interval.fromJSON(item, result))\n : [];\n\n result.commit();\n return result;\n }\n}\n\n\nexport class WallHeight extends DomainModel {\n\n constructor(parent?: DomainModel) {\n super(parent);\n\n this.fields = new Map();\n this.fields.set(\"x\", null);\n this.fields.set(\"height\", null);\n }\n get x(): number {\n return this.get(\"x\") as number;\n }\n\n set x(value: number) {\n this.set(\"x\", value);\n }\n get height(): number {\n return this.get(\"height\") as number;\n }\n\n set height(value: number) {\n this.set(\"height\", value);\n }\n\n clone(deep: boolean = false, parent: DomainModel = null): WallHeight {\n const clone = new WallHeight(parent ?? this.parent);\n if(deep) {\n clone.x = this.x;\n clone.height = this.height;\n } else {\n for(let [field, value] of this.fields) {\n clone.set(field, value);\n }\n }\n clone.commit();\n return clone;\n }\n\n static fromJSON(data: unknown, parent?: DomainModel): WallHeight\n {\n const result = new WallHeight(parent);\n\n if(!data) {\n return result;\n }\n\n result.x = data[\"x\"] ?? null;\n result.height = data[\"height\"] ?? null;\n\n result.commit();\n return result;\n }\n}\n\n","/**\n * @license\n * Copyright 2010-2024 Three.js Authors\n * SPDX-License-Identifier: MIT\n */\nconst REVISION = '167';\n\nconst MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };\nconst TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };\nconst CullFaceNone = 0;\nconst CullFaceBack = 1;\nconst CullFaceFront = 2;\nconst CullFaceFrontBack = 3;\nconst BasicShadowMap = 0;\nconst PCFShadowMap = 1;\nconst PCFSoftShadowMap = 2;\nconst VSMShadowMap = 3;\nconst FrontSide = 0;\nconst BackSide = 1;\nconst DoubleSide = 2;\nconst NoBlending = 0;\nconst NormalBlending = 1;\nconst AdditiveBlending = 2;\nconst SubtractiveBlending = 3;\nconst MultiplyBlending = 4;\nconst CustomBlending = 5;\nconst AddEquation = 100;\nconst SubtractEquation = 101;\nconst ReverseSubtractEquation = 102;\nconst MinEquation = 103;\nconst MaxEquation = 104;\nconst ZeroFactor = 200;\nconst OneFactor = 201;\nconst SrcColorFactor = 202;\nconst OneMinusSrcColorFactor = 203;\nconst SrcAlphaFactor = 204;\nconst OneMinusSrcAlphaFactor = 205;\nconst DstAlphaFactor = 206;\nconst OneMinusDstAlphaFactor = 207;\nconst DstColorFactor = 208;\nconst OneMinusDstColorFactor = 209;\nconst SrcAlphaSaturateFactor = 210;\nconst ConstantColorFactor = 211;\nconst OneMinusConstantColorFactor = 212;\nconst ConstantAlphaFactor = 213;\nconst OneMinusConstantAlphaFactor = 214;\nconst NeverDepth = 0;\nconst AlwaysDepth = 1;\nconst LessDepth = 2;\nconst LessEqualDepth = 3;\nconst EqualDepth = 4;\nconst GreaterEqualDepth = 5;\nconst GreaterDepth = 6;\nconst NotEqualDepth = 7;\nconst MultiplyOperation = 0;\nconst MixOperation = 1;\nconst AddOperation = 2;\nconst NoToneMapping = 0;\nconst LinearToneMapping = 1;\nconst ReinhardToneMapping = 2;\nconst CineonToneMapping = 3;\nconst ACESFilmicToneMapping = 4;\nconst CustomToneMapping = 5;\nconst AgXToneMapping = 6;\nconst NeutralToneMapping = 7;\nconst AttachedBindMode = 'attached';\nconst DetachedBindMode = 'detached';\n\nconst UVMapping = 300;\nconst CubeReflectionMapping = 301;\nconst CubeRefractionMapping = 302;\nconst EquirectangularReflectionMapping = 303;\nconst EquirectangularRefractionMapping = 304;\nconst CubeUVReflectionMapping = 306;\nconst RepeatWrapping = 1000;\nconst ClampToEdgeWrapping = 1001;\nconst MirroredRepeatWrapping = 1002;\nconst NearestFilter = 1003;\nconst NearestMipmapNearestFilter = 1004;\nconst NearestMipMapNearestFilter = 1004;\nconst NearestMipmapLinearFilter = 1005;\nconst NearestMipMapLinearFilter = 1005;\nconst LinearFilter = 1006;\nconst LinearMipmapNearestFilter = 1007;\nconst LinearMipMapNearestFilter = 1007;\nconst LinearMipmapLinearFilter = 1008;\nconst LinearMipMapLinearFilter = 1008;\nconst UnsignedByteType = 1009;\nconst ByteType = 1010;\nconst ShortType = 1011;\nconst UnsignedShortType = 1012;\nconst IntType = 1013;\nconst UnsignedIntType = 1014;\nconst FloatType = 1015;\nconst HalfFloatType = 1016;\nconst UnsignedShort4444Type = 1017;\nconst UnsignedShort5551Type = 1018;\nconst UnsignedInt248Type = 1020;\nconst UnsignedInt5999Type = 35902;\nconst AlphaFormat = 1021;\nconst RGBFormat = 1022;\nconst RGBAFormat = 1023;\nconst LuminanceFormat = 1024;\nconst LuminanceAlphaFormat = 1025;\nconst DepthFormat = 1026;\nconst DepthStencilFormat = 1027;\nconst RedFormat = 1028;\nconst RedIntegerFormat = 1029;\nconst RGFormat = 1030;\nconst RGIntegerFormat = 1031;\nconst RGBIntegerFormat = 1032;\nconst RGBAIntegerFormat = 1033;\n\nconst RGB_S3TC_DXT1_Format = 33776;\nconst RGBA_S3TC_DXT1_Format = 33777;\nconst RGBA_S3TC_DXT3_Format = 33778;\nconst RGBA_S3TC_DXT5_Format = 33779;\nconst RGB_PVRTC_4BPPV1_Format = 35840;\nconst RGB_PVRTC_2BPPV1_Format = 35841;\nconst RGBA_PVRTC_4BPPV1_Format = 35842;\nconst RGBA_PVRTC_2BPPV1_Format = 35843;\nconst RGB_ETC1_Format = 36196;\nconst RGB_ETC2_Format = 37492;\nconst RGBA_ETC2_EAC_Format = 37496;\nconst RGBA_ASTC_4x4_Format = 37808;\nconst RGBA_ASTC_5x4_Format = 37809;\nconst RGBA_ASTC_5x5_Format = 37810;\nconst RGBA_ASTC_6x5_Format = 37811;\nconst RGBA_ASTC_6x6_Format = 37812;\nconst RGBA_ASTC_8x5_Format = 37813;\nconst RGBA_ASTC_8x6_Format = 37814;\nconst RGBA_ASTC_8x8_Format = 37815;\nconst RGBA_ASTC_10x5_Format = 37816;\nconst RGBA_ASTC_10x6_Format = 37817;\nconst RGBA_ASTC_10x8_Format = 37818;\nconst RGBA_ASTC_10x10_Format = 37819;\nconst RGBA_ASTC_12x10_Format = 37820;\nconst RGBA_ASTC_12x12_Format = 37821;\nconst RGBA_BPTC_Format = 36492;\nconst RGB_BPTC_SIGNED_Format = 36494;\nconst RGB_BPTC_UNSIGNED_Format = 36495;\nconst RED_RGTC1_Format = 36283;\nconst SIGNED_RED_RGTC1_Format = 36284;\nconst RED_GREEN_RGTC2_Format = 36285;\nconst SIGNED_RED_GREEN_RGTC2_Format = 36286;\nconst LoopOnce = 2200;\nconst LoopRepeat = 2201;\nconst LoopPingPong = 2202;\nconst InterpolateDiscrete = 2300;\nconst InterpolateLinear = 2301;\nconst InterpolateSmooth = 2302;\nconst ZeroCurvatureEnding = 2400;\nconst ZeroSlopeEnding = 2401;\nconst WrapAroundEnding = 2402;\nconst NormalAnimationBlendMode = 2500;\nconst AdditiveAnimationBlendMode = 2501;\nconst TrianglesDrawMode = 0;\nconst TriangleStripDrawMode = 1;\nconst TriangleFanDrawMode = 2;\nconst BasicDepthPacking = 3200;\nconst RGBADepthPacking = 3201;\nconst RGBDepthPacking = 3202;\nconst RGDepthPacking = 3203;\nconst TangentSpaceNormalMap = 0;\nconst ObjectSpaceNormalMap = 1;\n\n// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.\nconst NoColorSpace = '';\nconst SRGBColorSpace = 'srgb';\nconst LinearSRGBColorSpace = 'srgb-linear';\nconst DisplayP3ColorSpace = 'display-p3';\nconst LinearDisplayP3ColorSpace = 'display-p3-linear';\n\nconst LinearTransfer = 'linear';\nconst SRGBTransfer = 'srgb';\n\nconst Rec709Primaries = 'rec709';\nconst P3Primaries = 'p3';\n\nconst ZeroStencilOp = 0;\nconst KeepStencilOp = 7680;\nconst ReplaceStencilOp = 7681;\nconst IncrementStencilOp = 7682;\nconst DecrementStencilOp = 7683;\nconst IncrementWrapStencilOp = 34055;\nconst DecrementWrapStencilOp = 34056;\nconst InvertStencilOp = 5386;\n\nconst NeverStencilFunc = 512;\nconst LessStencilFunc = 513;\nconst EqualStencilFunc = 514;\nconst LessEqualStencilFunc = 515;\nconst GreaterStencilFunc = 516;\nconst NotEqualStencilFunc = 517;\nconst GreaterEqualStencilFunc = 518;\nconst AlwaysStencilFunc = 519;\n\nconst NeverCompare = 512;\nconst LessCompare = 513;\nconst EqualCompare = 514;\nconst LessEqualCompare = 515;\nconst GreaterCompare = 516;\nconst NotEqualCompare = 517;\nconst GreaterEqualCompare = 518;\nconst AlwaysCompare = 519;\n\nconst StaticDrawUsage = 35044;\nconst DynamicDrawUsage = 35048;\nconst StreamDrawUsage = 35040;\nconst StaticReadUsage = 35045;\nconst DynamicReadUsage = 35049;\nconst StreamReadUsage = 35041;\nconst StaticCopyUsage = 35046;\nconst DynamicCopyUsage = 35050;\nconst StreamCopyUsage = 35042;\n\nconst GLSL1 = '100';\nconst GLSL3 = '300 es';\n\nconst WebGLCoordinateSystem = 2000;\nconst WebGPUCoordinateSystem = 2001;\n\n/**\n * https://github.com/mrdoob/eventdispatcher.js/\n */\n\nclass EventDispatcher {\n\n\taddEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\tconst listeners = this._listeners;\n\n\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\tlisteners[ type ] = [];\n\n\t\t}\n\n\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\tlisteners[ type ].push( listener );\n\n\t\t}\n\n\t}\n\n\thasEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return false;\n\n\t\tconst listeners = this._listeners;\n\n\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t}\n\n\tremoveEventListener( type, listener ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tconst index = listenerArray.indexOf( listener );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._listeners === undefined ) return;\n\n\t\tconst listeners = this._listeners;\n\t\tconst listenerArray = listeners[ event.type ];\n\n\t\tif ( listenerArray !== undefined ) {\n\n\t\t\tevent.target = this;\n\n\t\t\t// Make a copy, in case listeners are removed while iterating.\n\t\t\tconst array = listenerArray.slice( 0 );\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t}\n\n\t\t\tevent.target = null;\n\n\t\t}\n\n\t}\n\n}\n\nconst _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];\n\nlet _seed = 1234567;\n\n\nconst DEG2RAD = Math.PI / 180;\nconst RAD2DEG = 180 / Math.PI;\n\n// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\nfunction generateUUID() {\n\n\tconst d0 = Math.random() * 0xffffffff | 0;\n\tconst d1 = Math.random() * 0xffffffff | 0;\n\tconst d2 = Math.random() * 0xffffffff | 0;\n\tconst d3 = Math.random() * 0xffffffff | 0;\n\tconst uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +\n\t\t\t_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];\n\n\t// .toLowerCase() here flattens concatenated strings to save heap memory space.\n\treturn uuid.toLowerCase();\n\n}\n\nfunction clamp( value, min, max ) {\n\n\treturn Math.max( min, Math.min( max, value ) );\n\n}\n\n// compute euclidean modulo of m % n\n// https://en.wikipedia.org/wiki/Modulo_operation\nfunction euclideanModulo( n, m ) {\n\n\treturn ( ( n % m ) + m ) % m;\n\n}\n\n// Linear mapping from range to range \nfunction mapLinear( x, a1, a2, b1, b2 ) {\n\n\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n}\n\n// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/\nfunction inverseLerp( x, y, value ) {\n\n\tif ( x !== y ) {\n\n\t\treturn ( value - x ) / ( y - x );\n\n\t} else {\n\n\t\treturn 0;\n\n\t}\n\n}\n\n// https://en.wikipedia.org/wiki/Linear_interpolation\nfunction lerp( x, y, t ) {\n\n\treturn ( 1 - t ) * x + t * y;\n\n}\n\n// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/\nfunction damp( x, y, lambda, dt ) {\n\n\treturn lerp( x, y, 1 - Math.exp( - lambda * dt ) );\n\n}\n\n// https://www.desmos.com/calculator/vcsjnyz7x4\nfunction pingpong( x, length = 1 ) {\n\n\treturn length - Math.abs( euclideanModulo( x, length * 2 ) - length );\n\n}\n\n// http://en.wikipedia.org/wiki/Smoothstep\nfunction smoothstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * ( 3 - 2 * x );\n\n}\n\nfunction smootherstep( x, min, max ) {\n\n\tif ( x <= min ) return 0;\n\tif ( x >= max ) return 1;\n\n\tx = ( x - min ) / ( max - min );\n\n\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n}\n\n// Random integer from interval\nfunction randInt( low, high ) {\n\n\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n}\n\n// Random float from interval\nfunction randFloat( low, high ) {\n\n\treturn low + Math.random() * ( high - low );\n\n}\n\n// Random float from <-range/2, range/2> interval\nfunction randFloatSpread( range ) {\n\n\treturn range * ( 0.5 - Math.random() );\n\n}\n\n// Deterministic pseudo-random float in the interval [ 0, 1 ]\nfunction seededRandom( s ) {\n\n\tif ( s !== undefined ) _seed = s;\n\n\t// Mulberry32 generator\n\n\tlet t = _seed += 0x6D2B79F5;\n\n\tt = Math.imul( t ^ t >>> 15, t | 1 );\n\n\tt ^= t + Math.imul( t ^ t >>> 7, t | 61 );\n\n\treturn ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;\n\n}\n\nfunction degToRad( degrees ) {\n\n\treturn degrees * DEG2RAD;\n\n}\n\nfunction radToDeg( radians ) {\n\n\treturn radians * RAD2DEG;\n\n}\n\nfunction isPowerOfTwo( value ) {\n\n\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n}\n\nfunction ceilPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction floorPowerOfTwo( value ) {\n\n\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n}\n\nfunction setQuaternionFromProperEuler( q, a, b, c, order ) {\n\n\t// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles\n\n\t// rotations are applied to the axes in the order specified by 'order'\n\t// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'\n\t// angles are in radians\n\n\tconst cos = Math.cos;\n\tconst sin = Math.sin;\n\n\tconst c2 = cos( b / 2 );\n\tconst s2 = sin( b / 2 );\n\n\tconst c13 = cos( ( a + c ) / 2 );\n\tconst s13 = sin( ( a + c ) / 2 );\n\n\tconst c1_3 = cos( ( a - c ) / 2 );\n\tconst s1_3 = sin( ( a - c ) / 2 );\n\n\tconst c3_1 = cos( ( c - a ) / 2 );\n\tconst s3_1 = sin( ( c - a ) / 2 );\n\n\tswitch ( order ) {\n\n\t\tcase 'XYX':\n\t\t\tq.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YZY':\n\t\t\tq.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZXZ':\n\t\t\tq.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'XZX':\n\t\t\tq.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'YXY':\n\t\t\tq.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );\n\t\t\tbreak;\n\n\t\tcase 'ZYZ':\n\t\t\tq.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );\n\n\t}\n\n}\n\nfunction denormalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn value / 4294967295.0;\n\n\t\tcase Uint16Array:\n\n\t\t\treturn value / 65535.0;\n\n\t\tcase Uint8Array:\n\n\t\t\treturn value / 255.0;\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.max( value / 2147483647.0, - 1.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.max( value / 32767.0, - 1.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.max( value / 127.0, - 1.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nfunction normalize( value, array ) {\n\n\tswitch ( array.constructor ) {\n\n\t\tcase Float32Array:\n\n\t\t\treturn value;\n\n\t\tcase Uint32Array:\n\n\t\t\treturn Math.round( value * 4294967295.0 );\n\n\t\tcase Uint16Array:\n\n\t\t\treturn Math.round( value * 65535.0 );\n\n\t\tcase Uint8Array:\n\n\t\t\treturn Math.round( value * 255.0 );\n\n\t\tcase Int32Array:\n\n\t\t\treturn Math.round( value * 2147483647.0 );\n\n\t\tcase Int16Array:\n\n\t\t\treturn Math.round( value * 32767.0 );\n\n\t\tcase Int8Array:\n\n\t\t\treturn Math.round( value * 127.0 );\n\n\t\tdefault:\n\n\t\t\tthrow new Error( 'Invalid component type.' );\n\n\t}\n\n}\n\nconst MathUtils = {\n\tDEG2RAD: DEG2RAD,\n\tRAD2DEG: RAD2DEG,\n\tgenerateUUID: generateUUID,\n\tclamp: clamp,\n\teuclideanModulo: euclideanModulo,\n\tmapLinear: mapLinear,\n\tinverseLerp: inverseLerp,\n\tlerp: lerp,\n\tdamp: damp,\n\tpingpong: pingpong,\n\tsmoothstep: smoothstep,\n\tsmootherstep: smootherstep,\n\trandInt: randInt,\n\trandFloat: randFloat,\n\trandFloatSpread: randFloatSpread,\n\tseededRandom: seededRandom,\n\tdegToRad: degToRad,\n\tradToDeg: radToDeg,\n\tisPowerOfTwo: isPowerOfTwo,\n\tceilPowerOfTwo: ceilPowerOfTwo,\n\tfloorPowerOfTwo: floorPowerOfTwo,\n\tsetQuaternionFromProperEuler: setQuaternionFromProperEuler,\n\tnormalize: normalize,\n\tdenormalize: denormalize\n};\n\nclass Vector2 {\n\n\tconstructor( x = 0, y = 0 ) {\n\n\t\tVector2.prototype.isVector2 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.x;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.x = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.y;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.y = value;\n\n\t}\n\n\tset( x, y ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.x * v.y - this.y * v.x;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tangle() {\n\n\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\tconst angle = Math.atan2( - this.y, - this.x ) + Math.PI;\n\n\t\treturn angle;\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y;\n\t\treturn dx * dx + dy * dy;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\n\t\treturn this;\n\n\t}\n\n\trotateAround( center, angle ) {\n\n\t\tconst c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\tconst x = this.x - center.x;\n\t\tconst y = this.y - center.y;\n\n\t\tthis.x = x * c - y * s + center.x;\n\t\tthis.y = x * s + y * c + center.y;\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\n\t}\n\n}\n\nclass Matrix3 {\n\n\tconstructor( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tMatrix3.prototype.isMatrix3 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n21, n22, n23, n31, n32, n33 );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrix3Column( this, 0 );\n\t\tyAxis.setFromMatrix3Column( this, 1 );\n\t\tzAxis.setFromMatrix3Column( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix4( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t}\n\n\tinvert() {\n\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],\n\t\t\tn12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],\n\t\t\tn13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],\n\n\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\tte[ 3 ] = t12 * detInv;\n\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\tte[ 6 ] = t13 * detInv;\n\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\ttranspose() {\n\n\t\tlet tmp;\n\t\tconst m = this.elements;\n\n\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tgetNormalMatrix( matrix4 ) {\n\n\t\treturn this.setFromMatrix4( matrix4 ).invert().transpose();\n\n\t}\n\n\ttransposeIntoArray( r ) {\n\n\t\tconst m = this.elements;\n\n\t\tr[ 0 ] = m[ 0 ];\n\t\tr[ 1 ] = m[ 3 ];\n\t\tr[ 2 ] = m[ 6 ];\n\t\tr[ 3 ] = m[ 1 ];\n\t\tr[ 4 ] = m[ 4 ];\n\t\tr[ 5 ] = m[ 7 ];\n\t\tr[ 6 ] = m[ 2 ];\n\t\tr[ 7 ] = m[ 5 ];\n\t\tr[ 8 ] = m[ 8 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\tconst c = Math.cos( rotation );\n\t\tconst s = Math.sin( rotation );\n\n\t\tthis.set(\n\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tscale( sx, sy ) {\n\n\t\tthis.premultiply( _m3.makeScale( sx, sy ) );\n\n\t\treturn this;\n\n\t}\n\n\trotate( theta ) {\n\n\t\tthis.premultiply( _m3.makeRotation( - theta ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( tx, ty ) {\n\n\t\tthis.premultiply( _m3.makeTranslation( tx, ty ) );\n\n\t\treturn this;\n\n\t}\n\n\t// for 2D Transforms\n\n\tmakeTranslation( x, y ) {\n\n\t\tif ( x.isVector2 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x.x,\n\t\t\t\t0, 1, x.y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, x,\n\t\t\t\t0, 1, y,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotation( theta ) {\n\n\t\t// counterclockwise\n\n\t\tconst c = Math.cos( theta );\n\t\tconst s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0,\n\t\t\ts, c, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0,\n\t\t\t0, y, 0,\n\t\t\t0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\t//\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\treturn array;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().fromArray( this.elements );\n\n\t}\n\n}\n\nconst _m3 = /*@__PURE__*/ new Matrix3();\n\nfunction arrayNeedsUint32( array ) {\n\n\t// assumes larger values usually on last\n\n\tfor ( let i = array.length - 1; i >= 0; -- i ) {\n\n\t\tif ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565\n\n\t}\n\n\treturn false;\n\n}\n\nconst TYPED_ARRAYS = {\n\tInt8Array: Int8Array,\n\tUint8Array: Uint8Array,\n\tUint8ClampedArray: Uint8ClampedArray,\n\tInt16Array: Int16Array,\n\tUint16Array: Uint16Array,\n\tInt32Array: Int32Array,\n\tUint32Array: Uint32Array,\n\tFloat32Array: Float32Array,\n\tFloat64Array: Float64Array\n};\n\nfunction getTypedArray( type, buffer ) {\n\n\treturn new TYPED_ARRAYS[ type ]( buffer );\n\n}\n\nfunction createElementNS( name ) {\n\n\treturn document.createElementNS( 'http://www.w3.org/1999/xhtml', name );\n\n}\n\nfunction createCanvasElement() {\n\n\tconst canvas = createElementNS( 'canvas' );\n\tcanvas.style.display = 'block';\n\treturn canvas;\n\n}\n\nconst _cache = {};\n\nfunction warnOnce( message ) {\n\n\tif ( message in _cache ) return;\n\n\t_cache[ message ] = true;\n\n\tconsole.warn( message );\n\n}\n\nfunction probeAsync( gl, sync, interval ) {\n\n\treturn new Promise( function ( resolve, reject ) {\n\n\t\tfunction probe() {\n\n\t\t\tswitch ( gl.clientWaitSync( sync, gl.SYNC_FLUSH_COMMANDS_BIT, 0 ) ) {\n\n\t\t\t\tcase gl.WAIT_FAILED:\n\t\t\t\t\treject();\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase gl.TIMEOUT_EXPIRED:\n\t\t\t\t\tsetTimeout( probe, interval );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tresolve();\n\n\t\t\t}\n\n\t\t}\n\n\t\tsetTimeout( probe, interval );\n\n\t} );\n\n}\n\n/**\n * Matrices converting P3 <-> Rec. 709 primaries, without gamut mapping\n * or clipping. Based on W3C specifications for sRGB and Display P3,\n * and ICC specifications for the D50 connection space. Values in/out\n * are _linear_ sRGB and _linear_ Display P3.\n *\n * Note that both sRGB and Display P3 use the sRGB transfer functions.\n *\n * Reference:\n * - http://www.russellcottrell.com/photo/matrixCalculator.htm\n */\n\nconst LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = /*@__PURE__*/ new Matrix3().set(\n\t0.8224621, 0.177538, 0.0,\n\t0.0331941, 0.9668058, 0.0,\n\t0.0170827, 0.0723974, 0.9105199,\n);\n\nconst LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = /*@__PURE__*/ new Matrix3().set(\n\t1.2249401, - 0.2249404, 0.0,\n\t- 0.0420569, 1.0420571, 0.0,\n\t- 0.0196376, - 0.0786361, 1.0982735\n);\n\n/**\n * Defines supported color spaces by transfer function and primaries,\n * and provides conversions to/from the Linear-sRGB reference space.\n */\nconst COLOR_SPACES = {\n\t[ LinearSRGBColorSpace ]: {\n\t\ttransfer: LinearTransfer,\n\t\tprimaries: Rec709Primaries,\n\t\tluminanceCoefficients: [ 0.2126, 0.7152, 0.0722 ],\n\t\ttoReference: ( color ) => color,\n\t\tfromReference: ( color ) => color,\n\t},\n\t[ SRGBColorSpace ]: {\n\t\ttransfer: SRGBTransfer,\n\t\tprimaries: Rec709Primaries,\n\t\tluminanceCoefficients: [ 0.2126, 0.7152, 0.0722 ],\n\t\ttoReference: ( color ) => color.convertSRGBToLinear(),\n\t\tfromReference: ( color ) => color.convertLinearToSRGB(),\n\t},\n\t[ LinearDisplayP3ColorSpace ]: {\n\t\ttransfer: LinearTransfer,\n\t\tprimaries: P3Primaries,\n\t\tluminanceCoefficients: [ 0.2289, 0.6917, 0.0793 ],\n\t\ttoReference: ( color ) => color.applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ),\n\t\tfromReference: ( color ) => color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ),\n\t},\n\t[ DisplayP3ColorSpace ]: {\n\t\ttransfer: SRGBTransfer,\n\t\tprimaries: P3Primaries,\n\t\tluminanceCoefficients: [ 0.2289, 0.6917, 0.0793 ],\n\t\ttoReference: ( color ) => color.convertSRGBToLinear().applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB ),\n\t\tfromReference: ( color ) => color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ).convertLinearToSRGB(),\n\t},\n};\n\nconst SUPPORTED_WORKING_COLOR_SPACES = new Set( [ LinearSRGBColorSpace, LinearDisplayP3ColorSpace ] );\n\nconst ColorManagement = {\n\n\tenabled: true,\n\n\t_workingColorSpace: LinearSRGBColorSpace,\n\n\tget workingColorSpace() {\n\n\t\treturn this._workingColorSpace;\n\n\t},\n\n\tset workingColorSpace( colorSpace ) {\n\n\t\tif ( ! SUPPORTED_WORKING_COLOR_SPACES.has( colorSpace ) ) {\n\n\t\t\tthrow new Error( `Unsupported working color space, \"${ colorSpace }\".` );\n\n\t\t}\n\n\t\tthis._workingColorSpace = colorSpace;\n\n\t},\n\n\tconvert: function ( color, sourceColorSpace, targetColorSpace ) {\n\n\t\tif ( this.enabled === false || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {\n\n\t\t\treturn color;\n\n\t\t}\n\n\t\tconst sourceToReference = COLOR_SPACES[ sourceColorSpace ].toReference;\n\t\tconst targetFromReference = COLOR_SPACES[ targetColorSpace ].fromReference;\n\n\t\treturn targetFromReference( sourceToReference( color ) );\n\n\t},\n\n\tfromWorkingColorSpace: function ( color, targetColorSpace ) {\n\n\t\treturn this.convert( color, this._workingColorSpace, targetColorSpace );\n\n\t},\n\n\ttoWorkingColorSpace: function ( color, sourceColorSpace ) {\n\n\t\treturn this.convert( color, sourceColorSpace, this._workingColorSpace );\n\n\t},\n\n\tgetPrimaries: function ( colorSpace ) {\n\n\t\treturn COLOR_SPACES[ colorSpace ].primaries;\n\n\t},\n\n\tgetTransfer: function ( colorSpace ) {\n\n\t\tif ( colorSpace === NoColorSpace ) return LinearTransfer;\n\n\t\treturn COLOR_SPACES[ colorSpace ].transfer;\n\n\t},\n\n\tgetLuminanceCoefficients: function ( target, colorSpace = this._workingColorSpace ) {\n\n\t\treturn target.fromArray( COLOR_SPACES[ colorSpace ].luminanceCoefficients );\n\n\t},\n\n};\n\n\nfunction SRGBToLinear( c ) {\n\n\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n}\n\nfunction LinearToSRGB( c ) {\n\n\treturn ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;\n\n}\n\nlet _canvas;\n\nclass ImageUtils {\n\n\tstatic getDataURL( image ) {\n\n\t\tif ( /^data:/i.test( image.src ) ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tif ( typeof HTMLCanvasElement === 'undefined' ) {\n\n\t\t\treturn image.src;\n\n\t\t}\n\n\t\tlet canvas;\n\n\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\tcanvas = image;\n\n\t\t} else {\n\n\t\t\tif ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );\n\n\t\t\t_canvas.width = image.width;\n\t\t\t_canvas.height = image.height;\n\n\t\t\tconst context = _canvas.getContext( '2d' );\n\n\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t}\n\n\t\t\tcanvas = _canvas;\n\n\t\t}\n\n\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );\n\n\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t} else {\n\n\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t}\n\n\t}\n\n\tstatic sRGBToLinear( image ) {\n\n\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t\tconst canvas = createElementNS( 'canvas' );\n\n\t\t\tcanvas.width = image.width;\n\t\t\tcanvas.height = image.height;\n\n\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\tconst imageData = context.getImageData( 0, 0, image.width, image.height );\n\t\t\tconst data = imageData.data;\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;\n\n\t\t\t}\n\n\t\t\tcontext.putImageData( imageData, 0, 0 );\n\n\t\t\treturn canvas;\n\n\t\t} else if ( image.data ) {\n\n\t\t\tconst data = image.data.slice( 0 );\n\n\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tif ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {\n\n\t\t\t\t\tdata[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assuming float\n\n\t\t\t\t\tdata[ i ] = SRGBToLinear( data[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tdata: data,\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );\n\t\t\treturn image;\n\n\t\t}\n\n\t}\n\n}\n\nlet _sourceId = 0;\n\nclass Source {\n\n\tconstructor( data = null ) {\n\n\t\tthis.isSource = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _sourceId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.data = data;\n\t\tthis.dataReady = true;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.images[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\t\t\tuuid: this.uuid,\n\t\t\turl: ''\n\t\t};\n\n\t\tconst data = this.data;\n\n\t\tif ( data !== null ) {\n\n\t\t\tlet url;\n\n\t\t\tif ( Array.isArray( data ) ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\turl = [];\n\n\t\t\t\tfor ( let i = 0, l = data.length; i < l; i ++ ) {\n\n\t\t\t\t\tif ( data[ i ].isDataTexture ) {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ].image ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\turl.push( serializeImage( data[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// texture\n\n\t\t\t\turl = serializeImage( data );\n\n\t\t\t}\n\n\t\t\toutput.url = url;\n\n\t\t}\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.images[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n}\n\nfunction serializeImage( image ) {\n\n\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {\n\n\t\t// default images\n\n\t\treturn ImageUtils.getDataURL( image );\n\n\t} else {\n\n\t\tif ( image.data ) {\n\n\t\t\t// images of DataTexture\n\n\t\t\treturn {\n\t\t\t\tdata: Array.from( image.data ),\n\t\t\t\twidth: image.width,\n\t\t\t\theight: image.height,\n\t\t\t\ttype: image.data.constructor.name\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Texture: Unable to serialize Texture.' );\n\t\t\treturn {};\n\n\t\t}\n\n\t}\n\n}\n\nlet _textureId = 0;\n\nclass Texture extends EventDispatcher {\n\n\tconstructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace ) {\n\n\t\tsuper();\n\n\t\tthis.isTexture = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _textureId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.source = new Source( image );\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping;\n\t\tthis.channel = 0;\n\n\t\tthis.wrapS = wrapS;\n\t\tthis.wrapT = wrapT;\n\n\t\tthis.magFilter = magFilter;\n\t\tthis.minFilter = minFilter;\n\n\t\tthis.anisotropy = anisotropy;\n\n\t\tthis.format = format;\n\t\tthis.internalFormat = null;\n\t\tthis.type = type;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\tthis.colorSpace = colorSpace;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t\tthis.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not\n\t\tthis.pmremVersion = 0; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)\n\n\t}\n\n\tget image() {\n\n\t\treturn this.source.data;\n\n\t}\n\n\tset image( value = null ) {\n\n\t\tthis.source.data = value;\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.source = source.source;\n\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\tthis.mapping = source.mapping;\n\t\tthis.channel = source.channel;\n\n\t\tthis.wrapS = source.wrapS;\n\t\tthis.wrapT = source.wrapT;\n\n\t\tthis.magFilter = source.magFilter;\n\t\tthis.minFilter = source.minFilter;\n\n\t\tthis.anisotropy = source.anisotropy;\n\n\t\tthis.format = source.format;\n\t\tthis.internalFormat = source.internalFormat;\n\t\tthis.type = source.type;\n\n\t\tthis.offset.copy( source.offset );\n\t\tthis.repeat.copy( source.repeat );\n\t\tthis.center.copy( source.center );\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\tthis.matrix.copy( source.matrix );\n\n\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\tthis.flipY = source.flipY;\n\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\tthis.colorSpace = source.colorSpace;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tthis.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t}\n\n\t\tconst output = {\n\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Texture',\n\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t},\n\n\t\t\tuuid: this.uuid,\n\t\t\tname: this.name,\n\n\t\t\timage: this.source.toJSON( meta ).uuid,\n\n\t\t\tmapping: this.mapping,\n\t\t\tchannel: this.channel,\n\n\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\trotation: this.rotation,\n\n\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\tformat: this.format,\n\t\t\tinternalFormat: this.internalFormat,\n\t\t\ttype: this.type,\n\t\t\tcolorSpace: this.colorSpace,\n\n\t\t\tminFilter: this.minFilter,\n\t\t\tmagFilter: this.magFilter,\n\t\t\tanisotropy: this.anisotropy,\n\n\t\t\tflipY: this.flipY,\n\n\t\t\tgenerateMipmaps: this.generateMipmaps,\n\t\t\tpremultiplyAlpha: this.premultiplyAlpha,\n\t\t\tunpackAlignment: this.unpackAlignment\n\n\t\t};\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) output.userData = this.userData;\n\n\t\tif ( ! isRootObject ) {\n\n\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t}\n\n\t\treturn output;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\ttransformUv( uv ) {\n\n\t\tif ( this.mapping !== UVMapping ) return uv;\n\n\t\tuv.applyMatrix3( this.matrix );\n\n\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.flipY ) {\n\n\t\t\tuv.y = 1 - uv.y;\n\n\t\t}\n\n\t\treturn uv;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.version ++;\n\t\t\tthis.source.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tset needsPMREMUpdate( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.pmremVersion ++;\n\n\t\t}\n\n\t}\n\n}\n\nTexture.DEFAULT_IMAGE = null;\nTexture.DEFAULT_MAPPING = UVMapping;\nTexture.DEFAULT_ANISOTROPY = 1;\n\nclass Vector4 {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tVector4.prototype.isVector4 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t}\n\n\tget width() {\n\n\t\treturn this.z;\n\n\t}\n\n\tset width( value ) {\n\n\t\tthis.z = value;\n\n\t}\n\n\tget height() {\n\n\t\treturn this.w;\n\n\t}\n\n\tset height( value ) {\n\n\t\tthis.w = value;\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\t\tthis.w = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( w ) {\n\n\t\tthis.w = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tcase 3: this.w = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tcase 3: return this.w;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\tthis.w += v.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\t\tthis.w += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\t\tthis.w = a.w + b.w;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\t\tthis.w += v.w * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\tthis.w -= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\t\tthis.w -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\t\tthis.w = a.w - b.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\t\tthis.w *= v.w;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\tthis.w *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z, w = this.w;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tsetAxisAngleFromQuaternion( q ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t// q is assumed to be normalized\n\n\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\tconst s = Math.sqrt( 1 - q.w * q.w );\n\n\t\tif ( s < 0.0001 ) {\n\n\t\t\tthis.x = 1;\n\t\t\tthis.y = 0;\n\t\t\tthis.z = 0;\n\n\t\t} else {\n\n\t\t\tthis.x = q.x / s;\n\t\t\tthis.y = q.y / s;\n\t\t\tthis.z = q.z / s;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetAxisAngleFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tlet angle, x, y, z; // variables for result\n\t\tconst epsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\tte = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t// singularity found\n\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t}\n\n\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\tangle = Math.PI;\n\n\t\t\tconst xx = ( m11 + 1 ) / 2;\n\t\t\tconst yy = ( m22 + 1 ) / 2;\n\t\t\tconst zz = ( m33 + 1 ) / 2;\n\t\t\tconst xy = ( m12 + m21 ) / 4;\n\t\t\tconst xz = ( m13 + m31 ) / 4;\n\t\t\tconst yz = ( m23 + m32 ) / 4;\n\n\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\tx = 0;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\ty = xy / x;\n\t\t\t\t\tz = xz / x;\n\n\t\t\t\t}\n\n\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0;\n\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\tx = xy / y;\n\t\t\t\t\tz = yz / y;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\tz = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\tx = xz / z;\n\t\t\t\t\ty = yz / z;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.set( x, y, z, angle );\n\n\t\t\treturn this; // return 180 deg rotation\n\n\t\t}\n\n\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\tlet s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\tthis.x = ( m32 - m23 ) / s;\n\t\tthis.y = ( m13 - m31 ) / s;\n\t\tthis.z = ( m21 - m12 ) / s;\n\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\t\tthis.w = e[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\t\tthis.w = Math.min( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\t\tthis.w = Math.max( this.w, v.w );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\t\tthis.w = Math.max( minVal, Math.min( maxVal, this.w ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\t\tthis.w = Math.floor( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\t\tthis.w = Math.ceil( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\t\tthis.w = Math.round( this.w );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\t\tthis.w = Math.trunc( this.w );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\t\tthis.w = - this.w;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\t\tthis.w = v1.w + ( v2.w - v1.w ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\t\tthis.w = array[ offset + 3 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\t\tarray[ offset + 3 ] = this.w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\t\tthis.w = attribute.getW( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\t\tthis.w = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\t\tyield this.w;\n\n\t}\n\n}\n\n/*\n In options, we can specify:\n * Texture parameters for an auto-generated target texture\n * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n*/\nclass RenderTarget extends EventDispatcher {\n\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.isRenderTarget = true;\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.depth = 1;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\tconst image = { width: width, height: height, depth: 1 };\n\n\t\toptions = Object.assign( {\n\t\t\tgenerateMipmaps: false,\n\t\t\tinternalFormat: null,\n\t\t\tminFilter: LinearFilter,\n\t\t\tdepthBuffer: true,\n\t\t\tstencilBuffer: false,\n\t\t\tresolveDepthBuffer: true,\n\t\t\tresolveStencilBuffer: true,\n\t\t\tdepthTexture: null,\n\t\t\tsamples: 0,\n\t\t\tcount: 1\n\t\t}, options );\n\n\t\tconst texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );\n\n\t\ttexture.flipY = false;\n\t\ttexture.generateMipmaps = options.generateMipmaps;\n\t\ttexture.internalFormat = options.internalFormat;\n\n\t\tthis.textures = [];\n\n\t\tconst count = options.count;\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.textures[ i ] = texture.clone();\n\t\t\tthis.textures[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t\tthis.depthBuffer = options.depthBuffer;\n\t\tthis.stencilBuffer = options.stencilBuffer;\n\n\t\tthis.resolveDepthBuffer = options.resolveDepthBuffer;\n\t\tthis.resolveStencilBuffer = options.resolveStencilBuffer;\n\n\t\tthis.depthTexture = options.depthTexture;\n\n\t\tthis.samples = options.samples;\n\n\t}\n\n\tget texture() {\n\n\t\treturn this.textures[ 0 ];\n\n\t}\n\n\tset texture( value ) {\n\n\t\tthis.textures[ 0 ] = value;\n\n\t}\n\n\tsetSize( width, height, depth = 1 ) {\n\n\t\tif ( this.width !== width || this.height !== height || this.depth !== depth ) {\n\n\t\t\tthis.width = width;\n\t\t\tthis.height = height;\n\t\t\tthis.depth = depth;\n\n\t\t\tfor ( let i = 0, il = this.textures.length; i < il; i ++ ) {\n\n\t\t\t\tthis.textures[ i ].image.width = width;\n\t\t\t\tthis.textures[ i ].image.height = height;\n\t\t\t\tthis.textures[ i ].image.depth = depth;\n\n\t\t\t}\n\n\t\t\tthis.dispose();\n\n\t\t}\n\n\t\tthis.viewport.set( 0, 0, width, height );\n\t\tthis.scissor.set( 0, 0, width, height );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\t\tthis.depth = source.depth;\n\n\t\tthis.scissor.copy( source.scissor );\n\t\tthis.scissorTest = source.scissorTest;\n\n\t\tthis.viewport.copy( source.viewport );\n\n\t\tthis.textures.length = 0;\n\n\t\tfor ( let i = 0, il = source.textures.length; i < il; i ++ ) {\n\n\t\t\tthis.textures[ i ] = source.textures[ i ].clone();\n\t\t\tthis.textures[ i ].isRenderTargetTexture = true;\n\n\t\t}\n\n\t\t// ensure image object is not shared, see #20328\n\n\t\tconst image = Object.assign( {}, source.texture.image );\n\t\tthis.texture.source = new Source( image );\n\n\t\tthis.depthBuffer = source.depthBuffer;\n\t\tthis.stencilBuffer = source.stencilBuffer;\n\n\t\tthis.resolveDepthBuffer = source.resolveDepthBuffer;\n\t\tthis.resolveStencilBuffer = source.resolveStencilBuffer;\n\n\t\tif ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nclass WebGLRenderTarget extends RenderTarget {\n\n\tconstructor( width = 1, height = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGLRenderTarget = true;\n\n\t}\n\n}\n\nclass DataArrayTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\tsuper( null );\n\n\t\tthis.isDataArrayTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t\tthis.layerUpdates = new Set();\n\n\t}\n\n\taddLayerUpdate( layerIndex ) {\n\n\t\tthis.layerUpdates.add( layerIndex );\n\n\t}\n\n\tclearLayerUpdates() {\n\n\t\tthis.layerUpdates.clear();\n\n\t}\n\n}\n\nclass WebGLArrayRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGLArrayRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new DataArrayTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass Data3DTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, depth = 1 ) {\n\n\t\t// We're going to add .setXXX() methods for setting properties later.\n\t\t// Users can still set in DataTexture3D directly.\n\t\t//\n\t\t//\tconst texture = new THREE.DataTexture3D( data, width, height, depth );\n\t\t// \ttexture.anisotropy = 16;\n\t\t//\n\t\t// See #14839\n\n\t\tsuper( null );\n\n\t\tthis.isData3DTexture = true;\n\n\t\tthis.image = { data, width, height, depth };\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nclass WebGL3DRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( width = 1, height = 1, depth = 1, options = {} ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.isWebGL3DRenderTarget = true;\n\n\t\tthis.depth = depth;\n\n\t\tthis.texture = new Data3DTexture( null, width, height, depth );\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t}\n\n}\n\nclass Quaternion {\n\n\tconstructor( x = 0, y = 0, z = 0, w = 1 ) {\n\n\t\tthis.isQuaternion = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t}\n\n\tstatic slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\tlet x0 = src0[ srcOffset0 + 0 ],\n\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\tw0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 + 0 ],\n\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\tif ( t === 0 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( t === 1 ) {\n\n\t\t\tdst[ dstOffset + 0 ] = x1;\n\t\t\tdst[ dstOffset + 1 ] = y1;\n\t\t\tdst[ dstOffset + 2 ] = z1;\n\t\t\tdst[ dstOffset + 3 ] = w1;\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\tlet s = 1 - t;\n\t\t\tconst cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\tconst sin = Math.sqrt( sqrSin ),\n\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t}\n\n\t\t\tconst tDir = t * dir;\n\n\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t// Normalize in case we just did a lerp:\n\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\tconst f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\tx0 *= f;\n\t\t\t\ty0 *= f;\n\t\t\t\tz0 *= f;\n\t\t\t\tw0 *= f;\n\n\t\t\t}\n\n\t\t}\n\n\t\tdst[ dstOffset ] = x0;\n\t\tdst[ dstOffset + 1 ] = y0;\n\t\tdst[ dstOffset + 2 ] = z0;\n\t\tdst[ dstOffset + 3 ] = w0;\n\n\t}\n\n\tstatic multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {\n\n\t\tconst x0 = src0[ srcOffset0 ];\n\t\tconst y0 = src0[ srcOffset0 + 1 ];\n\t\tconst z0 = src0[ srcOffset0 + 2 ];\n\t\tconst w0 = src0[ srcOffset0 + 3 ];\n\n\t\tconst x1 = src1[ srcOffset1 ];\n\t\tconst y1 = src1[ srcOffset1 + 1 ];\n\t\tconst z1 = src1[ srcOffset1 + 2 ];\n\t\tconst w1 = src1[ srcOffset1 + 3 ];\n\n\t\tdst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;\n\t\tdst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;\n\t\tdst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;\n\t\tdst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;\n\n\t\treturn dst;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget w() {\n\n\t\treturn this._w;\n\n\t}\n\n\tset w( value ) {\n\n\t\tthis._w = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, w ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._w = w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t}\n\n\tcopy( quaternion ) {\n\n\t\tthis._x = quaternion.x;\n\t\tthis._y = quaternion.y;\n\t\tthis._z = quaternion.z;\n\t\tthis._w = quaternion.w;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromEuler( euler, update = true ) {\n\n\t\tconst x = euler._x, y = euler._y, z = euler._z, order = euler._order;\n\n\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t//\tcontent/SpinCalc.m\n\n\t\tconst cos = Math.cos;\n\t\tconst sin = Math.sin;\n\n\t\tconst c1 = cos( x / 2 );\n\t\tconst c2 = cos( y / 2 );\n\t\tconst c3 = cos( z / 2 );\n\n\t\tconst s1 = sin( x / 2 );\n\t\tconst s2 = sin( y / 2 );\n\t\tconst s3 = sin( z / 2 );\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAxisAngle( axis, angle ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t// assumes axis is normalized\n\n\t\tconst halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\tthis._x = axis.x * s;\n\t\tthis._y = axis.y * s;\n\t\tthis._z = axis.z * s;\n\t\tthis._w = Math.cos( halfAngle );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m ) {\n\n\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements,\n\n\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\ttrace = m11 + m22 + m33;\n\n\t\tif ( trace > 0 ) {\n\n\t\t\tconst s = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\tthis._w = 0.25 / s;\n\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\tthis._x = 0.25 * s;\n\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t} else if ( m22 > m33 ) {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\tthis._y = 0.25 * s;\n\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t} else {\n\n\t\t\tconst s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\tthis._z = 0.25 * s;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromUnitVectors( vFrom, vTo ) {\n\n\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\tlet r = vFrom.dot( vTo ) + 1;\n\n\t\tif ( r < Number.EPSILON ) {\n\n\t\t\t// vFrom and vTo point in opposite directions\n\n\t\t\tr = 0;\n\n\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\tthis._x = - vFrom.y;\n\t\t\t\tthis._y = vFrom.x;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = r;\n\n\t\t\t} else {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = - vFrom.z;\n\t\t\t\tthis._z = vFrom.y;\n\t\t\t\tthis._w = r;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3\n\n\t\t\tthis._x = vFrom.y * vTo.z - vFrom.z * vTo.y;\n\t\t\tthis._y = vFrom.z * vTo.x - vFrom.x * vTo.z;\n\t\t\tthis._z = vFrom.x * vTo.y - vFrom.y * vTo.x;\n\t\t\tthis._w = r;\n\n\t\t}\n\n\t\treturn this.normalize();\n\n\t}\n\n\tangleTo( q ) {\n\n\t\treturn 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );\n\n\t}\n\n\trotateTowards( q, step ) {\n\n\t\tconst angle = this.angleTo( q );\n\n\t\tif ( angle === 0 ) return this;\n\n\t\tconst t = Math.min( 1, step / angle );\n\n\t\tthis.slerp( q, t );\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\treturn this.set( 0, 0, 0, 1 );\n\n\t}\n\n\tinvert() {\n\n\t\t// quaternion is assumed to have unit length\n\n\t\treturn this.conjugate();\n\n\t}\n\n\tconjugate() {\n\n\t\tthis._x *= - 1;\n\t\tthis._y *= - 1;\n\t\tthis._z *= - 1;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t}\n\n\tlengthSq() {\n\n\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t}\n\n\tnormalize() {\n\n\t\tlet l = this.length();\n\n\t\tif ( l === 0 ) {\n\n\t\t\tthis._x = 0;\n\t\t\tthis._y = 0;\n\t\t\tthis._z = 0;\n\t\t\tthis._w = 1;\n\n\t\t} else {\n\n\t\t\tl = 1 / l;\n\n\t\t\tthis._x = this._x * l;\n\t\t\tthis._y = this._y * l;\n\t\t\tthis._z = this._z * l;\n\t\t\tthis._w = this._w * l;\n\n\t\t}\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( this, q );\n\n\t}\n\n\tpremultiply( q ) {\n\n\t\treturn this.multiplyQuaternions( q, this );\n\n\t}\n\n\tmultiplyQuaternions( a, b ) {\n\n\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\tconst qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\tconst qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerp( qb, t ) {\n\n\t\tif ( t === 0 ) return this;\n\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\tconst x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\tlet cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\tthis._w = - qb._w;\n\t\t\tthis._x = - qb._x;\n\t\t\tthis._y = - qb._y;\n\t\t\tthis._z = - qb._z;\n\n\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t} else {\n\n\t\t\tthis.copy( qb );\n\n\t\t}\n\n\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\tthis._w = w;\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;\n\n\t\tif ( sqrSinHalfTheta <= Number.EPSILON ) {\n\n\t\t\tconst s = 1 - t;\n\t\t\tthis._w = s * w + t * this._w;\n\t\t\tthis._x = s * x + t * this._x;\n\t\t\tthis._y = s * y + t * this._y;\n\t\t\tthis._z = s * z + t * this._z;\n\n\t\t\tthis.normalize(); // normalize calls _onChangeCallback()\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst sinHalfTheta = Math.sqrt( sqrSinHalfTheta );\n\t\tconst halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\tconst ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tslerpQuaternions( qa, qb, t ) {\n\n\t\treturn this.copy( qa ).slerp( qb, t );\n\n\t}\n\n\trandom() {\n\n\t\t// sets this quaternion to a uniform random unit quaternnion\n\n\t\t// Ken Shoemake\n\t\t// Uniform random rotations\n\t\t// D. Kirk, editor, Graphics Gems III, pages 124-132. Academic Press, New York, 1992.\n\n\t\tconst theta1 = 2 * Math.PI * Math.random();\n\t\tconst theta2 = 2 * Math.PI * Math.random();\n\n\t\tconst x0 = Math.random();\n\t\tconst r1 = Math.sqrt( 1 - x0 );\n\t\tconst r2 = Math.sqrt( x0 );\n\n\t\treturn this.set(\n\t\t\tr1 * Math.sin( theta1 ),\n\t\t\tr1 * Math.cos( theta1 ),\n\t\t\tr2 * Math.sin( theta2 ),\n\t\t\tr2 * Math.cos( theta2 ),\n\t\t);\n\n\t}\n\n\tequals( quaternion ) {\n\n\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis._x = array[ offset ];\n\t\tthis._y = array[ offset + 1 ];\n\t\tthis._z = array[ offset + 2 ];\n\t\tthis._w = array[ offset + 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._w;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis._x = attribute.getX( index );\n\t\tthis._y = attribute.getY( index );\n\t\tthis._z = attribute.getZ( index );\n\t\tthis._w = attribute.getW( index );\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.toArray();\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._w;\n\n\t}\n\n}\n\nclass Vector3 {\n\n\tconstructor( x = 0, y = 0, z = 0 ) {\n\n\t\tVector3.prototype.isVector3 = true;\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t}\n\n\tset( x, y, z ) {\n\n\t\tif ( z === undefined ) z = this.z; // sprite.scale.set(x,y)\n\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.x = scalar;\n\t\tthis.y = scalar;\n\t\tthis.z = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( x ) {\n\n\t\tthis.x = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( y ) {\n\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( z ) {\n\n\t\tthis.z = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponent( index, value ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: this.x = value; break;\n\t\t\tcase 1: this.y = value; break;\n\t\t\tcase 2: this.z = value; break;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index ) {\n\n\t\tswitch ( index ) {\n\n\t\t\tcase 0: return this.x;\n\t\t\tcase 1: return this.y;\n\t\t\tcase 2: return this.z;\n\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t}\n\n\tcopy( v ) {\n\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tadd( v ) {\n\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.x += s;\n\t\tthis.y += s;\n\t\tthis.z += s;\n\n\t\treturn this;\n\n\t}\n\n\taddVectors( a, b ) {\n\n\t\tthis.x = a.x + b.x;\n\t\tthis.y = a.y + b.y;\n\t\tthis.z = a.z + b.z;\n\n\t\treturn this;\n\n\t}\n\n\taddScaledVector( v, s ) {\n\n\t\tthis.x += v.x * s;\n\t\tthis.y += v.y * s;\n\t\tthis.z += v.z * s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( v ) {\n\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tsubScalar( s ) {\n\n\t\tthis.x -= s;\n\t\tthis.y -= s;\n\t\tthis.z -= s;\n\n\t\treturn this;\n\n\t}\n\n\tsubVectors( a, b ) {\n\n\t\tthis.x = a.x - b.x;\n\t\tthis.y = a.y - b.y;\n\t\tthis.z = a.z - b.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( v ) {\n\n\t\tthis.x *= v.x;\n\t\tthis.y *= v.y;\n\t\tthis.z *= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( scalar ) {\n\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyVectors( a, b ) {\n\n\t\tthis.x = a.x * b.x;\n\t\tthis.y = a.y * b.y;\n\t\tthis.z = a.z * b.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyEuler( euler ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );\n\n\t}\n\n\tapplyAxisAngle( axis, angle ) {\n\n\t\treturn this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\treturn this.applyMatrix3( m ).normalize();\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tconst w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t// quaternion q is assumed to have unit length\n\n\t\tconst vx = this.x, vy = this.y, vz = this.z;\n\t\tconst qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t// t = 2 * cross( q.xyz, v );\n\t\tconst tx = 2 * ( qy * vz - qz * vy );\n\t\tconst ty = 2 * ( qz * vx - qx * vz );\n\t\tconst tz = 2 * ( qx * vy - qy * vx );\n\n\t\t// v + q.w * t + cross( q.xyz, t );\n\t\tthis.x = vx + qw * tx + qy * tz - qz * ty;\n\t\tthis.y = vy + qw * ty + qz * tx - qx * tz;\n\t\tthis.z = vz + qw * tz + qx * ty - qy * tx;\n\n\t\treturn this;\n\n\t}\n\n\tproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );\n\n\t}\n\n\tunproject( camera ) {\n\n\t\treturn this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\t// input: THREE.Matrix4 affine matrix\n\t\t// vector interpreted as a direction\n\n\t\tconst x = this.x, y = this.y, z = this.z;\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\treturn this.normalize();\n\n\t}\n\n\tdivide( v ) {\n\n\t\tthis.x /= v.x;\n\t\tthis.y /= v.y;\n\t\tthis.z /= v.z;\n\n\t\treturn this;\n\n\t}\n\n\tdivideScalar( scalar ) {\n\n\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t}\n\n\tmin( v ) {\n\n\t\tthis.x = Math.min( this.x, v.x );\n\t\tthis.y = Math.min( this.y, v.y );\n\t\tthis.z = Math.min( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tmax( v ) {\n\n\t\tthis.x = Math.max( this.x, v.x );\n\t\tthis.y = Math.max( this.y, v.y );\n\t\tthis.z = Math.max( this.z, v.z );\n\n\t\treturn this;\n\n\t}\n\n\tclamp( min, max ) {\n\n\t\t// assumes min < max, componentwise\n\n\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampScalar( minVal, maxVal ) {\n\n\t\tthis.x = Math.max( minVal, Math.min( maxVal, this.x ) );\n\t\tthis.y = Math.max( minVal, Math.min( maxVal, this.y ) );\n\t\tthis.z = Math.max( minVal, Math.min( maxVal, this.z ) );\n\n\t\treturn this;\n\n\t}\n\n\tclampLength( min, max ) {\n\n\t\tconst length = this.length();\n\n\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t}\n\n\tfloor() {\n\n\t\tthis.x = Math.floor( this.x );\n\t\tthis.y = Math.floor( this.y );\n\t\tthis.z = Math.floor( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tceil() {\n\n\t\tthis.x = Math.ceil( this.x );\n\t\tthis.y = Math.ceil( this.y );\n\t\tthis.z = Math.ceil( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tround() {\n\n\t\tthis.x = Math.round( this.x );\n\t\tthis.y = Math.round( this.y );\n\t\tthis.z = Math.round( this.z );\n\n\t\treturn this;\n\n\t}\n\n\troundToZero() {\n\n\t\tthis.x = Math.trunc( this.x );\n\t\tthis.y = Math.trunc( this.y );\n\t\tthis.z = Math.trunc( this.z );\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.x = - this.x;\n\t\tthis.y = - this.y;\n\t\tthis.z = - this.z;\n\n\t\treturn this;\n\n\t}\n\n\tdot( v ) {\n\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t}\n\n\t// TODO lengthSquared?\n\n\tlengthSq() {\n\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t}\n\n\tlength() {\n\n\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t}\n\n\tmanhattanLength() {\n\n\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t}\n\n\tnormalize() {\n\n\t\treturn this.divideScalar( this.length() || 1 );\n\n\t}\n\n\tsetLength( length ) {\n\n\t\treturn this.normalize().multiplyScalar( length );\n\n\t}\n\n\tlerp( v, alpha ) {\n\n\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpVectors( v1, v2, alpha ) {\n\n\t\tthis.x = v1.x + ( v2.x - v1.x ) * alpha;\n\t\tthis.y = v1.y + ( v2.y - v1.y ) * alpha;\n\t\tthis.z = v1.z + ( v2.z - v1.z ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tcross( v ) {\n\n\t\treturn this.crossVectors( this, v );\n\n\t}\n\n\tcrossVectors( a, b ) {\n\n\t\tconst ax = a.x, ay = a.y, az = a.z;\n\t\tconst bx = b.x, by = b.y, bz = b.z;\n\n\t\tthis.x = ay * bz - az * by;\n\t\tthis.y = az * bx - ax * bz;\n\t\tthis.z = ax * by - ay * bx;\n\n\t\treturn this;\n\n\t}\n\n\tprojectOnVector( v ) {\n\n\t\tconst denominator = v.lengthSq();\n\n\t\tif ( denominator === 0 ) return this.set( 0, 0, 0 );\n\n\t\tconst scalar = v.dot( this ) / denominator;\n\n\t\treturn this.copy( v ).multiplyScalar( scalar );\n\n\t}\n\n\tprojectOnPlane( planeNormal ) {\n\n\t\t_vector$c.copy( this ).projectOnVector( planeNormal );\n\n\t\treturn this.sub( _vector$c );\n\n\t}\n\n\treflect( normal ) {\n\n\t\t// reflect incident vector off plane orthogonal to normal\n\t\t// normal is assumed to have unit length\n\n\t\treturn this.sub( _vector$c.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t}\n\n\tangleTo( v ) {\n\n\t\tconst denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );\n\n\t\tif ( denominator === 0 ) return Math.PI / 2;\n\n\t\tconst theta = this.dot( v ) / denominator;\n\n\t\t// clamp, to handle numerical problems\n\n\t\treturn Math.acos( clamp( theta, - 1, 1 ) );\n\n\t}\n\n\tdistanceTo( v ) {\n\n\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t}\n\n\tdistanceToSquared( v ) {\n\n\t\tconst dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t}\n\n\tmanhattanDistanceTo( v ) {\n\n\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t}\n\n\tsetFromSpherical( s ) {\n\n\t\treturn this.setFromSphericalCoords( s.radius, s.phi, s.theta );\n\n\t}\n\n\tsetFromSphericalCoords( radius, phi, theta ) {\n\n\t\tconst sinPhiRadius = Math.sin( phi ) * radius;\n\n\t\tthis.x = sinPhiRadius * Math.sin( theta );\n\t\tthis.y = Math.cos( phi ) * radius;\n\t\tthis.z = sinPhiRadius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCylindrical( c ) {\n\n\t\treturn this.setFromCylindricalCoords( c.radius, c.theta, c.y );\n\n\t}\n\n\tsetFromCylindricalCoords( radius, theta, y ) {\n\n\t\tthis.x = radius * Math.sin( theta );\n\t\tthis.y = y;\n\t\tthis.z = radius * Math.cos( theta );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixPosition( m ) {\n\n\t\tconst e = m.elements;\n\n\t\tthis.x = e[ 12 ];\n\t\tthis.y = e[ 13 ];\n\t\tthis.z = e[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixScale( m ) {\n\n\t\tconst sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\tconst sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\tconst sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\tthis.x = sx;\n\t\tthis.y = sy;\n\t\tthis.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrixColumn( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t}\n\n\tsetFromMatrix3Column( m, index ) {\n\n\t\treturn this.fromArray( m.elements, index * 3 );\n\n\t}\n\n\tsetFromEuler( e ) {\n\n\t\tthis.x = e._x;\n\t\tthis.y = e._y;\n\t\tthis.z = e._z;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromColor( c ) {\n\n\t\tthis.x = c.r;\n\t\tthis.y = c.g;\n\t\tthis.z = c.b;\n\n\t\treturn this;\n\n\t}\n\n\tequals( v ) {\n\n\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.x = array[ offset ];\n\t\tthis.y = array[ offset + 1 ];\n\t\tthis.z = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.x;\n\t\tarray[ offset + 1 ] = this.y;\n\t\tarray[ offset + 2 ] = this.z;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.x = attribute.getX( index );\n\t\tthis.y = attribute.getY( index );\n\t\tthis.z = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\trandom() {\n\n\t\tthis.x = Math.random();\n\t\tthis.y = Math.random();\n\t\tthis.z = Math.random();\n\n\t\treturn this;\n\n\t}\n\n\trandomDirection() {\n\n\t\t// https://mathworld.wolfram.com/SpherePointPicking.html\n\n\t\tconst theta = Math.random() * Math.PI * 2;\n\t\tconst u = Math.random() * 2 - 1;\n\t\tconst c = Math.sqrt( 1 - u * u );\n\n\t\tthis.x = c * Math.cos( theta );\n\t\tthis.y = u;\n\t\tthis.z = c * Math.sin( theta );\n\n\t\treturn this;\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.x;\n\t\tyield this.y;\n\t\tyield this.z;\n\n\t}\n\n}\n\nconst _vector$c = /*@__PURE__*/ new Vector3();\nconst _quaternion$4 = /*@__PURE__*/ new Quaternion();\n\nclass Box3 {\n\n\tconstructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox3 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromArray( array ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = array.length; i < il; i += 3 ) {\n\n\t\t\tthis.expandByPoint( _vector$b.fromArray( array, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromBufferAttribute( attribute ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( _vector$b.fromBufferAttribute( attribute, i ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$b.copy( size ).multiplyScalar( 0.5 );\n\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromObject( object, precise = false ) {\n\n\t\tthis.makeEmpty();\n\n\t\treturn this.expandByObject( object, precise );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\texpandByObject( object, precise = false ) {\n\n\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t// accounting for both the object's, and children's, world transforms\n\n\t\tobject.updateWorldMatrix( false, false );\n\n\t\tconst geometry = object.geometry;\n\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\t\t// precise AABB computation based on vertex data requires at least a position attribute.\n\t\t\t// instancing isn't supported so far and uses the normal (conservative) code path.\n\n\t\t\tif ( precise === true && positionAttribute !== undefined && object.isInstancedMesh !== true ) {\n\n\t\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\tif ( object.isMesh === true ) {\n\n\t\t\t\t\t\tobject.getVertexPosition( i, _vector$b );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_vector$b.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_vector$b.applyMatrix4( object.matrixWorld );\n\t\t\t\t\tthis.expandByPoint( _vector$b );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( object.boundingBox !== undefined ) {\n\n\t\t\t\t\t// object-level bounding box\n\n\t\t\t\t\tif ( object.boundingBox === null ) {\n\n\t\t\t\t\t\tobject.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$4.copy( object.boundingBox );\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// geometry-level bounding box\n\n\t\t\t\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\t\t\t\tgeometry.computeBoundingBox();\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_box$4.copy( geometry.boundingBox );\n\n\t\t\t\t}\n\n\t\t\t\t_box$4.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tthis.union( _box$4 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tthis.expandByObject( children[ i ], precise );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x >= this.min.x && point.x <= this.max.x &&\n\t\t\tpoint.y >= this.min.y && point.y <= this.max.y &&\n\t\t\tpoint.z >= this.min.z && point.z <= this.max.z;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 6 splitting planes to rule out intersections.\n\t\treturn box.max.x >= this.min.x && box.min.x <= this.max.x &&\n\t\t\tbox.max.y >= this.min.y && box.min.y <= this.max.y &&\n\t\t\tbox.max.z >= this.min.z && box.min.z <= this.max.z;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\t// Find the point on the AABB closest to the sphere center.\n\t\tthis.clampPoint( sphere.center, _vector$b );\n\n\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\treturn _vector$b.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\tlet min, max;\n\n\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t} else {\n\n\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t}\n\n\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t}\n\n\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t} else {\n\n\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t}\n\n\t\treturn ( min <= - plane.constant && max >= - plane.constant );\n\n\t}\n\n\tintersectsTriangle( triangle ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// compute box center and extents\n\t\tthis.getCenter( _center );\n\t\t_extents.subVectors( this.max, _center );\n\n\t\t// translate triangle to aabb origin\n\t\t_v0$3.subVectors( triangle.a, _center );\n\t\t_v1$7.subVectors( triangle.b, _center );\n\t\t_v2$4.subVectors( triangle.c, _center );\n\n\t\t// compute edge vectors for triangle\n\t\t_f0.subVectors( _v1$7, _v0$3 );\n\t\t_f1.subVectors( _v2$4, _v1$7 );\n\t\t_f2.subVectors( _v0$3, _v2$4 );\n\n\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\tlet axes = [\n\t\t\t0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,\n\t\t\t_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,\n\t\t\t- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0\n\t\t];\n\t\tif ( ! satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// test 3 face normals from the aabb\n\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\tif ( ! satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\t// finally testing the face normal of the triangle\n\t\t// use already existing triangle edge vectors here\n\t\t_triangleNormal.crossVectors( _f0, _f1 );\n\t\taxes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];\n\n\t\treturn satForAxes( axes, _v0$3, _v1$7, _v2$4, _extents );\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$b ).distanceTo( point );\n\n\t}\n\n\tgetBoundingSphere( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\ttarget.makeEmpty();\n\n\t\t} else {\n\n\t\t\tthis.getCenter( target.center );\n\n\t\t\ttarget.radius = this.getSize( _vector$b ).length() * 0.5;\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\t// transform of empty box is an empty box.\n\t\tif ( this.isEmpty() ) return this;\n\n\t\t// NOTE: I am using a binary pattern to specify all 2^3 combinations below\n\t\t_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000\n\t\t_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001\n\t\t_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010\n\t\t_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011\n\t\t_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100\n\t\t_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101\n\t\t_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110\n\t\t_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111\n\n\t\tthis.setFromPoints( _points );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _points = [\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3(),\n\t/*@__PURE__*/ new Vector3()\n];\n\nconst _vector$b = /*@__PURE__*/ new Vector3();\n\nconst _box$4 = /*@__PURE__*/ new Box3();\n\n// triangle centered vertices\n\nconst _v0$3 = /*@__PURE__*/ new Vector3();\nconst _v1$7 = /*@__PURE__*/ new Vector3();\nconst _v2$4 = /*@__PURE__*/ new Vector3();\n\n// triangle edge vectors\n\nconst _f0 = /*@__PURE__*/ new Vector3();\nconst _f1 = /*@__PURE__*/ new Vector3();\nconst _f2 = /*@__PURE__*/ new Vector3();\n\nconst _center = /*@__PURE__*/ new Vector3();\nconst _extents = /*@__PURE__*/ new Vector3();\nconst _triangleNormal = /*@__PURE__*/ new Vector3();\nconst _testAxis = /*@__PURE__*/ new Vector3();\n\nfunction satForAxes( axes, v0, v1, v2, extents ) {\n\n\tfor ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t_testAxis.fromArray( axes, i );\n\t\t// project the aabb onto the separating axis\n\t\tconst r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );\n\t\t// project all 3 vertices of the triangle onto the separating axis\n\t\tconst p0 = v0.dot( _testAxis );\n\t\tconst p1 = v1.dot( _testAxis );\n\t\tconst p2 = v2.dot( _testAxis );\n\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t// the axis is separating and we can exit\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nconst _box$3 = /*@__PURE__*/ new Box3();\nconst _v1$6 = /*@__PURE__*/ new Vector3();\nconst _v2$3 = /*@__PURE__*/ new Vector3();\n\nclass Sphere {\n\n\tconstructor( center = new Vector3(), radius = - 1 ) {\n\n\t\tthis.isSphere = true;\n\n\t\tthis.center = center;\n\t\tthis.radius = radius;\n\n\t}\n\n\tset( center, radius ) {\n\n\t\tthis.center.copy( center );\n\t\tthis.radius = radius;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points, optionalCenter ) {\n\n\t\tconst center = this.center;\n\n\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\tcenter.copy( optionalCenter );\n\n\t\t} else {\n\n\t\t\t_box$3.setFromPoints( points ).getCenter( center );\n\n\t\t}\n\n\t\tlet maxRadiusSq = 0;\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t}\n\n\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( sphere ) {\n\n\t\tthis.center.copy( sphere.center );\n\t\tthis.radius = sphere.radius;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\treturn ( this.radius < 0 );\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.center.set( 0, 0, 0 );\n\t\tthis.radius = - 1;\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst radiusSum = this.radius + sphere.radius;\n\n\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsSphere( this );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tconst deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\ttarget.copy( point );\n\n\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\ttarget.sub( this.center ).normalize();\n\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\t// Empty sphere produces empty bounding box\n\t\t\ttarget.makeEmpty();\n\t\t\treturn target;\n\n\t\t}\n\n\t\ttarget.set( this.center, this.center );\n\t\ttarget.expandByScalar( this.radius );\n\n\t\treturn target;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.center.applyMatrix4( matrix );\n\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.center.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.center.copy( point );\n\n\t\t\tthis.radius = 0;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\t_v1$6.subVectors( point, this.center );\n\n\t\tconst lengthSq = _v1$6.lengthSq();\n\n\t\tif ( lengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\t// calculate the minimal sphere\n\n\t\t\tconst length = Math.sqrt( lengthSq );\n\n\t\t\tconst delta = ( length - this.radius ) * 0.5;\n\n\t\t\tthis.center.addScaledVector( _v1$6, delta / length );\n\n\t\t\tthis.radius += delta;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunion( sphere ) {\n\n\t\tif ( sphere.isEmpty() ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.isEmpty() ) {\n\n\t\t\tthis.copy( sphere );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( this.center.equals( sphere.center ) === true ) {\n\n\t\t\t this.radius = Math.max( this.radius, sphere.radius );\n\n\t\t} else {\n\n\t\t\t_v2$3.subVectors( sphere.center, this.center ).setLength( sphere.radius );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).add( _v2$3 ) );\n\n\t\t\tthis.expandByPoint( _v1$6.copy( sphere.center ).sub( _v2$3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sphere ) {\n\n\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$a = /*@__PURE__*/ new Vector3();\nconst _segCenter = /*@__PURE__*/ new Vector3();\nconst _segDir = /*@__PURE__*/ new Vector3();\nconst _diff = /*@__PURE__*/ new Vector3();\n\nconst _edge1 = /*@__PURE__*/ new Vector3();\nconst _edge2 = /*@__PURE__*/ new Vector3();\nconst _normal$1 = /*@__PURE__*/ new Vector3();\n\nclass Ray {\n\n\tconstructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {\n\n\t\tthis.origin = origin;\n\t\tthis.direction = direction;\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\tthis.origin.copy( origin );\n\t\tthis.direction.copy( direction );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( ray ) {\n\n\t\tthis.origin.copy( ray.origin );\n\t\tthis.direction.copy( ray.direction );\n\n\t\treturn this;\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, t );\n\n\t}\n\n\tlookAt( v ) {\n\n\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\treturn this;\n\n\t}\n\n\trecast( t ) {\n\n\t\tthis.origin.copy( this.at( t, _vector$a ) );\n\n\t\treturn this;\n\n\t}\n\n\tclosestPointToPoint( point, target ) {\n\n\t\ttarget.subVectors( point, this.origin );\n\n\t\tconst directionDistance = target.dot( this.direction );\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn target.copy( this.origin );\n\n\t\t}\n\n\t\treturn target.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t}\n\n\tdistanceSqToPoint( point ) {\n\n\t\tconst directionDistance = _vector$a.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t// point behind the ray\n\n\t\tif ( directionDistance < 0 ) {\n\n\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t}\n\n\t\t_vector$a.copy( this.origin ).addScaledVector( this.direction, directionDistance );\n\n\t\treturn _vector$a.distanceToSquared( point );\n\n\t}\n\n\tdistanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t// It returns the min distance between the ray and the segment\n\t\t// defined by v0 and v1\n\t\t// It can also set two optional targets :\n\t\t// - The closest point on the ray\n\t\t// - The closest point on the segment\n\n\t\t_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t_segDir.copy( v1 ).sub( v0 ).normalize();\n\t\t_diff.copy( this.origin ).sub( _segCenter );\n\n\t\tconst segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\tconst a01 = - this.direction.dot( _segDir );\n\t\tconst b0 = _diff.dot( this.direction );\n\t\tconst b1 = - _diff.dot( _segDir );\n\t\tconst c = _diff.lengthSq();\n\t\tconst det = Math.abs( 1 - a01 * a01 );\n\t\tlet s0, s1, sqrDist, extDet;\n\n\t\tif ( det > 0 ) {\n\n\t\t\t// The ray and segment are not parallel.\n\n\t\t\ts0 = a01 * b1 - b0;\n\t\t\ts1 = a01 * b0 - b1;\n\t\t\textDet = segExtent * det;\n\n\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 5\n\n\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t// region 4\n\n\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t// region 3\n\n\t\t\t\t\ts0 = 0;\n\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// region 2\n\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Ray and segment are parallel.\n\n\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t}\n\n\t\tif ( optionalPointOnRay ) {\n\n\t\t\toptionalPointOnRay.copy( this.origin ).addScaledVector( this.direction, s0 );\n\n\t\t}\n\n\t\tif ( optionalPointOnSegment ) {\n\n\t\t\toptionalPointOnSegment.copy( _segCenter ).addScaledVector( _segDir, s1 );\n\n\t\t}\n\n\t\treturn sqrDist;\n\n\t}\n\n\tintersectSphere( sphere, target ) {\n\n\t\t_vector$a.subVectors( sphere.center, this.origin );\n\t\tconst tca = _vector$a.dot( this.direction );\n\t\tconst d2 = _vector$a.dot( _vector$a ) - tca * tca;\n\t\tconst radius2 = sphere.radius * sphere.radius;\n\n\t\tif ( d2 > radius2 ) return null;\n\n\t\tconst thc = Math.sqrt( radius2 - d2 );\n\n\t\t// t0 = first intersect point - entrance on front of sphere\n\t\tconst t0 = tca - thc;\n\n\t\t// t1 = second intersect point - exit point on back of sphere\n\t\tconst t1 = tca + thc;\n\n\t\t// test to see if t1 is behind the ray - if so, return null\n\t\tif ( t1 < 0 ) return null;\n\n\t\t// test to see if t0 is behind the ray:\n\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t// in order to always return an intersect point that is in front of the ray.\n\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\treturn this.at( t0, target );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t}\n\n\tdistanceToPlane( plane ) {\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t// Return if the ray never intersects the plane\n\n\t\treturn t >= 0 ? t : null;\n\n\t}\n\n\tintersectPlane( plane, target ) {\n\n\t\tconst t = this.distanceToPlane( plane );\n\n\t\tif ( t === null ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn this.at( t, target );\n\n\t}\n\n\tintersectsPlane( plane ) {\n\n\t\t// check if the ray lies on the plane first\n\n\t\tconst distToPoint = plane.distanceToPoint( this.origin );\n\n\t\tif ( distToPoint === 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\tconst denominator = plane.normal.dot( this.direction );\n\n\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\treturn false;\n\n\t}\n\n\tintersectBox( box, target ) {\n\n\t\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\tconst invdirx = 1 / this.direction.x,\n\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\tconst origin = this.origin;\n\n\t\tif ( invdirx >= 0 ) {\n\n\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t} else {\n\n\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t}\n\n\t\tif ( invdiry >= 0 ) {\n\n\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t} else {\n\n\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t}\n\n\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\t\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\t\tif ( invdirz >= 0 ) {\n\n\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t} else {\n\n\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t}\n\n\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t//return point closest to the ray (positive side)\n\n\t\tif ( tmax < 0 ) return null;\n\n\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn this.intersectBox( box, _vector$a ) !== null;\n\n\t}\n\n\tintersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t// Compute the offset origin, edges, and normal.\n\n\t\t// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t_edge1.subVectors( b, a );\n\t\t_edge2.subVectors( c, a );\n\t\t_normal$1.crossVectors( _edge1, _edge2 );\n\n\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\tlet DdN = this.direction.dot( _normal$1 );\n\t\tlet sign;\n\n\t\tif ( DdN > 0 ) {\n\n\t\t\tif ( backfaceCulling ) return null;\n\t\t\tsign = 1;\n\n\t\t} else if ( DdN < 0 ) {\n\n\t\t\tsign = - 1;\n\t\t\tDdN = - DdN;\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t_diff.subVectors( this.origin, a );\n\t\tconst DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );\n\n\t\t// b1 < 0, no intersection\n\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );\n\n\t\t// b2 < 0, no intersection\n\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// b1+b2 > 1, no intersection\n\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Line intersects triangle, check if ray does.\n\t\tconst QdN = - sign * _diff.dot( _normal$1 );\n\n\t\t// t < 0, no intersection\n\t\tif ( QdN < 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// Ray intersects triangle.\n\t\treturn this.at( QdN / DdN, target );\n\n\t}\n\n\tapplyMatrix4( matrix4 ) {\n\n\t\tthis.origin.applyMatrix4( matrix4 );\n\t\tthis.direction.transformDirection( matrix4 );\n\n\t\treturn this;\n\n\t}\n\n\tequals( ray ) {\n\n\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix4 {\n\n\tconstructor( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tMatrix4.prototype.isMatrix4 = true;\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 );\n\n\t\t}\n\n\t}\n\n\tset( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\treturn this;\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Matrix4().fromArray( this.elements );\n\n\t}\n\n\tcopy( m ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\treturn this;\n\n\t}\n\n\tcopyPosition( m ) {\n\n\t\tconst te = this.elements, me = m.elements;\n\n\t\tte[ 12 ] = me[ 12 ];\n\t\tte[ 13 ] = me[ 13 ];\n\t\tte[ 14 ] = me[ 14 ];\n\n\t\treturn this;\n\n\t}\n\n\tsetFromMatrix3( m ) {\n\n\t\tconst me = m.elements;\n\n\t\tthis.set(\n\n\t\t\tme[ 0 ], me[ 3 ], me[ 6 ], 0,\n\t\t\tme[ 1 ], me[ 4 ], me[ 7 ], 0,\n\t\t\tme[ 2 ], me[ 5 ], me[ 8 ], 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractBasis( xAxis, yAxis, zAxis ) {\n\n\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\treturn this;\n\n\t}\n\n\tmakeBasis( xAxis, yAxis, zAxis ) {\n\n\t\tthis.set(\n\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t0, 0, 0, 1\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\textractRotation( m ) {\n\n\t\t// this method does not support reflection matrices\n\n\t\tconst te = this.elements;\n\t\tconst me = m.elements;\n\n\t\tconst scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();\n\t\tconst scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();\n\t\tconst scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();\n\n\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromEuler( euler ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = euler.x, y = euler.y, z = euler.z;\n\t\tconst a = Math.cos( x ), b = Math.sin( x );\n\t\tconst c = Math.cos( y ), d = Math.sin( y );\n\t\tconst e = Math.cos( z ), f = Math.sin( z );\n\n\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - c * f;\n\t\t\tte[ 8 ] = d;\n\n\t\t\tte[ 1 ] = af + be * d;\n\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\tte[ 9 ] = - b * c;\n\n\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\tte[ 6 ] = be + af * d;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce + df * b;\n\t\t\tte[ 4 ] = de * b - cf;\n\t\t\tte[ 8 ] = a * d;\n\n\t\t\tte[ 1 ] = a * f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b;\n\n\t\t\tte[ 2 ] = cf * b - de;\n\t\t\tte[ 6 ] = df + ce * b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\tconst ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\tte[ 0 ] = ce - df * b;\n\t\t\tte[ 4 ] = - a * f;\n\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\tte[ 1 ] = cf + de * b;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\tte[ 2 ] = - a * d;\n\t\t\tte[ 6 ] = b;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\tconst ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = be * d - af;\n\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\tte[ 1 ] = c * f;\n\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\tte[ 2 ] = - d;\n\t\t\tte[ 6 ] = b * c;\n\t\t\tte[ 10 ] = a * c;\n\n\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\tte[ 1 ] = f;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = - b * e;\n\n\t\t\tte[ 2 ] = - d * e;\n\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\tconst ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\tte[ 0 ] = c * e;\n\t\t\tte[ 4 ] = - f;\n\t\t\tte[ 8 ] = d * e;\n\n\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\tte[ 5 ] = a * e;\n\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\tte[ 6 ] = b * e;\n\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t}\n\n\t\t// bottom row\n\t\tte[ 3 ] = 0;\n\t\tte[ 7 ] = 0;\n\t\tte[ 11 ] = 0;\n\n\t\t// last column\n\t\tte[ 12 ] = 0;\n\t\tte[ 13 ] = 0;\n\t\tte[ 14 ] = 0;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationFromQuaternion( q ) {\n\n\t\treturn this.compose( _zero, q, _one );\n\n\t}\n\n\tlookAt( eye, target, up ) {\n\n\t\tconst te = this.elements;\n\n\t\t_z.subVectors( eye, target );\n\n\t\tif ( _z.lengthSq() === 0 ) {\n\n\t\t\t// eye and target are in the same position\n\n\t\t\t_z.z = 1;\n\n\t\t}\n\n\t\t_z.normalize();\n\t\t_x.crossVectors( up, _z );\n\n\t\tif ( _x.lengthSq() === 0 ) {\n\n\t\t\t// up and z are parallel\n\n\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t_z.x += 0.0001;\n\n\t\t\t} else {\n\n\t\t\t\t_z.z += 0.0001;\n\n\t\t\t}\n\n\t\t\t_z.normalize();\n\t\t\t_x.crossVectors( up, _z );\n\n\t\t}\n\n\t\t_x.normalize();\n\t\t_y.crossVectors( _z, _x );\n\n\t\tte[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;\n\t\tte[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;\n\t\tte[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( m ) {\n\n\t\treturn this.multiplyMatrices( this, m );\n\n\t}\n\n\tpremultiply( m ) {\n\n\t\treturn this.multiplyMatrices( m, this );\n\n\t}\n\n\tmultiplyMatrices( a, b ) {\n\n\t\tconst ae = a.elements;\n\t\tconst be = b.elements;\n\t\tconst te = this.elements;\n\n\t\tconst a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\tconst a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\tconst a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\tconst a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\tconst b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\tconst b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\tconst b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\tconst b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\treturn this;\n\n\t}\n\n\tdeterminant() {\n\n\t\tconst te = this.elements;\n\n\t\tconst n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\tconst n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\tconst n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\tconst n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t//TODO: make this more efficient\n\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\treturn (\n\t\t\tn41 * (\n\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t - n13 * n24 * n32\n\t\t\t\t - n14 * n22 * n33\n\t\t\t\t + n12 * n24 * n33\n\t\t\t\t + n13 * n22 * n34\n\t\t\t\t - n12 * n23 * n34\n\t\t\t) +\n\t\t\tn42 * (\n\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t - n11 * n24 * n33\n\t\t\t\t + n14 * n21 * n33\n\t\t\t\t - n13 * n21 * n34\n\t\t\t\t + n13 * n24 * n31\n\t\t\t\t - n14 * n23 * n31\n\t\t\t) +\n\t\t\tn43 * (\n\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t - n11 * n22 * n34\n\t\t\t\t - n14 * n21 * n32\n\t\t\t\t + n12 * n21 * n34\n\t\t\t\t + n14 * n22 * n31\n\t\t\t\t - n12 * n24 * n31\n\t\t\t) +\n\t\t\tn44 * (\n\t\t\t\t- n13 * n22 * n31\n\t\t\t\t - n11 * n23 * n32\n\t\t\t\t + n11 * n22 * n33\n\t\t\t\t + n13 * n21 * n32\n\t\t\t\t - n12 * n21 * n33\n\t\t\t\t + n12 * n23 * n31\n\t\t\t)\n\n\t\t);\n\n\t}\n\n\ttranspose() {\n\n\t\tconst te = this.elements;\n\t\tlet tmp;\n\n\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\treturn this;\n\n\t}\n\n\tsetPosition( x, y, z ) {\n\n\t\tconst te = this.elements;\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tte[ 12 ] = x.x;\n\t\t\tte[ 13 ] = x.y;\n\t\t\tte[ 14 ] = x.z;\n\n\t\t} else {\n\n\t\t\tte[ 12 ] = x;\n\t\t\tte[ 13 ] = y;\n\t\t\tte[ 14 ] = z;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tinvert() {\n\n\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\tconst te = this.elements,\n\n\t\t\tn11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],\n\t\t\tn12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],\n\t\t\tn13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],\n\t\t\tn14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],\n\n\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\tconst det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\tif ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );\n\n\t\tconst detInv = 1 / det;\n\n\t\tte[ 0 ] = t11 * detInv;\n\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\tte[ 4 ] = t12 * detInv;\n\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\tte[ 8 ] = t13 * detInv;\n\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\tte[ 12 ] = t14 * detInv;\n\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\treturn this;\n\n\t}\n\n\tscale( v ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = v.x, y = v.y, z = v.z;\n\n\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxScaleOnAxis() {\n\n\t\tconst te = this.elements;\n\n\t\tconst scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\tconst scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\tconst scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t}\n\n\tmakeTranslation( x, y, z ) {\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x.x,\n\t\t\t\t0, 1, 0, x.y,\n\t\t\t\t0, 0, 1, x.z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x,\n\t\t\t\t0, 1, 0, y,\n\t\t\t\t0, 0, 1, z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationX( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, c, - s, 0,\n\t\t\t0, s, c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationY( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\t c, 0, s, 0,\n\t\t\t 0, 1, 0, 0,\n\t\t\t- s, 0, c, 0,\n\t\t\t 0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationZ( theta ) {\n\n\t\tconst c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\tthis.set(\n\n\t\t\tc, - s, 0, 0,\n\t\t\ts, c, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeRotationAxis( axis, angle ) {\n\n\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\tconst c = Math.cos( angle );\n\t\tconst s = Math.sin( angle );\n\t\tconst t = 1 - c;\n\t\tconst x = axis.x, y = axis.y, z = axis.z;\n\t\tconst tx = t * x, ty = t * y;\n\n\t\tthis.set(\n\n\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeScale( x, y, z ) {\n\n\t\tthis.set(\n\n\t\t\tx, 0, 0, 0,\n\t\t\t0, y, 0, 0,\n\t\t\t0, 0, z, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tmakeShear( xy, xz, yx, yz, zx, zy ) {\n\n\t\tthis.set(\n\n\t\t\t1, yx, zx, 0,\n\t\t\txy, 1, zy, 0,\n\t\t\txz, yz, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tcompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tconst x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\tconst x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\tconst xx = x * x2, xy = x * y2, xz = x * z2;\n\t\tconst yy = y * y2, yz = y * z2, zz = z * z2;\n\t\tconst wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\tconst sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\tte[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\tte[ 1 ] = ( xy + wz ) * sx;\n\t\tte[ 2 ] = ( xz - wy ) * sx;\n\t\tte[ 3 ] = 0;\n\n\t\tte[ 4 ] = ( xy - wz ) * sy;\n\t\tte[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\tte[ 6 ] = ( yz + wx ) * sy;\n\t\tte[ 7 ] = 0;\n\n\t\tte[ 8 ] = ( xz + wy ) * sz;\n\t\tte[ 9 ] = ( yz - wx ) * sz;\n\t\tte[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\tte[ 11 ] = 0;\n\n\t\tte[ 12 ] = position.x;\n\t\tte[ 13 ] = position.y;\n\t\tte[ 14 ] = position.z;\n\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tdecompose( position, quaternion, scale ) {\n\n\t\tconst te = this.elements;\n\n\t\tlet sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\tconst sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\tconst sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t// if determine is negative, we need to invert one scale\n\t\tconst det = this.determinant();\n\t\tif ( det < 0 ) sx = - sx;\n\n\t\tposition.x = te[ 12 ];\n\t\tposition.y = te[ 13 ];\n\t\tposition.z = te[ 14 ];\n\n\t\t// scale the rotation part\n\t\t_m1$4.copy( this );\n\n\t\tconst invSX = 1 / sx;\n\t\tconst invSY = 1 / sy;\n\t\tconst invSZ = 1 / sz;\n\n\t\t_m1$4.elements[ 0 ] *= invSX;\n\t\t_m1$4.elements[ 1 ] *= invSX;\n\t\t_m1$4.elements[ 2 ] *= invSX;\n\n\t\t_m1$4.elements[ 4 ] *= invSY;\n\t\t_m1$4.elements[ 5 ] *= invSY;\n\t\t_m1$4.elements[ 6 ] *= invSY;\n\n\t\t_m1$4.elements[ 8 ] *= invSZ;\n\t\t_m1$4.elements[ 9 ] *= invSZ;\n\t\t_m1$4.elements[ 10 ] *= invSZ;\n\n\t\tquaternion.setFromRotationMatrix( _m1$4 );\n\n\t\tscale.x = sx;\n\t\tscale.y = sy;\n\t\tscale.z = sz;\n\n\t\treturn this;\n\n\t}\n\n\tmakePerspective( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst te = this.elements;\n\t\tconst x = 2 * near / ( right - left );\n\t\tconst y = 2 * near / ( top - bottom );\n\n\t\tconst a = ( right + left ) / ( right - left );\n\t\tconst b = ( top + bottom ) / ( top - bottom );\n\n\t\tlet c, d;\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tc = - ( far + near ) / ( far - near );\n\t\t\td = ( - 2 * far * near ) / ( far - near );\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tc = - far / ( far - near );\n\t\t\td = ( - far * near ) / ( far - near );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Matrix4.makePerspective(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a; \tte[ 12 ] = 0;\n\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b; \tte[ 13 ] = 0;\n\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c; \tte[ 14 ] = d;\n\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\treturn this;\n\n\t}\n\n\tmakeOrthographic( left, right, top, bottom, near, far, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst te = this.elements;\n\t\tconst w = 1.0 / ( right - left );\n\t\tconst h = 1.0 / ( top - bottom );\n\t\tconst p = 1.0 / ( far - near );\n\n\t\tconst x = ( right + left ) * w;\n\t\tconst y = ( top + bottom ) * h;\n\n\t\tlet z, zInv;\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tz = ( far + near ) * p;\n\t\t\tzInv = - 2 * p;\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tz = near * p;\n\t\t\tzInv = - 1 * p;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Matrix4.makeOrthographic(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\t\tte[ 8 ] = 0; \t\tte[ 12 ] = - x;\n\t\tte[ 1 ] = 0; \t\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0; \t\tte[ 13 ] = - y;\n\t\tte[ 2 ] = 0; \t\tte[ 6 ] = 0;\t\tte[ 10 ] = zInv;\tte[ 14 ] = - z;\n\t\tte[ 3 ] = 0; \t\tte[ 7 ] = 0;\t\tte[ 11 ] = 0;\t\tte[ 15 ] = 1;\n\n\t\treturn this;\n\n\t}\n\n\tequals( matrix ) {\n\n\t\tconst te = this.elements;\n\t\tconst me = matrix.elements;\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 16; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst te = this.elements;\n\n\t\tarray[ offset ] = te[ 0 ];\n\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\treturn array;\n\n\t}\n\n}\n\nconst _v1$5 = /*@__PURE__*/ new Vector3();\nconst _m1$4 = /*@__PURE__*/ new Matrix4();\nconst _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );\nconst _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );\nconst _x = /*@__PURE__*/ new Vector3();\nconst _y = /*@__PURE__*/ new Vector3();\nconst _z = /*@__PURE__*/ new Vector3();\n\nconst _matrix$2 = /*@__PURE__*/ new Matrix4();\nconst _quaternion$3 = /*@__PURE__*/ new Quaternion();\n\nclass Euler {\n\n\tconstructor( x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER ) {\n\n\t\tthis.isEuler = true;\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t}\n\n\tget x() {\n\n\t\treturn this._x;\n\n\t}\n\n\tset x( value ) {\n\n\t\tthis._x = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget y() {\n\n\t\treturn this._y;\n\n\t}\n\n\tset y( value ) {\n\n\t\tthis._y = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget z() {\n\n\t\treturn this._z;\n\n\t}\n\n\tset z( value ) {\n\n\t\tthis._z = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tget order() {\n\n\t\treturn this._order;\n\n\t}\n\n\tset order( value ) {\n\n\t\tthis._order = value;\n\t\tthis._onChangeCallback();\n\n\t}\n\n\tset( x, y, z, order = this._order ) {\n\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._z = z;\n\t\tthis._order = order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t}\n\n\tcopy( euler ) {\n\n\t\tthis._x = euler._x;\n\t\tthis._y = euler._y;\n\t\tthis._z = euler._z;\n\t\tthis._order = euler._order;\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromRotationMatrix( m, order = this._order, update = true ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tconst te = m.elements;\n\t\tconst m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\tconst m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\tconst m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\tswitch ( order ) {\n\n\t\t\tcase 'XYZ':\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YXZ':\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZXY':\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'ZYX':\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'YZX':\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'XZY':\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.9999999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );\n\n\t\t}\n\n\t\tthis._order = order;\n\n\t\tif ( update === true ) this._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\tsetFromQuaternion( q, order, update ) {\n\n\t\t_matrix$2.makeRotationFromQuaternion( q );\n\n\t\treturn this.setFromRotationMatrix( _matrix$2, order, update );\n\n\t}\n\n\tsetFromVector3( v, order = this._order ) {\n\n\t\treturn this.set( v.x, v.y, v.z, order );\n\n\t}\n\n\treorder( newOrder ) {\n\n\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t_quaternion$3.setFromEuler( this );\n\n\t\treturn this.setFromQuaternion( _quaternion$3, newOrder );\n\n\t}\n\n\tequals( euler ) {\n\n\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t}\n\n\tfromArray( array ) {\n\n\t\tthis._x = array[ 0 ];\n\t\tthis._y = array[ 1 ];\n\t\tthis._z = array[ 2 ];\n\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\tthis._onChangeCallback();\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this._x;\n\t\tarray[ offset + 1 ] = this._y;\n\t\tarray[ offset + 2 ] = this._z;\n\t\tarray[ offset + 3 ] = this._order;\n\n\t\treturn array;\n\n\t}\n\n\t_onChange( callback ) {\n\n\t\tthis._onChangeCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\t_onChangeCallback() {}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this._x;\n\t\tyield this._y;\n\t\tyield this._z;\n\t\tyield this._order;\n\n\t}\n\n}\n\nEuler.DEFAULT_ORDER = 'XYZ';\n\nclass Layers {\n\n\tconstructor() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tset( channel ) {\n\n\t\tthis.mask = ( 1 << channel | 0 ) >>> 0;\n\n\t}\n\n\tenable( channel ) {\n\n\t\tthis.mask |= 1 << channel | 0;\n\n\t}\n\n\tenableAll() {\n\n\t\tthis.mask = 0xffffffff | 0;\n\n\t}\n\n\ttoggle( channel ) {\n\n\t\tthis.mask ^= 1 << channel | 0;\n\n\t}\n\n\tdisable( channel ) {\n\n\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t}\n\n\tdisableAll() {\n\n\t\tthis.mask = 0;\n\n\t}\n\n\ttest( layers ) {\n\n\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t}\n\n\tisEnabled( channel ) {\n\n\t\treturn ( this.mask & ( 1 << channel | 0 ) ) !== 0;\n\n\t}\n\n}\n\nlet _object3DId = 0;\n\nconst _v1$4 = /*@__PURE__*/ new Vector3();\nconst _q1 = /*@__PURE__*/ new Quaternion();\nconst _m1$3 = /*@__PURE__*/ new Matrix4();\nconst _target = /*@__PURE__*/ new Vector3();\n\nconst _position$3 = /*@__PURE__*/ new Vector3();\nconst _scale$2 = /*@__PURE__*/ new Vector3();\nconst _quaternion$2 = /*@__PURE__*/ new Quaternion();\n\nconst _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );\nconst _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nconst _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );\n\nconst _addedEvent = { type: 'added' };\nconst _removedEvent = { type: 'removed' };\n\nconst _childaddedEvent = { type: 'childadded', child: null };\nconst _childremovedEvent = { type: 'childremoved', child: null };\n\nclass Object3D extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isObject3D = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _object3DId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DEFAULT_UP.clone();\n\n\t\tconst position = new Vector3();\n\t\tconst rotation = new Euler();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation._onChange( onRotationChange );\n\t\tquaternion._onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE;\n\n\t\tthis.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.animations = [];\n\n\t\tthis.userData = {};\n\n\t}\n\n\tonBeforeShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}\n\n\tonAfterShadow( /* renderer, object, camera, shadowCamera, geometry, depthMaterial, group */ ) {}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tonAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tthis.matrix.premultiply( matrix );\n\n\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\tthis.quaternion.premultiply( q );\n\n\t\treturn this;\n\n\t}\n\n\tsetRotationFromAxisAngle( axis, angle ) {\n\n\t\t// assumes axis is normalized\n\n\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t}\n\n\tsetRotationFromEuler( euler ) {\n\n\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t}\n\n\tsetRotationFromMatrix( m ) {\n\n\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t}\n\n\tsetRotationFromQuaternion( q ) {\n\n\t\t// assumes q is normalized\n\n\t\tthis.quaternion.copy( q );\n\n\t}\n\n\trotateOnAxis( axis, angle ) {\n\n\t\t// rotate object on axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.multiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateOnWorldAxis( axis, angle ) {\n\n\t\t// rotate object on axis in world space\n\t\t// axis is assumed to be normalized\n\t\t// method assumes no rotated parent\n\n\t\t_q1.setFromAxisAngle( axis, angle );\n\n\t\tthis.quaternion.premultiply( _q1 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\treturn this.rotateOnAxis( _xAxis, angle );\n\n\t}\n\n\trotateY( angle ) {\n\n\t\treturn this.rotateOnAxis( _yAxis, angle );\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\treturn this.rotateOnAxis( _zAxis, angle );\n\n\t}\n\n\ttranslateOnAxis( axis, distance ) {\n\n\t\t// translate object by distance along axis in object space\n\t\t// axis is assumed to be normalized\n\n\t\t_v1$4.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\tthis.position.add( _v1$4.multiplyScalar( distance ) );\n\n\t\treturn this;\n\n\t}\n\n\ttranslateX( distance ) {\n\n\t\treturn this.translateOnAxis( _xAxis, distance );\n\n\t}\n\n\ttranslateY( distance ) {\n\n\t\treturn this.translateOnAxis( _yAxis, distance );\n\n\t}\n\n\ttranslateZ( distance ) {\n\n\t\treturn this.translateOnAxis( _zAxis, distance );\n\n\t}\n\n\tlocalToWorld( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t}\n\n\tworldToLocal( vector ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn vector.applyMatrix4( _m1$3.copy( this.matrixWorld ).invert() );\n\n\t}\n\n\tlookAt( x, y, z ) {\n\n\t\t// This method does not support objects having non-uniformly-scaled parent(s)\n\n\t\tif ( x.isVector3 ) {\n\n\t\t\t_target.copy( x );\n\n\t\t} else {\n\n\t\t\t_target.set( x, y, z );\n\n\t\t}\n\n\t\tconst parent = this.parent;\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_position$3.setFromMatrixPosition( this.matrixWorld );\n\n\t\tif ( this.isCamera || this.isLight ) {\n\n\t\t\t_m1$3.lookAt( _position$3, _target, this.up );\n\n\t\t} else {\n\n\t\t\t_m1$3.lookAt( _target, _position$3, this.up );\n\n\t\t}\n\n\t\tthis.quaternion.setFromRotationMatrix( _m1$3 );\n\n\t\tif ( parent ) {\n\n\t\t\t_m1$3.extractRotation( parent.matrixWorld );\n\t\t\t_q1.setFromRotationMatrix( _m1$3 );\n\t\t\tthis.quaternion.premultiply( _q1.invert() );\n\n\t\t}\n\n\t}\n\n\tadd( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object === this ) {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object can\\'t be added as a child of itself.', object );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tif ( object && object.isObject3D ) {\n\n\t\t\tobject.removeFromParent();\n\t\t\tobject.parent = this;\n\t\t\tthis.children.push( object );\n\n\t\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t\t_childaddedEvent.child = object;\n\t\t\tthis.dispatchEvent( _childaddedEvent );\n\t\t\t_childaddedEvent.child = null;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( object ) {\n\n\t\tif ( arguments.length > 1 ) {\n\n\t\t\tfor ( let i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst index = this.children.indexOf( object );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\tobject.parent = null;\n\t\t\tthis.children.splice( index, 1 );\n\n\t\t\tobject.dispatchEvent( _removedEvent );\n\n\t\t\t_childremovedEvent.child = object;\n\t\t\tthis.dispatchEvent( _childremovedEvent );\n\t\t\t_childremovedEvent.child = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremoveFromParent() {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tparent.remove( this );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclear() {\n\n\t\treturn this.remove( ... this.children );\n\n\t}\n\n\tattach( object ) {\n\n\t\t// adds object as a child of this, while maintaining the object's world transform\n\n\t\t// Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\t_m1$3.copy( this.matrixWorld ).invert();\n\n\t\tif ( object.parent !== null ) {\n\n\t\t\tobject.parent.updateWorldMatrix( true, false );\n\n\t\t\t_m1$3.multiply( object.parent.matrixWorld );\n\n\t\t}\n\n\t\tobject.applyMatrix4( _m1$3 );\n\n\t\tobject.removeFromParent();\n\t\tobject.parent = this;\n\t\tthis.children.push( object );\n\n\t\tobject.updateWorldMatrix( false, true );\n\n\t\tobject.dispatchEvent( _addedEvent );\n\n\t\t_childaddedEvent.child = object;\n\t\tthis.dispatchEvent( _childaddedEvent );\n\t\t_childaddedEvent.child = null;\n\n\t\treturn this;\n\n\t}\n\n\tgetObjectById( id ) {\n\n\t\treturn this.getObjectByProperty( 'id', id );\n\n\t}\n\n\tgetObjectByName( name ) {\n\n\t\treturn this.getObjectByProperty( 'name', name );\n\n\t}\n\n\tgetObjectByProperty( name, value ) {\n\n\t\tif ( this[ name ] === value ) return this;\n\n\t\tfor ( let i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = this.children[ i ];\n\t\t\tconst object = child.getObjectByProperty( name, value );\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\treturn object;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tgetObjectsByProperty( name, value, result = [] ) {\n\n\t\tif ( this[ name ] === value ) result.push( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].getObjectsByProperty( name, value, result );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tgetWorldPosition( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t}\n\n\tgetWorldQuaternion( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, target, _scale$2 );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldScale( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tthis.matrixWorld.decompose( _position$3, _quaternion$2, target );\n\n\t\treturn target;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\tthis.updateWorldMatrix( true, false );\n\n\t\tconst e = this.matrixWorld.elements;\n\n\t\treturn target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();\n\n\t}\n\n\traycast( /* raycaster, intersects */ ) {}\n\n\ttraverse( callback ) {\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverse( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseVisible( callback ) {\n\n\t\tif ( this.visible === false ) return;\n\n\t\tcallback( this );\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t}\n\n\t}\n\n\ttraverseAncestors( callback ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( parent !== null ) {\n\n\t\t\tcallback( parent );\n\n\t\t\tparent.traverseAncestors( callback );\n\n\t\t}\n\n\t}\n\n\tupdateMatrix() {\n\n\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\tif ( this.matrixWorldAutoUpdate === true ) {\n\n\t\t\t\tif ( this.parent === null ) {\n\n\t\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\tforce = true;\n\n\t\t}\n\n\t\t// make sure descendants are updated if required\n\n\t\tconst children = this.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tconst child = children[ i ];\n\n\t\t\tchild.updateMatrixWorld( force );\n\n\t\t}\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tconst parent = this.parent;\n\n\t\tif ( updateParents === true && parent !== null ) {\n\n\t\t\tparent.updateWorldMatrix( true, false );\n\n\t\t}\n\n\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\tif ( this.matrixWorldAutoUpdate === true ) {\n\n\t\t\tif ( this.parent === null ) {\n\n\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// make sure descendants are updated\n\n\t\tif ( updateChildren === true ) {\n\n\t\t\tconst children = this.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = children[ i ];\n\n\t\t\t\tchild.updateWorldMatrix( false, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\t// meta is a string when called from JSON.stringify\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tconst output = {};\n\n\t\t// meta is a hash used to collect geometries, materials.\n\t\t// not providing it implies that this is the root object\n\t\t// being serialized.\n\t\tif ( isRootObject ) {\n\n\t\t\t// initialize meta obj\n\t\t\tmeta = {\n\t\t\t\tgeometries: {},\n\t\t\t\tmaterials: {},\n\t\t\t\ttextures: {},\n\t\t\t\timages: {},\n\t\t\t\tshapes: {},\n\t\t\t\tskeletons: {},\n\t\t\t\tanimations: {},\n\t\t\t\tnodes: {}\n\t\t\t};\n\n\t\t\toutput.metadata = {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Object',\n\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t};\n\n\t\t}\n\n\t\t// standard Object3D serialization\n\n\t\tconst object = {};\n\n\t\tobject.uuid = this.uuid;\n\t\tobject.type = this.type;\n\n\t\tif ( this.name !== '' ) object.name = this.name;\n\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\tif ( this.visible === false ) object.visible = false;\n\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\tif ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;\n\n\t\tobject.layers = this.layers.mask;\n\t\tobject.matrix = this.matrix.toArray();\n\t\tobject.up = this.up.toArray();\n\n\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t// object specific properties\n\n\t\tif ( this.isInstancedMesh ) {\n\n\t\t\tobject.type = 'InstancedMesh';\n\t\t\tobject.count = this.count;\n\t\t\tobject.instanceMatrix = this.instanceMatrix.toJSON();\n\t\t\tif ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();\n\n\t\t}\n\n\t\tif ( this.isBatchedMesh ) {\n\n\t\t\tobject.type = 'BatchedMesh';\n\t\t\tobject.perObjectFrustumCulled = this.perObjectFrustumCulled;\n\t\t\tobject.sortObjects = this.sortObjects;\n\n\t\t\tobject.drawRanges = this._drawRanges;\n\t\t\tobject.reservedRanges = this._reservedRanges;\n\n\t\t\tobject.visibility = this._visibility;\n\t\t\tobject.active = this._active;\n\t\t\tobject.bounds = this._bounds.map( bound => ( {\n\t\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\t\tboxMin: bound.box.min.toArray(),\n\t\t\t\tboxMax: bound.box.max.toArray(),\n\n\t\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\t\tsphereRadius: bound.sphere.radius,\n\t\t\t\tsphereCenter: bound.sphere.center.toArray()\n\t\t\t} ) );\n\n\t\t\tobject.maxInstanceCount = this._maxInstanceCount;\n\t\t\tobject.maxVertexCount = this._maxVertexCount;\n\t\t\tobject.maxIndexCount = this._maxIndexCount;\n\n\t\t\tobject.geometryInitialized = this._geometryInitialized;\n\t\t\tobject.geometryCount = this._geometryCount;\n\n\t\t\tobject.matricesTexture = this._matricesTexture.toJSON( meta );\n\n\t\t\tif ( this._colorsTexture !== null ) object.colorsTexture = this._colorsTexture.toJSON( meta );\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tobject.boundingSphere = {\n\t\t\t\t\tcenter: object.boundingSphere.center.toArray(),\n\t\t\t\t\tradius: object.boundingSphere.radius\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tobject.boundingBox = {\n\t\t\t\t\tmin: object.boundingBox.min.toArray(),\n\t\t\t\t\tmax: object.boundingBox.max.toArray()\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction serialize( library, element ) {\n\n\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t}\n\n\t\t\treturn element.uuid;\n\n\t\t}\n\n\t\tif ( this.isScene ) {\n\n\t\t\tif ( this.background ) {\n\n\t\t\t\tif ( this.background.isColor ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON();\n\n\t\t\t\t} else if ( this.background.isTexture ) {\n\n\t\t\t\t\tobject.background = this.background.toJSON( meta ).uuid;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) {\n\n\t\t\t\tobject.environment = this.environment.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t} else if ( this.isMesh || this.isLine || this.isPoints ) {\n\n\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\tconst parameters = this.geometry.parameters;\n\n\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\tconst shapes = parameters.shapes;\n\n\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst shape = shapes[ i ];\n\n\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.isSkinnedMesh ) {\n\n\t\t\tobject.bindMode = this.bindMode;\n\t\t\tobject.bindMatrix = this.bindMatrix.toArray();\n\n\t\t\tif ( this.skeleton !== undefined ) {\n\n\t\t\t\tserialize( meta.skeletons, this.skeleton );\n\n\t\t\t\tobject.skeleton = this.skeleton.uuid;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.material !== undefined ) {\n\n\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\tconst uuids = [];\n\n\t\t\t\tfor ( let i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tobject.material = uuids;\n\n\t\t\t} else {\n\n\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.children.length > 0 ) {\n\n\t\t\tobject.children = [];\n\n\t\t\tfor ( let i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.animations.length > 0 ) {\n\n\t\t\tobject.animations = [];\n\n\t\t\tfor ( let i = 0; i < this.animations.length; i ++ ) {\n\n\t\t\t\tconst animation = this.animations[ i ];\n\n\t\t\t\tobject.animations.push( serialize( meta.animations, animation ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst geometries = extractFromCache( meta.geometries );\n\t\t\tconst materials = extractFromCache( meta.materials );\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\t\t\tconst shapes = extractFromCache( meta.shapes );\n\t\t\tconst skeletons = extractFromCache( meta.skeletons );\n\t\t\tconst animations = extractFromCache( meta.animations );\n\t\t\tconst nodes = extractFromCache( meta.nodes );\n\n\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\t\t\tif ( skeletons.length > 0 ) output.skeletons = skeletons;\n\t\t\tif ( animations.length > 0 ) output.animations = animations;\n\t\t\tif ( nodes.length > 0 ) output.nodes = nodes;\n\n\t\t}\n\n\t\toutput.object = object;\n\n\t\treturn output;\n\n\t\t// extract data from the cache hash\n\t\t// remove metadata on each item\n\t\t// and return as array\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t}\n\n\tclone( recursive ) {\n\n\t\treturn new this.constructor().copy( this, recursive );\n\n\t}\n\n\tcopy( source, recursive = true ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.up.copy( source.up );\n\n\t\tthis.position.copy( source.position );\n\t\tthis.rotation.order = source.rotation.order;\n\t\tthis.quaternion.copy( source.quaternion );\n\t\tthis.scale.copy( source.scale );\n\n\t\tthis.matrix.copy( source.matrix );\n\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\tthis.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\tthis.layers.mask = source.layers.mask;\n\t\tthis.visible = source.visible;\n\n\t\tthis.castShadow = source.castShadow;\n\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\tthis.frustumCulled = source.frustumCulled;\n\t\tthis.renderOrder = source.renderOrder;\n\n\t\tthis.animations = source.animations.slice();\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tfor ( let i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\tconst child = source.children[ i ];\n\t\t\t\tthis.add( child.clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nObject3D.DEFAULT_UP = /*@__PURE__*/ new Vector3( 0, 1, 0 );\nObject3D.DEFAULT_MATRIX_AUTO_UPDATE = true;\nObject3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true;\n\nconst _v0$2 = /*@__PURE__*/ new Vector3();\nconst _v1$3 = /*@__PURE__*/ new Vector3();\nconst _v2$2 = /*@__PURE__*/ new Vector3();\nconst _v3$2 = /*@__PURE__*/ new Vector3();\n\nconst _vab = /*@__PURE__*/ new Vector3();\nconst _vac = /*@__PURE__*/ new Vector3();\nconst _vbc = /*@__PURE__*/ new Vector3();\nconst _vap = /*@__PURE__*/ new Vector3();\nconst _vbp = /*@__PURE__*/ new Vector3();\nconst _vcp = /*@__PURE__*/ new Vector3();\n\nclass Triangle {\n\n\tconstructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t}\n\n\tstatic getNormal( a, b, c, target ) {\n\n\t\ttarget.subVectors( c, b );\n\t\t_v0$2.subVectors( a, b );\n\t\ttarget.cross( _v0$2 );\n\n\t\tconst targetLengthSq = target.lengthSq();\n\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t}\n\n\t\treturn target.set( 0, 0, 0 );\n\n\t}\n\n\t// static/instance method to calculate barycentric coordinates\n\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\tstatic getBarycoord( point, a, b, c, target ) {\n\n\t\t_v0$2.subVectors( c, a );\n\t\t_v1$3.subVectors( b, a );\n\t\t_v2$2.subVectors( point, a );\n\n\t\tconst dot00 = _v0$2.dot( _v0$2 );\n\t\tconst dot01 = _v0$2.dot( _v1$3 );\n\t\tconst dot02 = _v0$2.dot( _v2$2 );\n\t\tconst dot11 = _v1$3.dot( _v1$3 );\n\t\tconst dot12 = _v1$3.dot( _v2$2 );\n\n\t\tconst denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t// collinear or singular triangle\n\t\tif ( denom === 0 ) {\n\n\t\t\ttarget.set( 0, 0, 0 );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst invDenom = 1 / denom;\n\t\tconst u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\tconst v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t// barycentric coordinates must always sum to 1\n\t\treturn target.set( 1 - u - v, v, u );\n\n\t}\n\n\tstatic containsPoint( point, a, b, c ) {\n\n\t\t// if the triangle is degenerate then we can't contain a point\n\t\tif ( this.getBarycoord( point, a, b, c, _v3$2 ) === null ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn ( _v3$2.x >= 0 ) && ( _v3$2.y >= 0 ) && ( ( _v3$2.x + _v3$2.y ) <= 1 );\n\n\t}\n\n\tstatic getInterpolation( point, p1, p2, p3, v1, v2, v3, target ) {\n\n\t\tif ( this.getBarycoord( point, p1, p2, p3, _v3$2 ) === null ) {\n\n\t\t\ttarget.x = 0;\n\t\t\ttarget.y = 0;\n\t\t\tif ( 'z' in target ) target.z = 0;\n\t\t\tif ( 'w' in target ) target.w = 0;\n\t\t\treturn null;\n\n\t\t}\n\n\t\ttarget.setScalar( 0 );\n\t\ttarget.addScaledVector( v1, _v3$2.x );\n\t\ttarget.addScaledVector( v2, _v3$2.y );\n\t\ttarget.addScaledVector( v3, _v3$2.z );\n\n\t\treturn target;\n\n\t}\n\n\tstatic isFrontFacing( a, b, c, direction ) {\n\n\t\t_v0$2.subVectors( c, b );\n\t\t_v1$3.subVectors( a, b );\n\n\t\t// strictly front facing\n\t\treturn ( _v0$2.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;\n\n\t}\n\n\tset( a, b, c ) {\n\n\t\tthis.a.copy( a );\n\t\tthis.b.copy( b );\n\t\tthis.c.copy( c );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPointsAndIndices( points, i0, i1, i2 ) {\n\n\t\tthis.a.copy( points[ i0 ] );\n\t\tthis.b.copy( points[ i1 ] );\n\t\tthis.c.copy( points[ i2 ] );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromAttributeAndIndices( attribute, i0, i1, i2 ) {\n\n\t\tthis.a.fromBufferAttribute( attribute, i0 );\n\t\tthis.b.fromBufferAttribute( attribute, i1 );\n\t\tthis.c.fromBufferAttribute( attribute, i2 );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( triangle ) {\n\n\t\tthis.a.copy( triangle.a );\n\t\tthis.b.copy( triangle.b );\n\t\tthis.c.copy( triangle.c );\n\n\t\treturn this;\n\n\t}\n\n\tgetArea() {\n\n\t\t_v0$2.subVectors( this.c, this.b );\n\t\t_v1$3.subVectors( this.a, this.b );\n\n\t\treturn _v0$2.cross( _v1$3 ).length() * 0.5;\n\n\t}\n\n\tgetMidpoint( target ) {\n\n\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t}\n\n\tgetNormal( target ) {\n\n\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t}\n\n\tgetPlane( target ) {\n\n\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t}\n\n\tgetBarycoord( point, target ) {\n\n\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t}\n\n\tgetInterpolation( point, v1, v2, v3, target ) {\n\n\t\treturn Triangle.getInterpolation( point, this.a, this.b, this.c, v1, v2, v3, target );\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t}\n\n\tisFrontFacing( direction ) {\n\n\t\treturn Triangle.isFrontFacing( this.a, this.b, this.c, direction );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsTriangle( this );\n\n\t}\n\n\tclosestPointToPoint( p, target ) {\n\n\t\tconst a = this.a, b = this.b, c = this.c;\n\t\tlet v, w;\n\n\t\t// algorithm thanks to Real-Time Collision Detection by Christer Ericson,\n\t\t// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,\n\t\t// under the accompanying license; see chapter 5.1.5 for detailed explanation.\n\t\t// basically, we're distinguishing which of the voronoi regions of the triangle\n\t\t// the point lies in with the minimum amount of redundant computation.\n\n\t\t_vab.subVectors( b, a );\n\t\t_vac.subVectors( c, a );\n\t\t_vap.subVectors( p, a );\n\t\tconst d1 = _vab.dot( _vap );\n\t\tconst d2 = _vac.dot( _vap );\n\t\tif ( d1 <= 0 && d2 <= 0 ) {\n\n\t\t\t// vertex region of A; barycentric coords (1, 0, 0)\n\t\t\treturn target.copy( a );\n\n\t\t}\n\n\t\t_vbp.subVectors( p, b );\n\t\tconst d3 = _vab.dot( _vbp );\n\t\tconst d4 = _vac.dot( _vbp );\n\t\tif ( d3 >= 0 && d4 <= d3 ) {\n\n\t\t\t// vertex region of B; barycentric coords (0, 1, 0)\n\t\t\treturn target.copy( b );\n\n\t\t}\n\n\t\tconst vc = d1 * d4 - d3 * d2;\n\t\tif ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {\n\n\t\t\tv = d1 / ( d1 - d3 );\n\t\t\t// edge region of AB; barycentric coords (1-v, v, 0)\n\t\t\treturn target.copy( a ).addScaledVector( _vab, v );\n\n\t\t}\n\n\t\t_vcp.subVectors( p, c );\n\t\tconst d5 = _vab.dot( _vcp );\n\t\tconst d6 = _vac.dot( _vcp );\n\t\tif ( d6 >= 0 && d5 <= d6 ) {\n\n\t\t\t// vertex region of C; barycentric coords (0, 0, 1)\n\t\t\treturn target.copy( c );\n\n\t\t}\n\n\t\tconst vb = d5 * d2 - d1 * d6;\n\t\tif ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {\n\n\t\t\tw = d2 / ( d2 - d6 );\n\t\t\t// edge region of AC; barycentric coords (1-w, 0, w)\n\t\t\treturn target.copy( a ).addScaledVector( _vac, w );\n\n\t\t}\n\n\t\tconst va = d3 * d6 - d5 * d4;\n\t\tif ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {\n\n\t\t\t_vbc.subVectors( c, b );\n\t\t\tw = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );\n\t\t\t// edge region of BC; barycentric coords (0, 1-w, w)\n\t\t\treturn target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC\n\n\t\t}\n\n\t\t// face region\n\t\tconst denom = 1 / ( va + vb + vc );\n\t\t// u = va * denom\n\t\tv = vb * denom;\n\t\tw = vc * denom;\n\n\t\treturn target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );\n\n\t}\n\n\tequals( triangle ) {\n\n\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t}\n\n}\n\nconst _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\nconst _hslA = { h: 0, s: 0, l: 0 };\nconst _hslB = { h: 0, s: 0, l: 0 };\n\nfunction hue2rgb( p, q, t ) {\n\n\tif ( t < 0 ) t += 1;\n\tif ( t > 1 ) t -= 1;\n\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\tif ( t < 1 / 2 ) return q;\n\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\treturn p;\n\n}\n\nclass Color {\n\n\tconstructor( r, g, b ) {\n\n\t\tthis.isColor = true;\n\n\t\tthis.r = 1;\n\t\tthis.g = 1;\n\t\tthis.b = 1;\n\n\t\treturn this.set( r, g, b );\n\n\t}\n\n\tset( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\n\t\t\tconst value = r;\n\n\t\t\tif ( value && value.isColor ) {\n\n\t\t\t\tthis.copy( value );\n\n\t\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\t\tthis.setHex( value );\n\n\t\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\t\tthis.setStyle( value );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.setRGB( r, g, b );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetScalar( scalar ) {\n\n\t\tthis.r = scalar;\n\t\tthis.g = scalar;\n\t\tthis.b = scalar;\n\n\t\treturn this;\n\n\t}\n\n\tsetHex( hex, colorSpace = SRGBColorSpace ) {\n\n\t\thex = Math.floor( hex );\n\n\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\th = euclideanModulo( h, 1 );\n\t\ts = clamp( s, 0, 1 );\n\t\tl = clamp( l, 0, 1 );\n\n\t\tif ( s === 0 ) {\n\n\t\t\tthis.r = this.g = this.b = l;\n\n\t\t} else {\n\n\t\t\tconst p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\tconst q = ( 2 * l ) - p;\n\n\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t}\n\n\t\tColorManagement.toWorkingColorSpace( this, colorSpace );\n\n\t\treturn this;\n\n\t}\n\n\tsetStyle( style, colorSpace = SRGBColorSpace ) {\n\n\t\tfunction handleAlpha( string ) {\n\n\t\t\tif ( string === undefined ) return;\n\n\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t}\n\n\t\t}\n\n\n\t\tlet m;\n\n\t\tif ( m = /^(\\w+)\\(([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t// rgb / hsl\n\n\t\t\tlet color;\n\t\t\tconst name = m[ 1 ];\n\t\t\tconst components = m[ 2 ];\n\n\t\t\tswitch ( name ) {\n\n\t\t\t\tcase 'rgb':\n\t\t\t\tcase 'rgba':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 1 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 2 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tMath.min( 255, parseInt( color[ 3 ], 10 ) ) / 255,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( color = /^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setRGB(\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 1 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 2 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tMath.min( 100, parseInt( color[ 3 ], 10 ) ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'hsl':\n\t\t\t\tcase 'hsla':\n\n\t\t\t\t\tif ( color = /^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*,\\s*(\\d*\\.?\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\n\t\t\t\t\t\thandleAlpha( color[ 4 ] );\n\n\t\t\t\t\t\treturn this.setHSL(\n\t\t\t\t\t\t\tparseFloat( color[ 1 ] ) / 360,\n\t\t\t\t\t\t\tparseFloat( color[ 2 ] ) / 100,\n\t\t\t\t\t\t\tparseFloat( color[ 3 ] ) / 100,\n\t\t\t\t\t\t\tcolorSpace\n\t\t\t\t\t\t);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tconsole.warn( 'THREE.Color: Unknown color model ' + style );\n\n\t\t\t}\n\n\t\t} else if ( m = /^\\#([A-Fa-f\\d]+)$/.exec( style ) ) {\n\n\t\t\t// hex color\n\n\t\t\tconst hex = m[ 1 ];\n\t\t\tconst size = hex.length;\n\n\t\t\tif ( size === 3 ) {\n\n\t\t\t\t// #ff0\n\t\t\t\treturn this.setRGB(\n\t\t\t\t\tparseInt( hex.charAt( 0 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 1 ), 16 ) / 15,\n\t\t\t\t\tparseInt( hex.charAt( 2 ), 16 ) / 15,\n\t\t\t\t\tcolorSpace\n\t\t\t\t);\n\n\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t// #ff0000\n\t\t\t\treturn this.setHex( parseInt( hex, 16 ), colorSpace );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Color: Invalid hex color ' + style );\n\n\t\t\t}\n\n\t\t} else if ( style && style.length > 0 ) {\n\n\t\t\treturn this.setColorName( style, colorSpace );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetColorName( style, colorSpace = SRGBColorSpace ) {\n\n\t\t// color keywords\n\t\tconst hex = _colorKeywords[ style.toLowerCase() ];\n\n\t\tif ( hex !== undefined ) {\n\n\t\t\t// red\n\t\t\tthis.setHex( hex, colorSpace );\n\n\t\t} else {\n\n\t\t\t// unknown color\n\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t}\n\n\tcopy( color ) {\n\n\t\tthis.r = color.r;\n\t\tthis.g = color.g;\n\t\tthis.b = color.b;\n\n\t\treturn this;\n\n\t}\n\n\tcopySRGBToLinear( color ) {\n\n\t\tthis.r = SRGBToLinear( color.r );\n\t\tthis.g = SRGBToLinear( color.g );\n\t\tthis.b = SRGBToLinear( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tcopyLinearToSRGB( color ) {\n\n\t\tthis.r = LinearToSRGB( color.r );\n\t\tthis.g = LinearToSRGB( color.g );\n\t\tthis.b = LinearToSRGB( color.b );\n\n\t\treturn this;\n\n\t}\n\n\tconvertSRGBToLinear() {\n\n\t\tthis.copySRGBToLinear( this );\n\n\t\treturn this;\n\n\t}\n\n\tconvertLinearToSRGB() {\n\n\t\tthis.copyLinearToSRGB( this );\n\n\t\treturn this;\n\n\t}\n\n\tgetHex( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\treturn Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );\n\n\t}\n\n\tgetHexString( colorSpace = SRGBColorSpace ) {\n\n\t\treturn ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );\n\n\t}\n\n\tgetHSL( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tconst max = Math.max( r, g, b );\n\t\tconst min = Math.min( r, g, b );\n\n\t\tlet hue, saturation;\n\t\tconst lightness = ( min + max ) / 2.0;\n\n\t\tif ( min === max ) {\n\n\t\t\thue = 0;\n\t\t\tsaturation = 0;\n\n\t\t} else {\n\n\t\t\tconst delta = max - min;\n\n\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\tswitch ( max ) {\n\n\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t}\n\n\t\t\thue /= 6;\n\n\t\t}\n\n\t\ttarget.h = hue;\n\t\ttarget.s = saturation;\n\t\ttarget.l = lightness;\n\n\t\treturn target;\n\n\t}\n\n\tgetRGB( target, colorSpace = ColorManagement.workingColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\ttarget.r = _color.r;\n\t\ttarget.g = _color.g;\n\t\ttarget.b = _color.b;\n\n\t\treturn target;\n\n\t}\n\n\tgetStyle( colorSpace = SRGBColorSpace ) {\n\n\t\tColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );\n\n\t\tconst r = _color.r, g = _color.g, b = _color.b;\n\n\t\tif ( colorSpace !== SRGBColorSpace ) {\n\n\t\t\t// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).\n\t\t\treturn `color(${ colorSpace } ${ r.toFixed( 3 ) } ${ g.toFixed( 3 ) } ${ b.toFixed( 3 ) })`;\n\n\t\t}\n\n\t\treturn `rgb(${ Math.round( r * 255 ) },${ Math.round( g * 255 ) },${ Math.round( b * 255 ) })`;\n\n\t}\n\n\toffsetHSL( h, s, l ) {\n\n\t\tthis.getHSL( _hslA );\n\n\t\treturn this.setHSL( _hslA.h + h, _hslA.s + s, _hslA.l + l );\n\n\t}\n\n\tadd( color ) {\n\n\t\tthis.r += color.r;\n\t\tthis.g += color.g;\n\t\tthis.b += color.b;\n\n\t\treturn this;\n\n\t}\n\n\taddColors( color1, color2 ) {\n\n\t\tthis.r = color1.r + color2.r;\n\t\tthis.g = color1.g + color2.g;\n\t\tthis.b = color1.b + color2.b;\n\n\t\treturn this;\n\n\t}\n\n\taddScalar( s ) {\n\n\t\tthis.r += s;\n\t\tthis.g += s;\n\t\tthis.b += s;\n\n\t\treturn this;\n\n\t}\n\n\tsub( color ) {\n\n\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\treturn this;\n\n\t}\n\n\tmultiply( color ) {\n\n\t\tthis.r *= color.r;\n\t\tthis.g *= color.g;\n\t\tthis.b *= color.b;\n\n\t\treturn this;\n\n\t}\n\n\tmultiplyScalar( s ) {\n\n\t\tthis.r *= s;\n\t\tthis.g *= s;\n\t\tthis.b *= s;\n\n\t\treturn this;\n\n\t}\n\n\tlerp( color, alpha ) {\n\n\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpColors( color1, color2, alpha ) {\n\n\t\tthis.r = color1.r + ( color2.r - color1.r ) * alpha;\n\t\tthis.g = color1.g + ( color2.g - color1.g ) * alpha;\n\t\tthis.b = color1.b + ( color2.b - color1.b ) * alpha;\n\n\t\treturn this;\n\n\t}\n\n\tlerpHSL( color, alpha ) {\n\n\t\tthis.getHSL( _hslA );\n\t\tcolor.getHSL( _hslB );\n\n\t\tconst h = lerp( _hslA.h, _hslB.h, alpha );\n\t\tconst s = lerp( _hslA.s, _hslB.s, alpha );\n\t\tconst l = lerp( _hslA.l, _hslB.l, alpha );\n\n\t\tthis.setHSL( h, s, l );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\tthis.r = v.x;\n\t\tthis.g = v.y;\n\t\tthis.b = v.z;\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tconst r = this.r, g = this.g, b = this.b;\n\t\tconst e = m.elements;\n\n\t\tthis.r = e[ 0 ] * r + e[ 3 ] * g + e[ 6 ] * b;\n\t\tthis.g = e[ 1 ] * r + e[ 4 ] * g + e[ 7 ] * b;\n\t\tthis.b = e[ 2 ] * r + e[ 5 ] * g + e[ 8 ] * b;\n\n\t\treturn this;\n\n\t}\n\n\tequals( c ) {\n\n\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tthis.r = array[ offset ];\n\t\tthis.g = array[ offset + 1 ];\n\t\tthis.b = array[ offset + 2 ];\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tarray[ offset ] = this.r;\n\t\tarray[ offset + 1 ] = this.g;\n\t\tarray[ offset + 2 ] = this.b;\n\n\t\treturn array;\n\n\t}\n\n\tfromBufferAttribute( attribute, index ) {\n\n\t\tthis.r = attribute.getX( index );\n\t\tthis.g = attribute.getY( index );\n\t\tthis.b = attribute.getZ( index );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.getHex();\n\n\t}\n\n\t*[ Symbol.iterator ]() {\n\n\t\tyield this.r;\n\t\tyield this.g;\n\t\tyield this.b;\n\n\t}\n\n}\n\nconst _color = /*@__PURE__*/ new Color();\n\nColor.NAMES = _colorKeywords;\n\nlet _materialId = 0;\n\nclass Material extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isMaterial = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _materialId ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.vertexColors = false;\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\t\tthis.alphaHash = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\t\tthis.blendColor = new Color( 0, 0, 0 );\n\t\tthis.blendAlpha = 0;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.stencilWriteMask = 0xff;\n\t\tthis.stencilFunc = AlwaysStencilFunc;\n\t\tthis.stencilRef = 0;\n\t\tthis.stencilFuncMask = 0xff;\n\t\tthis.stencilFail = KeepStencilOp;\n\t\tthis.stencilZFail = KeepStencilOp;\n\t\tthis.stencilZPass = KeepStencilOp;\n\t\tthis.stencilWrite = false;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaToCoverage = false;\n\t\tthis.premultipliedAlpha = false;\n\t\tthis.forceSinglePass = false;\n\n\t\tthis.visible = true;\n\n\t\tthis.toneMapped = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.version = 0;\n\n\t\tthis._alphaTest = 0;\n\n\t}\n\n\tget alphaTest() {\n\n\t\treturn this._alphaTest;\n\n\t}\n\n\tset alphaTest( value ) {\n\n\t\tif ( this._alphaTest > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._alphaTest = value;\n\n\t}\n\n\tonBeforeCompile( /* shaderobject, renderer */ ) {}\n\n\tcustomProgramCacheKey() {\n\n\t\treturn this.onBeforeCompile.toString();\n\n\t}\n\n\tsetValues( values ) {\n\n\t\tif ( values === undefined ) return;\n\n\t\tfor ( const key in values ) {\n\n\t\t\tconst newValue = values[ key ];\n\n\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\tconsole.warn( `THREE.Material: parameter '${ key }' has value of undefined.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValue = this[ key ];\n\n\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\tconsole.warn( `THREE.Material: '${ key }' is not a property of THREE.${ this.type }.` );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t} else {\n\n\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\tif ( isRootObject ) {\n\n\t\t\tmeta = {\n\t\t\t\ttextures: {},\n\t\t\t\timages: {}\n\t\t\t};\n\n\t\t}\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Material',\n\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard Material serialization\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\tif ( this.sheen !== undefined ) data.sheen = this.sheen;\n\t\tif ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();\n\t\tif ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;\n\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\tif ( this.emissiveIntensity !== undefined && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\tif ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;\n\t\tif ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();\n\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\tif ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;\n\t\tif ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;\n\n\t\tif ( this.clearcoatMap && this.clearcoatMap.isTexture ) {\n\n\t\t\tdata.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {\n\n\t\t\tdata.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {\n\n\t\t\tdata.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;\n\t\t\tdata.clearcoatNormalScale = this.clearcoatNormalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.dispersion !== undefined ) data.dispersion = this.dispersion;\n\n\t\tif ( this.iridescence !== undefined ) data.iridescence = this.iridescence;\n\t\tif ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;\n\t\tif ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;\n\n\t\tif ( this.iridescenceMap && this.iridescenceMap.isTexture ) {\n\n\t\t\tdata.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {\n\n\t\t\tdata.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.anisotropy !== undefined ) data.anisotropy = this.anisotropy;\n\t\tif ( this.anisotropyRotation !== undefined ) data.anisotropyRotation = this.anisotropyRotation;\n\n\t\tif ( this.anisotropyMap && this.anisotropyMap.isTexture ) {\n\n\t\t\tdata.anisotropyMap = this.anisotropyMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\tif ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;\n\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\n\t\tif ( this.lightMap && this.lightMap.isTexture ) {\n\n\t\t\tdata.lightMap = this.lightMap.toJSON( meta ).uuid;\n\t\t\tdata.lightMapIntensity = this.lightMapIntensity;\n\n\t\t}\n\n\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t}\n\n\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t}\n\n\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\tdata.normalMapType = this.normalMapType;\n\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t}\n\n\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t}\n\n\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\t\tif ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;\n\t\tif ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;\n\n\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.combine !== undefined ) data.combine = this.combine;\n\n\t\t}\n\n\t\tif ( this.envMapRotation !== undefined ) data.envMapRotation = this.envMapRotation.toArray();\n\t\tif ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;\n\t\tif ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;\n\t\tif ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;\n\n\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t}\n\n\t\tif ( this.transmission !== undefined ) data.transmission = this.transmission;\n\t\tif ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;\n\t\tif ( this.thickness !== undefined ) data.thickness = this.thickness;\n\t\tif ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;\n\t\tif ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;\n\t\tif ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();\n\n\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\tif ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;\n\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\tif ( this.vertexColors === true ) data.vertexColors = true;\n\n\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\tif ( this.transparent === true ) data.transparent = true;\n\n\t\tif ( this.blendSrc !== SrcAlphaFactor ) data.blendSrc = this.blendSrc;\n\t\tif ( this.blendDst !== OneMinusSrcAlphaFactor ) data.blendDst = this.blendDst;\n\t\tif ( this.blendEquation !== AddEquation ) data.blendEquation = this.blendEquation;\n\t\tif ( this.blendSrcAlpha !== null ) data.blendSrcAlpha = this.blendSrcAlpha;\n\t\tif ( this.blendDstAlpha !== null ) data.blendDstAlpha = this.blendDstAlpha;\n\t\tif ( this.blendEquationAlpha !== null ) data.blendEquationAlpha = this.blendEquationAlpha;\n\t\tif ( this.blendColor && this.blendColor.isColor ) data.blendColor = this.blendColor.getHex();\n\t\tif ( this.blendAlpha !== 0 ) data.blendAlpha = this.blendAlpha;\n\n\t\tif ( this.depthFunc !== LessEqualDepth ) data.depthFunc = this.depthFunc;\n\t\tif ( this.depthTest === false ) data.depthTest = this.depthTest;\n\t\tif ( this.depthWrite === false ) data.depthWrite = this.depthWrite;\n\t\tif ( this.colorWrite === false ) data.colorWrite = this.colorWrite;\n\n\t\tif ( this.stencilWriteMask !== 0xff ) data.stencilWriteMask = this.stencilWriteMask;\n\t\tif ( this.stencilFunc !== AlwaysStencilFunc ) data.stencilFunc = this.stencilFunc;\n\t\tif ( this.stencilRef !== 0 ) data.stencilRef = this.stencilRef;\n\t\tif ( this.stencilFuncMask !== 0xff ) data.stencilFuncMask = this.stencilFuncMask;\n\t\tif ( this.stencilFail !== KeepStencilOp ) data.stencilFail = this.stencilFail;\n\t\tif ( this.stencilZFail !== KeepStencilOp ) data.stencilZFail = this.stencilZFail;\n\t\tif ( this.stencilZPass !== KeepStencilOp ) data.stencilZPass = this.stencilZPass;\n\t\tif ( this.stencilWrite === true ) data.stencilWrite = this.stencilWrite;\n\n\t\t// rotation (SpriteMaterial)\n\t\tif ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\tif ( this.polygonOffset === true ) data.polygonOffset = true;\n\t\tif ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;\n\t\tif ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;\n\n\t\tif ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\tif ( this.alphaHash === true ) data.alphaHash = true;\n\t\tif ( this.alphaToCoverage === true ) data.alphaToCoverage = true;\n\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = true;\n\t\tif ( this.forceSinglePass === true ) data.forceSinglePass = true;\n\n\t\tif ( this.wireframe === true ) data.wireframe = true;\n\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\tif ( this.flatShading === true ) data.flatShading = true;\n\n\t\tif ( this.visible === false ) data.visible = false;\n\n\t\tif ( this.toneMapped === false ) data.toneMapped = false;\n\n\t\tif ( this.fog === false ) data.fog = false;\n\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\t// TODO: Copied from Object3D.toJSON\n\n\t\tfunction extractFromCache( cache ) {\n\n\t\t\tconst values = [];\n\n\t\t\tfor ( const key in cache ) {\n\n\t\t\t\tconst data = cache[ key ];\n\t\t\t\tdelete data.metadata;\n\t\t\t\tvalues.push( data );\n\n\t\t\t}\n\n\t\t\treturn values;\n\n\t\t}\n\n\t\tif ( isRootObject ) {\n\n\t\t\tconst textures = extractFromCache( meta.textures );\n\t\t\tconst images = extractFromCache( meta.images );\n\n\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\n\t\tthis.blending = source.blending;\n\t\tthis.side = source.side;\n\t\tthis.vertexColors = source.vertexColors;\n\n\t\tthis.opacity = source.opacity;\n\t\tthis.transparent = source.transparent;\n\n\t\tthis.blendSrc = source.blendSrc;\n\t\tthis.blendDst = source.blendDst;\n\t\tthis.blendEquation = source.blendEquation;\n\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\t\tthis.blendColor.copy( source.blendColor );\n\t\tthis.blendAlpha = source.blendAlpha;\n\n\t\tthis.depthFunc = source.depthFunc;\n\t\tthis.depthTest = source.depthTest;\n\t\tthis.depthWrite = source.depthWrite;\n\n\t\tthis.stencilWriteMask = source.stencilWriteMask;\n\t\tthis.stencilFunc = source.stencilFunc;\n\t\tthis.stencilRef = source.stencilRef;\n\t\tthis.stencilFuncMask = source.stencilFuncMask;\n\t\tthis.stencilFail = source.stencilFail;\n\t\tthis.stencilZFail = source.stencilZFail;\n\t\tthis.stencilZPass = source.stencilZPass;\n\t\tthis.stencilWrite = source.stencilWrite;\n\n\t\tconst srcPlanes = source.clippingPlanes;\n\t\tlet dstPlanes = null;\n\n\t\tif ( srcPlanes !== null ) {\n\n\t\t\tconst n = srcPlanes.length;\n\t\t\tdstPlanes = new Array( n );\n\n\t\t\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.clippingPlanes = dstPlanes;\n\t\tthis.clipIntersection = source.clipIntersection;\n\t\tthis.clipShadows = source.clipShadows;\n\n\t\tthis.shadowSide = source.shadowSide;\n\n\t\tthis.colorWrite = source.colorWrite;\n\n\t\tthis.precision = source.precision;\n\n\t\tthis.polygonOffset = source.polygonOffset;\n\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\tthis.dithering = source.dithering;\n\n\t\tthis.alphaTest = source.alphaTest;\n\t\tthis.alphaHash = source.alphaHash;\n\t\tthis.alphaToCoverage = source.alphaToCoverage;\n\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\t\tthis.forceSinglePass = source.forceSinglePass;\n\n\t\tthis.visible = source.visible;\n\n\t\tthis.toneMapped = source.toneMapped;\n\n\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tonBuild( /* shaderobject, renderer */ ) {\n\n\t\tconsole.warn( 'Material: onBuild() has been removed.' ); // @deprecated, r166\n\n\t}\n\n\tonBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {\n\n\t\tconsole.warn( 'Material: onBeforeRender() has been removed.' ); // @deprecated, r166\n\n\t}\n\n\n}\n\nclass MeshBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshBasicMaterial = true;\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n\nconst _tables = /*@__PURE__*/ _generateTables();\n\nfunction _generateTables() {\n\n\t// float32 to float16 helpers\n\n\tconst buffer = new ArrayBuffer( 4 );\n\tconst floatView = new Float32Array( buffer );\n\tconst uint32View = new Uint32Array( buffer );\n\n\tconst baseTable = new Uint32Array( 512 );\n\tconst shiftTable = new Uint32Array( 512 );\n\n\tfor ( let i = 0; i < 256; ++ i ) {\n\n\t\tconst e = i - 127;\n\n\t\t// very small number (0, -0)\n\n\t\tif ( e < - 27 ) {\n\n\t\t\tbaseTable[ i ] = 0x0000;\n\t\t\tbaseTable[ i | 0x100 ] = 0x8000;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// small number (denorm)\n\n\t\t} else if ( e < - 14 ) {\n\n\t\t\tbaseTable[ i ] = 0x0400 >> ( - e - 14 );\n\t\t\tbaseTable[ i | 0x100 ] = ( 0x0400 >> ( - e - 14 ) ) | 0x8000;\n\t\t\tshiftTable[ i ] = - e - 1;\n\t\t\tshiftTable[ i | 0x100 ] = - e - 1;\n\n\t\t\t// normal number\n\n\t\t} else if ( e <= 15 ) {\n\n\t\t\tbaseTable[ i ] = ( e + 15 ) << 10;\n\t\t\tbaseTable[ i | 0x100 ] = ( ( e + 15 ) << 10 ) | 0x8000;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t\t// large number (Infinity, -Infinity)\n\n\t\t} else if ( e < 128 ) {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 24;\n\t\t\tshiftTable[ i | 0x100 ] = 24;\n\n\t\t\t// stay (NaN, Infinity, -Infinity)\n\n\t\t} else {\n\n\t\t\tbaseTable[ i ] = 0x7c00;\n\t\t\tbaseTable[ i | 0x100 ] = 0xfc00;\n\t\t\tshiftTable[ i ] = 13;\n\t\t\tshiftTable[ i | 0x100 ] = 13;\n\n\t\t}\n\n\t}\n\n\t// float16 to float32 helpers\n\n\tconst mantissaTable = new Uint32Array( 2048 );\n\tconst exponentTable = new Uint32Array( 64 );\n\tconst offsetTable = new Uint32Array( 64 );\n\n\tfor ( let i = 1; i < 1024; ++ i ) {\n\n\t\tlet m = i << 13; // zero pad mantissa bits\n\t\tlet e = 0; // zero exponent\n\n\t\t// normalized\n\t\twhile ( ( m & 0x00800000 ) === 0 ) {\n\n\t\t\tm <<= 1;\n\t\t\te -= 0x00800000; // decrement exponent\n\n\t\t}\n\n\t\tm &= ~ 0x00800000; // clear leading 1 bit\n\t\te += 0x38800000; // adjust bias\n\n\t\tmantissaTable[ i ] = m | e;\n\n\t}\n\n\tfor ( let i = 1024; i < 2048; ++ i ) {\n\n\t\tmantissaTable[ i ] = 0x38000000 + ( ( i - 1024 ) << 13 );\n\n\t}\n\n\tfor ( let i = 1; i < 31; ++ i ) {\n\n\t\texponentTable[ i ] = i << 23;\n\n\t}\n\n\texponentTable[ 31 ] = 0x47800000;\n\texponentTable[ 32 ] = 0x80000000;\n\n\tfor ( let i = 33; i < 63; ++ i ) {\n\n\t\texponentTable[ i ] = 0x80000000 + ( ( i - 32 ) << 23 );\n\n\t}\n\n\texponentTable[ 63 ] = 0xc7800000;\n\n\tfor ( let i = 1; i < 64; ++ i ) {\n\n\t\tif ( i !== 32 ) {\n\n\t\t\toffsetTable[ i ] = 1024;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tfloatView: floatView,\n\t\tuint32View: uint32View,\n\t\tbaseTable: baseTable,\n\t\tshiftTable: shiftTable,\n\t\tmantissaTable: mantissaTable,\n\t\texponentTable: exponentTable,\n\t\toffsetTable: offsetTable\n\t};\n\n}\n\n// float32 to float16\n\nfunction toHalfFloat( val ) {\n\n\tif ( Math.abs( val ) > 65504 ) console.warn( 'THREE.DataUtils.toHalfFloat(): Value out of range.' );\n\n\tval = clamp( val, - 65504, 65504 );\n\n\t_tables.floatView[ 0 ] = val;\n\tconst f = _tables.uint32View[ 0 ];\n\tconst e = ( f >> 23 ) & 0x1ff;\n\treturn _tables.baseTable[ e ] + ( ( f & 0x007fffff ) >> _tables.shiftTable[ e ] );\n\n}\n\n// float16 to float32\n\nfunction fromHalfFloat( val ) {\n\n\tconst m = val >> 10;\n\t_tables.uint32View[ 0 ] = _tables.mantissaTable[ _tables.offsetTable[ m ] + ( val & 0x3ff ) ] + _tables.exponentTable[ m ];\n\treturn _tables.floatView[ 0 ];\n\n}\n\nconst DataUtils = {\n\ttoHalfFloat: toHalfFloat,\n\tfromHalfFloat: fromHalfFloat,\n};\n\nconst _vector$9 = /*@__PURE__*/ new Vector3();\nconst _vector2$1 = /*@__PURE__*/ new Vector2();\n\nclass BufferAttribute {\n\n\tconstructor( array, itemSize, normalized = false ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.isBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis._updateRange = { offset: 0, count: - 1 };\n\t\tthis.updateRanges = [];\n\t\tthis.gpuType = FloatType;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tget updateRange() {\n\n\t\twarnOnce( 'THREE.BufferAttribute: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.' ); // @deprecated, r159\n\t\treturn this._updateRange;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.itemSize = source.itemSize;\n\t\tthis.count = source.count;\n\t\tthis.normalized = source.normalized;\n\n\t\tthis.usage = source.usage;\n\t\tthis.gpuType = source.gpuType;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.itemSize;\n\t\tindex2 *= attribute.itemSize;\n\n\t\tfor ( let i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcopyArray( array ) {\n\n\t\tthis.array.set( array );\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix3( m ) {\n\n\t\tif ( this.itemSize === 2 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector2$1.fromBufferAttribute( this, i );\n\t\t\t\t_vector2$1.applyMatrix3( m );\n\n\t\t\t\tthis.setXY( i, _vector2$1.x, _vector2$1.y );\n\n\t\t\t}\n\n\t\t} else if ( this.itemSize === 3 ) {\n\n\t\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t\t_vector$9.fromBufferAttribute( this, i );\n\t\t\t\t_vector$9.applyMatrix3( m );\n\n\t\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$9.fromBufferAttribute( this, i );\n\n\t\t\t_vector$9.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$9.x, _vector$9.y, _vector$9.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\t// Matching BufferAttribute constructor, do not normalize the array.\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.itemSize + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.array[ index * this.itemSize + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.array[ index * this.itemSize ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.array[ index * this.itemSize + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.array[ index * this.itemSize + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.array[ index * this.itemSize + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = x;\n\t\tthis.array[ index + 1 ] = y;\n\t\tthis.array[ index + 2 ] = z;\n\t\tthis.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\titemSize: this.itemSize,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tarray: Array.from( this.array ),\n\t\t\tnormalized: this.normalized\n\t\t};\n\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( this.usage !== StaticDrawUsage ) data.usage = this.usage;\n\n\t\treturn data;\n\n\t}\n\n}\n\n//\n\nclass Int8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint8ClampedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Int32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Uint32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nclass Float16BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Uint16Array( array ), itemSize, normalized );\n\n\t\tthis.isFloat16BufferAttribute = true;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = fromHalfFloat( this.array[ index * this.itemSize ] );\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.array[ index * this.itemSize ] = toHalfFloat( x );\n\n\t\treturn this;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = fromHalfFloat( this.array[ index * this.itemSize + 1 ] );\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.array[ index * this.itemSize + 1 ] = toHalfFloat( y );\n\n\t\treturn this;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = fromHalfFloat( this.array[ index * this.itemSize + 2 ] );\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.array[ index * this.itemSize + 2 ] = toHalfFloat( z );\n\n\t\treturn this;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = fromHalfFloat( this.array[ index * this.itemSize + 3 ] );\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.array[ index * this.itemSize + 3 ] = toHalfFloat( w );\n\n\t\treturn this;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\t\tthis.array[ index + 2 ] = toHalfFloat( z );\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex *= this.itemSize;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.array[ index + 0 ] = toHalfFloat( x );\n\t\tthis.array[ index + 1 ] = toHalfFloat( y );\n\t\tthis.array[ index + 2 ] = toHalfFloat( z );\n\t\tthis.array[ index + 3 ] = toHalfFloat( w );\n\n\t\treturn this;\n\n\t}\n\n}\n\n\nclass Float32BufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized ) {\n\n\t\tsuper( new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n}\n\nlet _id$2 = 0;\n\nconst _m1$2 = /*@__PURE__*/ new Matrix4();\nconst _obj = /*@__PURE__*/ new Object3D();\nconst _offset = /*@__PURE__*/ new Vector3();\nconst _box$2 = /*@__PURE__*/ new Box3();\nconst _boxMorphTargets = /*@__PURE__*/ new Box3();\nconst _vector$8 = /*@__PURE__*/ new Vector3();\n\nclass BufferGeometry extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBufferGeometry = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id$2 ++ } );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\t\tthis.morphTargetsRelative = false;\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tgetIndex() {\n\n\t\treturn this.index;\n\n\t}\n\n\tsetIndex( index ) {\n\n\t\tif ( Array.isArray( index ) ) {\n\n\t\t\tthis.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t} else {\n\n\t\t\tthis.index = index;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetAttribute( name ) {\n\n\t\treturn this.attributes[ name ];\n\n\t}\n\n\tsetAttribute( name, attribute ) {\n\n\t\tthis.attributes[ name ] = attribute;\n\n\t\treturn this;\n\n\t}\n\n\tdeleteAttribute( name ) {\n\n\t\tdelete this.attributes[ name ];\n\n\t\treturn this;\n\n\t}\n\n\thasAttribute( name ) {\n\n\t\treturn this.attributes[ name ] !== undefined;\n\n\t}\n\n\taddGroup( start, count, materialIndex = 0 ) {\n\n\t\tthis.groups.push( {\n\n\t\t\tstart: start,\n\t\t\tcount: count,\n\t\t\tmaterialIndex: materialIndex\n\n\t\t} );\n\n\t}\n\n\tclearGroups() {\n\n\t\tthis.groups = [];\n\n\t}\n\n\tsetDrawRange( start, count ) {\n\n\t\tthis.drawRange.start = start;\n\t\tthis.drawRange.count = count;\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst position = this.attributes.position;\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tposition.applyMatrix4( matrix );\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t}\n\n\t\tconst normal = this.attributes.normal;\n\n\t\tif ( normal !== undefined ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tnormal.applyNormalMatrix( normalMatrix );\n\n\t\t\tnormal.needsUpdate = true;\n\n\t\t}\n\n\t\tconst tangent = this.attributes.tangent;\n\n\t\tif ( tangent !== undefined ) {\n\n\t\t\ttangent.transformDirection( matrix );\n\n\t\t\ttangent.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyQuaternion( q ) {\n\n\t\t_m1$2.makeRotationFromQuaternion( q );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateX( angle ) {\n\n\t\t// rotate geometry around world x-axis\n\n\t\t_m1$2.makeRotationX( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateY( angle ) {\n\n\t\t// rotate geometry around world y-axis\n\n\t\t_m1$2.makeRotationY( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\trotateZ( angle ) {\n\n\t\t// rotate geometry around world z-axis\n\n\t\t_m1$2.makeRotationZ( angle );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( x, y, z ) {\n\n\t\t// translate geometry\n\n\t\t_m1$2.makeTranslation( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\tscale( x, y, z ) {\n\n\t\t// scale geometry\n\n\t\t_m1$2.makeScale( x, y, z );\n\n\t\tthis.applyMatrix4( _m1$2 );\n\n\t\treturn this;\n\n\t}\n\n\tlookAt( vector ) {\n\n\t\t_obj.lookAt( vector );\n\n\t\t_obj.updateMatrix();\n\n\t\tthis.applyMatrix4( _obj.matrix );\n\n\t\treturn this;\n\n\t}\n\n\tcenter() {\n\n\t\tthis.computeBoundingBox();\n\n\t\tthis.boundingBox.getCenter( _offset ).negate();\n\n\t\tthis.translate( _offset.x, _offset.y, _offset.z );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tconst position = [];\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst point = points[ i ];\n\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.', this );\n\n\t\t\tthis.boundingBox.set(\n\t\t\t\tnew Vector3( - Infinity, - Infinity, - Infinity ),\n\t\t\t\tnew Vector3( + Infinity, + Infinity, + Infinity )\n\t\t\t);\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_box$2.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.min, _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( this.boundingBox.max, _box$2.max );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.min );\n\t\t\t\t\t\tthis.boundingBox.expandByPoint( _box$2.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t}\n\n\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst position = this.attributes.position;\n\t\tconst morphAttributesPosition = this.morphAttributes.position;\n\n\t\tif ( position && position.isGLBufferAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere.', this );\n\n\t\t\tthis.boundingSphere.set( new Vector3(), Infinity );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( position ) {\n\n\t\t\t// first, find the center of the bounding sphere\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\t_box$2.setFromBufferAttribute( position );\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\t_boxMorphTargets.setFromBufferAttribute( morphAttribute );\n\n\t\t\t\t\tif ( this.morphTargetsRelative ) {\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$2.min, _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$8 );\n\n\t\t\t\t\t\t_vector$8.addVectors( _box$2.max, _boxMorphTargets.max );\n\t\t\t\t\t\t_box$2.expandByPoint( _vector$8 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.min );\n\t\t\t\t\t\t_box$2.expandByPoint( _boxMorphTargets.max );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_box$2.getCenter( center );\n\n\t\t\t// second, try to find a boundingSphere with a radius smaller than the\n\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t_vector$8.fromBufferAttribute( position, i );\n\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t}\n\n\t\t\t// process morph attributes if present\n\n\t\t\tif ( morphAttributesPosition ) {\n\n\t\t\t\tfor ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst morphAttribute = morphAttributesPosition[ i ];\n\t\t\t\t\tconst morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t\t\t\tfor ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t_vector$8.fromBufferAttribute( morphAttribute, j );\n\n\t\t\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t\t\t_offset.fromBufferAttribute( position, j );\n\t\t\t\t\t\t\t_vector$8.add( _offset );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$8 ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeTangents() {\n\n\t\tconst index = this.index;\n\t\tconst attributes = this.attributes;\n\n\t\t// based on http://www.terathon.com/code/tangent.html\n\t\t// (per vertex tangents)\n\n\t\tif ( index === null ||\n\t\t\t attributes.position === undefined ||\n\t\t\t attributes.normal === undefined ||\n\t\t\t attributes.uv === undefined ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst positionAttribute = attributes.position;\n\t\tconst normalAttribute = attributes.normal;\n\t\tconst uvAttribute = attributes.uv;\n\n\t\tif ( this.hasAttribute( 'tangent' ) === false ) {\n\n\t\t\tthis.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * positionAttribute.count ), 4 ) );\n\n\t\t}\n\n\t\tconst tangentAttribute = this.getAttribute( 'tangent' );\n\n\t\tconst tan1 = [], tan2 = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\ttan1[ i ] = new Vector3();\n\t\t\ttan2[ i ] = new Vector3();\n\n\t\t}\n\n\t\tconst vA = new Vector3(),\n\t\t\tvB = new Vector3(),\n\t\t\tvC = new Vector3(),\n\n\t\t\tuvA = new Vector2(),\n\t\t\tuvB = new Vector2(),\n\t\t\tuvC = new Vector2(),\n\n\t\t\tsdir = new Vector3(),\n\t\t\ttdir = new Vector3();\n\n\t\tfunction handleTriangle( a, b, c ) {\n\n\t\t\tvA.fromBufferAttribute( positionAttribute, a );\n\t\t\tvB.fromBufferAttribute( positionAttribute, b );\n\t\t\tvC.fromBufferAttribute( positionAttribute, c );\n\n\t\t\tuvA.fromBufferAttribute( uvAttribute, a );\n\t\t\tuvB.fromBufferAttribute( uvAttribute, b );\n\t\t\tuvC.fromBufferAttribute( uvAttribute, c );\n\n\t\t\tvB.sub( vA );\n\t\t\tvC.sub( vA );\n\n\t\t\tuvB.sub( uvA );\n\t\t\tuvC.sub( uvA );\n\n\t\t\tconst r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );\n\n\t\t\t// silently ignore degenerate uv triangles having coincident or colinear vertices\n\n\t\t\tif ( ! isFinite( r ) ) return;\n\n\t\t\tsdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );\n\t\t\ttdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );\n\n\t\t\ttan1[ a ].add( sdir );\n\t\t\ttan1[ b ].add( sdir );\n\t\t\ttan1[ c ].add( sdir );\n\n\t\t\ttan2[ a ].add( tdir );\n\t\t\ttan2[ b ].add( tdir );\n\t\t\ttan2[ c ].add( tdir );\n\n\t\t}\n\n\t\tlet groups = this.groups;\n\n\t\tif ( groups.length === 0 ) {\n\n\t\t\tgroups = [ {\n\t\t\t\tstart: 0,\n\t\t\t\tcount: index.count\n\t\t\t} ];\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleTriangle(\n\t\t\t\t\tindex.getX( j + 0 ),\n\t\t\t\t\tindex.getX( j + 1 ),\n\t\t\t\t\tindex.getX( j + 2 )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst tmp = new Vector3(), tmp2 = new Vector3();\n\t\tconst n = new Vector3(), n2 = new Vector3();\n\n\t\tfunction handleVertex( v ) {\n\n\t\t\tn.fromBufferAttribute( normalAttribute, v );\n\t\t\tn2.copy( n );\n\n\t\t\tconst t = tan1[ v ];\n\n\t\t\t// Gram-Schmidt orthogonalize\n\n\t\t\ttmp.copy( t );\n\t\t\ttmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();\n\n\t\t\t// Calculate handedness\n\n\t\t\ttmp2.crossVectors( n2, t );\n\t\t\tconst test = tmp2.dot( tan2[ v ] );\n\t\t\tconst w = ( test < 0.0 ) ? - 1.0 : 1.0;\n\n\t\t\ttangentAttribute.setXYZW( v, tmp.x, tmp.y, tmp.z, w );\n\n\t\t}\n\n\t\tfor ( let i = 0, il = groups.length; i < il; ++ i ) {\n\n\t\t\tconst group = groups[ i ];\n\n\t\t\tconst start = group.start;\n\t\t\tconst count = group.count;\n\n\t\t\tfor ( let j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\thandleVertex( index.getX( j + 0 ) );\n\t\t\t\thandleVertex( index.getX( j + 1 ) );\n\t\t\t\thandleVertex( index.getX( j + 2 ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcomputeVertexNormals() {\n\n\t\tconst index = this.index;\n\t\tconst positionAttribute = this.getAttribute( 'position' );\n\n\t\tif ( positionAttribute !== undefined ) {\n\n\t\t\tlet normalAttribute = this.getAttribute( 'normal' );\n\n\t\t\tif ( normalAttribute === undefined ) {\n\n\t\t\t\tnormalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );\n\t\t\t\tthis.setAttribute( 'normal', normalAttribute );\n\n\t\t\t} else {\n\n\t\t\t\t// reset existing normals to zero\n\n\t\t\t\tfor ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {\n\n\t\t\t\t\tnormalAttribute.setXYZ( i, 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\tconst nA = new Vector3(), nB = new Vector3(), nC = new Vector3();\n\t\t\tconst cb = new Vector3(), ab = new Vector3();\n\n\t\t\t// indexed elements\n\n\t\t\tif ( index ) {\n\n\t\t\t\tfor ( let i = 0, il = index.count; i < il; i += 3 ) {\n\n\t\t\t\t\tconst vA = index.getX( i + 0 );\n\t\t\t\t\tconst vB = index.getX( i + 1 );\n\t\t\t\t\tconst vC = index.getX( i + 2 );\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, vA );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, vB );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, vC );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnA.fromBufferAttribute( normalAttribute, vA );\n\t\t\t\t\tnB.fromBufferAttribute( normalAttribute, vB );\n\t\t\t\t\tnC.fromBufferAttribute( normalAttribute, vC );\n\n\t\t\t\t\tnA.add( cb );\n\t\t\t\t\tnB.add( cb );\n\t\t\t\t\tnC.add( cb );\n\n\t\t\t\t\tnormalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );\n\t\t\t\t\tnormalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\tfor ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {\n\n\t\t\t\t\tpA.fromBufferAttribute( positionAttribute, i + 0 );\n\t\t\t\t\tpB.fromBufferAttribute( positionAttribute, i + 1 );\n\t\t\t\t\tpC.fromBufferAttribute( positionAttribute, i + 2 );\n\n\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tnormalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );\n\t\t\t\t\tnormalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.normalizeNormals();\n\n\t\t\tnormalAttribute.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tnormalizeNormals() {\n\n\t\tconst normals = this.attributes.normal;\n\n\t\tfor ( let i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t_vector$8.fromBufferAttribute( normals, i );\n\n\t\t\t_vector$8.normalize();\n\n\t\t\tnormals.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );\n\n\t\t}\n\n\t}\n\n\ttoNonIndexed() {\n\n\t\tfunction convertBufferAttribute( attribute, indices ) {\n\n\t\t\tconst array = attribute.array;\n\t\t\tconst itemSize = attribute.itemSize;\n\t\t\tconst normalized = attribute.normalized;\n\n\t\t\tconst array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\tlet index = 0, index2 = 0;\n\n\t\t\tfor ( let i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\tindex = indices[ i ] * attribute.data.stride + attribute.offset;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( array2, itemSize, normalized );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( this.index === null ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tconst geometry2 = new BufferGeometry();\n\n\t\tconst indices = this.index.array;\n\t\tconst attributes = this.attributes;\n\n\t\t// attributes\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\n\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\tgeometry2.setAttribute( name, newAttribute );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = this.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst morphArray = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = morphAttribute[ i ];\n\n\t\t\t\tconst newAttribute = convertBufferAttribute( attribute, indices );\n\n\t\t\t\tmorphArray.push( newAttribute );\n\n\t\t\t}\n\n\t\t\tgeometry2.morphAttributes[ name ] = morphArray;\n\n\t\t}\n\n\t\tgeometry2.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = this.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\treturn geometry2;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t}\n\t\t};\n\n\t\t// standard BufferGeometry serialization\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.type = this.type;\n\t\tif ( this.name !== '' ) data.name = this.name;\n\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\tif ( this.parameters !== undefined ) {\n\n\t\t\tconst parameters = this.parameters;\n\n\t\t\tfor ( const key in parameters ) {\n\n\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t\t// for simplicity the code assumes attributes are not shared across geometries, see #15811\n\n\t\tdata.data = { attributes: {} };\n\n\t\tconst index = this.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tdata.data.index = {\n\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\tarray: Array.prototype.slice.call( index.array )\n\t\t\t};\n\n\t\t}\n\n\t\tconst attributes = this.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\n\t\t\tdata.data.attributes[ key ] = attribute.toJSON( data.data );\n\n\t\t}\n\n\t\tconst morphAttributes = {};\n\t\tlet hasMorphAttributes = false;\n\n\t\tfor ( const key in this.morphAttributes ) {\n\n\t\t\tconst attributeArray = this.morphAttributes[ key ];\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\tconst attribute = attributeArray[ i ];\n\n\t\t\t\tarray.push( attribute.toJSON( data.data ) );\n\n\t\t\t}\n\n\t\t\tif ( array.length > 0 ) {\n\n\t\t\t\tmorphAttributes[ key ] = array;\n\n\t\t\t\thasMorphAttributes = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( hasMorphAttributes ) {\n\n\t\t\tdata.data.morphAttributes = morphAttributes;\n\t\t\tdata.data.morphTargetsRelative = this.morphTargetsRelative;\n\n\t\t}\n\n\t\tconst groups = this.groups;\n\n\t\tif ( groups.length > 0 ) {\n\n\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tdata.data.boundingSphere = {\n\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\tradius: boundingSphere.radius\n\t\t\t};\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t// reset\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\t\tthis.morphAttributes = {};\n\t\tthis.groups = [];\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// used for storing cloned, shared data\n\n\t\tconst data = {};\n\n\t\t// name\n\n\t\tthis.name = source.name;\n\n\t\t// index\n\n\t\tconst index = source.index;\n\n\t\tif ( index !== null ) {\n\n\t\t\tthis.setIndex( index.clone( data ) );\n\n\t\t}\n\n\t\t// attributes\n\n\t\tconst attributes = source.attributes;\n\n\t\tfor ( const name in attributes ) {\n\n\t\t\tconst attribute = attributes[ name ];\n\t\t\tthis.setAttribute( name, attribute.clone( data ) );\n\n\t\t}\n\n\t\t// morph attributes\n\n\t\tconst morphAttributes = source.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = [];\n\t\t\tconst morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\tfor ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\tarray.push( morphAttribute[ i ].clone( data ) );\n\n\t\t\t}\n\n\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t}\n\n\t\tthis.morphTargetsRelative = source.morphTargetsRelative;\n\n\t\t// groups\n\n\t\tconst groups = source.groups;\n\n\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\tconst group = groups[ i ];\n\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t}\n\n\t\t// bounding box\n\n\t\tconst boundingBox = source.boundingBox;\n\n\t\tif ( boundingBox !== null ) {\n\n\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t}\n\n\t\t// bounding sphere\n\n\t\tconst boundingSphere = source.boundingSphere;\n\n\t\tif ( boundingSphere !== null ) {\n\n\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t}\n\n\t\t// draw range\n\n\t\tthis.drawRange.start = source.drawRange.start;\n\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t// user data\n\n\t\tthis.userData = source.userData;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n}\n\nconst _inverseMatrix$3 = /*@__PURE__*/ new Matrix4();\nconst _ray$3 = /*@__PURE__*/ new Ray();\nconst _sphere$6 = /*@__PURE__*/ new Sphere();\nconst _sphereHitAt = /*@__PURE__*/ new Vector3();\n\nconst _vA$1 = /*@__PURE__*/ new Vector3();\nconst _vB$1 = /*@__PURE__*/ new Vector3();\nconst _vC$1 = /*@__PURE__*/ new Vector3();\n\nconst _tempA = /*@__PURE__*/ new Vector3();\nconst _morphA = /*@__PURE__*/ new Vector3();\n\nconst _uvA$1 = /*@__PURE__*/ new Vector2();\nconst _uvB$1 = /*@__PURE__*/ new Vector2();\nconst _uvC$1 = /*@__PURE__*/ new Vector2();\n\nconst _normalA = /*@__PURE__*/ new Vector3();\nconst _normalB = /*@__PURE__*/ new Vector3();\nconst _normalC = /*@__PURE__*/ new Vector3();\n\nconst _intersectionPoint = /*@__PURE__*/ new Vector3();\nconst _intersectionPointWorld = /*@__PURE__*/ new Vector3();\n\nclass Mesh extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isMesh = true;\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t}\n\n\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t}\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.attributes.position;\n\t\tconst morphPosition = geometry.morphAttributes.position;\n\t\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\n\t\ttarget.fromBufferAttribute( position, index );\n\n\t\tconst morphInfluences = this.morphTargetInfluences;\n\n\t\tif ( morphPosition && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphPosition.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morphAttribute = morphPosition[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morphAttribute, index );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( target ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttarget.add( _morphA );\n\n\t\t}\n\n\t\treturn target;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$6.copy( geometry.boundingSphere );\n\t\t_sphere$6.applyMatrix4( matrixWorld );\n\n\t\t// check distance from ray origin to bounding sphere\n\n\t\t_ray$3.copy( raycaster.ray ).recast( raycaster.near );\n\n\t\tif ( _sphere$6.containsPoint( _ray$3.origin ) === false ) {\n\n\t\t\tif ( _ray$3.intersectSphere( _sphere$6, _sphereHitAt ) === null ) return;\n\n\t\t\tif ( _ray$3.origin.distanceToSquared( _sphereHitAt ) > ( raycaster.far - raycaster.near ) ** 2 ) return;\n\n\t\t}\n\n\t\t// convert ray to local space of mesh\n\n\t\t_inverseMatrix$3.copy( matrixWorld ).invert();\n\t\t_ray$3.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$3 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tif ( _ray$3.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$3 );\n\n\t}\n\n\t_computeIntersections( raycaster, intersects, rayLocalSpace ) {\n\n\t\tlet intersection;\n\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\n\t\tconst index = geometry.index;\n\t\tconst position = geometry.attributes.position;\n\t\tconst uv = geometry.attributes.uv;\n\t\tconst uv1 = geometry.attributes.uv1;\n\t\tconst normal = geometry.attributes.normal;\n\t\tconst groups = geometry.groups;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\tif ( index !== null ) {\n\n\t\t\t// indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = index.getX( j );\n\t\t\t\t\t\tconst b = index.getX( j + 1 );\n\t\t\t\t\t\tconst c = index.getX( j + 2 );\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = index.getX( i );\n\t\t\t\t\tconst b = index.getX( i + 1 );\n\t\t\t\t\tconst c = index.getX( i + 2 );\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( position !== undefined ) {\n\n\t\t\t// non-indexed buffer geometry\n\n\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\tconst start = Math.max( group.start, drawRange.start );\n\t\t\t\t\tconst end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );\n\n\t\t\t\t\tfor ( let j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tconst a = j;\n\t\t\t\t\t\tconst b = j + 1;\n\t\t\t\t\t\tconst c = j + 2;\n\n\t\t\t\t\t\tintersection = checkGeometryIntersection( this, groupMaterial, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\tintersection.face.materialIndex = group.materialIndex;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\t\tconst end = Math.min( position.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( let i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\t\tconst a = i;\n\t\t\t\t\tconst b = i + 1;\n\t\t\t\t\tconst c = i + 2;\n\n\t\t\t\t\tintersection = checkGeometryIntersection( this, material, raycaster, rayLocalSpace, uv, uv1, normal, a, b, c );\n\n\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection$1( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\tlet intersect;\n\n\tif ( material.side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, ( material.side === FrontSide ), point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\t_intersectionPointWorld.copy( point );\n\t_intersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\treturn {\n\t\tdistance: distance,\n\t\tpoint: _intersectionPointWorld.clone(),\n\t\tobject: object\n\t};\n\n}\n\nfunction checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, normal, a, b, c ) {\n\n\tobject.getVertexPosition( a, _vA$1 );\n\tobject.getVertexPosition( b, _vB$1 );\n\tobject.getVertexPosition( c, _vC$1 );\n\n\tconst intersection = checkIntersection$1( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );\n\n\tif ( intersection ) {\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv1 ) {\n\n\t\t\t_uvA$1.fromBufferAttribute( uv1, a );\n\t\t\t_uvB$1.fromBufferAttribute( uv1, b );\n\t\t\t_uvC$1.fromBufferAttribute( uv1, c );\n\n\t\t\tintersection.uv1 = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );\n\n\t\t}\n\n\t\tif ( normal ) {\n\n\t\t\t_normalA.fromBufferAttribute( normal, a );\n\t\t\t_normalB.fromBufferAttribute( normal, b );\n\t\t\t_normalC.fromBufferAttribute( normal, c );\n\n\t\t\tintersection.normal = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _normalA, _normalB, _normalC, new Vector3() );\n\n\t\t\tif ( intersection.normal.dot( ray.direction ) > 0 ) {\n\n\t\t\t\tintersection.normal.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );\n\n\t\tintersection.face = face;\n\n\t}\n\n\treturn intersection;\n\n}\n\nclass BoxGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tconst scope = this;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\t\tdepthSegments = Math.floor( depthSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet numberOfVertices = 0;\n\t\tlet groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tconst segmentWidth = width / gridX;\n\t\t\tconst segmentHeight = height / gridY;\n\n\t\t\tconst widthHalf = width / 2;\n\t\t\tconst heightHalf = height / 2;\n\t\t\tconst depthHalf = depth / 2;\n\n\t\t\tconst gridX1 = gridX + 1;\n\t\t\tconst gridY1 = gridY + 1;\n\n\t\t\tlet vertexCounter = 0;\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tconst y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tconst x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tconst a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tconst b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tconst d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );\n\n\t}\n\n}\n\n/**\n * Uniform Utilities\n */\n\nfunction cloneUniforms( src ) {\n\n\tconst dst = {};\n\n\tfor ( const u in src ) {\n\n\t\tdst[ u ] = {};\n\n\t\tfor ( const p in src[ u ] ) {\n\n\t\t\tconst property = src[ u ][ p ];\n\n\t\t\tif ( property && ( property.isColor ||\n\t\t\t\tproperty.isMatrix3 || property.isMatrix4 ||\n\t\t\t\tproperty.isVector2 || property.isVector3 || property.isVector4 ||\n\t\t\t\tproperty.isTexture || property.isQuaternion ) ) {\n\n\t\t\t\tif ( property.isRenderTargetTexture ) {\n\n\t\t\t\t\tconsole.warn( 'UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().' );\n\t\t\t\t\tdst[ u ][ p ] = null;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdst[ u ][ p ] = property.clone();\n\n\t\t\t\t}\n\n\t\t\t} else if ( Array.isArray( property ) ) {\n\n\t\t\t\tdst[ u ][ p ] = property.slice();\n\n\t\t\t} else {\n\n\t\t\t\tdst[ u ][ p ] = property;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction mergeUniforms( uniforms ) {\n\n\tconst merged = {};\n\n\tfor ( let u = 0; u < uniforms.length; u ++ ) {\n\n\t\tconst tmp = cloneUniforms( uniforms[ u ] );\n\n\t\tfor ( const p in tmp ) {\n\n\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t}\n\n\t}\n\n\treturn merged;\n\n}\n\nfunction cloneUniformsGroups( src ) {\n\n\tconst dst = [];\n\n\tfor ( let u = 0; u < src.length; u ++ ) {\n\n\t\tdst.push( src[ u ].clone() );\n\n\t}\n\n\treturn dst;\n\n}\n\nfunction getUnlitUniformColorSpace( renderer ) {\n\n\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\tif ( currentRenderTarget === null ) {\n\n\t\t// https://github.com/mrdoob/three.js/pull/23937#issuecomment-1111067398\n\t\treturn renderer.outputColorSpace;\n\n\t}\n\n\t// https://github.com/mrdoob/three.js/issues/27868\n\tif ( currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\treturn currentRenderTarget.texture.colorSpace;\n\n\t}\n\n\treturn ColorManagement.workingColorSpace;\n\n}\n\n// Legacy\n\nconst UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };\n\nvar default_vertex = \"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\";\n\nvar default_fragment = \"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\";\n\nclass ShaderMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShaderMaterial = true;\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\t\tthis.uniformsGroups = [];\n\n\t\tthis.vertexShader = default_vertex;\n\t\tthis.fragmentShader = default_fragment;\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.forceSinglePass = true;\n\n\t\tthis.extensions = {\n\t\t\tclipCullDistance: false, // set to use vertex shader clipping\n\t\t\tmultiDraw: false // set to use vertex shader multi_draw / enable gl_DrawID\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv1': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tthis.glslVersion = null;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = cloneUniforms( source.uniforms );\n\t\tthis.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.fog = source.fog;\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.extensions = Object.assign( {}, source.extensions );\n\n\t\tthis.glslVersion = source.glslVersion;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.glslVersion = this.glslVersion;\n\t\tdata.uniforms = {};\n\n\t\tfor ( const name in this.uniforms ) {\n\n\t\t\tconst uniform = this.uniforms[ name ];\n\t\t\tconst value = uniform.value;\n\n\t\t\tif ( value && value.isTexture ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 't',\n\t\t\t\t\tvalue: value.toJSON( meta ).uuid\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isColor ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'c',\n\t\t\t\t\tvalue: value.getHex()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector2 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v2',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isVector4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'v4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix3 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm3',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else if ( value && value.isMatrix4 ) {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\ttype: 'm4',\n\t\t\t\t\tvalue: value.toArray()\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tdata.uniforms[ name ] = {\n\t\t\t\t\tvalue: value\n\t\t\t\t};\n\n\t\t\t\t// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;\n\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\tdata.lights = this.lights;\n\t\tdata.clipping = this.clipping;\n\n\t\tconst extensions = {};\n\n\t\tfor ( const key in this.extensions ) {\n\n\t\t\tif ( this.extensions[ key ] === true ) extensions[ key ] = true;\n\n\t\t}\n\n\t\tif ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass Camera extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isCamera = true;\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\n\t\tthis.projectionMatrix = new Matrix4();\n\t\tthis.projectionMatrixInverse = new Matrix4();\n\n\t\tthis.coordinateSystem = WebGLCoordinateSystem;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\n\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\t\tthis.projectionMatrixInverse.copy( source.projectionMatrixInverse );\n\n\t\tthis.coordinateSystem = source.coordinateSystem;\n\n\t\treturn this;\n\n\t}\n\n\tgetWorldDirection( target ) {\n\n\t\treturn super.getWorldDirection( target ).negate();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tupdateWorldMatrix( updateParents, updateChildren ) {\n\n\t\tsuper.updateWorldMatrix( updateParents, updateChildren );\n\n\t\tthis.matrixWorldInverse.copy( this.matrixWorld ).invert();\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _v3$1 = /*@__PURE__*/ new Vector3();\nconst _minTarget = /*@__PURE__*/ new Vector2();\nconst _maxTarget = /*@__PURE__*/ new Vector2();\n\n\nclass PerspectiveCamera extends Camera {\n\n\tconstructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isPerspectiveCamera = true;\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.fov = source.fov;\n\t\tthis.zoom = source.zoom;\n\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\t\tthis.focus = source.focus;\n\n\t\tthis.aspect = source.aspect;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\tthis.filmGauge = source.filmGauge;\n\t\tthis.filmOffset = source.filmOffset;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t *\n\t * The default film gauge is 35, so that the focal length can be specified for\n\t * a 35mm (full frame) camera.\n\t *\n\t * Values for focal length and film gauge must have the same unit.\n\t */\n\tsetFocalLength( focalLength ) {\n\n\t\t/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */\n\t\tconst vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\tthis.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\t/**\n\t * Calculates the focal length from the current .fov and .filmGauge.\n\t */\n\tgetFocalLength() {\n\n\t\tconst vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );\n\n\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t}\n\n\tgetEffectiveFOV() {\n\n\t\treturn RAD2DEG * 2 * Math.atan(\n\t\t\tMath.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t}\n\n\tgetFilmWidth() {\n\n\t\t// film not completely covered in portrait format (aspect < 1)\n\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t}\n\n\tgetFilmHeight() {\n\n\t\t// film not completely covered in landscape format (aspect > 1)\n\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t}\n\n\t/**\n\t * Computes the 2D bounds of the camera's viewable rectangle at a given distance along the viewing direction.\n\t * Sets minTarget and maxTarget to the coordinates of the lower-left and upper-right corners of the view rectangle.\n\t */\n\tgetViewBounds( distance, minTarget, maxTarget ) {\n\n\t\t_v3$1.set( - 1, - 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );\n\n\t\tminTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );\n\n\t\t_v3$1.set( 1, 1, 0.5 ).applyMatrix4( this.projectionMatrixInverse );\n\n\t\tmaxTarget.set( _v3$1.x, _v3$1.y ).multiplyScalar( - distance / _v3$1.z );\n\n\t}\n\n\t/**\n\t * Computes the width and height of the camera's viewable rectangle at a given distance along the viewing direction.\n\t * Copies the result into the target Vector2, where x is width and y is height.\n\t */\n\tgetViewSize( distance, target ) {\n\n\t\tthis.getViewBounds( distance, _minTarget, _maxTarget );\n\n\t\treturn target.subVectors( _maxTarget, _minTarget );\n\n\t}\n\n\t/**\n\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t * multi-monitor/multi-machine setups.\n\t *\n\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t * the monitors are in grid like this\n\t *\n\t * +---+---+---+\n\t * | A | B | C |\n\t * +---+---+---+\n\t * | D | E | F |\n\t * +---+---+---+\n\t *\n\t * then for each monitor you would call it like this\n\t *\n\t * const w = 1920;\n\t * const h = 1080;\n\t * const fullWidth = w * 3;\n\t * const fullHeight = h * 2;\n\t *\n\t * --A--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t * --B--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t * --C--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t * --D--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t * --E--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t * --F--\n\t * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t *\n\t * Note there is no reason monitors have to be the same size or in a grid.\n\t */\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst near = this.near;\n\t\tlet top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;\n\t\tlet height = 2 * top;\n\t\tlet width = this.aspect * height;\n\t\tlet left = - 0.5 * width;\n\t\tconst view = this.view;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst fullWidth = view.fullWidth,\n\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\twidth *= view.width / fullWidth;\n\t\t\theight *= view.height / fullHeight;\n\n\t\t}\n\n\t\tconst skew = this.filmOffset;\n\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far, this.coordinateSystem );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.fov = this.fov;\n\t\tdata.object.zoom = this.zoom;\n\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\t\tdata.object.focus = this.focus;\n\n\t\tdata.object.aspect = this.aspect;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\tdata.object.filmGauge = this.filmGauge;\n\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst fov = - 90; // negative fov is not an error\nconst aspect = 1;\n\nclass CubeCamera extends Object3D {\n\n\tconstructor( near, far, renderTarget ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tthis.renderTarget = renderTarget;\n\t\tthis.coordinateSystem = null;\n\t\tthis.activeMipmapLevel = 0;\n\n\t\tconst cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.layers = this.layers;\n\t\tthis.add( cameraPX );\n\n\t\tconst cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.layers = this.layers;\n\t\tthis.add( cameraNX );\n\n\t\tconst cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.layers = this.layers;\n\t\tthis.add( cameraPY );\n\n\t\tconst cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.layers = this.layers;\n\t\tthis.add( cameraNY );\n\n\t\tconst cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.layers = this.layers;\n\t\tthis.add( cameraPZ );\n\n\t\tconst cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.layers = this.layers;\n\t\tthis.add( cameraNZ );\n\n\t}\n\n\tupdateCoordinateSystem() {\n\n\t\tconst coordinateSystem = this.coordinateSystem;\n\n\t\tconst cameras = this.children.concat();\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = cameras;\n\n\t\tfor ( const camera of cameras ) this.remove( camera );\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tcameraPX.up.set( 0, 1, 0 );\n\t\t\tcameraPX.lookAt( 1, 0, 0 );\n\n\t\t\tcameraNX.up.set( 0, 1, 0 );\n\t\t\tcameraNX.lookAt( - 1, 0, 0 );\n\n\t\t\tcameraPY.up.set( 0, 0, - 1 );\n\t\t\tcameraPY.lookAt( 0, 1, 0 );\n\n\t\t\tcameraNY.up.set( 0, 0, 1 );\n\t\t\tcameraNY.lookAt( 0, - 1, 0 );\n\n\t\t\tcameraPZ.up.set( 0, 1, 0 );\n\t\t\tcameraPZ.lookAt( 0, 0, 1 );\n\n\t\t\tcameraNZ.up.set( 0, 1, 0 );\n\t\t\tcameraNZ.lookAt( 0, 0, - 1 );\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\t\tcameraPX.lookAt( - 1, 0, 0 );\n\n\t\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\t\tcameraNX.lookAt( 1, 0, 0 );\n\n\t\t\tcameraPY.up.set( 0, 0, 1 );\n\t\t\tcameraPY.lookAt( 0, 1, 0 );\n\n\t\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\t\tcameraNY.lookAt( 0, - 1, 0 );\n\n\t\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\t\tcameraPZ.lookAt( 0, 0, 1 );\n\n\t\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\t\tcameraNZ.lookAt( 0, 0, - 1 );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\tfor ( const camera of cameras ) {\n\n\t\t\tthis.add( camera );\n\n\t\t\tcamera.updateMatrixWorld();\n\n\t\t}\n\n\t}\n\n\tupdate( renderer, scene ) {\n\n\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\tconst { renderTarget, activeMipmapLevel } = this;\n\n\t\tif ( this.coordinateSystem !== renderer.coordinateSystem ) {\n\n\t\t\tthis.coordinateSystem = renderer.coordinateSystem;\n\n\t\t\tthis.updateCoordinateSystem();\n\n\t\t}\n\n\t\tconst [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst currentActiveCubeFace = renderer.getActiveCubeFace();\n\t\tconst currentActiveMipmapLevel = renderer.getActiveMipmapLevel();\n\n\t\tconst currentXrEnabled = renderer.xr.enabled;\n\n\t\trenderer.xr.enabled = false;\n\n\t\tconst generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\trenderer.setRenderTarget( renderTarget, 0, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPX );\n\n\t\trenderer.setRenderTarget( renderTarget, 1, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNX );\n\n\t\trenderer.setRenderTarget( renderTarget, 2, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPY );\n\n\t\trenderer.setRenderTarget( renderTarget, 3, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNY );\n\n\t\trenderer.setRenderTarget( renderTarget, 4, activeMipmapLevel );\n\t\trenderer.render( scene, cameraPZ );\n\n\t\t// mipmaps are generated during the last call of render()\n\t\t// at this point, all sides of the cube render target are defined\n\n\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\trenderer.setRenderTarget( renderTarget, 5, activeMipmapLevel );\n\t\trenderer.render( scene, cameraNZ );\n\n\t\trenderer.setRenderTarget( currentRenderTarget, currentActiveCubeFace, currentActiveMipmapLevel );\n\n\t\trenderer.xr.enabled = currentXrEnabled;\n\n\t\trenderTarget.texture.needsPMREMUpdate = true;\n\n\t}\n\n}\n\nclass CubeTexture extends Texture {\n\n\tconstructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\t\tsuper( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tget images() {\n\n\t\treturn this.image;\n\n\t}\n\n\tset images( value ) {\n\n\t\tthis.image = value;\n\n\t}\n\n}\n\nclass WebGLCubeRenderTarget extends WebGLRenderTarget {\n\n\tconstructor( size = 1, options = {} ) {\n\n\t\tsuper( size, size, options );\n\n\t\tthis.isWebGLCubeRenderTarget = true;\n\n\t\tconst image = { width: size, height: size, depth: 1 };\n\t\tconst images = [ image, image, image, image, image, image ];\n\n\t\tthis.texture = new CubeTexture( images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );\n\n\t\t// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)\n\t\t// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,\n\t\t// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.\n\n\t\t// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped\n\t\t// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture\n\t\t// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).\n\n\t\tthis.texture.isRenderTargetTexture = true;\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;\n\t\tthis.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;\n\n\t}\n\n\tfromEquirectangularTexture( renderer, texture ) {\n\n\t\tthis.texture.type = texture.type;\n\t\tthis.texture.colorSpace = texture.colorSpace;\n\n\t\tthis.texture.generateMipmaps = texture.generateMipmaps;\n\t\tthis.texture.minFilter = texture.minFilter;\n\t\tthis.texture.magFilter = texture.magFilter;\n\n\t\tconst shader = {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: /* glsl */`\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t\t#include \n\t\t\t\t\t#include \n\n\t\t\t\t}\n\t\t\t`,\n\n\t\t\tfragmentShader: /* glsl */`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t\t}\n\t\t\t`\n\t\t};\n\n\t\tconst geometry = new BoxGeometry( 5, 5, 5 );\n\n\t\tconst material = new ShaderMaterial( {\n\n\t\t\tname: 'CubemapFromEquirect',\n\n\t\t\tuniforms: cloneUniforms( shader.uniforms ),\n\t\t\tvertexShader: shader.vertexShader,\n\t\t\tfragmentShader: shader.fragmentShader,\n\t\t\tside: BackSide,\n\t\t\tblending: NoBlending\n\n\t\t} );\n\n\t\tmaterial.uniforms.tEquirect.value = texture;\n\n\t\tconst mesh = new Mesh( geometry, material );\n\n\t\tconst currentMinFilter = texture.minFilter;\n\n\t\t// Avoid blurred poles\n\t\tif ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;\n\n\t\tconst camera = new CubeCamera( 1, 10, this );\n\t\tcamera.update( renderer, mesh );\n\n\t\ttexture.minFilter = currentMinFilter;\n\n\t\tmesh.geometry.dispose();\n\t\tmesh.material.dispose();\n\n\t\treturn this;\n\n\t}\n\n\tclear( renderer, color, depth, stencil ) {\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\trenderer.setRenderTarget( this, i );\n\n\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t}\n\n\t\trenderer.setRenderTarget( currentRenderTarget );\n\n\t}\n\n}\n\nconst _vector1 = /*@__PURE__*/ new Vector3();\nconst _vector2 = /*@__PURE__*/ new Vector3();\nconst _normalMatrix = /*@__PURE__*/ new Matrix3();\n\nclass Plane {\n\n\tconstructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {\n\n\t\tthis.isPlane = true;\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = normal;\n\t\tthis.constant = constant;\n\n\t}\n\n\tset( normal, constant ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = constant;\n\n\t\treturn this;\n\n\t}\n\n\tsetComponents( x, y, z, w ) {\n\n\t\tthis.normal.set( x, y, z );\n\t\tthis.constant = w;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromNormalAndCoplanarPoint( normal, point ) {\n\n\t\tthis.normal.copy( normal );\n\t\tthis.constant = - point.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCoplanarPoints( a, b, c ) {\n\n\t\tconst normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();\n\n\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( plane ) {\n\n\t\tthis.normal.copy( plane.normal );\n\t\tthis.constant = plane.constant;\n\n\t\treturn this;\n\n\t}\n\n\tnormalize() {\n\n\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\tconst inverseNormalLength = 1.0 / this.normal.length();\n\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\tthis.constant *= inverseNormalLength;\n\n\t\treturn this;\n\n\t}\n\n\tnegate() {\n\n\t\tthis.constant *= - 1;\n\t\tthis.normal.negate();\n\n\t\treturn this;\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.normal.dot( point ) + this.constant;\n\n\t}\n\n\tdistanceToSphere( sphere ) {\n\n\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t}\n\n\tprojectPoint( point, target ) {\n\n\t\treturn target.copy( point ).addScaledVector( this.normal, - this.distanceToPoint( point ) );\n\n\t}\n\n\tintersectLine( line, target ) {\n\n\t\tconst direction = line.delta( _vector1 );\n\n\t\tconst denominator = this.normal.dot( direction );\n\n\t\tif ( denominator === 0 ) {\n\n\t\t\t// line is coplanar, return origin\n\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\treturn target.copy( line.start );\n\n\t\t\t}\n\n\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn target.copy( line.start ).addScaledVector( direction, t );\n\n\t}\n\n\tintersectsLine( line ) {\n\n\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\tconst startSign = this.distanceToPoint( line.start );\n\t\tconst endSign = this.distanceToPoint( line.end );\n\n\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\treturn box.intersectsPlane( this );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphere.intersectsPlane( this );\n\n\t}\n\n\tcoplanarPoint( target ) {\n\n\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t}\n\n\tapplyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\tconst normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );\n\n\t\tconst referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );\n\n\t\tconst normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.constant -= offset.dot( this.normal );\n\n\t\treturn this;\n\n\t}\n\n\tequals( plane ) {\n\n\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _sphere$5 = /*@__PURE__*/ new Sphere();\nconst _vector$7 = /*@__PURE__*/ new Vector3();\n\nclass Frustum {\n\n\tconstructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {\n\n\t\tthis.planes = [ p0, p1, p2, p3, p4, p5 ];\n\n\t}\n\n\tset( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tconst planes = this.planes;\n\n\t\tplanes[ 0 ].copy( p0 );\n\t\tplanes[ 1 ].copy( p1 );\n\t\tplanes[ 2 ].copy( p2 );\n\t\tplanes[ 3 ].copy( p3 );\n\t\tplanes[ 4 ].copy( p4 );\n\t\tplanes[ 5 ].copy( p5 );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( frustum ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromProjectionMatrix( m, coordinateSystem = WebGLCoordinateSystem ) {\n\n\t\tconst planes = this.planes;\n\t\tconst me = m.elements;\n\t\tconst me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\tconst me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\tconst me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\tconst me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\n\t\tif ( coordinateSystem === WebGLCoordinateSystem ) {\n\n\t\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\t} else if ( coordinateSystem === WebGPUCoordinateSystem ) {\n\n\t\t\tplanes[ 5 ].setComponents( me2, me6, me10, me14 ).normalize();\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: ' + coordinateSystem );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tintersectsObject( object ) {\n\n\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\n\t\t\t_sphere$5.copy( object.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t} else {\n\n\t\t\tconst geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t_sphere$5.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );\n\n\t\t}\n\n\t\treturn this.intersectsSphere( _sphere$5 );\n\n\t}\n\n\tintersectsSprite( sprite ) {\n\n\t\t_sphere$5.center.set( 0, 0, 0 );\n\t\t_sphere$5.radius = 0.7071067811865476;\n\t\t_sphere$5.applyMatrix4( sprite.matrixWorld );\n\n\t\treturn this.intersectsSphere( _sphere$5 );\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\tconst planes = this.planes;\n\t\tconst center = sphere.center;\n\t\tconst negRadius = - sphere.radius;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst distance = planes[ i ].distanceToPoint( center );\n\n\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst plane = planes[ i ];\n\n\t\t\t// corner at max distance\n\n\t\t\t_vector$7.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t_vector$7.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t_vector$7.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\tif ( plane.distanceToPoint( _vector$7 ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\tconst planes = this.planes;\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nfunction WebGLAnimation() {\n\n\tlet context = null;\n\tlet isAnimating = false;\n\tlet animationLoop = null;\n\tlet requestId = null;\n\n\tfunction onAnimationFrame( time, frame ) {\n\n\t\tanimationLoop( time, frame );\n\n\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t}\n\n\treturn {\n\n\t\tstart: function () {\n\n\t\t\tif ( isAnimating === true ) return;\n\t\t\tif ( animationLoop === null ) return;\n\n\t\t\trequestId = context.requestAnimationFrame( onAnimationFrame );\n\n\t\t\tisAnimating = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tcontext.cancelAnimationFrame( requestId );\n\n\t\t\tisAnimating = false;\n\n\t\t},\n\n\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\tanimationLoop = callback;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLAttributes( gl ) {\n\n\tconst buffers = new WeakMap();\n\n\tfunction createBuffer( attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst usage = attribute.usage;\n\t\tconst size = array.byteLength;\n\n\t\tconst buffer = gl.createBuffer();\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\t\tgl.bufferData( bufferType, array, usage );\n\n\t\tattribute.onUploadCallback();\n\n\t\tlet type;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\ttype = gl.FLOAT;\n\n\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\tif ( attribute.isFloat16BufferAttribute ) {\n\n\t\t\t\ttype = gl.HALF_FLOAT;\n\n\t\t\t} else {\n\n\t\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t\t}\n\n\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\ttype = gl.SHORT;\n\n\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\ttype = gl.INT;\n\n\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\ttype = gl.BYTE;\n\n\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else if ( array instanceof Uint8ClampedArray ) {\n\n\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.WebGLAttributes: Unsupported buffer data format: ' + array );\n\n\t\t}\n\n\t\treturn {\n\t\t\tbuffer: buffer,\n\t\t\ttype: type,\n\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\tversion: attribute.version,\n\t\t\tsize: size\n\t\t};\n\n\t}\n\n\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\tconst array = attribute.array;\n\t\tconst updateRange = attribute._updateRange; // @deprecated, r159\n\t\tconst updateRanges = attribute.updateRanges;\n\n\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\tif ( updateRange.count === - 1 && updateRanges.length === 0 ) {\n\n\t\t\t// Not using update ranges\n\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t}\n\n\t\tif ( updateRanges.length !== 0 ) {\n\n\t\t\tfor ( let i = 0, l = updateRanges.length; i < l; i ++ ) {\n\n\t\t\t\tconst range = updateRanges[ i ];\n\n\t\t\t\tgl.bufferSubData( bufferType, range.start * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray, range.start, range.count );\n\n\t\t\t}\n\n\t\t\tattribute.clearUpdateRanges();\n\n\t\t}\n\n\t\t// @deprecated, r159\n\t\tif ( updateRange.count !== - 1 ) {\n\n\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\tarray, updateRange.offset, updateRange.count );\n\n\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t}\n\n\t\tattribute.onUploadCallback();\n\n\t}\n\n\t//\n\n\tfunction get( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\treturn buffers.get( attribute );\n\n\t}\n\n\tfunction remove( attribute ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data ) {\n\n\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\tbuffers.delete( attribute );\n\n\t\t}\n\n\t}\n\n\tfunction update( attribute, bufferType ) {\n\n\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\tif ( attribute.isGLBufferAttribute ) {\n\n\t\t\tconst cached = buffers.get( attribute );\n\n\t\t\tif ( ! cached || cached.version < attribute.version ) {\n\n\t\t\t\tbuffers.set( attribute, {\n\t\t\t\t\tbuffer: attribute.buffer,\n\t\t\t\t\ttype: attribute.type,\n\t\t\t\t\tbytesPerElement: attribute.elementSize,\n\t\t\t\t\tversion: attribute.version\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst data = buffers.get( attribute );\n\n\t\tif ( data === undefined ) {\n\n\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\tif ( data.size !== attribute.array.byteLength ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLAttributes: The size of the buffer attribute\\'s array buffer does not match the original size. Resizing buffer attributes is not supported.' );\n\n\t\t\t}\n\n\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\tdata.version = attribute.version;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update\n\n\t};\n\n}\n\nclass PlaneGeometry extends BufferGeometry {\n\n\tconstructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tconst width_half = width / 2;\n\t\tconst height_half = height / 2;\n\n\t\tconst gridX = Math.floor( widthSegments );\n\t\tconst gridY = Math.floor( heightSegments );\n\n\t\tconst gridX1 = gridX + 1;\n\t\tconst gridY1 = gridY + 1;\n\n\t\tconst segment_width = width / gridX;\n\t\tconst segment_height = height / gridY;\n\n\t\t//\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\tfor ( let iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tconst y = iy * segment_height - height_half;\n\n\t\t\tfor ( let ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tconst x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tconst a = ix + gridX1 * iy;\n\t\t\t\tconst b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tconst c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tconst d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );\n\n\t}\n\n}\n\nvar alphahash_fragment = \"#ifdef USE_ALPHAHASH\\n\\tif ( diffuseColor.a < getAlphaHashThreshold( vPosition ) ) discard;\\n#endif\";\n\nvar alphahash_pars_fragment = \"#ifdef USE_ALPHAHASH\\n\\tconst float ALPHA_HASH_SCALE = 0.05;\\n\\tfloat hash2D( vec2 value ) {\\n\\t\\treturn fract( 1.0e4 * sin( 17.0 * value.x + 0.1 * value.y ) * ( 0.1 + abs( sin( 13.0 * value.y + value.x ) ) ) );\\n\\t}\\n\\tfloat hash3D( vec3 value ) {\\n\\t\\treturn hash2D( vec2( hash2D( value.xy ), value.z ) );\\n\\t}\\n\\tfloat getAlphaHashThreshold( vec3 position ) {\\n\\t\\tfloat maxDeriv = max(\\n\\t\\t\\tlength( dFdx( position.xyz ) ),\\n\\t\\t\\tlength( dFdy( position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat pixScale = 1.0 / ( ALPHA_HASH_SCALE * maxDeriv );\\n\\t\\tvec2 pixScales = vec2(\\n\\t\\t\\texp2( floor( log2( pixScale ) ) ),\\n\\t\\t\\texp2( ceil( log2( pixScale ) ) )\\n\\t\\t);\\n\\t\\tvec2 alpha = vec2(\\n\\t\\t\\thash3D( floor( pixScales.x * position.xyz ) ),\\n\\t\\t\\thash3D( floor( pixScales.y * position.xyz ) )\\n\\t\\t);\\n\\t\\tfloat lerpFactor = fract( log2( pixScale ) );\\n\\t\\tfloat x = ( 1.0 - lerpFactor ) * alpha.x + lerpFactor * alpha.y;\\n\\t\\tfloat a = min( lerpFactor, 1.0 - lerpFactor );\\n\\t\\tvec3 cases = vec3(\\n\\t\\t\\tx * x / ( 2.0 * a * ( 1.0 - a ) ),\\n\\t\\t\\t( x - 0.5 * a ) / ( 1.0 - a ),\\n\\t\\t\\t1.0 - ( ( 1.0 - x ) * ( 1.0 - x ) / ( 2.0 * a * ( 1.0 - a ) ) )\\n\\t\\t);\\n\\t\\tfloat threshold = ( x < ( 1.0 - a ) )\\n\\t\\t\\t? ( ( x < a ) ? cases.x : cases.y )\\n\\t\\t\\t: cases.z;\\n\\t\\treturn clamp( threshold , 1.0e-6, 1.0 );\\n\\t}\\n#endif\";\n\nvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\\n#endif\";\n\nvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar alphatest_fragment = \"#ifdef USE_ALPHATEST\\n\\t#ifdef ALPHA_TO_COVERAGE\\n\\tdiffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a );\\n\\tif ( diffuseColor.a == 0.0 ) discard;\\n\\t#else\\n\\tif ( diffuseColor.a < alphaTest ) discard;\\n\\t#endif\\n#endif\";\n\nvar alphatest_pars_fragment = \"#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif\";\n\nvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_CLEARCOAT ) \\n\\t\\tclearcoatSpecularIndirect *= ambientOcclusion;\\n\\t#endif\\n\\t#if defined( USE_SHEEN ) \\n\\t\\tsheenSpecularIndirect *= ambientOcclusion;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometryNormal, geometryViewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\t#endif\\n#endif\";\n\nvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\nvar batching_pars_vertex = \"#ifdef USE_BATCHING\\n\\t#if ! defined( GL_ANGLE_multi_draw )\\n\\t#define gl_DrawID _gl_DrawID\\n\\tuniform int _gl_DrawID;\\n\\t#endif\\n\\tuniform highp sampler2D batchingTexture;\\n\\tuniform highp usampler2D batchingIdTexture;\\n\\tmat4 getBatchingMatrix( const in float i ) {\\n\\t\\tint size = textureSize( batchingTexture, 0 ).x;\\n\\t\\tint j = int( i ) * 4;\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\\n\\t\\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\\n\\t\\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\\n\\t\\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\\n\\t\\treturn mat4( v1, v2, v3, v4 );\\n\\t}\\n\\tfloat getIndirectIndex( const in int i ) {\\n\\t\\tint size = textureSize( batchingIdTexture, 0 ).x;\\n\\t\\tint x = i % size;\\n\\t\\tint y = i / size;\\n\\t\\treturn float( texelFetch( batchingIdTexture, ivec2( x, y ), 0 ).r );\\n\\t}\\n#endif\\n#ifdef USE_BATCHING_COLOR\\n\\tuniform sampler2D batchingColorTexture;\\n\\tvec3 getBatchingColor( const in float i ) {\\n\\t\\tint size = textureSize( batchingColorTexture, 0 ).x;\\n\\t\\tint j = int( i );\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\treturn texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb;\\n\\t}\\n#endif\";\n\nvar batching_vertex = \"#ifdef USE_BATCHING\\n\\tmat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) );\\n#endif\";\n\nvar begin_vertex = \"vec3 transformed = vec3( position );\\n#ifdef USE_ALPHAHASH\\n\\tvPosition = vec3( position );\\n#endif\";\n\nvar beginnormal_vertex = \"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\";\n\nvar bsdfs = \"float G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n} // validated\";\n\nvar iridescence_fragment = \"#ifdef USE_IRIDESCENCE\\n\\tconst mat3 XYZ_TO_REC709 = mat3(\\n\\t\\t 3.2404542, -0.9692660, 0.0556434,\\n\\t\\t-1.5371385, 1.8760108, -0.2040259,\\n\\t\\t-0.4985314, 0.0415560, 1.0572252\\n\\t);\\n\\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\\n\\t\\tvec3 sqrtF0 = sqrt( fresnel0 );\\n\\t\\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\\n\\t}\\n\\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\\n\\t}\\n\\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\\n\\t\\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\\n\\t}\\n\\tvec3 evalSensitivity( float OPD, vec3 shift ) {\\n\\t\\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\\n\\t\\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\\n\\t\\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\\n\\t\\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\\n\\t\\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\\n\\t\\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\\n\\t\\txyz /= 1.0685e-7;\\n\\t\\tvec3 rgb = XYZ_TO_REC709 * xyz;\\n\\t\\treturn rgb;\\n\\t}\\n\\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\\n\\t\\tvec3 I;\\n\\t\\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\\n\\t\\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\\n\\t\\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\\n\\t\\tif ( cosTheta2Sq < 0.0 ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t}\\n\\t\\tfloat cosTheta2 = sqrt( cosTheta2Sq );\\n\\t\\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\\n\\t\\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\\n\\t\\tfloat T121 = 1.0 - R12;\\n\\t\\tfloat phi12 = 0.0;\\n\\t\\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\\n\\t\\tfloat phi21 = PI - phi12;\\n\\t\\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\\t\\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\\n\\t\\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\\n\\t\\tvec3 phi23 = vec3( 0.0 );\\n\\t\\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\\n\\t\\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\\n\\t\\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\\n\\t\\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\\n\\t\\tvec3 phi = vec3( phi21 ) + phi23;\\n\\t\\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\\n\\t\\tvec3 r123 = sqrt( R123 );\\n\\t\\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\\n\\t\\tvec3 C0 = R12 + Rs;\\n\\t\\tI = C0;\\n\\t\\tvec3 Cm = Rs - T121;\\n\\t\\tfor ( int m = 1; m <= 2; ++ m ) {\\n\\t\\t\\tCm *= r123;\\n\\t\\t\\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\\n\\t\\t\\tI += Cm * Sm;\\n\\t\\t}\\n\\t\\treturn max( I, vec3( 0.0 ) );\\n\\t}\\n#endif\";\n\nvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vBumpMapUv );\\n\\t\\tvec2 dSTdy = dFdy( vBumpMapUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\n\\t\\tvec3 vSigmaX = normalize( dFdx( surf_pos.xyz ) );\\n\\t\\tvec3 vSigmaY = normalize( dFdy( surf_pos.xyz ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\";\n\nvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#ifdef ALPHA_TO_COVERAGE\\n\\t\\tfloat distanceToPlane, distanceGradient;\\n\\t\\tfloat clipOpacity = 1.0;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\\n\\t\\t\\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\\n\\t\\t\\tclipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\\n\\t\\t\\tif ( clipOpacity == 0.0 ) discard;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\t\\tfloat unionClipOpacity = 1.0;\\n\\t\\t\\t#pragma unroll_loop_start\\n\\t\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\t\\tdistanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w;\\n\\t\\t\\t\\tdistanceGradient = fwidth( distanceToPlane ) / 2.0;\\n\\t\\t\\t\\tunionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane );\\n\\t\\t\\t}\\n\\t\\t\\t#pragma unroll_loop_end\\n\\t\\t\\tclipOpacity *= 1.0 - unionClipOpacity;\\n\\t\\t#endif\\n\\t\\tdiffuseColor.a *= clipOpacity;\\n\\t\\tif ( diffuseColor.a == 0.0 ) discard;\\n\\t#else\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\t\\tbool clipped = true;\\n\\t\\t\\t#pragma unroll_loop_start\\n\\t\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t\\t}\\n\\t\\t\\t#pragma unroll_loop_end\\n\\t\\t\\tif ( clipped ) discard;\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\";\n\nvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvarying vec3 vClipPosition;\\n#endif\";\n\nvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\";\n\nvar color_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\nvar color_pars_fragment = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_pars_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\";\n\nvar color_vertex = \"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR )\\n\\tvColor = vec3( 1.0 );\\n#endif\\n#ifdef USE_COLOR\\n\\tvColor *= color;\\n#endif\\n#ifdef USE_INSTANCING_COLOR\\n\\tvColor.xyz *= instanceColor.xyz;\\n#endif\\n#ifdef USE_BATCHING_COLOR\\n\\tvec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) );\\n\\tvColor.xyz *= batchingColor.xyz;\\n#endif\";\n\nvar common = \"#define PI 3.141592653589793\\n#define PI2 6.283185307179586\\n#define PI_HALF 1.5707963267948966\\n#define RECIPROCAL_PI 0.3183098861837907\\n#define RECIPROCAL_PI2 0.15915494309189535\\n#define EPSILON 1e-6\\n#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nvec3 pow2( const in vec3 x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract( sin( sn ) * c );\\n}\\n#ifdef HIGH_PRECISION\\n\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\n#else\\n\\tfloat precisionSafeLength( vec3 v ) {\\n\\t\\tfloat maxComponent = max3( abs( v ) );\\n\\t\\treturn length( v / maxComponent ) * maxComponent;\\n\\t}\\n#endif\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\n#ifdef USE_ALPHAHASH\\n\\tvarying vec3 vPosition;\\n#endif\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nbool isPerspectiveMatrix( mat4 m ) {\\n\\treturn m[ 2 ][ 3 ] == - 1.0;\\n}\\nvec2 equirectUv( in vec3 dir ) {\\n\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\treturn vec2( u, v );\\n}\\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n}\\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\\n\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\n\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\n} // validated\";\n\nvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_minTileSize 16.0\\n\\tfloat getFace( vec3 direction ) {\\n\\t\\tvec3 absDirection = abs( direction );\\n\\t\\tfloat face = - 1.0;\\n\\t\\tif ( absDirection.x > absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x > absDirection.y )\\n\\t\\t\\t\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z > absDirection.y )\\n\\t\\t\\t\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\n\\t\\t}\\n\\t\\treturn face;\\n\\t}\\n\\tvec2 getUV( vec3 direction, float face ) {\\n\\t\\tvec2 uv;\\n\\t\\tif ( face == 0.0 ) {\\n\\t\\t\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 1.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\n\\t\\t} else if ( face == 2.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\n\\t\\t} else if ( face == 3.0 ) {\\n\\t\\t\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\n\\t\\t} else if ( face == 4.0 ) {\\n\\t\\t\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\n\\t\\t} else {\\n\\t\\t\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\n\\t\\t}\\n\\t\\treturn 0.5 * ( uv + 1.0 );\\n\\t}\\n\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\n\\t\\tfloat face = getFace( direction );\\n\\t\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\n\\t\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\n\\t\\tfloat faceSize = exp2( mipInt );\\n\\t\\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\\n\\t\\tif ( face > 2.0 ) {\\n\\t\\t\\tuv.y += faceSize;\\n\\t\\t\\tface -= 3.0;\\n\\t\\t}\\n\\t\\tuv.x += face * faceSize;\\n\\t\\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\\n\\t\\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\\n\\t\\tuv.x *= CUBEUV_TEXEL_WIDTH;\\n\\t\\tuv.y *= CUBEUV_TEXEL_HEIGHT;\\n\\t\\t#ifdef texture2DGradEXT\\n\\t\\t\\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( envMap, uv ).rgb;\\n\\t\\t#endif\\n\\t}\\n\\t#define cubeUV_r0 1.0\\n\\t#define cubeUV_m0 - 2.0\\n\\t#define cubeUV_r1 0.8\\n\\t#define cubeUV_m1 - 1.0\\n\\t#define cubeUV_r4 0.4\\n\\t#define cubeUV_m4 2.0\\n\\t#define cubeUV_r5 0.305\\n\\t#define cubeUV_m5 3.0\\n\\t#define cubeUV_r6 0.21\\n\\t#define cubeUV_m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness >= cubeUV_r1 ) {\\n\\t\\t\\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\\n\\t\\t} else if ( roughness >= cubeUV_r4 ) {\\n\\t\\t\\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\\n\\t\\t} else if ( roughness >= cubeUV_r5 ) {\\n\\t\\t\\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\\n\\t\\t} else if ( roughness >= cubeUV_r6 ) {\\n\\t\\t\\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\\n\\t\\t} else {\\n\\t\\t\\tmip = - 2.0 * log2( 1.16 * roughness );\\t\\t}\\n\\t\\treturn mip;\\n\\t}\\n\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\n\\t\\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\\n\\t\\tfloat mipF = fract( mip );\\n\\t\\tfloat mipInt = floor( mip );\\n\\t\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\n\\t\\tif ( mipF == 0.0 ) {\\n\\t\\t\\treturn vec4( color0, 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\n\\t\\t\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\n\\t\\t}\\n\\t}\\n#endif\";\n\nvar defaultnormal_vertex = \"vec3 transformedNormal = objectNormal;\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = objectTangent;\\n#endif\\n#ifdef USE_BATCHING\\n\\tmat3 bm = mat3( batchingMatrix );\\n\\ttransformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) );\\n\\ttransformedNormal = bm * transformedNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\ttransformedTangent = bm * transformedTangent;\\n\\t#endif\\n#endif\\n#ifdef USE_INSTANCING\\n\\tmat3 im = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) );\\n\\ttransformedNormal = im * transformedNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\ttransformedTangent = im * transformedTangent;\\n\\t#endif\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\ttransformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\";\n\nvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\";\n\nvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\\n#endif\";\n\nvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\";\n\nvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\";\n\nvar colorspace_fragment = \"gl_FragColor = linearToOutputTexel( gl_FragColor );\";\n\nvar colorspace_pars_fragment = \"\\nconst mat3 LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = mat3(\\n\\tvec3( 0.8224621, 0.177538, 0.0 ),\\n\\tvec3( 0.0331941, 0.9668058, 0.0 ),\\n\\tvec3( 0.0170827, 0.0723974, 0.9105199 )\\n);\\nconst mat3 LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = mat3(\\n\\tvec3( 1.2249401, - 0.2249404, 0.0 ),\\n\\tvec3( - 0.0420569, 1.0420571, 0.0 ),\\n\\tvec3( - 0.0196376, - 0.0786361, 1.0982735 )\\n);\\nvec4 LinearSRGBToLinearDisplayP3( in vec4 value ) {\\n\\treturn vec4( value.rgb * LINEAR_SRGB_TO_LINEAR_DISPLAY_P3, value.a );\\n}\\nvec4 LinearDisplayP3ToLinearSRGB( in vec4 value ) {\\n\\treturn vec4( value.rgb * LINEAR_DISPLAY_P3_TO_LINEAR_SRGB, value.a );\\n}\\nvec4 LinearTransferOETF( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 sRGBTransferOETF( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\\n}\";\n\nvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvec3 cameraToFrag;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, envMapRotation * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\";\n\nvar envmap_common_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform mat3 envMapRotation;\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\t\\n#endif\";\n\nvar envmap_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\";\n\nvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\\n\\t\\t#define ENV_WORLDPOS\\n\\t#endif\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\t\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\";\n\nvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#ifdef ENV_WORLDPOS\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex;\\n\\t\\tif ( isOrthographic ) {\\n\\t\\t\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\n\\t\\t} else {\\n\\t\\t\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\t}\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\";\n\nvar fog_vertex = \"#ifdef USE_FOG\\n\\tvFogDepth = - mvPosition.z;\\n#endif\";\n\nvar fog_pars_vertex = \"#ifdef USE_FOG\\n\\tvarying float vFogDepth;\\n#endif\";\n\nvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\";\n\nvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float vFogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\";\n\nvar gradientmap_pars_fragment = \"#ifdef USE_GRADIENTMAP\\n\\tuniform sampler2D gradientMap;\\n#endif\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\tfloat dotNL = dot( normal, lightDirection );\\n\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t#ifdef USE_GRADIENTMAP\\n\\t\\treturn vec3( texture2D( gradientMap, coord ).r );\\n\\t#else\\n\\t\\tvec2 fw = fwidth( coord ) * 0.5;\\n\\t\\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\\n\\t#endif\\n}\";\n\nvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\nvar lights_lambert_fragment = \"LambertMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_lambert_pars_fragment = \"varying vec3 vViewPosition;\\nstruct LambertMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Lambert\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Lambert\";\n\nvar lights_pars_begin = \"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\n#if defined( USE_LIGHT_PROBES )\\n\\tuniform vec3 lightProbe[ 9 ];\\n#endif\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\n\\tfloat x = normal.x, y = normal.y, z = normal.z;\\n\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\n\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\n\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\n\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\n\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\n\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\n\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\n\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\n\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\n\\treturn result;\\n}\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\n\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\treturn irradiance;\\n}\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif ( cutoffDistance > 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n}\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\n\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) {\\n\\t\\tlight.color = directionalLight.color;\\n\\t\\tlight.direction = directionalLight.direction;\\n\\t\\tlight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = pointLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tlight.color = pointLight.color;\\n\\t\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) {\\n\\t\\tvec3 lVector = spotLight.position - geometryPosition;\\n\\t\\tlight.direction = normalize( lVector );\\n\\t\\tfloat angleCos = dot( light.direction, spotLight.direction );\\n\\t\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\tif ( spotAttenuation > 0.0 ) {\\n\\t\\t\\tfloat lightDistance = length( lVector );\\n\\t\\t\\tlight.color = spotLight.color * spotAttenuation;\\n\\t\\t\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tlight.visible = ( light.color != vec3( 0.0 ) );\\n\\t\\t} else {\\n\\t\\t\\tlight.color = vec3( 0.0 );\\n\\t\\t\\tlight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\n\\t\\tfloat dotNL = dot( normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\";\n\nvar envmap_physical_pars_fragment = \"#ifdef USE_ENVMAP\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 );\\n\\t\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\tvec3 reflectVec = reflect( - viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness );\\n\\t\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t\\t#else\\n\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t#endif\\n\\t}\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tvec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) {\\n\\t\\t\\t#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\t\\tvec3 bentNormal = cross( bitangent, viewDir );\\n\\t\\t\\t\\tbentNormal = normalize( cross( bentNormal, bitangent ) );\\n\\t\\t\\t\\tbentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) );\\n\\t\\t\\t\\treturn getIBLRadiance( viewDir, bentNormal, roughness );\\n\\t\\t\\t#else\\n\\t\\t\\t\\treturn vec3( 0.0 );\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t#endif\\n#endif\";\n\nvar lights_toon_fragment = \"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\";\n\nvar lights_toon_pars_fragment = \"varying vec3 vViewPosition;\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\";\n\nvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\";\n\nvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\nstruct BlinnPhongMaterial {\\n\\tvec3 diffuseColor;\\n\\tvec3 specularColor;\\n\\tfloat specularShininess;\\n\\tfloat specularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\";\n\nvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\\nmaterial.roughness = min( material.roughness, 1.0 );\\n#ifdef IOR\\n\\tmaterial.ior = ior;\\n\\t#ifdef USE_SPECULAR\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularColorFactor = specularColor;\\n\\t\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\t\\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\\n\\t\\t#endif\\n\\t\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\\n\\t\\t#endif\\n\\t\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\n\\t#else\\n\\t\\tfloat specularIntensityFactor = 1.0;\\n\\t\\tvec3 specularColorFactor = vec3( 1.0 );\\n\\t\\tmaterial.specularF90 = 1.0;\\n\\t#endif\\n\\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.specularF90 = 1.0;\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\tmaterial.clearcoatF0 = vec3( 0.04 );\\n\\tmaterial.clearcoatF90 = 1.0;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\\n\\t#endif\\n\\tmaterial.clearcoat = saturate( material.clearcoat );\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\n\\tmaterial.clearcoatRoughness += geometryRoughness;\\n\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\n#endif\\n#ifdef USE_DISPERSION\\n\\tmaterial.dispersion = dispersion;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tmaterial.iridescence = iridescence;\\n\\tmaterial.iridescenceIOR = iridescenceIOR;\\n\\t#ifdef USE_IRIDESCENCEMAP\\n\\t\\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\t\\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\\n\\t#else\\n\\t\\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\\n\\t#endif\\n#endif\\n#ifdef USE_SHEEN\\n\\tmaterial.sheenColor = sheenColor;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\\n\\t#endif\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tmat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x );\\n\\t\\tvec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb;\\n\\t\\tvec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b;\\n\\t#else\\n\\t\\tvec2 anisotropyV = anisotropyVector;\\n\\t#endif\\n\\tmaterial.anisotropy = length( anisotropyV );\\n\\tif( material.anisotropy == 0.0 ) {\\n\\t\\tanisotropyV = vec2( 1.0, 0.0 );\\n\\t} else {\\n\\t\\tanisotropyV /= material.anisotropy;\\n\\t\\tmaterial.anisotropy = saturate( material.anisotropy );\\n\\t}\\n\\tmaterial.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) );\\n\\tmaterial.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y;\\n\\tmaterial.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y;\\n#endif\";\n\nvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat roughness;\\n\\tvec3 specularColor;\\n\\tfloat specularF90;\\n\\tfloat dispersion;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat clearcoat;\\n\\t\\tfloat clearcoatRoughness;\\n\\t\\tvec3 clearcoatF0;\\n\\t\\tfloat clearcoatF90;\\n\\t#endif\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tfloat iridescence;\\n\\t\\tfloat iridescenceIOR;\\n\\t\\tfloat iridescenceThickness;\\n\\t\\tvec3 iridescenceFresnel;\\n\\t\\tvec3 iridescenceF0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tvec3 sheenColor;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n\\t#ifdef IOR\\n\\t\\tfloat ior;\\n\\t#endif\\n\\t#ifdef USE_TRANSMISSION\\n\\t\\tfloat transmission;\\n\\t\\tfloat transmissionAlpha;\\n\\t\\tfloat thickness;\\n\\t\\tfloat attenuationDistance;\\n\\t\\tvec3 attenuationColor;\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat anisotropy;\\n\\t\\tfloat alphaT;\\n\\t\\tvec3 anisotropyT;\\n\\t\\tvec3 anisotropyB;\\n\\t#endif\\n};\\nvec3 clearcoatSpecularDirect = vec3( 0.0 );\\nvec3 clearcoatSpecularIndirect = vec3( 0.0 );\\nvec3 sheenSpecularDirect = vec3( 0.0 );\\nvec3 sheenSpecularIndirect = vec3(0.0 );\\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\\n float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\\n float x2 = x * x;\\n float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\\n}\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\n#ifdef USE_ANISOTROPY\\n\\tfloat V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) {\\n\\t\\tfloat gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) );\\n\\t\\tfloat gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) );\\n\\t\\tfloat v = 0.5 / ( gv + gl );\\n\\t\\treturn saturate(v);\\n\\t}\\n\\tfloat D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) {\\n\\t\\tfloat a2 = alphaT * alphaB;\\n\\t\\thighp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH );\\n\\t\\thighp float v2 = dot( v, v );\\n\\t\\tfloat w2 = a2 / v2;\\n\\t\\treturn RECIPROCAL_PI * a2 * pow2 ( w2 );\\n\\t}\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\\n\\t\\tvec3 f0 = material.clearcoatF0;\\n\\t\\tfloat f90 = material.clearcoatF90;\\n\\t\\tfloat roughness = material.clearcoatRoughness;\\n\\t\\tfloat alpha = pow2( roughness );\\n\\t\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\t\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\t\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\t\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\t\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\t\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t\\treturn F * ( V * D );\\n\\t}\\n#endif\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\\n\\tvec3 f0 = material.specularColor;\\n\\tfloat f90 = material.specularF90;\\n\\tfloat roughness = material.roughness;\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\n\\tvec3 F = F_Schlick( f0, f90, dotVH );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tF = mix( F, material.iridescenceFresnel, material.iridescence );\\n\\t#endif\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tfloat dotTL = dot( material.anisotropyT, lightDir );\\n\\t\\tfloat dotTV = dot( material.anisotropyT, viewDir );\\n\\t\\tfloat dotTH = dot( material.anisotropyT, halfDir );\\n\\t\\tfloat dotBL = dot( material.anisotropyB, lightDir );\\n\\t\\tfloat dotBV = dot( material.anisotropyB, viewDir );\\n\\t\\tfloat dotBH = dot( material.anisotropyB, halfDir );\\n\\t\\tfloat V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL );\\n\\t\\tfloat D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH );\\n\\t#else\\n\\t\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\t\\tfloat D = D_GGX( alpha, dotNH );\\n\\t#endif\\n\\treturn F * ( V * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie( float roughness, float dotNH ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tfloat invAlpha = 1.0 / alpha;\\n\\tfloat cos2h = dotNH * dotNH;\\n\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\\n\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\n}\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\n\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\n}\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\\n\\tvec3 halfDir = normalize( lightDir + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\n\\tfloat V = V_Neubelt( dotNV, dotNL );\\n\\treturn sheenColor * ( D * V );\\n}\\n#endif\\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat r2 = roughness * roughness;\\n\\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\\n\\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\\n\\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\\n\\treturn saturate( DG * RECIPROCAL_PI );\\n}\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\n\\treturn fab;\\n}\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\treturn specularColor * fab.x + specularF90 * fab.y;\\n}\\n#ifdef USE_IRIDESCENCE\\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#else\\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n#endif\\n\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\\n\\t#else\\n\\t\\tvec3 Fr = specularColor;\\n\\t#endif\\n\\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometryNormal;\\n\\t\\tvec3 viewDir = geometryViewDir;\\n\\t\\tvec3 position = geometryPosition;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.roughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometryNormal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\t\\tclearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness );\\n\\t#endif\\n\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometryViewDir, geometryNormal, material );\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness );\\n\\t#endif\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\t#ifdef USE_IRIDESCENCE\\n\\t\\tcomputeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\\n\\t#else\\n\\t\\tcomputeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\n\\t#endif\\n\\tvec3 totalScattering = singleScattering + multiScattering;\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\\n\\treflectedLight.indirectSpecular += radiance * singleScattering;\\n\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\n\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\";\n\nvar lights_fragment_begin = \"\\nvec3 geometryPosition = - vViewPosition;\\nvec3 geometryNormal = normal;\\nvec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\nvec3 geometryClearcoatNormal = vec3( 0.0 );\\n#ifdef USE_CLEARCOAT\\n\\tgeometryClearcoatNormal = clearcoatNormal;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tfloat dotNVi = saturate( dot( normal, geometryViewDir ) );\\n\\tif ( material.iridescenceThickness == 0.0 ) {\\n\\t\\tmaterial.iridescence = 0.0;\\n\\t} else {\\n\\t\\tmaterial.iridescence = saturate( material.iridescence );\\n\\t}\\n\\tif ( material.iridescence > 0.0 ) {\\n\\t\\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\\n\\t\\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\\n\\t}\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointLightInfo( pointLight, geometryPosition, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\tvec4 spotColor;\\n\\tvec3 spotLightCoord;\\n\\tbool inSpotLightMap;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotLightInfo( spotLight, geometryPosition, directLight );\\n\\t\\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\\n\\t\\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\\n\\t\\t#else\\n\\t\\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\\n\\t\\t#endif\\n\\t\\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\\n\\t\\t\\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\\n\\t\\t\\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\\n\\t\\t\\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\\n\\t\\t\\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\\n\\t\\t#endif\\n\\t\\t#undef SPOT_LIGHT_MAP_INDEX\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalLightInfo( directionalLight, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 iblIrradiance = vec3( 0.0 );\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#if defined( USE_LIGHT_PROBES )\\n\\t\\tirradiance += getLightProbeIrradiance( lightProbe, geometryNormal );\\n\\t#endif\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal );\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearcoatRadiance = vec3( 0.0 );\\n#endif\";\n\nvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getIBLIrradiance( geometryNormal );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\t#ifdef USE_ANISOTROPY\\n\\t\\tradiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy );\\n\\t#else\\n\\t\\tradiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness );\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness );\\n\\t#endif\\n#endif\";\n\nvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight );\\n#endif\";\n\nvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF )\\n\\tgl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\nvar logdepthbuf_pars_fragment = \"#if defined( USE_LOGDEPTHBUF )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\";\n\nvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\tvFragDepth = 1.0 + gl_Position.w;\\n\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n#endif\";\n\nvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 sampledDiffuseColor = texture2D( map, vMapUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\tsampledDiffuseColor = vec4( mix( pow( sampledDiffuseColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), sampledDiffuseColor.rgb * 0.0773993808, vec3( lessThanEqual( sampledDiffuseColor.rgb, vec3( 0.04045 ) ) ) ), sampledDiffuseColor.w );\\n\\t\\n\\t#endif\\n\\tdiffuseColor *= sampledDiffuseColor;\\n#endif\";\n\nvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\";\n\nvar map_particle_fragment = \"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t#if defined( USE_POINTS_UV )\\n\\t\\tvec2 uv = vUv;\\n\\t#else\\n\\t\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tdiffuseColor *= texture2D( map, uv );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\";\n\nvar map_particle_pars_fragment = \"#if defined( USE_POINTS_UV )\\n\\tvarying vec2 vUv;\\n#else\\n\\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\t\\tuniform mat3 uvTransform;\\n\\t#endif\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\";\n\nvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\";\n\nvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\nvar morphinstance_vertex = \"#ifdef USE_INSTANCING_MORPH\\n\\tfloat morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\tfloat morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tmorphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r;\\n\\t}\\n#endif\";\n\nvar morphcolor_vertex = \"#if defined( USE_MORPHCOLORS )\\n\\tvColor *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t#if defined( USE_COLOR_ALPHA )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\\n\\t\\t#elif defined( USE_COLOR )\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\\n\\t\\t#endif\\n\\t}\\n#endif\";\n\nvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\\n\\t}\\n#endif\";\n\nvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_INSTANCING_MORPH\\n\\t\\tuniform float morphTargetBaseInfluence;\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t#endif\\n\\tuniform sampler2DArray morphTargetsTexture;\\n\\tuniform ivec2 morphTargetsTextureSize;\\n\\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\\n\\t\\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\\n\\t\\tint y = texelIndex / morphTargetsTextureSize.x;\\n\\t\\tint x = texelIndex - y * morphTargetsTextureSize.x;\\n\\t\\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\\n\\t\\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\\n\\t}\\n#endif\";\n\nvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\\n\\t}\\n#endif\";\n\nvar normal_fragment_begin = \"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = dFdx( vViewPosition );\\n\\tvec3 fdy = dFdy( vViewPosition );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal *= faceDirection;\\n\\t#endif\\n#endif\\n#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY )\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn = getTangentFrame( - vViewPosition, normal,\\n\\t\\t#if defined( USE_NORMALMAP )\\n\\t\\t\\tvNormalMapUv\\n\\t\\t#elif defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tvClearcoatNormalMapUv\\n\\t\\t#else\\n\\t\\t\\tvUv\\n\\t\\t#endif\\n\\t\\t);\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn[0] *= faceDirection;\\n\\t\\ttbn[1] *= faceDirection;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\t#ifdef USE_TANGENT\\n\\t\\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\\n\\t#else\\n\\t\\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\\n\\t#endif\\n\\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\\n\\t\\ttbn2[0] *= faceDirection;\\n\\t\\ttbn2[1] *= faceDirection;\\n\\t#endif\\n#endif\\nvec3 nonPerturbedNormal = normal;\";\n\nvar normal_fragment_maps = \"#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\t#ifdef FLIP_SIDED\\n\\t\\tnormal = - normal;\\n\\t#endif\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\tnormal = normalize( normalMatrix * normal );\\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\tnormal = normalize( tbn * mapN );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\";\n\nvar normal_pars_fragment = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_pars_vertex = \"#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n\\t#ifdef USE_TANGENT\\n\\t\\tvarying vec3 vTangent;\\n\\t\\tvarying vec3 vBitangent;\\n\\t#endif\\n#endif\";\n\nvar normal_vertex = \"#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n\\t#ifdef USE_TANGENT\\n\\t\\tvTangent = normalize( transformedTangent );\\n\\t\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\n\\t#endif\\n#endif\";\n\nvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef USE_NORMALMAP_OBJECTSPACE\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) )\\n\\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\\n\\t\\tvec3 q0 = dFdx( eye_pos.xyz );\\n\\t\\tvec3 q1 = dFdy( eye_pos.xyz );\\n\\t\\tvec2 st0 = dFdx( uv.st );\\n\\t\\tvec2 st1 = dFdy( uv.st );\\n\\t\\tvec3 N = surf_norm;\\n\\t\\tvec3 q1perp = cross( q1, N );\\n\\t\\tvec3 q0perp = cross( N, q0 );\\n\\t\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\n\\t\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\n\\t\\tfloat det = max( dot( T, T ), dot( B, B ) );\\n\\t\\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\\n\\t\\treturn mat3( T * scale, B * scale, N );\\n\\t}\\n#endif\";\n\nvar clearcoat_normal_fragment_begin = \"#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal = nonPerturbedNormal;\\n#endif\";\n\nvar clearcoat_normal_fragment_maps = \"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\\n#endif\";\n\nvar clearcoat_pars_fragment = \"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\";\n\nvar iridescence_pars_fragment = \"#ifdef USE_IRIDESCENCEMAP\\n\\tuniform sampler2D iridescenceMap;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform sampler2D iridescenceThicknessMap;\\n#endif\";\n\nvar opaque_fragment = \"#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= material.transmissionAlpha;\\n#endif\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\";\n\nvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.;\\nconst float Inv255 = 1. / 255.;\\nconst vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 );\\nconst vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g );\\nconst vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b );\\nconst vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a );\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec4( 0., 0., 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec4( 1., 1., 1., 1. );\\n\\tfloat vuf;\\n\\tfloat af = modf( v * PackFactors.a, vuf );\\n\\tfloat bf = modf( vuf * ShiftRight8, vuf );\\n\\tfloat gf = modf( vuf * ShiftRight8, vuf );\\n\\treturn vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af );\\n}\\nvec3 packDepthToRGB( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec3( 0., 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec3( 1., 1., 1. );\\n\\tfloat vuf;\\n\\tfloat bf = modf( v * PackFactors.b, vuf );\\n\\tfloat gf = modf( vuf * ShiftRight8, vuf );\\n\\treturn vec3( vuf * Inv255, gf * PackUpscale, bf );\\n}\\nvec2 packDepthToRG( const in float v ) {\\n\\tif( v <= 0.0 )\\n\\t\\treturn vec2( 0., 0. );\\n\\tif( v >= 1.0 )\\n\\t\\treturn vec2( 1., 1. );\\n\\tfloat vuf;\\n\\tfloat gf = modf( v * 256., vuf );\\n\\treturn vec2( vuf * Inv255, gf );\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors4 );\\n}\\nfloat unpackRGBToDepth( const in vec3 v ) {\\n\\treturn dot( v, UnpackFactors3 );\\n}\\nfloat unpackRGToDepth( const in vec2 v ) {\\n\\treturn v.r * UnpackFactors2.r + v.g * UnpackFactors2.g;\\n}\\nvec4 pack2HalfToRGBA( const in vec2 v ) {\\n\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\n\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\n}\\nvec2 unpackRGBATo2Half( const in vec4 v ) {\\n\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\treturn depth * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * depth - far );\\n}\";\n\nvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\";\n\nvar project_vertex = \"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_BATCHING\\n\\tmvPosition = batchingMatrix * mvPosition;\\n#endif\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\";\n\nvar dithering_fragment = \"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\";\n\nvar dithering_pars_fragment = \"#ifdef DITHERING\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\";\n\nvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\";\n\nvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\nvar shadowmap_pars_fragment = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#if NUM_SPOT_LIGHT_MAPS > 0\\n\\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\n\\t\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\n\\t}\\n\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\n\\t\\tfloat occlusion = 1.0;\\n\\t\\tvec2 distribution = texture2DDistribution( shadow, uv );\\n\\t\\tfloat hard_shadow = step( compare , distribution.x );\\n\\t\\tif (hard_shadow != 1.0 ) {\\n\\t\\t\\tfloat distance = compare - distribution.x ;\\n\\t\\t\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\n\\t\\t\\tfloat softness_probability = variance / (variance + distance * distance );\\t\\t\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\t\\t\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\n\\t\\t}\\n\\t\\treturn occlusion;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\\n\\t\\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx2 = dx0 / 2.0;\\n\\t\\t\\tfloat dy2 = dy0 / 2.0;\\n\\t\\t\\tfloat dx3 = dx1 / 2.0;\\n\\t\\t\\tfloat dy3 = dy1 / 2.0;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 17.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx = texelSize.x;\\n\\t\\t\\tfloat dy = texelSize.y;\\n\\t\\t\\tvec2 uv = shadowCoord.xy;\\n\\t\\t\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\n\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.x ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t f.y ) +\\n\\t\\t\\t\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\n\\t\\t\\t\\t\\t\\t f.x ),\\n\\t\\t\\t\\t\\t f.y )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\t\\n\\t\\tfloat lightToPositionLength = length( lightToPosition );\\n\\t\\tif ( lightToPositionLength - shadowCameraFar <= 0.0 && lightToPositionLength - shadowCameraNear >= 0.0 ) {\\n\\t\\t\\tfloat dp = ( lightToPositionLength - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\t\\tdp += shadowBias;\\n\\t\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\t\\tshadow = (\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tshadow = texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn mix( 1.0, shadow, shadowIntensity );\\n\\t}\\n#endif\";\n\nvar shadowmap_pars_vertex = \"#if NUM_SPOT_LIGHT_COORDS > 0\\n\\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\\n\\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\\n#endif\\n#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t\\tstruct DirectionalLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\t\\tstruct SpotLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t};\\n\\t\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t\\tstruct PointLightShadow {\\n\\t\\t\\tfloat shadowIntensity;\\n\\t\\t\\tfloat shadowBias;\\n\\t\\t\\tfloat shadowNormalBias;\\n\\t\\t\\tfloat shadowRadius;\\n\\t\\t\\tvec2 shadowMapSize;\\n\\t\\t\\tfloat shadowCameraNear;\\n\\t\\t\\tfloat shadowCameraFar;\\n\\t\\t};\\n\\t\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\n\\t#endif\\n#endif\";\n\nvar shadowmap_vertex = \"#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\\n\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\tvec4 shadowWorldPosition;\\n#endif\\n#if defined( USE_SHADOWMAP )\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\\n#if NUM_SPOT_LIGHT_COORDS > 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition;\\n\\t\\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\t\\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\\n\\t\\t#endif\\n\\t\\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\";\n\nvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\";\n\nvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\nvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\tuniform highp sampler2D boneTexture;\\n\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\tint size = textureSize( boneTexture, 0 ).x;\\n\\t\\tint j = int( i ) * 4;\\n\\t\\tint x = j % size;\\n\\t\\tint y = j / size;\\n\\t\\tvec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 );\\n\\t\\tvec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 );\\n\\t\\tvec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 );\\n\\t\\tvec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 );\\n\\t\\treturn mat4( v1, v2, v3, v4 );\\n\\t}\\n#endif\";\n\nvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\";\n\nvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n\\t#ifdef USE_TANGENT\\n\\t\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#endif\\n#endif\";\n\nvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\nvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\nvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\";\n\nvar tonemapping_pars_fragment = \"#ifndef saturate\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn saturate( toneMappingExposure * color );\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\nvec3 RRTAndODTFit( vec3 v ) {\\n\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\n\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\n\\treturn a / b;\\n}\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\n\\tconst mat3 ACESInputMat = mat3(\\n\\t\\tvec3( 0.59719, 0.07600, 0.02840 ),\\t\\tvec3( 0.35458, 0.90834, 0.13383 ),\\n\\t\\tvec3( 0.04823, 0.01566, 0.83777 )\\n\\t);\\n\\tconst mat3 ACESOutputMat = mat3(\\n\\t\\tvec3( 1.60475, -0.10208, -0.00327 ),\\t\\tvec3( -0.53108, 1.10813, -0.07276 ),\\n\\t\\tvec3( -0.07367, -0.00605, 1.07602 )\\n\\t);\\n\\tcolor *= toneMappingExposure / 0.6;\\n\\tcolor = ACESInputMat * color;\\n\\tcolor = RRTAndODTFit( color );\\n\\tcolor = ACESOutputMat * color;\\n\\treturn saturate( color );\\n}\\nconst mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3(\\n\\tvec3( 1.6605, - 0.1246, - 0.0182 ),\\n\\tvec3( - 0.5876, 1.1329, - 0.1006 ),\\n\\tvec3( - 0.0728, - 0.0083, 1.1187 )\\n);\\nconst mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3(\\n\\tvec3( 0.6274, 0.0691, 0.0164 ),\\n\\tvec3( 0.3293, 0.9195, 0.0880 ),\\n\\tvec3( 0.0433, 0.0113, 0.8956 )\\n);\\nvec3 agxDefaultContrastApprox( vec3 x ) {\\n\\tvec3 x2 = x * x;\\n\\tvec3 x4 = x2 * x2;\\n\\treturn + 15.5 * x4 * x2\\n\\t\\t- 40.14 * x4 * x\\n\\t\\t+ 31.96 * x4\\n\\t\\t- 6.868 * x2 * x\\n\\t\\t+ 0.4298 * x2\\n\\t\\t+ 0.1191 * x\\n\\t\\t- 0.00232;\\n}\\nvec3 AgXToneMapping( vec3 color ) {\\n\\tconst mat3 AgXInsetMatrix = mat3(\\n\\t\\tvec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ),\\n\\t\\tvec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ),\\n\\t\\tvec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 )\\n\\t);\\n\\tconst mat3 AgXOutsetMatrix = mat3(\\n\\t\\tvec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ),\\n\\t\\tvec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ),\\n\\t\\tvec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 )\\n\\t);\\n\\tconst float AgxMinEv = - 12.47393;\\tconst float AgxMaxEv = 4.026069;\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = LINEAR_SRGB_TO_LINEAR_REC2020 * color;\\n\\tcolor = AgXInsetMatrix * color;\\n\\tcolor = max( color, 1e-10 );\\tcolor = log2( color );\\n\\tcolor = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv );\\n\\tcolor = clamp( color, 0.0, 1.0 );\\n\\tcolor = agxDefaultContrastApprox( color );\\n\\tcolor = AgXOutsetMatrix * color;\\n\\tcolor = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) );\\n\\tcolor = LINEAR_REC2020_TO_LINEAR_SRGB * color;\\n\\tcolor = clamp( color, 0.0, 1.0 );\\n\\treturn color;\\n}\\nvec3 NeutralToneMapping( vec3 color ) {\\n\\tconst float StartCompression = 0.8 - 0.04;\\n\\tconst float Desaturation = 0.15;\\n\\tcolor *= toneMappingExposure;\\n\\tfloat x = min( color.r, min( color.g, color.b ) );\\n\\tfloat offset = x < 0.08 ? x - 6.25 * x * x : 0.04;\\n\\tcolor -= offset;\\n\\tfloat peak = max( color.r, max( color.g, color.b ) );\\n\\tif ( peak < StartCompression ) return color;\\n\\tfloat d = 1. - StartCompression;\\n\\tfloat newPeak = 1. - d * d / ( peak + d - StartCompression );\\n\\tcolor *= newPeak / peak;\\n\\tfloat g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. );\\n\\treturn mix( color, vec3( newPeak ), g );\\n}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\";\n\nvar transmission_fragment = \"#ifdef USE_TRANSMISSION\\n\\tmaterial.transmission = transmission;\\n\\tmaterial.transmissionAlpha = 1.0;\\n\\tmaterial.thickness = thickness;\\n\\tmaterial.attenuationDistance = attenuationDistance;\\n\\tmaterial.attenuationColor = attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\tvec4 transmitted = getIBLVolumeRefraction(\\n\\t\\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness,\\n\\t\\tmaterial.attenuationColor, material.attenuationDistance );\\n\\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission );\\n\\ttotalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission );\\n#endif\";\n\nvar transmission_pars_fragment = \"#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform float attenuationDistance;\\n\\tuniform vec3 attenuationColor;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\tuniform sampler2D transmissionMap;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tuniform sampler2D thicknessMap;\\n\\t#endif\\n\\tuniform vec2 transmissionSamplerSize;\\n\\tuniform sampler2D transmissionSamplerMap;\\n\\tuniform mat4 modelMatrix;\\n\\tuniform mat4 projectionMatrix;\\n\\tvarying vec3 vWorldPosition;\\n\\tfloat w0( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w1( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 );\\n\\t}\\n\\tfloat w2( float a ){\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\\n\\t}\\n\\tfloat w3( float a ) {\\n\\t\\treturn ( 1.0 / 6.0 ) * ( a * a * a );\\n\\t}\\n\\tfloat g0( float a ) {\\n\\t\\treturn w0( a ) + w1( a );\\n\\t}\\n\\tfloat g1( float a ) {\\n\\t\\treturn w2( a ) + w3( a );\\n\\t}\\n\\tfloat h0( float a ) {\\n\\t\\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\\n\\t}\\n\\tfloat h1( float a ) {\\n\\t\\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\\n\\t}\\n\\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\\n\\t\\tuv = uv * texelSize.zw + 0.5;\\n\\t\\tvec2 iuv = floor( uv );\\n\\t\\tvec2 fuv = fract( uv );\\n\\t\\tfloat g0x = g0( fuv.x );\\n\\t\\tfloat g1x = g1( fuv.x );\\n\\t\\tfloat h0x = h0( fuv.x );\\n\\t\\tfloat h1x = h1( fuv.x );\\n\\t\\tfloat h0y = h0( fuv.y );\\n\\t\\tfloat h1y = h1( fuv.y );\\n\\t\\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\\n\\t\\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\\n\\t\\t\\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\\n\\t}\\n\\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\\n\\t\\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\\n\\t\\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\\n\\t\\tvec2 fLodSizeInv = 1.0 / fLodSize;\\n\\t\\tvec2 cLodSizeInv = 1.0 / cLodSize;\\n\\t\\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\\n\\t\\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\\n\\t\\treturn mix( fSample, cSample, fract( lod ) );\\n\\t}\\n\\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\\n\\t\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\n\\t\\tvec3 modelScale;\\n\\t\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\n\\t\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\n\\t\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\n\\t\\treturn normalize( refractionVector ) * thickness * modelScale;\\n\\t}\\n\\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\\n\\t\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\n\\t}\\n\\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\\n\\t\\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\t\\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\\n\\t}\\n\\tvec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tif ( isinf( attenuationDistance ) ) {\\n\\t\\t\\treturn vec3( 1.0 );\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\t\\t\\treturn transmittance;\\n\\t\\t}\\n\\t}\\n\\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\\n\\t\\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\\n\\t\\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness,\\n\\t\\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tvec4 transmittedLight;\\n\\t\\tvec3 transmittance;\\n\\t\\t#ifdef USE_DISPERSION\\n\\t\\t\\tfloat halfSpread = ( ior - 1.0 ) * 0.025 * dispersion;\\n\\t\\t\\tvec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread );\\n\\t\\t\\tfor ( int i = 0; i < 3; i ++ ) {\\n\\t\\t\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix );\\n\\t\\t\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\t\\n\\t\\t\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\t\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\t\\t\\trefractionCoords += 1.0;\\n\\t\\t\\t\\trefractionCoords /= 2.0;\\n\\t\\t\\n\\t\\t\\t\\tvec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] );\\n\\t\\t\\t\\ttransmittedLight[ i ] = transmissionSample[ i ];\\n\\t\\t\\t\\ttransmittedLight.a += transmissionSample.a;\\n\\t\\t\\t\\ttransmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ];\\n\\t\\t\\t}\\n\\t\\t\\ttransmittedLight.a /= 3.0;\\n\\t\\t\\n\\t\\t#else\\n\\t\\t\\n\\t\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\t\\trefractionCoords += 1.0;\\n\\t\\t\\trefractionCoords /= 2.0;\\n\\t\\t\\ttransmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\t\\t\\ttransmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\t\\t\\n\\t\\t#endif\\n\\t\\tvec3 attenuatedColor = transmittance * transmittedLight.rgb;\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\t\\tfloat transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0;\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor );\\n\\t}\\n#endif\";\n\nvar uv_pars_fragment = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif\";\n\nvar uv_pars_vertex = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvarying vec2 vUv;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform mat3 mapTransform;\\n\\tvarying vec2 vMapUv;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform mat3 alphaMapTransform;\\n\\tvarying vec2 vAlphaMapUv;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tuniform mat3 lightMapTransform;\\n\\tvarying vec2 vLightMapUv;\\n#endif\\n#ifdef USE_AOMAP\\n\\tuniform mat3 aoMapTransform;\\n\\tvarying vec2 vAoMapUv;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tuniform mat3 bumpMapTransform;\\n\\tvarying vec2 vBumpMapUv;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tuniform mat3 normalMapTransform;\\n\\tvarying vec2 vNormalMapUv;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tuniform mat3 displacementMapTransform;\\n\\tvarying vec2 vDisplacementMapUv;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tuniform mat3 emissiveMapTransform;\\n\\tvarying vec2 vEmissiveMapUv;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tuniform mat3 metalnessMapTransform;\\n\\tvarying vec2 vMetalnessMapUv;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tuniform mat3 roughnessMapTransform;\\n\\tvarying vec2 vRoughnessMapUv;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tuniform mat3 anisotropyMapTransform;\\n\\tvarying vec2 vAnisotropyMapUv;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tuniform mat3 clearcoatMapTransform;\\n\\tvarying vec2 vClearcoatMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform mat3 clearcoatNormalMapTransform;\\n\\tvarying vec2 vClearcoatNormalMapUv;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform mat3 clearcoatRoughnessMapTransform;\\n\\tvarying vec2 vClearcoatRoughnessMapUv;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tuniform mat3 sheenColorMapTransform;\\n\\tvarying vec2 vSheenColorMapUv;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tuniform mat3 sheenRoughnessMapTransform;\\n\\tvarying vec2 vSheenRoughnessMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tuniform mat3 iridescenceMapTransform;\\n\\tvarying vec2 vIridescenceMapUv;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tuniform mat3 iridescenceThicknessMapTransform;\\n\\tvarying vec2 vIridescenceThicknessMapUv;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tuniform mat3 specularMapTransform;\\n\\tvarying vec2 vSpecularMapUv;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tuniform mat3 specularColorMapTransform;\\n\\tvarying vec2 vSpecularColorMapUv;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tuniform mat3 specularIntensityMapTransform;\\n\\tvarying vec2 vSpecularIntensityMapUv;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tuniform mat3 transmissionMapTransform;\\n\\tvarying vec2 vTransmissionMapUv;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tuniform mat3 thicknessMapTransform;\\n\\tvarying vec2 vThicknessMapUv;\\n#endif\";\n\nvar uv_vertex = \"#if defined( USE_UV ) || defined( USE_ANISOTROPY )\\n\\tvUv = vec3( uv, 1 ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_LIGHTMAP\\n\\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_AOMAP\\n\\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_BUMPMAP\\n\\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_NORMALMAP\\n\\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_DISPLACEMENTMAP\\n\\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_EMISSIVEMAP\\n\\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_METALNESSMAP\\n\\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ROUGHNESSMAP\\n\\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_ANISOTROPYMAP\\n\\tvAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOATMAP\\n\\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCEMAP\\n\\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\\n\\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_COLORMAP\\n\\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULARMAP\\n\\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_COLORMAP\\n\\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_SPECULAR_INTENSITYMAP\\n\\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_TRANSMISSIONMAP\\n\\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\\n#endif\\n#ifdef USE_THICKNESSMAP\\n\\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\\n#endif\";\n\nvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_BATCHING\\n\\t\\tworldPosition = batchingMatrix * worldPosition;\\n\\t#endif\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\";\n\nconst vertex$h = \"varying vec2 vUv;\\nuniform mat3 uvTransform;\\nvoid main() {\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\n}\";\n\nconst fragment$h = \"uniform sampler2D t2D;\\nuniform float backgroundIntensity;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\ttexColor = vec4( mix( pow( texColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), texColor.rgb * 0.0773993808, vec3( lessThanEqual( texColor.rgb, vec3( 0.04045 ) ) ) ), texColor.w );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$g = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$g = \"#ifdef ENVMAP_TYPE_CUBE\\n\\tuniform samplerCube envMap;\\n#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\tuniform sampler2D envMap;\\n#endif\\nuniform float flipEnvMap;\\nuniform float backgroundBlurriness;\\nuniform float backgroundIntensity;\\nuniform mat3 backgroundRotation;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 texColor = textureCube( envMap, backgroundRotation * vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness );\\n\\t#else\\n\\t\\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t#endif\\n\\ttexColor.rgb *= backgroundIntensity;\\n\\tgl_FragColor = texColor;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$f = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\";\n\nconst fragment$f = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\nvoid main() {\\n\\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\\n\\tgl_FragColor = texColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$e = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\";\n\nconst fragment$e = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\n\\t#elif DEPTH_PACKING == 3202\\n\\t\\tgl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 );\\n\\t#elif DEPTH_PACKING == 3203\\n\\t\\tgl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 );\\n\\t#endif\\n}\";\n\nconst vertex$d = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\";\n\nconst fragment$d = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\";\n\nconst vertex$c = \"varying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$c = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$b = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$b = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$a = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$a = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$9 = \"#define LAMBERT\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$9 = \"#define LAMBERT\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$8 = \"#define MATCAP\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n}\";\n\nconst fragment$8 = \"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 viewDir = normalize( vViewPosition );\\n\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\n\\tvec3 y = cross( viewDir, x );\\n\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\n\\t#ifdef USE_MATCAP\\n\\t\\tvec4 matcapColor = texture2D( matcap, uv );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$7 = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$7 = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), diffuseColor.a );\\n\\t#ifdef OPAQUE\\n\\t\\tgl_FragColor.a = 1.0;\\n\\t#endif\\n}\";\n\nconst vertex$6 = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$6 = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$5 = \"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec3 vWorldPosition;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition.xyz;\\n#endif\\n}\";\n\nconst fragment$5 = \"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define USE_SPECULAR\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef IOR\\n\\tuniform float ior;\\n#endif\\n#ifdef USE_SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularColor;\\n\\t#ifdef USE_SPECULAR_COLORMAP\\n\\t\\tuniform sampler2D specularColorMap;\\n\\t#endif\\n\\t#ifdef USE_SPECULAR_INTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_DISPERSION\\n\\tuniform float dispersion;\\n#endif\\n#ifdef USE_IRIDESCENCE\\n\\tuniform float iridescence;\\n\\tuniform float iridescenceIOR;\\n\\tuniform float iridescenceThicknessMinimum;\\n\\tuniform float iridescenceThicknessMaximum;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenColor;\\n\\tuniform float sheenRoughness;\\n\\t#ifdef USE_SHEEN_COLORMAP\\n\\t\\tuniform sampler2D sheenColorMap;\\n\\t#endif\\n\\t#ifdef USE_SHEEN_ROUGHNESSMAP\\n\\t\\tuniform sampler2D sheenRoughnessMap;\\n\\t#endif\\n#endif\\n#ifdef USE_ANISOTROPY\\n\\tuniform vec2 anisotropyVector;\\n\\t#ifdef USE_ANISOTROPYMAP\\n\\t\\tuniform sampler2D anisotropyMap;\\n\\t#endif\\n#endif\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include \\n\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\n\\t#ifdef USE_SHEEN\\n\\t\\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\\n\\t\\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecularDirect + sheenSpecularIndirect;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) );\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$4 = \"#define TOON\\nvarying vec3 vViewPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$4 = \"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$3 = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#ifdef USE_POINTS_UV\\n\\tvarying vec2 vUv;\\n\\tuniform mat3 uvTransform;\\n#endif\\nvoid main() {\\n\\t#ifdef USE_POINTS_UV\\n\\t\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_PointSize = size;\\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$3 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$2 = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$2 = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst vertex$1 = \"uniform float rotation;\\nuniform vec2 center;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\tvec2 scale;\\n\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\n\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\n\\t#ifndef USE_SIZEATTENUATION\\n\\t\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\n\\t\\tif ( isPerspective ) scale *= - mvPosition.z;\\n\\t#endif\\n\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\n\\tvec2 rotatedPosition;\\n\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\n\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\n\\tmvPosition.xy += rotatedPosition;\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst fragment$1 = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\";\n\nconst ShaderChunk = {\n\talphahash_fragment: alphahash_fragment,\n\talphahash_pars_fragment: alphahash_pars_fragment,\n\talphamap_fragment: alphamap_fragment,\n\talphamap_pars_fragment: alphamap_pars_fragment,\n\talphatest_fragment: alphatest_fragment,\n\talphatest_pars_fragment: alphatest_pars_fragment,\n\taomap_fragment: aomap_fragment,\n\taomap_pars_fragment: aomap_pars_fragment,\n\tbatching_pars_vertex: batching_pars_vertex,\n\tbatching_vertex: batching_vertex,\n\tbegin_vertex: begin_vertex,\n\tbeginnormal_vertex: beginnormal_vertex,\n\tbsdfs: bsdfs,\n\tiridescence_fragment: iridescence_fragment,\n\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\tclipping_planes_fragment: clipping_planes_fragment,\n\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\tclipping_planes_vertex: clipping_planes_vertex,\n\tcolor_fragment: color_fragment,\n\tcolor_pars_fragment: color_pars_fragment,\n\tcolor_pars_vertex: color_pars_vertex,\n\tcolor_vertex: color_vertex,\n\tcommon: common,\n\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\tdefaultnormal_vertex: defaultnormal_vertex,\n\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\tdisplacementmap_vertex: displacementmap_vertex,\n\temissivemap_fragment: emissivemap_fragment,\n\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\tcolorspace_fragment: colorspace_fragment,\n\tcolorspace_pars_fragment: colorspace_pars_fragment,\n\tenvmap_fragment: envmap_fragment,\n\tenvmap_common_pars_fragment: envmap_common_pars_fragment,\n\tenvmap_pars_fragment: envmap_pars_fragment,\n\tenvmap_pars_vertex: envmap_pars_vertex,\n\tenvmap_physical_pars_fragment: envmap_physical_pars_fragment,\n\tenvmap_vertex: envmap_vertex,\n\tfog_vertex: fog_vertex,\n\tfog_pars_vertex: fog_pars_vertex,\n\tfog_fragment: fog_fragment,\n\tfog_pars_fragment: fog_pars_fragment,\n\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\tlightmap_pars_fragment: lightmap_pars_fragment,\n\tlights_lambert_fragment: lights_lambert_fragment,\n\tlights_lambert_pars_fragment: lights_lambert_pars_fragment,\n\tlights_pars_begin: lights_pars_begin,\n\tlights_toon_fragment: lights_toon_fragment,\n\tlights_toon_pars_fragment: lights_toon_pars_fragment,\n\tlights_phong_fragment: lights_phong_fragment,\n\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\tlights_physical_fragment: lights_physical_fragment,\n\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\tlights_fragment_begin: lights_fragment_begin,\n\tlights_fragment_maps: lights_fragment_maps,\n\tlights_fragment_end: lights_fragment_end,\n\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\tmap_fragment: map_fragment,\n\tmap_pars_fragment: map_pars_fragment,\n\tmap_particle_fragment: map_particle_fragment,\n\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\tmetalnessmap_fragment: metalnessmap_fragment,\n\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\tmorphinstance_vertex: morphinstance_vertex,\n\tmorphcolor_vertex: morphcolor_vertex,\n\tmorphnormal_vertex: morphnormal_vertex,\n\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\tmorphtarget_vertex: morphtarget_vertex,\n\tnormal_fragment_begin: normal_fragment_begin,\n\tnormal_fragment_maps: normal_fragment_maps,\n\tnormal_pars_fragment: normal_pars_fragment,\n\tnormal_pars_vertex: normal_pars_vertex,\n\tnormal_vertex: normal_vertex,\n\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\tclearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,\n\tclearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,\n\tclearcoat_pars_fragment: clearcoat_pars_fragment,\n\tiridescence_pars_fragment: iridescence_pars_fragment,\n\topaque_fragment: opaque_fragment,\n\tpacking: packing,\n\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\tproject_vertex: project_vertex,\n\tdithering_fragment: dithering_fragment,\n\tdithering_pars_fragment: dithering_pars_fragment,\n\troughnessmap_fragment: roughnessmap_fragment,\n\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\tshadowmap_vertex: shadowmap_vertex,\n\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\tskinbase_vertex: skinbase_vertex,\n\tskinning_pars_vertex: skinning_pars_vertex,\n\tskinning_vertex: skinning_vertex,\n\tskinnormal_vertex: skinnormal_vertex,\n\tspecularmap_fragment: specularmap_fragment,\n\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\ttonemapping_fragment: tonemapping_fragment,\n\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\ttransmission_fragment: transmission_fragment,\n\ttransmission_pars_fragment: transmission_pars_fragment,\n\tuv_pars_fragment: uv_pars_fragment,\n\tuv_pars_vertex: uv_pars_vertex,\n\tuv_vertex: uv_vertex,\n\tworldpos_vertex: worldpos_vertex,\n\n\tbackground_vert: vertex$h,\n\tbackground_frag: fragment$h,\n\tbackgroundCube_vert: vertex$g,\n\tbackgroundCube_frag: fragment$g,\n\tcube_vert: vertex$f,\n\tcube_frag: fragment$f,\n\tdepth_vert: vertex$e,\n\tdepth_frag: fragment$e,\n\tdistanceRGBA_vert: vertex$d,\n\tdistanceRGBA_frag: fragment$d,\n\tequirect_vert: vertex$c,\n\tequirect_frag: fragment$c,\n\tlinedashed_vert: vertex$b,\n\tlinedashed_frag: fragment$b,\n\tmeshbasic_vert: vertex$a,\n\tmeshbasic_frag: fragment$a,\n\tmeshlambert_vert: vertex$9,\n\tmeshlambert_frag: fragment$9,\n\tmeshmatcap_vert: vertex$8,\n\tmeshmatcap_frag: fragment$8,\n\tmeshnormal_vert: vertex$7,\n\tmeshnormal_frag: fragment$7,\n\tmeshphong_vert: vertex$6,\n\tmeshphong_frag: fragment$6,\n\tmeshphysical_vert: vertex$5,\n\tmeshphysical_frag: fragment$5,\n\tmeshtoon_vert: vertex$4,\n\tmeshtoon_frag: fragment$4,\n\tpoints_vert: vertex$3,\n\tpoints_frag: fragment$3,\n\tshadow_vert: vertex$2,\n\tshadow_frag: fragment$2,\n\tsprite_vert: vertex$1,\n\tsprite_frag: fragment$1\n};\n\n/**\n * Uniforms library for shared webgl shaders\n */\n\nconst UniformsLib = {\n\n\tcommon: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\n\t\tmap: { value: null },\n\t\tmapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\n\t\talphaTest: { value: 0 }\n\n\t},\n\n\tspecularmap: {\n\n\t\tspecularMap: { value: null },\n\t\tspecularMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tenvmap: {\n\n\t\tenvMap: { value: null },\n\t\tenvMapRotation: { value: /*@__PURE__*/ new Matrix3() },\n\t\tflipEnvMap: { value: - 1 },\n\t\treflectivity: { value: 1.0 }, // basic, lambert, phong\n\t\tior: { value: 1.5 }, // physical\n\t\trefractionRatio: { value: 0.98 }, // basic, lambert, phong\n\n\t},\n\n\taomap: {\n\n\t\taoMap: { value: null },\n\t\taoMapIntensity: { value: 1 },\n\t\taoMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tlightmap: {\n\n\t\tlightMap: { value: null },\n\t\tlightMapIntensity: { value: 1 },\n\t\tlightMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tbumpmap: {\n\n\t\tbumpMap: { value: null },\n\t\tbumpMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tbumpScale: { value: 1 }\n\n\t},\n\n\tnormalmap: {\n\n\t\tnormalMap: { value: null },\n\t\tnormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tnormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }\n\n\t},\n\n\tdisplacementmap: {\n\n\t\tdisplacementMap: { value: null },\n\t\tdisplacementMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\tdisplacementScale: { value: 1 },\n\t\tdisplacementBias: { value: 0 }\n\n\t},\n\n\temissivemap: {\n\n\t\temissiveMap: { value: null },\n\t\temissiveMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tmetalnessmap: {\n\n\t\tmetalnessMap: { value: null },\n\t\tmetalnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\troughnessmap: {\n\n\t\troughnessMap: { value: null },\n\t\troughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tgradientmap: {\n\n\t\tgradientMap: { value: null }\n\n\t},\n\n\tfog: {\n\n\t\tfogDensity: { value: 0.00025 },\n\t\tfogNear: { value: 1 },\n\t\tfogFar: { value: 2000 },\n\t\tfogColor: { value: /*@__PURE__*/ new Color( 0xffffff ) }\n\n\t},\n\n\tlights: {\n\n\t\tambientLightColor: { value: [] },\n\n\t\tlightProbe: { value: [] },\n\n\t\tdirectionalLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tcolor: {}\n\t\t} },\n\n\t\tdirectionalLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tdirectionalShadowMap: { value: [] },\n\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\tspotLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdirection: {},\n\t\t\tdistance: {},\n\t\t\tconeCos: {},\n\t\t\tpenumbraCos: {},\n\t\t\tdecay: {}\n\t\t} },\n\n\t\tspotLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {}\n\t\t} },\n\n\t\tspotLightMap: { value: [] },\n\t\tspotShadowMap: { value: [] },\n\t\tspotLightMatrix: { value: [] },\n\n\t\tpointLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\tdecay: {},\n\t\t\tdistance: {}\n\t\t} },\n\n\t\tpointLightShadows: { value: [], properties: {\n\t\t\tshadowIntensity: 1,\n\t\t\tshadowBias: {},\n\t\t\tshadowNormalBias: {},\n\t\t\tshadowRadius: {},\n\t\t\tshadowMapSize: {},\n\t\t\tshadowCameraNear: {},\n\t\t\tshadowCameraFar: {}\n\t\t} },\n\n\t\tpointShadowMap: { value: [] },\n\t\tpointShadowMatrix: { value: [] },\n\n\t\themisphereLights: { value: [], properties: {\n\t\t\tdirection: {},\n\t\t\tskyColor: {},\n\t\t\tgroundColor: {}\n\t\t} },\n\n\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\trectAreaLights: { value: [], properties: {\n\t\t\tcolor: {},\n\t\t\tposition: {},\n\t\t\twidth: {},\n\t\t\theight: {}\n\t\t} },\n\n\t\tltc_1: { value: null },\n\t\tltc_2: { value: null }\n\n\t},\n\n\tpoints: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tsize: { value: 1.0 },\n\t\tscale: { value: 1.0 },\n\t\tmap: { value: null },\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaTest: { value: 0 },\n\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() }\n\n\t},\n\n\tsprite: {\n\n\t\tdiffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },\n\t\topacity: { value: 1.0 },\n\t\tcenter: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) },\n\t\trotation: { value: 0.0 },\n\t\tmap: { value: null },\n\t\tmapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaMap: { value: null },\n\t\talphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\talphaTest: { value: 0 }\n\n\t}\n\n};\n\nconst ShaderLib = {\n\n\tbasic: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t},\n\n\tlambert: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t},\n\n\tphong: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.specularmap,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\tspecular: { value: /*@__PURE__*/ new Color( 0x111111 ) },\n\t\t\t\tshininess: { value: 30 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t},\n\n\tstandard: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.envmap,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.roughnessmap,\n\t\t\tUniformsLib.metalnessmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\t\troughness: { value: 1.0 },\n\t\t\t\tmetalness: { value: 0.0 },\n\t\t\t\tenvMapIntensity: { value: 1 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t},\n\n\ttoon: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.aomap,\n\t\t\tUniformsLib.lightmap,\n\t\t\tUniformsLib.emissivemap,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.gradientmap,\n\t\t\tUniformsLib.fog,\n\t\t\tUniformsLib.lights,\n\t\t\t{\n\t\t\t\temissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshtoon_vert,\n\t\tfragmentShader: ShaderChunk.meshtoon_frag\n\n\t},\n\n\tmatcap: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tmatcap: { value: null }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshmatcap_vert,\n\t\tfragmentShader: ShaderChunk.meshmatcap_frag\n\n\t},\n\n\tpoints: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.points,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.points_vert,\n\t\tfragmentShader: ShaderChunk.points_frag\n\n\t},\n\n\tdashed: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tscale: { value: 1 },\n\t\t\t\tdashSize: { value: 1 },\n\t\t\t\ttotalSize: { value: 2 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t},\n\n\tdepth: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.depth_vert,\n\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t},\n\n\tnormal: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.bumpmap,\n\t\t\tUniformsLib.normalmap,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshnormal_vert,\n\t\tfragmentShader: ShaderChunk.meshnormal_frag\n\n\t},\n\n\tsprite: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.sprite,\n\t\t\tUniformsLib.fog\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.sprite_vert,\n\t\tfragmentShader: ShaderChunk.sprite_frag\n\n\t},\n\n\tbackground: {\n\n\t\tuniforms: {\n\t\t\tuvTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tt2D: { value: null },\n\t\t\tbackgroundIntensity: { value: 1 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.background_vert,\n\t\tfragmentShader: ShaderChunk.background_frag\n\n\t},\n\n\tbackgroundCube: {\n\n\t\tuniforms: {\n\t\t\tenvMap: { value: null },\n\t\t\tflipEnvMap: { value: - 1 },\n\t\t\tbackgroundBlurriness: { value: 0 },\n\t\t\tbackgroundIntensity: { value: 1 },\n\t\t\tbackgroundRotation: { value: /*@__PURE__*/ new Matrix3() }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.backgroundCube_vert,\n\t\tfragmentShader: ShaderChunk.backgroundCube_frag\n\n\t},\n\n\tcube: {\n\n\t\tuniforms: {\n\t\t\ttCube: { value: null },\n\t\t\ttFlip: { value: - 1 },\n\t\t\topacity: { value: 1.0 }\n\t\t},\n\n\t\tvertexShader: ShaderChunk.cube_vert,\n\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t},\n\n\tequirect: {\n\n\t\tuniforms: {\n\t\t\ttEquirect: { value: null },\n\t\t},\n\n\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t},\n\n\tdistanceRGBA: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.common,\n\t\t\tUniformsLib.displacementmap,\n\t\t\t{\n\t\t\t\treferencePosition: { value: /*@__PURE__*/ new Vector3() },\n\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t},\n\n\tshadow: {\n\n\t\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\t\tUniformsLib.lights,\n\t\t\tUniformsLib.fog,\n\t\t\t{\n\t\t\t\tcolor: { value: /*@__PURE__*/ new Color( 0x00000 ) },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t}\n\n};\n\nShaderLib.physical = {\n\n\tuniforms: /*@__PURE__*/ mergeUniforms( [\n\t\tShaderLib.standard.uniforms,\n\t\t{\n\t\t\tclearcoat: { value: 0 },\n\t\t\tclearcoatMap: { value: null },\n\t\t\tclearcoatMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tclearcoatNormalMap: { value: null },\n\t\t\tclearcoatNormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tclearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) },\n\t\t\tclearcoatRoughness: { value: 0 },\n\t\t\tclearcoatRoughnessMap: { value: null },\n\t\t\tclearcoatRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tdispersion: { value: 0 },\n\t\t\tiridescence: { value: 0 },\n\t\t\tiridescenceMap: { value: null },\n\t\t\tiridescenceMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tiridescenceIOR: { value: 1.3 },\n\t\t\tiridescenceThicknessMinimum: { value: 100 },\n\t\t\tiridescenceThicknessMaximum: { value: 400 },\n\t\t\tiridescenceThicknessMap: { value: null },\n\t\t\tiridescenceThicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tsheen: { value: 0 },\n\t\t\tsheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tsheenColorMap: { value: null },\n\t\t\tsheenColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tsheenRoughness: { value: 1 },\n\t\t\tsheenRoughnessMap: { value: null },\n\t\t\tsheenRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\ttransmission: { value: 0 },\n\t\t\ttransmissionMap: { value: null },\n\t\t\ttransmissionMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\ttransmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() },\n\t\t\ttransmissionSamplerMap: { value: null },\n\t\t\tthickness: { value: 0 },\n\t\t\tthicknessMap: { value: null },\n\t\t\tthicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tattenuationDistance: { value: 0 },\n\t\t\tattenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },\n\t\t\tspecularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) },\n\t\t\tspecularColorMap: { value: null },\n\t\t\tspecularColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tspecularIntensity: { value: 1 },\n\t\t\tspecularIntensityMap: { value: null },\n\t\t\tspecularIntensityMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t\tanisotropyVector: { value: /*@__PURE__*/ new Vector2() },\n\t\t\tanisotropyMap: { value: null },\n\t\t\tanisotropyMapTransform: { value: /*@__PURE__*/ new Matrix3() },\n\t\t}\n\t] ),\n\n\tvertexShader: ShaderChunk.meshphysical_vert,\n\tfragmentShader: ShaderChunk.meshphysical_frag\n\n};\n\nconst _rgb = { r: 0, b: 0, g: 0 };\nconst _e1$1 = /*@__PURE__*/ new Euler();\nconst _m1$1 = /*@__PURE__*/ new Matrix4();\n\nfunction WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {\n\n\tconst clearColor = new Color( 0x000000 );\n\tlet clearAlpha = alpha === true ? 0 : 1;\n\n\tlet planeMesh;\n\tlet boxMesh;\n\n\tlet currentBackground = null;\n\tlet currentBackgroundVersion = 0;\n\tlet currentTonemapping = null;\n\n\tfunction getBackground( scene ) {\n\n\t\tlet background = scene.isScene === true ? scene.background : null;\n\n\t\tif ( background && background.isTexture ) {\n\n\t\t\tconst usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background\n\t\t\tbackground = ( usePMREM ? cubeuvmaps : cubemaps ).get( background );\n\n\t\t}\n\n\t\treturn background;\n\n\t}\n\n\tfunction render( scene ) {\n\n\t\tlet forceClear = false;\n\t\tconst background = getBackground( scene );\n\n\t\tif ( background === null ) {\n\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t} else if ( background && background.isColor ) {\n\n\t\t\tsetClear( background, 1 );\n\t\t\tforceClear = true;\n\n\t\t}\n\n\t\tconst environmentBlendMode = renderer.xr.getEnvironmentBlendMode();\n\n\t\tif ( environmentBlendMode === 'additive' ) {\n\n\t\t\tstate.buffers.color.setClear( 0, 0, 0, 1, premultipliedAlpha );\n\n\t\t} else if ( environmentBlendMode === 'alpha-blend' ) {\n\n\t\t\tstate.buffers.color.setClear( 0, 0, 0, 0, premultipliedAlpha );\n\n\t\t}\n\n\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\t// buffers might not be writable which is required to ensure a correct clear\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t}\n\n\t}\n\n\tfunction addToRenderList( renderList, scene ) {\n\n\t\tconst background = getBackground( scene );\n\n\t\tif ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {\n\n\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\tnew BoxGeometry( 1, 1, 1 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundCubeMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.backgroundCube.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.backgroundCube.fragmentShader,\n\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'normal' );\n\t\t\t\tboxMesh.geometry.deleteAttribute( 'uv' );\n\n\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t};\n\n\t\t\t\t// add \"envMap\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( boxMesh.material, 'envMap', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.envMap.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t}\n\n\t\t\t_e1$1.copy( scene.backgroundRotation );\n\n\t\t\t// accommodate left-handed frame\n\t\t\t_e1$1.x *= - 1; _e1$1.y *= - 1; _e1$1.z *= - 1;\n\n\t\t\tif ( background.isCubeTexture && background.isRenderTargetTexture === false ) {\n\n\t\t\t\t// environment maps which are not cube render targets or PMREMs follow a different convention\n\t\t\t\t_e1$1.y *= - 1;\n\t\t\t\t_e1$1.z *= - 1;\n\n\t\t\t}\n\n\t\t\tboxMesh.material.uniforms.envMap.value = background;\n\t\t\tboxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;\n\t\t\tboxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;\n\t\t\tboxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tboxMesh.material.uniforms.backgroundRotation.value.setFromMatrix4( _m1$1.makeRotationFromEuler( _e1$1 ) );\n\t\t\tboxMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tboxMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tboxMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );\n\n\t\t} else if ( background && background.isTexture ) {\n\n\t\t\tif ( planeMesh === undefined ) {\n\n\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\tnew PlaneGeometry( 2, 2 ),\n\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\tname: 'BackgroundMaterial',\n\t\t\t\t\t\tuniforms: cloneUniforms( ShaderLib.background.uniforms ),\n\t\t\t\t\t\tvertexShader: ShaderLib.background.vertexShader,\n\t\t\t\t\t\tfragmentShader: ShaderLib.background.fragmentShader,\n\t\t\t\t\t\tside: FrontSide,\n\t\t\t\t\t\tdepthTest: false,\n\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\tfog: false\n\t\t\t\t\t} )\n\t\t\t\t);\n\n\t\t\t\tplaneMesh.geometry.deleteAttribute( 'normal' );\n\n\t\t\t\t// add \"map\" material property so the renderer can evaluate it like for built-in materials\n\t\t\t\tObject.defineProperty( planeMesh.material, 'map', {\n\n\t\t\t\t\tget: function () {\n\n\t\t\t\t\t\treturn this.uniforms.t2D.value;\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.t2D.value = background;\n\t\t\tplaneMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;\n\t\t\tplaneMesh.material.toneMapped = ColorManagement.getTransfer( background.colorSpace ) !== SRGBTransfer;\n\n\t\t\tif ( background.matrixAutoUpdate === true ) {\n\n\t\t\t\tbackground.updateMatrix();\n\n\t\t\t}\n\n\t\t\tplaneMesh.material.uniforms.uvTransform.value.copy( background.matrix );\n\n\t\t\tif ( currentBackground !== background ||\n\t\t\t\tcurrentBackgroundVersion !== background.version ||\n\t\t\t\tcurrentTonemapping !== renderer.toneMapping ) {\n\n\t\t\t\tplaneMesh.material.needsUpdate = true;\n\n\t\t\t\tcurrentBackground = background;\n\t\t\t\tcurrentBackgroundVersion = background.version;\n\t\t\t\tcurrentTonemapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t\tplaneMesh.layers.enableAll();\n\n\t\t\t// push to the pre-sorted opaque render list\n\t\t\trenderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );\n\n\t\t}\n\n\t}\n\n\tfunction setClear( color, alpha ) {\n\n\t\tcolor.getRGB( _rgb, getUnlitUniformColorSpace( renderer ) );\n\n\t\tstate.buffers.color.setClear( _rgb.r, _rgb.g, _rgb.b, alpha, premultipliedAlpha );\n\n\t}\n\n\treturn {\n\n\t\tgetClearColor: function () {\n\n\t\t\treturn clearColor;\n\n\t\t},\n\t\tsetClearColor: function ( color, alpha = 1 ) {\n\n\t\t\tclearColor.set( color );\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\tgetClearAlpha: function () {\n\n\t\t\treturn clearAlpha;\n\n\t\t},\n\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\tclearAlpha = alpha;\n\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t},\n\t\trender: render,\n\t\taddToRenderList: addToRenderList\n\n\t};\n\n}\n\nfunction WebGLBindingStates( gl, attributes ) {\n\n\tconst maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\n\tconst bindingStates = {};\n\n\tconst defaultState = createBindingState( null );\n\tlet currentState = defaultState;\n\tlet forceUpdate = false;\n\n\tfunction setup( object, material, program, geometry, index ) {\n\n\t\tlet updateBuffers = false;\n\n\t\tconst state = getBindingState( geometry, program, material );\n\n\t\tif ( currentState !== state ) {\n\n\t\t\tcurrentState = state;\n\t\t\tbindVertexArrayObject( currentState.object );\n\n\t\t}\n\n\t\tupdateBuffers = needsUpdate( object, geometry, program, index );\n\n\t\tif ( updateBuffers ) saveCache( object, geometry, program, index );\n\n\t\tif ( index !== null ) {\n\n\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t}\n\n\t\tif ( updateBuffers || forceUpdate ) {\n\n\t\t\tforceUpdate = false;\n\n\t\t\tsetupVertexAttributes( object, material, program, geometry );\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, attributes.get( index ).buffer );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction createVertexArrayObject() {\n\n\t\treturn gl.createVertexArray();\n\n\t}\n\n\tfunction bindVertexArrayObject( vao ) {\n\n\t\treturn gl.bindVertexArray( vao );\n\n\t}\n\n\tfunction deleteVertexArrayObject( vao ) {\n\n\t\treturn gl.deleteVertexArray( vao );\n\n\t}\n\n\tfunction getBindingState( geometry, program, material ) {\n\n\t\tconst wireframe = ( material.wireframe === true );\n\n\t\tlet programMap = bindingStates[ geometry.id ];\n\n\t\tif ( programMap === undefined ) {\n\n\t\t\tprogramMap = {};\n\t\t\tbindingStates[ geometry.id ] = programMap;\n\n\t\t}\n\n\t\tlet stateMap = programMap[ program.id ];\n\n\t\tif ( stateMap === undefined ) {\n\n\t\t\tstateMap = {};\n\t\t\tprogramMap[ program.id ] = stateMap;\n\n\t\t}\n\n\t\tlet state = stateMap[ wireframe ];\n\n\t\tif ( state === undefined ) {\n\n\t\t\tstate = createBindingState( createVertexArrayObject() );\n\t\t\tstateMap[ wireframe ] = state;\n\n\t\t}\n\n\t\treturn state;\n\n\t}\n\n\tfunction createBindingState( vao ) {\n\n\t\tconst newAttributes = [];\n\t\tconst enabledAttributes = [];\n\t\tconst attributeDivisors = [];\n\n\t\tfor ( let i = 0; i < maxVertexAttributes; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\t\t\tenabledAttributes[ i ] = 0;\n\t\t\tattributeDivisors[ i ] = 0;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\t// for backward compatibility on non-VAO support browser\n\t\t\tgeometry: null,\n\t\t\tprogram: null,\n\t\t\twireframe: false,\n\n\t\t\tnewAttributes: newAttributes,\n\t\t\tenabledAttributes: enabledAttributes,\n\t\t\tattributeDivisors: attributeDivisors,\n\t\t\tobject: vao,\n\t\t\tattributes: {},\n\t\t\tindex: null\n\n\t\t};\n\n\t}\n\n\tfunction needsUpdate( object, geometry, program, index ) {\n\n\t\tconst cachedAttributes = currentState.attributes;\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tconst cachedAttribute = cachedAttributes[ name ];\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cachedAttribute === undefined ) return true;\n\n\t\t\t\tif ( cachedAttribute.attribute !== geometryAttribute ) return true;\n\n\t\t\t\tif ( geometryAttribute && cachedAttribute.data !== geometryAttribute.data ) return true;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( currentState.attributesNum !== attributesNum ) return true;\n\n\t\tif ( currentState.index !== index ) return true;\n\n\t\treturn false;\n\n\t}\n\n\tfunction saveCache( object, geometry, program, index ) {\n\n\t\tconst cache = {};\n\t\tconst attributes = geometry.attributes;\n\t\tlet attributesNum = 0;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet attribute = attributes[ name ];\n\n\t\t\t\tif ( attribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) attribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) attribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tconst data = {};\n\t\t\t\tdata.attribute = attribute;\n\n\t\t\t\tif ( attribute && attribute.data ) {\n\n\t\t\t\t\tdata.data = attribute.data;\n\n\t\t\t\t}\n\n\t\t\t\tcache[ name ] = data;\n\n\t\t\t\tattributesNum ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcurrentState.attributes = cache;\n\t\tcurrentState.attributesNum = attributesNum;\n\n\t\tcurrentState.index = index;\n\n\t}\n\n\tfunction initAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\n\t\tfor ( let i = 0, il = newAttributes.length; i < il; i ++ ) {\n\n\t\t\tnewAttributes[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\tfunction enableAttribute( attribute ) {\n\n\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t}\n\n\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\t\tconst attributeDivisors = currentState.attributeDivisors;\n\n\t\tnewAttributes[ attribute ] = 1;\n\n\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t}\n\n\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\tgl.vertexAttribDivisor( attribute, meshPerAttribute );\n\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t}\n\n\t}\n\n\tfunction disableUnusedAttributes() {\n\n\t\tconst newAttributes = currentState.newAttributes;\n\t\tconst enabledAttributes = currentState.enabledAttributes;\n\n\t\tfor ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {\n\n\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction vertexAttribPointer( index, size, type, normalized, stride, offset, integer ) {\n\n\t\tif ( integer === true ) {\n\n\t\t\tgl.vertexAttribIPointer( index, size, type, stride, offset );\n\n\t\t} else {\n\n\t\t\tgl.vertexAttribPointer( index, size, type, normalized, stride, offset );\n\n\t\t}\n\n\t}\n\n\tfunction setupVertexAttributes( object, material, program, geometry ) {\n\n\t\tinitAttributes();\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\tconst programAttributes = program.getAttributes();\n\n\t\tconst materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\tfor ( const name in programAttributes ) {\n\n\t\t\tconst programAttribute = programAttributes[ name ];\n\n\t\t\tif ( programAttribute.location >= 0 ) {\n\n\t\t\t\tlet geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\tif ( geometryAttribute === undefined ) {\n\n\t\t\t\t\tif ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;\n\t\t\t\t\tif ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\tconst normalized = geometryAttribute.normalized;\n\t\t\t\t\tconst size = geometryAttribute.itemSize;\n\n\t\t\t\t\tconst attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\tconst buffer = attribute.buffer;\n\t\t\t\t\tconst type = attribute.type;\n\t\t\t\t\tconst bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\t// check for integer attributes\n\n\t\t\t\t\tconst integer = ( type === gl.INT || type === gl.UNSIGNED_INT || geometryAttribute.gpuType === IntType );\n\n\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst data = geometryAttribute.data;\n\t\t\t\t\t\tconst stride = data.stride;\n\t\t\t\t\t\tconst offset = geometryAttribute.offset;\n\n\t\t\t\t\t\tif ( data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tstride * bytesPerElement,\n\t\t\t\t\t\t\t\t( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement,\n\t\t\t\t\t\t\t\tinteger\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {\n\n\t\t\t\t\t\t\t\tgeometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\t\tenableAttribute( programAttribute.location + i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, buffer );\n\n\t\t\t\t\t\tfor ( let i = 0; i < programAttribute.locationSize; i ++ ) {\n\n\t\t\t\t\t\t\tvertexAttribPointer(\n\t\t\t\t\t\t\t\tprogramAttribute.location + i,\n\t\t\t\t\t\t\t\tsize / programAttribute.locationSize,\n\t\t\t\t\t\t\t\ttype,\n\t\t\t\t\t\t\t\tnormalized,\n\t\t\t\t\t\t\t\tsize * bytesPerElement,\n\t\t\t\t\t\t\t\t( size / programAttribute.locationSize ) * i * bytesPerElement,\n\t\t\t\t\t\t\t\tinteger\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\tconst value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\tgl.vertexAttrib2fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\tgl.vertexAttrib3fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\tgl.vertexAttrib4fv( programAttribute.location, value );\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\tgl.vertexAttrib1fv( programAttribute.location, value );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tdisableUnusedAttributes();\n\n\t}\n\n\tfunction dispose() {\n\n\t\treset();\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tfor ( const programId in programMap ) {\n\n\t\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t\t}\n\n\t\t\t\tdelete programMap[ programId ];\n\n\t\t\t}\n\n\t\t\tdelete bindingStates[ geometryId ];\n\n\t\t}\n\n\t}\n\n\tfunction releaseStatesOfGeometry( geometry ) {\n\n\t\tif ( bindingStates[ geometry.id ] === undefined ) return;\n\n\t\tconst programMap = bindingStates[ geometry.id ];\n\n\t\tfor ( const programId in programMap ) {\n\n\t\t\tconst stateMap = programMap[ programId ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ programId ];\n\n\t\t}\n\n\t\tdelete bindingStates[ geometry.id ];\n\n\t}\n\n\tfunction releaseStatesOfProgram( program ) {\n\n\t\tfor ( const geometryId in bindingStates ) {\n\n\t\t\tconst programMap = bindingStates[ geometryId ];\n\n\t\t\tif ( programMap[ program.id ] === undefined ) continue;\n\n\t\t\tconst stateMap = programMap[ program.id ];\n\n\t\t\tfor ( const wireframe in stateMap ) {\n\n\t\t\t\tdeleteVertexArrayObject( stateMap[ wireframe ].object );\n\n\t\t\t\tdelete stateMap[ wireframe ];\n\n\t\t\t}\n\n\t\t\tdelete programMap[ program.id ];\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\tresetDefaultState();\n\t\tforceUpdate = true;\n\n\t\tif ( currentState === defaultState ) return;\n\n\t\tcurrentState = defaultState;\n\t\tbindVertexArrayObject( currentState.object );\n\n\t}\n\n\t// for backward-compatibility\n\n\tfunction resetDefaultState() {\n\n\t\tdefaultState.geometry = null;\n\t\tdefaultState.program = null;\n\t\tdefaultState.wireframe = false;\n\n\t}\n\n\treturn {\n\n\t\tsetup: setup,\n\t\treset: reset,\n\t\tresetDefaultState: resetDefaultState,\n\t\tdispose: dispose,\n\t\treleaseStatesOfGeometry: releaseStatesOfGeometry,\n\t\treleaseStatesOfProgram: releaseStatesOfProgram,\n\n\t\tinitAttributes: initAttributes,\n\t\tenableAttribute: enableAttribute,\n\t\tdisableUnusedAttributes: disableUnusedAttributes\n\n\t};\n\n}\n\nfunction WebGLBufferRenderer( gl, extensions, info ) {\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawArrays( mode, start, count );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tgl.drawArraysInstanced( mode, start, count, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\tfunction renderMultiDraw( starts, counts, drawCount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\t\textension.multiDrawArraysWEBGL( mode, starts, 0, counts, 0, drawCount );\n\n\t\tlet elementCount = 0;\n\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\telementCount += counts[ i ];\n\n\t\t}\n\n\t\tinfo.update( elementCount, mode, 1 );\n\n\t}\n\n\tfunction renderMultiDrawInstances( starts, counts, drawCount, primcount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tfor ( let i = 0; i < starts.length; i ++ ) {\n\n\t\t\t\trenderInstances( starts[ i ], counts[ i ], primcount[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\textension.multiDrawArraysInstancedWEBGL( mode, starts, 0, counts, 0, primcount, 0, drawCount );\n\n\t\t\tlet elementCount = 0;\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\telementCount += counts[ i ];\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < primcount.length; i ++ ) {\n\n\t\t\t\tinfo.update( elementCount, mode, primcount[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\tthis.renderMultiDraw = renderMultiDraw;\n\tthis.renderMultiDrawInstances = renderMultiDrawInstances;\n\n}\n\nfunction WebGLCapabilities( gl, extensions, parameters, utils ) {\n\n\tlet maxAnisotropy;\n\n\tfunction getMaxAnisotropy() {\n\n\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t} else {\n\n\t\t\tmaxAnisotropy = 0;\n\n\t\t}\n\n\t\treturn maxAnisotropy;\n\n\t}\n\n\tfunction textureFormatReadable( textureFormat ) {\n\n\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction textureTypeReadable( textureType ) {\n\n\t\tconst halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) );\n\n\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== gl.getParameter( gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)\n\t\t\ttextureType !== FloatType && ! halfFloatSupportedByExt ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction getMaxPrecision( precision ) {\n\n\t\tif ( precision === 'highp' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'highp';\n\n\t\t\t}\n\n\t\t\tprecision = 'mediump';\n\n\t\t}\n\n\t\tif ( precision === 'mediump' ) {\n\n\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t\tgl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\treturn 'mediump';\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn 'lowp';\n\n\t}\n\n\tlet precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\tconst maxPrecision = getMaxPrecision( precision );\n\n\tif ( maxPrecision !== precision ) {\n\n\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\tprecision = maxPrecision;\n\n\t}\n\n\tconst logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\tconst maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\tconst maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\tconst maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\tconst maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\tconst maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\tconst maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\tconst maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\tconst maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\tconst vertexTextures = maxVertexTextures > 0;\n\n\tconst maxSamples = gl.getParameter( gl.MAX_SAMPLES );\n\n\treturn {\n\n\t\tisWebGL2: true, // keeping this for backwards compatibility\n\n\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\ttextureFormatReadable: textureFormatReadable,\n\t\ttextureTypeReadable: textureTypeReadable,\n\n\t\tprecision: precision,\n\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\tmaxTextures: maxTextures,\n\t\tmaxVertexTextures: maxVertexTextures,\n\t\tmaxTextureSize: maxTextureSize,\n\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\tmaxAttributes: maxAttributes,\n\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\tmaxVaryings: maxVaryings,\n\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\tvertexTextures: vertexTextures,\n\n\t\tmaxSamples: maxSamples\n\n\t};\n\n}\n\nfunction WebGLClipping( properties ) {\n\n\tconst scope = this;\n\n\tlet globalState = null,\n\t\tnumGlobalPlanes = 0,\n\t\tlocalClippingEnabled = false,\n\t\trenderingShadows = false;\n\n\tconst plane = new Plane(),\n\t\tviewNormalMatrix = new Matrix3(),\n\n\t\tuniform = { value: null, needsUpdate: false };\n\n\tthis.uniform = uniform;\n\tthis.numPlanes = 0;\n\tthis.numIntersection = 0;\n\n\tthis.init = function ( planes, enableLocalClipping ) {\n\n\t\tconst enabled =\n\t\t\tplanes.length !== 0 ||\n\t\t\tenableLocalClipping ||\n\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t// run another frame in order to reset the state:\n\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\tlocalClippingEnabled;\n\n\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\tnumGlobalPlanes = planes.length;\n\n\t\treturn enabled;\n\n\t};\n\n\tthis.beginShadows = function () {\n\n\t\trenderingShadows = true;\n\t\tprojectPlanes( null );\n\n\t};\n\n\tthis.endShadows = function () {\n\n\t\trenderingShadows = false;\n\n\t};\n\n\tthis.setGlobalState = function ( planes, camera ) {\n\n\t\tglobalState = projectPlanes( planes, camera, 0 );\n\n\t};\n\n\tthis.setState = function ( material, camera, useCache ) {\n\n\t\tconst planes = material.clippingPlanes,\n\t\t\tclipIntersection = material.clipIntersection,\n\t\t\tclipShadows = material.clipShadows;\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t// there's no local clipping\n\n\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t// there's no global clipping\n\n\t\t\t\tprojectPlanes( null );\n\n\t\t\t} else {\n\n\t\t\t\tresetGlobalState();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\tlGlobal = nGlobal * 4;\n\n\t\t\tlet dstArray = materialProperties.clippingState || null;\n\n\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, useCache );\n\n\t\t\tfor ( let i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t}\n\n\t\t\tmaterialProperties.clippingState = dstArray;\n\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\tthis.numPlanes += nGlobal;\n\n\t\t}\n\n\n\t};\n\n\tfunction resetGlobalState() {\n\n\t\tif ( uniform.value !== globalState ) {\n\n\t\t\tuniform.value = globalState;\n\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t}\n\n\t\tscope.numPlanes = numGlobalPlanes;\n\t\tscope.numIntersection = 0;\n\n\t}\n\n\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\tconst nPlanes = planes !== null ? planes.length : 0;\n\t\tlet dstArray = null;\n\n\t\tif ( nPlanes !== 0 ) {\n\n\t\t\tdstArray = uniform.value;\n\n\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\tconst flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tuniform.value = dstArray;\n\t\t\tuniform.needsUpdate = true;\n\n\t\t}\n\n\t\tscope.numPlanes = nPlanes;\n\t\tscope.numIntersection = 0;\n\n\t\treturn dstArray;\n\n\t}\n\n}\n\nfunction WebGLCubeMaps( renderer ) {\n\n\tlet cubemaps = new WeakMap();\n\n\tfunction mapTextureMapping( texture, mapping ) {\n\n\t\tif ( mapping === EquirectangularReflectionMapping ) {\n\n\t\t\ttexture.mapping = CubeReflectionMapping;\n\n\t\t} else if ( mapping === EquirectangularRefractionMapping ) {\n\n\t\t\ttexture.mapping = CubeRefractionMapping;\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tif ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {\n\n\t\t\t\tif ( cubemaps.has( texture ) ) {\n\n\t\t\t\t\tconst cubemap = cubemaps.get( texture ).texture;\n\t\t\t\t\treturn mapTextureMapping( cubemap, texture.mapping );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\tif ( image && image.height > 0 ) {\n\n\t\t\t\t\t\tconst renderTarget = new WebGLCubeRenderTarget( image.height );\n\t\t\t\t\t\trenderTarget.fromEquirectangularTexture( renderer, texture );\n\t\t\t\t\t\tcubemaps.set( texture, renderTarget );\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\treturn mapTextureMapping( renderTarget.texture, texture.mapping );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemap = cubemaps.get( texture );\n\n\t\tif ( cubemap !== undefined ) {\n\n\t\t\tcubemaps.delete( texture );\n\t\t\tcubemap.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubemaps = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass OrthographicCamera extends Camera {\n\n\tconstructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {\n\n\t\tsuper();\n\n\t\tthis.isOrthographicCamera = true;\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.left = source.left;\n\t\tthis.right = source.right;\n\t\tthis.top = source.top;\n\t\tthis.bottom = source.bottom;\n\t\tthis.near = source.near;\n\t\tthis.far = source.far;\n\n\t\tthis.zoom = source.zoom;\n\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\treturn this;\n\n\t}\n\n\tsetViewOffset( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\tif ( this.view === null ) {\n\n\t\t\tthis.view = {\n\t\t\t\tenabled: true,\n\t\t\t\tfullWidth: 1,\n\t\t\t\tfullHeight: 1,\n\t\t\t\toffsetX: 0,\n\t\t\t\toffsetY: 0,\n\t\t\t\twidth: 1,\n\t\t\t\theight: 1\n\t\t\t};\n\n\t\t}\n\n\t\tthis.view.enabled = true;\n\t\tthis.view.fullWidth = fullWidth;\n\t\tthis.view.fullHeight = fullHeight;\n\t\tthis.view.offsetX = x;\n\t\tthis.view.offsetY = y;\n\t\tthis.view.width = width;\n\t\tthis.view.height = height;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tclearViewOffset() {\n\n\t\tif ( this.view !== null ) {\n\n\t\t\tthis.view.enabled = false;\n\n\t\t}\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tupdateProjectionMatrix() {\n\n\t\tconst dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\tconst dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\tconst cx = ( this.right + this.left ) / 2;\n\t\tconst cy = ( this.top + this.bottom ) / 2;\n\n\t\tlet left = cx - dx;\n\t\tlet right = cx + dx;\n\t\tlet top = cy + dy;\n\t\tlet bottom = cy - dy;\n\n\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\tconst scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;\n\t\t\tconst scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;\n\n\t\t\tleft += scaleW * this.view.offsetX;\n\t\t\tright = left + scaleW * this.view.width;\n\t\t\ttop -= scaleH * this.view.offsetY;\n\t\t\tbottom = top - scaleH * this.view.height;\n\n\t\t}\n\n\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far, this.coordinateSystem );\n\n\t\tthis.projectionMatrixInverse.copy( this.projectionMatrix ).invert();\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.zoom = this.zoom;\n\t\tdata.object.left = this.left;\n\t\tdata.object.right = this.right;\n\t\tdata.object.top = this.top;\n\t\tdata.object.bottom = this.bottom;\n\t\tdata.object.near = this.near;\n\t\tdata.object.far = this.far;\n\n\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst LOD_MIN = 4;\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst _flatCamera = /*@__PURE__*/ new OrthographicCamera();\nconst _clearColor = /*@__PURE__*/ new Color();\nlet _oldTarget = null;\nlet _oldActiveCubeFace = 0;\nlet _oldActiveMipmapLevel = 0;\nlet _oldXrEnabled = false;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new Vector3( 1, 1, 1 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n *\n * Paper: Fast, Accurate Image-Based Lighting\n * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view\n*/\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._lodMax = 0;\n\t\tthis._cubeSize = 0;\n\t\tthis._lodPlanes = [];\n\t\tthis._sizeLods = [];\n\t\tthis._sigmas = [];\n\n\t\tthis._blurMaterial = null;\n\t\tthis._cubemapMaterial = null;\n\t\tthis._equirectMaterial = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\t\t_oldXrEnabled = this._renderer.xr.enabled;\n\n\t\tthis._renderer.xr.enabled = false;\n\n\t\tthis._setSize( 256 );\n\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\t\tcubeUVRenderTarget.depthBuffer = true;\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * or HDR. The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t * The smallest supported equirectangular image size is 64 x 32.\n\t */\n\tfromEquirectangular( equirectangular, renderTarget = null ) {\n\n\t\treturn this._fromTexture( equirectangular, renderTarget );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * or HDR. The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t * The smallest supported cube size is 16 x 16.\n\t */\n\tfromCubemap( cubemap, renderTarget = null ) {\n\n\t\treturn this._fromTexture( cubemap, renderTarget );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\t\t\tthis._compileMaterial( this._cubemapMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\t\t\tthis._compileMaterial( this._equirectMaterial );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._dispose();\n\n\t\tif ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();\n\t\tif ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();\n\n\t}\n\n\t// private interface\n\n\t_setSize( cubeSize ) {\n\n\t\tthis._lodMax = Math.floor( Math.log2( cubeSize ) );\n\t\tthis._cubeSize = Math.pow( 2, this._lodMax );\n\n\t}\n\n\t_dispose() {\n\n\t\tif ( this._blurMaterial !== null ) this._blurMaterial.dispose();\n\n\t\tif ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();\n\n\t\tfor ( let i = 0; i < this._lodPlanes.length; i ++ ) {\n\n\t\t\tthis._lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._renderer.setRenderTarget( _oldTarget, _oldActiveCubeFace, _oldActiveMipmapLevel );\n\t\tthis._renderer.xr.enabled = _oldXrEnabled;\n\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture, renderTarget ) {\n\n\t\tif ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {\n\n\t\t\tthis._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );\n\n\t\t} else { // Equirectangular\n\n\t\t\tthis._setSize( texture.image.width / 4 );\n\n\t\t}\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\t_oldActiveCubeFace = this._renderer.getActiveCubeFace();\n\t\t_oldActiveMipmapLevel = this._renderer.getActiveMipmapLevel();\n\t\t_oldXrEnabled = this._renderer.xr.enabled;\n\n\t\tthis._renderer.xr.enabled = false;\n\n\t\tconst cubeUVRenderTarget = renderTarget || this._allocateTargets();\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets() {\n\n\t\tconst width = 3 * Math.max( this._cubeSize, 16 * 7 );\n\t\tconst height = 4 * this._cubeSize;\n\n\t\tconst params = {\n\t\t\tmagFilter: LinearFilter,\n\t\t\tminFilter: LinearFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: HalfFloatType,\n\t\t\tformat: RGBAFormat,\n\t\t\tcolorSpace: LinearSRGBColorSpace,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( width, height, params );\n\n\t\tif ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {\n\n\t\t\tif ( this._pingPongRenderTarget !== null ) {\n\n\t\t\t\tthis._dispose();\n\n\t\t\t}\n\n\t\t\tthis._pingPongRenderTarget = _createRenderTarget( width, height, params );\n\n\t\t\tconst { _lodMax } = this;\n\t\t\t( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );\n\n\t\t\tthis._blurMaterial = _getBlurShader( _lodMax, width, height );\n\n\t\t}\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = NoToneMapping;\n\t\trenderer.autoClear = false;\n\n\t\tconst backgroundMaterial = new MeshBasicMaterial( {\n\t\t\tname: 'PMREM.Background',\n\t\t\tside: BackSide,\n\t\t\tdepthWrite: false,\n\t\t\tdepthTest: false,\n\t\t} );\n\n\t\tconst backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background );\n\t\t\t\tscene.background = null;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor );\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\n\t\t\tif ( col === 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col === 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\tconst size = this._cubeSize;\n\n\t\t\t_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );\n\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\tbackgroundBox.geometry.dispose();\n\t\tbackgroundBox.material.dispose();\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.autoClear = originalAutoClear;\n\t\tscene.background = background;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tconst isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );\n\n\t\tif ( isCubeTexture ) {\n\n\t\t\tif ( this._cubemapMaterial === null ) {\n\n\t\t\t\tthis._cubemapMaterial = _getCubemapMaterial();\n\n\t\t\t}\n\n\t\t\tthis._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t} else {\n\n\t\t\tif ( this._equirectMaterial === null ) {\n\n\t\t\t\tthis._equirectMaterial = _getEquirectMaterial();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;\n\t\tconst mesh = new Mesh( this._lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tconst size = this._cubeSize;\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\t\tconst n = this._lodPlanes.length;\n\n\t\tfor ( let i = 1; i < n; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( n - i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = this._sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i === 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tconst { _lodMax } = this;\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = _lodMax - lodIn;\n\n\t\tconst outputSize = this._sizeLods[ lodOut ];\n\t\tconst x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );\n\t\tconst y = 4 * ( this._cubeSize - outputSize );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\n\n\nfunction _createPlanes( lodMax ) {\n\n\tconst lodPlanes = [];\n\tconst sizeLods = [];\n\tconst sigmas = [];\n\n\tlet lod = lodMax;\n\n\tconst totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n\tfor ( let i = 0; i < totalLods; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\tsizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > lodMax - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];\n\n\t\t} else if ( i === 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\tsigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 2 );\n\t\tconst min = - texelSize;\n\t\tconst max = 1 + texelSize;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new BufferGeometry();\n\t\tplanes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );\n\t\tlodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { lodPlanes, sizeLods, sigmas };\n\n}\n\nfunction _createRenderTarget( width, height, params ) {\n\n\tconst cubeUVRenderTarget = new WebGLRenderTarget( width, height, params );\n\tcubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( lodMax, width, height ) {\n\n\tconst weights = new Float32Array( MAX_SAMPLES );\n\tconst poleAxis = new Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new ShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: {\n\t\t\t'n': MAX_SAMPLES,\n\t\t\t'CUBEUV_TEXEL_WIDTH': 1.0 / width,\n\t\t\t'CUBEUV_TEXEL_HEIGHT': 1.0 / height,\n\t\t\t'CUBEUV_MAX_MIP': `${lodMax}.0`,\n\t\t},\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tgl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCubemapMaterial() {\n\n\treturn new ShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'flipEnvMap': { value: - 1 }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tuniform float flipEnvMap;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction WebGLCubeUVMaps( renderer ) {\n\n\tlet cubeUVmaps = new WeakMap();\n\n\tlet pmremGenerator = null;\n\n\tfunction get( texture ) {\n\n\t\tif ( texture && texture.isTexture ) {\n\n\t\t\tconst mapping = texture.mapping;\n\n\t\t\tconst isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );\n\t\t\tconst isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );\n\n\t\t\t// equirect/cube map to cubeUV conversion\n\n\t\t\tif ( isEquirectMap || isCubeMap ) {\n\n\t\t\t\tlet renderTarget = cubeUVmaps.get( texture );\n\n\t\t\t\tconst currentPMREMVersion = renderTarget !== undefined ? renderTarget.texture.pmremVersion : 0;\n\n\t\t\t\tif ( texture.isRenderTargetTexture && texture.pmremVersion !== currentPMREMVersion ) {\n\n\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );\n\t\t\t\t\trenderTarget.texture.pmremVersion = texture.pmremVersion;\n\n\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( renderTarget !== undefined ) {\n\n\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst image = texture.image;\n\n\t\t\t\t\t\tif ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {\n\n\t\t\t\t\t\t\tif ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );\n\n\t\t\t\t\t\t\trenderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );\n\t\t\t\t\t\t\trenderTarget.texture.pmremVersion = texture.pmremVersion;\n\n\t\t\t\t\t\t\tcubeUVmaps.set( texture, renderTarget );\n\n\t\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\t\treturn renderTarget.texture;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// image not yet ready. try the conversion next frame\n\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tfunction isCubeTextureComplete( image ) {\n\n\t\tlet count = 0;\n\t\tconst length = 6;\n\n\t\tfor ( let i = 0; i < length; i ++ ) {\n\n\t\t\tif ( image[ i ] !== undefined ) count ++;\n\n\t\t}\n\n\t\treturn count === length;\n\n\n\t}\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tconst cubemapUV = cubeUVmaps.get( texture );\n\n\t\tif ( cubemapUV !== undefined ) {\n\n\t\t\tcubeUVmaps.delete( texture );\n\t\t\tcubemapUV.dispose();\n\n\t\t}\n\n\t}\n\n\tfunction dispose() {\n\n\t\tcubeUVmaps = new WeakMap();\n\n\t\tif ( pmremGenerator !== null ) {\n\n\t\t\tpmremGenerator.dispose();\n\t\t\tpmremGenerator = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLExtensions( gl ) {\n\n\tconst extensions = {};\n\n\tfunction getExtension( name ) {\n\n\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\treturn extensions[ name ];\n\n\t\t}\n\n\t\tlet extension;\n\n\t\tswitch ( name ) {\n\n\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\tbreak;\n\n\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\textension = gl.getExtension( name );\n\n\t\t}\n\n\t\textensions[ name ] = extension;\n\n\t\treturn extension;\n\n\t}\n\n\treturn {\n\n\t\thas: function ( name ) {\n\n\t\t\treturn getExtension( name ) !== null;\n\n\t\t},\n\n\t\tinit: function () {\n\n\t\t\tgetExtension( 'EXT_color_buffer_float' );\n\t\t\tgetExtension( 'WEBGL_clip_cull_distance' );\n\t\t\tgetExtension( 'OES_texture_float_linear' );\n\t\t\tgetExtension( 'EXT_color_buffer_half_float' );\n\t\t\tgetExtension( 'WEBGL_multisampled_render_to_texture' );\n\t\t\tgetExtension( 'WEBGL_render_shared_exponent' );\n\n\t\t},\n\n\t\tget: function ( name ) {\n\n\t\t\tconst extension = getExtension( name );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\twarnOnce( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t}\n\n\t\t\treturn extension;\n\n\t\t}\n\n\t};\n\n}\n\nfunction WebGLGeometries( gl, attributes, info, bindingStates ) {\n\n\tconst geometries = {};\n\tconst wireframeAttributes = new WeakMap();\n\n\tfunction onGeometryDispose( event ) {\n\n\t\tconst geometry = event.target;\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\tattributes.remove( geometry.index );\n\n\t\t}\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tattributes.remove( geometry.attributes[ name ] );\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tconst array = geometry.morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.remove( array[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\tdelete geometries[ geometry.id ];\n\n\t\tconst attribute = wireframeAttributes.get( geometry );\n\n\t\tif ( attribute ) {\n\n\t\t\tattributes.remove( attribute );\n\t\t\twireframeAttributes.delete( geometry );\n\n\t\t}\n\n\t\tbindingStates.releaseStatesOfGeometry( geometry );\n\n\t\tif ( geometry.isInstancedBufferGeometry === true ) {\n\n\t\t\tdelete geometry._maxInstanceCount;\n\n\t\t}\n\n\t\t//\n\n\t\tinfo.memory.geometries --;\n\n\t}\n\n\tfunction get( object, geometry ) {\n\n\t\tif ( geometries[ geometry.id ] === true ) return geometry;\n\n\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\tgeometries[ geometry.id ] = true;\n\n\t\tinfo.memory.geometries ++;\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction update( geometry ) {\n\n\t\tconst geometryAttributes = geometry.attributes;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates.\n\n\t\tfor ( const name in geometryAttributes ) {\n\n\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t}\n\n\t\t// morph targets\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\tfor ( const name in morphAttributes ) {\n\n\t\t\tconst array = morphAttributes[ name ];\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction updateWireframeAttribute( geometry ) {\n\n\t\tconst indices = [];\n\n\t\tconst geometryIndex = geometry.index;\n\t\tconst geometryPosition = geometry.attributes.position;\n\t\tlet version = 0;\n\n\t\tif ( geometryIndex !== null ) {\n\n\t\t\tconst array = geometryIndex.array;\n\t\t\tversion = geometryIndex.version;\n\n\t\t\tfor ( let i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tconst a = array[ i + 0 ];\n\t\t\t\tconst b = array[ i + 1 ];\n\t\t\t\tconst c = array[ i + 2 ];\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else if ( geometryPosition !== undefined ) {\n\n\t\t\tconst array = geometryPosition.array;\n\t\t\tversion = geometryPosition.version;\n\n\t\t\tfor ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\tconst a = i + 0;\n\t\t\t\tconst b = i + 1;\n\t\t\t\tconst c = i + 2;\n\n\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\t\tattribute.version = version;\n\n\t\t// Updating index buffer in VAO now. See WebGLBindingStates\n\n\t\t//\n\n\t\tconst previousAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( previousAttribute ) attributes.remove( previousAttribute );\n\n\t\t//\n\n\t\twireframeAttributes.set( geometry, attribute );\n\n\t}\n\n\tfunction getWireframeAttribute( geometry ) {\n\n\t\tconst currentAttribute = wireframeAttributes.get( geometry );\n\n\t\tif ( currentAttribute ) {\n\n\t\t\tconst geometryIndex = geometry.index;\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\t// if the attribute is obsolete, create a new one\n\n\t\t\t\tif ( currentAttribute.version < geometryIndex.version ) {\n\n\t\t\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tupdateWireframeAttribute( geometry );\n\n\t\t}\n\n\t\treturn wireframeAttributes.get( geometry );\n\n\t}\n\n\treturn {\n\n\t\tget: get,\n\t\tupdate: update,\n\n\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t};\n\n}\n\nfunction WebGLIndexedBufferRenderer( gl, extensions, info ) {\n\n\tlet mode;\n\n\tfunction setMode( value ) {\n\n\t\tmode = value;\n\n\t}\n\n\tlet type, bytesPerElement;\n\n\tfunction setIndex( value ) {\n\n\t\ttype = value.type;\n\t\tbytesPerElement = value.bytesPerElement;\n\n\t}\n\n\tfunction render( start, count ) {\n\n\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\tinfo.update( count, mode, 1 );\n\n\t}\n\n\tfunction renderInstances( start, count, primcount ) {\n\n\t\tif ( primcount === 0 ) return;\n\n\t\tgl.drawElementsInstanced( mode, count, type, start * bytesPerElement, primcount );\n\n\t\tinfo.update( count, mode, primcount );\n\n\t}\n\n\tfunction renderMultiDraw( starts, counts, drawCount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\t\textension.multiDrawElementsWEBGL( mode, counts, 0, type, starts, 0, drawCount );\n\n\t\tlet elementCount = 0;\n\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\telementCount += counts[ i ];\n\n\t\t}\n\n\t\tinfo.update( elementCount, mode, 1 );\n\n\n\t}\n\n\tfunction renderMultiDrawInstances( starts, counts, drawCount, primcount ) {\n\n\t\tif ( drawCount === 0 ) return;\n\n\t\tconst extension = extensions.get( 'WEBGL_multi_draw' );\n\n\t\tif ( extension === null ) {\n\n\t\t\tfor ( let i = 0; i < starts.length; i ++ ) {\n\n\t\t\t\trenderInstances( starts[ i ] / bytesPerElement, counts[ i ], primcount[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\textension.multiDrawElementsInstancedWEBGL( mode, counts, 0, type, starts, 0, primcount, 0, drawCount );\n\n\t\t\tlet elementCount = 0;\n\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\telementCount += counts[ i ];\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < primcount.length; i ++ ) {\n\n\t\t\t\tinfo.update( elementCount, mode, primcount[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t//\n\n\tthis.setMode = setMode;\n\tthis.setIndex = setIndex;\n\tthis.render = render;\n\tthis.renderInstances = renderInstances;\n\tthis.renderMultiDraw = renderMultiDraw;\n\tthis.renderMultiDrawInstances = renderMultiDrawInstances;\n\n}\n\nfunction WebGLInfo( gl ) {\n\n\tconst memory = {\n\t\tgeometries: 0,\n\t\ttextures: 0\n\t};\n\n\tconst render = {\n\t\tframe: 0,\n\t\tcalls: 0,\n\t\ttriangles: 0,\n\t\tpoints: 0,\n\t\tlines: 0\n\t};\n\n\tfunction update( count, mode, instanceCount ) {\n\n\t\trender.calls ++;\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase gl.TRIANGLES:\n\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINES:\n\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_STRIP:\n\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\tbreak;\n\n\t\t\tcase gl.LINE_LOOP:\n\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tcase gl.POINTS:\n\t\t\t\trender.points += instanceCount * count;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction reset() {\n\n\t\trender.calls = 0;\n\t\trender.triangles = 0;\n\t\trender.points = 0;\n\t\trender.lines = 0;\n\n\t}\n\n\treturn {\n\t\tmemory: memory,\n\t\trender: render,\n\t\tprograms: null,\n\t\tautoReset: true,\n\t\treset: reset,\n\t\tupdate: update\n\t};\n\n}\n\nfunction WebGLMorphtargets( gl, capabilities, textures ) {\n\n\tconst morphTextures = new WeakMap();\n\tconst morph = new Vector4();\n\n\tfunction update( object, geometry, program ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\t// the following encodes morph targets into an array of data textures. Each layer represents a single morph target.\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet entry = morphTextures.get( geometry );\n\n\t\tif ( entry === undefined || entry.count !== morphTargetsCount ) {\n\n\t\t\tif ( entry !== undefined ) entry.texture.dispose();\n\n\t\t\tconst hasMorphPosition = geometry.morphAttributes.position !== undefined;\n\t\t\tconst hasMorphNormals = geometry.morphAttributes.normal !== undefined;\n\t\t\tconst hasMorphColors = geometry.morphAttributes.color !== undefined;\n\n\t\t\tconst morphTargets = geometry.morphAttributes.position || [];\n\t\t\tconst morphNormals = geometry.morphAttributes.normal || [];\n\t\t\tconst morphColors = geometry.morphAttributes.color || [];\n\n\t\t\tlet vertexDataCount = 0;\n\n\t\t\tif ( hasMorphPosition === true ) vertexDataCount = 1;\n\t\t\tif ( hasMorphNormals === true ) vertexDataCount = 2;\n\t\t\tif ( hasMorphColors === true ) vertexDataCount = 3;\n\n\t\t\tlet width = geometry.attributes.position.count * vertexDataCount;\n\t\t\tlet height = 1;\n\n\t\t\tif ( width > capabilities.maxTextureSize ) {\n\n\t\t\t\theight = Math.ceil( width / capabilities.maxTextureSize );\n\t\t\t\twidth = capabilities.maxTextureSize;\n\n\t\t\t}\n\n\t\t\tconst buffer = new Float32Array( width * height * 4 * morphTargetsCount );\n\n\t\t\tconst texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );\n\t\t\ttexture.type = FloatType;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\t// fill buffer\n\n\t\t\tconst vertexDataStride = vertexDataCount * 4;\n\n\t\t\tfor ( let i = 0; i < morphTargetsCount; i ++ ) {\n\n\t\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\t\tconst morphNormal = morphNormals[ i ];\n\t\t\t\tconst morphColor = morphColors[ i ];\n\n\t\t\t\tconst offset = width * height * 4 * i;\n\n\t\t\t\tfor ( let j = 0; j < morphTarget.count; j ++ ) {\n\n\t\t\t\t\tconst stride = j * vertexDataStride;\n\n\t\t\t\t\tif ( hasMorphPosition === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphTarget, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 0 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 1 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 2 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 3 ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasMorphNormals === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphNormal, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 4 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 5 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 6 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 7 ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hasMorphColors === true ) {\n\n\t\t\t\t\t\tmorph.fromBufferAttribute( morphColor, j );\n\n\t\t\t\t\t\tbuffer[ offset + stride + 8 ] = morph.x;\n\t\t\t\t\t\tbuffer[ offset + stride + 9 ] = morph.y;\n\t\t\t\t\t\tbuffer[ offset + stride + 10 ] = morph.z;\n\t\t\t\t\t\tbuffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tentry = {\n\t\t\t\tcount: morphTargetsCount,\n\t\t\t\ttexture: texture,\n\t\t\t\tsize: new Vector2( width, height )\n\t\t\t};\n\n\t\t\tmorphTextures.set( geometry, entry );\n\n\t\t\tfunction disposeTexture() {\n\n\t\t\t\ttexture.dispose();\n\n\t\t\t\tmorphTextures.delete( geometry );\n\n\t\t\t\tgeometry.removeEventListener( 'dispose', disposeTexture );\n\n\t\t\t}\n\n\t\t\tgeometry.addEventListener( 'dispose', disposeTexture );\n\n\t\t}\n\n\t\t//\n\t\tif ( object.isInstancedMesh === true && object.morphTexture !== null ) {\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTexture', object.morphTexture, textures );\n\n\t\t} else {\n\n\t\t\tlet morphInfluencesSum = 0;\n\n\t\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tconst morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );\n\n\t\t}\n\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );\n\t\tprogram.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update\n\n\t};\n\n}\n\nfunction WebGLObjects( gl, geometries, attributes, info ) {\n\n\tlet updateMap = new WeakMap();\n\n\tfunction update( object ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\tconst geometry = object.geometry;\n\t\tconst buffergeometry = geometries.get( object, geometry );\n\n\t\t// Update once per frame\n\n\t\tif ( updateMap.get( buffergeometry ) !== frame ) {\n\n\t\t\tgeometries.update( buffergeometry );\n\n\t\t\tupdateMap.set( buffergeometry, frame );\n\n\t\t}\n\n\t\tif ( object.isInstancedMesh ) {\n\n\t\t\tif ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {\n\n\t\t\t\tobject.addEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\t\t}\n\n\t\t\tif ( updateMap.get( object ) !== frame ) {\n\n\t\t\t\tattributes.update( object.instanceMatrix, gl.ARRAY_BUFFER );\n\n\t\t\t\tif ( object.instanceColor !== null ) {\n\n\t\t\t\t\tattributes.update( object.instanceColor, gl.ARRAY_BUFFER );\n\n\t\t\t\t}\n\n\t\t\t\tupdateMap.set( object, frame );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tconst skeleton = object.skeleton;\n\n\t\t\tif ( updateMap.get( skeleton ) !== frame ) {\n\n\t\t\t\tskeleton.update();\n\n\t\t\t\tupdateMap.set( skeleton, frame );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn buffergeometry;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tupdateMap = new WeakMap();\n\n\t}\n\n\tfunction onInstancedMeshDispose( event ) {\n\n\t\tconst instancedMesh = event.target;\n\n\t\tinstancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );\n\n\t\tattributes.remove( instancedMesh.instanceMatrix );\n\n\t\tif ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );\n\n\t}\n\n\treturn {\n\n\t\tupdate: update,\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass DepthTexture extends Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format = DepthFormat ) {\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedIntType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isDepthTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.compareFunction = null;\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.compareFunction = source.compareFunction;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.compareFunction !== null ) data.compareFunction = this.compareFunction;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Uniforms of a program.\n * Those form a tree structure with a special top-level container for the root,\n * which you get by calling 'new WebGLUniforms( gl, program )'.\n *\n *\n * Properties of inner nodes including the top-level container:\n *\n * .seq - array of nested uniforms\n * .map - nested uniforms by name\n *\n *\n * Methods of all nodes except the top-level container:\n *\n * .setValue( gl, value, [textures] )\n *\n * \t\tuploads a uniform value(s)\n * \tthe 'textures' parameter is needed for sampler uniforms\n *\n *\n * Static methods of the top-level container (textures factorizations):\n *\n * .upload( gl, seq, values, textures )\n *\n * \t\tsets uniforms in 'seq' to 'values[id].value'\n *\n * .seqWithValue( seq, values ) : filteredSeq\n *\n * \t\tfilters 'seq' entries with corresponding entry in values\n *\n *\n * Methods of the top-level container (textures factorizations):\n *\n * .setValue( gl, name, value, textures )\n *\n * \t\tsets uniform with name 'name' to 'value'\n *\n * .setOptional( gl, obj, prop )\n *\n * \t\tlike .set for an optional property of the object\n *\n */\n\n\nconst emptyTexture = /*@__PURE__*/ new Texture();\n\nconst emptyShadowTexture = /*@__PURE__*/ new DepthTexture( 1, 1 );\n\nconst emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();\nconst empty3dTexture = /*@__PURE__*/ new Data3DTexture();\nconst emptyCubeTexture = /*@__PURE__*/ new CubeTexture();\n\n// --- Utilities ---\n\n// Array Caches (provide typed arrays for temporary by size)\n\nconst arrayCacheF32 = [];\nconst arrayCacheI32 = [];\n\n// Float32Array caches used for uploading Matrix uniforms\n\nconst mat4array = new Float32Array( 16 );\nconst mat3array = new Float32Array( 9 );\nconst mat2array = new Float32Array( 4 );\n\n// Flattening for arrays of vectors and matrices\n\nfunction flatten( array, nBlocks, blockSize ) {\n\n\tconst firstElem = array[ 0 ];\n\n\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t// unoptimized: ! isNaN( firstElem )\n\t// see http://jacksondunstan.com/articles/983\n\n\tconst n = nBlocks * blockSize;\n\tlet r = arrayCacheF32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Float32Array( n );\n\t\tarrayCacheF32[ n ] = r;\n\n\t}\n\n\tif ( nBlocks !== 0 ) {\n\n\t\tfirstElem.toArray( r, 0 );\n\n\t\tfor ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\toffset += blockSize;\n\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t}\n\n\t}\n\n\treturn r;\n\n}\n\nfunction arraysEqual( a, b ) {\n\n\tif ( a.length !== b.length ) return false;\n\n\tfor ( let i = 0, l = a.length; i < l; i ++ ) {\n\n\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction copyArray( a, b ) {\n\n\tfor ( let i = 0, l = b.length; i < l; i ++ ) {\n\n\t\ta[ i ] = b[ i ];\n\n\t}\n\n}\n\n// Texture unit allocation\n\nfunction allocTexUnits( textures, n ) {\n\n\tlet r = arrayCacheI32[ n ];\n\n\tif ( r === undefined ) {\n\n\t\tr = new Int32Array( n );\n\t\tarrayCacheI32[ n ] = r;\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\tr[ i ] = textures.allocateTextureUnit();\n\n\t}\n\n\treturn r;\n\n}\n\n// --- Setters ---\n\n// Note: Defining these methods externally, because they come in a bunch\n// and this way their names minify.\n\n// Single scalar\n\nfunction setValueV1f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1f( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single float vector (from flat array or THREE.VectorN)\n\nfunction setValueV2f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else if ( v.r !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\tcache[ 0 ] = v.r;\n\t\t\tcache[ 1 ] = v.g;\n\t\t\tcache[ 2 ] = v.b;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4f( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single matrix (from flat array or THREE.MatrixN)\n\nfunction setValueM2( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat2array.set( elements );\n\n\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM3( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat3array.set( elements );\n\n\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\nfunction setValueM4( gl, v ) {\n\n\tconst cache = this.cache;\n\tconst elements = v.elements;\n\n\tif ( elements === undefined ) {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\tcopyArray( cache, v );\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\tmat4array.set( elements );\n\n\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\tcopyArray( cache, elements );\n\n\t}\n\n}\n\n// Single integer / boolean\n\nfunction setValueV1i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1i( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single integer / boolean vector (from flat array or THREE.VectorN)\n\nfunction setValueV2i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2i( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3i( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4i( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4i( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n// Single unsigned integer\n\nfunction setValueV1ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( cache[ 0 ] === v ) return;\n\n\tgl.uniform1ui( this.addr, v );\n\n\tcache[ 0 ] = v;\n\n}\n\n// Single unsigned integer vector (from flat array or THREE.VectorN)\n\nfunction setValueV2ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\tgl.uniform2ui( this.addr, v.x, v.y );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV3ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\tgl.uniform3ui( this.addr, v.x, v.y, v.z );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\nfunction setValueV4ui( gl, v ) {\n\n\tconst cache = this.cache;\n\n\tif ( v.x !== undefined ) {\n\n\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\tgl.uniform4ui( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\tcache[ 0 ] = v.x;\n\t\t\tcache[ 1 ] = v.y;\n\t\t\tcache[ 2 ] = v.z;\n\t\t\tcache[ 3 ] = v.w;\n\n\t\t}\n\n\t} else {\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4uiv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n}\n\n\n// Single texture (2D / Cube)\n\nfunction setValueT1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\tlet emptyTexture2D;\n\n\tif ( this.type === gl.SAMPLER_2D_SHADOW ) {\n\n\t\temptyShadowTexture.compareFunction = LessEqualCompare; // #28670\n\t\temptyTexture2D = emptyShadowTexture;\n\n\t} else {\n\n\t\temptyTexture2D = emptyTexture;\n\n\t}\n\n\ttextures.setTexture2D( v || emptyTexture2D, unit );\n\n}\n\nfunction setValueT3D1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture3D( v || empty3dTexture, unit );\n\n}\n\nfunction setValueT6( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTextureCube( v || emptyCubeTexture, unit );\n\n}\n\nfunction setValueT2DArray1( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\tconst unit = textures.allocateTextureUnit();\n\n\tif ( cache[ 0 ] !== unit ) {\n\n\t\tgl.uniform1i( this.addr, unit );\n\t\tcache[ 0 ] = unit;\n\n\t}\n\n\ttextures.setTexture2DArray( v || emptyArrayTexture, unit );\n\n}\n\n// Helper to pick the right setter for the singular case\n\nfunction getSingularSetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1f; // FLOAT\n\t\tcase 0x8b50: return setValueV2f; // _VEC2\n\t\tcase 0x8b51: return setValueV3f; // _VEC3\n\t\tcase 0x8b52: return setValueV4f; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2; // _MAT2\n\t\tcase 0x8b5b: return setValueM3; // _MAT3\n\t\tcase 0x8b5c: return setValueM4; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2i; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3i; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4i; // _VEC4\n\n\t\tcase 0x1405: return setValueV1ui; // UINT\n\t\tcase 0x8dc6: return setValueV2ui; // _VEC2\n\t\tcase 0x8dc7: return setValueV3ui; // _VEC3\n\t\tcase 0x8dc8: return setValueV4ui; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3D1;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArray1;\n\n\t}\n\n}\n\n\n// Array of scalars\n\nfunction setValueV1fArray( gl, v ) {\n\n\tgl.uniform1fv( this.addr, v );\n\n}\n\n// Array of vectors (from flat array or array of THREE.VectorN)\n\nfunction setValueV2fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 2 );\n\n\tgl.uniform2fv( this.addr, data );\n\n}\n\nfunction setValueV3fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 3 );\n\n\tgl.uniform3fv( this.addr, data );\n\n}\n\nfunction setValueV4fArray( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniform4fv( this.addr, data );\n\n}\n\n// Array of matrices (from flat array or array of THREE.MatrixN)\n\nfunction setValueM2Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 4 );\n\n\tgl.uniformMatrix2fv( this.addr, false, data );\n\n}\n\nfunction setValueM3Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 9 );\n\n\tgl.uniformMatrix3fv( this.addr, false, data );\n\n}\n\nfunction setValueM4Array( gl, v ) {\n\n\tconst data = flatten( v, this.size, 16 );\n\n\tgl.uniformMatrix4fv( this.addr, false, data );\n\n}\n\n// Array of integer / boolean\n\nfunction setValueV1iArray( gl, v ) {\n\n\tgl.uniform1iv( this.addr, v );\n\n}\n\n// Array of integer / boolean vectors (from flat array)\n\nfunction setValueV2iArray( gl, v ) {\n\n\tgl.uniform2iv( this.addr, v );\n\n}\n\nfunction setValueV3iArray( gl, v ) {\n\n\tgl.uniform3iv( this.addr, v );\n\n}\n\nfunction setValueV4iArray( gl, v ) {\n\n\tgl.uniform4iv( this.addr, v );\n\n}\n\n// Array of unsigned integer\n\nfunction setValueV1uiArray( gl, v ) {\n\n\tgl.uniform1uiv( this.addr, v );\n\n}\n\n// Array of unsigned integer vectors (from flat array)\n\nfunction setValueV2uiArray( gl, v ) {\n\n\tgl.uniform2uiv( this.addr, v );\n\n}\n\nfunction setValueV3uiArray( gl, v ) {\n\n\tgl.uniform3uiv( this.addr, v );\n\n}\n\nfunction setValueV4uiArray( gl, v ) {\n\n\tgl.uniform4uiv( this.addr, v );\n\n}\n\n\n// Array of textures (2D / 3D / Cube / 2DArray)\n\nfunction setValueT1Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT3DArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture3D( v[ i ] || empty3dTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT6Array( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t}\n\n}\n\nfunction setValueT2DArrayArray( gl, v, textures ) {\n\n\tconst cache = this.cache;\n\n\tconst n = v.length;\n\n\tconst units = allocTexUnits( textures, n );\n\n\tif ( ! arraysEqual( cache, units ) ) {\n\n\t\tgl.uniform1iv( this.addr, units );\n\n\t\tcopyArray( cache, units );\n\n\t}\n\n\tfor ( let i = 0; i !== n; ++ i ) {\n\n\t\ttextures.setTexture2DArray( v[ i ] || emptyArrayTexture, units[ i ] );\n\n\t}\n\n}\n\n\n// Helper to pick the right setter for a pure (bottom-level) array\n\nfunction getPureArraySetter( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase 0x1406: return setValueV1fArray; // FLOAT\n\t\tcase 0x8b50: return setValueV2fArray; // _VEC2\n\t\tcase 0x8b51: return setValueV3fArray; // _VEC3\n\t\tcase 0x8b52: return setValueV4fArray; // _VEC4\n\n\t\tcase 0x8b5a: return setValueM2Array; // _MAT2\n\t\tcase 0x8b5b: return setValueM3Array; // _MAT3\n\t\tcase 0x8b5c: return setValueM4Array; // _MAT4\n\n\t\tcase 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL\n\t\tcase 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2\n\t\tcase 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3\n\t\tcase 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4\n\n\t\tcase 0x1405: return setValueV1uiArray; // UINT\n\t\tcase 0x8dc6: return setValueV2uiArray; // _VEC2\n\t\tcase 0x8dc7: return setValueV3uiArray; // _VEC3\n\t\tcase 0x8dc8: return setValueV4uiArray; // _VEC4\n\n\t\tcase 0x8b5e: // SAMPLER_2D\n\t\tcase 0x8d66: // SAMPLER_EXTERNAL_OES\n\t\tcase 0x8dca: // INT_SAMPLER_2D\n\t\tcase 0x8dd2: // UNSIGNED_INT_SAMPLER_2D\n\t\tcase 0x8b62: // SAMPLER_2D_SHADOW\n\t\t\treturn setValueT1Array;\n\n\t\tcase 0x8b5f: // SAMPLER_3D\n\t\tcase 0x8dcb: // INT_SAMPLER_3D\n\t\tcase 0x8dd3: // UNSIGNED_INT_SAMPLER_3D\n\t\t\treturn setValueT3DArray;\n\n\t\tcase 0x8b60: // SAMPLER_CUBE\n\t\tcase 0x8dcc: // INT_SAMPLER_CUBE\n\t\tcase 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE\n\t\tcase 0x8dc5: // SAMPLER_CUBE_SHADOW\n\t\t\treturn setValueT6Array;\n\n\t\tcase 0x8dc1: // SAMPLER_2D_ARRAY\n\t\tcase 0x8dcf: // INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY\n\t\tcase 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW\n\t\t\treturn setValueT2DArrayArray;\n\n\t}\n\n}\n\n// --- Uniform Classes ---\n\nclass SingleUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.type = activeInfo.type;\n\t\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass PureArrayUniform {\n\n\tconstructor( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.type = activeInfo.type;\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n}\n\nclass StructuredUniform {\n\n\tconstructor( id ) {\n\n\t\tthis.id = id;\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t}\n\n\tsetValue( gl, value, textures ) {\n\n\t\tconst seq = this.seq;\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tu.setValue( gl, value[ u.id ], textures );\n\n\t\t}\n\n\t}\n\n}\n\n// --- Top-level ---\n\n// Parser - builds up the property tree from the path strings\n\nconst RePathPart = /(\\w+)(\\])?(\\[|\\.)?/g;\n\n// extracts\n// \t- the identifier (member name or array index)\n// - followed by an optional right bracket (found when array index)\n// - followed by an optional left bracket or dot (type of subscript)\n//\n// Note: These portions can be read in a non-overlapping fashion and\n// allow straightforward parsing of the hierarchy that WebGL encodes\n// in the uniform names.\n\nfunction addUniform( container, uniformObject ) {\n\n\tcontainer.seq.push( uniformObject );\n\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n}\n\nfunction parseUniform( activeInfo, addr, container ) {\n\n\tconst path = activeInfo.name,\n\t\tpathLength = path.length;\n\n\t// reset RegExp object, because of the early exit of a previous run\n\tRePathPart.lastIndex = 0;\n\n\twhile ( true ) {\n\n\t\tconst match = RePathPart.exec( path ),\n\t\t\tmatchEnd = RePathPart.lastIndex;\n\n\t\tlet id = match[ 1 ];\n\t\tconst idIsIndex = match[ 2 ] === ']',\n\t\t\tsubscript = match[ 3 ];\n\n\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\tbreak;\n\n\t\t} else {\n\n\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\tconst map = container.map;\n\t\t\tlet next = map[ id ];\n\n\t\t\tif ( next === undefined ) {\n\n\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\taddUniform( container, next );\n\n\t\t\t}\n\n\t\t\tcontainer = next;\n\n\t\t}\n\n\t}\n\n}\n\n// Root Container\n\nclass WebGLUniforms {\n\n\tconstructor( gl, program ) {\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t\tconst n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\t\tfor ( let i = 0; i < n; ++ i ) {\n\n\t\t\tconst info = gl.getActiveUniform( program, i ),\n\t\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\t\tparseUniform( info, addr, this );\n\n\t\t}\n\n\t}\n\n\tsetValue( gl, name, value, textures ) {\n\n\t\tconst u = this.map[ name ];\n\n\t\tif ( u !== undefined ) u.setValue( gl, value, textures );\n\n\t}\n\n\tsetOptional( gl, object, name ) {\n\n\t\tconst v = object[ name ];\n\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n\t}\n\n\tstatic upload( gl, seq, values, textures ) {\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ],\n\t\t\t\tv = values[ u.id ];\n\n\t\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue( gl, v.value, textures );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tstatic seqWithValue( seq, values ) {\n\n\t\tconst r = [];\n\n\t\tfor ( let i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tconst u = seq[ i ];\n\t\t\tif ( u.id in values ) r.push( u );\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n}\n\nfunction WebGLShader( gl, type, string ) {\n\n\tconst shader = gl.createShader( type );\n\n\tgl.shaderSource( shader, string );\n\tgl.compileShader( shader );\n\n\treturn shader;\n\n}\n\n// From https://www.khronos.org/registry/webgl/extensions/KHR_parallel_shader_compile/\nconst COMPLETION_STATUS_KHR = 0x91B1;\n\nlet programIdCount = 0;\n\nfunction handleSource( string, errorLine ) {\n\n\tconst lines = string.split( '\\n' );\n\tconst lines2 = [];\n\n\tconst from = Math.max( errorLine - 6, 0 );\n\tconst to = Math.min( errorLine + 6, lines.length );\n\n\tfor ( let i = from; i < to; i ++ ) {\n\n\t\tconst line = i + 1;\n\t\tlines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );\n\n\t}\n\n\treturn lines2.join( '\\n' );\n\n}\n\nfunction getEncodingComponents( colorSpace ) {\n\n\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\tconst encodingPrimaries = ColorManagement.getPrimaries( colorSpace );\n\n\tlet gamutMapping;\n\n\tif ( workingPrimaries === encodingPrimaries ) {\n\n\t\tgamutMapping = '';\n\n\t} else if ( workingPrimaries === P3Primaries && encodingPrimaries === Rec709Primaries ) {\n\n\t\tgamutMapping = 'LinearDisplayP3ToLinearSRGB';\n\n\t} else if ( workingPrimaries === Rec709Primaries && encodingPrimaries === P3Primaries ) {\n\n\t\tgamutMapping = 'LinearSRGBToLinearDisplayP3';\n\n\t}\n\n\tswitch ( colorSpace ) {\n\n\t\tcase LinearSRGBColorSpace:\n\t\tcase LinearDisplayP3ColorSpace:\n\t\t\treturn [ gamutMapping, 'LinearTransferOETF' ];\n\n\t\tcase SRGBColorSpace:\n\t\tcase DisplayP3ColorSpace:\n\t\t\treturn [ gamutMapping, 'sRGBTransferOETF' ];\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported color space:', colorSpace );\n\t\t\treturn [ gamutMapping, 'LinearTransferOETF' ];\n\n\t}\n\n}\n\nfunction getShaderErrors( gl, shader, type ) {\n\n\tconst status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );\n\tconst errors = gl.getShaderInfoLog( shader ).trim();\n\n\tif ( status && errors === '' ) return '';\n\n\tconst errorMatches = /ERROR: 0:(\\d+)/.exec( errors );\n\tif ( errorMatches ) {\n\n\t\t// --enable-privileged-webgl-extension\n\t\t// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\tconst errorLine = parseInt( errorMatches[ 1 ] );\n\t\treturn type.toUpperCase() + '\\n\\n' + errors + '\\n\\n' + handleSource( gl.getShaderSource( shader ), errorLine );\n\n\t} else {\n\n\t\treturn errors;\n\n\t}\n\n}\n\nfunction getTexelEncodingFunction( functionName, colorSpace ) {\n\n\tconst components = getEncodingComponents( colorSpace );\n\treturn `vec4 ${functionName}( vec4 value ) { return ${components[ 0 ]}( ${components[ 1 ]}( value ) ); }`;\n\n}\n\nfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\tlet toneMappingName;\n\n\tswitch ( toneMapping ) {\n\n\t\tcase LinearToneMapping:\n\t\t\ttoneMappingName = 'Linear';\n\t\t\tbreak;\n\n\t\tcase ReinhardToneMapping:\n\t\t\ttoneMappingName = 'Reinhard';\n\t\t\tbreak;\n\n\t\tcase CineonToneMapping:\n\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\tbreak;\n\n\t\tcase ACESFilmicToneMapping:\n\t\t\ttoneMappingName = 'ACESFilmic';\n\t\t\tbreak;\n\n\t\tcase AgXToneMapping:\n\t\t\ttoneMappingName = 'AgX';\n\t\t\tbreak;\n\n\t\tcase NeutralToneMapping:\n\t\t\ttoneMappingName = 'Neutral';\n\t\t\tbreak;\n\n\t\tcase CustomToneMapping:\n\t\t\ttoneMappingName = 'Custom';\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tconsole.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );\n\t\t\ttoneMappingName = 'Linear';\n\n\t}\n\n\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n}\n\nconst _v0$1 = /*@__PURE__*/ new Vector3();\n\nfunction getLuminanceFunction() {\n\n\tColorManagement.getLuminanceCoefficients( _v0$1 );\n\n\tconst r = _v0$1.x.toFixed( 4 );\n\tconst g = _v0$1.y.toFixed( 4 );\n\tconst b = _v0$1.z.toFixed( 4 );\n\n\treturn [\n\n\t\t'float luminance( const in vec3 rgb ) {',\n\n\t\t`\tconst vec3 weights = vec3( ${ r }, ${ g }, ${ b } );`,\n\n\t\t'\treturn dot( weights, rgb );',\n\n\t\t'}'\n\n\t].join( '\\n' );\n\n}\n\nfunction generateVertexExtensions( parameters ) {\n\n\tconst chunks = [\n\t\tparameters.extensionClipCullDistance ? '#extension GL_ANGLE_clip_cull_distance : require' : '',\n\t\tparameters.extensionMultiDraw ? '#extension GL_ANGLE_multi_draw : require' : '',\n\t];\n\n\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n}\n\nfunction generateDefines( defines ) {\n\n\tconst chunks = [];\n\n\tfor ( const name in defines ) {\n\n\t\tconst value = defines[ name ];\n\n\t\tif ( value === false ) continue;\n\n\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t}\n\n\treturn chunks.join( '\\n' );\n\n}\n\nfunction fetchAttributeLocations( gl, program ) {\n\n\tconst attributes = {};\n\n\tconst n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\tfor ( let i = 0; i < n; i ++ ) {\n\n\t\tconst info = gl.getActiveAttrib( program, i );\n\t\tconst name = info.name;\n\n\t\tlet locationSize = 1;\n\t\tif ( info.type === gl.FLOAT_MAT2 ) locationSize = 2;\n\t\tif ( info.type === gl.FLOAT_MAT3 ) locationSize = 3;\n\t\tif ( info.type === gl.FLOAT_MAT4 ) locationSize = 4;\n\n\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\tattributes[ name ] = {\n\t\t\ttype: info.type,\n\t\t\tlocation: gl.getAttribLocation( program, name ),\n\t\t\tlocationSize: locationSize\n\t\t};\n\n\t}\n\n\treturn attributes;\n\n}\n\nfunction filterEmptyLine( string ) {\n\n\treturn string !== '';\n\n}\n\nfunction replaceLightNums( string, parameters ) {\n\n\tconst numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;\n\n\treturn string\n\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t.replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )\n\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )\n\t\t.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )\n\t\t.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )\n\t\t.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );\n\n}\n\nfunction replaceClippingPlaneNums( string, parameters ) {\n\n\treturn string\n\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n}\n\n// Resolve Includes\n\nconst includePattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n\nfunction resolveIncludes( string ) {\n\n\treturn string.replace( includePattern, includeReplacer );\n\n}\n\nconst shaderChunkMap = new Map();\n\nfunction includeReplacer( match, include ) {\n\n\tlet string = ShaderChunk[ include ];\n\n\tif ( string === undefined ) {\n\n\t\tconst newInclude = shaderChunkMap.get( include );\n\n\t\tif ( newInclude !== undefined ) {\n\n\t\t\tstring = ShaderChunk[ newInclude ];\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Shader chunk \"%s\" has been deprecated. Use \"%s\" instead.', include, newInclude );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t}\n\n\t}\n\n\treturn resolveIncludes( string );\n\n}\n\n// Unroll Loops\n\nconst unrollLoopPattern = /#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*<\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;\n\nfunction unrollLoops( string ) {\n\n\treturn string.replace( unrollLoopPattern, loopReplacer );\n\n}\n\nfunction loopReplacer( match, start, end, snippet ) {\n\n\tlet string = '';\n\n\tfor ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\tstring += snippet\n\t\t\t.replace( /\\[\\s*i\\s*\\]/g, '[ ' + i + ' ]' )\n\t\t\t.replace( /UNROLLED_LOOP_INDEX/g, i );\n\n\t}\n\n\treturn string;\n\n}\n\n//\n\nfunction generatePrecision( parameters ) {\n\n\tlet precisionstring = `precision ${parameters.precision} float;\n\tprecision ${parameters.precision} int;\n\tprecision ${parameters.precision} sampler2D;\n\tprecision ${parameters.precision} samplerCube;\n\tprecision ${parameters.precision} sampler3D;\n\tprecision ${parameters.precision} sampler2DArray;\n\tprecision ${parameters.precision} sampler2DShadow;\n\tprecision ${parameters.precision} samplerCubeShadow;\n\tprecision ${parameters.precision} sampler2DArrayShadow;\n\tprecision ${parameters.precision} isampler2D;\n\tprecision ${parameters.precision} isampler3D;\n\tprecision ${parameters.precision} isamplerCube;\n\tprecision ${parameters.precision} isampler2DArray;\n\tprecision ${parameters.precision} usampler2D;\n\tprecision ${parameters.precision} usampler3D;\n\tprecision ${parameters.precision} usamplerCube;\n\tprecision ${parameters.precision} usampler2DArray;\n\t`;\n\n\tif ( parameters.precision === 'highp' ) {\n\n\t\tprecisionstring += '\\n#define HIGH_PRECISION';\n\n\t} else if ( parameters.precision === 'mediump' ) {\n\n\t\tprecisionstring += '\\n#define MEDIUM_PRECISION';\n\n\t} else if ( parameters.precision === 'lowp' ) {\n\n\t\tprecisionstring += '\\n#define LOW_PRECISION';\n\n\t}\n\n\treturn precisionstring;\n\n}\n\nfunction generateShadowMapTypeDefine( parameters ) {\n\n\tlet shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t} else if ( parameters.shadowMapType === VSMShadowMap ) {\n\n\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';\n\n\t}\n\n\treturn shadowMapTypeDefine;\n\n}\n\nfunction generateEnvMapTypeDefine( parameters ) {\n\n\tlet envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeReflectionMapping:\n\t\t\tcase CubeRefractionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\tbreak;\n\n\t\t\tcase CubeUVReflectionMapping:\n\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapTypeDefine;\n\n}\n\nfunction generateEnvMapModeDefine( parameters ) {\n\n\tlet envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.envMapMode ) {\n\n\t\t\tcase CubeRefractionMapping:\n\n\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapModeDefine;\n\n}\n\nfunction generateEnvMapBlendingDefine( parameters ) {\n\n\tlet envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';\n\n\tif ( parameters.envMap ) {\n\n\t\tswitch ( parameters.combine ) {\n\n\t\t\tcase MultiplyOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\tbreak;\n\n\t\t\tcase MixOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\tbreak;\n\n\t\t\tcase AddOperation:\n\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\treturn envMapBlendingDefine;\n\n}\n\nfunction generateCubeUVSize( parameters ) {\n\n\tconst imageHeight = parameters.envMapCubeUVHeight;\n\n\tif ( imageHeight === null ) return null;\n\n\tconst maxMip = Math.log2( imageHeight ) - 2;\n\n\tconst texelHeight = 1.0 / imageHeight;\n\n\tconst texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );\n\n\treturn { texelWidth, texelHeight, maxMip };\n\n}\n\nfunction WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {\n\n\t// TODO Send this event to Three.js DevTools\n\t// console.log( 'WebGLProgram', cacheKey );\n\n\tconst gl = renderer.getContext();\n\n\tconst defines = parameters.defines;\n\n\tlet vertexShader = parameters.vertexShader;\n\tlet fragmentShader = parameters.fragmentShader;\n\n\tconst shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );\n\tconst envMapTypeDefine = generateEnvMapTypeDefine( parameters );\n\tconst envMapModeDefine = generateEnvMapModeDefine( parameters );\n\tconst envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );\n\tconst envMapCubeUVSize = generateCubeUVSize( parameters );\n\n\tconst customVertexExtensions = generateVertexExtensions( parameters );\n\n\tconst customDefines = generateDefines( defines );\n\n\tconst program = gl.createProgram();\n\n\tlet prefixVertex, prefixFragment;\n\tlet versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\\n' : '';\n\n\tif ( parameters.isRawShaderMaterial ) {\n\n\t\tprefixVertex = [\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\tprefixVertex += '\\n';\n\n\t\t}\n\n\t\tprefixFragment = [\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\tprefixFragment += '\\n';\n\n\t\t}\n\n\t} else {\n\n\t\tprefixVertex = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.extensionClipCullDistance ? '#define USE_CLIP_DISTANCE' : '',\n\t\t\tparameters.batching ? '#define USE_BATCHING' : '',\n\t\t\tparameters.batchingColor ? '#define USE_BATCHING_COLOR' : '',\n\t\t\tparameters.instancing ? '#define USE_INSTANCING' : '',\n\t\t\tparameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',\n\t\t\tparameters.instancingMorph ? '#define USE_INSTANCING_MORPH' : '',\n\n\t\t\tparameters.useFog && parameters.fog ? '#define USE_FOG' : '',\n\t\t\tparameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',\n\t\t\tparameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',\n\t\t\tparameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\n\t\t\tparameters.anisotropy ? '#define USE_ANISOTROPY' : '',\n\t\t\tparameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',\n\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaHash ? '#define USE_ALPHAHASH' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',\n\n\t\t\t//\n\n\t\t\tparameters.mapUv ? '#define MAP_UV ' + parameters.mapUv : '',\n\t\t\tparameters.alphaMapUv ? '#define ALPHAMAP_UV ' + parameters.alphaMapUv : '',\n\t\t\tparameters.lightMapUv ? '#define LIGHTMAP_UV ' + parameters.lightMapUv : '',\n\t\t\tparameters.aoMapUv ? '#define AOMAP_UV ' + parameters.aoMapUv : '',\n\t\t\tparameters.emissiveMapUv ? '#define EMISSIVEMAP_UV ' + parameters.emissiveMapUv : '',\n\t\t\tparameters.bumpMapUv ? '#define BUMPMAP_UV ' + parameters.bumpMapUv : '',\n\t\t\tparameters.normalMapUv ? '#define NORMALMAP_UV ' + parameters.normalMapUv : '',\n\t\t\tparameters.displacementMapUv ? '#define DISPLACEMENTMAP_UV ' + parameters.displacementMapUv : '',\n\n\t\t\tparameters.metalnessMapUv ? '#define METALNESSMAP_UV ' + parameters.metalnessMapUv : '',\n\t\t\tparameters.roughnessMapUv ? '#define ROUGHNESSMAP_UV ' + parameters.roughnessMapUv : '',\n\n\t\t\tparameters.anisotropyMapUv ? '#define ANISOTROPYMAP_UV ' + parameters.anisotropyMapUv : '',\n\n\t\t\tparameters.clearcoatMapUv ? '#define CLEARCOATMAP_UV ' + parameters.clearcoatMapUv : '',\n\t\t\tparameters.clearcoatNormalMapUv ? '#define CLEARCOAT_NORMALMAP_UV ' + parameters.clearcoatNormalMapUv : '',\n\t\t\tparameters.clearcoatRoughnessMapUv ? '#define CLEARCOAT_ROUGHNESSMAP_UV ' + parameters.clearcoatRoughnessMapUv : '',\n\n\t\t\tparameters.iridescenceMapUv ? '#define IRIDESCENCEMAP_UV ' + parameters.iridescenceMapUv : '',\n\t\t\tparameters.iridescenceThicknessMapUv ? '#define IRIDESCENCE_THICKNESSMAP_UV ' + parameters.iridescenceThicknessMapUv : '',\n\n\t\t\tparameters.sheenColorMapUv ? '#define SHEEN_COLORMAP_UV ' + parameters.sheenColorMapUv : '',\n\t\t\tparameters.sheenRoughnessMapUv ? '#define SHEEN_ROUGHNESSMAP_UV ' + parameters.sheenRoughnessMapUv : '',\n\n\t\t\tparameters.specularMapUv ? '#define SPECULARMAP_UV ' + parameters.specularMapUv : '',\n\t\t\tparameters.specularColorMapUv ? '#define SPECULAR_COLORMAP_UV ' + parameters.specularColorMapUv : '',\n\t\t\tparameters.specularIntensityMapUv ? '#define SPECULAR_INTENSITYMAP_UV ' + parameters.specularIntensityMapUv : '',\n\n\t\t\tparameters.transmissionMapUv ? '#define TRANSMISSIONMAP_UV ' + parameters.transmissionMapUv : '',\n\t\t\tparameters.thicknessMapUv ? '#define THICKNESSMAP_UV ' + parameters.thicknessMapUv : '',\n\n\t\t\t//\n\n\t\t\tparameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUv1s ? '#define USE_UV1' : '',\n\t\t\tparameters.vertexUv2s ? '#define USE_UV2' : '',\n\t\t\tparameters.vertexUv3s ? '#define USE_UV3' : '',\n\n\t\t\tparameters.pointsUvs ? '#define USE_POINTS_UV' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\n\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t( parameters.morphColors ) ? '#define USE_MORPHCOLORS' : '',\n\t\t\t( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',\n\t\t\t( parameters.morphTargetsCount > 0 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\tparameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\n\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t'#ifdef USE_INSTANCING',\n\n\t\t\t'\tattribute mat4 instanceMatrix;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_COLOR',\n\n\t\t\t'\tattribute vec3 instanceColor;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_INSTANCING_MORPH',\n\n\t\t\t'\tuniform sampler2D morphTexture;',\n\n\t\t\t'#endif',\n\n\t\t\t'attribute vec3 position;',\n\t\t\t'attribute vec3 normal;',\n\t\t\t'attribute vec2 uv;',\n\n\t\t\t'#ifdef USE_UV1',\n\n\t\t\t'\tattribute vec2 uv1;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_UV2',\n\n\t\t\t'\tattribute vec2 uv2;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_UV3',\n\n\t\t\t'\tattribute vec2 uv3;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_TANGENT',\n\n\t\t\t'\tattribute vec4 tangent;',\n\n\t\t\t'#endif',\n\n\t\t\t'#if defined( USE_COLOR_ALPHA )',\n\n\t\t\t'\tattribute vec4 color;',\n\n\t\t\t'#elif defined( USE_COLOR )',\n\n\t\t\t'\tattribute vec3 color;',\n\n\t\t\t'#endif',\n\n\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t'#endif',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\tprefixFragment = [\n\n\t\t\tgeneratePrecision( parameters ),\n\n\t\t\t'#define SHADER_TYPE ' + parameters.shaderType,\n\t\t\t'#define SHADER_NAME ' + parameters.shaderName,\n\n\t\t\tcustomDefines,\n\n\t\t\tparameters.useFog && parameters.fog ? '#define USE_FOG' : '',\n\t\t\tparameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',\n\n\t\t\tparameters.alphaToCoverage ? '#define ALPHA_TO_COVERAGE' : '',\n\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\tparameters.matcap ? '#define USE_MATCAP' : '',\n\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',\n\t\t\tenvMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',\n\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\tparameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',\n\t\t\tparameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',\n\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\n\t\t\tparameters.anisotropy ? '#define USE_ANISOTROPY' : '',\n\t\t\tparameters.anisotropyMap ? '#define USE_ANISOTROPYMAP' : '',\n\n\t\t\tparameters.clearcoat ? '#define USE_CLEARCOAT' : '',\n\t\t\tparameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',\n\t\t\tparameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',\n\t\t\tparameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',\n\n\t\t\tparameters.dispersion ? '#define USE_DISPERSION' : '',\n\n\t\t\tparameters.iridescence ? '#define USE_IRIDESCENCE' : '',\n\t\t\tparameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',\n\t\t\tparameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',\n\n\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\tparameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',\n\t\t\tparameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',\n\n\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\n\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\tparameters.alphaTest ? '#define USE_ALPHATEST' : '',\n\t\t\tparameters.alphaHash ? '#define USE_ALPHAHASH' : '',\n\n\t\t\tparameters.sheen ? '#define USE_SHEEN' : '',\n\t\t\tparameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',\n\t\t\tparameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',\n\n\t\t\tparameters.transmission ? '#define USE_TRANSMISSION' : '',\n\t\t\tparameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',\n\t\t\tparameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',\n\n\t\t\tparameters.vertexTangents && parameters.flatShading === false ? '#define USE_TANGENT' : '',\n\t\t\tparameters.vertexColors || parameters.instancingColor || parameters.batchingColor ? '#define USE_COLOR' : '',\n\t\t\tparameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',\n\t\t\tparameters.vertexUv1s ? '#define USE_UV1' : '',\n\t\t\tparameters.vertexUv2s ? '#define USE_UV2' : '',\n\t\t\tparameters.vertexUv3s ? '#define USE_UV3' : '',\n\n\t\t\tparameters.pointsUvs ? '#define USE_POINTS_UV' : '',\n\n\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\tparameters.numLightProbes > 0 ? '#define USE_LIGHT_PROBES' : '',\n\n\t\t\tparameters.decodeVideoTexture ? '#define DECODE_VIDEO_TEXTURE' : '',\n\n\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\n\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t'uniform vec3 cameraPosition;',\n\t\t\t'uniform bool isOrthographic;',\n\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\t\t\tparameters.opaque ? '#define OPAQUE' : '',\n\n\t\t\tShaderChunk[ 'colorspace_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\tgetTexelEncodingFunction( 'linearToOutputTexel', parameters.outputColorSpace ),\n\t\t\tgetLuminanceFunction(),\n\n\t\t\tparameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',\n\n\t\t\t'\\n'\n\n\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tvertexShader = resolveIncludes( vertexShader );\n\tvertexShader = replaceLightNums( vertexShader, parameters );\n\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\tfragmentShader = resolveIncludes( fragmentShader );\n\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\tvertexShader = unrollLoops( vertexShader );\n\tfragmentShader = unrollLoops( fragmentShader );\n\n\tif ( parameters.isRawShaderMaterial !== true ) {\n\n\t\t// GLSL 3.0 conversion for built-in materials and ShaderMaterial\n\n\t\tversionString = '#version 300 es\\n';\n\n\t\tprefixVertex = [\n\t\t\tcustomVertexExtensions,\n\t\t\t'#define attribute in',\n\t\t\t'#define varying out',\n\t\t\t'#define texture2D texture'\n\t\t].join( '\\n' ) + '\\n' + prefixVertex;\n\n\t\tprefixFragment = [\n\t\t\t'#define varying in',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',\n\t\t\t( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',\n\t\t\t'#define gl_FragDepthEXT gl_FragDepth',\n\t\t\t'#define texture2D texture',\n\t\t\t'#define textureCube texture',\n\t\t\t'#define texture2DProj textureProj',\n\t\t\t'#define texture2DLodEXT textureLod',\n\t\t\t'#define texture2DProjLodEXT textureProjLod',\n\t\t\t'#define textureCubeLodEXT textureLod',\n\t\t\t'#define texture2DGradEXT textureGrad',\n\t\t\t'#define texture2DProjGradEXT textureProjGrad',\n\t\t\t'#define textureCubeGradEXT textureGrad'\n\t\t].join( '\\n' ) + '\\n' + prefixFragment;\n\n\t}\n\n\tconst vertexGlsl = versionString + prefixVertex + vertexShader;\n\tconst fragmentGlsl = versionString + prefixFragment + fragmentShader;\n\n\t// console.log( '*VERTEX*', vertexGlsl );\n\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\tconst glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\tconst glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\tgl.attachShader( program, glVertexShader );\n\tgl.attachShader( program, glFragmentShader );\n\n\t// Force a particular attribute to index 0.\n\n\tif ( parameters.index0AttributeName !== undefined ) {\n\n\t\tgl.bindAttribLocation( program, 0, parameters.index0AttributeName );\n\n\t} else if ( parameters.morphTargets === true ) {\n\n\t\t// programs with morphTargets displace position out of attribute 0\n\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t}\n\n\tgl.linkProgram( program );\n\n\tfunction onFirstUse( self ) {\n\n\t\t// check for link errors\n\t\tif ( renderer.debug.checkShaderErrors ) {\n\n\t\t\tconst programLog = gl.getProgramInfoLog( program ).trim();\n\t\t\tconst vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\t\tconst fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\t\tlet runnable = true;\n\t\t\tlet haveDiagnostics = true;\n\n\t\t\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\t\t\trunnable = false;\n\n\t\t\t\tif ( typeof renderer.debug.onShaderError === 'function' ) {\n\n\t\t\t\t\trenderer.debug.onShaderError( gl, program, glVertexShader, glFragmentShader );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// default error reporting\n\n\t\t\t\t\tconst vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );\n\t\t\t\t\tconst fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );\n\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +\n\t\t\t\t\t\t'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\\n\\n' +\n\t\t\t\t\t\t'Material Name: ' + self.name + '\\n' +\n\t\t\t\t\t\t'Material Type: ' + self.type + '\\n\\n' +\n\t\t\t\t\t\t'Program Info Log: ' + programLog + '\\n' +\n\t\t\t\t\t\tvertexErrors + '\\n' +\n\t\t\t\t\t\tfragmentErrors\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( programLog !== '' ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );\n\n\t\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\t\thaveDiagnostics = false;\n\n\t\t\t}\n\n\t\t\tif ( haveDiagnostics ) {\n\n\t\t\t\tself.diagnostics = {\n\n\t\t\t\t\trunnable: runnable,\n\n\t\t\t\t\tprogramLog: programLog,\n\n\t\t\t\t\tvertexShader: {\n\n\t\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t\t},\n\n\t\t\t\t\tfragmentShader: {\n\n\t\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Clean up\n\n\t\t// Crashes in iOS9 and iOS10. #18402\n\t\t// gl.detachShader( program, glVertexShader );\n\t\t// gl.detachShader( program, glFragmentShader );\n\n\t\tgl.deleteShader( glVertexShader );\n\t\tgl.deleteShader( glFragmentShader );\n\n\t\tcachedUniforms = new WebGLUniforms( gl, program );\n\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t}\n\n\t// set up caching for uniform locations\n\n\tlet cachedUniforms;\n\n\tthis.getUniforms = function () {\n\n\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\t// Populates cachedUniforms and cachedAttributes\n\t\t\tonFirstUse( this );\n\n\t\t}\n\n\t\treturn cachedUniforms;\n\n\t};\n\n\t// set up caching for attribute locations\n\n\tlet cachedAttributes;\n\n\tthis.getAttributes = function () {\n\n\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\t// Populates cachedAttributes and cachedUniforms\n\t\t\tonFirstUse( this );\n\n\t\t}\n\n\t\treturn cachedAttributes;\n\n\t};\n\n\t// indicate when the program is ready to be used. if the KHR_parallel_shader_compile extension isn't supported,\n\t// flag the program as ready immediately. It may cause a stall when it's first used.\n\n\tlet programReady = ( parameters.rendererExtensionParallelShaderCompile === false );\n\n\tthis.isReady = function () {\n\n\t\tif ( programReady === false ) {\n\n\t\t\tprogramReady = gl.getProgramParameter( program, COMPLETION_STATUS_KHR );\n\n\t\t}\n\n\t\treturn programReady;\n\n\t};\n\n\t// free resource\n\n\tthis.destroy = function () {\n\n\t\tbindingStates.releaseStatesOfProgram( this );\n\n\t\tgl.deleteProgram( program );\n\t\tthis.program = undefined;\n\n\t};\n\n\t//\n\n\tthis.type = parameters.shaderType;\n\tthis.name = parameters.shaderName;\n\tthis.id = programIdCount ++;\n\tthis.cacheKey = cacheKey;\n\tthis.usedTimes = 1;\n\tthis.program = program;\n\tthis.vertexShader = glVertexShader;\n\tthis.fragmentShader = glFragmentShader;\n\n\treturn this;\n\n}\n\nlet _id$1 = 0;\n\nclass WebGLShaderCache {\n\n\tconstructor() {\n\n\t\tthis.shaderCache = new Map();\n\t\tthis.materialCache = new Map();\n\n\t}\n\n\tupdate( material ) {\n\n\t\tconst vertexShader = material.vertexShader;\n\t\tconst fragmentShader = material.fragmentShader;\n\n\t\tconst vertexShaderStage = this._getShaderStage( vertexShader );\n\t\tconst fragmentShaderStage = this._getShaderStage( fragmentShader );\n\n\t\tconst materialShaders = this._getShaderCacheForMaterial( material );\n\n\t\tif ( materialShaders.has( vertexShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( vertexShaderStage );\n\t\t\tvertexShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\tif ( materialShaders.has( fragmentShaderStage ) === false ) {\n\n\t\t\tmaterialShaders.add( fragmentShaderStage );\n\t\t\tfragmentShaderStage.usedTimes ++;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tremove( material ) {\n\n\t\tconst materialShaders = this.materialCache.get( material );\n\n\t\tfor ( const shaderStage of materialShaders ) {\n\n\t\t\tshaderStage.usedTimes --;\n\n\t\t\tif ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage.code );\n\n\t\t}\n\n\t\tthis.materialCache.delete( material );\n\n\t\treturn this;\n\n\t}\n\n\tgetVertexShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.vertexShader ).id;\n\n\t}\n\n\tgetFragmentShaderID( material ) {\n\n\t\treturn this._getShaderStage( material.fragmentShader ).id;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shaderCache.clear();\n\t\tthis.materialCache.clear();\n\n\t}\n\n\t_getShaderCacheForMaterial( material ) {\n\n\t\tconst cache = this.materialCache;\n\t\tlet set = cache.get( material );\n\n\t\tif ( set === undefined ) {\n\n\t\t\tset = new Set();\n\t\t\tcache.set( material, set );\n\n\t\t}\n\n\t\treturn set;\n\n\t}\n\n\t_getShaderStage( code ) {\n\n\t\tconst cache = this.shaderCache;\n\t\tlet stage = cache.get( code );\n\n\t\tif ( stage === undefined ) {\n\n\t\t\tstage = new WebGLShaderStage( code );\n\t\t\tcache.set( code, stage );\n\n\t\t}\n\n\t\treturn stage;\n\n\t}\n\n}\n\nclass WebGLShaderStage {\n\n\tconstructor( code ) {\n\n\t\tthis.id = _id$1 ++;\n\n\t\tthis.code = code;\n\t\tthis.usedTimes = 0;\n\n\t}\n\n}\n\nfunction WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {\n\n\tconst _programLayers = new Layers();\n\tconst _customShaders = new WebGLShaderCache();\n\tconst _activeChannels = new Set();\n\tconst programs = [];\n\n\tconst logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;\n\tconst SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;\n\n\tlet precision = capabilities.precision;\n\n\tconst shaderIDs = {\n\t\tMeshDepthMaterial: 'depth',\n\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\tMeshNormalMaterial: 'normal',\n\t\tMeshBasicMaterial: 'basic',\n\t\tMeshLambertMaterial: 'lambert',\n\t\tMeshPhongMaterial: 'phong',\n\t\tMeshToonMaterial: 'toon',\n\t\tMeshStandardMaterial: 'physical',\n\t\tMeshPhysicalMaterial: 'physical',\n\t\tMeshMatcapMaterial: 'matcap',\n\t\tLineBasicMaterial: 'basic',\n\t\tLineDashedMaterial: 'dashed',\n\t\tPointsMaterial: 'points',\n\t\tShadowMaterial: 'shadow',\n\t\tSpriteMaterial: 'sprite'\n\t};\n\n\tfunction getChannel( value ) {\n\n\t\t_activeChannels.add( value );\n\n\t\tif ( value === 0 ) return 'uv';\n\n\t\treturn `uv${ value }`;\n\n\t}\n\n\tfunction getParameters( material, lights, shadows, scene, object ) {\n\n\t\tconst fog = scene.fog;\n\t\tconst geometry = object.geometry;\n\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\n\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\tconst envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\n\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t// (not to blow over maxLights budget)\n\n\t\tif ( material.precision !== null ) {\n\n\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\tlet morphTextureStride = 0;\n\n\t\tif ( geometry.morphAttributes.position !== undefined ) morphTextureStride = 1;\n\t\tif ( geometry.morphAttributes.normal !== undefined ) morphTextureStride = 2;\n\t\tif ( geometry.morphAttributes.color !== undefined ) morphTextureStride = 3;\n\n\t\t//\n\n\t\tlet vertexShader, fragmentShader;\n\t\tlet customVertexShaderID, customFragmentShaderID;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\n\t\t\tvertexShader = shader.vertexShader;\n\t\t\tfragmentShader = shader.fragmentShader;\n\n\t\t} else {\n\n\t\t\tvertexShader = material.vertexShader;\n\t\t\tfragmentShader = material.fragmentShader;\n\n\t\t\t_customShaders.update( material );\n\n\t\t\tcustomVertexShaderID = _customShaders.getVertexShaderID( material );\n\t\t\tcustomFragmentShaderID = _customShaders.getFragmentShaderID( material );\n\n\t\t}\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\n\t\tconst IS_INSTANCEDMESH = object.isInstancedMesh === true;\n\t\tconst IS_BATCHEDMESH = object.isBatchedMesh === true;\n\n\t\tconst HAS_MAP = !! material.map;\n\t\tconst HAS_MATCAP = !! material.matcap;\n\t\tconst HAS_ENVMAP = !! envMap;\n\t\tconst HAS_AOMAP = !! material.aoMap;\n\t\tconst HAS_LIGHTMAP = !! material.lightMap;\n\t\tconst HAS_BUMPMAP = !! material.bumpMap;\n\t\tconst HAS_NORMALMAP = !! material.normalMap;\n\t\tconst HAS_DISPLACEMENTMAP = !! material.displacementMap;\n\t\tconst HAS_EMISSIVEMAP = !! material.emissiveMap;\n\n\t\tconst HAS_METALNESSMAP = !! material.metalnessMap;\n\t\tconst HAS_ROUGHNESSMAP = !! material.roughnessMap;\n\n\t\tconst HAS_ANISOTROPY = material.anisotropy > 0;\n\t\tconst HAS_CLEARCOAT = material.clearcoat > 0;\n\t\tconst HAS_DISPERSION = material.dispersion > 0;\n\t\tconst HAS_IRIDESCENCE = material.iridescence > 0;\n\t\tconst HAS_SHEEN = material.sheen > 0;\n\t\tconst HAS_TRANSMISSION = material.transmission > 0;\n\n\t\tconst HAS_ANISOTROPYMAP = HAS_ANISOTROPY && !! material.anisotropyMap;\n\n\t\tconst HAS_CLEARCOATMAP = HAS_CLEARCOAT && !! material.clearcoatMap;\n\t\tconst HAS_CLEARCOAT_NORMALMAP = HAS_CLEARCOAT && !! material.clearcoatNormalMap;\n\t\tconst HAS_CLEARCOAT_ROUGHNESSMAP = HAS_CLEARCOAT && !! material.clearcoatRoughnessMap;\n\n\t\tconst HAS_IRIDESCENCEMAP = HAS_IRIDESCENCE && !! material.iridescenceMap;\n\t\tconst HAS_IRIDESCENCE_THICKNESSMAP = HAS_IRIDESCENCE && !! material.iridescenceThicknessMap;\n\n\t\tconst HAS_SHEEN_COLORMAP = HAS_SHEEN && !! material.sheenColorMap;\n\t\tconst HAS_SHEEN_ROUGHNESSMAP = HAS_SHEEN && !! material.sheenRoughnessMap;\n\n\t\tconst HAS_SPECULARMAP = !! material.specularMap;\n\t\tconst HAS_SPECULAR_COLORMAP = !! material.specularColorMap;\n\t\tconst HAS_SPECULAR_INTENSITYMAP = !! material.specularIntensityMap;\n\n\t\tconst HAS_TRANSMISSIONMAP = HAS_TRANSMISSION && !! material.transmissionMap;\n\t\tconst HAS_THICKNESSMAP = HAS_TRANSMISSION && !! material.thicknessMap;\n\n\t\tconst HAS_GRADIENTMAP = !! material.gradientMap;\n\n\t\tconst HAS_ALPHAMAP = !! material.alphaMap;\n\n\t\tconst HAS_ALPHATEST = material.alphaTest > 0;\n\n\t\tconst HAS_ALPHAHASH = !! material.alphaHash;\n\n\t\tconst HAS_EXTENSIONS = !! material.extensions;\n\n\t\tlet toneMapping = NoToneMapping;\n\n\t\tif ( material.toneMapped ) {\n\n\t\t\tif ( currentRenderTarget === null || currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\t\ttoneMapping = renderer.toneMapping;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst parameters = {\n\n\t\t\tshaderID: shaderID,\n\t\t\tshaderType: material.type,\n\t\t\tshaderName: material.name,\n\n\t\t\tvertexShader: vertexShader,\n\t\t\tfragmentShader: fragmentShader,\n\t\t\tdefines: material.defines,\n\n\t\t\tcustomVertexShaderID: customVertexShaderID,\n\t\t\tcustomFragmentShaderID: customFragmentShaderID,\n\n\t\t\tisRawShaderMaterial: material.isRawShaderMaterial === true,\n\t\t\tglslVersion: material.glslVersion,\n\n\t\t\tprecision: precision,\n\n\t\t\tbatching: IS_BATCHEDMESH,\n\t\t\tbatchingColor: IS_BATCHEDMESH && object._colorsTexture !== null,\n\t\t\tinstancing: IS_INSTANCEDMESH,\n\t\t\tinstancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,\n\t\t\tinstancingMorph: IS_INSTANCEDMESH && object.morphTexture !== null,\n\n\t\t\tsupportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,\n\t\t\toutputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),\n\t\t\talphaToCoverage: !! material.alphaToCoverage,\n\n\t\t\tmap: HAS_MAP,\n\t\t\tmatcap: HAS_MATCAP,\n\t\t\tenvMap: HAS_ENVMAP,\n\t\t\tenvMapMode: HAS_ENVMAP && envMap.mapping,\n\t\t\tenvMapCubeUVHeight: envMapCubeUVHeight,\n\t\t\taoMap: HAS_AOMAP,\n\t\t\tlightMap: HAS_LIGHTMAP,\n\t\t\tbumpMap: HAS_BUMPMAP,\n\t\t\tnormalMap: HAS_NORMALMAP,\n\t\t\tdisplacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP,\n\t\t\temissiveMap: HAS_EMISSIVEMAP,\n\n\t\t\tnormalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap,\n\t\t\tnormalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap,\n\n\t\t\tmetalnessMap: HAS_METALNESSMAP,\n\t\t\troughnessMap: HAS_ROUGHNESSMAP,\n\n\t\t\tanisotropy: HAS_ANISOTROPY,\n\t\t\tanisotropyMap: HAS_ANISOTROPYMAP,\n\n\t\t\tclearcoat: HAS_CLEARCOAT,\n\t\t\tclearcoatMap: HAS_CLEARCOATMAP,\n\t\t\tclearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP,\n\t\t\tclearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP,\n\n\t\t\tdispersion: HAS_DISPERSION,\n\n\t\t\tiridescence: HAS_IRIDESCENCE,\n\t\t\tiridescenceMap: HAS_IRIDESCENCEMAP,\n\t\t\tiridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP,\n\n\t\t\tsheen: HAS_SHEEN,\n\t\t\tsheenColorMap: HAS_SHEEN_COLORMAP,\n\t\t\tsheenRoughnessMap: HAS_SHEEN_ROUGHNESSMAP,\n\n\t\t\tspecularMap: HAS_SPECULARMAP,\n\t\t\tspecularColorMap: HAS_SPECULAR_COLORMAP,\n\t\t\tspecularIntensityMap: HAS_SPECULAR_INTENSITYMAP,\n\n\t\t\ttransmission: HAS_TRANSMISSION,\n\t\t\ttransmissionMap: HAS_TRANSMISSIONMAP,\n\t\t\tthicknessMap: HAS_THICKNESSMAP,\n\n\t\t\tgradientMap: HAS_GRADIENTMAP,\n\n\t\t\topaque: material.transparent === false && material.blending === NormalBlending && material.alphaToCoverage === false,\n\n\t\t\talphaMap: HAS_ALPHAMAP,\n\t\t\talphaTest: HAS_ALPHATEST,\n\t\t\talphaHash: HAS_ALPHAHASH,\n\n\t\t\tcombine: material.combine,\n\n\t\t\t//\n\n\t\t\tmapUv: HAS_MAP && getChannel( material.map.channel ),\n\t\t\taoMapUv: HAS_AOMAP && getChannel( material.aoMap.channel ),\n\t\t\tlightMapUv: HAS_LIGHTMAP && getChannel( material.lightMap.channel ),\n\t\t\tbumpMapUv: HAS_BUMPMAP && getChannel( material.bumpMap.channel ),\n\t\t\tnormalMapUv: HAS_NORMALMAP && getChannel( material.normalMap.channel ),\n\t\t\tdisplacementMapUv: HAS_DISPLACEMENTMAP && getChannel( material.displacementMap.channel ),\n\t\t\temissiveMapUv: HAS_EMISSIVEMAP && getChannel( material.emissiveMap.channel ),\n\n\t\t\tmetalnessMapUv: HAS_METALNESSMAP && getChannel( material.metalnessMap.channel ),\n\t\t\troughnessMapUv: HAS_ROUGHNESSMAP && getChannel( material.roughnessMap.channel ),\n\n\t\t\tanisotropyMapUv: HAS_ANISOTROPYMAP && getChannel( material.anisotropyMap.channel ),\n\n\t\t\tclearcoatMapUv: HAS_CLEARCOATMAP && getChannel( material.clearcoatMap.channel ),\n\t\t\tclearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel( material.clearcoatNormalMap.channel ),\n\t\t\tclearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel( material.clearcoatRoughnessMap.channel ),\n\n\t\t\tiridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel( material.iridescenceMap.channel ),\n\t\t\tiridescenceThicknessMapUv: HAS_IRIDESCENCE_THICKNESSMAP && getChannel( material.iridescenceThicknessMap.channel ),\n\n\t\t\tsheenColorMapUv: HAS_SHEEN_COLORMAP && getChannel( material.sheenColorMap.channel ),\n\t\t\tsheenRoughnessMapUv: HAS_SHEEN_ROUGHNESSMAP && getChannel( material.sheenRoughnessMap.channel ),\n\n\t\t\tspecularMapUv: HAS_SPECULARMAP && getChannel( material.specularMap.channel ),\n\t\t\tspecularColorMapUv: HAS_SPECULAR_COLORMAP && getChannel( material.specularColorMap.channel ),\n\t\t\tspecularIntensityMapUv: HAS_SPECULAR_INTENSITYMAP && getChannel( material.specularIntensityMap.channel ),\n\n\t\t\ttransmissionMapUv: HAS_TRANSMISSIONMAP && getChannel( material.transmissionMap.channel ),\n\t\t\tthicknessMapUv: HAS_THICKNESSMAP && getChannel( material.thicknessMap.channel ),\n\n\t\t\talphaMapUv: HAS_ALPHAMAP && getChannel( material.alphaMap.channel ),\n\n\t\t\t//\n\n\t\t\tvertexTangents: !! geometry.attributes.tangent && ( HAS_NORMALMAP || HAS_ANISOTROPY ),\n\t\t\tvertexColors: material.vertexColors,\n\t\t\tvertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,\n\n\t\t\tpointsUvs: object.isPoints === true && !! geometry.attributes.uv && ( HAS_MAP || HAS_ALPHAMAP ),\n\n\t\t\tfog: !! fog,\n\t\t\tuseFog: material.fog === true,\n\t\t\tfogExp2: ( !! fog && fog.isFogExp2 ),\n\n\t\t\tflatShading: material.flatShading === true,\n\n\t\t\tsizeAttenuation: material.sizeAttenuation === true,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tskinning: object.isSkinnedMesh === true,\n\n\t\t\tmorphTargets: geometry.morphAttributes.position !== undefined,\n\t\t\tmorphNormals: geometry.morphAttributes.normal !== undefined,\n\t\t\tmorphColors: geometry.morphAttributes.color !== undefined,\n\t\t\tmorphTargetsCount: morphTargetsCount,\n\t\t\tmorphTextureStride: morphTextureStride,\n\n\t\t\tnumDirLights: lights.directional.length,\n\t\t\tnumPointLights: lights.point.length,\n\t\t\tnumSpotLights: lights.spot.length,\n\t\t\tnumSpotLightMaps: lights.spotLightMap.length,\n\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\tnumDirLightShadows: lights.directionalShadowMap.length,\n\t\t\tnumPointLightShadows: lights.pointShadowMap.length,\n\t\t\tnumSpotLightShadows: lights.spotShadowMap.length,\n\t\t\tnumSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,\n\n\t\t\tnumLightProbes: lights.numLightProbes,\n\n\t\t\tnumClippingPlanes: clipping.numPlanes,\n\t\t\tnumClipIntersection: clipping.numIntersection,\n\n\t\t\tdithering: material.dithering,\n\n\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,\n\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\ttoneMapping: toneMapping,\n\n\t\t\tdecodeVideoTexture: HAS_MAP && ( material.map.isVideoTexture === true ) && ( ColorManagement.getTransfer( material.map.colorSpace ) === SRGBTransfer ),\n\n\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\tflipSided: material.side === BackSide,\n\n\t\t\tuseDepthPacking: material.depthPacking >= 0,\n\t\t\tdepthPacking: material.depthPacking || 0,\n\n\t\t\tindex0AttributeName: material.index0AttributeName,\n\n\t\t\textensionClipCullDistance: HAS_EXTENSIONS && material.extensions.clipCullDistance === true && extensions.has( 'WEBGL_clip_cull_distance' ),\n\t\t\textensionMultiDraw: ( HAS_EXTENSIONS && material.extensions.multiDraw === true || IS_BATCHEDMESH ) && extensions.has( 'WEBGL_multi_draw' ),\n\n\t\t\trendererExtensionParallelShaderCompile: extensions.has( 'KHR_parallel_shader_compile' ),\n\n\t\t\tcustomProgramCacheKey: material.customProgramCacheKey()\n\n\t\t};\n\n\t\t// the usage of getChannel() determines the active texture channels for this shader\n\n\t\tparameters.vertexUv1s = _activeChannels.has( 1 );\n\t\tparameters.vertexUv2s = _activeChannels.has( 2 );\n\t\tparameters.vertexUv3s = _activeChannels.has( 3 );\n\n\t\t_activeChannels.clear();\n\n\t\treturn parameters;\n\n\t}\n\n\tfunction getProgramCacheKey( parameters ) {\n\n\t\tconst array = [];\n\n\t\tif ( parameters.shaderID ) {\n\n\t\t\tarray.push( parameters.shaderID );\n\n\t\t} else {\n\n\t\t\tarray.push( parameters.customVertexShaderID );\n\t\t\tarray.push( parameters.customFragmentShaderID );\n\n\t\t}\n\n\t\tif ( parameters.defines !== undefined ) {\n\n\t\t\tfor ( const name in parameters.defines ) {\n\n\t\t\t\tarray.push( name );\n\t\t\t\tarray.push( parameters.defines[ name ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.isRawShaderMaterial === false ) {\n\n\t\t\tgetProgramCacheKeyParameters( array, parameters );\n\t\t\tgetProgramCacheKeyBooleans( array, parameters );\n\t\t\tarray.push( renderer.outputColorSpace );\n\n\t\t}\n\n\t\tarray.push( parameters.customProgramCacheKey );\n\n\t\treturn array.join();\n\n\t}\n\n\tfunction getProgramCacheKeyParameters( array, parameters ) {\n\n\t\tarray.push( parameters.precision );\n\t\tarray.push( parameters.outputColorSpace );\n\t\tarray.push( parameters.envMapMode );\n\t\tarray.push( parameters.envMapCubeUVHeight );\n\t\tarray.push( parameters.mapUv );\n\t\tarray.push( parameters.alphaMapUv );\n\t\tarray.push( parameters.lightMapUv );\n\t\tarray.push( parameters.aoMapUv );\n\t\tarray.push( parameters.bumpMapUv );\n\t\tarray.push( parameters.normalMapUv );\n\t\tarray.push( parameters.displacementMapUv );\n\t\tarray.push( parameters.emissiveMapUv );\n\t\tarray.push( parameters.metalnessMapUv );\n\t\tarray.push( parameters.roughnessMapUv );\n\t\tarray.push( parameters.anisotropyMapUv );\n\t\tarray.push( parameters.clearcoatMapUv );\n\t\tarray.push( parameters.clearcoatNormalMapUv );\n\t\tarray.push( parameters.clearcoatRoughnessMapUv );\n\t\tarray.push( parameters.iridescenceMapUv );\n\t\tarray.push( parameters.iridescenceThicknessMapUv );\n\t\tarray.push( parameters.sheenColorMapUv );\n\t\tarray.push( parameters.sheenRoughnessMapUv );\n\t\tarray.push( parameters.specularMapUv );\n\t\tarray.push( parameters.specularColorMapUv );\n\t\tarray.push( parameters.specularIntensityMapUv );\n\t\tarray.push( parameters.transmissionMapUv );\n\t\tarray.push( parameters.thicknessMapUv );\n\t\tarray.push( parameters.combine );\n\t\tarray.push( parameters.fogExp2 );\n\t\tarray.push( parameters.sizeAttenuation );\n\t\tarray.push( parameters.morphTargetsCount );\n\t\tarray.push( parameters.morphAttributeCount );\n\t\tarray.push( parameters.numDirLights );\n\t\tarray.push( parameters.numPointLights );\n\t\tarray.push( parameters.numSpotLights );\n\t\tarray.push( parameters.numSpotLightMaps );\n\t\tarray.push( parameters.numHemiLights );\n\t\tarray.push( parameters.numRectAreaLights );\n\t\tarray.push( parameters.numDirLightShadows );\n\t\tarray.push( parameters.numPointLightShadows );\n\t\tarray.push( parameters.numSpotLightShadows );\n\t\tarray.push( parameters.numSpotLightShadowsWithMaps );\n\t\tarray.push( parameters.numLightProbes );\n\t\tarray.push( parameters.shadowMapType );\n\t\tarray.push( parameters.toneMapping );\n\t\tarray.push( parameters.numClippingPlanes );\n\t\tarray.push( parameters.numClipIntersection );\n\t\tarray.push( parameters.depthPacking );\n\n\t}\n\n\tfunction getProgramCacheKeyBooleans( array, parameters ) {\n\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.supportsVertexTextures )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.instancing )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.instancingColor )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.instancingMorph )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.matcap )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.envMap )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.normalMapObjectSpace )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.normalMapTangentSpace )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.clearcoat )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.iridescence )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.alphaTest )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.vertexColors )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.vertexAlphas )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.vertexUv1s )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.vertexUv2s )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.vertexUv3s )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.vertexTangents )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.anisotropy )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.alphaHash )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.batching )\n\t\t\t_programLayers.enable( 19 );\n\t\tif ( parameters.dispersion )\n\t\t\t_programLayers.enable( 20 );\n\t\tif ( parameters.batchingColor )\n\t\t\t_programLayers.enable( 21 );\n\n\t\tarray.push( _programLayers.mask );\n\t\t_programLayers.disableAll();\n\n\t\tif ( parameters.fog )\n\t\t\t_programLayers.enable( 0 );\n\t\tif ( parameters.useFog )\n\t\t\t_programLayers.enable( 1 );\n\t\tif ( parameters.flatShading )\n\t\t\t_programLayers.enable( 2 );\n\t\tif ( parameters.logarithmicDepthBuffer )\n\t\t\t_programLayers.enable( 3 );\n\t\tif ( parameters.skinning )\n\t\t\t_programLayers.enable( 4 );\n\t\tif ( parameters.morphTargets )\n\t\t\t_programLayers.enable( 5 );\n\t\tif ( parameters.morphNormals )\n\t\t\t_programLayers.enable( 6 );\n\t\tif ( parameters.morphColors )\n\t\t\t_programLayers.enable( 7 );\n\t\tif ( parameters.premultipliedAlpha )\n\t\t\t_programLayers.enable( 8 );\n\t\tif ( parameters.shadowMapEnabled )\n\t\t\t_programLayers.enable( 9 );\n\t\tif ( parameters.doubleSided )\n\t\t\t_programLayers.enable( 10 );\n\t\tif ( parameters.flipSided )\n\t\t\t_programLayers.enable( 11 );\n\t\tif ( parameters.useDepthPacking )\n\t\t\t_programLayers.enable( 12 );\n\t\tif ( parameters.dithering )\n\t\t\t_programLayers.enable( 13 );\n\t\tif ( parameters.transmission )\n\t\t\t_programLayers.enable( 14 );\n\t\tif ( parameters.sheen )\n\t\t\t_programLayers.enable( 15 );\n\t\tif ( parameters.opaque )\n\t\t\t_programLayers.enable( 16 );\n\t\tif ( parameters.pointsUvs )\n\t\t\t_programLayers.enable( 17 );\n\t\tif ( parameters.decodeVideoTexture )\n\t\t\t_programLayers.enable( 18 );\n\t\tif ( parameters.alphaToCoverage )\n\t\t\t_programLayers.enable( 19 );\n\n\t\tarray.push( _programLayers.mask );\n\n\t}\n\n\tfunction getUniforms( material ) {\n\n\t\tconst shaderID = shaderIDs[ material.type ];\n\t\tlet uniforms;\n\n\t\tif ( shaderID ) {\n\n\t\t\tconst shader = ShaderLib[ shaderID ];\n\t\t\tuniforms = UniformsUtils.clone( shader.uniforms );\n\n\t\t} else {\n\n\t\t\tuniforms = material.uniforms;\n\n\t\t}\n\n\t\treturn uniforms;\n\n\t}\n\n\tfunction acquireProgram( parameters, cacheKey ) {\n\n\t\tlet program;\n\n\t\t// Check if code has been already compiled\n\t\tfor ( let p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\tconst preexistingProgram = programs[ p ];\n\n\t\t\tif ( preexistingProgram.cacheKey === cacheKey ) {\n\n\t\t\t\tprogram = preexistingProgram;\n\t\t\t\t++ program.usedTimes;\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( program === undefined ) {\n\n\t\t\tprogram = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );\n\t\t\tprograms.push( program );\n\n\t\t}\n\n\t\treturn program;\n\n\t}\n\n\tfunction releaseProgram( program ) {\n\n\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t// Remove from unordered set\n\t\t\tconst i = programs.indexOf( program );\n\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\tprograms.pop();\n\n\t\t\t// Free WebGL resources\n\t\t\tprogram.destroy();\n\n\t\t}\n\n\t}\n\n\tfunction releaseShaderCache( material ) {\n\n\t\t_customShaders.remove( material );\n\n\t}\n\n\tfunction dispose() {\n\n\t\t_customShaders.dispose();\n\n\t}\n\n\treturn {\n\t\tgetParameters: getParameters,\n\t\tgetProgramCacheKey: getProgramCacheKey,\n\t\tgetUniforms: getUniforms,\n\t\tacquireProgram: acquireProgram,\n\t\treleaseProgram: releaseProgram,\n\t\treleaseShaderCache: releaseShaderCache,\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tprograms: programs,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction WebGLProperties() {\n\n\tlet properties = new WeakMap();\n\n\tfunction get( object ) {\n\n\t\tlet map = properties.get( object );\n\n\t\tif ( map === undefined ) {\n\n\t\t\tmap = {};\n\t\t\tproperties.set( object, map );\n\n\t\t}\n\n\t\treturn map;\n\n\t}\n\n\tfunction remove( object ) {\n\n\t\tproperties.delete( object );\n\n\t}\n\n\tfunction update( object, key, value ) {\n\n\t\tproperties.get( object )[ key ] = value;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tproperties = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tremove: remove,\n\t\tupdate: update,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction painterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.material.id !== b.material.id ) {\n\n\t\treturn a.material.id - b.material.id;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn a.z - b.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\nfunction reversePainterSortStable( a, b ) {\n\n\tif ( a.groupOrder !== b.groupOrder ) {\n\n\t\treturn a.groupOrder - b.groupOrder;\n\n\t} else if ( a.renderOrder !== b.renderOrder ) {\n\n\t\treturn a.renderOrder - b.renderOrder;\n\n\t} else if ( a.z !== b.z ) {\n\n\t\treturn b.z - a.z;\n\n\t} else {\n\n\t\treturn a.id - b.id;\n\n\t}\n\n}\n\n\nfunction WebGLRenderList() {\n\n\tconst renderItems = [];\n\tlet renderItemsIndex = 0;\n\n\tconst opaque = [];\n\tconst transmissive = [];\n\tconst transparent = [];\n\n\tfunction init() {\n\n\t\trenderItemsIndex = 0;\n\n\t\topaque.length = 0;\n\t\ttransmissive.length = 0;\n\t\ttransparent.length = 0;\n\n\t}\n\n\tfunction getNextRenderItem( object, geometry, material, groupOrder, z, group ) {\n\n\t\tlet renderItem = renderItems[ renderItemsIndex ];\n\n\t\tif ( renderItem === undefined ) {\n\n\t\t\trenderItem = {\n\t\t\t\tid: object.id,\n\t\t\t\tobject: object,\n\t\t\t\tgeometry: geometry,\n\t\t\t\tmaterial: material,\n\t\t\t\tgroupOrder: groupOrder,\n\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\tz: z,\n\t\t\t\tgroup: group\n\t\t\t};\n\n\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t} else {\n\n\t\t\trenderItem.id = object.id;\n\t\t\trenderItem.object = object;\n\t\t\trenderItem.geometry = geometry;\n\t\t\trenderItem.material = material;\n\t\t\trenderItem.groupOrder = groupOrder;\n\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\trenderItem.z = z;\n\t\t\trenderItem.group = group;\n\n\t\t}\n\n\t\trenderItemsIndex ++;\n\n\t\treturn renderItem;\n\n\t}\n\n\tfunction push( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.push( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.push( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.push( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction unshift( object, geometry, material, groupOrder, z, group ) {\n\n\t\tconst renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );\n\n\t\tif ( material.transmission > 0.0 ) {\n\n\t\t\ttransmissive.unshift( renderItem );\n\n\t\t} else if ( material.transparent === true ) {\n\n\t\t\ttransparent.unshift( renderItem );\n\n\t\t} else {\n\n\t\t\topaque.unshift( renderItem );\n\n\t\t}\n\n\t}\n\n\tfunction sort( customOpaqueSort, customTransparentSort ) {\n\n\t\tif ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );\n\t\tif ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );\n\t\tif ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );\n\n\t}\n\n\tfunction finish() {\n\n\t\t// Clear references from inactive renderItems in the list\n\n\t\tfor ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {\n\n\t\t\tconst renderItem = renderItems[ i ];\n\n\t\t\tif ( renderItem.id === null ) break;\n\n\t\t\trenderItem.id = null;\n\t\t\trenderItem.object = null;\n\t\t\trenderItem.geometry = null;\n\t\t\trenderItem.material = null;\n\t\t\trenderItem.group = null;\n\n\t\t}\n\n\t}\n\n\treturn {\n\n\t\topaque: opaque,\n\t\ttransmissive: transmissive,\n\t\ttransparent: transparent,\n\n\t\tinit: init,\n\t\tpush: push,\n\t\tunshift: unshift,\n\t\tfinish: finish,\n\n\t\tsort: sort\n\t};\n\n}\n\nfunction WebGLRenderLists() {\n\n\tlet lists = new WeakMap();\n\n\tfunction get( scene, renderCallDepth ) {\n\n\t\tconst listArray = lists.get( scene );\n\t\tlet list;\n\n\t\tif ( listArray === undefined ) {\n\n\t\t\tlist = new WebGLRenderList();\n\t\t\tlists.set( scene, [ list ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= listArray.length ) {\n\n\t\t\t\tlist = new WebGLRenderList();\n\t\t\t\tlistArray.push( list );\n\n\t\t\t} else {\n\n\t\t\t\tlist = listArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn list;\n\n\t}\n\n\tfunction dispose() {\n\n\t\tlists = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nfunction UniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\tdecay: 0\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\nfunction ShadowUniformsCache() {\n\n\tconst lights = {};\n\n\treturn {\n\n\t\tget: function ( light ) {\n\n\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\treturn lights[ light.id ];\n\n\t\t\t}\n\n\t\t\tlet uniforms;\n\n\t\t\tswitch ( light.type ) {\n\n\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\t\t\t\t\tuniforms = {\n\t\t\t\t\t\tshadowIntensity: 1,\n\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\tshadowNormalBias: 0,\n\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\n\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\n\t\t\t}\n\n\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\treturn uniforms;\n\n\t\t}\n\n\t};\n\n}\n\n\n\nlet nextVersion = 0;\n\nfunction shadowCastingAndTexturingLightsFirst( lightA, lightB ) {\n\n\treturn ( lightB.castShadow ? 2 : 0 ) - ( lightA.castShadow ? 2 : 0 ) + ( lightB.map ? 1 : 0 ) - ( lightA.map ? 1 : 0 );\n\n}\n\nfunction WebGLLights( extensions ) {\n\n\tconst cache = new UniformsCache();\n\n\tconst shadowCache = ShadowUniformsCache();\n\n\tconst state = {\n\n\t\tversion: 0,\n\n\t\thash: {\n\t\t\tdirectionalLength: - 1,\n\t\t\tpointLength: - 1,\n\t\t\tspotLength: - 1,\n\t\t\trectAreaLength: - 1,\n\t\t\themiLength: - 1,\n\n\t\t\tnumDirectionalShadows: - 1,\n\t\t\tnumPointShadows: - 1,\n\t\t\tnumSpotShadows: - 1,\n\t\t\tnumSpotMaps: - 1,\n\n\t\t\tnumLightProbes: - 1\n\t\t},\n\n\t\tambient: [ 0, 0, 0 ],\n\t\tprobe: [],\n\t\tdirectional: [],\n\t\tdirectionalShadow: [],\n\t\tdirectionalShadowMap: [],\n\t\tdirectionalShadowMatrix: [],\n\t\tspot: [],\n\t\tspotLightMap: [],\n\t\tspotShadow: [],\n\t\tspotShadowMap: [],\n\t\tspotLightMatrix: [],\n\t\trectArea: [],\n\t\trectAreaLTC1: null,\n\t\trectAreaLTC2: null,\n\t\tpoint: [],\n\t\tpointShadow: [],\n\t\tpointShadowMap: [],\n\t\tpointShadowMatrix: [],\n\t\themi: [],\n\t\tnumSpotLightShadowsWithMaps: 0,\n\t\tnumLightProbes: 0\n\n\t};\n\n\tfor ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );\n\n\tconst vector3 = new Vector3();\n\tconst matrix4 = new Matrix4();\n\tconst matrix42 = new Matrix4();\n\n\tfunction setup( lights ) {\n\n\t\tlet r = 0, g = 0, b = 0;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tlet numDirectionalShadows = 0;\n\t\tlet numPointShadows = 0;\n\t\tlet numSpotShadows = 0;\n\t\tlet numSpotMaps = 0;\n\t\tlet numSpotShadowsWithMaps = 0;\n\n\t\tlet numLightProbes = 0;\n\n\t\t// ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]\n\t\tlights.sort( shadowCastingAndTexturingLightsFirst );\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tconst color = light.color;\n\t\t\tconst intensity = light.intensity;\n\t\t\tconst distance = light.distance;\n\n\t\t\tconst shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\tr += color.r * intensity;\n\t\t\t\tg += color.g * intensity;\n\t\t\t\tb += color.b * intensity;\n\n\t\t\t} else if ( light.isLightProbe ) {\n\n\t\t\t\tfor ( let j = 0; j < 9; j ++ ) {\n\n\t\t\t\t\tstate.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );\n\n\t\t\t\t}\n\n\t\t\t\tnumLightProbes ++;\n\n\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.directionalShadow[ directionalLength ] = shadowUniforms;\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumDirectionalShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\tif ( light.map ) {\n\n\t\t\t\t\tstate.spotLightMap[ numSpotMaps ] = light.map;\n\t\t\t\t\tnumSpotMaps ++;\n\n\t\t\t\t\t// make sure the lightMatrix is up to date\n\t\t\t\t\t// TODO : do it if required only\n\t\t\t\t\tshadow.updateMatrices( light );\n\n\t\t\t\t\tif ( light.castShadow ) numSpotShadowsWithMaps ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.spotLightMatrix[ spotLength ] = shadow.matrix;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\tstate.spotShadow[ spotLength ] = shadowUniforms;\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\n\t\t\t\t\tnumSpotShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\tuniforms.decay = light.decay;\n\n\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\tconst shadow = light.shadow;\n\n\t\t\t\t\tconst shadowUniforms = shadowCache.get( light );\n\n\t\t\t\t\tshadowUniforms.shadowIntensity = shadow.intensity;\n\t\t\t\t\tshadowUniforms.shadowBias = shadow.bias;\n\t\t\t\t\tshadowUniforms.shadowNormalBias = shadow.normalBias;\n\t\t\t\t\tshadowUniforms.shadowRadius = shadow.radius;\n\t\t\t\t\tshadowUniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\tshadowUniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\tshadowUniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\tstate.pointShadow[ pointLength ] = shadowUniforms;\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\n\t\t\t\t\tnumPointShadows ++;\n\n\t\t\t\t}\n\n\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = cache.get( light );\n\n\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( rectAreaLength > 0 ) {\n\n\t\t\tif ( extensions.has( 'OES_texture_float_linear' ) === true ) {\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;\n\n\t\t\t} else {\n\n\t\t\t\tstate.rectAreaLTC1 = UniformsLib.LTC_HALF_1;\n\t\t\t\tstate.rectAreaLTC2 = UniformsLib.LTC_HALF_2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.ambient[ 0 ] = r;\n\t\tstate.ambient[ 1 ] = g;\n\t\tstate.ambient[ 2 ] = b;\n\n\t\tconst hash = state.hash;\n\n\t\tif ( hash.directionalLength !== directionalLength ||\n\t\t\thash.pointLength !== pointLength ||\n\t\t\thash.spotLength !== spotLength ||\n\t\t\thash.rectAreaLength !== rectAreaLength ||\n\t\t\thash.hemiLength !== hemiLength ||\n\t\t\thash.numDirectionalShadows !== numDirectionalShadows ||\n\t\t\thash.numPointShadows !== numPointShadows ||\n\t\t\thash.numSpotShadows !== numSpotShadows ||\n\t\t\thash.numSpotMaps !== numSpotMaps ||\n\t\t\thash.numLightProbes !== numLightProbes ) {\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.directionalShadow.length = numDirectionalShadows;\n\t\t\tstate.directionalShadowMap.length = numDirectionalShadows;\n\t\t\tstate.pointShadow.length = numPointShadows;\n\t\t\tstate.pointShadowMap.length = numPointShadows;\n\t\t\tstate.spotShadow.length = numSpotShadows;\n\t\t\tstate.spotShadowMap.length = numSpotShadows;\n\t\t\tstate.directionalShadowMatrix.length = numDirectionalShadows;\n\t\t\tstate.pointShadowMatrix.length = numPointShadows;\n\t\t\tstate.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;\n\t\t\tstate.spotLightMap.length = numSpotMaps;\n\t\t\tstate.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;\n\t\t\tstate.numLightProbes = numLightProbes;\n\n\t\t\thash.directionalLength = directionalLength;\n\t\t\thash.pointLength = pointLength;\n\t\t\thash.spotLength = spotLength;\n\t\t\thash.rectAreaLength = rectAreaLength;\n\t\t\thash.hemiLength = hemiLength;\n\n\t\t\thash.numDirectionalShadows = numDirectionalShadows;\n\t\t\thash.numPointShadows = numPointShadows;\n\t\t\thash.numSpotShadows = numSpotShadows;\n\t\t\thash.numSpotMaps = numSpotMaps;\n\n\t\t\thash.numLightProbes = numLightProbes;\n\n\t\t\tstate.version = nextVersion ++;\n\n\t\t}\n\n\t}\n\n\tfunction setupView( lights, camera ) {\n\n\t\tlet directionalLength = 0;\n\t\tlet pointLength = 0;\n\t\tlet spotLength = 0;\n\t\tlet rectAreaLength = 0;\n\t\tlet hemiLength = 0;\n\n\t\tconst viewMatrix = camera.matrixWorldInverse;\n\n\t\tfor ( let i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\n\t\t\tif ( light.isDirectionalLight ) {\n\n\t\t\t\tconst uniforms = state.directional[ directionalLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tdirectionalLength ++;\n\n\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\tconst uniforms = state.spot[ spotLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\tspotLength ++;\n\n\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\tconst uniforms = state.rectArea[ rectAreaLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\tmatrix42.identity();\n\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\trectAreaLength ++;\n\n\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\tconst uniforms = state.point[ pointLength ];\n\n\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\tpointLength ++;\n\n\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\tconst uniforms = state.hemi[ hemiLength ];\n\n\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\themiLength ++;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn {\n\t\tsetup: setup,\n\t\tsetupView: setupView,\n\t\tstate: state\n\t};\n\n}\n\nfunction WebGLRenderState( extensions ) {\n\n\tconst lights = new WebGLLights( extensions );\n\n\tconst lightsArray = [];\n\tconst shadowsArray = [];\n\n\tfunction init( camera ) {\n\n\t\tstate.camera = camera;\n\n\t\tlightsArray.length = 0;\n\t\tshadowsArray.length = 0;\n\n\t}\n\n\tfunction pushLight( light ) {\n\n\t\tlightsArray.push( light );\n\n\t}\n\n\tfunction pushShadow( shadowLight ) {\n\n\t\tshadowsArray.push( shadowLight );\n\n\t}\n\n\tfunction setupLights() {\n\n\t\tlights.setup( lightsArray );\n\n\t}\n\n\tfunction setupLightsView( camera ) {\n\n\t\tlights.setupView( lightsArray, camera );\n\n\t}\n\n\tconst state = {\n\t\tlightsArray: lightsArray,\n\t\tshadowsArray: shadowsArray,\n\n\t\tcamera: null,\n\n\t\tlights: lights,\n\n\t\ttransmissionRenderTarget: {}\n\t};\n\n\treturn {\n\t\tinit: init,\n\t\tstate: state,\n\t\tsetupLights: setupLights,\n\t\tsetupLightsView: setupLightsView,\n\n\t\tpushLight: pushLight,\n\t\tpushShadow: pushShadow\n\t};\n\n}\n\nfunction WebGLRenderStates( extensions ) {\n\n\tlet renderStates = new WeakMap();\n\n\tfunction get( scene, renderCallDepth = 0 ) {\n\n\t\tconst renderStateArray = renderStates.get( scene );\n\t\tlet renderState;\n\n\t\tif ( renderStateArray === undefined ) {\n\n\t\t\trenderState = new WebGLRenderState( extensions );\n\t\t\trenderStates.set( scene, [ renderState ] );\n\n\t\t} else {\n\n\t\t\tif ( renderCallDepth >= renderStateArray.length ) {\n\n\t\t\t\trenderState = new WebGLRenderState( extensions );\n\t\t\t\trenderStateArray.push( renderState );\n\n\t\t\t} else {\n\n\t\t\t\trenderState = renderStateArray[ renderCallDepth ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn renderState;\n\n\t}\n\n\tfunction dispose() {\n\n\t\trenderStates = new WeakMap();\n\n\t}\n\n\treturn {\n\t\tget: get,\n\t\tdispose: dispose\n\t};\n\n}\n\nclass MeshDepthMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDepthMaterial = true;\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshDistanceMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshDistanceMaterial = true;\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst vertex = \"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\";\n\nconst fragment = \"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \\nvoid main() {\\n\\tconst float samples = float( VSM_SAMPLES );\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i < samples; i ++ ) {\\n\\t\\tfloat uvOffset = uvStart + i * uvStride;\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\n\\t\\t\\tmean += distribution.x;\\n\\t\\t\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\n\\t\\t#else\\n\\t\\t\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean / samples;\\n\\tsquared_mean = squared_mean / samples;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\";\n\nfunction WebGLShadowMap( renderer, objects, capabilities ) {\n\n\tlet _frustum = new Frustum();\n\n\tconst _shadowMapSize = new Vector2(),\n\t\t_viewportSize = new Vector2(),\n\n\t\t_viewport = new Vector4(),\n\n\t\t_depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ),\n\t\t_distanceMaterial = new MeshDistanceMaterial(),\n\n\t\t_materialCache = {},\n\n\t\t_maxTextureSize = capabilities.maxTextureSize;\n\n\tconst shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };\n\n\tconst shadowMaterialVertical = new ShaderMaterial( {\n\t\tdefines: {\n\t\t\tVSM_SAMPLES: 8\n\t\t},\n\t\tuniforms: {\n\t\t\tshadow_pass: { value: null },\n\t\t\tresolution: { value: new Vector2() },\n\t\t\tradius: { value: 4.0 }\n\t\t},\n\n\t\tvertexShader: vertex,\n\t\tfragmentShader: fragment\n\n\t} );\n\n\tconst shadowMaterialHorizontal = shadowMaterialVertical.clone();\n\tshadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;\n\n\tconst fullScreenTri = new BufferGeometry();\n\tfullScreenTri.setAttribute(\n\t\t'position',\n\t\tnew BufferAttribute(\n\t\t\tnew Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),\n\t\t\t3\n\t\t)\n\t);\n\n\tconst fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );\n\n\tconst scope = this;\n\n\tthis.enabled = false;\n\n\tthis.autoUpdate = true;\n\tthis.needsUpdate = false;\n\n\tthis.type = PCFShadowMap;\n\tlet _previousType = this.type;\n\n\tthis.render = function ( lights, scene, camera ) {\n\n\t\tif ( scope.enabled === false ) return;\n\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\tif ( lights.length === 0 ) return;\n\n\t\tconst currentRenderTarget = renderer.getRenderTarget();\n\t\tconst activeCubeFace = renderer.getActiveCubeFace();\n\t\tconst activeMipmapLevel = renderer.getActiveMipmapLevel();\n\n\t\tconst _state = renderer.state;\n\n\t\t// Set GL state for depth map.\n\t\t_state.setBlending( NoBlending );\n\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t_state.buffers.depth.setTest( true );\n\t\t_state.setScissorTest( false );\n\n\t\t// check for shadow map type changes\n\n\t\tconst toVSM = ( _previousType !== VSMShadowMap && this.type === VSMShadowMap );\n\t\tconst fromVSM = ( _previousType === VSMShadowMap && this.type !== VSMShadowMap );\n\n\t\t// render depth map\n\n\t\tfor ( let i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\tconst light = lights[ i ];\n\t\t\tconst shadow = light.shadow;\n\n\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;\n\n\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\n\t\t\tconst shadowFrameExtents = shadow.getFrameExtents();\n\n\t\t\t_shadowMapSize.multiply( shadowFrameExtents );\n\n\t\t\t_viewportSize.copy( shadow.mapSize );\n\n\t\t\tif ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\tif ( _shadowMapSize.x > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );\n\t\t\t\t\t_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;\n\t\t\t\t\tshadow.mapSize.x = _viewportSize.x;\n\n\t\t\t\t}\n\n\t\t\t\tif ( _shadowMapSize.y > _maxTextureSize ) {\n\n\t\t\t\t\t_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );\n\t\t\t\t\t_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;\n\t\t\t\t\tshadow.mapSize.y = _viewportSize.y;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( shadow.map === null || toVSM === true || fromVSM === true ) {\n\n\t\t\t\tconst pars = ( this.type !== VSMShadowMap ) ? { minFilter: NearestFilter, magFilter: NearestFilter } : {};\n\n\t\t\t\tif ( shadow.map !== null ) {\n\n\t\t\t\t\tshadow.map.dispose();\n\n\t\t\t\t}\n\n\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\tshadow.map.texture.name = light.name + '.shadowMap';\n\n\t\t\t\tshadow.camera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\trenderer.setRenderTarget( shadow.map );\n\t\t\trenderer.clear();\n\n\t\t\tconst viewportCount = shadow.getViewportCount();\n\n\t\t\tfor ( let vp = 0; vp < viewportCount; vp ++ ) {\n\n\t\t\t\tconst viewport = shadow.getViewport( vp );\n\n\t\t\t\t_viewport.set(\n\t\t\t\t\t_viewportSize.x * viewport.x,\n\t\t\t\t\t_viewportSize.y * viewport.y,\n\t\t\t\t\t_viewportSize.x * viewport.z,\n\t\t\t\t\t_viewportSize.y * viewport.w\n\t\t\t\t);\n\n\t\t\t\t_state.viewport( _viewport );\n\n\t\t\t\tshadow.updateMatrices( light, vp );\n\n\t\t\t\t_frustum = shadow.getFrustum();\n\n\t\t\t\trenderObject( scene, camera, shadow.camera, light, this.type );\n\n\t\t\t}\n\n\t\t\t// do blur pass for VSM\n\n\t\t\tif ( shadow.isPointLightShadow !== true && this.type === VSMShadowMap ) {\n\n\t\t\t\tVSMPass( shadow, camera );\n\n\t\t\t}\n\n\t\t\tshadow.needsUpdate = false;\n\n\t\t}\n\n\t\t_previousType = this.type;\n\n\t\tscope.needsUpdate = false;\n\n\t\trenderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );\n\n\t};\n\n\tfunction VSMPass( shadow, camera ) {\n\n\t\tconst geometry = objects.update( fullScreenMesh );\n\n\t\tif ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {\n\n\t\t\tshadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;\n\t\t\tshadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;\n\n\t\t\tshadowMaterialVertical.needsUpdate = true;\n\t\t\tshadowMaterialHorizontal.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( shadow.mapPass === null ) {\n\n\t\t\tshadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );\n\n\t\t}\n\n\t\t// vertical pass\n\n\t\tshadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;\n\t\tshadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialVertical.uniforms.radius.value = shadow.radius;\n\t\trenderer.setRenderTarget( shadow.mapPass );\n\t\trenderer.clear();\n\t\trenderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );\n\n\t\t// horizontal pass\n\n\t\tshadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;\n\t\tshadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;\n\t\tshadowMaterialHorizontal.uniforms.radius.value = shadow.radius;\n\t\trenderer.setRenderTarget( shadow.map );\n\t\trenderer.clear();\n\t\trenderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );\n\n\t}\n\n\tfunction getDepthMaterial( object, material, light, type ) {\n\n\t\tlet result = null;\n\n\t\tconst customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial;\n\n\t\tif ( customMaterial !== undefined ) {\n\n\t\t\tresult = customMaterial;\n\n\t\t} else {\n\n\t\t\tresult = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;\n\n\t\t\tif ( ( renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||\n\t\t\t\t( material.displacementMap && material.displacementScale !== 0 ) ||\n\t\t\t\t( material.alphaMap && material.alphaTest > 0 ) ||\n\t\t\t\t( material.map && material.alphaTest > 0 ) ) {\n\n\t\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t\t// appropriate state\n\n\t\t\t\tconst keyA = result.uuid, keyB = material.uuid;\n\n\t\t\t\tlet materialsForVariant = _materialCache[ keyA ];\n\n\t\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t\t}\n\n\t\t\t\tlet cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\t\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t\t}\n\n\t\t\t\tresult = cachedMaterial;\n\n\t\t\t}\n\n\t\t}\n\n\t\tresult.visible = material.visible;\n\t\tresult.wireframe = material.wireframe;\n\n\t\tif ( type === VSMShadowMap ) {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;\n\n\t\t} else {\n\n\t\t\tresult.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t}\n\n\t\tresult.alphaMap = material.alphaMap;\n\t\tresult.alphaTest = material.alphaTest;\n\t\tresult.map = material.map;\n\n\t\tresult.clipShadows = material.clipShadows;\n\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\tresult.displacementMap = material.displacementMap;\n\t\tresult.displacementScale = material.displacementScale;\n\t\tresult.displacementBias = material.displacementBias;\n\n\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\tresult.linewidth = material.linewidth;\n\n\t\tif ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {\n\n\t\t\tconst materialProperties = renderer.properties.get( result );\n\t\t\tmaterialProperties.light = light;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tfunction renderObject( object, camera, shadowCamera, light, type ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tconst visible = object.layers.test( camera.layers );\n\n\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\tif ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\tfor ( let k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tconst group = groups[ k ];\n\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, groupMaterial, light, type );\n\n\t\t\t\t\t\t\tobject.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );\n\n\t\t\t\t\t\t\trenderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t\tobject.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\tconst depthMaterial = getDepthMaterial( object, material, light, type );\n\n\t\t\t\t\tobject.onBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );\n\n\t\t\t\t\trenderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t\tobject.onAfterShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial, null );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\trenderObject( children[ i ], camera, shadowCamera, light, type );\n\n\t\t}\n\n\t}\n\n\tfunction onMaterialDispose( event ) {\n\n\t\tconst material = event.target;\n\n\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t// make sure to remove the unique distance/depth materials used for shadow map rendering\n\n\t\tfor ( const id in _materialCache ) {\n\n\t\t\tconst cache = _materialCache[ id ];\n\n\t\t\tconst uuid = event.target.uuid;\n\n\t\t\tif ( uuid in cache ) {\n\n\t\t\t\tconst shadowMaterial = cache[ uuid ];\n\t\t\t\tshadowMaterial.dispose();\n\t\t\t\tdelete cache[ uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction WebGLState( gl ) {\n\n\tfunction ColorBuffer() {\n\n\t\tlet locked = false;\n\n\t\tconst color = new Vector4();\n\t\tlet currentColorMask = null;\n\t\tconst currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\treturn {\n\n\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t}\n\n\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentColorMask = null;\n\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction DepthBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentDepthMask = null;\n\t\tlet currentDepthFunc = null;\n\t\tlet currentDepthClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentDepthMask = null;\n\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tfunction StencilBuffer() {\n\n\t\tlet locked = false;\n\n\t\tlet currentStencilMask = null;\n\t\tlet currentStencilFunc = null;\n\t\tlet currentStencilRef = null;\n\t\tlet currentStencilFuncMask = null;\n\t\tlet currentStencilFail = null;\n\t\tlet currentStencilZFail = null;\n\t\tlet currentStencilZPass = null;\n\t\tlet currentStencilClear = null;\n\n\t\treturn {\n\n\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\tif ( ! locked ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t currentStencilRef !== stencilRef ||\n\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\tif ( currentStencilFail !== stencilFail ||\n\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\tlocked = lock;\n\n\t\t\t},\n\n\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\treset: function () {\n\n\t\t\t\tlocked = false;\n\n\t\t\t\tcurrentStencilMask = null;\n\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\tcurrentStencilRef = null;\n\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\tcurrentStencilFail = null;\n\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tconst colorBuffer = new ColorBuffer();\n\tconst depthBuffer = new DepthBuffer();\n\tconst stencilBuffer = new StencilBuffer();\n\n\tconst uboBindings = new WeakMap();\n\tconst uboProgramMap = new WeakMap();\n\n\tlet enabledCapabilities = {};\n\n\tlet currentBoundFramebuffers = {};\n\tlet currentDrawbuffers = new WeakMap();\n\tlet defaultDrawbuffers = [];\n\n\tlet currentProgram = null;\n\n\tlet currentBlendingEnabled = false;\n\tlet currentBlending = null;\n\tlet currentBlendEquation = null;\n\tlet currentBlendSrc = null;\n\tlet currentBlendDst = null;\n\tlet currentBlendEquationAlpha = null;\n\tlet currentBlendSrcAlpha = null;\n\tlet currentBlendDstAlpha = null;\n\tlet currentBlendColor = new Color( 0, 0, 0 );\n\tlet currentBlendAlpha = 0;\n\tlet currentPremultipledAlpha = false;\n\n\tlet currentFlipSided = null;\n\tlet currentCullFace = null;\n\n\tlet currentLineWidth = null;\n\n\tlet currentPolygonOffsetFactor = null;\n\tlet currentPolygonOffsetUnits = null;\n\n\tconst maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\tlet lineWidthAvailable = false;\n\tlet version = 0;\n\tconst glVersion = gl.getParameter( gl.VERSION );\n\n\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^WebGL (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\tversion = parseFloat( /^OpenGL ES (\\d)/.exec( glVersion )[ 1 ] );\n\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t}\n\n\tlet currentTextureSlot = null;\n\tlet currentBoundTextures = {};\n\n\tconst scissorParam = gl.getParameter( gl.SCISSOR_BOX );\n\tconst viewportParam = gl.getParameter( gl.VIEWPORT );\n\n\tconst currentScissor = new Vector4().fromArray( scissorParam );\n\tconst currentViewport = new Vector4().fromArray( viewportParam );\n\n\tfunction createTexture( type, target, count, dimensions ) {\n\n\t\tconst data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\tconst texture = gl.createTexture();\n\n\t\tgl.bindTexture( type, texture );\n\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tif ( type === gl.TEXTURE_3D || type === gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tgl.texImage3D( target, 0, gl.RGBA, 1, 1, dimensions, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t} else {\n\n\t\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\tconst emptyTextures = {};\n\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\temptyTextures[ gl.TEXTURE_2D_ARRAY ] = createTexture( gl.TEXTURE_2D_ARRAY, gl.TEXTURE_2D_ARRAY, 1, 1 );\n\temptyTextures[ gl.TEXTURE_3D ] = createTexture( gl.TEXTURE_3D, gl.TEXTURE_3D, 1, 1 );\n\n\t// init\n\n\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\tdepthBuffer.setClear( 1 );\n\tstencilBuffer.setClear( 0 );\n\n\tenable( gl.DEPTH_TEST );\n\tdepthBuffer.setFunc( LessEqualDepth );\n\n\tsetFlipSided( false );\n\tsetCullFace( CullFaceBack );\n\tenable( gl.CULL_FACE );\n\n\tsetBlending( NoBlending );\n\n\t//\n\n\tfunction enable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== true ) {\n\n\t\t\tgl.enable( id );\n\t\t\tenabledCapabilities[ id ] = true;\n\n\t\t}\n\n\t}\n\n\tfunction disable( id ) {\n\n\t\tif ( enabledCapabilities[ id ] !== false ) {\n\n\t\t\tgl.disable( id );\n\t\t\tenabledCapabilities[ id ] = false;\n\n\t\t}\n\n\t}\n\n\tfunction bindFramebuffer( target, framebuffer ) {\n\n\t\tif ( currentBoundFramebuffers[ target ] !== framebuffer ) {\n\n\t\t\tgl.bindFramebuffer( target, framebuffer );\n\n\t\t\tcurrentBoundFramebuffers[ target ] = framebuffer;\n\n\t\t\t// gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER\n\n\t\t\tif ( target === gl.DRAW_FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\tif ( target === gl.FRAMEBUFFER ) {\n\n\t\t\t\tcurrentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction drawBuffers( renderTarget, framebuffer ) {\n\n\t\tlet drawBuffers = defaultDrawbuffers;\n\n\t\tlet needsUpdate = false;\n\n\t\tif ( renderTarget ) {\n\n\t\t\tdrawBuffers = currentDrawbuffers.get( framebuffer );\n\n\t\t\tif ( drawBuffers === undefined ) {\n\n\t\t\t\tdrawBuffers = [];\n\t\t\t\tcurrentDrawbuffers.set( framebuffer, drawBuffers );\n\n\t\t\t}\n\n\t\t\tconst textures = renderTarget.textures;\n\n\t\t\tif ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tdrawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;\n\n\t\t\t\t}\n\n\t\t\t\tdrawBuffers.length = textures.length;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( drawBuffers[ 0 ] !== gl.BACK ) {\n\n\t\t\t\tdrawBuffers[ 0 ] = gl.BACK;\n\n\t\t\t\tneedsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tgl.drawBuffers( drawBuffers );\n\n\t\t}\n\n\t}\n\n\tfunction useProgram( program ) {\n\n\t\tif ( currentProgram !== program ) {\n\n\t\t\tgl.useProgram( program );\n\n\t\t\tcurrentProgram = program;\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tconst equationToGL = {\n\t\t[ AddEquation ]: gl.FUNC_ADD,\n\t\t[ SubtractEquation ]: gl.FUNC_SUBTRACT,\n\t\t[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT\n\t};\n\n\tequationToGL[ MinEquation ] = gl.MIN;\n\tequationToGL[ MaxEquation ] = gl.MAX;\n\n\tconst factorToGL = {\n\t\t[ ZeroFactor ]: gl.ZERO,\n\t\t[ OneFactor ]: gl.ONE,\n\t\t[ SrcColorFactor ]: gl.SRC_COLOR,\n\t\t[ SrcAlphaFactor ]: gl.SRC_ALPHA,\n\t\t[ SrcAlphaSaturateFactor ]: gl.SRC_ALPHA_SATURATE,\n\t\t[ DstColorFactor ]: gl.DST_COLOR,\n\t\t[ DstAlphaFactor ]: gl.DST_ALPHA,\n\t\t[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,\n\t\t[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,\n\t\t[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,\n\t\t[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA,\n\t\t[ ConstantColorFactor ]: gl.CONSTANT_COLOR,\n\t\t[ OneMinusConstantColorFactor ]: gl.ONE_MINUS_CONSTANT_COLOR,\n\t\t[ ConstantAlphaFactor ]: gl.CONSTANT_ALPHA,\n\t\t[ OneMinusConstantAlphaFactor ]: gl.ONE_MINUS_CONSTANT_ALPHA\n\t};\n\n\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, blendColor, blendAlpha, premultipliedAlpha ) {\n\n\t\tif ( blending === NoBlending ) {\n\n\t\t\tif ( currentBlendingEnabled === true ) {\n\n\t\t\t\tdisable( gl.BLEND );\n\t\t\t\tcurrentBlendingEnabled = false;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( currentBlendingEnabled === false ) {\n\n\t\t\tenable( gl.BLEND );\n\t\t\tcurrentBlendingEnabled = true;\n\n\t\t}\n\n\t\tif ( blending !== CustomBlending ) {\n\n\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\tif ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {\n\n\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\n\t\t\t\t\tcurrentBlendEquation = AddEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = AddEquation;\n\n\t\t\t\t}\n\n\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ONE, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase NormalBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.WebGLState: Invalid blending: ', blending );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\t\t\t\tcurrentBlendColor.set( 0, 0, 0 );\n\t\t\t\tcurrentBlendAlpha = 0;\n\n\t\t\t\tcurrentBlending = blending;\n\t\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t\t}\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// custom blending\n\n\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\tgl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );\n\n\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t}\n\n\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\tgl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );\n\n\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\tcurrentBlendDst = blendDst;\n\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t}\n\n\t\tif ( blendColor.equals( currentBlendColor ) === false || blendAlpha !== currentBlendAlpha ) {\n\n\t\t\tgl.blendColor( blendColor.r, blendColor.g, blendColor.b, blendAlpha );\n\n\t\t\tcurrentBlendColor.copy( blendColor );\n\t\t\tcurrentBlendAlpha = blendAlpha;\n\n\t\t}\n\n\t\tcurrentBlending = blending;\n\t\tcurrentPremultipledAlpha = false;\n\n\t}\n\n\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\tmaterial.side === DoubleSide\n\t\t\t? disable( gl.CULL_FACE )\n\t\t\t: enable( gl.CULL_FACE );\n\n\t\tlet flipSided = ( material.side === BackSide );\n\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\tsetFlipSided( flipSided );\n\n\t\t( material.blending === NormalBlending && material.transparent === false )\n\t\t\t? setBlending( NoBlending )\n\t\t\t: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.blendColor, material.blendAlpha, material.premultipliedAlpha );\n\n\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\tdepthBuffer.setTest( material.depthTest );\n\t\tdepthBuffer.setMask( material.depthWrite );\n\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\tconst stencilWrite = material.stencilWrite;\n\t\tstencilBuffer.setTest( stencilWrite );\n\t\tif ( stencilWrite ) {\n\n\t\t\tstencilBuffer.setMask( material.stencilWriteMask );\n\t\t\tstencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );\n\t\t\tstencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );\n\n\t\t}\n\n\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\tmaterial.alphaToCoverage === true\n\t\t\t? enable( gl.SAMPLE_ALPHA_TO_COVERAGE )\n\t\t\t: disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t}\n\n\t//\n\n\tfunction setFlipSided( flipSided ) {\n\n\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\tif ( flipSided ) {\n\n\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t} else {\n\n\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t}\n\n\t\t\tcurrentFlipSided = flipSided;\n\n\t\t}\n\n\t}\n\n\tfunction setCullFace( cullFace ) {\n\n\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\tenable( gl.CULL_FACE );\n\n\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.CULL_FACE );\n\n\t\t}\n\n\t\tcurrentCullFace = cullFace;\n\n\t}\n\n\tfunction setLineWidth( width ) {\n\n\t\tif ( width !== currentLineWidth ) {\n\n\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\tcurrentLineWidth = width;\n\n\t\t}\n\n\t}\n\n\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\tif ( polygonOffset ) {\n\n\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t}\n\n\t}\n\n\tfunction setScissorTest( scissorTest ) {\n\n\t\tif ( scissorTest ) {\n\n\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t} else {\n\n\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t}\n\n\t}\n\n\t// texture\n\n\tfunction activeTexture( webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\tgl.activeTexture( webglSlot );\n\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t}\n\n\t}\n\n\tfunction bindTexture( webglType, webglTexture, webglSlot ) {\n\n\t\tif ( webglSlot === undefined ) {\n\n\t\t\tif ( currentTextureSlot === null ) {\n\n\t\t\t\twebglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\t\t} else {\n\n\t\t\t\twebglSlot = currentTextureSlot;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet boundTexture = currentBoundTextures[ webglSlot ];\n\n\t\tif ( boundTexture === undefined ) {\n\n\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\tcurrentBoundTextures[ webglSlot ] = boundTexture;\n\n\t\t}\n\n\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\t\tgl.activeTexture( webglSlot );\n\t\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t\t}\n\n\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\tboundTexture.type = webglType;\n\t\t\tboundTexture.texture = webglTexture;\n\n\t\t}\n\n\t}\n\n\tfunction unbindTexture() {\n\n\t\tconst boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\tif ( boundTexture !== undefined && boundTexture.type !== undefined ) {\n\n\t\t\tgl.bindTexture( boundTexture.type, null );\n\n\t\t\tboundTexture.type = undefined;\n\t\t\tboundTexture.texture = undefined;\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction compressedTexSubImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.compressedTexSubImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texStorage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texStorage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage2D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\tfunction texImage3D() {\n\n\t\ttry {\n\n\t\t\tgl.texImage3D.apply( gl, arguments );\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction scissor( scissor ) {\n\n\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\tcurrentScissor.copy( scissor );\n\n\t\t}\n\n\t}\n\n\tfunction viewport( viewport ) {\n\n\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\tcurrentViewport.copy( viewport );\n\n\t\t}\n\n\t}\n\n\tfunction updateUBOMapping( uniformsGroup, program ) {\n\n\t\tlet mapping = uboProgramMap.get( program );\n\n\t\tif ( mapping === undefined ) {\n\n\t\t\tmapping = new WeakMap();\n\n\t\t\tuboProgramMap.set( program, mapping );\n\n\t\t}\n\n\t\tlet blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( blockIndex === undefined ) {\n\n\t\t\tblockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name );\n\n\t\t\tmapping.set( uniformsGroup, blockIndex );\n\n\t\t}\n\n\t}\n\n\tfunction uniformBlockBinding( uniformsGroup, program ) {\n\n\t\tconst mapping = uboProgramMap.get( program );\n\t\tconst blockIndex = mapping.get( uniformsGroup );\n\n\t\tif ( uboBindings.get( program ) !== blockIndex ) {\n\n\t\t\t// bind shader specific block index to global block point\n\t\t\tgl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex );\n\n\t\t\tuboBindings.set( program, blockIndex );\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction reset() {\n\n\t\t// reset state\n\n\t\tgl.disable( gl.BLEND );\n\t\tgl.disable( gl.CULL_FACE );\n\t\tgl.disable( gl.DEPTH_TEST );\n\t\tgl.disable( gl.POLYGON_OFFSET_FILL );\n\t\tgl.disable( gl.SCISSOR_TEST );\n\t\tgl.disable( gl.STENCIL_TEST );\n\t\tgl.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );\n\n\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\tgl.blendFunc( gl.ONE, gl.ZERO );\n\t\tgl.blendFuncSeparate( gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );\n\t\tgl.blendColor( 0, 0, 0, 0 );\n\n\t\tgl.colorMask( true, true, true, true );\n\t\tgl.clearColor( 0, 0, 0, 0 );\n\n\t\tgl.depthMask( true );\n\t\tgl.depthFunc( gl.LESS );\n\t\tgl.clearDepth( 1 );\n\n\t\tgl.stencilMask( 0xffffffff );\n\t\tgl.stencilFunc( gl.ALWAYS, 0, 0xffffffff );\n\t\tgl.stencilOp( gl.KEEP, gl.KEEP, gl.KEEP );\n\t\tgl.clearStencil( 0 );\n\n\t\tgl.cullFace( gl.BACK );\n\t\tgl.frontFace( gl.CCW );\n\n\t\tgl.polygonOffset( 0, 0 );\n\n\t\tgl.activeTexture( gl.TEXTURE0 );\n\n\t\tgl.bindFramebuffer( gl.FRAMEBUFFER, null );\n\t\tgl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );\n\t\tgl.bindFramebuffer( gl.READ_FRAMEBUFFER, null );\n\n\t\tgl.useProgram( null );\n\n\t\tgl.lineWidth( 1 );\n\n\t\tgl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tgl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\t// reset internals\n\n\t\tenabledCapabilities = {};\n\n\t\tcurrentTextureSlot = null;\n\t\tcurrentBoundTextures = {};\n\n\t\tcurrentBoundFramebuffers = {};\n\t\tcurrentDrawbuffers = new WeakMap();\n\t\tdefaultDrawbuffers = [];\n\n\t\tcurrentProgram = null;\n\n\t\tcurrentBlendingEnabled = false;\n\t\tcurrentBlending = null;\n\t\tcurrentBlendEquation = null;\n\t\tcurrentBlendSrc = null;\n\t\tcurrentBlendDst = null;\n\t\tcurrentBlendEquationAlpha = null;\n\t\tcurrentBlendSrcAlpha = null;\n\t\tcurrentBlendDstAlpha = null;\n\t\tcurrentBlendColor = new Color( 0, 0, 0 );\n\t\tcurrentBlendAlpha = 0;\n\t\tcurrentPremultipledAlpha = false;\n\n\t\tcurrentFlipSided = null;\n\t\tcurrentCullFace = null;\n\n\t\tcurrentLineWidth = null;\n\n\t\tcurrentPolygonOffsetFactor = null;\n\t\tcurrentPolygonOffsetUnits = null;\n\n\t\tcurrentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\t\tcurrentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );\n\n\t\tcolorBuffer.reset();\n\t\tdepthBuffer.reset();\n\t\tstencilBuffer.reset();\n\n\t}\n\n\treturn {\n\n\t\tbuffers: {\n\t\t\tcolor: colorBuffer,\n\t\t\tdepth: depthBuffer,\n\t\t\tstencil: stencilBuffer\n\t\t},\n\n\t\tenable: enable,\n\t\tdisable: disable,\n\n\t\tbindFramebuffer: bindFramebuffer,\n\t\tdrawBuffers: drawBuffers,\n\n\t\tuseProgram: useProgram,\n\n\t\tsetBlending: setBlending,\n\t\tsetMaterial: setMaterial,\n\n\t\tsetFlipSided: setFlipSided,\n\t\tsetCullFace: setCullFace,\n\n\t\tsetLineWidth: setLineWidth,\n\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\tsetScissorTest: setScissorTest,\n\n\t\tactiveTexture: activeTexture,\n\t\tbindTexture: bindTexture,\n\t\tunbindTexture: unbindTexture,\n\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\tcompressedTexImage3D: compressedTexImage3D,\n\t\ttexImage2D: texImage2D,\n\t\ttexImage3D: texImage3D,\n\n\t\tupdateUBOMapping: updateUBOMapping,\n\t\tuniformBlockBinding: uniformBlockBinding,\n\n\t\ttexStorage2D: texStorage2D,\n\t\ttexStorage3D: texStorage3D,\n\t\ttexSubImage2D: texSubImage2D,\n\t\ttexSubImage3D: texSubImage3D,\n\t\tcompressedTexSubImage2D: compressedTexSubImage2D,\n\t\tcompressedTexSubImage3D: compressedTexSubImage3D,\n\n\t\tscissor: scissor,\n\t\tviewport: viewport,\n\n\t\treset: reset\n\n\t};\n\n}\n\nfunction contain( texture, aspect ) {\n\n\tconst imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;\n\n\tif ( imageAspect > aspect ) {\n\n\t\ttexture.repeat.x = 1;\n\t\ttexture.repeat.y = imageAspect / aspect;\n\n\t\ttexture.offset.x = 0;\n\t\ttexture.offset.y = ( 1 - texture.repeat.y ) / 2;\n\n\t} else {\n\n\t\ttexture.repeat.x = aspect / imageAspect;\n\t\ttexture.repeat.y = 1;\n\n\t\ttexture.offset.x = ( 1 - texture.repeat.x ) / 2;\n\t\ttexture.offset.y = 0;\n\n\t}\n\n\treturn texture;\n\n}\n\nfunction cover( texture, aspect ) {\n\n\tconst imageAspect = ( texture.image && texture.image.width ) ? texture.image.width / texture.image.height : 1;\n\n\tif ( imageAspect > aspect ) {\n\n\t\ttexture.repeat.x = aspect / imageAspect;\n\t\ttexture.repeat.y = 1;\n\n\t\ttexture.offset.x = ( 1 - texture.repeat.x ) / 2;\n\t\ttexture.offset.y = 0;\n\n\t} else {\n\n\t\ttexture.repeat.x = 1;\n\t\ttexture.repeat.y = imageAspect / aspect;\n\n\t\ttexture.offset.x = 0;\n\t\ttexture.offset.y = ( 1 - texture.repeat.y ) / 2;\n\n\t}\n\n\treturn texture;\n\n}\n\nfunction fill( texture ) {\n\n\ttexture.repeat.x = 1;\n\ttexture.repeat.y = 1;\n\n\ttexture.offset.x = 0;\n\ttexture.offset.y = 0;\n\n\treturn texture;\n\n}\n\n\n\n/**\n * Given the width, height, format, and type of a texture. Determines how many\n * bytes must be used to represent the texture.\n */\nfunction getByteLength( width, height, format, type ) {\n\n\tconst typeByteLength = getTextureTypeByteLength( type );\n\n\tswitch ( format ) {\n\n\t\t// https://registry.khronos.org/OpenGL-Refpages/es3.0/html/glTexImage2D.xhtml\n\t\tcase AlphaFormat:\n\t\t\treturn width * height;\n\t\tcase LuminanceFormat:\n\t\t\treturn width * height;\n\t\tcase LuminanceAlphaFormat:\n\t\t\treturn width * height * 2;\n\t\tcase RedFormat:\n\t\t\treturn ( ( width * height ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RedIntegerFormat:\n\t\t\treturn ( ( width * height ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGFormat:\n\t\t\treturn ( ( width * height * 2 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGIntegerFormat:\n\t\t\treturn ( ( width * height * 2 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBFormat:\n\t\t\treturn ( ( width * height * 3 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBAFormat:\n\t\t\treturn ( ( width * height * 4 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\t\tcase RGBAIntegerFormat:\n\t\t\treturn ( ( width * height * 4 ) / typeByteLength.components ) * typeByteLength.byteLength;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_s3tc_srgb/\n\t\tcase RGB_S3TC_DXT1_Format:\n\t\tcase RGBA_S3TC_DXT1_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;\n\t\tcase RGBA_S3TC_DXT3_Format:\n\t\tcase RGBA_S3TC_DXT5_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_pvrtc/\n\t\tcase RGB_PVRTC_2BPPV1_Format:\n\t\tcase RGBA_PVRTC_2BPPV1_Format:\n\t\t\treturn ( Math.max( width, 16 ) * Math.max( height, 8 ) ) / 4;\n\t\tcase RGB_PVRTC_4BPPV1_Format:\n\t\tcase RGBA_PVRTC_4BPPV1_Format:\n\t\t\treturn ( Math.max( width, 8 ) * Math.max( height, 8 ) ) / 2;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_etc/\n\t\tcase RGB_ETC1_Format:\n\t\tcase RGB_ETC2_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 8;\n\t\tcase RGBA_ETC2_EAC_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/WEBGL_compressed_texture_astc/\n\t\tcase RGBA_ASTC_4x4_Format:\n\t\t\treturn Math.floor( ( width + 3 ) / 4 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\t\tcase RGBA_ASTC_5x4_Format:\n\t\t\treturn Math.floor( ( width + 4 ) / 5 ) * Math.floor( ( height + 3 ) / 4 ) * 16;\n\t\tcase RGBA_ASTC_5x5_Format:\n\t\t\treturn Math.floor( ( width + 4 ) / 5 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_6x5_Format:\n\t\t\treturn Math.floor( ( width + 5 ) / 6 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_6x6_Format:\n\t\t\treturn Math.floor( ( width + 5 ) / 6 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_8x5_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_8x6_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_8x8_Format:\n\t\t\treturn Math.floor( ( width + 7 ) / 8 ) * Math.floor( ( height + 7 ) / 8 ) * 16;\n\t\tcase RGBA_ASTC_10x5_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 4 ) / 5 ) * 16;\n\t\tcase RGBA_ASTC_10x6_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 5 ) / 6 ) * 16;\n\t\tcase RGBA_ASTC_10x8_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 7 ) / 8 ) * 16;\n\t\tcase RGBA_ASTC_10x10_Format:\n\t\t\treturn Math.floor( ( width + 9 ) / 10 ) * Math.floor( ( height + 9 ) / 10 ) * 16;\n\t\tcase RGBA_ASTC_12x10_Format:\n\t\t\treturn Math.floor( ( width + 11 ) / 12 ) * Math.floor( ( height + 9 ) / 10 ) * 16;\n\t\tcase RGBA_ASTC_12x12_Format:\n\t\t\treturn Math.floor( ( width + 11 ) / 12 ) * Math.floor( ( height + 11 ) / 12 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/EXT_texture_compression_bptc/\n\t\tcase RGBA_BPTC_Format:\n\t\tcase RGB_BPTC_SIGNED_Format:\n\t\tcase RGB_BPTC_UNSIGNED_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 16;\n\n\t\t// https://registry.khronos.org/webgl/extensions/EXT_texture_compression_rgtc/\n\t\tcase RED_RGTC1_Format:\n\t\tcase SIGNED_RED_RGTC1_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 8;\n\t\tcase RED_GREEN_RGTC2_Format:\n\t\tcase SIGNED_RED_GREEN_RGTC2_Format:\n\t\t\treturn Math.ceil( width / 4 ) * Math.ceil( height / 4 ) * 16;\n\n\t}\n\n\tthrow new Error(\n\t\t`Unable to determine texture byte length for ${format} format.`,\n\t);\n\n}\n\nfunction getTextureTypeByteLength( type ) {\n\n\tswitch ( type ) {\n\n\t\tcase UnsignedByteType:\n\t\tcase ByteType:\n\t\t\treturn { byteLength: 1, components: 1 };\n\t\tcase UnsignedShortType:\n\t\tcase ShortType:\n\t\tcase HalfFloatType:\n\t\t\treturn { byteLength: 2, components: 1 };\n\t\tcase UnsignedShort4444Type:\n\t\tcase UnsignedShort5551Type:\n\t\t\treturn { byteLength: 2, components: 4 };\n\t\tcase UnsignedIntType:\n\t\tcase IntType:\n\t\tcase FloatType:\n\t\t\treturn { byteLength: 4, components: 1 };\n\t\tcase UnsignedInt5999Type:\n\t\t\treturn { byteLength: 4, components: 3 };\n\n\t}\n\n\tthrow new Error( `Unknown texture type ${type}.` );\n\n}\n\nconst TextureUtils = {\n\tcontain,\n\tcover,\n\tfill,\n\tgetByteLength\n};\n\nfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\tconst multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;\n\tconst supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );\n\n\tconst _imageDimensions = new Vector2();\n\tconst _videoTextures = new WeakMap();\n\tlet _canvas;\n\n\tconst _sources = new WeakMap(); // maps WebglTexture objects to instances of Source\n\n\t// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,\n\t// also OffscreenCanvas.getContext(\"webgl\"), but not OffscreenCanvas.getContext(\"2d\")!\n\t// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).\n\n\tlet useOffscreenCanvas = false;\n\n\ttry {\n\n\t\tuseOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\t&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;\n\n\t} catch ( err ) {\n\n\t\t// Ignore any errors\n\n\t}\n\n\tfunction createCanvas( width, height ) {\n\n\t\t// Use OffscreenCanvas when available. Specially needed in web workers\n\n\t\treturn useOffscreenCanvas ?\n\t\t\t// eslint-disable-next-line compat/compat\n\t\t\tnew OffscreenCanvas( width, height ) : createElementNS( 'canvas' );\n\n\t}\n\n\tfunction resizeImage( image, needsNewCanvas, maxSize ) {\n\n\t\tlet scale = 1;\n\n\t\tconst dimensions = getDimensions( image );\n\n\t\t// handle case if texture exceeds max size\n\n\t\tif ( dimensions.width > maxSize || dimensions.height > maxSize ) {\n\n\t\t\tscale = maxSize / Math.max( dimensions.width, dimensions.height );\n\n\t\t}\n\n\t\t// only perform resize if necessary\n\n\t\tif ( scale < 1 ) {\n\n\t\t\t// only perform resize for certain image types\n\n\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||\n\t\t\t\t( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) ) {\n\n\t\t\t\tconst width = Math.floor( scale * dimensions.width );\n\t\t\t\tconst height = Math.floor( scale * dimensions.height );\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = createCanvas( width, height );\n\n\t\t\t\t// cube textures can't reuse the same canvas\n\n\t\t\t\tconst canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;\n\n\t\t\t\tcanvas.width = width;\n\t\t\t\tcanvas.height = height;\n\n\t\t\t\tconst context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, width, height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + dimensions.width + 'x' + dimensions.height + ') to (' + width + 'x' + height + ').' );\n\n\t\t\t\treturn canvas;\n\n\t\t\t} else {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + dimensions.width + 'x' + dimensions.height + ').' );\n\n\t\t\t\t}\n\n\t\t\t\treturn image;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction textureNeedsGenerateMipmaps( texture ) {\n\n\t\treturn texture.generateMipmaps && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t}\n\n\tfunction generateMipmap( target ) {\n\n\t\t_gl.generateMipmap( target );\n\n\t}\n\n\tfunction getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {\n\n\t\tif ( internalFormatName !== null ) {\n\n\t\t\tif ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \\'' + internalFormatName + '\\'' );\n\n\t\t}\n\n\t\tlet internalFormat = glFormat;\n\n\t\tif ( glFormat === _gl.RED ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.R32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.R16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RED_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.R16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.R32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.R8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.R16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.R32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG ) {\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RG16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RG_INTEGER ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8UI;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT ) internalFormat = _gl.RG16UI;\n\t\t\tif ( glType === _gl.UNSIGNED_INT ) internalFormat = _gl.RG32UI;\n\t\t\tif ( glType === _gl.BYTE ) internalFormat = _gl.RG8I;\n\t\t\tif ( glType === _gl.SHORT ) internalFormat = _gl.RG16I;\n\t\t\tif ( glType === _gl.INT ) internalFormat = _gl.RG32I;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGB ) {\n\n\t\t\tif ( glType === _gl.UNSIGNED_INT_5_9_9_9_REV ) internalFormat = _gl.RGB9_E5;\n\n\t\t}\n\n\t\tif ( glFormat === _gl.RGBA ) {\n\n\t\t\tconst transfer = forceLinearTransfer ? LinearTransfer : ColorManagement.getTransfer( colorSpace );\n\n\t\t\tif ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;\n\t\t\tif ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;\n\t\t\tif ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( transfer === SRGBTransfer ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = _gl.RGBA4;\n\t\t\tif ( glType === _gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = _gl.RGB5_A1;\n\n\t\t}\n\n\t\tif ( internalFormat === _gl.R16F || internalFormat === _gl.R32F ||\n\t\t\tinternalFormat === _gl.RG16F || internalFormat === _gl.RG32F ||\n\t\t\tinternalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F ) {\n\n\t\t\textensions.get( 'EXT_color_buffer_float' );\n\n\t\t}\n\n\t\treturn internalFormat;\n\n\t}\n\n\tfunction getInternalDepthFormat( useStencil, depthType ) {\n\n\t\tlet glInternalFormat;\n\t\tif ( useStencil ) {\n\n\t\t\tif ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\n\t\t\t} else if ( depthType === FloatType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH32F_STENCIL8;\n\n\t\t\t} else if ( depthType === UnsignedShortType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH24_STENCIL8;\n\t\t\t\tconsole.warn( 'DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.' );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( depthType === null || depthType === UnsignedIntType || depthType === UnsignedInt248Type ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT24;\n\n\t\t\t} else if ( depthType === FloatType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t} else if ( depthType === UnsignedShortType ) {\n\n\t\t\t\tglInternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn glInternalFormat;\n\n\t}\n\n\tfunction getMipLevels( texture, image ) {\n\n\t\tif ( textureNeedsGenerateMipmaps( texture ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {\n\n\t\t\treturn Math.log2( Math.max( image.width, image.height ) ) + 1;\n\n\t\t} else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {\n\n\t\t\t// user-defined mipmaps\n\n\t\t\treturn texture.mipmaps.length;\n\n\t\t} else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) {\n\n\t\t\treturn image.mipmaps.length;\n\n\t\t} else {\n\n\t\t\t// texture without mipmaps (only base level)\n\n\t\t\treturn 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\tfunction onTextureDispose( event ) {\n\n\t\tconst texture = event.target;\n\n\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\tdeallocateTexture( texture );\n\n\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t_videoTextures.delete( texture );\n\n\t\t}\n\n\t}\n\n\tfunction onRenderTargetDispose( event ) {\n\n\t\tconst renderTarget = event.target;\n\n\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tdeallocateRenderTarget( renderTarget );\n\n\t}\n\n\t//\n\n\tfunction deallocateTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t// check if it's necessary to remove the WebGLTexture object\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures ) {\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\t\t\twebglTexture.usedTimes --;\n\n\t\t\t// the WebGLTexture object is not used anymore, remove it\n\n\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\tdeleteTexture( texture );\n\n\t\t\t}\n\n\t\t\t// remove the weak map entry if no WebGLTexture uses the source anymore\n\n\t\t\tif ( Object.keys( webglTextures ).length === 0 ) {\n\n\t\t\t\t_sources.delete( source );\n\n\t\t\t}\n\n\t\t}\n\n\t\tproperties.remove( texture );\n\n\t}\n\n\tfunction deleteTexture( texture ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\tconst source = texture.source;\n\t\tconst webglTextures = _sources.get( source );\n\t\tdelete webglTextures[ textureProperties.__cacheKey ];\n\n\t\tinfo.memory.textures --;\n\n\t}\n\n\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t}\n\n\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( Array.isArray( renderTargetProperties.__webglFramebuffer[ i ] ) ) {\n\n\t\t\t\t\tfor ( let level = 0; level < renderTargetProperties.__webglFramebuffer[ i ].length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ][ level ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( Array.isArray( renderTargetProperties.__webglFramebuffer ) ) {\n\n\t\t\t\tfor ( let level = 0; level < renderTargetProperties.__webglFramebuffer.length; level ++ ) _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ level ] );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\t\t\tif ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer ) {\n\n\t\t\t\tfor ( let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTargetProperties.__webglColorRenderbuffer[ i ] ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );\n\n\t\t}\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\tif ( attachmentProperties.__webglTexture ) {\n\n\t\t\t\t_gl.deleteTexture( attachmentProperties.__webglTexture );\n\n\t\t\t\tinfo.memory.textures --;\n\n\t\t\t}\n\n\t\t\tproperties.remove( textures[ i ] );\n\n\t\t}\n\n\t\tproperties.remove( renderTarget );\n\n\t}\n\n\t//\n\n\tlet textureUnits = 0;\n\n\tfunction resetTextureUnits() {\n\n\t\ttextureUnits = 0;\n\n\t}\n\n\tfunction allocateTextureUnit() {\n\n\t\tconst textureUnit = textureUnits;\n\n\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t}\n\n\t\ttextureUnits += 1;\n\n\t\treturn textureUnit;\n\n\t}\n\n\tfunction getTextureCacheKey( texture ) {\n\n\t\tconst array = [];\n\n\t\tarray.push( texture.wrapS );\n\t\tarray.push( texture.wrapT );\n\t\tarray.push( texture.wrapR || 0 );\n\t\tarray.push( texture.magFilter );\n\t\tarray.push( texture.minFilter );\n\t\tarray.push( texture.anisotropy );\n\t\tarray.push( texture.internalFormat );\n\t\tarray.push( texture.format );\n\t\tarray.push( texture.type );\n\t\tarray.push( texture.generateMipmaps );\n\t\tarray.push( texture.premultiplyAlpha );\n\t\tarray.push( texture.flipY );\n\t\tarray.push( texture.unpackAlignment );\n\t\tarray.push( texture.colorSpace );\n\n\t\treturn array.join();\n\n\t}\n\n\t//\n\n\tfunction setTexture2D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\tif ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tconst image = texture.image;\n\n\t\t\tif ( image === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' );\n\n\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );\n\n\t\t\t} else {\n\n\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture2DArray( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTexture3D( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_3D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tfunction setTextureCube( texture, slot ) {\n\n\t\tconst textureProperties = properties.get( texture );\n\n\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\tuploadCubeTexture( textureProperties, texture, slot );\n\t\t\treturn;\n\n\t\t}\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t}\n\n\tconst wrappingToGL = {\n\t\t[ RepeatWrapping ]: _gl.REPEAT,\n\t\t[ ClampToEdgeWrapping ]: _gl.CLAMP_TO_EDGE,\n\t\t[ MirroredRepeatWrapping ]: _gl.MIRRORED_REPEAT\n\t};\n\n\tconst filterToGL = {\n\t\t[ NearestFilter ]: _gl.NEAREST,\n\t\t[ NearestMipmapNearestFilter ]: _gl.NEAREST_MIPMAP_NEAREST,\n\t\t[ NearestMipmapLinearFilter ]: _gl.NEAREST_MIPMAP_LINEAR,\n\n\t\t[ LinearFilter ]: _gl.LINEAR,\n\t\t[ LinearMipmapNearestFilter ]: _gl.LINEAR_MIPMAP_NEAREST,\n\t\t[ LinearMipmapLinearFilter ]: _gl.LINEAR_MIPMAP_LINEAR\n\t};\n\n\tconst compareToGL = {\n\t\t[ NeverCompare ]: _gl.NEVER,\n\t\t[ AlwaysCompare ]: _gl.ALWAYS,\n\t\t[ LessCompare ]: _gl.LESS,\n\t\t[ LessEqualCompare ]: _gl.LEQUAL,\n\t\t[ EqualCompare ]: _gl.EQUAL,\n\t\t[ GreaterEqualCompare ]: _gl.GEQUAL,\n\t\t[ GreaterCompare ]: _gl.GREATER,\n\t\t[ NotEqualCompare ]: _gl.NOTEQUAL\n\t};\n\n\tfunction setTextureParameters( textureType, texture ) {\n\n\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false &&\n\t\t\t( texture.magFilter === LinearFilter || texture.magFilter === LinearMipmapNearestFilter || texture.magFilter === NearestMipmapLinearFilter || texture.magFilter === LinearMipmapLinearFilter ||\n\t\t\ttexture.minFilter === LinearFilter || texture.minFilter === LinearMipmapNearestFilter || texture.minFilter === NearestMipmapLinearFilter || texture.minFilter === LinearMipmapLinearFilter ) ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device.' );\n\n\t\t}\n\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );\n\n\t\tif ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] );\n\n\t\t}\n\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );\n\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] );\n\n\t\tif ( texture.compareFunction ) {\n\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_MODE, _gl.COMPARE_REF_TO_TEXTURE );\n\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_COMPARE_FUNC, compareToGL[ texture.compareFunction ] );\n\n\t\t}\n\n\t\tif ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {\n\n\t\t\tif ( texture.magFilter === NearestFilter ) return;\n\t\t\tif ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;\n\t\t\tif ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension\n\n\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\tconst extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction initTexture( textureProperties, texture ) {\n\n\t\tlet forceUpload = false;\n\n\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t}\n\n\t\t// create Source <-> WebGLTextures mapping if necessary\n\n\t\tconst source = texture.source;\n\t\tlet webglTextures = _sources.get( source );\n\n\t\tif ( webglTextures === undefined ) {\n\n\t\t\twebglTextures = {};\n\t\t\t_sources.set( source, webglTextures );\n\n\t\t}\n\n\t\t// check if there is already a WebGLTexture object for the given texture parameters\n\n\t\tconst textureCacheKey = getTextureCacheKey( texture );\n\n\t\tif ( textureCacheKey !== textureProperties.__cacheKey ) {\n\n\t\t\t// if not, create a new instance of WebGLTexture\n\n\t\t\tif ( webglTextures[ textureCacheKey ] === undefined ) {\n\n\t\t\t\t// create new entry\n\n\t\t\t\twebglTextures[ textureCacheKey ] = {\n\t\t\t\t\ttexture: _gl.createTexture(),\n\t\t\t\t\tusedTimes: 0\n\t\t\t\t};\n\n\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t// when a new instance of WebGLTexture was created, a texture upload is required\n\t\t\t\t// even if the image contents are identical\n\n\t\t\t\tforceUpload = true;\n\n\t\t\t}\n\n\t\t\twebglTextures[ textureCacheKey ].usedTimes ++;\n\n\t\t\t// every time the texture cache key changes, it's necessary to check if an instance of\n\t\t\t// WebGLTexture can be deleted in order to avoid a memory leak.\n\n\t\t\tconst webglTexture = webglTextures[ textureProperties.__cacheKey ];\n\n\t\t\tif ( webglTexture !== undefined ) {\n\n\t\t\t\twebglTextures[ textureProperties.__cacheKey ].usedTimes --;\n\n\t\t\t\tif ( webglTexture.usedTimes === 0 ) {\n\n\t\t\t\t\tdeleteTexture( texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// store references to cache key and WebGLTexture object\n\n\t\t\ttextureProperties.__cacheKey = textureCacheKey;\n\t\t\ttextureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;\n\n\t\t}\n\n\t\treturn forceUpload;\n\n\t}\n\n\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\tlet textureType = _gl.TEXTURE_2D;\n\n\t\tif ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY;\n\t\tif ( texture.isData3DTexture ) textureType = _gl.TEXTURE_3D;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( textureType, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\t\tlet image = resizeImage( texture.image, false, capabilities.maxTextureSize );\n\t\t\timage = verifyColorSpace( texture, image );\n\n\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\n\t\t\tconst glType = utils.convert( texture.type );\n\t\t\tlet glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, texture.isVideoTexture );\n\n\t\t\tsetTextureParameters( textureType, texture );\n\n\t\t\tlet mipmap;\n\t\t\tconst mipmaps = texture.mipmaps;\n\n\t\t\tconst useTexStorage = ( texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst dataReady = source.dataReady;\n\t\t\tconst levels = getMipLevels( texture, image );\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\tglInternalFormat = getInternalDepthFormat( texture.format === DepthStencilFormat, texture.type );\n\n\t\t\t\t//\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\t\tif ( texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst layerByteLength = getByteLength( mipmap.width, mipmap.height, texture.format, texture.type );\n\n\t\t\t\t\t\t\t\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\tconst layerData = mipmap.data.subarray(\n\t\t\t\t\t\t\t\t\t\t\t\t\tlayerIndex * layerByteLength / mipmap.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t\t\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / mipmap.data.BYTES_PER_ELEMENT\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, layerIndex, mipmap.width, mipmap.height, 1, glFormat, layerData, 0, 0 );\n\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isDataArrayTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\tif ( texture.layerUpdates.size > 0 ) {\n\n\t\t\t\t\t\t\tconst layerByteLength = getByteLength( image.width, image.height, texture.format, texture.type );\n\n\t\t\t\t\t\t\tfor ( const layerIndex of texture.layerUpdates ) {\n\n\t\t\t\t\t\t\t\tconst layerData = image.data.subarray(\n\t\t\t\t\t\t\t\t\tlayerIndex * layerByteLength / image.data.BYTES_PER_ELEMENT,\n\t\t\t\t\t\t\t\t\t( layerIndex + 1 ) * layerByteLength / image.data.BYTES_PER_ELEMENT\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, layerIndex, image.width, image.height, 1, glFormat, glType, layerData );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttexture.clearLayerUpdates();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\tstate.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\tstate.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isFramebufferTexture ) {\n\n\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tlet width = image.width, height = image.height;\n\n\t\t\t\t\t\tfor ( let i = 0; i < levels; i ++ ) {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t\t\t\t\twidth >>= 1;\n\t\t\t\t\t\t\theight >>= 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 ) {\n\n\t\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t\tconst dimensions = getDimensions( mipmaps[ 0 ] );\n\n\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( let i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\tif ( allocateMemory ) {\n\n\t\t\t\t\t\t\tconst dimensions = getDimensions( image );\n\n\t\t\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( textureType );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\tfunction uploadCubeTexture( textureProperties, texture, slot ) {\n\n\t\tif ( texture.image.length !== 6 ) return;\n\n\t\tconst forceUpload = initTexture( textureProperties, texture );\n\t\tconst source = texture.source;\n\n\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );\n\n\t\tconst sourceProperties = properties.get( source );\n\n\t\tif ( source.version !== sourceProperties.__version || forceUpload === true ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\n\t\t\tconst workingPrimaries = ColorManagement.getPrimaries( ColorManagement.workingColorSpace );\n\t\t\tconst texturePrimaries = texture.colorSpace === NoColorSpace ? null : ColorManagement.getPrimaries( texture.colorSpace );\n\t\t\tconst unpackConversion = texture.colorSpace === NoColorSpace || workingPrimaries === texturePrimaries ? _gl.NONE : _gl.BROWSER_DEFAULT_WEBGL;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, unpackConversion );\n\n\t\t\tconst isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );\n\t\t\tconst isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\tconst cubeImage = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\tcubeImage[ i ] = resizeImage( texture.image[ i ], true, capabilities.maxCubemapSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );\n\n\t\t\t}\n\n\t\t\tconst image = cubeImage[ 0 ],\n\t\t\t\tglFormat = utils.convert( texture.format, texture.colorSpace ),\n\t\t\t\tglType = utils.convert( texture.type ),\n\t\t\t\tglInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\n\t\t\tconst useTexStorage = ( texture.isVideoTexture !== true );\n\t\t\tconst allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );\n\t\t\tconst dataReady = source.dataReady;\n\t\t\tlet levels = getMipLevels( texture, image );\n\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );\n\n\t\t\tlet mipmaps;\n\n\t\t\tif ( isCompressed ) {\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tmipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\tif ( texture.format !== RGBAFormat ) {\n\n\t\t\t\t\t\t\tif ( glFormat !== null ) {\n\n\t\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tmipmaps = texture.mipmaps;\n\n\t\t\t\tif ( useTexStorage && allocateMemory ) {\n\n\t\t\t\t\t// TODO: Uniformly handle mipmap definitions\n\t\t\t\t\t// Normal textures and compressed cube textures define base level + mips with their mipmap array\n\t\t\t\t\t// Uncompressed cube textures use their mipmap array only for mips (no base level)\n\n\t\t\t\t\tif ( mipmaps.length > 0 ) levels ++;\n\n\t\t\t\t\tconst dimensions = getDimensions( cubeImage[ 0 ] );\n\n\t\t\t\t\tstate.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, dimensions.width, dimensions.height );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\t\t\t\t\t\t\tconst mipmapImage = mipmap.image[ i ].image;\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( let j = 0; j < mipmaps.length; j ++ ) {\n\n\t\t\t\t\t\t\tconst mipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\tif ( useTexStorage ) {\n\n\t\t\t\t\t\t\t\tif ( dataReady ) {\n\n\t\t\t\t\t\t\t\t\tstate.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tsourceProperties.__version = source.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\ttextureProperties.__version = texture.version;\n\n\t}\n\n\t// Render targets\n\n\t// Setup storage for target texture and bind it to correct framebuffer\n\tfunction setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget, level ) {\n\n\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\tconst glType = utils.convert( texture.type );\n\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( ! renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\tconst width = Math.max( 1, renderTarget.width >> level );\n\t\t\tconst height = Math.max( 1, renderTarget.height >> level );\n\n\t\t\tif ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {\n\n\t\t\t\tstate.texImage3D( textureTarget, level, glInternalFormat, width, height, renderTarget.depth, 0, glFormat, glType, null );\n\n\t\t\t} else {\n\n\t\t\t\tstate.texImage2D( textureTarget, level, glInternalFormat, width, height, 0, glFormat, glType, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );\n\n\t\t} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753\n\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, level );\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\tfunction setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t// retrieve the depth attachment types\n\t\t\tconst depthTexture = renderTarget.depthTexture;\n\t\t\tconst depthType = depthTexture && depthTexture.isDepthTexture ? depthTexture.type : null;\n\t\t\tconst glInternalFormat = getInternalDepthFormat( renderTarget.stencilBuffer, depthType );\n\t\t\tconst glAttachmentType = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\t\t// set up the attachment\n\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\tconst isUseMultisampledRTT = useMultisampledRTT( renderTarget );\n\t\t\tif ( isUseMultisampledRTT ) {\n\n\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else if ( isMultisample ) {\n\n\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, glAttachmentType, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t} else {\n\n\t\t\tconst textures = renderTarget.textures;\n\n\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\tconst texture = textures[ i ];\n\n\t\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );\n\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\t\t\tif ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else if ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\t\tmultisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t}\n\n\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\tconst isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );\n\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t}\n\n\t\t// upload an empty depth texture with framebuffer size\n\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t}\n\n\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\tconst webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\t\tconst samples = getRenderTargetSamples( renderTarget );\n\n\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) ) {\n\n\t\t\t\tmultisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t}\n\n\t}\n\n\t// Setup GL resources for a non-texture depth buffer\n\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\n\t\tif ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t} else {\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t}\n\n\t// rebind framebuffer with external textures\n\tfunction rebindTextures( renderTarget, colorTexture, depthTexture ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\tif ( colorTexture !== undefined ) {\n\n\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, 0 );\n\n\t\t}\n\n\t\tif ( depthTexture !== undefined ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\t// Set up GL resources for the render target\n\tfunction setupRenderTarget( renderTarget ) {\n\n\t\tconst texture = renderTarget.texture;\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\tconst textureProperties = properties.get( texture );\n\n\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tconst isCube = ( renderTarget.isWebGLCubeRenderTarget === true );\n\t\tconst isMultipleRenderTargets = ( textures.length > 1 );\n\n\t\tif ( ! isMultipleRenderTargets ) {\n\n\t\t\tif ( textureProperties.__webglTexture === undefined ) {\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\t\t\tinfo.memory.textures ++;\n\n\t\t}\n\n\t\t// Setup framebuffer\n\n\t\tif ( isCube ) {\n\n\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = [];\n\n\t\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ][ level ] = _gl.createFramebuffer();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ level ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attachmentProperties = properties.get( textures[ i ] );\n\n\t\t\t\t\tif ( attachmentProperties.__webglTexture === undefined ) {\n\n\t\t\t\t\t\tattachmentProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ( renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\trenderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();\n\t\t\t\trenderTargetProperties.__webglColorRenderbuffer = [];\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tconst texture = textures[ i ];\n\t\t\t\t\trenderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer();\n\n\t\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\tconst glFormat = utils.convert( texture.format, texture.colorSpace );\n\t\t\t\t\tconst glType = utils.convert( texture.type );\n\t\t\t\t\tconst glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, renderTarget.isXRRenderTarget === true );\n\t\t\t\t\tconst samples = getRenderTargetSamples( renderTarget );\n\t\t\t\t\t_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );\n\n\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup color buffer\n\n\t\tif ( isCube ) {\n\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture );\n\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ][ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, level );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else if ( isMultipleRenderTargets ) {\n\n\t\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\t\tconst attachment = textures[ i ];\n\t\t\t\tconst attachmentProperties = properties.get( attachment );\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_2D, attachment );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, 0 );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( attachment ) ) {\n\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t} else {\n\n\t\t\tlet glTextureType = _gl.TEXTURE_2D;\n\n\t\t\tif ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {\n\n\t\t\t\tglTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t}\n\n\t\t\tstate.bindTexture( glTextureType, textureProperties.__webglTexture );\n\t\t\tsetTextureParameters( glTextureType, texture );\n\n\t\t\tif ( texture.mipmaps && texture.mipmaps.length > 0 ) {\n\n\t\t\t\tfor ( let level = 0; level < texture.mipmaps.length; level ++ ) {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ level ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, level );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType, 0 );\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tgenerateMipmap( glTextureType );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t}\n\n\t\t// Setup depth and stencil buffers\n\n\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t}\n\n\t}\n\n\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\tconst textures = renderTarget.textures;\n\n\t\tfor ( let i = 0, il = textures.length; i < il; i ++ ) {\n\n\t\t\tconst texture = textures[ i ];\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture ) ) {\n\n\t\t\t\tconst target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\t\tconst webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\tgenerateMipmap( target );\n\t\t\t\tstate.unbindTexture();\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst invalidationArrayRead = [];\n\tconst invalidationArrayDraw = [];\n\n\tfunction updateMultisampleRenderTarget( renderTarget ) {\n\n\t\tif ( renderTarget.samples > 0 ) {\n\n\t\t\tif ( useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\tconst textures = renderTarget.textures;\n\t\t\t\tconst width = renderTarget.width;\n\t\t\t\tconst height = renderTarget.height;\n\t\t\t\tlet mask = _gl.COLOR_BUFFER_BIT;\n\t\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\t\tconst isMultipleRenderTargets = ( textures.length > 1 );\n\n\t\t\t\t// If MRT we need to remove FBO attachments\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\n\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\tif ( renderTarget.resolveDepthBuffer ) {\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;\n\n\t\t\t\t\t\t// resolving stencil is slow with a D3D backend. disable it for all transmission render targets (see #27799)\n\n\t\t\t\t\t\tif ( renderTarget.stencilBuffer && renderTarget.resolveStencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );\n\n\t\t\t\t\tif ( supportsInvalidateFramebuffer === true ) {\n\n\t\t\t\t\t\tinvalidationArrayRead.length = 0;\n\t\t\t\t\t\tinvalidationArrayDraw.length = 0;\n\n\t\t\t\t\t\tinvalidationArrayRead.push( _gl.COLOR_ATTACHMENT0 + i );\n\n\t\t\t\t\t\tif ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false ) {\n\n\t\t\t\t\t\t\tinvalidationArrayRead.push( depthStyle );\n\t\t\t\t\t\t\tinvalidationArrayDraw.push( depthStyle );\n\n\t\t\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, invalidationArrayDraw );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArrayRead );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );\n\n\t\t\t\t// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments\n\t\t\t\tif ( isMultipleRenderTargets ) {\n\n\t\t\t\t\tfor ( let i = 0; i < textures.length; i ++ ) {\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\t\t\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );\n\n\t\t\t\t\t\tconst webglTexture = properties.get( textures[ i ] ).__webglTexture;\n\n\t\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\t\t_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );\n\n\t\t\t} else {\n\n\t\t\t\tif ( renderTarget.depthBuffer && renderTarget.resolveDepthBuffer === false && supportsInvalidateFramebuffer ) {\n\n\t\t\t\t\tconst depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;\n\n\t\t\t\t\t_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction getRenderTargetSamples( renderTarget ) {\n\n\t\treturn Math.min( capabilities.maxSamples, renderTarget.samples );\n\n\t}\n\n\tfunction useMultisampledRTT( renderTarget ) {\n\n\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\treturn renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;\n\n\t}\n\n\tfunction updateVideoTexture( texture ) {\n\n\t\tconst frame = info.render.frame;\n\n\t\t// Check the last frame we updated the VideoTexture\n\n\t\tif ( _videoTextures.get( texture ) !== frame ) {\n\n\t\t\t_videoTextures.set( texture, frame );\n\t\t\ttexture.update();\n\n\t\t}\n\n\t}\n\n\tfunction verifyColorSpace( texture, image ) {\n\n\t\tconst colorSpace = texture.colorSpace;\n\t\tconst format = texture.format;\n\t\tconst type = texture.type;\n\n\t\tif ( texture.isCompressedTexture === true || texture.isVideoTexture === true ) return image;\n\n\t\tif ( colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace ) {\n\n\t\t\t// sRGB\n\n\t\t\tif ( ColorManagement.getTransfer( colorSpace ) === SRGBTransfer ) {\n\n\t\t\t\t// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format\n\n\t\t\t\tif ( format !== RGBAFormat || type !== UnsignedByteType ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.WebGLTextures: Unsupported texture color space:', colorSpace );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn image;\n\n\t}\n\n\tfunction getDimensions( image ) {\n\n\t\tif ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) {\n\n\t\t\t// if intrinsic data are not available, fallback to width/height\n\n\t\t\t_imageDimensions.width = image.naturalWidth || image.width;\n\t\t\t_imageDimensions.height = image.naturalHeight || image.height;\n\n\t\t} else if ( typeof VideoFrame !== 'undefined' && image instanceof VideoFrame ) {\n\n\t\t\t_imageDimensions.width = image.displayWidth;\n\t\t\t_imageDimensions.height = image.displayHeight;\n\n\t\t} else {\n\n\t\t\t_imageDimensions.width = image.width;\n\t\t\t_imageDimensions.height = image.height;\n\n\t\t}\n\n\t\treturn _imageDimensions;\n\n\t}\n\n\t//\n\n\tthis.allocateTextureUnit = allocateTextureUnit;\n\tthis.resetTextureUnits = resetTextureUnits;\n\n\tthis.setTexture2D = setTexture2D;\n\tthis.setTexture2DArray = setTexture2DArray;\n\tthis.setTexture3D = setTexture3D;\n\tthis.setTextureCube = setTextureCube;\n\tthis.rebindTextures = rebindTextures;\n\tthis.setupRenderTarget = setupRenderTarget;\n\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\tthis.updateMultisampleRenderTarget = updateMultisampleRenderTarget;\n\tthis.setupDepthRenderbuffer = setupDepthRenderbuffer;\n\tthis.setupFrameBufferTexture = setupFrameBufferTexture;\n\tthis.useMultisampledRTT = useMultisampledRTT;\n\n}\n\nfunction WebGLUtils( gl, extensions ) {\n\n\tfunction convert( p, colorSpace = NoColorSpace ) {\n\n\t\tlet extension;\n\n\t\tconst transfer = ColorManagement.getTransfer( colorSpace );\n\n\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\tif ( p === UnsignedInt5999Type ) return gl.UNSIGNED_INT_5_9_9_9_REV;\n\n\t\tif ( p === ByteType ) return gl.BYTE;\n\t\tif ( p === ShortType ) return gl.SHORT;\n\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\tif ( p === IntType ) return gl.INT;\n\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\tif ( p === FloatType ) return gl.FLOAT;\n\t\tif ( p === HalfFloatType ) return gl.HALF_FLOAT;\n\n\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\t// WebGL2 formats.\n\n\t\tif ( p === RedFormat ) return gl.RED;\n\t\tif ( p === RedIntegerFormat ) return gl.RED_INTEGER;\n\t\tif ( p === RGFormat ) return gl.RG;\n\t\tif ( p === RGIntegerFormat ) return gl.RG_INTEGER;\n\t\tif ( p === RGBAIntegerFormat ) return gl.RGBA_INTEGER;\n\n\t\t// S3TC\n\n\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\tif ( transfer === SRGBTransfer ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// PVRTC\n\n\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ETC\n\n\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGB_ETC1_Format || p === RGB_ETC2_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;\n\t\t\t\tif ( p === RGBA_ETC2_EAC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ASTC\n\n\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_ASTC_4x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x4_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_5x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_6x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_8x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x5_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x6_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x8_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_10x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x10_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;\n\t\t\t\tif ( p === RGBA_ASTC_12x12_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// BPTC\n\n\t\tif ( p === RGBA_BPTC_Format || p === RGB_BPTC_SIGNED_Format || p === RGB_BPTC_UNSIGNED_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_bptc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return ( transfer === SRGBTransfer ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;\n\t\t\t\tif ( p === RGB_BPTC_SIGNED_Format ) return extension.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;\n\t\t\t\tif ( p === RGB_BPTC_UNSIGNED_Format ) return extension.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// RGTC\n\n\t\tif ( p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format ) {\n\n\t\t\textension = extensions.get( 'EXT_texture_compression_rgtc' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tif ( p === RGBA_BPTC_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;\n\t\t\t\tif ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;\n\t\t\t\tif ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;\n\n\t\t\t} else {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tif ( p === UnsignedInt248Type ) return gl.UNSIGNED_INT_24_8;\n\n\t\t// if \"p\" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)\n\n\t\treturn ( gl[ p ] !== undefined ) ? gl[ p ] : null;\n\n\t}\n\n\treturn { convert: convert };\n\n}\n\nclass ArrayCamera extends PerspectiveCamera {\n\n\tconstructor( array = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isArrayCamera = true;\n\n\t\tthis.cameras = array;\n\n\t}\n\n}\n\nclass Group extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isGroup = true;\n\n\t\tthis.type = 'Group';\n\n\t}\n\n}\n\nconst _moveEvent = { type: 'move' };\n\nclass WebXRController {\n\n\tconstructor() {\n\n\t\tthis._targetRay = null;\n\t\tthis._grip = null;\n\t\tthis._hand = null;\n\n\t}\n\n\tgetHandSpace() {\n\n\t\tif ( this._hand === null ) {\n\n\t\t\tthis._hand = new Group();\n\t\t\tthis._hand.matrixAutoUpdate = false;\n\t\t\tthis._hand.visible = false;\n\n\t\t\tthis._hand.joints = {};\n\t\t\tthis._hand.inputState = { pinching: false };\n\n\t\t}\n\n\t\treturn this._hand;\n\n\t}\n\n\tgetTargetRaySpace() {\n\n\t\tif ( this._targetRay === null ) {\n\n\t\t\tthis._targetRay = new Group();\n\t\t\tthis._targetRay.matrixAutoUpdate = false;\n\t\t\tthis._targetRay.visible = false;\n\t\t\tthis._targetRay.hasLinearVelocity = false;\n\t\t\tthis._targetRay.linearVelocity = new Vector3();\n\t\t\tthis._targetRay.hasAngularVelocity = false;\n\t\t\tthis._targetRay.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._targetRay;\n\n\t}\n\n\tgetGripSpace() {\n\n\t\tif ( this._grip === null ) {\n\n\t\t\tthis._grip = new Group();\n\t\t\tthis._grip.matrixAutoUpdate = false;\n\t\t\tthis._grip.visible = false;\n\t\t\tthis._grip.hasLinearVelocity = false;\n\t\t\tthis._grip.linearVelocity = new Vector3();\n\t\t\tthis._grip.hasAngularVelocity = false;\n\t\t\tthis._grip.angularVelocity = new Vector3();\n\n\t\t}\n\n\t\treturn this._grip;\n\n\t}\n\n\tdispatchEvent( event ) {\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.dispatchEvent( event );\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.dispatchEvent( event );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tconnect( inputSource ) {\n\n\t\tif ( inputSource && inputSource.hand ) {\n\n\t\t\tconst hand = this._hand;\n\n\t\t\tif ( hand ) {\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Initialize hand with joints when connected\n\t\t\t\t\tthis._getHandJoint( hand, inputjoint );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.dispatchEvent( { type: 'connected', data: inputSource } );\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect( inputSource ) {\n\n\t\tthis.dispatchEvent( { type: 'disconnected', data: inputSource } );\n\n\t\tif ( this._targetRay !== null ) {\n\n\t\t\tthis._targetRay.visible = false;\n\n\t\t}\n\n\t\tif ( this._grip !== null ) {\n\n\t\t\tthis._grip.visible = false;\n\n\t\t}\n\n\t\tif ( this._hand !== null ) {\n\n\t\t\tthis._hand.visible = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tupdate( inputSource, frame, referenceSpace ) {\n\n\t\tlet inputPose = null;\n\t\tlet gripPose = null;\n\t\tlet handPose = null;\n\n\t\tconst targetRay = this._targetRay;\n\t\tconst grip = this._grip;\n\t\tconst hand = this._hand;\n\n\t\tif ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {\n\n\t\t\tif ( hand && inputSource.hand ) {\n\n\t\t\t\thandPose = true;\n\n\t\t\t\tfor ( const inputjoint of inputSource.hand.values() ) {\n\n\t\t\t\t\t// Update the joints groups with the XRJoint poses\n\t\t\t\t\tconst jointPose = frame.getJointPose( inputjoint, referenceSpace );\n\n\t\t\t\t\t// The transform of this joint will be updated with the joint pose on each frame\n\t\t\t\t\tconst joint = this._getHandJoint( hand, inputjoint );\n\n\t\t\t\t\tif ( jointPose !== null ) {\n\n\t\t\t\t\t\tjoint.matrix.fromArray( jointPose.transform.matrix );\n\t\t\t\t\t\tjoint.matrix.decompose( joint.position, joint.rotation, joint.scale );\n\t\t\t\t\t\tjoint.matrixWorldNeedsUpdate = true;\n\t\t\t\t\t\tjoint.jointRadius = jointPose.radius;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tjoint.visible = jointPose !== null;\n\n\t\t\t\t}\n\n\t\t\t\t// Custom events\n\n\t\t\t\t// Check pinchz\n\t\t\t\tconst indexTip = hand.joints[ 'index-finger-tip' ];\n\t\t\t\tconst thumbTip = hand.joints[ 'thumb-tip' ];\n\t\t\t\tconst distance = indexTip.position.distanceTo( thumbTip.position );\n\n\t\t\t\tconst distanceToPinch = 0.02;\n\t\t\t\tconst threshold = 0.005;\n\n\t\t\t\tif ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = false;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchend',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {\n\n\t\t\t\t\thand.inputState.pinching = true;\n\t\t\t\t\tthis.dispatchEvent( {\n\t\t\t\t\t\ttype: 'pinchstart',\n\t\t\t\t\t\thandedness: inputSource.handedness,\n\t\t\t\t\t\ttarget: this\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( grip !== null && inputSource.gripSpace ) {\n\n\t\t\t\t\tgripPose = frame.getPose( inputSource.gripSpace, referenceSpace );\n\n\t\t\t\t\tif ( gripPose !== null ) {\n\n\t\t\t\t\t\tgrip.matrix.fromArray( gripPose.transform.matrix );\n\t\t\t\t\t\tgrip.matrix.decompose( grip.position, grip.rotation, grip.scale );\n\t\t\t\t\t\tgrip.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t\t\tif ( gripPose.linearVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = true;\n\t\t\t\t\t\t\tgrip.linearVelocity.copy( gripPose.linearVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasLinearVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( gripPose.angularVelocity ) {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = true;\n\t\t\t\t\t\t\tgrip.angularVelocity.copy( gripPose.angularVelocity );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgrip.hasAngularVelocity = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( targetRay !== null ) {\n\n\t\t\t\tinputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );\n\n\t\t\t\t// Some runtimes (namely Vive Cosmos with Vive OpenXR Runtime) have only grip space and ray space is equal to it\n\t\t\t\tif ( inputPose === null && gripPose !== null ) {\n\n\t\t\t\t\tinputPose = gripPose;\n\n\t\t\t\t}\n\n\t\t\t\tif ( inputPose !== null ) {\n\n\t\t\t\t\ttargetRay.matrix.fromArray( inputPose.transform.matrix );\n\t\t\t\t\ttargetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );\n\t\t\t\t\ttargetRay.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t\tif ( inputPose.linearVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = true;\n\t\t\t\t\t\ttargetRay.linearVelocity.copy( inputPose.linearVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasLinearVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( inputPose.angularVelocity ) {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = true;\n\t\t\t\t\t\ttargetRay.angularVelocity.copy( inputPose.angularVelocity );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttargetRay.hasAngularVelocity = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.dispatchEvent( _moveEvent );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tif ( targetRay !== null ) {\n\n\t\t\ttargetRay.visible = ( inputPose !== null );\n\n\t\t}\n\n\t\tif ( grip !== null ) {\n\n\t\t\tgrip.visible = ( gripPose !== null );\n\n\t\t}\n\n\t\tif ( hand !== null ) {\n\n\t\t\thand.visible = ( handPose !== null );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// private method\n\n\t_getHandJoint( hand, inputjoint ) {\n\n\t\tif ( hand.joints[ inputjoint.jointName ] === undefined ) {\n\n\t\t\tconst joint = new Group();\n\t\t\tjoint.matrixAutoUpdate = false;\n\t\t\tjoint.visible = false;\n\t\t\thand.joints[ inputjoint.jointName ] = joint;\n\n\t\t\thand.add( joint );\n\n\t\t}\n\n\t\treturn hand.joints[ inputjoint.jointName ];\n\n\t}\n\n}\n\nconst _occlusion_vertex = `\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}`;\n\nconst _occlusion_fragment = `\nuniform sampler2DArray depthColor;\nuniform float depthWidth;\nuniform float depthHeight;\n\nvoid main() {\n\n\tvec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight );\n\n\tif ( coord.x >= 1.0 ) {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r;\n\n\t} else {\n\n\t\tgl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r;\n\n\t}\n\n}`;\n\nclass WebXRDepthSensing {\n\n\tconstructor() {\n\n\t\tthis.texture = null;\n\t\tthis.mesh = null;\n\n\t\tthis.depthNear = 0;\n\t\tthis.depthFar = 0;\n\n\t}\n\n\tinit( renderer, depthData, renderState ) {\n\n\t\tif ( this.texture === null ) {\n\n\t\t\tconst texture = new Texture();\n\n\t\t\tconst texProps = renderer.properties.get( texture );\n\t\t\ttexProps.__webglTexture = depthData.texture;\n\n\t\t\tif ( ( depthData.depthNear != renderState.depthNear ) || ( depthData.depthFar != renderState.depthFar ) ) {\n\n\t\t\t\tthis.depthNear = depthData.depthNear;\n\t\t\t\tthis.depthFar = depthData.depthFar;\n\n\t\t\t}\n\n\t\t\tthis.texture = texture;\n\n\t\t}\n\n\t}\n\n\tgetMesh( cameraXR ) {\n\n\t\tif ( this.texture !== null ) {\n\n\t\t\tif ( this.mesh === null ) {\n\n\t\t\t\tconst viewport = cameraXR.cameras[ 0 ].viewport;\n\t\t\t\tconst material = new ShaderMaterial( {\n\t\t\t\t\tvertexShader: _occlusion_vertex,\n\t\t\t\t\tfragmentShader: _occlusion_fragment,\n\t\t\t\t\tuniforms: {\n\t\t\t\t\t\tdepthColor: { value: this.texture },\n\t\t\t\t\t\tdepthWidth: { value: viewport.z },\n\t\t\t\t\t\tdepthHeight: { value: viewport.w }\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tthis.mesh = new Mesh( new PlaneGeometry( 20, 20 ), material );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.mesh;\n\n\t}\n\n\treset() {\n\n\t\tthis.texture = null;\n\t\tthis.mesh = null;\n\n\t}\n\n\tgetDepthTexture() {\n\n\t\treturn this.texture;\n\n\t}\n\n}\n\nclass WebXRManager extends EventDispatcher {\n\n\tconstructor( renderer, gl ) {\n\n\t\tsuper();\n\n\t\tconst scope = this;\n\n\t\tlet session = null;\n\n\t\tlet framebufferScaleFactor = 1.0;\n\n\t\tlet referenceSpace = null;\n\t\tlet referenceSpaceType = 'local-floor';\n\t\t// Set default foveation to maximum.\n\t\tlet foveation = 1.0;\n\t\tlet customReferenceSpace = null;\n\n\t\tlet pose = null;\n\t\tlet glBinding = null;\n\t\tlet glProjLayer = null;\n\t\tlet glBaseLayer = null;\n\t\tlet xrFrame = null;\n\n\t\tconst depthSensing = new WebXRDepthSensing();\n\t\tconst attributes = gl.getContextAttributes();\n\n\t\tlet initialRenderTarget = null;\n\t\tlet newRenderTarget = null;\n\n\t\tconst controllers = [];\n\t\tconst controllerInputSources = [];\n\n\t\tconst currentSize = new Vector2();\n\t\tlet currentPixelRatio = null;\n\n\t\t//\n\n\t\tconst cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tconst cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tconst cameras = [ cameraL, cameraR ];\n\n\t\tconst cameraXR = new ArrayCamera();\n\t\tcameraXR.layers.enable( 1 );\n\t\tcameraXR.layers.enable( 2 );\n\n\t\tlet _currentDepthNear = null;\n\t\tlet _currentDepthFar = null;\n\n\t\t//\n\n\t\tthis.cameraAutoUpdate = true;\n\t\tthis.enabled = false;\n\n\t\tthis.isPresenting = false;\n\n\t\tthis.getController = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getTargetRaySpace();\n\n\t\t};\n\n\t\tthis.getControllerGrip = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getGripSpace();\n\n\t\t};\n\n\t\tthis.getHand = function ( index ) {\n\n\t\t\tlet controller = controllers[ index ];\n\n\t\t\tif ( controller === undefined ) {\n\n\t\t\t\tcontroller = new WebXRController();\n\t\t\t\tcontrollers[ index ] = controller;\n\n\t\t\t}\n\n\t\t\treturn controller.getHandSpace();\n\n\t\t};\n\n\t\t//\n\n\t\tfunction onSessionEvent( event ) {\n\n\t\t\tconst controllerIndex = controllerInputSources.indexOf( event.inputSource );\n\n\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\tif ( controller !== undefined ) {\n\n\t\t\t\tcontroller.update( event.inputSource, event.frame, customReferenceSpace || referenceSpace );\n\t\t\t\tcontroller.dispatchEvent( { type: event.type, data: event.inputSource } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onSessionEnd() {\n\n\t\t\tsession.removeEventListener( 'select', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectstart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'selectend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeeze', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezestart', onSessionEvent );\n\t\t\tsession.removeEventListener( 'squeezeend', onSessionEvent );\n\t\t\tsession.removeEventListener( 'end', onSessionEnd );\n\t\t\tsession.removeEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\n\t\t\t\tif ( inputSource === null ) continue;\n\n\t\t\t\tcontrollerInputSources[ i ] = null;\n\n\t\t\t\tcontrollers[ i ].disconnect( inputSource );\n\n\t\t\t}\n\n\t\t\t_currentDepthNear = null;\n\t\t\t_currentDepthFar = null;\n\n\t\t\tdepthSensing.reset();\n\n\t\t\t// restore framebuffer/rendering state\n\n\t\t\trenderer.setRenderTarget( initialRenderTarget );\n\n\t\t\tglBaseLayer = null;\n\t\t\tglProjLayer = null;\n\t\t\tglBinding = null;\n\t\t\tsession = null;\n\t\t\tnewRenderTarget = null;\n\n\t\t\t//\n\n\t\t\tanimation.stop();\n\n\t\t\tscope.isPresenting = false;\n\n\t\t\trenderer.setPixelRatio( currentPixelRatio );\n\t\t\trenderer.setSize( currentSize.width, currentSize.height, false );\n\n\t\t\tscope.dispatchEvent( { type: 'sessionend' } );\n\n\t\t}\n\n\t\tthis.setFramebufferScaleFactor = function ( value ) {\n\n\t\t\tframebufferScaleFactor = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setReferenceSpaceType = function ( value ) {\n\n\t\t\treferenceSpaceType = value;\n\n\t\t\tif ( scope.isPresenting === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getReferenceSpace = function () {\n\n\t\t\treturn customReferenceSpace || referenceSpace;\n\n\t\t};\n\n\t\tthis.setReferenceSpace = function ( space ) {\n\n\t\t\tcustomReferenceSpace = space;\n\n\t\t};\n\n\t\tthis.getBaseLayer = function () {\n\n\t\t\treturn glProjLayer !== null ? glProjLayer : glBaseLayer;\n\n\t\t};\n\n\t\tthis.getBinding = function () {\n\n\t\t\treturn glBinding;\n\n\t\t};\n\n\t\tthis.getFrame = function () {\n\n\t\t\treturn xrFrame;\n\n\t\t};\n\n\t\tthis.getSession = function () {\n\n\t\t\treturn session;\n\n\t\t};\n\n\t\tthis.setSession = async function ( value ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tinitialRenderTarget = renderer.getRenderTarget();\n\n\t\t\t\tsession.addEventListener( 'select', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectstart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'selectend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeeze', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezestart', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'squeezeend', onSessionEvent );\n\t\t\t\tsession.addEventListener( 'end', onSessionEnd );\n\t\t\t\tsession.addEventListener( 'inputsourceschange', onInputSourcesChange );\n\n\t\t\t\tif ( attributes.xrCompatible !== true ) {\n\n\t\t\t\t\tawait gl.makeXRCompatible();\n\n\t\t\t\t}\n\n\t\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\t\trenderer.getSize( currentSize );\n\n\t\t\t\tif ( session.renderState.layers === undefined ) {\n\n\t\t\t\t\tconst layerInit = {\n\t\t\t\t\t\tantialias: attributes.antialias,\n\t\t\t\t\t\talpha: true,\n\t\t\t\t\t\tdepth: attributes.depth,\n\t\t\t\t\t\tstencil: attributes.stencil,\n\t\t\t\t\t\tframebufferScaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBaseLayer = new XRWebGLLayer( session, gl, layerInit );\n\n\t\t\t\t\tsession.updateRenderState( { baseLayer: glBaseLayer } );\n\n\t\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\t\trenderer.setSize( glBaseLayer.framebufferWidth, glBaseLayer.framebufferHeight, false );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglBaseLayer.framebufferWidth,\n\t\t\t\t\t\tglBaseLayer.framebufferHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet depthFormat = null;\n\t\t\t\t\tlet depthType = null;\n\t\t\t\t\tlet glDepthFormat = null;\n\n\t\t\t\t\tif ( attributes.depth ) {\n\n\t\t\t\t\t\tglDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;\n\t\t\t\t\t\tdepthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;\n\t\t\t\t\t\tdepthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst projectionlayerInit = {\n\t\t\t\t\t\tcolorFormat: gl.RGBA8,\n\t\t\t\t\t\tdepthFormat: glDepthFormat,\n\t\t\t\t\t\tscaleFactor: framebufferScaleFactor\n\t\t\t\t\t};\n\n\t\t\t\t\tglBinding = new XRWebGLBinding( session, gl );\n\n\t\t\t\t\tglProjLayer = glBinding.createProjectionLayer( projectionlayerInit );\n\n\t\t\t\t\tsession.updateRenderState( { layers: [ glProjLayer ] } );\n\n\t\t\t\t\trenderer.setPixelRatio( 1 );\n\t\t\t\t\trenderer.setSize( glProjLayer.textureWidth, glProjLayer.textureHeight, false );\n\n\t\t\t\t\tnewRenderTarget = new WebGLRenderTarget(\n\t\t\t\t\t\tglProjLayer.textureWidth,\n\t\t\t\t\t\tglProjLayer.textureHeight,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tformat: RGBAFormat,\n\t\t\t\t\t\t\ttype: UnsignedByteType,\n\t\t\t\t\t\t\tdepthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),\n\t\t\t\t\t\t\tstencilBuffer: attributes.stencil,\n\t\t\t\t\t\t\tcolorSpace: renderer.outputColorSpace,\n\t\t\t\t\t\t\tsamples: attributes.antialias ? 4 : 0,\n\t\t\t\t\t\t\tresolveDepthBuffer: ( glProjLayer.ignoreDepthValues === false )\n\t\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tnewRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278\n\n\t\t\t\tthis.setFoveation( foveation );\n\n\t\t\t\tcustomReferenceSpace = null;\n\t\t\t\treferenceSpace = await session.requestReferenceSpace( referenceSpaceType );\n\n\t\t\t\tanimation.setContext( session );\n\t\t\t\tanimation.start();\n\n\t\t\t\tscope.isPresenting = true;\n\n\t\t\t\tscope.dispatchEvent( { type: 'sessionstart' } );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getEnvironmentBlendMode = function () {\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\treturn session.environmentBlendMode;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.getDepthTexture = function () {\n\n\t\t\treturn depthSensing.getDepthTexture();\n\n\t\t};\n\n\t\tfunction onInputSourcesChange( event ) {\n\n\t\t\t// Notify disconnected\n\n\t\t\tfor ( let i = 0; i < event.removed.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.removed[ i ];\n\t\t\t\tconst index = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( index >= 0 ) {\n\n\t\t\t\t\tcontrollerInputSources[ index ] = null;\n\t\t\t\t\tcontrollers[ index ].disconnect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Notify connected\n\n\t\t\tfor ( let i = 0; i < event.added.length; i ++ ) {\n\n\t\t\t\tconst inputSource = event.added[ i ];\n\n\t\t\t\tlet controllerIndex = controllerInputSources.indexOf( inputSource );\n\n\t\t\t\tif ( controllerIndex === - 1 ) {\n\n\t\t\t\t\t// Assign input source a controller that currently has no input source\n\n\t\t\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\t\t\tif ( i >= controllerInputSources.length ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources.push( inputSource );\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t} else if ( controllerInputSources[ i ] === null ) {\n\n\t\t\t\t\t\t\tcontrollerInputSources[ i ] = inputSource;\n\t\t\t\t\t\t\tcontrollerIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// If all controllers do currently receive input we ignore new ones\n\n\t\t\t\t\tif ( controllerIndex === - 1 ) break;\n\n\t\t\t\t}\n\n\t\t\t\tconst controller = controllers[ controllerIndex ];\n\n\t\t\t\tif ( controller ) {\n\n\t\t\t\t\tcontroller.connect( inputSource );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst cameraLPos = new Vector3();\n\t\tconst cameraRPos = new Vector3();\n\n\t\t/**\n\t\t * Assumes 2 cameras that are parallel and share an X-axis, and that\n\t\t * the cameras' projection and world matrices have already been set.\n\t\t * And that near and far planes are identical for both cameras.\n\t\t * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765\n\t\t */\n\t\tfunction setProjectionFromUnion( camera, cameraL, cameraR ) {\n\n\t\t\tcameraLPos.setFromMatrixPosition( cameraL.matrixWorld );\n\t\t\tcameraRPos.setFromMatrixPosition( cameraR.matrixWorld );\n\n\t\t\tconst ipd = cameraLPos.distanceTo( cameraRPos );\n\n\t\t\tconst projL = cameraL.projectionMatrix.elements;\n\t\t\tconst projR = cameraR.projectionMatrix.elements;\n\n\t\t\t// VR systems will have identical far and near planes, and\n\t\t\t// most likely identical top and bottom frustum extents.\n\t\t\t// Use the left camera for these values.\n\t\t\tconst near = projL[ 14 ] / ( projL[ 10 ] - 1 );\n\t\t\tconst far = projL[ 14 ] / ( projL[ 10 ] + 1 );\n\t\t\tconst topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];\n\t\t\tconst bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];\n\n\t\t\tconst leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];\n\t\t\tconst rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];\n\t\t\tconst left = near * leftFov;\n\t\t\tconst right = near * rightFov;\n\n\t\t\t// Calculate the new camera's position offset from the\n\t\t\t// left camera. xOffset should be roughly half `ipd`.\n\t\t\tconst zOffset = ipd / ( - leftFov + rightFov );\n\t\t\tconst xOffset = zOffset * - leftFov;\n\n\t\t\t// TODO: Better way to apply this offset?\n\t\t\tcameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.translateX( xOffset );\n\t\t\tcamera.translateZ( zOffset );\n\t\t\tcamera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t\t// Find the union of the frustum values of the cameras and scale\n\t\t\t// the values so that the near plane's position does not change in world space,\n\t\t\t// although must now be relative to the new union camera.\n\t\t\tconst near2 = near + zOffset;\n\t\t\tconst far2 = far + zOffset;\n\t\t\tconst left2 = left - xOffset;\n\t\t\tconst right2 = right + ( ipd - xOffset );\n\t\t\tconst top2 = topFov * far / far2 * near2;\n\t\t\tconst bottom2 = bottomFov * far / far2 * near2;\n\n\t\t\tcamera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );\n\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\n\t\t}\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.copy( camera.matrixWorld ).invert();\n\n\t\t}\n\n\t\tthis.updateCamera = function ( camera ) {\n\n\t\t\tif ( session === null ) return;\n\n\t\t\tif ( depthSensing.texture !== null ) {\n\n\t\t\t\tcamera.near = depthSensing.depthNear;\n\t\t\t\tcamera.far = depthSensing.depthFar;\n\n\t\t\t}\n\n\t\t\tcameraXR.near = cameraR.near = cameraL.near = camera.near;\n\t\t\tcameraXR.far = cameraR.far = cameraL.far = camera.far;\n\n\t\t\tif ( _currentDepthNear !== cameraXR.near || _currentDepthFar !== cameraXR.far ) {\n\n\t\t\t\t// Note that the new renderState won't apply until the next frame. See #18320\n\n\t\t\t\tsession.updateRenderState( {\n\t\t\t\t\tdepthNear: cameraXR.near,\n\t\t\t\t\tdepthFar: cameraXR.far\n\t\t\t\t} );\n\n\t\t\t\t_currentDepthNear = cameraXR.near;\n\t\t\t\t_currentDepthFar = cameraXR.far;\n\n\t\t\t\tcameraL.near = _currentDepthNear;\n\t\t\t\tcameraL.far = _currentDepthFar;\n\t\t\t\tcameraR.near = _currentDepthNear;\n\t\t\t\tcameraR.far = _currentDepthFar;\n\n\t\t\t\tcameraL.updateProjectionMatrix();\n\t\t\t\tcameraR.updateProjectionMatrix();\n\t\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t\tconst parent = camera.parent;\n\t\t\tconst cameras = cameraXR.cameras;\n\n\t\t\tupdateCamera( cameraXR, parent );\n\n\t\t\tfor ( let i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t}\n\n\t\t\t// update projection matrix for proper view frustum culling\n\n\t\t\tif ( cameras.length === 2 ) {\n\n\t\t\t\tsetProjectionFromUnion( cameraXR, cameraL, cameraR );\n\n\t\t\t} else {\n\n\t\t\t\t// assume single camera setup (AR)\n\n\t\t\t\tcameraXR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t}\n\n\t\t\t// update user camera and its children\n\n\t\t\tupdateUserCamera( camera, cameraXR, parent );\n\n\t\t};\n\n\t\tfunction updateUserCamera( camera, cameraXR, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrix.copy( cameraXR.matrixWorld );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrix.copy( parent.matrixWorld );\n\t\t\t\tcamera.matrix.invert();\n\t\t\t\tcamera.matrix.multiply( cameraXR.matrixWorld );\n\n\t\t\t}\n\n\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\tcamera.updateMatrixWorld( true );\n\n\t\t\tcamera.projectionMatrix.copy( cameraXR.projectionMatrix );\n\t\t\tcamera.projectionMatrixInverse.copy( cameraXR.projectionMatrixInverse );\n\n\t\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\t\tcamera.fov = RAD2DEG * 2 * Math.atan( 1 / camera.projectionMatrix.elements[ 5 ] );\n\t\t\t\tcamera.zoom = 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.getCamera = function () {\n\n\t\t\treturn cameraXR;\n\n\t\t};\n\n\t\tthis.getFoveation = function () {\n\n\t\t\tif ( glProjLayer === null && glBaseLayer === null ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\n\t\t\treturn foveation;\n\n\t\t};\n\n\t\tthis.setFoveation = function ( value ) {\n\n\t\t\t// 0 = no foveation = full resolution\n\t\t\t// 1 = maximum foveation = the edges render at lower resolution\n\n\t\t\tfoveation = value;\n\n\t\t\tif ( glProjLayer !== null ) {\n\n\t\t\t\tglProjLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t\tif ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) {\n\n\t\t\t\tglBaseLayer.fixedFoveation = value;\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.hasDepthSensing = function () {\n\n\t\t\treturn depthSensing.texture !== null;\n\n\t\t};\n\n\t\tthis.getDepthSensingMesh = function () {\n\n\t\t\treturn depthSensing.getMesh( cameraXR );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getViewerPose( customReferenceSpace || referenceSpace );\n\t\t\txrFrame = frame;\n\n\t\t\tif ( pose !== null ) {\n\n\t\t\t\tconst views = pose.views;\n\n\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\trenderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );\n\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t\tlet cameraXRNeedsUpdate = false;\n\n\t\t\t\t// check if it's necessary to rebuild cameraXR's camera list\n\n\t\t\t\tif ( views.length !== cameraXR.cameras.length ) {\n\n\t\t\t\t\tcameraXR.cameras.length = 0;\n\t\t\t\t\tcameraXRNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < views.length; i ++ ) {\n\n\t\t\t\t\tconst view = views[ i ];\n\n\t\t\t\t\tlet viewport = null;\n\n\t\t\t\t\tif ( glBaseLayer !== null ) {\n\n\t\t\t\t\t\tviewport = glBaseLayer.getViewport( view );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst glSubImage = glBinding.getViewSubImage( glProjLayer, view );\n\t\t\t\t\t\tviewport = glSubImage.viewport;\n\n\t\t\t\t\t\t// For side-by-side projection, we only produce a single texture for both eyes.\n\t\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\t\trenderer.setRenderTargetTextures(\n\t\t\t\t\t\t\t\tnewRenderTarget,\n\t\t\t\t\t\t\t\tglSubImage.colorTexture,\n\t\t\t\t\t\t\t\tglProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );\n\n\t\t\t\t\t\t\trenderer.setRenderTarget( newRenderTarget );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet camera = cameras[ i ];\n\n\t\t\t\t\tif ( camera === undefined ) {\n\n\t\t\t\t\t\tcamera = new PerspectiveCamera();\n\t\t\t\t\t\tcamera.layers.enable( i );\n\t\t\t\t\t\tcamera.viewport = new Vector4();\n\t\t\t\t\t\tcameras[ i ] = camera;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcamera.matrix.fromArray( view.transform.matrix );\n\t\t\t\t\tcamera.matrix.decompose( camera.position, camera.quaternion, camera.scale );\n\t\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\t\tcamera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();\n\t\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\t\tcameraXR.matrix.copy( camera.matrix );\n\t\t\t\t\t\tcameraXR.matrix.decompose( cameraXR.position, cameraXR.quaternion, cameraXR.scale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( cameraXRNeedsUpdate === true ) {\n\n\t\t\t\t\t\tcameraXR.cameras.push( camera );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tconst enabledFeatures = session.enabledFeatures;\n\n\t\t\t\tif ( enabledFeatures && enabledFeatures.includes( 'depth-sensing' ) ) {\n\n\t\t\t\t\tconst depthData = glBinding.getDepthInformation( views[ 0 ] );\n\n\t\t\t\t\tif ( depthData && depthData.isValid && depthData.texture ) {\n\n\t\t\t\t\t\tdepthSensing.init( renderer, depthData, session.renderState );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tfor ( let i = 0; i < controllers.length; i ++ ) {\n\n\t\t\t\tconst inputSource = controllerInputSources[ i ];\n\t\t\t\tconst controller = controllers[ i ];\n\n\t\t\t\tif ( inputSource !== null && controller !== undefined ) {\n\n\t\t\t\t\tcontroller.update( inputSource, frame, customReferenceSpace || referenceSpace );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );\n\n\t\t\tif ( frame.detectedPlanes ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'planesdetected', data: frame } );\n\n\t\t\t}\n\n\t\t\txrFrame = null;\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\tthis.dispose = function () {};\n\n\t}\n\n}\n\nconst _e1 = /*@__PURE__*/ new Euler();\nconst _m1 = /*@__PURE__*/ new Matrix4();\n\nfunction WebGLMaterials( renderer, properties ) {\n\n\tfunction refreshTransformUniform( map, uniform ) {\n\n\t\tif ( map.matrixAutoUpdate === true ) {\n\n\t\t\tmap.updateMatrix();\n\n\t\t}\n\n\t\tuniform.value.copy( map.matrix );\n\n\t}\n\n\tfunction refreshFogUniforms( uniforms, fog ) {\n\n\t\tfog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) );\n\n\t\tif ( fog.isFog ) {\n\n\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t}\n\n\t}\n\n\tfunction refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {\n\n\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshToonMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsToon( uniforms, material );\n\n\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\trefreshUniformsPhysical( uniforms, material, transmissionRenderTarget );\n\n\t\t\t}\n\n\t\t} else if ( material.isMeshMatcapMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsMatcap( uniforms, material );\n\n\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\t\t\trefreshUniformsDistance( uniforms, material );\n\n\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\trefreshUniformsCommon( uniforms, material );\n\n\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\trefreshUniformsLine( uniforms, material );\n\n\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\trefreshUniformsDash( uniforms, material );\n\n\t\t\t}\n\n\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\trefreshUniformsPoints( uniforms, material, pixelRatio, height );\n\n\t\t} else if ( material.isSpriteMaterial ) {\n\n\t\t\trefreshUniformsSprites( uniforms, material );\n\n\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\tuniforms.color.value.copy( material.color );\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t} else if ( material.isShaderMaterial ) {\n\n\t\t\tmaterial.uniformsNeedUpdate = false; // #15581\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.color ) {\n\n\t\t\tuniforms.diffuse.value.copy( material.color );\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t}\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\n\t\t\trefreshTransformUniform( material.bumpMap, uniforms.bumpMapTransform );\n\n\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.normalMap ) {\n\n\t\t\tuniforms.normalMap.value = material.normalMap;\n\n\t\t\trefreshTransformUniform( material.normalMap, uniforms.normalMapTransform );\n\n\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\n\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\tuniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.displacementMap ) {\n\n\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\n\t\t\trefreshTransformUniform( material.displacementMap, uniforms.displacementMapTransform );\n\n\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t}\n\n\t\tif ( material.emissiveMap ) {\n\n\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\trefreshTransformUniform( material.emissiveMap, uniforms.emissiveMapTransform );\n\n\t\t}\n\n\t\tif ( material.specularMap ) {\n\n\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t\trefreshTransformUniform( material.specularMap, uniforms.specularMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t\tconst materialProperties = properties.get( material );\n\n\t\tconst envMap = materialProperties.envMap;\n\t\tconst envMapRotation = materialProperties.envMapRotation;\n\n\t\tif ( envMap ) {\n\n\t\t\tuniforms.envMap.value = envMap;\n\n\t\t\t_e1.copy( envMapRotation );\n\n\t\t\t// accommodate left-handed frame\n\t\t\t_e1.x *= - 1; _e1.y *= - 1; _e1.z *= - 1;\n\n\t\t\tif ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) {\n\n\t\t\t\t// environment maps which are not cube render targets or PMREMs follow a different convention\n\t\t\t\t_e1.y *= - 1;\n\t\t\t\t_e1.z *= - 1;\n\n\t\t\t}\n\n\t\t\tuniforms.envMapRotation.value.setFromMatrix4( _m1.makeRotationFromEuler( _e1 ) );\n\n\t\t\tuniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\tuniforms.ior.value = material.ior;\n\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t}\n\n\t\tif ( material.lightMap ) {\n\n\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t\trefreshTransformUniform( material.lightMap, uniforms.lightMapTransform );\n\n\t\t}\n\n\t\tif ( material.aoMap ) {\n\n\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t\trefreshTransformUniform( material.aoMap, uniforms.aoMapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\tuniforms.dashSize.value = material.dashSize;\n\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\tuniforms.scale.value = material.scale;\n\n\t}\n\n\tfunction refreshUniformsPoints( uniforms, material, pixelRatio, height ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.size.value = material.size * pixelRatio;\n\t\tuniforms.scale.value = height * 0.5;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.uvTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsSprites( uniforms, material ) {\n\n\t\tuniforms.diffuse.value.copy( material.color );\n\t\tuniforms.opacity.value = material.opacity;\n\t\tuniforms.rotation.value = material.rotation;\n\n\t\tif ( material.map ) {\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\trefreshTransformUniform( material.map, uniforms.mapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaMap ) {\n\n\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\trefreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );\n\n\t\t}\n\n\t\tif ( material.alphaTest > 0 ) {\n\n\t\t\tuniforms.alphaTest.value = material.alphaTest;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\tuniforms.specular.value.copy( material.specular );\n\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t}\n\n\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\tif ( material.gradientMap ) {\n\n\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\tuniforms.metalness.value = material.metalness;\n\n\t\tif ( material.metalnessMap ) {\n\n\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t\trefreshTransformUniform( material.metalnessMap, uniforms.metalnessMapTransform );\n\n\t\t}\n\n\t\tuniforms.roughness.value = material.roughness;\n\n\t\tif ( material.roughnessMap ) {\n\n\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t\trefreshTransformUniform( material.roughnessMap, uniforms.roughnessMapTransform );\n\n\t\t}\n\n\t\tif ( material.envMap ) {\n\n\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\n\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {\n\n\t\tuniforms.ior.value = material.ior; // also part of uniforms common\n\n\t\tif ( material.sheen > 0 ) {\n\n\t\t\tuniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );\n\n\t\t\tuniforms.sheenRoughness.value = material.sheenRoughness;\n\n\t\t\tif ( material.sheenColorMap ) {\n\n\t\t\t\tuniforms.sheenColorMap.value = material.sheenColorMap;\n\n\t\t\t\trefreshTransformUniform( material.sheenColorMap, uniforms.sheenColorMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\t\tuniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;\n\n\t\t\t\trefreshTransformUniform( material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.clearcoat > 0 ) {\n\n\t\t\tuniforms.clearcoat.value = material.clearcoat;\n\t\t\tuniforms.clearcoatRoughness.value = material.clearcoatRoughness;\n\n\t\t\tif ( material.clearcoatMap ) {\n\n\t\t\t\tuniforms.clearcoatMap.value = material.clearcoatMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatMap, uniforms.clearcoatMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\t\tuniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\t\tuniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;\n\n\t\t\t\trefreshTransformUniform( material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform );\n\n\t\t\t\tuniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tuniforms.clearcoatNormalScale.value.negate();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.dispersion > 0 ) {\n\n\t\t\tuniforms.dispersion.value = material.dispersion;\n\n\t\t}\n\n\t\tif ( material.iridescence > 0 ) {\n\n\t\t\tuniforms.iridescence.value = material.iridescence;\n\t\t\tuniforms.iridescenceIOR.value = material.iridescenceIOR;\n\t\t\tuniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];\n\t\t\tuniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];\n\n\t\t\tif ( material.iridescenceMap ) {\n\n\t\t\t\tuniforms.iridescenceMap.value = material.iridescenceMap;\n\n\t\t\t\trefreshTransformUniform( material.iridescenceMap, uniforms.iridescenceMapTransform );\n\n\t\t\t}\n\n\t\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\t\tuniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap;\n\n\t\t\t\trefreshTransformUniform( material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( material.transmission > 0 ) {\n\n\t\t\tuniforms.transmission.value = material.transmission;\n\t\t\tuniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;\n\t\t\tuniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );\n\n\t\t\tif ( material.transmissionMap ) {\n\n\t\t\t\tuniforms.transmissionMap.value = material.transmissionMap;\n\n\t\t\t\trefreshTransformUniform( material.transmissionMap, uniforms.transmissionMapTransform );\n\n\t\t\t}\n\n\t\t\tuniforms.thickness.value = material.thickness;\n\n\t\t\tif ( material.thicknessMap ) {\n\n\t\t\t\tuniforms.thicknessMap.value = material.thicknessMap;\n\n\t\t\t\trefreshTransformUniform( material.thicknessMap, uniforms.thicknessMapTransform );\n\n\t\t\t}\n\n\t\t\tuniforms.attenuationDistance.value = material.attenuationDistance;\n\t\t\tuniforms.attenuationColor.value.copy( material.attenuationColor );\n\n\t\t}\n\n\t\tif ( material.anisotropy > 0 ) {\n\n\t\t\tuniforms.anisotropyVector.value.set( material.anisotropy * Math.cos( material.anisotropyRotation ), material.anisotropy * Math.sin( material.anisotropyRotation ) );\n\n\t\t\tif ( material.anisotropyMap ) {\n\n\t\t\t\tuniforms.anisotropyMap.value = material.anisotropyMap;\n\n\t\t\t\trefreshTransformUniform( material.anisotropyMap, uniforms.anisotropyMapTransform );\n\n\t\t\t}\n\n\t\t}\n\n\t\tuniforms.specularIntensity.value = material.specularIntensity;\n\t\tuniforms.specularColor.value.copy( material.specularColor );\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tuniforms.specularColorMap.value = material.specularColorMap;\n\n\t\t\trefreshTransformUniform( material.specularColorMap, uniforms.specularColorMapTransform );\n\n\t\t}\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tuniforms.specularIntensityMap.value = material.specularIntensityMap;\n\n\t\t\trefreshTransformUniform( material.specularIntensityMap, uniforms.specularIntensityMapTransform );\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsMatcap( uniforms, material ) {\n\n\t\tif ( material.matcap ) {\n\n\t\t\tuniforms.matcap.value = material.matcap;\n\n\t\t}\n\n\t}\n\n\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\tconst light = properties.get( material ).light;\n\n\t\tuniforms.referencePosition.value.setFromMatrixPosition( light.matrixWorld );\n\t\tuniforms.nearDistance.value = light.shadow.camera.near;\n\t\tuniforms.farDistance.value = light.shadow.camera.far;\n\n\t}\n\n\treturn {\n\t\trefreshFogUniforms: refreshFogUniforms,\n\t\trefreshMaterialUniforms: refreshMaterialUniforms\n\t};\n\n}\n\nfunction WebGLUniformsGroups( gl, info, capabilities, state ) {\n\n\tlet buffers = {};\n\tlet updateList = {};\n\tlet allocatedBindingPoints = [];\n\n\tconst maxBindingPoints = gl.getParameter( gl.MAX_UNIFORM_BUFFER_BINDINGS ); // binding points are global whereas block indices are per shader program\n\n\tfunction bind( uniformsGroup, program ) {\n\n\t\tconst webglProgram = program.program;\n\t\tstate.uniformBlockBinding( uniformsGroup, webglProgram );\n\n\t}\n\n\tfunction update( uniformsGroup, program ) {\n\n\t\tlet buffer = buffers[ uniformsGroup.id ];\n\n\t\tif ( buffer === undefined ) {\n\n\t\t\tprepareUniformsGroup( uniformsGroup );\n\n\t\t\tbuffer = createBuffer( uniformsGroup );\n\t\t\tbuffers[ uniformsGroup.id ] = buffer;\n\n\t\t\tuniformsGroup.addEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\t}\n\n\t\t// ensure to update the binding points/block indices mapping for this program\n\n\t\tconst webglProgram = program.program;\n\t\tstate.updateUBOMapping( uniformsGroup, webglProgram );\n\n\t\t// update UBO once per frame\n\n\t\tconst frame = info.render.frame;\n\n\t\tif ( updateList[ uniformsGroup.id ] !== frame ) {\n\n\t\t\tupdateBufferData( uniformsGroup );\n\n\t\t\tupdateList[ uniformsGroup.id ] = frame;\n\n\t\t}\n\n\t}\n\n\tfunction createBuffer( uniformsGroup ) {\n\n\t\t// the setup of an UBO is independent of a particular shader program but global\n\n\t\tconst bindingPointIndex = allocateBindingPointIndex();\n\t\tuniformsGroup.__bindingPointIndex = bindingPointIndex;\n\n\t\tconst buffer = gl.createBuffer();\n\t\tconst size = uniformsGroup.__size;\n\t\tconst usage = uniformsGroup.usage;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\t\tgl.bufferData( gl.UNIFORM_BUFFER, size, usage );\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\t\tgl.bindBufferBase( gl.UNIFORM_BUFFER, bindingPointIndex, buffer );\n\n\t\treturn buffer;\n\n\t}\n\n\tfunction allocateBindingPointIndex() {\n\n\t\tfor ( let i = 0; i < maxBindingPoints; i ++ ) {\n\n\t\t\tif ( allocatedBindingPoints.indexOf( i ) === - 1 ) {\n\n\t\t\t\tallocatedBindingPoints.push( i );\n\t\t\t\treturn i;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconsole.error( 'THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.' );\n\n\t\treturn 0;\n\n\t}\n\n\tfunction updateBufferData( uniformsGroup ) {\n\n\t\tconst buffer = buffers[ uniformsGroup.id ];\n\t\tconst uniforms = uniformsGroup.uniforms;\n\t\tconst cache = uniformsGroup.__cache;\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, buffer );\n\n\t\tfor ( let i = 0, il = uniforms.length; i < il; i ++ ) {\n\n\t\t\tconst uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];\n\n\t\t\tfor ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uniform = uniformArray[ j ];\n\n\t\t\t\tif ( hasUniformChanged( uniform, i, j, cache ) === true ) {\n\n\t\t\t\t\tconst offset = uniform.__offset;\n\n\t\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\t\tlet arrayOffset = 0;\n\n\t\t\t\t\tfor ( let k = 0; k < values.length; k ++ ) {\n\n\t\t\t\t\t\tconst value = values[ k ];\n\n\t\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\t\t// TODO add integer and struct support\n\t\t\t\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\t\t\t\tuniform.__data[ 0 ] = value;\n\t\t\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data );\n\n\t\t\t\t\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t\t\t\t\t// manually converting 3x3 to 3x4\n\n\t\t\t\t\t\t\tuniform.__data[ 0 ] = value.elements[ 0 ];\n\t\t\t\t\t\t\tuniform.__data[ 1 ] = value.elements[ 1 ];\n\t\t\t\t\t\t\tuniform.__data[ 2 ] = value.elements[ 2 ];\n\t\t\t\t\t\t\tuniform.__data[ 3 ] = 0;\n\t\t\t\t\t\t\tuniform.__data[ 4 ] = value.elements[ 3 ];\n\t\t\t\t\t\t\tuniform.__data[ 5 ] = value.elements[ 4 ];\n\t\t\t\t\t\t\tuniform.__data[ 6 ] = value.elements[ 5 ];\n\t\t\t\t\t\t\tuniform.__data[ 7 ] = 0;\n\t\t\t\t\t\t\tuniform.__data[ 8 ] = value.elements[ 6 ];\n\t\t\t\t\t\t\tuniform.__data[ 9 ] = value.elements[ 7 ];\n\t\t\t\t\t\t\tuniform.__data[ 10 ] = value.elements[ 8 ];\n\t\t\t\t\t\t\tuniform.__data[ 11 ] = 0;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvalue.toArray( uniform.__data, arrayOffset );\n\n\t\t\t\t\t\t\tarrayOffset += info.storage / Float32Array.BYTES_PER_ELEMENT;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tgl.bindBuffer( gl.UNIFORM_BUFFER, null );\n\n\t}\n\n\tfunction hasUniformChanged( uniform, index, indexArray, cache ) {\n\n\t\tconst value = uniform.value;\n\t\tconst indexString = index + '_' + indexArray;\n\n\t\tif ( cache[ indexString ] === undefined ) {\n\n\t\t\t// cache entry does not exist so far\n\n\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\tcache[ indexString ] = value;\n\n\t\t\t} else {\n\n\t\t\t\tcache[ indexString ] = value.clone();\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\tconst cachedObject = cache[ indexString ];\n\n\t\t\t// compare current value with cached entry\n\n\t\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t\tif ( cachedObject !== value ) {\n\n\t\t\t\t\tcache[ indexString ] = value;\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( cachedObject.equals( value ) === false ) {\n\n\t\t\t\t\tcachedObject.copy( value );\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\tfunction prepareUniformsGroup( uniformsGroup ) {\n\n\t\t// determine total buffer size according to the STD140 layout\n\t\t// Hint: STD140 is the only supported layout in WebGL 2\n\n\t\tconst uniforms = uniformsGroup.uniforms;\n\n\t\tlet offset = 0; // global buffer offset in bytes\n\t\tconst chunkSize = 16; // size of a chunk in bytes\n\n\t\tfor ( let i = 0, l = uniforms.length; i < l; i ++ ) {\n\n\t\t\tconst uniformArray = Array.isArray( uniforms[ i ] ) ? uniforms[ i ] : [ uniforms[ i ] ];\n\n\t\t\tfor ( let j = 0, jl = uniformArray.length; j < jl; j ++ ) {\n\n\t\t\t\tconst uniform = uniformArray[ j ];\n\n\t\t\t\tconst values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];\n\n\t\t\t\tfor ( let k = 0, kl = values.length; k < kl; k ++ ) {\n\n\t\t\t\t\tconst value = values[ k ];\n\n\t\t\t\t\tconst info = getUniformSize( value );\n\n\t\t\t\t\tconst chunkOffset = offset % chunkSize; // offset in the current chunk\n\t\t\t\t\tconst chunkPadding = chunkOffset % info.boundary; // required padding to match boundary\n\t\t\t\t\tconst chunkStart = chunkOffset + chunkPadding; // the start position in the current chunk for the data\n\n\t\t\t\t\toffset += chunkPadding;\n\n\t\t\t\t\t// Check for chunk overflow\n\t\t\t\t\tif ( chunkStart !== 0 && ( chunkSize - chunkStart ) < info.storage ) {\n\n\t\t\t\t\t\t// Add padding and adjust offset\n\t\t\t\t\t\toffset += ( chunkSize - chunkStart );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following two properties will be used for partial buffer updates\n\t\t\t\t\tuniform.__data = new Float32Array( info.storage / Float32Array.BYTES_PER_ELEMENT );\n\t\t\t\t\tuniform.__offset = offset;\n\n\t\t\t\t\t// Update the global offset\n\t\t\t\t\toffset += info.storage;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// ensure correct final padding\n\n\t\tconst chunkOffset = offset % chunkSize;\n\n\t\tif ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset );\n\n\t\t//\n\n\t\tuniformsGroup.__size = offset;\n\t\tuniformsGroup.__cache = {};\n\n\t\treturn this;\n\n\t}\n\n\tfunction getUniformSize( value ) {\n\n\t\tconst info = {\n\t\t\tboundary: 0, // bytes\n\t\t\tstorage: 0 // bytes\n\t\t};\n\n\t\t// determine sizes according to STD140\n\n\t\tif ( typeof value === 'number' || typeof value === 'boolean' ) {\n\n\t\t\t// float/int/bool\n\n\t\t\tinfo.boundary = 4;\n\t\t\tinfo.storage = 4;\n\n\t\t} else if ( value.isVector2 ) {\n\n\t\t\t// vec2\n\n\t\t\tinfo.boundary = 8;\n\t\t\tinfo.storage = 8;\n\n\t\t} else if ( value.isVector3 || value.isColor ) {\n\n\t\t\t// vec3\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 12; // evil: vec3 must start on a 16-byte boundary but it only consumes 12 bytes\n\n\t\t} else if ( value.isVector4 ) {\n\n\t\t\t// vec4\n\n\t\t\tinfo.boundary = 16;\n\t\t\tinfo.storage = 16;\n\n\t\t} else if ( value.isMatrix3 ) {\n\n\t\t\t// mat3 (in STD140 a 3x3 matrix is represented as 3x4)\n\n\t\t\tinfo.boundary = 48;\n\t\t\tinfo.storage = 48;\n\n\t\t} else if ( value.isMatrix4 ) {\n\n\t\t\t// mat4\n\n\t\t\tinfo.boundary = 64;\n\t\t\tinfo.storage = 64;\n\n\t\t} else if ( value.isTexture ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.' );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: Unsupported uniform value type.', value );\n\n\t\t}\n\n\t\treturn info;\n\n\t}\n\n\tfunction onUniformsGroupsDispose( event ) {\n\n\t\tconst uniformsGroup = event.target;\n\n\t\tuniformsGroup.removeEventListener( 'dispose', onUniformsGroupsDispose );\n\n\t\tconst index = allocatedBindingPoints.indexOf( uniformsGroup.__bindingPointIndex );\n\t\tallocatedBindingPoints.splice( index, 1 );\n\n\t\tgl.deleteBuffer( buffers[ uniformsGroup.id ] );\n\n\t\tdelete buffers[ uniformsGroup.id ];\n\t\tdelete updateList[ uniformsGroup.id ];\n\n\t}\n\n\tfunction dispose() {\n\n\t\tfor ( const id in buffers ) {\n\n\t\t\tgl.deleteBuffer( buffers[ id ] );\n\n\t\t}\n\n\t\tallocatedBindingPoints = [];\n\t\tbuffers = {};\n\t\tupdateList = {};\n\n\t}\n\n\treturn {\n\n\t\tbind: bind,\n\t\tupdate: update,\n\n\t\tdispose: dispose\n\n\t};\n\n}\n\nclass WebGLRenderer {\n\n\tconstructor( parameters = {} ) {\n\n\t\tconst {\n\t\t\tcanvas = createCanvasElement(),\n\t\t\tcontext = null,\n\t\t\tdepth = true,\n\t\t\tstencil = false,\n\t\t\talpha = false,\n\t\t\tantialias = false,\n\t\t\tpremultipliedAlpha = true,\n\t\t\tpreserveDrawingBuffer = false,\n\t\t\tpowerPreference = 'default',\n\t\t\tfailIfMajorPerformanceCaveat = false,\n\t\t} = parameters;\n\n\t\tthis.isWebGLRenderer = true;\n\n\t\tlet _alpha;\n\n\t\tif ( context !== null ) {\n\n\t\t\tif ( typeof WebGLRenderingContext !== 'undefined' && context instanceof WebGLRenderingContext ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLRenderer: WebGL 1 is not supported since r163.' );\n\n\t\t\t}\n\n\t\t\t_alpha = context.getContextAttributes().alpha;\n\n\t\t} else {\n\n\t\t\t_alpha = alpha;\n\n\t\t}\n\n\t\tconst uintClearColor = new Uint32Array( 4 );\n\t\tconst intClearColor = new Int32Array( 4 );\n\n\t\tlet currentRenderList = null;\n\t\tlet currentRenderState = null;\n\n\t\t// render() can be called from within a callback triggered by another render.\n\t\t// We track this so that the nested render call gets its list and state isolated from the parent render call.\n\n\t\tconst renderListStack = [];\n\t\tconst renderStateStack = [];\n\n\t\t// public properties\n\n\t\tthis.domElement = canvas;\n\n\t\t// Debug configuration container\n\t\tthis.debug = {\n\n\t\t\t/**\n\t\t\t * Enables error checking and reporting when shader programs are being compiled\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tcheckShaderErrors: true,\n\t\t\t/**\n\t\t\t * Callback for custom error reporting.\n\t\t\t * @type {?Function}\n\t\t\t */\n\t\t\tonShaderError: null\n\t\t};\n\n\t\t// clearing\n\n\t\tthis.autoClear = true;\n\t\tthis.autoClearColor = true;\n\t\tthis.autoClearDepth = true;\n\t\tthis.autoClearStencil = true;\n\n\t\t// scene graph\n\n\t\tthis.sortObjects = true;\n\n\t\t// user-defined clipping\n\n\t\tthis.clippingPlanes = [];\n\t\tthis.localClippingEnabled = false;\n\n\t\t// physically based shading\n\n\t\tthis._outputColorSpace = SRGBColorSpace;\n\n\t\t// tone mapping\n\n\t\tthis.toneMapping = NoToneMapping;\n\t\tthis.toneMappingExposure = 1.0;\n\n\t\t// internal properties\n\n\t\tconst _this = this;\n\n\t\tlet _isContextLost = false;\n\n\t\t// internal state cache\n\n\t\tlet _currentActiveCubeFace = 0;\n\t\tlet _currentActiveMipmapLevel = 0;\n\t\tlet _currentRenderTarget = null;\n\t\tlet _currentMaterialId = - 1;\n\n\t\tlet _currentCamera = null;\n\n\t\tconst _currentViewport = new Vector4();\n\t\tconst _currentScissor = new Vector4();\n\t\tlet _currentScissorTest = null;\n\n\t\tconst _currentClearColor = new Color( 0x000000 );\n\t\tlet _currentClearAlpha = 0;\n\n\t\t//\n\n\t\tlet _width = canvas.width;\n\t\tlet _height = canvas.height;\n\n\t\tlet _pixelRatio = 1;\n\t\tlet _opaqueSort = null;\n\t\tlet _transparentSort = null;\n\n\t\tconst _viewport = new Vector4( 0, 0, _width, _height );\n\t\tconst _scissor = new Vector4( 0, 0, _width, _height );\n\t\tlet _scissorTest = false;\n\n\t\t// frustum\n\n\t\tconst _frustum = new Frustum();\n\n\t\t// clipping\n\n\t\tlet _clippingEnabled = false;\n\t\tlet _localClippingEnabled = false;\n\n\t\t// camera matrices cache\n\n\t\tconst _projScreenMatrix = new Matrix4();\n\n\t\tconst _vector3 = new Vector3();\n\n\t\tconst _vector4 = new Vector4();\n\n\t\tconst _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };\n\n\t\tlet _renderBackground = false;\n\n\t\tfunction getTargetPixelRatio() {\n\n\t\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t\t}\n\n\t\t// initialize\n\n\t\tlet _gl = context;\n\n\t\tfunction getContext( contextName, contextAttributes ) {\n\n\t\t\treturn canvas.getContext( contextName, contextAttributes );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\tconst contextAttributes = {\n\t\t\t\talpha: true,\n\t\t\t\tdepth,\n\t\t\t\tstencil,\n\t\t\t\tantialias,\n\t\t\t\tpremultipliedAlpha,\n\t\t\t\tpreserveDrawingBuffer,\n\t\t\t\tpowerPreference,\n\t\t\t\tfailIfMajorPerformanceCaveat,\n\t\t\t};\n\n\t\t\t// OffscreenCanvas does not have setAttribute, see #22811\n\t\t\tif ( 'setAttribute' in canvas ) canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );\n\n\t\t\t// event listeners must be registered before WebGL context is created, see #12753\n\t\t\tcanvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\tcanvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t\tcanvas.addEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tconst contextName = 'webgl2';\n\n\t\t\t\t_gl = getContext( contextName, contextAttributes );\n\n\t\t\t\tif ( _gl === null ) {\n\n\t\t\t\t\tif ( getContext( contextName ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\t\t\tthrow error;\n\n\t\t}\n\n\t\tlet extensions, capabilities, state, info;\n\t\tlet properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;\n\t\tlet programCache, materials, renderLists, renderStates, clipping, shadowMap;\n\n\t\tlet background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\n\t\tlet utils, bindingStates, uniformsGroups;\n\n\t\tfunction initGLContext() {\n\n\t\t\textensions = new WebGLExtensions( _gl );\n\t\t\textensions.init();\n\n\t\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters, utils );\n\n\t\t\tstate = new WebGLState( _gl );\n\n\t\t\tinfo = new WebGLInfo( _gl );\n\t\t\tproperties = new WebGLProperties();\n\t\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\t\tcubemaps = new WebGLCubeMaps( _this );\n\t\t\tcubeuvmaps = new WebGLCubeUVMaps( _this );\n\t\t\tattributes = new WebGLAttributes( _gl );\n\t\t\tbindingStates = new WebGLBindingStates( _gl, attributes );\n\t\t\tgeometries = new WebGLGeometries( _gl, attributes, info, bindingStates );\n\t\t\tobjects = new WebGLObjects( _gl, geometries, attributes, info );\n\t\t\tmorphtargets = new WebGLMorphtargets( _gl, capabilities, textures );\n\t\t\tclipping = new WebGLClipping( properties );\n\t\t\tprogramCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );\n\t\t\tmaterials = new WebGLMaterials( _this, properties );\n\t\t\trenderLists = new WebGLRenderLists();\n\t\t\trenderStates = new WebGLRenderStates( extensions );\n\t\t\tbackground = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );\n\t\t\tshadowMap = new WebGLShadowMap( _this, objects, capabilities );\n\t\t\tuniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );\n\n\t\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );\n\t\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );\n\n\t\t\tinfo.programs = programCache.programs;\n\n\t\t\t_this.capabilities = capabilities;\n\t\t\t_this.extensions = extensions;\n\t\t\t_this.properties = properties;\n\t\t\t_this.renderLists = renderLists;\n\t\t\t_this.shadowMap = shadowMap;\n\t\t\t_this.state = state;\n\t\t\t_this.info = info;\n\n\t\t}\n\n\t\tinitGLContext();\n\n\t\t// xr\n\n\t\tconst xr = new WebXRManager( _this, _gl );\n\n\t\tthis.xr = xr;\n\n\t\t// API\n\n\t\tthis.getContext = function () {\n\n\t\t\treturn _gl;\n\n\t\t};\n\n\t\tthis.getContextAttributes = function () {\n\n\t\t\treturn _gl.getContextAttributes();\n\n\t\t};\n\n\t\tthis.forceContextLoss = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.loseContext();\n\n\t\t};\n\n\t\tthis.forceContextRestore = function () {\n\n\t\t\tconst extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.restoreContext();\n\n\t\t};\n\n\t\tthis.getPixelRatio = function () {\n\n\t\t\treturn _pixelRatio;\n\n\t\t};\n\n\t\tthis.setPixelRatio = function ( value ) {\n\n\t\t\tif ( value === undefined ) return;\n\n\t\t\t_pixelRatio = value;\n\n\t\t\tthis.setSize( _width, _height, false );\n\n\t\t};\n\n\t\tthis.getSize = function ( target ) {\n\n\t\t\treturn target.set( _width, _height );\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height, updateStyle = true ) {\n\n\t\t\tif ( xr.isPresenting ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\tcanvas.width = Math.floor( width * _pixelRatio );\n\t\t\tcanvas.height = Math.floor( height * _pixelRatio );\n\n\t\t\tif ( updateStyle === true ) {\n\n\t\t\t\tcanvas.style.width = width + 'px';\n\t\t\t\tcanvas.style.height = height + 'px';\n\n\t\t\t}\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getDrawingBufferSize = function ( target ) {\n\n\t\t\treturn target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();\n\n\t\t};\n\n\t\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_pixelRatio = pixelRatio;\n\n\t\t\tcanvas.width = Math.floor( width * pixelRatio );\n\t\t\tcanvas.height = Math.floor( height * pixelRatio );\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getCurrentViewport = function ( target ) {\n\n\t\t\treturn target.copy( _currentViewport );\n\n\t\t};\n\n\t\tthis.getViewport = function ( target ) {\n\n\t\t\treturn target.copy( _viewport );\n\n\t\t};\n\n\t\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_viewport.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_viewport.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).round() );\n\n\t\t};\n\n\t\tthis.getScissor = function ( target ) {\n\n\t\t\treturn target.copy( _scissor );\n\n\t\t};\n\n\t\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t\tif ( x.isVector4 ) {\n\n\t\t\t\t_scissor.set( x.x, x.y, x.z, x.w );\n\n\t\t\t} else {\n\n\t\t\t\t_scissor.set( x, y, width, height );\n\n\t\t\t}\n\n\t\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).round() );\n\n\t\t};\n\n\t\tthis.getScissorTest = function () {\n\n\t\t\treturn _scissorTest;\n\n\t\t};\n\n\t\tthis.setScissorTest = function ( boolean ) {\n\n\t\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t\t};\n\n\t\tthis.setOpaqueSort = function ( method ) {\n\n\t\t\t_opaqueSort = method;\n\n\t\t};\n\n\t\tthis.setTransparentSort = function ( method ) {\n\n\t\t\t_transparentSort = method;\n\n\t\t};\n\n\t\t// Clearing\n\n\t\tthis.getClearColor = function ( target ) {\n\n\t\t\treturn target.copy( background.getClearColor() );\n\n\t\t};\n\n\t\tthis.setClearColor = function () {\n\n\t\t\tbackground.setClearColor.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.getClearAlpha = function () {\n\n\t\t\treturn background.getClearAlpha();\n\n\t\t};\n\n\t\tthis.setClearAlpha = function () {\n\n\t\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.clear = function ( color = true, depth = true, stencil = true ) {\n\n\t\t\tlet bits = 0;\n\n\t\t\tif ( color ) {\n\n\t\t\t\t// check if we're trying to clear an integer target\n\t\t\t\tlet isIntegerFormat = false;\n\t\t\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t\t\tconst targetFormat = _currentRenderTarget.texture.format;\n\t\t\t\t\tisIntegerFormat = targetFormat === RGBAIntegerFormat ||\n\t\t\t\t\t\ttargetFormat === RGIntegerFormat ||\n\t\t\t\t\t\ttargetFormat === RedIntegerFormat;\n\n\t\t\t\t}\n\n\t\t\t\t// use the appropriate clear functions to clear the target if it's a signed\n\t\t\t\t// or unsigned integer target\n\t\t\t\tif ( isIntegerFormat ) {\n\n\t\t\t\t\tconst targetType = _currentRenderTarget.texture.type;\n\t\t\t\t\tconst isUnsignedType = targetType === UnsignedByteType ||\n\t\t\t\t\t\ttargetType === UnsignedIntType ||\n\t\t\t\t\t\ttargetType === UnsignedShortType ||\n\t\t\t\t\t\ttargetType === UnsignedInt248Type ||\n\t\t\t\t\t\ttargetType === UnsignedShort4444Type ||\n\t\t\t\t\t\ttargetType === UnsignedShort5551Type;\n\n\t\t\t\t\tconst clearColor = background.getClearColor();\n\t\t\t\t\tconst a = background.getClearAlpha();\n\t\t\t\t\tconst r = clearColor.r;\n\t\t\t\t\tconst g = clearColor.g;\n\t\t\t\t\tconst b = clearColor.b;\n\n\t\t\t\t\tif ( isUnsignedType ) {\n\n\t\t\t\t\t\tuintClearColor[ 0 ] = r;\n\t\t\t\t\t\tuintClearColor[ 1 ] = g;\n\t\t\t\t\t\tuintClearColor[ 2 ] = b;\n\t\t\t\t\t\tuintClearColor[ 3 ] = a;\n\t\t\t\t\t\t_gl.clearBufferuiv( _gl.COLOR, 0, uintClearColor );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tintClearColor[ 0 ] = r;\n\t\t\t\t\t\tintClearColor[ 1 ] = g;\n\t\t\t\t\t\tintClearColor[ 2 ] = b;\n\t\t\t\t\t\tintClearColor[ 3 ] = a;\n\t\t\t\t\t\t_gl.clearBufferiv( _gl.COLOR, 0, intClearColor );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbits |= _gl.COLOR_BUFFER_BIT;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\t\tif ( stencil ) {\n\n\t\t\t\tbits |= _gl.STENCIL_BUFFER_BIT;\n\t\t\t\tthis.state.buffers.stencil.setMask( 0xffffffff );\n\n\t\t\t}\n\n\t\t\t_gl.clear( bits );\n\n\t\t};\n\n\t\tthis.clearColor = function () {\n\n\t\t\tthis.clear( true, false, false );\n\n\t\t};\n\n\t\tthis.clearDepth = function () {\n\n\t\t\tthis.clear( false, true, false );\n\n\t\t};\n\n\t\tthis.clearStencil = function () {\n\n\t\t\tthis.clear( false, false, true );\n\n\t\t};\n\n\t\t//\n\n\t\tthis.dispose = function () {\n\n\t\t\tcanvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\tcanvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\t\t\tcanvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );\n\n\t\t\trenderLists.dispose();\n\t\t\trenderStates.dispose();\n\t\t\tproperties.dispose();\n\t\t\tcubemaps.dispose();\n\t\t\tcubeuvmaps.dispose();\n\t\t\tobjects.dispose();\n\t\t\tbindingStates.dispose();\n\t\t\tuniformsGroups.dispose();\n\t\t\tprogramCache.dispose();\n\n\t\t\txr.dispose();\n\n\t\t\txr.removeEventListener( 'sessionstart', onXRSessionStart );\n\t\t\txr.removeEventListener( 'sessionend', onXRSessionEnd );\n\n\t\t\tanimation.stop();\n\n\t\t};\n\n\t\t// Events\n\n\t\tfunction onContextLost( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t\t_isContextLost = true;\n\n\t\t}\n\n\t\tfunction onContextRestore( /* event */ ) {\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t\t_isContextLost = false;\n\n\t\t\tconst infoAutoReset = info.autoReset;\n\t\t\tconst shadowMapEnabled = shadowMap.enabled;\n\t\t\tconst shadowMapAutoUpdate = shadowMap.autoUpdate;\n\t\t\tconst shadowMapNeedsUpdate = shadowMap.needsUpdate;\n\t\t\tconst shadowMapType = shadowMap.type;\n\n\t\t\tinitGLContext();\n\n\t\t\tinfo.autoReset = infoAutoReset;\n\t\t\tshadowMap.enabled = shadowMapEnabled;\n\t\t\tshadowMap.autoUpdate = shadowMapAutoUpdate;\n\t\t\tshadowMap.needsUpdate = shadowMapNeedsUpdate;\n\t\t\tshadowMap.type = shadowMapType;\n\n\t\t}\n\n\t\tfunction onContextCreationError( event ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );\n\n\t\t}\n\n\t\tfunction onMaterialDispose( event ) {\n\n\t\t\tconst material = event.target;\n\n\t\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tdeallocateMaterial( material );\n\n\t\t}\n\n\t\t// Buffer deallocation\n\n\t\tfunction deallocateMaterial( material ) {\n\n\t\t\treleaseMaterialProgramReferences( material );\n\n\t\t\tproperties.remove( material );\n\n\t\t}\n\n\n\t\tfunction releaseMaterialProgramReferences( material ) {\n\n\t\t\tconst programs = properties.get( material ).programs;\n\n\t\t\tif ( programs !== undefined ) {\n\n\t\t\t\tprograms.forEach( function ( program ) {\n\n\t\t\t\t\tprogramCache.releaseProgram( program );\n\n\t\t\t\t} );\n\n\t\t\t\tif ( material.isShaderMaterial ) {\n\n\t\t\t\t\tprogramCache.releaseShaderCache( material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Buffer rendering\n\n\t\tthis.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {\n\n\t\t\tif ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)\n\n\t\t\tconst frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tconst program = setProgram( camera, scene, geometry, material, object );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\t//\n\n\t\t\tlet index = geometry.index;\n\t\t\tlet rangeFactor = 1;\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\n\t\t\t\tif ( index === undefined ) return;\n\n\t\t\t\trangeFactor = 2;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tconst drawRange = geometry.drawRange;\n\t\t\tconst position = geometry.attributes.position;\n\n\t\t\tlet drawStart = drawRange.start * rangeFactor;\n\t\t\tlet drawEnd = ( drawRange.start + drawRange.count ) * rangeFactor;\n\n\t\t\tif ( group !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, group.start * rangeFactor );\n\t\t\t\tdrawEnd = Math.min( drawEnd, ( group.start + group.count ) * rangeFactor );\n\n\t\t\t}\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\t\tdrawEnd = Math.min( drawEnd, index.count );\n\n\t\t\t} else if ( position !== undefined && position !== null ) {\n\n\t\t\t\tdrawStart = Math.max( drawStart, 0 );\n\t\t\t\tdrawEnd = Math.min( drawEnd, position.count );\n\n\t\t\t}\n\n\t\t\tconst drawCount = drawEnd - drawStart;\n\n\t\t\tif ( drawCount < 0 || drawCount === Infinity ) return;\n\n\t\t\t//\n\n\t\t\tbindingStates.setup( object, material, program, geometry, index );\n\n\t\t\tlet attribute;\n\t\t\tlet renderer = bufferRenderer;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tattribute = attributes.get( index );\n\n\t\t\t\trenderer = indexedBufferRenderer;\n\t\t\t\trenderer.setIndex( attribute );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\tlet lineWidth = material.linewidth;\n\n\t\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\n\t\t\t}\n\n\t\t\tif ( object.isBatchedMesh ) {\n\n\t\t\t\tif ( object._multiDrawInstances !== null ) {\n\n\t\t\t\t\trenderer.renderMultiDrawInstances( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount, object._multiDrawInstances );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( ! extensions.get( 'WEBGL_multi_draw' ) ) {\n\n\t\t\t\t\t\tconst starts = object._multiDrawStarts;\n\t\t\t\t\t\tconst counts = object._multiDrawCounts;\n\t\t\t\t\t\tconst drawCount = object._multiDrawCount;\n\t\t\t\t\t\tconst bytesPerElement = index ? attributes.get( index ).bytesPerElement : 1;\n\t\t\t\t\t\tconst uniforms = properties.get( material ).currentProgram.getUniforms();\n\t\t\t\t\t\tfor ( let i = 0; i < drawCount; i ++ ) {\n\n\t\t\t\t\t\t\tuniforms.setValue( _gl, '_gl_DrawID', i );\n\t\t\t\t\t\t\trenderer.render( starts[ i ] / bytesPerElement, counts[ i ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\trenderer.renderMultiDraw( object._multiDrawStarts, object._multiDrawCounts, object._multiDrawCount );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isInstancedMesh ) {\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, object.count );\n\n\t\t\t} else if ( geometry.isInstancedBufferGeometry ) {\n\n\t\t\t\tconst maxInstanceCount = geometry._maxInstanceCount !== undefined ? geometry._maxInstanceCount : Infinity;\n\t\t\t\tconst instanceCount = Math.min( geometry.instanceCount, maxInstanceCount );\n\n\t\t\t\trenderer.renderInstances( drawStart, drawCount, instanceCount );\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Compile\n\n\t\tfunction prepareMaterial( material, scene, object ) {\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\tgetProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.compile = function ( scene, camera, targetScene = null ) {\n\n\t\t\tif ( targetScene === null ) targetScene = scene;\n\n\t\t\tcurrentRenderState = renderStates.get( targetScene );\n\t\t\tcurrentRenderState.init( camera );\n\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t// gather lights from both the target scene and the new object that will be added to the scene.\n\n\t\t\ttargetScene.traverseVisible( function ( object ) {\n\n\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tif ( scene !== targetScene ) {\n\n\t\t\t\tscene.traverseVisible( function ( object ) {\n\n\t\t\t\t\tif ( object.isLight && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tcurrentRenderState.setupLights();\n\n\t\t\t// Only initialize materials in the new scene, not the targetScene.\n\n\t\t\tconst materials = new Set();\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tconst material = object.material;\n\n\t\t\t\tif ( material ) {\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tfor ( let i = 0; i < material.length; i ++ ) {\n\n\t\t\t\t\t\t\tconst material2 = material[ i ];\n\n\t\t\t\t\t\t\tprepareMaterial( material2, targetScene, object );\n\t\t\t\t\t\t\tmaterials.add( material2 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tprepareMaterial( material, targetScene, object );\n\t\t\t\t\t\tmaterials.add( material );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\trenderStateStack.pop();\n\t\t\tcurrentRenderState = null;\n\n\t\t\treturn materials;\n\n\t\t};\n\n\t\t// compileAsync\n\n\t\tthis.compileAsync = function ( scene, camera, targetScene = null ) {\n\n\t\t\tconst materials = this.compile( scene, camera, targetScene );\n\n\t\t\t// Wait for all the materials in the new object to indicate that they're\n\t\t\t// ready to be used before resolving the promise.\n\n\t\t\treturn new Promise( ( resolve ) => {\n\n\t\t\t\tfunction checkMaterialsReady() {\n\n\t\t\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\t\t\tconst materialProperties = properties.get( material );\n\t\t\t\t\t\tconst program = materialProperties.currentProgram;\n\n\t\t\t\t\t\tif ( program.isReady() ) {\n\n\t\t\t\t\t\t\t// remove any programs that report they're ready to use from the list\n\t\t\t\t\t\t\tmaterials.delete( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\t// once the list of compiling materials is empty, call the callback\n\n\t\t\t\t\tif ( materials.size === 0 ) {\n\n\t\t\t\t\t\tresolve( scene );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// if some materials are still not ready, wait a bit and check again\n\n\t\t\t\t\tsetTimeout( checkMaterialsReady, 10 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( extensions.get( 'KHR_parallel_shader_compile' ) !== null ) {\n\n\t\t\t\t\t// If we can check the compilation status of the materials without\n\t\t\t\t\t// blocking then do so right away.\n\n\t\t\t\t\tcheckMaterialsReady();\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise start by waiting a bit to give the materials we just\n\t\t\t\t\t// initialized a chance to finish.\n\n\t\t\t\t\tsetTimeout( checkMaterialsReady, 10 );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tlet onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time ) {\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback( time );\n\n\t\t}\n\n\t\tfunction onXRSessionStart() {\n\n\t\t\tanimation.stop();\n\n\t\t}\n\n\t\tfunction onXRSessionEnd() {\n\n\t\t\tanimation.start();\n\n\t\t}\n\n\t\tconst animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tif ( typeof self !== 'undefined' ) animation.setContext( self );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\t\t\txr.setAnimationLoop( callback );\n\n\t\t\t( callback === null ) ? animation.stop() : animation.start();\n\n\t\t};\n\n\t\txr.addEventListener( 'sessionstart', onXRSessionStart );\n\t\txr.addEventListener( 'sessionend', onXRSessionEnd );\n\n\t\t// Rendering\n\n\t\tthis.render = function ( scene, camera ) {\n\n\t\t\tif ( camera !== undefined && camera.isCamera !== true ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( _isContextLost === true ) return;\n\n\t\t\t// update scene graph\n\n\t\t\tif ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\t// update camera matrices and frustum\n\n\t\t\tif ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\t\tif ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );\n\n\t\t\t\tcamera = xr.getCamera(); // use XR camera for rendering\n\n\t\t\t}\n\n\t\t\t//\n\t\t\tif ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );\n\n\t\t\tcurrentRenderState = renderStates.get( scene, renderStateStack.length );\n\t\t\tcurrentRenderState.init( camera );\n\n\t\t\trenderStateStack.push( currentRenderState );\n\n\t\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\t_frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t\t_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );\n\n\t\t\tcurrentRenderList = renderLists.get( scene, renderListStack.length );\n\t\t\tcurrentRenderList.init();\n\n\t\t\trenderListStack.push( currentRenderList );\n\n\t\t\tif ( xr.enabled === true && xr.isPresenting === true ) {\n\n\t\t\t\tconst depthSensingMesh = _this.xr.getDepthSensingMesh();\n\n\t\t\t\tif ( depthSensingMesh !== null ) {\n\n\t\t\t\t\tprojectObject( depthSensingMesh, camera, - Infinity, _this.sortObjects );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tprojectObject( scene, camera, 0, _this.sortObjects );\n\n\t\t\tcurrentRenderList.finish();\n\n\t\t\tif ( _this.sortObjects === true ) {\n\n\t\t\t\tcurrentRenderList.sort( _opaqueSort, _transparentSort );\n\n\t\t\t}\n\n\t\t\t_renderBackground = xr.enabled === false || xr.isPresenting === false || xr.hasDepthSensing() === false;\n\t\t\tif ( _renderBackground ) {\n\n\t\t\t\tbackground.addToRenderList( currentRenderList, scene );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tthis.info.render.frame ++;\n\n\t\t\tif ( _clippingEnabled === true ) clipping.beginShadows();\n\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.endShadows();\n\n\t\t\t//\n\n\t\t\tif ( this.info.autoReset === true ) this.info.reset();\n\n\t\t\t// render scene\n\n\t\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\n\t\t\tcurrentRenderState.setupLights();\n\n\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\tconst cameras = camera.cameras;\n\n\t\t\t\tif ( transmissiveObjects.length > 0 ) {\n\n\t\t\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\t\t\trenderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t\tfor ( let i = 0, l = cameras.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst camera2 = cameras[ i ];\n\n\t\t\t\t\trenderScene( currentRenderList, scene, camera2, camera2.viewport );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );\n\n\t\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t\trenderScene( currentRenderList, scene, camera );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( _currentRenderTarget !== null ) {\n\n\t\t\t\t// resolve multisample renderbuffers to a single-sample texture if necessary\n\n\t\t\t\ttextures.updateMultisampleRenderTarget( _currentRenderTarget );\n\n\t\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\t\ttextures.updateRenderTargetMipmap( _currentRenderTarget );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );\n\n\t\t\t// _gl.finish();\n\n\t\t\tbindingStates.resetDefaultState();\n\t\t\t_currentMaterialId = - 1;\n\t\t\t_currentCamera = null;\n\n\t\t\trenderStateStack.pop();\n\n\t\t\tif ( renderStateStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderState = renderStateStack[ renderStateStack.length - 1 ];\n\n\t\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, currentRenderState.state.camera );\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderState = null;\n\n\t\t\t}\n\n\t\t\trenderListStack.pop();\n\n\t\t\tif ( renderListStack.length > 0 ) {\n\n\t\t\t\tcurrentRenderList = renderListStack[ renderListStack.length - 1 ];\n\n\t\t\t} else {\n\n\t\t\t\tcurrentRenderList = null;\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction projectObject( object, camera, groupOrder, sortObjects ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tconst visible = object.layers.test( camera.layers );\n\n\t\t\tif ( visible ) {\n\n\t\t\t\tif ( object.isGroup ) {\n\n\t\t\t\t\tgroupOrder = object.renderOrder;\n\n\t\t\t\t} else if ( object.isLOD ) {\n\n\t\t\t\t\tif ( object.autoUpdate === true ) object.update( camera );\n\n\t\t\t\t} else if ( object.isLight ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\t_vector4.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\t\tconst geometry = objects.update( object );\n\t\t\t\t\t\tconst material = object.material;\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\tif ( object.boundingSphere !== undefined ) {\n\n\t\t\t\t\t\t\t\tif ( object.boundingSphere === null ) object.computeBoundingSphere();\n\t\t\t\t\t\t\t\t_vector4.copy( object.boundingSphere.center );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\t\t\t\t\t\t\t\t_vector4.copy( geometry.boundingSphere.center );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_vector4\n\t\t\t\t\t\t\t\t.applyMatrix4( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\t\tconst groups = geometry.groups;\n\n\t\t\t\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tconst group = groups[ i ];\n\t\t\t\t\t\t\t\tconst groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector4.z, group );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, groupOrder, _vector4.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst children = object.children;\n\n\t\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tprojectObject( children[ i ], camera, groupOrder, sortObjects );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderScene( currentRenderList, scene, camera, viewport ) {\n\n\t\t\tconst opaqueObjects = currentRenderList.opaque;\n\t\t\tconst transmissiveObjects = currentRenderList.transmissive;\n\t\t\tconst transparentObjects = currentRenderList.transparent;\n\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\t\tif ( viewport ) state.viewport( _currentViewport.copy( viewport ) );\n\n\t\t\tif ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );\n\t\t\tif ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );\n\t\t\tif ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );\n\n\t\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\tstate.setPolygonOffset( false );\n\n\t\t}\n\n\t\tfunction renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tif ( overrideMaterial !== null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( currentRenderState.state.transmissionRenderTarget[ camera.id ] === undefined ) {\n\n\t\t\t\tcurrentRenderState.state.transmissionRenderTarget[ camera.id ] = new WebGLRenderTarget( 1, 1, {\n\t\t\t\t\tgenerateMipmaps: true,\n\t\t\t\t\ttype: ( extensions.has( 'EXT_color_buffer_half_float' ) || extensions.has( 'EXT_color_buffer_float' ) ) ? HalfFloatType : UnsignedByteType,\n\t\t\t\t\tminFilter: LinearMipmapLinearFilter,\n\t\t\t\t\tsamples: 4,\n\t\t\t\t\tstencilBuffer: stencil,\n\t\t\t\t\tresolveDepthBuffer: false,\n\t\t\t\t\tresolveStencilBuffer: false,\n\t\t\t\t\tcolorSpace: ColorManagement.workingColorSpace,\n\t\t\t\t} );\n\n\t\t\t\t// debug\n\n\t\t\t\t/*\n\t\t\t\tconst geometry = new PlaneGeometry();\n\t\t\t\tconst material = new MeshBasicMaterial( { map: _transmissionRenderTarget.texture } );\n\n\t\t\t\tconst mesh = new Mesh( geometry, material );\n\t\t\t\tscene.add( mesh );\n\t\t\t\t*/\n\n\t\t\t}\n\n\t\t\tconst transmissionRenderTarget = currentRenderState.state.transmissionRenderTarget[ camera.id ];\n\n\t\t\tconst activeViewport = camera.viewport || _currentViewport;\n\t\t\ttransmissionRenderTarget.setSize( activeViewport.z, activeViewport.w );\n\n\t\t\t//\n\n\t\t\tconst currentRenderTarget = _this.getRenderTarget();\n\t\t\t_this.setRenderTarget( transmissionRenderTarget );\n\n\t\t\t_this.getClearColor( _currentClearColor );\n\t\t\t_currentClearAlpha = _this.getClearAlpha();\n\t\t\tif ( _currentClearAlpha < 1 ) _this.setClearColor( 0xffffff, 0.5 );\n\n\t\t\t_this.clear();\n\n\t\t\tif ( _renderBackground ) background.render( scene );\n\n\t\t\t// Turn off the features which can affect the frag color for opaque objects pass.\n\t\t\t// Otherwise they are applied twice in opaque objects pass and transmission objects pass.\n\t\t\tconst currentToneMapping = _this.toneMapping;\n\t\t\t_this.toneMapping = NoToneMapping;\n\n\t\t\t// Remove viewport from camera to avoid nested render calls resetting viewport to it (e.g Reflector).\n\t\t\t// Transmission render pass requires viewport to match the transmissionRenderTarget.\n\t\t\tconst currentCameraViewport = camera.viewport;\n\t\t\tif ( camera.viewport !== undefined ) camera.viewport = undefined;\n\n\t\t\tcurrentRenderState.setupLightsView( camera );\n\n\t\t\tif ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );\n\n\t\t\trenderObjects( opaqueObjects, scene, camera );\n\n\t\t\ttextures.updateMultisampleRenderTarget( transmissionRenderTarget );\n\t\t\ttextures.updateRenderTargetMipmap( transmissionRenderTarget );\n\n\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === false ) { // see #28131\n\n\t\t\t\tlet renderTargetNeedsUpdate = false;\n\n\t\t\t\tfor ( let i = 0, l = transmissiveObjects.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst renderItem = transmissiveObjects[ i ];\n\n\t\t\t\t\tconst object = renderItem.object;\n\t\t\t\t\tconst geometry = renderItem.geometry;\n\t\t\t\t\tconst material = renderItem.material;\n\t\t\t\t\tconst group = renderItem.group;\n\n\t\t\t\t\tif ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\t\tconst currentSide = material.side;\n\n\t\t\t\t\t\tmaterial.side = BackSide;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t\t\tmaterial.side = currentSide;\n\t\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t\t\trenderTargetNeedsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( renderTargetNeedsUpdate === true ) {\n\n\t\t\t\t\ttextures.updateMultisampleRenderTarget( transmissionRenderTarget );\n\t\t\t\t\ttextures.updateRenderTargetMipmap( transmissionRenderTarget );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_this.setRenderTarget( currentRenderTarget );\n\n\t\t\t_this.setClearColor( _currentClearColor, _currentClearAlpha );\n\n\t\t\tif ( currentCameraViewport !== undefined ) camera.viewport = currentCameraViewport;\n\n\t\t\t_this.toneMapping = currentToneMapping;\n\n\t\t}\n\n\t\tfunction renderObjects( renderList, scene, camera ) {\n\n\t\t\tconst overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;\n\n\t\t\tfor ( let i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\t\tconst renderItem = renderList[ i ];\n\n\t\t\t\tconst object = renderItem.object;\n\t\t\t\tconst geometry = renderItem.geometry;\n\t\t\t\tconst material = overrideMaterial === null ? renderItem.material : overrideMaterial;\n\t\t\t\tconst group = renderItem.group;\n\n\t\t\t\tif ( object.layers.test( camera.layers ) ) {\n\n\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\n\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\t\tif ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {\n\n\t\t\t\tmaterial.side = BackSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = FrontSide;\n\t\t\t\tmaterial.needsUpdate = true;\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t\tmaterial.side = DoubleSide;\n\n\t\t\t} else {\n\n\t\t\t\t_this.renderBufferDirect( camera, scene, geometry, material, object, group );\n\n\t\t\t}\n\n\t\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\n\t\t}\n\n\t\tfunction getProgram( material, scene, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tconst lights = currentRenderState.state.lights;\n\t\t\tconst shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tconst lightsStateVersion = lights.state.version;\n\n\t\t\tconst parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );\n\t\t\tconst programCacheKey = programCache.getProgramCacheKey( parameters );\n\n\t\t\tlet programs = materialProperties.programs;\n\n\t\t\t// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change\n\n\t\t\tmaterialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tmaterialProperties.fog = scene.fog;\n\t\t\tmaterialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );\n\t\t\tmaterialProperties.envMapRotation = ( materialProperties.environment !== null && material.envMap === null ) ? scene.environmentRotation : material.envMapRotation;\n\n\t\t\tif ( programs === undefined ) {\n\n\t\t\t\t// new material\n\n\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t\tprograms = new Map();\n\t\t\t\tmaterialProperties.programs = programs;\n\n\t\t\t}\n\n\t\t\tlet program = programs.get( programCacheKey );\n\n\t\t\tif ( program !== undefined ) {\n\n\t\t\t\t// early out if program and light state is identical\n\n\t\t\t\tif ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {\n\n\t\t\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t\t\treturn program;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tparameters.uniforms = programCache.getUniforms( material );\n\n\t\t\t\tmaterial.onBeforeCompile( parameters, _this );\n\n\t\t\t\tprogram = programCache.acquireProgram( parameters, programCacheKey );\n\t\t\t\tprograms.set( programCacheKey, program );\n\n\t\t\t\tmaterialProperties.uniforms = parameters.uniforms;\n\n\t\t\t}\n\n\t\t\tconst uniforms = materialProperties.uniforms;\n\n\t\t\tif ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {\n\n\t\t\t\tuniforms.clippingPlanes = clipping.uniform;\n\n\t\t\t}\n\n\t\t\tupdateCommonMaterialProperties( material, parameters );\n\n\t\t\t// store the light setup it was created for\n\n\t\t\tmaterialProperties.needsLights = materialNeedsLights( material );\n\t\t\tmaterialProperties.lightsStateVersion = lightsStateVersion;\n\n\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\t\tuniforms.lightProbe.value = lights.state.probe;\n\t\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\t\tuniforms.directionalLightShadows.value = lights.state.directionalShadow;\n\t\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\t\tuniforms.spotLightShadows.value = lights.state.spotShadow;\n\t\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\t\tuniforms.ltc_1.value = lights.state.rectAreaLTC1;\n\t\t\t\tuniforms.ltc_2.value = lights.state.rectAreaLTC2;\n\t\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\t\tuniforms.pointLightShadows.value = lights.state.pointShadow;\n\t\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\t\tuniforms.spotLightMatrix.value = lights.state.spotLightMatrix;\n\t\t\t\tuniforms.spotLightMap.value = lights.state.spotLightMap;\n\t\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t\t}\n\n\t\t\tmaterialProperties.currentProgram = program;\n\t\t\tmaterialProperties.uniformsList = null;\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\tfunction getUniformList( materialProperties ) {\n\n\t\t\tif ( materialProperties.uniformsList === null ) {\n\n\t\t\t\tconst progUniforms = materialProperties.currentProgram.getUniforms();\n\t\t\t\tmaterialProperties.uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, materialProperties.uniforms );\n\n\t\t\t}\n\n\t\t\treturn materialProperties.uniformsList;\n\n\t\t}\n\n\t\tfunction updateCommonMaterialProperties( material, parameters ) {\n\n\t\t\tconst materialProperties = properties.get( material );\n\n\t\t\tmaterialProperties.outputColorSpace = parameters.outputColorSpace;\n\t\t\tmaterialProperties.batching = parameters.batching;\n\t\t\tmaterialProperties.batchingColor = parameters.batchingColor;\n\t\t\tmaterialProperties.instancing = parameters.instancing;\n\t\t\tmaterialProperties.instancingColor = parameters.instancingColor;\n\t\t\tmaterialProperties.instancingMorph = parameters.instancingMorph;\n\t\t\tmaterialProperties.skinning = parameters.skinning;\n\t\t\tmaterialProperties.morphTargets = parameters.morphTargets;\n\t\t\tmaterialProperties.morphNormals = parameters.morphNormals;\n\t\t\tmaterialProperties.morphColors = parameters.morphColors;\n\t\t\tmaterialProperties.morphTargetsCount = parameters.morphTargetsCount;\n\t\t\tmaterialProperties.numClippingPlanes = parameters.numClippingPlanes;\n\t\t\tmaterialProperties.numIntersection = parameters.numClipIntersection;\n\t\t\tmaterialProperties.vertexAlphas = parameters.vertexAlphas;\n\t\t\tmaterialProperties.vertexTangents = parameters.vertexTangents;\n\t\t\tmaterialProperties.toneMapping = parameters.toneMapping;\n\n\t\t}\n\n\t\tfunction setProgram( camera, scene, geometry, material, object ) {\n\n\t\t\tif ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...\n\n\t\t\ttextures.resetTextureUnits();\n\n\t\t\tconst fog = scene.fog;\n\t\t\tconst environment = material.isMeshStandardMaterial ? scene.environment : null;\n\t\t\tconst colorSpace = ( _currentRenderTarget === null ) ? _this.outputColorSpace : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace );\n\t\t\tconst envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );\n\t\t\tconst vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;\n\t\t\tconst vertexTangents = !! geometry.attributes.tangent && ( !! material.normalMap || material.anisotropy > 0 );\n\t\t\tconst morphTargets = !! geometry.morphAttributes.position;\n\t\t\tconst morphNormals = !! geometry.morphAttributes.normal;\n\t\t\tconst morphColors = !! geometry.morphAttributes.color;\n\n\t\t\tlet toneMapping = NoToneMapping;\n\n\t\t\tif ( material.toneMapped ) {\n\n\t\t\t\tif ( _currentRenderTarget === null || _currentRenderTarget.isXRRenderTarget === true ) {\n\n\t\t\t\t\ttoneMapping = _this.toneMapping;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;\n\t\t\tconst morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;\n\n\t\t\tconst materialProperties = properties.get( material );\n\t\t\tconst lights = currentRenderState.state.lights;\n\n\t\t\tif ( _clippingEnabled === true ) {\n\n\t\t\t\tif ( _localClippingEnabled === true || camera !== _currentCamera ) {\n\n\t\t\t\t\tconst useCache =\n\t\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t\t// (#8465, #8379)\n\t\t\t\t\tclipping.setState( material, camera, useCache );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet needsProgramChange = false;\n\n\t\t\tif ( material.version === materialProperties.__version ) {\n\n\t\t\t\tif ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.outputColorSpace !== colorSpace ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batching === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isBatchedMesh && materialProperties.batching === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batchingColor === true && object.colorTexture === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isBatchedMesh && materialProperties.batchingColor === false && object.colorTexture !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingColor === true && object.instanceColor === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingColor === false && object.instanceColor !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingMorph === true && object.morphTexture === null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( object.isInstancedMesh && materialProperties.instancingMorph === false && object.morphTexture !== null ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.envMap !== envMap ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( material.fog === true && materialProperties.fog !== fog ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t\t( materialProperties.numClippingPlanes !== clipping.numPlanes ||\n\t\t\t\t\tmaterialProperties.numIntersection !== clipping.numIntersection ) ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.vertexTangents !== vertexTangents ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphTargets !== morphTargets ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphNormals !== morphNormals ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphColors !== morphColors ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.toneMapping !== toneMapping ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t} else if ( materialProperties.morphTargetsCount !== morphTargetsCount ) {\n\n\t\t\t\t\tneedsProgramChange = true;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tneedsProgramChange = true;\n\t\t\t\tmaterialProperties.__version = material.version;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet program = materialProperties.currentProgram;\n\n\t\t\tif ( needsProgramChange === true ) {\n\n\t\t\t\tprogram = getProgram( material, scene, object );\n\n\t\t\t}\n\n\t\t\tlet refreshProgram = false;\n\t\t\tlet refreshMaterial = false;\n\t\t\tlet refreshLights = false;\n\n\t\t\tconst p_uniforms = program.getUniforms(),\n\t\t\t\tm_uniforms = materialProperties.uniforms;\n\n\t\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\t\trefreshProgram = true;\n\t\t\t\trefreshMaterial = true;\n\t\t\t\trefreshLights = true;\n\n\t\t\t}\n\n\t\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t\t_currentMaterialId = material.id;\n\n\t\t\t\trefreshMaterial = true;\n\n\t\t\t}\n\n\t\t\tif ( refreshProgram || _currentCamera !== camera ) {\n\n\t\t\t\t// common camera uniforms\n\n\t\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t\tconst uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\tuCamPos.setValue( _gl, _vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// consider moving isOrthographic to UniformLib and WebGLMaterials, see https://github.com/mrdoob/three.js/pull/26467#issuecomment-1645185067\n\n\t\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshToonMaterial ||\n\t\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.isShaderMaterial ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );\n\n\t\t\t\t}\n\n\t\t\t\tif ( _currentCamera !== camera ) {\n\n\t\t\t\t\t_currentCamera = camera;\n\n\t\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// skinning and morph target uniforms must be set even if material didn't change\n\t\t\t// auto-setting of texture unit for bone and morph texture must go before other textures\n\t\t\t// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures\n\n\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\t\tconst skeleton = object.skeleton;\n\n\t\t\t\tif ( skeleton ) {\n\n\t\t\t\t\tif ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( object.isBatchedMesh ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingTexture' );\n\t\t\t\tp_uniforms.setValue( _gl, 'batchingTexture', object._matricesTexture, textures );\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingIdTexture' );\n\t\t\t\tp_uniforms.setValue( _gl, 'batchingIdTexture', object._indirectTexture, textures );\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'batchingColorTexture' );\n\t\t\t\tif ( object._colorsTexture !== null ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'batchingColorTexture', object._colorsTexture, textures );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst morphAttributes = geometry.morphAttributes;\n\n\t\t\tif ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined ) ) {\n\n\t\t\t\tmorphtargets.update( object, geometry, program );\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {\n\n\t\t\t\tmaterialProperties.receiveShadow = object.receiveShadow;\n\t\t\t\tp_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );\n\n\t\t\t}\n\n\t\t\t// https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512\n\n\t\t\tif ( material.isMeshGouraudMaterial && material.envMap !== null ) {\n\n\t\t\t\tm_uniforms.envMap.value = envMap;\n\n\t\t\t\tm_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;\n\n\t\t\t}\n\n\t\t\tif ( material.isMeshStandardMaterial && material.envMap === null && scene.environment !== null ) {\n\n\t\t\t\tm_uniforms.envMapIntensity.value = scene.environmentIntensity;\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\n\t\t\t\tif ( materialProperties.needsLights ) {\n\n\t\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t\t// values\n\t\t\t\t\t//\n\t\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t\t// the GL state when required\n\n\t\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t\t}\n\n\t\t\t\t// refresh uniforms common to several materials\n\n\t\t\t\tif ( fog && material.fog === true ) {\n\n\t\t\t\t\tmaterials.refreshFogUniforms( m_uniforms, fog );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, currentRenderState.state.transmissionRenderTarget[ camera.id ] );\n\n\t\t\t\tWebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );\n\n\t\t\t}\n\n\t\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\t\tWebGLUniforms.upload( _gl, getUniformList( materialProperties ), m_uniforms, textures );\n\t\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( material.isSpriteMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'center', object.center );\n\n\t\t\t}\n\n\t\t\t// common matrices\n\n\t\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\t\t// UBOs\n\n\t\t\tif ( material.isShaderMaterial || material.isRawShaderMaterial ) {\n\n\t\t\t\tconst groups = material.uniformsGroups;\n\n\t\t\t\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\t\tuniformsGroups.update( group, program );\n\t\t\t\t\tuniformsGroups.bind( group, program );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\t\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\t\tuniforms.ambientLightColor.needsUpdate = value;\n\t\t\tuniforms.lightProbe.needsUpdate = value;\n\n\t\t\tuniforms.directionalLights.needsUpdate = value;\n\t\t\tuniforms.directionalLightShadows.needsUpdate = value;\n\t\t\tuniforms.pointLights.needsUpdate = value;\n\t\t\tuniforms.pointLightShadows.needsUpdate = value;\n\t\t\tuniforms.spotLights.needsUpdate = value;\n\t\t\tuniforms.spotLightShadows.needsUpdate = value;\n\t\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t\t}\n\n\t\tfunction materialNeedsLights( material ) {\n\n\t\t\treturn material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||\n\t\t\t\tmaterial.isMeshStandardMaterial || material.isShadowMaterial ||\n\t\t\t\t( material.isShaderMaterial && material.lights === true );\n\n\t\t}\n\n\t\tthis.getActiveCubeFace = function () {\n\n\t\t\treturn _currentActiveCubeFace;\n\n\t\t};\n\n\t\tthis.getActiveMipmapLevel = function () {\n\n\t\t\treturn _currentActiveMipmapLevel;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn _currentRenderTarget;\n\n\t\t};\n\n\t\tthis.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {\n\n\t\t\tproperties.get( renderTarget.texture ).__webglTexture = colorTexture;\n\t\t\tproperties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\trenderTargetProperties.__hasExternalTextures = true;\n\n\t\t\trenderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;\n\n\t\t\tif ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {\n\n\t\t\t\t// The multisample_render_to_texture extension doesn't work properly if there\n\t\t\t\t// are midframe flushes and an external depth buffer. Disable use of the extension.\n\t\t\t\tif ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' );\n\t\t\t\t\trenderTargetProperties.__useRenderToTexture = false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {\n\n\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\t\t\trenderTargetProperties.__webglFramebuffer = defaultFramebuffer;\n\t\t\trenderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;\n\n\t\t};\n\n\t\tthis.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {\n\n\t\t\t_currentRenderTarget = renderTarget;\n\t\t\t_currentActiveCubeFace = activeCubeFace;\n\t\t\t_currentActiveMipmapLevel = activeMipmapLevel;\n\n\t\t\tlet useDefaultFramebuffer = true;\n\t\t\tlet framebuffer = null;\n\t\t\tlet isCube = false;\n\t\t\tlet isRenderTarget3D = false;\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\tconst renderTargetProperties = properties.get( renderTarget );\n\n\t\t\t\tif ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {\n\n\t\t\t\t\t// We need to make sure to rebind the framebuffer.\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\t\t\t\t\tuseDefaultFramebuffer = false;\n\n\t\t\t\t} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {\n\n\t\t\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t\t\t} else if ( renderTargetProperties.__hasExternalTextures ) {\n\n\t\t\t\t\t// Color and depth texture must be rebound in order for the swapchain to update.\n\t\t\t\t\ttextures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );\n\n\t\t\t\t}\n\n\t\t\t\tconst texture = renderTarget.texture;\n\n\t\t\t\tif ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\t\tisRenderTarget3D = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\t\tif ( renderTarget.isWebGLCubeRenderTarget ) {\n\n\t\t\t\t\tif ( Array.isArray( __webglFramebuffer[ activeCubeFace ] ) ) {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ][ activeMipmapLevel ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeCubeFace ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tisCube = true;\n\n\t\t\t\t} else if ( ( renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {\n\n\t\t\t\t\tframebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( Array.isArray( __webglFramebuffer ) ) {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer[ activeMipmapLevel ];\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t\t} else {\n\n\t\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();\n\t\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t\t}\n\n\t\t\tconst framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\tif ( framebufferBound && useDefaultFramebuffer ) {\n\n\t\t\t\tstate.drawBuffers( renderTarget, framebuffer );\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport );\n\t\t\tstate.scissor( _currentScissor );\n\t\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );\n\n\t\t\t} else if ( isRenderTarget3D ) {\n\n\t\t\t\tconst textureProperties = properties.get( renderTarget.texture );\n\t\t\t\tconst layer = activeCubeFace || 0;\n\t\t\t\t_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );\n\n\t\t\t}\n\n\t\t\t_currentMaterialId = - 1; // reset current material to ensure correct uniform bindings\n\n\t\t};\n\n\t\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\t\tif ( ! capabilities.textureFormatReadable( textureFormat ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! capabilities.textureTypeReadable( textureType ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.readRenderTargetPixelsAsync = async function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\n\t\t\t}\n\n\t\t\tlet framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\t\t\tif ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {\n\n\t\t\t\tframebuffer = framebuffer[ activeCubeFaceIndex ];\n\n\t\t\t}\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst texture = renderTarget.texture;\n\t\t\t\t\tconst textureFormat = texture.format;\n\t\t\t\t\tconst textureType = texture.type;\n\n\t\t\t\t\tif ( ! capabilities.textureFormatReadable( textureFormat ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! capabilities.textureTypeReadable( textureType ) ) {\n\n\t\t\t\t\t\tthrow new Error( 'THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\tconst glBuffer = _gl.createBuffer();\n\t\t\t\t\t\t_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );\n\t\t\t\t\t\t_gl.bufferData( _gl.PIXEL_PACK_BUFFER, buffer.byteLength, _gl.STREAM_READ );\n\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), 0 );\n\t\t\t\t\t\t_gl.flush();\n\n\t\t\t\t\t\t// check if the commands have finished every 8 ms\n\t\t\t\t\t\tconst sync = _gl.fenceSync( _gl.SYNC_GPU_COMMANDS_COMPLETE, 0 );\n\t\t\t\t\t\tawait probeAsync( _gl, sync, 4 );\n\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t_gl.bindBuffer( _gl.PIXEL_PACK_BUFFER, glBuffer );\n\t\t\t\t\t\t\t_gl.getBufferSubData( _gl.PIXEL_PACK_BUFFER, 0, buffer );\n\n\t\t\t\t\t\t} finally {\n\n\t\t\t\t\t\t\t_gl.deleteBuffer( glBuffer );\n\t\t\t\t\t\t\t_gl.deleteSync( sync );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn buffer;\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\t// restore framebuffer of current render target if necessary\n\n\t\t\t\t\tconst framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;\n\t\t\t\t\tstate.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.copyFramebufferToTexture = function ( texture, position = null, level = 0 ) {\n\n\t\t\t// support previous signature with position first\n\t\t\tif ( texture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyFramebufferToTexture function signature has changed.' );\n\n\t\t\t\tposition = arguments[ 0 ] || null;\n\t\t\t\ttexture = arguments[ 1 ];\n\n\t\t\t}\n\n\t\t\tconst levelScale = Math.pow( 2, - level );\n\t\t\tconst width = Math.floor( texture.image.width * levelScale );\n\t\t\tconst height = Math.floor( texture.image.height * levelScale );\n\n\t\t\tconst x = position !== null ? position.x : 0;\n\t\t\tconst y = position !== null ? position.y : 0;\n\n\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t_gl.copyTexSubImage2D( _gl.TEXTURE_2D, level, 0, 0, x, y, width, height );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.copyTextureToTexture = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {\n\n\t\t\t// support previous signature with dstPosition first\n\t\t\tif ( srcTexture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyTextureToTexture function signature has changed.' );\n\n\t\t\t\tdstPosition = arguments[ 0 ] || null;\n\t\t\t\tsrcTexture = arguments[ 1 ];\n\t\t\t\tdstTexture = arguments[ 2 ];\n\t\t\t\tlevel = arguments[ 3 ] || 0;\n\t\t\t\tsrcRegion = null;\n\n\t\t\t}\n\n\t\t\tlet width, height, minX, minY;\n\t\t\tlet dstX, dstY;\n\t\t\tif ( srcRegion !== null ) {\n\n\t\t\t\twidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\t\theight = srcRegion.max.y - srcRegion.min.y;\n\t\t\t\tminX = srcRegion.min.x;\n\t\t\t\tminY = srcRegion.min.y;\n\n\t\t\t} else {\n\n\t\t\t\twidth = srcTexture.image.width;\n\t\t\t\theight = srcTexture.image.height;\n\t\t\t\tminX = 0;\n\t\t\t\tminY = 0;\n\n\t\t\t}\n\n\t\t\tif ( dstPosition !== null ) {\n\n\t\t\t\tdstX = dstPosition.x;\n\t\t\t\tdstY = dstPosition.y;\n\n\t\t\t} else {\n\n\t\t\t\tdstX = 0;\n\t\t\t\tdstY = 0;\n\n\t\t\t}\n\n\t\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\t\tconst glType = utils.convert( dstTexture.type );\n\n\t\t\ttextures.setTexture2D( dstTexture, 0 );\n\n\t\t\t// As another texture upload may have changed pixelStorei\n\t\t\t// parameters, make sure they are correct for the dstTexture\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\t\tconst currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );\n\t\t\tconst currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );\n\t\t\tconst currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );\n\t\t\tconst currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );\n\t\t\tconst currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );\n\n\t\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );\n\n\t\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image.data );\n\n\t\t\t} else {\n\n\t\t\t\tif ( srcTexture.isCompressedTexture ) {\n\n\t\t\t\t\t_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, image.width, image.height, glFormat, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level, dstX, dstY, width, height, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );\n\n\t\t\t// Generate mipmaps only when copying level 0\n\t\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( _gl.TEXTURE_2D );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.copyTextureToTexture3D = function ( srcTexture, dstTexture, srcRegion = null, dstPosition = null, level = 0 ) {\n\n\t\t\t// support previous signature with source box first\n\t\t\tif ( srcTexture.isTexture !== true ) {\n\n\t\t\t\t// @deprecated, r165\n\t\t\t\twarnOnce( 'WebGLRenderer: copyTextureToTexture3D function signature has changed.' );\n\n\t\t\t\tsrcRegion = arguments[ 0 ] || null;\n\t\t\t\tdstPosition = arguments[ 1 ] || null;\n\t\t\t\tsrcTexture = arguments[ 2 ];\n\t\t\t\tdstTexture = arguments[ 3 ];\n\t\t\t\tlevel = arguments[ 4 ] || 0;\n\n\t\t\t}\n\n\t\t\tlet width, height, depth, minX, minY, minZ;\n\t\t\tlet dstX, dstY, dstZ;\n\t\t\tconst image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ level ] : srcTexture.image;\n\t\t\tif ( srcRegion !== null ) {\n\n\t\t\t\twidth = srcRegion.max.x - srcRegion.min.x;\n\t\t\t\theight = srcRegion.max.y - srcRegion.min.y;\n\t\t\t\tdepth = srcRegion.max.z - srcRegion.min.z;\n\t\t\t\tminX = srcRegion.min.x;\n\t\t\t\tminY = srcRegion.min.y;\n\t\t\t\tminZ = srcRegion.min.z;\n\n\t\t\t} else {\n\n\t\t\t\twidth = image.width;\n\t\t\t\theight = image.height;\n\t\t\t\tdepth = image.depth;\n\t\t\t\tminX = 0;\n\t\t\t\tminY = 0;\n\t\t\t\tminZ = 0;\n\n\t\t\t}\n\n\t\t\tif ( dstPosition !== null ) {\n\n\t\t\t\tdstX = dstPosition.x;\n\t\t\t\tdstY = dstPosition.y;\n\t\t\t\tdstZ = dstPosition.z;\n\n\t\t\t} else {\n\n\t\t\t\tdstX = 0;\n\t\t\t\tdstY = 0;\n\t\t\t\tdstZ = 0;\n\n\t\t\t}\n\n\t\t\tconst glFormat = utils.convert( dstTexture.format );\n\t\t\tconst glType = utils.convert( dstTexture.type );\n\t\t\tlet glTarget;\n\n\t\t\tif ( dstTexture.isData3DTexture ) {\n\n\t\t\t\ttextures.setTexture3D( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_3D;\n\n\t\t\t} else if ( dstTexture.isDataArrayTexture || dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\ttextures.setTexture2DArray( dstTexture, 0 );\n\t\t\t\tglTarget = _gl.TEXTURE_2D_ARRAY;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );\n\n\t\t\tconst currentUnpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );\n\t\t\tconst currentUnpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );\n\t\t\tconst currentUnpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );\n\t\t\tconst currentUnpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );\n\t\t\tconst currentUnpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, minX );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, minY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, minZ );\n\n\t\t\tif ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {\n\n\t\t\t\t_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image.data );\n\n\t\t\t} else {\n\n\t\t\t\tif ( dstTexture.isCompressedArrayTexture ) {\n\n\t\t\t\t\t_gl.compressedTexSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, image.data );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.texSubImage3D( glTarget, level, dstX, dstY, dstZ, width, height, depth, glFormat, glType, image );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, currentUnpackRowLen );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, currentUnpackImageHeight );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, currentUnpackSkipPixels );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, currentUnpackSkipRows );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, currentUnpackSkipImages );\n\n\t\t\t// Generate mipmaps only when copying level 0\n\t\t\tif ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.initRenderTarget = function ( target ) {\n\n\t\t\tif ( properties.get( target ).__webglFramebuffer === undefined ) {\n\n\t\t\t\ttextures.setupRenderTarget( target );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.initTexture = function ( texture ) {\n\n\t\t\tif ( texture.isCubeTexture ) {\n\n\t\t\t\ttextures.setTextureCube( texture, 0 );\n\n\t\t\t} else if ( texture.isData3DTexture ) {\n\n\t\t\t\ttextures.setTexture3D( texture, 0 );\n\n\t\t\t} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {\n\n\t\t\t\ttextures.setTexture2DArray( texture, 0 );\n\n\t\t\t} else {\n\n\t\t\t\ttextures.setTexture2D( texture, 0 );\n\n\t\t\t}\n\n\t\t\tstate.unbindTexture();\n\n\t\t};\n\n\t\tthis.resetState = function () {\n\n\t\t\t_currentActiveCubeFace = 0;\n\t\t\t_currentActiveMipmapLevel = 0;\n\t\t\t_currentRenderTarget = null;\n\n\t\t\tstate.reset();\n\t\t\tbindingStates.reset();\n\n\t\t};\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tget coordinateSystem() {\n\n\t\treturn WebGLCoordinateSystem;\n\n\t}\n\n\tget outputColorSpace() {\n\n\t\treturn this._outputColorSpace;\n\n\t}\n\n\tset outputColorSpace( colorSpace ) {\n\n\t\tthis._outputColorSpace = colorSpace;\n\n\t\tconst gl = this.getContext();\n\t\tgl.drawingBufferColorSpace = colorSpace === DisplayP3ColorSpace ? 'display-p3' : 'srgb';\n\t\tgl.unpackColorSpace = ColorManagement.workingColorSpace === LinearDisplayP3ColorSpace ? 'display-p3' : 'srgb';\n\n\t}\n\n}\n\nclass FogExp2 {\n\n\tconstructor( color, density = 0.00025 ) {\n\n\t\tthis.isFogExp2 = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = density;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tname: this.name,\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nclass Fog {\n\n\tconstructor( color, near = 1, far = 1000 ) {\n\n\t\tthis.isFog = true;\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tname: this.name,\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nclass Scene extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isScene = true;\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.environment = null;\n\t\tthis.fog = null;\n\n\t\tthis.backgroundBlurriness = 0;\n\t\tthis.backgroundIntensity = 1;\n\t\tthis.backgroundRotation = new Euler();\n\n\t\tthis.environmentIntensity = 1;\n\t\tthis.environmentRotation = new Euler();\n\n\t\tthis.overrideMaterial = null;\n\n\t\tif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t\t\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\tif ( source.environment !== null ) this.environment = source.environment.clone();\n\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\n\t\tthis.backgroundBlurriness = source.backgroundBlurriness;\n\t\tthis.backgroundIntensity = source.backgroundIntensity;\n\t\tthis.backgroundRotation.copy( source.backgroundRotation );\n\n\t\tthis.environmentIntensity = source.environmentIntensity;\n\t\tthis.environmentRotation.copy( source.environmentRotation );\n\n\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\tif ( this.backgroundBlurriness > 0 ) data.object.backgroundBlurriness = this.backgroundBlurriness;\n\t\tif ( this.backgroundIntensity !== 1 ) data.object.backgroundIntensity = this.backgroundIntensity;\n\t\tdata.object.backgroundRotation = this.backgroundRotation.toArray();\n\n\t\tif ( this.environmentIntensity !== 1 ) data.object.environmentIntensity = this.environmentIntensity;\n\t\tdata.object.environmentRotation = this.environmentRotation.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InterleavedBuffer {\n\n\tconstructor( array, stride ) {\n\n\t\tthis.isInterleavedBuffer = true;\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis._updateRange = { offset: 0, count: - 1 };\n\t\tthis.updateRanges = [];\n\n\t\tthis.version = 0;\n\n\t\tthis.uuid = generateUUID();\n\n\t}\n\n\tonUploadCallback() {}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tget updateRange() {\n\n\t\twarnOnce( 'THREE.InterleavedBuffer: updateRange() is deprecated and will be removed in r169. Use addUpdateRange() instead.' ); // @deprecated, r159\n\t\treturn this._updateRange;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\taddUpdateRange( start, count ) {\n\n\t\tthis.updateRanges.push( { start, count } );\n\n\t}\n\n\tclearUpdateRanges() {\n\n\t\tthis.updateRanges.length = 0;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t}\n\n\tcopyAt( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new this.constructor( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t}\n\n\tonUpload( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n}\n\nconst _vector$6 = /*@__PURE__*/ new Vector3();\n\nclass InterleavedBufferAttribute {\n\n\tconstructor( interleavedBuffer, itemSize, offset, normalized = false ) {\n\n\t\tthis.isInterleavedBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized;\n\n\t}\n\n\tget count() {\n\n\t\treturn this.data.count;\n\n\t}\n\n\tget array() {\n\n\t\treturn this.data.array;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tthis.data.needsUpdate = value;\n\n\t}\n\n\tapplyMatrix4( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tapplyNormalMatrix( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.applyNormalMatrix( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttransformDirection( m ) {\n\n\t\tfor ( let i = 0, l = this.count; i < l; i ++ ) {\n\n\t\t\t_vector$6.fromBufferAttribute( this, i );\n\n\t\t\t_vector$6.transformDirection( m );\n\n\t\t\tthis.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetComponent( index, component ) {\n\n\t\tlet value = this.array[ index * this.data.stride + this.offset + component ];\n\n\t\tif ( this.normalized ) value = denormalize( value, this.array );\n\n\t\treturn value;\n\n\t}\n\n\tsetComponent( index, component, value ) {\n\n\t\tif ( this.normalized ) value = normalize( value, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + component ] = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetX( index, x ) {\n\n\t\tif ( this.normalized ) x = normalize( x, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t}\n\n\tsetY( index, y ) {\n\n\t\tif ( this.normalized ) y = normalize( y, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetZ( index, z ) {\n\n\t\tif ( this.normalized ) z = normalize( z, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetW( index, w ) {\n\n\t\tif ( this.normalized ) w = normalize( w, this.array );\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tgetX( index ) {\n\n\t\tlet x = this.data.array[ index * this.data.stride + this.offset ];\n\n\t\tif ( this.normalized ) x = denormalize( x, this.array );\n\n\t\treturn x;\n\n\t}\n\n\tgetY( index ) {\n\n\t\tlet y = this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t\tif ( this.normalized ) y = denormalize( y, this.array );\n\n\t\treturn y;\n\n\t}\n\n\tgetZ( index ) {\n\n\t\tlet z = this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t\tif ( this.normalized ) z = denormalize( z, this.array );\n\n\t\treturn z;\n\n\t}\n\n\tgetW( index ) {\n\n\t\tlet w = this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t\tif ( this.normalized ) w = denormalize( w, this.array );\n\n\t\treturn w;\n\n\t}\n\n\tsetXY( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t}\n\n\tsetXYZW( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tif ( this.normalized ) {\n\n\t\t\tx = normalize( x, this.array );\n\t\t\ty = normalize( y, this.array );\n\t\t\tz = normalize( z, this.array );\n\t\t\tw = normalize( w, this.array );\n\n\t\t}\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// de-interleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interleaved attribute\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n}\n\nclass SpriteMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isSpriteMaterial = true;\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.rotation = source.rotation;\n\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new Vector3();\nconst _worldScale = /*@__PURE__*/ new Vector3();\nconst _mvPosition = /*@__PURE__*/ new Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _vA = /*@__PURE__*/ new Vector3();\nconst _vB = /*@__PURE__*/ new Vector3();\nconst _vC = /*@__PURE__*/ new Vector3();\n\nconst _uvA = /*@__PURE__*/ new Vector2();\nconst _uvB = /*@__PURE__*/ new Vector2();\nconst _uvC = /*@__PURE__*/ new Vector2();\n\nclass Sprite extends Object3D {\n\n\tconstructor( material = new SpriteMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isSprite = true;\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = material;\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: Triangle.getInterpolation( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\nconst _v1$2 = /*@__PURE__*/ new Vector3();\nconst _v2$1 = /*@__PURE__*/ new Vector3();\n\nclass LOD extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tisLOD: {\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance, level.hysteresis );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\taddLevel( object, distance = 0, hysteresis = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, hysteresis: hysteresis, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t}\n\n\tgetCurrentLevel() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\n\n\tgetObjectForDistance( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance < levelDistance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1$2 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1$2.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2$1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tlet levelDistance = levels[ i ].distance;\n\n\t\t\t\tif ( levels[ i ].object.visible ) {\n\n\t\t\t\t\tlevelDistance -= levelDistance * levels[ i ].hysteresis;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distance >= levelDistance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance,\n\t\t\t\thysteresis: level.hysteresis\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _basePosition = /*@__PURE__*/ new Vector3();\n\nconst _skinIndex = /*@__PURE__*/ new Vector4();\nconst _skinWeight = /*@__PURE__*/ new Vector4();\n\nconst _vector3 = /*@__PURE__*/ new Vector3();\nconst _matrix4 = /*@__PURE__*/ new Matrix4();\nconst _vertex = /*@__PURE__*/ new Vector3();\n\nconst _sphere$4 = /*@__PURE__*/ new Sphere();\nconst _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _ray$2 = /*@__PURE__*/ new Ray();\n\nclass SkinnedMesh extends Mesh {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkinnedMesh = true;\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = AttachedBindMode;\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tthis.getVertexPosition( i, _vertex );\n\t\t\tthis.boundingBox.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i ++ ) {\n\n\t\t\tthis.getVertexPosition( i, _vertex );\n\t\t\tthis.boundingSphere.expandByPoint( _vertex );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst material = this.material;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\tif ( material === undefined ) return;\n\n\t\t// test with bounding sphere in world space\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$4.copy( this.boundingSphere );\n\t\t_sphere$4.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$4 ) === false ) return;\n\n\t\t// convert ray to local space of skinned mesh\n\n\t\t_inverseMatrix$2.copy( matrixWorld ).invert();\n\t\t_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );\n\n\t\t// test with bounding box in local space\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tif ( _ray$2.intersectsBox( this.boundingBox ) === false ) return;\n\n\t\t}\n\n\t\t// test for intersections with geometry\n\n\t\tthis._computeIntersections( raycaster, intersects, _ray$2 );\n\n\t}\n\n\tgetVertexPosition( index, target ) {\n\n\t\tsuper.getVertexPosition( index, target );\n\n\t\tthis.applyBoneTransform( index, target );\n\n\t\treturn target;\n\n\t}\n\n\tbind( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t}\n\n\tpose() {\n\n\t\tthis.skeleton.pose();\n\n\t}\n\n\tnormalizeSkinWeights() {\n\n\t\tconst vector = new Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.fromBufferAttribute( skinWeight, i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.bindMode === AttachedBindMode ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === DetachedBindMode ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t}\n\n\tapplyBoneTransform( index, vector ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.copy( vector ).applyMatrix4( this.bindMatrix );\n\n\t\tvector.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\tvector.addScaledVector( _vector3.copy( _basePosition ).applyMatrix4( _matrix4 ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn vector.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n}\n\nclass Bone extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isBone = true;\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n}\n\nclass DataTexture extends Texture {\n\n\tconstructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isDataTexture = true;\n\n\t\tthis.image = { data: data, width: width, height: height };\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n}\n\nconst _offsetMatrix = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix$1 = /*@__PURE__*/ new Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix$1;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tcomputeBoneTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = Math.ceil( size / 4 ) * 4;\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tboneMatrices.set( this.boneMatrices ); // copy current values\n\n\t\tconst boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\tboneTexture.needsUpdate = true;\n\n\t\tthis.boneMatrices = boneMatrices;\n\t\tthis.boneTexture = boneTexture;\n\n\t\treturn this;\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass InstancedBufferAttribute extends BufferAttribute {\n\n\tconstructor( array, itemSize, normalized, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, itemSize, normalized );\n\n\t\tthis.isInstancedBufferAttribute = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nconst _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();\nconst _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _box3 = /*@__PURE__*/ new Box3();\nconst _identity = /*@__PURE__*/ new Matrix4();\nconst _mesh$1 = /*@__PURE__*/ new Mesh();\nconst _sphere$3 = /*@__PURE__*/ new Sphere();\n\nclass InstancedMesh extends Mesh {\n\n\tconstructor( geometry, material, count ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isInstancedMesh = true;\n\n\t\tthis.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );\n\t\tthis.instanceColor = null;\n\t\tthis.morphTexture = null;\n\n\t\tthis.count = count;\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.setMatrixAt( i, _identity );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tthis.boundingBox.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_box3.copy( geometry.boundingBox ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingBox.union( _box3 );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst count = this.count;\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\tthis.boundingSphere.makeEmpty();\n\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tthis.getMatrixAt( i, _instanceLocalMatrix );\n\n\t\t\t_sphere$3.copy( geometry.boundingSphere ).applyMatrix4( _instanceLocalMatrix );\n\n\t\t\tthis.boundingSphere.union( _sphere$3 );\n\n\t\t}\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.morphTexture !== null ) this.morphTexture = source.morphTexture.clone();\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\tif ( source.boundingBox !== null ) this.boundingBox = source.boundingBox.clone();\n\t\tif ( source.boundingSphere !== null ) this.boundingSphere = source.boundingSphere.clone();\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tgetMatrixAt( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tgetMorphAt( index, object ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tconst array = this.morphTexture.source.data.data;\n\n\t\tconst len = objectInfluences.length + 1; // All influences + the baseInfluenceSum\n\n\t\tconst dataIndex = index * len + 1; // Skip the baseInfluenceSum at the beginning\n\n\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\tobjectInfluences[ i ] = array[ dataIndex + i ];\n\n\t\t}\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh$1.geometry = this.geometry;\n\t\t_mesh$1.material = this.material;\n\n\t\tif ( _mesh$1.material === undefined ) return;\n\n\t\t// test with bounding sphere first\n\n\t\tif ( this.boundingSphere === null ) this.computeBoundingSphere();\n\n\t\t_sphere$3.copy( this.boundingSphere );\n\t\t_sphere$3.applyMatrix4( matrixWorld );\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return;\n\n\t\t// now test each instance\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh$1.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh$1.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t}\n\n\tsetColorAt( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ).fill( 1 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t}\n\n\tsetMatrixAt( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t}\n\n\tsetMorphAt( index, object ) {\n\n\t\tconst objectInfluences = object.morphTargetInfluences;\n\n\t\tconst len = objectInfluences.length + 1; // morphBaseInfluence + all influences\n\n\t\tif ( this.morphTexture === null ) {\n\n\t\t\tthis.morphTexture = new DataTexture( new Float32Array( len * this.count ), len, this.count, RedFormat, FloatType );\n\n\t\t}\n\n\t\tconst array = this.morphTexture.source.data.data;\n\n\t\tlet morphInfluencesSum = 0;\n\n\t\tfor ( let i = 0; i < objectInfluences.length; i ++ ) {\n\n\t\t\tmorphInfluencesSum += objectInfluences[ i ];\n\n\t\t}\n\n\t\tconst morphBaseInfluence = this.geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;\n\n\t\tconst dataIndex = len * index;\n\n\t\tarray[ dataIndex ] = morphBaseInfluence;\n\n\t\tarray.set( objectInfluences, dataIndex + 1 );\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\tif ( this.morphTexture !== null ) {\n\n\t\t\tthis.morphTexture.dispose();\n\t\t\tthis.morphTexture = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction sortOpaque( a, b ) {\n\n\treturn a.z - b.z;\n\n}\n\nfunction sortTransparent( a, b ) {\n\n\treturn b.z - a.z;\n\n}\n\nclass MultiDrawRenderList {\n\n\tconstructor() {\n\n\t\tthis.index = 0;\n\t\tthis.pool = [];\n\t\tthis.list = [];\n\n\t}\n\n\tpush( drawRange, z, index ) {\n\n\t\tconst pool = this.pool;\n\t\tconst list = this.list;\n\t\tif ( this.index >= pool.length ) {\n\n\t\t\tpool.push( {\n\n\t\t\t\tstart: - 1,\n\t\t\t\tcount: - 1,\n\t\t\t\tz: - 1,\n\t\t\t\tindex: - 1,\n\n\t\t\t} );\n\n\t\t}\n\n\t\tconst item = pool[ this.index ];\n\t\tlist.push( item );\n\t\tthis.index ++;\n\n\t\titem.start = drawRange.start;\n\t\titem.count = drawRange.count;\n\t\titem.z = z;\n\t\titem.index = index;\n\n\t}\n\n\treset() {\n\n\t\tthis.list.length = 0;\n\t\tthis.index = 0;\n\n\t}\n\n}\n\nconst _matrix$1 = /*@__PURE__*/ new Matrix4();\nconst _invMatrixWorld = /*@__PURE__*/ new Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new Matrix4();\nconst _whiteColor = /*@__PURE__*/ new Color( 1, 1, 1 );\nconst _projScreenMatrix$2 = /*@__PURE__*/ new Matrix4();\nconst _frustum = /*@__PURE__*/ new Frustum();\nconst _box$1 = /*@__PURE__*/ new Box3();\nconst _sphere$2 = /*@__PURE__*/ new Sphere();\nconst _vector$5 = /*@__PURE__*/ new Vector3();\nconst _forward = /*@__PURE__*/ new Vector3();\nconst _temp = /*@__PURE__*/ new Vector3();\nconst _renderList = /*@__PURE__*/ new MultiDrawRenderList();\nconst _mesh = /*@__PURE__*/ new Mesh();\nconst _batchIntersects = [];\n\n// @TODO: SkinnedMesh support?\n// @TODO: geometry.groups support?\n// @TODO: geometry.drawRange support?\n// @TODO: geometry.morphAttributes support?\n// @TODO: Support uniform parameter per geometry\n// @TODO: Add an \"optimize\" function to pack geometry and remove data gaps\n\n// copies data from attribute \"src\" into \"target\" starting at \"targetOffset\"\nfunction copyAttributeData( src, target, targetOffset = 0 ) {\n\n\tconst itemSize = target.itemSize;\n\tif ( src.isInterleavedBufferAttribute || src.array.constructor !== target.array.constructor ) {\n\n\t\t// use the component getters and setters if the array data cannot\n\t\t// be copied directly\n\t\tconst vertexCount = src.count;\n\t\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\ttarget.setComponent( i + targetOffset, c, src.getComponent( i, c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// faster copy approach using typed array set function\n\t\ttarget.array.set( src.array, targetOffset * itemSize );\n\n\t}\n\n\ttarget.needsUpdate = true;\n\n}\n\nclass BatchedMesh extends Mesh {\n\n\tget maxInstanceCount() {\n\n\t\treturn this._maxInstanceCount;\n\n\t}\n\n\tconstructor( maxInstanceCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material ) {\n\n\t\tsuper( new BufferGeometry(), material );\n\n\t\tthis.isBatchedMesh = true;\n\t\tthis.perObjectFrustumCulled = true;\n\t\tthis.sortObjects = true;\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\t\tthis.customSort = null;\n\n\t\t// stores visible, active, and geometry id per object\n\t\tthis._drawInfo = [];\n\n\t\t// geometry information\n\t\tthis._drawRanges = [];\n\t\tthis._reservedRanges = [];\n\t\tthis._bounds = [];\n\n\t\tthis._maxInstanceCount = maxInstanceCount;\n\t\tthis._maxVertexCount = maxVertexCount;\n\t\tthis._maxIndexCount = maxIndexCount;\n\n\t\tthis._geometryInitialized = false;\n\t\tthis._geometryCount = 0;\n\t\tthis._multiDrawCounts = new Int32Array( maxInstanceCount );\n\t\tthis._multiDrawStarts = new Int32Array( maxInstanceCount );\n\t\tthis._multiDrawCount = 0;\n\t\tthis._multiDrawInstances = null;\n\t\tthis._visibilityChanged = true;\n\n\t\t// Local matrix per geometry by using data texture\n\t\tthis._matricesTexture = null;\n\t\tthis._indirectTexture = null;\n\t\tthis._colorsTexture = null;\n\n\t\tthis._initMatricesTexture();\n\t\tthis._initIndirectTexture();\n\n\t}\n\n\t_initMatricesTexture() {\n\n\t\t// layout (1 matrix = 4 pixels)\n\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t// with 8x8 pixel texture max 16 matrices * 4 pixels = (8 * 8)\n\t\t// 16x16 pixel texture max 64 matrices * 4 pixels = (16 * 16)\n\t\t// 32x32 pixel texture max 256 matrices * 4 pixels = (32 * 32)\n\t\t// 64x64 pixel texture max 1024 matrices * 4 pixels = (64 * 64)\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount * 4 ); // 4 pixels needed for 1 matrix\n\t\tsize = Math.ceil( size / 4 ) * 4;\n\t\tsize = Math.max( size, 4 );\n\n\t\tconst matricesArray = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\tconst matricesTexture = new DataTexture( matricesArray, size, size, RGBAFormat, FloatType );\n\n\t\tthis._matricesTexture = matricesTexture;\n\n\t}\n\n\t_initIndirectTexture() {\n\n\t\tlet size = Math.sqrt( this._maxInstanceCount );\n\t\tsize = Math.ceil( size );\n\n\t\tconst indirectArray = new Uint32Array( size * size );\n\t\tconst indirectTexture = new DataTexture( indirectArray, size, size, RedIntegerFormat, UnsignedIntType );\n\n\t\tthis._indirectTexture = indirectTexture;\n\n\t}\n\n\t_initColorsTexture() {\n\n\t\tlet size = Math.sqrt( this._maxIndexCount );\n\t\tsize = Math.ceil( size );\n\n\t\t// 4 floats per RGBA pixel initialized to white\n\t\tconst colorsArray = new Float32Array( size * size * 4 ).fill( 1 );\n\t\tconst colorsTexture = new DataTexture( colorsArray, size, size, RGBAFormat, FloatType );\n\t\tcolorsTexture.colorSpace = ColorManagement.workingColorSpace;\n\n\t\tthis._colorsTexture = colorsTexture;\n\n\t}\n\n\t_initializeGeometry( reference ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst maxVertexCount = this._maxVertexCount;\n\t\tconst maxIndexCount = this._maxIndexCount;\n\t\tif ( this._geometryInitialized === false ) {\n\n\t\t\tfor ( const attributeName in reference.attributes ) {\n\n\t\t\t\tconst srcAttribute = reference.getAttribute( attributeName );\n\t\t\t\tconst { array, itemSize, normalized } = srcAttribute;\n\n\t\t\t\tconst dstArray = new array.constructor( maxVertexCount * itemSize );\n\t\t\t\tconst dstAttribute = new BufferAttribute( dstArray, itemSize, normalized );\n\n\t\t\t\tgeometry.setAttribute( attributeName, dstAttribute );\n\n\t\t\t}\n\n\t\t\tif ( reference.getIndex() !== null ) {\n\n\t\t\t\t// Reserve last u16 index for primitive restart.\n\t\t\t\tconst indexArray = maxVertexCount > 65535\n\t\t\t\t\t? new Uint32Array( maxIndexCount )\n\t\t\t\t\t: new Uint16Array( maxIndexCount );\n\n\t\t\t\tgeometry.setIndex( new BufferAttribute( indexArray, 1 ) );\n\n\t\t\t}\n\n\t\t\tthis._geometryInitialized = true;\n\n\t\t}\n\n\t}\n\n\t// Make sure the geometry is compatible with the existing combined geometry attributes\n\t_validateGeometry( geometry ) {\n\n\t\t// check to ensure the geometries are using consistent attributes and indices\n\t\tconst batchGeometry = this.geometry;\n\t\tif ( Boolean( geometry.getIndex() ) !== Boolean( batchGeometry.getIndex() ) ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: All geometries must consistently have \"index\".' );\n\n\t\t}\n\n\t\tfor ( const attributeName in batchGeometry.attributes ) {\n\n\t\t\tif ( ! geometry.hasAttribute( attributeName ) ) {\n\n\t\t\t\tthrow new Error( `BatchedMesh: Added geometry missing \"${ attributeName }\". All geometries must have consistent attributes.` );\n\n\t\t\t}\n\n\t\t\tconst srcAttribute = geometry.getAttribute( attributeName );\n\t\t\tconst dstAttribute = batchGeometry.getAttribute( attributeName );\n\t\t\tif ( srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized ) {\n\n\t\t\t\tthrow new Error( 'BatchedMesh: All attributes must have a consistent itemSize and normalized value.' );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tsetCustomSort( func ) {\n\n\t\tthis.customSort = func;\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst geometryCount = this._geometryCount;\n\t\tconst boundingBox = this.boundingBox;\n\t\tconst drawInfo = this._drawInfo;\n\n\t\tboundingBox.makeEmpty();\n\t\tfor ( let i = 0; i < geometryCount; i ++ ) {\n\n\t\t\tif ( drawInfo[ i ].active === false ) continue;\n\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\tthis.getBoundingBoxAt( geometryId, _box$1 ).applyMatrix4( _matrix$1 );\n\t\t\tboundingBox.union( _box$1 );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tconst boundingSphere = this.boundingSphere;\n\t\tconst drawInfo = this._drawInfo;\n\n\t\tboundingSphere.makeEmpty();\n\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( drawInfo[ i ].active === false ) continue;\n\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\t\t\tboundingSphere.union( _sphere$2 );\n\n\t\t}\n\n\t}\n\n\taddInstance( geometryId ) {\n\n\t\t// ensure we're not over geometry\n\t\tif ( this._drawInfo.length >= this._maxInstanceCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum item count reached.' );\n\n\t\t}\n\n\t\tthis._drawInfo.push( {\n\n\t\t\tvisible: true,\n\t\t\tactive: true,\n\t\t\tgeometryIndex: geometryId,\n\n\t\t} );\n\n\t\t// initialize the matrix\n\t\tconst drawId = this._drawInfo.length - 1;\n\t\tconst matricesTexture = this._matricesTexture;\n\t\tconst matricesArray = matricesTexture.image.data;\n\t\t_identityMatrix.toArray( matricesArray, drawId * 16 );\n\t\tmatricesTexture.needsUpdate = true;\n\n\t\tconst colorsTexture = this._colorsTexture;\n\t\tif ( colorsTexture ) {\n\n\t\t\t_whiteColor.toArray( colorsTexture.image.data, drawId * 4 );\n\t\t\tcolorsTexture.needsUpdate = true;\n\n\t\t}\n\n\t\treturn drawId;\n\n\t}\n\n\taddGeometry( geometry, vertexCount = - 1, indexCount = - 1 ) {\n\n\t\tthis._initializeGeometry( geometry );\n\n\t\tthis._validateGeometry( geometry );\n\n\t\t// ensure we're not over geometry\n\t\tif ( this._drawInfo.length >= this._maxInstanceCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum item count reached.' );\n\n\t\t}\n\n\t\t// get the necessary range fo the geometry\n\t\tconst reservedRange = {\n\t\t\tvertexStart: - 1,\n\t\t\tvertexCount: - 1,\n\t\t\tindexStart: - 1,\n\t\t\tindexCount: - 1,\n\t\t};\n\n\t\tlet lastRange = null;\n\t\tconst reservedRanges = this._reservedRanges;\n\t\tconst drawRanges = this._drawRanges;\n\t\tconst bounds = this._bounds;\n\t\tif ( this._geometryCount !== 0 ) {\n\n\t\t\tlastRange = reservedRanges[ reservedRanges.length - 1 ];\n\n\t\t}\n\n\t\tif ( vertexCount === - 1 ) {\n\n\t\t\treservedRange.vertexCount = geometry.getAttribute( 'position' ).count;\n\n\t\t} else {\n\n\t\t\treservedRange.vertexCount = vertexCount;\n\n\t\t}\n\n\t\tif ( lastRange === null ) {\n\n\t\t\treservedRange.vertexStart = 0;\n\n\t\t} else {\n\n\t\t\treservedRange.vertexStart = lastRange.vertexStart + lastRange.vertexCount;\n\n\t\t}\n\n\t\tconst index = geometry.getIndex();\n\t\tconst hasIndex = index !== null;\n\t\tif ( hasIndex ) {\n\n\t\t\tif ( indexCount\t=== - 1 ) {\n\n\t\t\t\treservedRange.indexCount = index.count;\n\n\t\t\t} else {\n\n\t\t\t\treservedRange.indexCount = indexCount;\n\n\t\t\t}\n\n\t\t\tif ( lastRange === null ) {\n\n\t\t\t\treservedRange.indexStart = 0;\n\n\t\t\t} else {\n\n\t\t\t\treservedRange.indexStart = lastRange.indexStart + lastRange.indexCount;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif (\n\t\t\treservedRange.indexStart !== - 1 &&\n\t\t\treservedRange.indexStart + reservedRange.indexCount > this._maxIndexCount ||\n\t\t\treservedRange.vertexStart + reservedRange.vertexCount > this._maxVertexCount\n\t\t) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Reserved space request exceeds the maximum buffer size.' );\n\n\t\t}\n\n\t\t// update id\n\t\tconst geometryId = this._geometryCount;\n\t\tthis._geometryCount ++;\n\n\t\t// add the reserved range and draw range objects\n\t\treservedRanges.push( reservedRange );\n\t\tdrawRanges.push( {\n\t\t\tstart: hasIndex ? reservedRange.indexStart : reservedRange.vertexStart,\n\t\t\tcount: - 1\n\t\t} );\n\t\tbounds.push( {\n\t\t\tboxInitialized: false,\n\t\t\tbox: new Box3(),\n\n\t\t\tsphereInitialized: false,\n\t\t\tsphere: new Sphere()\n\t\t} );\n\n\t\t// update the geometry\n\t\tthis.setGeometryAt( geometryId, geometry );\n\n\t\treturn geometryId;\n\n\t}\n\n\tsetGeometryAt( geometryId, geometry ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Maximum geometry count reached.' );\n\n\t\t}\n\n\t\tthis._validateGeometry( geometry );\n\n\t\tconst batchGeometry = this.geometry;\n\t\tconst hasIndex = batchGeometry.getIndex() !== null;\n\t\tconst dstIndex = batchGeometry.getIndex();\n\t\tconst srcIndex = geometry.getIndex();\n\t\tconst reservedRange = this._reservedRanges[ geometryId ];\n\t\tif (\n\t\t\thasIndex &&\n\t\t\tsrcIndex.count > reservedRange.indexCount ||\n\t\t\tgeometry.attributes.position.count > reservedRange.vertexCount\n\t\t) {\n\n\t\t\tthrow new Error( 'BatchedMesh: Reserved space not large enough for provided geometry.' );\n\n\t\t}\n\n\t\t// copy geometry over\n\t\tconst vertexStart = reservedRange.vertexStart;\n\t\tconst vertexCount = reservedRange.vertexCount;\n\t\tfor ( const attributeName in batchGeometry.attributes ) {\n\n\t\t\t// copy attribute data\n\t\t\tconst srcAttribute = geometry.getAttribute( attributeName );\n\t\t\tconst dstAttribute = batchGeometry.getAttribute( attributeName );\n\t\t\tcopyAttributeData( srcAttribute, dstAttribute, vertexStart );\n\n\t\t\t// fill the rest in with zeroes\n\t\t\tconst itemSize = srcAttribute.itemSize;\n\t\t\tfor ( let i = srcAttribute.count, l = vertexCount; i < l; i ++ ) {\n\n\t\t\t\tconst index = vertexStart + i;\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tdstAttribute.setComponent( index, c, 0 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdstAttribute.needsUpdate = true;\n\t\t\tdstAttribute.addUpdateRange( vertexStart * itemSize, vertexCount * itemSize );\n\n\t\t}\n\n\t\t// copy index\n\t\tif ( hasIndex ) {\n\n\t\t\tconst indexStart = reservedRange.indexStart;\n\n\t\t\t// copy index data over\n\t\t\tfor ( let i = 0; i < srcIndex.count; i ++ ) {\n\n\t\t\t\tdstIndex.setX( indexStart + i, vertexStart + srcIndex.getX( i ) );\n\n\t\t\t}\n\n\t\t\t// fill the rest in with zeroes\n\t\t\tfor ( let i = srcIndex.count, l = reservedRange.indexCount; i < l; i ++ ) {\n\n\t\t\t\tdstIndex.setX( indexStart + i, vertexStart );\n\n\t\t\t}\n\n\t\t\tdstIndex.needsUpdate = true;\n\t\t\tdstIndex.addUpdateRange( indexStart, reservedRange.indexCount );\n\n\t\t}\n\n\t\t// store the bounding boxes\n\t\tconst bound = this._bounds[ geometryId ];\n\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\tbound.box.copy( geometry.boundingBox );\n\t\t\tbound.boxInitialized = true;\n\n\t\t} else {\n\n\t\t\tbound.boxInitialized = false;\n\n\t\t}\n\n\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\tbound.sphere.copy( geometry.boundingSphere );\n\t\t\tbound.sphereInitialized = true;\n\n\t\t} else {\n\n\t\t\tbound.sphereInitialized = false;\n\n\t\t}\n\n\t\t// set drawRange count\n\t\tconst drawRange = this._drawRanges[ geometryId ];\n\t\tconst posAttr = geometry.getAttribute( 'position' );\n\t\tdrawRange.count = hasIndex ? srcIndex.count : posAttr.count;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn geometryId;\n\n\t}\n\n\t/*\n\tdeleteGeometry( geometryId ) {\n\n\t\t// TODO: delete geometry and associated instances\n\n\t}\n\t*/\n\n\t/*\n\tdeleteInstance( instanceId ) {\n\n\t\t// Note: User needs to call optimize() afterward to pack the data.\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdrawInfo[ instanceId ].active = false;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\t*/\n\n\t// get bounding box and compute it if it doesn't exist\n\tgetBoundingBoxAt( geometryId, target ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// compute bounding box\n\t\tconst bound = this._bounds[ geometryId ];\n\t\tconst box = bound.box;\n\t\tconst geometry = this.geometry;\n\t\tif ( bound.boxInitialized === false ) {\n\n\t\t\tbox.makeEmpty();\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst drawRange = this._drawRanges[ geometryId ];\n\t\t\tfor ( let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i ++ ) {\n\n\t\t\t\tlet iv = i;\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tiv = index.getX( iv );\n\n\t\t\t\t}\n\n\t\t\t\tbox.expandByPoint( _vector$5.fromBufferAttribute( position, iv ) );\n\n\t\t\t}\n\n\t\t\tbound.boxInitialized = true;\n\n\t\t}\n\n\t\ttarget.copy( box );\n\t\treturn target;\n\n\t}\n\n\t// get bounding sphere and compute it if it doesn't exist\n\tgetBoundingSphereAt( geometryId, target ) {\n\n\t\tif ( geometryId >= this._geometryCount ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// compute bounding sphere\n\t\tconst bound = this._bounds[ geometryId ];\n\t\tconst sphere = bound.sphere;\n\t\tconst geometry = this.geometry;\n\t\tif ( bound.sphereInitialized === false ) {\n\n\t\t\tsphere.makeEmpty();\n\n\t\t\tthis.getBoundingBoxAt( geometryId, _box$1 );\n\t\t\t_box$1.getCenter( sphere.center );\n\n\t\t\tconst index = geometry.index;\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst drawRange = this._drawRanges[ geometryId ];\n\n\t\t\tlet maxRadiusSq = 0;\n\t\t\tfor ( let i = drawRange.start, l = drawRange.start + drawRange.count; i < l; i ++ ) {\n\n\t\t\t\tlet iv = i;\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tiv = index.getX( iv );\n\n\t\t\t\t}\n\n\t\t\t\t_vector$5.fromBufferAttribute( position, iv );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, sphere.center.distanceToSquared( _vector$5 ) );\n\n\t\t\t}\n\n\t\t\tsphere.radius = Math.sqrt( maxRadiusSq );\n\t\t\tbound.sphereInitialized = true;\n\n\t\t}\n\n\t\ttarget.copy( sphere );\n\t\treturn target;\n\n\t}\n\n\tsetMatrixAt( instanceId, matrix ) {\n\n\t\t// @TODO: Map geometryId to index of the arrays because\n\t\t// optimize() can make geometryId mismatch the index\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst matricesTexture = this._matricesTexture;\n\t\tconst matricesArray = this._matricesTexture.image.data;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tmatrix.toArray( matricesArray, instanceId * 16 );\n\t\tmatricesTexture.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetMatrixAt( instanceId, matrix ) {\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst matricesArray = this._matricesTexture.image.data;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn matrix.fromArray( matricesArray, instanceId * 16 );\n\n\t}\n\n\tsetColorAt( instanceId, color ) {\n\n\t\tif ( this._colorsTexture === null ) {\n\n\t\t\tthis._initColorsTexture();\n\n\t\t}\n\n\t\t// @TODO: Map id to index of the arrays because\n\t\t// optimize() can make id mismatch the index\n\n\t\tconst colorsTexture = this._colorsTexture;\n\t\tconst colorsArray = this._colorsTexture.image.data;\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tcolor.toArray( colorsArray, instanceId * 4 );\n\t\tcolorsTexture.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetColorAt( instanceId, color ) {\n\n\t\tconst colorsArray = this._colorsTexture.image.data;\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\treturn color.fromArray( colorsArray, instanceId * 4 );\n\n\t}\n\n\tsetVisibleAt( instanceId, value ) {\n\n\t\t// if the geometry is out of range, not active, or visibility state\n\t\t// does not change then return early\n\t\tconst drawInfo = this._drawInfo;\n\t\tif (\n\t\t\tinstanceId >= drawInfo.length ||\n\t\t\tdrawInfo[ instanceId ].active === false ||\n\t\t\tdrawInfo[ instanceId ].visible === value\n\t\t) {\n\n\t\t\treturn this;\n\n\t\t}\n\n\t\tdrawInfo[ instanceId ].visible = value;\n\t\tthis._visibilityChanged = true;\n\n\t\treturn this;\n\n\t}\n\n\tgetVisibleAt( instanceId ) {\n\n\t\t// return early if the geometry is out of range or not active\n\t\tconst drawInfo = this._drawInfo;\n\t\tif ( instanceId >= drawInfo.length || drawInfo[ instanceId ].active === false ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn drawInfo[ instanceId ].visible;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst drawRanges = this._drawRanges;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst batchGeometry = this.geometry;\n\n\t\t// iterate over each geometry\n\t\t_mesh.material = this.material;\n\t\t_mesh.geometry.index = batchGeometry.index;\n\t\t_mesh.geometry.attributes = batchGeometry.attributes;\n\t\tif ( _mesh.geometry.boundingBox === null ) {\n\n\t\t\t_mesh.geometry.boundingBox = new Box3();\n\n\t\t}\n\n\t\tif ( _mesh.geometry.boundingSphere === null ) {\n\n\t\t\t_mesh.geometry.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( ! drawInfo[ i ].visible || ! drawInfo[ i ].active ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\t\t\tconst drawRange = drawRanges[ geometryId ];\n\t\t\t_mesh.geometry.setDrawRange( drawRange.start, drawRange.count );\n\n\t\t\t// ge the intersects\n\t\t\tthis.getMatrixAt( i, _mesh.matrixWorld ).premultiply( matrixWorld );\n\t\t\tthis.getBoundingBoxAt( geometryId, _mesh.geometry.boundingBox );\n\t\t\tthis.getBoundingSphereAt( geometryId, _mesh.geometry.boundingSphere );\n\t\t\t_mesh.raycast( raycaster, _batchIntersects );\n\n\t\t\t// add batch id to the intersects\n\t\t\tfor ( let j = 0, l = _batchIntersects.length; j < l; j ++ ) {\n\n\t\t\t\tconst intersect = _batchIntersects[ j ];\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersect.batchId = i;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_batchIntersects.length = 0;\n\n\t\t}\n\n\t\t_mesh.material = null;\n\t\t_mesh.geometry.index = null;\n\t\t_mesh.geometry.attributes = {};\n\t\t_mesh.geometry.setDrawRange( 0, Infinity );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.geometry = source.geometry.clone();\n\t\tthis.perObjectFrustumCulled = source.perObjectFrustumCulled;\n\t\tthis.sortObjects = source.sortObjects;\n\t\tthis.boundingBox = source.boundingBox !== null ? source.boundingBox.clone() : null;\n\t\tthis.boundingSphere = source.boundingSphere !== null ? source.boundingSphere.clone() : null;\n\n\t\tthis._drawRanges = source._drawRanges.map( range => ( { ...range } ) );\n\t\tthis._reservedRanges = source._reservedRanges.map( range => ( { ...range } ) );\n\n\t\tthis._drawInfo = source._drawInfo.map( inf => ( { ...inf } ) );\n\t\tthis._bounds = source._bounds.map( bound => ( {\n\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\tbox: bound.box.clone(),\n\n\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\tsphere: bound.sphere.clone()\n\t\t} ) );\n\n\t\tthis._maxInstanceCount = source._maxInstanceCount;\n\t\tthis._maxVertexCount = source._maxVertexCount;\n\t\tthis._maxIndexCount = source._maxIndexCount;\n\n\t\tthis._geometryInitialized = source._geometryInitialized;\n\t\tthis._geometryCount = source._geometryCount;\n\t\tthis._multiDrawCounts = source._multiDrawCounts.slice();\n\t\tthis._multiDrawStarts = source._multiDrawStarts.slice();\n\n\t\tthis._matricesTexture = source._matricesTexture.clone();\n\t\tthis._matricesTexture.image.data = this._matricesTexture.image.data.slice();\n\n\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\tthis._colorsTexture = source._colorsTexture.clone();\n\t\t\tthis._colorsTexture.image.data = this._colorsTexture.image.data.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\t// Assuming the geometry is not shared with other meshes\n\t\tthis.geometry.dispose();\n\n\t\tthis._matricesTexture.dispose();\n\t\tthis._matricesTexture = null;\n\n\t\tthis._indirectTexture.dispose();\n\t\tthis._indirectTexture = null;\n\n\t\tif ( this._colorsTexture !== null ) {\n\n\t\t\tthis._colorsTexture.dispose();\n\t\t\tthis._colorsTexture = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tonBeforeRender( renderer, scene, camera, geometry, material/*, _group*/ ) {\n\n\t\t// if visibility has not changed and frustum culling and object sorting is not required\n\t\t// then skip iterating over all items\n\t\tif ( ! this._visibilityChanged && ! this.perObjectFrustumCulled && ! this.sortObjects ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// the indexed version of the multi draw function requires specifying the start\n\t\t// offset in bytes.\n\t\tconst index = geometry.getIndex();\n\t\tconst bytesPerElement = index === null ? 1 : index.array.BYTES_PER_ELEMENT;\n\n\t\tconst drawInfo = this._drawInfo;\n\t\tconst multiDrawStarts = this._multiDrawStarts;\n\t\tconst multiDrawCounts = this._multiDrawCounts;\n\t\tconst drawRanges = this._drawRanges;\n\t\tconst perObjectFrustumCulled = this.perObjectFrustumCulled;\n\t\tconst indirectTexture = this._indirectTexture;\n\t\tconst indirectArray = indirectTexture.image.data;\n\n\t\t// prepare the frustum in the local frame\n\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t_projScreenMatrix$2\n\t\t\t\t.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse )\n\t\t\t\t.multiply( this.matrixWorld );\n\t\t\t_frustum.setFromProjectionMatrix(\n\t\t\t\t_projScreenMatrix$2,\n\t\t\t\trenderer.coordinateSystem\n\t\t\t);\n\n\t\t}\n\n\t\tlet count = 0;\n\t\tif ( this.sortObjects ) {\n\n\t\t\t// get the camera position in the local frame\n\t\t\t_invMatrixWorld.copy( this.matrixWorld ).invert();\n\t\t\t_vector$5.setFromMatrixPosition( camera.matrixWorld ).applyMatrix4( _invMatrixWorld );\n\t\t\t_forward.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ).transformDirection( _invMatrixWorld );\n\n\t\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\t\tif ( drawInfo[ i ].visible && drawInfo[ i ].active ) {\n\n\t\t\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\n\t\t\t\t\t// get the bounds in world space\n\t\t\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\n\t\t\t\t\t// determine whether the batched geometry is within the frustum\n\t\t\t\t\tlet culled = false;\n\t\t\t\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t\t\t\tculled = ! _frustum.intersectsSphere( _sphere$2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! culled ) {\n\n\t\t\t\t\t\t// get the distance from camera used for sorting\n\t\t\t\t\t\tconst z = _temp.subVectors( _sphere$2.center, _vector$5 ).dot( _forward );\n\t\t\t\t\t\t_renderList.push( drawRanges[ geometryId ], z, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Sort the draw ranges and prep for rendering\n\t\t\tconst list = _renderList.list;\n\t\t\tconst customSort = this.customSort;\n\t\t\tif ( customSort === null ) {\n\n\t\t\t\tlist.sort( material.transparent ? sortTransparent : sortOpaque );\n\n\t\t\t} else {\n\n\t\t\t\tcustomSort.call( this, list, camera );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = list.length; i < l; i ++ ) {\n\n\t\t\t\tconst item = list[ i ];\n\t\t\t\tmultiDrawStarts[ count ] = item.start * bytesPerElement;\n\t\t\t\tmultiDrawCounts[ count ] = item.count;\n\t\t\t\tindirectArray[ count ] = item.index;\n\t\t\t\tcount ++;\n\n\t\t\t}\n\n\t\t\t_renderList.reset();\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\t\tif ( drawInfo[ i ].visible && drawInfo[ i ].active ) {\n\n\t\t\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\n\t\t\t\t\t// determine whether the batched geometry is within the frustum\n\t\t\t\t\tlet culled = false;\n\t\t\t\t\tif ( perObjectFrustumCulled ) {\n\n\t\t\t\t\t\t// get the bounds in world space\n\t\t\t\t\t\tthis.getMatrixAt( i, _matrix$1 );\n\t\t\t\t\t\tthis.getBoundingSphereAt( geometryId, _sphere$2 ).applyMatrix4( _matrix$1 );\n\t\t\t\t\t\tculled = ! _frustum.intersectsSphere( _sphere$2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! culled ) {\n\n\t\t\t\t\t\tconst range = drawRanges[ geometryId ];\n\t\t\t\t\t\tmultiDrawStarts[ count ] = range.start * bytesPerElement;\n\t\t\t\t\t\tmultiDrawCounts[ count ] = range.count;\n\t\t\t\t\t\tindirectArray[ count ] = i;\n\t\t\t\t\t\tcount ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tindirectTexture.needsUpdate = true;\n\t\tthis._multiDrawCount = count;\n\t\tthis._visibilityChanged = false;\n\n\t}\n\n\tonBeforeShadow( renderer, object, camera, shadowCamera, geometry, depthMaterial/* , group */ ) {\n\n\t\tthis.onBeforeRender( renderer, null, shadowCamera, geometry, depthMaterial );\n\n\t}\n\n}\n\nclass LineBasicMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineBasicMaterial = true;\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vStart = /*@__PURE__*/ new Vector3();\nconst _vEnd = /*@__PURE__*/ new Vector3();\n\nconst _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _ray$1 = /*@__PURE__*/ new Ray();\nconst _sphere$1 = /*@__PURE__*/ new Sphere();\n\nconst _intersectPointOnRay = /*@__PURE__*/ new Vector3();\nconst _intersectPointOnSegment = /*@__PURE__*/ new Vector3();\n\nclass Line extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isLine = true;\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [ 0 ];\n\n\t\t\tfor ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t_vStart.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t_vEnd.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i ] += _vStart.distanceTo( _vEnd );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Line.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere$1.copy( geometry.boundingSphere );\n\t\t_sphere$1.applyMatrix4( matrixWorld );\n\t\t_sphere$1.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix$1.copy( matrixWorld ).invert();\n\t\t_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst step = this.isLineSegments ? 2 : 1;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst a = index.getX( i );\n\t\t\t\tconst b = index.getX( i + 1 );\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, a, b );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isLineLoop ) {\n\n\t\t\t\tconst a = index.getX( end - 1 );\n\t\t\t\tconst b = index.getX( start );\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, a, b );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end - 1; i < l; i += step ) {\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, i, i + 1 );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.isLineLoop ) {\n\n\t\t\t\tconst intersect = checkIntersection( this, raycaster, _ray$1, localThresholdSq, end - 1, start );\n\n\t\t\t\tif ( intersect ) {\n\n\t\t\t\t\tintersects.push( intersect );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction checkIntersection( object, raycaster, ray, thresholdSq, a, b ) {\n\n\tconst positionAttribute = object.geometry.attributes.position;\n\n\t_vStart.fromBufferAttribute( positionAttribute, a );\n\t_vEnd.fromBufferAttribute( positionAttribute, b );\n\n\tconst distSq = ray.distanceSqToSegment( _vStart, _vEnd, _intersectPointOnRay, _intersectPointOnSegment );\n\n\tif ( distSq > thresholdSq ) return;\n\n\t_intersectPointOnRay.applyMatrix4( object.matrixWorld ); // Move back to world space for distance calculation\n\n\tconst distance = raycaster.ray.origin.distanceTo( _intersectPointOnRay );\n\n\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\treturn {\n\n\t\tdistance: distance,\n\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t// point: raycaster.ray.at( distance ),\n\t\tpoint: _intersectPointOnSegment.clone().applyMatrix4( object.matrixWorld ),\n\t\tindex: a,\n\t\tface: null,\n\t\tfaceIndex: null,\n\t\tobject: object\n\n\t};\n\n}\n\nconst _start = /*@__PURE__*/ new Vector3();\nconst _end = /*@__PURE__*/ new Vector3();\n\nclass LineSegments extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineSegments = true;\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\t// we assume non-indexed geometry\n\n\t\tif ( geometry.index === null ) {\n\n\t\t\tconst positionAttribute = geometry.attributes.position;\n\t\t\tconst lineDistances = [];\n\n\t\t\tfor ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t_start.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t_end.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineLoop extends Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineLoop = true;\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nclass PointsMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isPointsMaterial = true;\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _inverseMatrix = /*@__PURE__*/ new Matrix4();\nconst _ray = /*@__PURE__*/ new Ray();\nconst _sphere = /*@__PURE__*/ new Sphere();\nconst _position$2 = /*@__PURE__*/ new Vector3();\n\nclass Points extends Object3D {\n\n\tconstructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {\n\n\t\tsuper();\n\n\t\tthis.isPoints = true;\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry;\n\t\tthis.material = material;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.material = Array.isArray( source.material ) ? source.material.slice() : source.material;\n\t\tthis.geometry = source.geometry;\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst geometry = this.geometry;\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst threshold = raycaster.params.Points.threshold;\n\t\tconst drawRange = geometry.drawRange;\n\n\t\t// Checking boundingSphere distance to ray\n\n\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t_sphere.copy( geometry.boundingSphere );\n\t\t_sphere.applyMatrix4( matrixWorld );\n\t\t_sphere.radius += threshold;\n\n\t\tif ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;\n\n\t\t//\n\n\t\t_inverseMatrix.copy( matrixWorld ).invert();\n\t\t_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );\n\n\t\tconst localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\tconst localThresholdSq = localThreshold * localThreshold;\n\n\t\tconst index = geometry.index;\n\t\tconst attributes = geometry.attributes;\n\t\tconst positionAttribute = attributes.position;\n\n\t\tif ( index !== null ) {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, il = end; i < il; i ++ ) {\n\n\t\t\t\tconst a = index.getX( i );\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, a );\n\n\t\t\t\ttestPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst start = Math.max( 0, drawRange.start );\n\t\t\tconst end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( let i = start, l = end; i < l; i ++ ) {\n\n\t\t\t\t_position$2.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\ttestPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdateMorphTargets() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst morphAttributes = geometry.morphAttributes;\n\t\tconst keys = Object.keys( morphAttributes );\n\n\t\tif ( keys.length > 0 ) {\n\n\t\t\tconst morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\tfor ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\tconst name = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {\n\n\tconst rayPointDistanceSq = _ray.distanceSqToPoint( point );\n\n\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\tconst intersectPoint = new Vector3();\n\n\t\t_ray.closestPointToPoint( point, intersectPoint );\n\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\tpoint: intersectPoint,\n\t\t\tindex: index,\n\t\t\tface: null,\n\t\t\tobject: object\n\n\t\t} );\n\n\t}\n\n}\n\nclass VideoTexture extends Texture {\n\n\tconstructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isVideoTexture = true;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nclass FramebufferTexture extends Texture {\n\n\tconstructor( width, height ) {\n\n\t\tsuper( { width, height } );\n\n\t\tthis.isFramebufferTexture = true;\n\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.minFilter = NearestFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nclass CompressedTexture extends Texture {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );\n\n\t\tthis.isCompressedTexture = true;\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nclass CompressedArrayTexture extends CompressedTexture {\n\n\tconstructor( mipmaps, width, height, depth, format, type ) {\n\n\t\tsuper( mipmaps, width, height, format, type );\n\n\t\tthis.isCompressedArrayTexture = true;\n\t\tthis.image.depth = depth;\n\t\tthis.wrapR = ClampToEdgeWrapping;\n\n\t\tthis.layerUpdates = new Set();\n\n\t}\n\n\taddLayerUpdate( layerIndex ) {\n\n\t\tthis.layerUpdates.add( layerIndex );\n\n\t}\n\n\tclearLayerUpdates() {\n\n\t\tthis.layerUpdates.clear();\n\n\t}\n\n}\n\nclass CompressedCubeTexture extends CompressedTexture {\n\n\tconstructor( images, format, type ) {\n\n\t\tsuper( undefined, images[ 0 ].width, images[ 0 ].height, format, type, CubeReflectionMapping );\n\n\t\tthis.isCompressedCubeTexture = true;\n\t\tthis.isCubeTexture = true;\n\n\t\tthis.image = images;\n\n\t}\n\n}\n\nclass CanvasTexture extends Texture {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.isCanvasTexture = true;\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nclass Curve {\n\n\tconstructor() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t}\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t}\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\t// Get total curve arc length\n\n\tgetLength() {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t}\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths( divisions = this.arcLengthDivisions ) {\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t}\n\n\tupdateArcLengths() {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t}\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t}\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t}\n\n\tcomputeFrenetFrames( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new Vector3();\n\t\tconst mat = new Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new Vector3() );\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new Vector3();\n\t\tbinormals[ 0 ] = new Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.6,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass EllipseCurve extends Curve {\n\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.isEllipseCurve = true;\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX;\n\t\tthis.aY = aY;\n\n\t\tthis.xRadius = xRadius;\n\t\tthis.yRadius = yRadius;\n\n\t\tthis.aStartAngle = aStartAngle;\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\tthis.aClockwise = aClockwise;\n\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass ArcCurve extends EllipseCurve {\n\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.isArcCurve = true;\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = /*@__PURE__*/ new Vector3();\nconst px = /*@__PURE__*/ new CubicPoly();\nconst py = /*@__PURE__*/ new CubicPoly();\nconst pz = /*@__PURE__*/ new CubicPoly();\n\nclass CatmullRomCurve3 extends Curve {\n\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\tthis.isCatmullRomCurve3 = true;\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Bezier Curves formulas obtained from\n * https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\nclass CubicBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve = true;\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass CubicBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isCubicBezierCurve3 = true;\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve extends Curve {\n\n\tconstructor( v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve = true;\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector2() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineCurve3 extends Curve {\n\n\tconstructor( v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.type = 'LineCurve3';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget = new Vector3() ) {\n\n\t\treturn optionalTarget.subVectors( this.v2, this.v1 ).normalize();\n\n\t}\n\n\tgetTangentAt( u, optionalTarget ) {\n\n\t\treturn this.getTangent( u, optionalTarget );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve extends Curve {\n\n\tconstructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve = true;\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass QuadraticBezierCurve3 extends Curve {\n\n\tconstructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.isQuadraticBezierCurve3 = true;\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SplineCurve extends Curve {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\tthis.isSplineCurve = true;\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nvar Curves = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tArcCurve: ArcCurve,\n\tCatmullRomCurve3: CatmullRomCurve3,\n\tCubicBezierCurve: CubicBezierCurve,\n\tCubicBezierCurve3: CubicBezierCurve3,\n\tEllipseCurve: EllipseCurve,\n\tLineCurve: LineCurve,\n\tLineCurve3: LineCurve3,\n\tQuadraticBezierCurve: QuadraticBezierCurve,\n\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\tSplineCurve: SplineCurve\n});\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nclass CurvePath extends Curve {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\tclosePath() {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tconst lineType = ( startPoint.isVector2 === true ) ? 'LineCurve' : 'LineCurve3';\n\t\t\tthis.curves.push( new Curves[ lineType ]( endPoint, startPoint ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u, optionalTarget );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Path extends CurvePath {\n\n\tconstructor( points ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tconst curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\tnew Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t}\n\n\tarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tabsarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t}\n\n\tabsellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LatheGeometry extends BufferGeometry {\n\n\tconstructor( points = [ new Vector2( 0, - 0.5 ), new Vector2( 0.5, 0 ), new Vector2( 0, 0.5 ) ], segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\t\tconst initNormals = [];\n\t\tconst normals = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tconst normal = new Vector3();\n\t\tconst curNormal = new Vector3();\n\t\tconst prevNormal = new Vector3();\n\t\tlet dx = 0;\n\t\tlet dy = 0;\n\n\t\t// pre-compute normals for initial \"meridian\"\n\n\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\tswitch ( j ) {\n\n\t\t\t\tcase 0:\t\t\t\t// special handling for 1st vertex on path\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tprevNormal.copy( normal );\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase ( points.length - 1 ):\t// special handling for last Vertex on path\n\n\t\t\t\t\tinitNormals.push( prevNormal.x, prevNormal.y, prevNormal.z );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\t\t\t// default handling for all vertices in between\n\n\t\t\t\t\tdx = points[ j + 1 ].x - points[ j ].x;\n\t\t\t\t\tdy = points[ j + 1 ].y - points[ j ].y;\n\n\t\t\t\t\tnormal.x = dy * 1.0;\n\t\t\t\t\tnormal.y = - dx;\n\t\t\t\t\tnormal.z = dy * 0.0;\n\n\t\t\t\t\tcurNormal.copy( normal );\n\n\t\t\t\t\tnormal.x += prevNormal.x;\n\t\t\t\t\tnormal.y += prevNormal.y;\n\t\t\t\t\tnormal.z += prevNormal.z;\n\n\t\t\t\t\tnormal.normalize();\n\n\t\t\t\t\tinitNormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\tprevNormal.copy( curNormal );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices, uvs and normals\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// normal\n\n\t\t\t\tconst x = initNormals[ 3 * j + 0 ] * sin;\n\t\t\t\tconst y = initNormals[ 3 * j + 1 ];\n\t\t\t\tconst z = initNormals[ 3 * j + 0 ] * cos;\n\n\t\t\t\tnormals.push( x, y, z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( c, d, b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength );\n\n\t}\n\n}\n\nclass CapsuleGeometry extends LatheGeometry {\n\n\tconstructor( radius = 1, length = 1, capSegments = 4, radialSegments = 8 ) {\n\n\t\tconst path = new Path();\n\t\tpath.absarc( 0, - length / 2, radius, Math.PI * 1.5, 0 );\n\t\tpath.absarc( 0, length / 2, radius, 0, Math.PI * 0.5 );\n\n\t\tsuper( path.getPoints( capSegments ), radialSegments );\n\n\t\tthis.type = 'CapsuleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tlength: length,\n\t\t\tcapSegments: capSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CapsuleGeometry( data.radius, data.length, data.capSegments, data.radialSegments );\n\n\t}\n\n}\n\nclass CircleGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass CylinderGeometry extends BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new Vector3();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new Vector2();\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ConeGeometry extends CylinderGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass PolyhedronGeometry extends BufferGeometry {\n\n\tconstructor( vertices = [], indices = [], radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivision with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new Vector3();\n\t\t\tconst b = new Vector3();\n\t\t\tconst c = new Vector3();\n\n\t\t\tconst centroid = new Vector3();\n\n\t\t\tconst uvA = new Vector2();\n\t\t\tconst uvB = new Vector2();\n\t\t\tconst uvC = new Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details );\n\n\t}\n\n}\n\nclass DodecahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new DodecahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nconst _v0 = /*@__PURE__*/ new Vector3();\nconst _v1$1 = /*@__PURE__*/ new Vector3();\nconst _normal = /*@__PURE__*/ new Vector3();\nconst _triangle = /*@__PURE__*/ new Triangle();\n\nclass EdgesGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null, thresholdAngle = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry,\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\tconst precisionPoints = 4;\n\t\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\t\tconst thresholdDot = Math.cos( DEG2RAD * thresholdAngle );\n\n\t\t\tconst indexAttr = geometry.getIndex();\n\t\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\t\tconst indexArr = [ 0, 0, 0 ];\n\t\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\t\tconst hashes = new Array( 3 );\n\n\t\t\tconst edgeData = {};\n\t\t\tconst vertices = [];\n\t\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\t\tif ( indexAttr ) {\n\n\t\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t\t}\n\n\t\t\t\tconst { a, b, c } = _triangle;\n\t\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t\t// create hashes for the edge from the vertices\n\t\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t\t// skip degenerate triangles\n\t\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over every edge\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\t\tnormal: _normal.clone(),\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\t\tfor ( const key in edgeData ) {\n\n\t\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t\t_v1$1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\t\tvertices.push( _v1$1.x, _v1$1.y, _v1$1.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass Shape extends Path {\n\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\tthis.uuid = generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tgetPointsHoles( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t}\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.4)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim = 2 ) {\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 32767 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize, 0 );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim | 0 );\n\t\t\ttriangles.push( ear.i / dim | 0 );\n\t\t\ttriangles.push( next.i / dim | 0 );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tconst ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),\n\t\ty0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),\n\t\tx1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),\n\t\ty1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );\n\n\tlet p = c.next;\n\twhile ( p !== a ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\tconst ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),\n\t\ty0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),\n\t\tx1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),\n\t\ty1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( x0, y0, minX, minY, invSize ),\n\t\tmaxZ = zOrder( x1, y1, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n\t\t\tpointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim | 0 );\n\t\t\ttriangles.push( p.i / dim | 0 );\n\t\t\ttriangles.push( b.i / dim | 0 );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize, 0 );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize, 0 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\touterNode = eliminateHole( queue[ i ], outerNode );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\tconst bridge = findHoleBridge( hole, outerNode );\n\tif ( ! bridge ) {\n\n\t\treturn outerNode;\n\n\t}\n\n\tconst bridgeReverse = splitPolygon( bridge, hole );\n\n\t// filter collinear points around the cuts\n\tfilterPoints( bridgeReverse, bridgeReverse.next );\n\treturn filterPoints( bridge, bridge.next );\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode,\n\t\tqx = - Infinity,\n\t\tm;\n\n\tconst hx = hole.x, hy = hole.y;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\t\t\t\tif ( x === hx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === 0 ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = ( x - minX ) * invSize | 0;\n\ty = ( y - minY ) * invSize | 0;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) >= ( ax - px ) * ( cy - py ) &&\n ( ax - px ) * ( by - py ) >= ( bx - px ) * ( ay - py ) &&\n ( bx - px ) * ( cy - py ) >= ( cx - px ) * ( by - py );\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = 0;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\nclass ShapeUtils {\n\n\t// calculate area of the contour polygon\n\n\tstatic area( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t}\n\n\tstatic isClockWise( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t}\n\n\tstatic triangulateShape( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n}\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\n\nclass ExtrudeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( - 0.5, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), options = {} ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tconst depth = options.depth !== undefined ? options.depth : 1;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn pt.clone().addScaledVector( vec, size );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON$1( shapes, options, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\tconst extrudePath = data.options.extrudePath;\n\n\t\tif ( extrudePath !== undefined ) {\n\n\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t}\n\n\t\treturn new ExtrudeGeometry( geometryShapes, data.options );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew Vector2( a_x, a_y ),\n\t\t\tnew Vector2( b_x, b_y ),\n\t\t\tnew Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON$1( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tdata.options = Object.assign( {}, options );\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\nclass IcosahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new IcosahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass OctahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new OctahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass RingGeometry extends BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass ShapeGeometry extends BufferGeometry {\n\n\tconstructor( shapes = new Shape( [ new Vector2( 0, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), curveSegments = 12 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n\tstatic fromJSON( data, shapes ) {\n\n\t\tconst geometryShapes = [];\n\n\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\tgeometryShapes.push( shape );\n\n\t\t}\n\n\t\treturn new ShapeGeometry( geometryShapes, data.curveSegments );\n\n\t}\n\n}\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\nclass SphereGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy === 0 && thetaStart === 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy === heightSegments && thetaEnd === Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength );\n\n\t}\n\n}\n\nclass TetrahedronGeometry extends PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TetrahedronGeometry( data.radius, data.detail );\n\n\t}\n\n}\n\nclass TorusGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new Vector3();\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc );\n\n\t}\n\n}\n\nclass TorusKnotGeometry extends BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\n\t\tconst P1 = new Vector3();\n\t\tconst P2 = new Vector3();\n\n\t\tconst B = new Vector3();\n\t\tconst T = new Vector3();\n\t\tconst N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segment\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectors, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\treturn new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q );\n\n\t}\n\n}\n\nclass TubeGeometry extends BufferGeometry {\n\n\tconstructor( path = new QuadraticBezierCurve3( new Vector3( - 1, - 1, 0 ), new Vector3( - 1, 1, 0 ), new Vector3( 1, 1, 0 ) ), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new Vector3();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\t\tlet P = new Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\tstatic fromJSON( data ) {\n\n\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\treturn new TubeGeometry(\n\t\t\tnew Curves[ data.path.type ]().fromJSON( data.path ),\n\t\t\tdata.tubularSegments,\n\t\t\tdata.radius,\n\t\t\tdata.radialSegments,\n\t\t\tdata.closed\n\t\t);\n\n\t}\n\n}\n\nclass WireframeGeometry extends BufferGeometry {\n\n\tconstructor( geometry = null ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'WireframeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tgeometry: geometry\n\t\t};\n\n\t\tif ( geometry !== null ) {\n\n\t\t\t// buffer\n\n\t\t\tconst vertices = [];\n\t\t\tconst edges = new Set();\n\n\t\t\t// helper variables\n\n\t\t\tconst start = new Vector3();\n\t\t\tconst end = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\t\t\t\tconst indices = geometry.index;\n\t\t\t\tlet groups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\t\tconst groupStart = group.start;\n\t\t\t\t\tconst groupCount = group.count;\n\n\t\t\t\t\tfor ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tconst index1 = indices.getX( i + j );\n\t\t\t\t\t\t\tconst index2 = indices.getX( i + ( j + 1 ) % 3 );\n\n\t\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tconst position = geometry.attributes.position;\n\n\t\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\n\t\t\t\t\t\tstart.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tend.fromBufferAttribute( position, index2 );\n\n\t\t\t\t\t\tif ( isUniqueEdge( start, end, edges ) === true ) {\n\n\t\t\t\t\t\t\tvertices.push( start.x, start.y, start.z );\n\t\t\t\t\t\t\tvertices.push( end.x, end.y, end.z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// build geometry\n\n\t\t\tthis.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.parameters = Object.assign( {}, source.parameters );\n\n\t\treturn this;\n\n\t}\n\n}\n\nfunction isUniqueEdge( start, end, edges ) {\n\n\tconst hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`;\n\tconst hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge\n\n\tif ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) {\n\n\t\treturn false;\n\n\t} else {\n\n\t\tedges.add( hash1 );\n\t\tedges.add( hash2 );\n\t\treturn true;\n\n\t}\n\n}\n\nvar Geometries = /*#__PURE__*/Object.freeze({\n\t__proto__: null,\n\tBoxGeometry: BoxGeometry,\n\tCapsuleGeometry: CapsuleGeometry,\n\tCircleGeometry: CircleGeometry,\n\tConeGeometry: ConeGeometry,\n\tCylinderGeometry: CylinderGeometry,\n\tDodecahedronGeometry: DodecahedronGeometry,\n\tEdgesGeometry: EdgesGeometry,\n\tExtrudeGeometry: ExtrudeGeometry,\n\tIcosahedronGeometry: IcosahedronGeometry,\n\tLatheGeometry: LatheGeometry,\n\tOctahedronGeometry: OctahedronGeometry,\n\tPlaneGeometry: PlaneGeometry,\n\tPolyhedronGeometry: PolyhedronGeometry,\n\tRingGeometry: RingGeometry,\n\tShapeGeometry: ShapeGeometry,\n\tSphereGeometry: SphereGeometry,\n\tTetrahedronGeometry: TetrahedronGeometry,\n\tTorusGeometry: TorusGeometry,\n\tTorusKnotGeometry: TorusKnotGeometry,\n\tTubeGeometry: TubeGeometry,\n\tWireframeGeometry: WireframeGeometry\n});\n\nclass ShadowMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isShadowMaterial = true;\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass RawShaderMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( parameters );\n\n\t\tthis.isRawShaderMaterial = true;\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n}\n\nclass MeshStandardMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshStandardMaterial = true;\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 1.0;\n\t\tthis.metalness = 0.0;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhysicalMaterial extends MeshStandardMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhysicalMaterial = true;\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.anisotropyRotation = 0;\n\t\tthis.anisotropyMap = null;\n\n\t\tthis.clearcoatMap = null;\n\t\tthis.clearcoatRoughness = 0.0;\n\t\tthis.clearcoatRoughnessMap = null;\n\t\tthis.clearcoatNormalScale = new Vector2( 1, 1 );\n\t\tthis.clearcoatNormalMap = null;\n\n\t\tthis.ior = 1.5;\n\n\t\tObject.defineProperty( this, 'reflectivity', {\n\t\t\tget: function () {\n\n\t\t\t\treturn ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );\n\n\t\t\t},\n\t\t\tset: function ( reflectivity ) {\n\n\t\t\t\tthis.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.iridescenceMap = null;\n\t\tthis.iridescenceIOR = 1.3;\n\t\tthis.iridescenceThicknessRange = [ 100, 400 ];\n\t\tthis.iridescenceThicknessMap = null;\n\n\t\tthis.sheenColor = new Color( 0x000000 );\n\t\tthis.sheenColorMap = null;\n\t\tthis.sheenRoughness = 1.0;\n\t\tthis.sheenRoughnessMap = null;\n\n\t\tthis.transmissionMap = null;\n\n\t\tthis.thickness = 0;\n\t\tthis.thicknessMap = null;\n\t\tthis.attenuationDistance = Infinity;\n\t\tthis.attenuationColor = new Color( 1, 1, 1 );\n\n\t\tthis.specularIntensity = 1.0;\n\t\tthis.specularIntensityMap = null;\n\t\tthis.specularColor = new Color( 1, 1, 1 );\n\t\tthis.specularColorMap = null;\n\n\t\tthis._anisotropy = 0;\n\t\tthis._clearcoat = 0;\n\t\tthis._dispersion = 0;\n\t\tthis._iridescence = 0;\n\t\tthis._sheen = 0.0;\n\t\tthis._transmission = 0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget anisotropy() {\n\n\t\treturn this._anisotropy;\n\n\t}\n\n\tset anisotropy( value ) {\n\n\t\tif ( this._anisotropy > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._anisotropy = value;\n\n\t}\n\n\tget clearcoat() {\n\n\t\treturn this._clearcoat;\n\n\t}\n\n\tset clearcoat( value ) {\n\n\t\tif ( this._clearcoat > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._clearcoat = value;\n\n\t}\n\n\tget iridescence() {\n\n\t\treturn this._iridescence;\n\n\t}\n\n\tset iridescence( value ) {\n\n\t\tif ( this._iridescence > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._iridescence = value;\n\n\t}\n\n\tget dispersion() {\n\n\t\treturn this._dispersion;\n\n\t}\n\n\tset dispersion( value ) {\n\n\t\tif ( this._dispersion > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._dispersion = value;\n\n\t}\n\n\tget sheen() {\n\n\t\treturn this._sheen;\n\n\t}\n\n\tset sheen( value ) {\n\n\t\tif ( this._sheen > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._sheen = value;\n\n\t}\n\n\tget transmission() {\n\n\t\treturn this._transmission;\n\n\t}\n\n\tset transmission( value ) {\n\n\t\tif ( this._transmission > 0 !== value > 0 ) {\n\n\t\t\tthis.version ++;\n\n\t\t}\n\n\t\tthis._transmission = value;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = {\n\n\t\t\t'STANDARD': '',\n\t\t\t'PHYSICAL': ''\n\n\t\t};\n\n\t\tthis.anisotropy = source.anisotropy;\n\t\tthis.anisotropyRotation = source.anisotropyRotation;\n\t\tthis.anisotropyMap = source.anisotropyMap;\n\n\t\tthis.clearcoat = source.clearcoat;\n\t\tthis.clearcoatMap = source.clearcoatMap;\n\t\tthis.clearcoatRoughness = source.clearcoatRoughness;\n\t\tthis.clearcoatRoughnessMap = source.clearcoatRoughnessMap;\n\t\tthis.clearcoatNormalMap = source.clearcoatNormalMap;\n\t\tthis.clearcoatNormalScale.copy( source.clearcoatNormalScale );\n\n\t\tthis.dispersion = source.dispersion;\n\t\tthis.ior = source.ior;\n\n\t\tthis.iridescence = source.iridescence;\n\t\tthis.iridescenceMap = source.iridescenceMap;\n\t\tthis.iridescenceIOR = source.iridescenceIOR;\n\t\tthis.iridescenceThicknessRange = [ ...source.iridescenceThicknessRange ];\n\t\tthis.iridescenceThicknessMap = source.iridescenceThicknessMap;\n\n\t\tthis.sheen = source.sheen;\n\t\tthis.sheenColor.copy( source.sheenColor );\n\t\tthis.sheenColorMap = source.sheenColorMap;\n\t\tthis.sheenRoughness = source.sheenRoughness;\n\t\tthis.sheenRoughnessMap = source.sheenRoughnessMap;\n\n\t\tthis.transmission = source.transmission;\n\t\tthis.transmissionMap = source.transmissionMap;\n\n\t\tthis.thickness = source.thickness;\n\t\tthis.thicknessMap = source.thicknessMap;\n\t\tthis.attenuationDistance = source.attenuationDistance;\n\t\tthis.attenuationColor.copy( source.attenuationColor );\n\n\t\tthis.specularIntensity = source.specularIntensity;\n\t\tthis.specularIntensityMap = source.specularIntensityMap;\n\t\tthis.specularColor.copy( source.specularColor );\n\t\tthis.specularColorMap = source.specularColorMap;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshPhongMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshPhongMaterial = true;\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshToonMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshToonMaterial = true;\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\t\tthis.gradientMap = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshNormalMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshNormalMaterial = true;\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshLambertMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshLambertMaterial = true;\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapRotation = new Euler();\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapRotation.copy( source.envMapRotation );\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass MeshMatcapMaterial extends Material {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isMeshMatcapMaterial = true;\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.type = 'MeshMatcapMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.matcap = null;\n\n\t\tthis.map = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalMapType = TangentSpaceNormalMap;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.flatShading = false;\n\n\t\tthis.fog = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.defines = { 'MATCAP': '' };\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.matcap = source.matcap;\n\n\t\tthis.map = source.map;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalMapType = source.normalMapType;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.flatShading = source.flatShading;\n\n\t\tthis.fog = source.fog;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass LineDashedMaterial extends LineBasicMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper();\n\n\t\tthis.isLineDashedMaterial = true;\n\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t}\n\n}\n\n// converts an array to a specific type\nfunction convertArray( array, type, forceClone ) {\n\n\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t! forceClone && array.constructor === type ) return array;\n\n\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\treturn new type( array ); // create typed array\n\n\t}\n\n\treturn Array.prototype.slice.call( array ); // create Array\n\n}\n\nfunction isTypedArray( object ) {\n\n\treturn ArrayBuffer.isView( object ) &&\n\t\t! ( object instanceof DataView );\n\n}\n\n// returns an array by which times and values can be sorted\nfunction getKeyframeOrder( times ) {\n\n\tfunction compareTime( i, j ) {\n\n\t\treturn times[ i ] - times[ j ];\n\n\t}\n\n\tconst n = times.length;\n\tconst result = new Array( n );\n\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\tresult.sort( compareTime );\n\n\treturn result;\n\n}\n\n// uses the array previously returned by 'getKeyframeOrder' to sort data\nfunction sortedArray( values, stride, order ) {\n\n\tconst nValues = values.length;\n\tconst result = new values.constructor( nValues );\n\n\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\tconst srcOffset = order[ i ] * stride;\n\n\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t}\n\n\t}\n\n\treturn result;\n\n}\n\n// function for parsing AOS keyframe formats\nfunction flattenJSON( jsonKeys, times, values, valuePropertyName ) {\n\n\tlet i = 1, key = jsonKeys[ 0 ];\n\n\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\tkey = jsonKeys[ i ++ ];\n\n\t}\n\n\tif ( key === undefined ) return; // no data\n\n\tlet value = key[ valuePropertyName ];\n\tif ( value === undefined ) return; // no data\n\n\tif ( Array.isArray( value ) ) {\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else if ( value.toArray !== undefined ) {\n\n\t\t// ...assume THREE.Math-ish\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t} else {\n\n\t\t// otherwise push as-is\n\n\t\tdo {\n\n\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\tif ( value !== undefined ) {\n\n\t\t\t\ttimes.push( key.time );\n\t\t\t\tvalues.push( value );\n\n\t\t\t}\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t} while ( key !== undefined );\n\n\t}\n\n}\n\nfunction subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\tconst clip = sourceClip.clone();\n\n\tclip.name = name;\n\n\tconst tracks = [];\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tconst track = clip.tracks[ i ];\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = [];\n\t\tconst values = [];\n\n\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( times.length === 0 ) continue;\n\n\t\ttrack.times = convertArray( times, track.times.constructor );\n\t\ttrack.values = convertArray( values, track.values.constructor );\n\n\t\ttracks.push( track );\n\n\t}\n\n\tclip.tracks = tracks;\n\n\t// find minimum .times value across all tracks in the trimmed clip\n\n\tlet minStartTime = Infinity;\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t}\n\n\t}\n\n\t// shift all tracks such that clip begins at t=0\n\n\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t}\n\n\tclip.resetDuration();\n\n\treturn clip;\n\n}\n\nfunction makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\tif ( fps <= 0 ) fps = 30;\n\n\tconst numTracks = referenceClip.tracks.length;\n\tconst referenceTime = referenceFrame / fps;\n\n\t// Make each track's values relative to the values at the reference frame\n\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t// Skip this track if it's non-numeric\n\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t} );\n\n\t\tif ( targetTrack === undefined ) continue;\n\n\t\tlet referenceOffset = 0;\n\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t}\n\n\t\tlet targetOffset = 0;\n\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t}\n\n\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\tlet referenceValue;\n\n\t\t// Find the value to subtract out of the track\n\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\treferenceValue = referenceTrack.values.slice( startIndex, endIndex );\n\n\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\treferenceValue = referenceTrack.values.slice( startIndex, endIndex );\n\n\t\t} else {\n\n\t\t\t// Interpolate to the reference value\n\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\tconst startIndex = referenceOffset;\n\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\treferenceValue = interpolant.resultBuffer.slice( startIndex, endIndex );\n\n\t\t}\n\n\t\t// Conjugate the quaternion\n\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\tconst referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t}\n\n\t\t// Subtract the reference value from all of the track values\n\n\t\tconst numTimes = targetTrack.times.length;\n\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\tQuaternion.multiplyQuaternionsFlat(\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart,\n\t\t\t\t\treferenceValue,\n\t\t\t\t\t0,\n\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\tvalueStart\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttargetClip.blendMode = AdditiveAnimationBlendMode;\n\n\treturn targetClip;\n\n}\n\nconst AnimationUtils = {\n\tconvertArray: convertArray,\n\tisTypedArray: isTypedArray,\n\tgetKeyframeOrder: getKeyframeOrder,\n\tsortedArray: sortedArray,\n\tflattenJSON: flattenJSON,\n\tsubclip: subclip,\n\tmakeClipAdditive: makeClipAdditive\n};\n\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nclass Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t\tthis.settings = null;\n\t\tthis.DefaultSettings_ = {};\n\n\t}\n\n\tevaluate( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.copySampleValue_( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t}\n\n\tgetSettings_() {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\t// Template methods for derived classes:\n\n\tinterpolate_( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t}\n\n\tintervalChanged_( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n}\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nclass CubicInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t\tthis.DefaultSettings_ = {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t};\n\n\t}\n\n\tintervalChanged_( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nclass LinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceding\n * the parameter.\n */\n\nclass DiscreteInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n}\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = convertArray( times, this.TimeBufferType );\n\t\tthis.values = convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': convertArray( track.times, Array ),\n\t\t\t\t'values': convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn InterpolateSmooth;\n\n\t\t}\n\n\t}\n\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t// move all keyframes either forwards or backwards in time\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = times.slice( from, to );\n\t\t\tthis.values = this.values.slice( from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = this.times.slice(),\n\t\t\tvalues = this.values.slice(),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = times.slice( 0, writeIndex );\n\t\t\tthis.values = values.slice( 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = this.times.slice();\n\t\tconst values = this.values.slice();\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends KeyframeTrack {\n\n\t// No interpolation parameter because only InterpolateDiscrete is valid.\n\tconstructor( name, times, values ) {\n\n\t\tsuper( name, times, values );\n\n\t}\n\n}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nclass QuaternionLinearInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\n/**\n * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\n// DefaultInterpolation is inherited;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends KeyframeTrack {\n\n\t// No interpolation parameter because only InterpolateDiscrete is valid.\n\tconstructor( name, times, values ) {\n\n\t\tsuper( name, times, values );\n\n\t}\n\n}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n\nclass AnimationClip {\n\n\tconstructor( name = '', duration = - 1, tracks = [], blendMode = NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = getKeyframeOrder( times );\n\t\t\ttimes = sortedArray( times, 1, order );\n\t\t\tvalues = sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t// parse the animation.hierarchy format\n\tstatic parseAnimation( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\tflattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * fps;\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\tflattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\nclass LoadingManager {\n\n\tconstructor( onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet isLoading = false;\n\t\tlet itemsLoaded = 0;\n\t\tlet itemsTotal = 0;\n\t\tlet urlModifier = undefined;\n\t\tconst handlers = [];\n\n\t\t// Refer to #5689 for the reason why we don't set .onStart\n\t\t// in the constructor\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.addHandler = function ( regex, loader ) {\n\n\t\t\thandlers.push( regex, loader );\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.removeHandler = function ( regex ) {\n\n\t\t\tconst index = handlers.indexOf( regex );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\thandlers.splice( index, 2 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t};\n\n\t\tthis.getHandler = function ( file ) {\n\n\t\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tconst regex = handlers[ i ];\n\t\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t};\n\n\t}\n\n}\n\nconst DefaultLoadingManager = /*@__PURE__*/ new LoadingManager();\n\nclass Loader {\n\n\tconstructor( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.crossOrigin = 'anonymous';\n\t\tthis.withCredentials = false;\n\t\tthis.path = '';\n\t\tthis.resourcePath = '';\n\t\tthis.requestHeader = {};\n\n\t}\n\n\tload( /* url, onLoad, onProgress, onError */ ) {}\n\n\tloadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t}\n\n\tparse( /* data */ ) {}\n\n\tsetCrossOrigin( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t}\n\n\tsetWithCredentials( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t}\n\n\tsetPath( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t}\n\n\tsetResourcePath( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t}\n\n\tsetRequestHeader( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n}\n\nLoader.DEFAULT_MATERIAL_NAME = '__DEFAULT';\n\nconst loading = {};\n\nclass HttpError extends Error {\n\n\tconstructor( message, response ) {\n\n\t\tsuper( message );\n\t\tthis.response = response;\n\n\t}\n\n}\n\nclass FileLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tthis.manager.itemStart( url );\n\n\t\t\tsetTimeout( () => {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Initialise array for duplicate requests\n\t\tloading[ url ] = [];\n\n\t\tloading[ url ].push( {\n\t\t\tonLoad: onLoad,\n\t\t\tonProgress: onProgress,\n\t\t\tonError: onError,\n\t\t} );\n\n\t\t// create request\n\t\tconst req = new Request( url, {\n\t\t\theaders: new Headers( this.requestHeader ),\n\t\t\tcredentials: this.withCredentials ? 'include' : 'same-origin',\n\t\t\t// An abort controller could be added within a future PR\n\t\t} );\n\n\t\t// record states ( avoid data race )\n\t\tconst mimeType = this.mimeType;\n\t\tconst responseType = this.responseType;\n\n\t\t// start the fetch\n\t\tfetch( req )\n\t\t\t.then( response => {\n\n\t\t\t\tif ( response.status === 200 || response.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( response.status === 0 ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Workaround: Checking if response.body === undefined for Alipay browser #23548\n\n\t\t\t\t\tif ( typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined ) {\n\n\t\t\t\t\t\treturn response;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\t\tconst reader = response.body.getReader();\n\n\t\t\t\t\t// Nginx needs X-File-Size check\n\t\t\t\t\t// https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content\n\t\t\t\t\tconst contentLength = response.headers.get( 'X-File-Size' ) || response.headers.get( 'Content-Length' );\n\t\t\t\t\tconst total = contentLength ? parseInt( contentLength ) : 0;\n\t\t\t\t\tconst lengthComputable = total !== 0;\n\t\t\t\t\tlet loaded = 0;\n\n\t\t\t\t\t// periodically read data into the new stream tracking while download progress\n\t\t\t\t\tconst stream = new ReadableStream( {\n\t\t\t\t\t\tstart( controller ) {\n\n\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\tfunction readData() {\n\n\t\t\t\t\t\t\t\treader.read().then( ( { done, value } ) => {\n\n\t\t\t\t\t\t\t\t\tif ( done ) {\n\n\t\t\t\t\t\t\t\t\t\tcontroller.close();\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tloaded += value.byteLength;\n\n\t\t\t\t\t\t\t\t\t\tconst event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } );\n\t\t\t\t\t\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tcontroller.enqueue( value );\n\t\t\t\t\t\t\t\t\t\treadData();\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}, ( e ) => {\n\n\t\t\t\t\t\t\t\t\tcontroller.error( e );\n\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn new Response( stream );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new HttpError( `fetch for \"${response.url}\" responded with ${response.status}: ${response.statusText}`, response );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( response => {\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\n\t\t\t\t\t\treturn response.arrayBuffer();\n\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\treturn response.blob();\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\treturn response.text()\n\t\t\t\t\t\t\t.then( text => {\n\n\t\t\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\t\t\treturn parser.parseFromString( text, mimeType );\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\treturn response.json();\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( mimeType === undefined ) {\n\n\t\t\t\t\t\t\treturn response.text();\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// sniff encoding\n\t\t\t\t\t\t\tconst re = /charset=\"?([^;\"\\s]*)\"?/i;\n\t\t\t\t\t\t\tconst exec = re.exec( mimeType );\n\t\t\t\t\t\t\tconst label = exec && exec[ 1 ] ? exec[ 1 ].toLowerCase() : undefined;\n\t\t\t\t\t\t\tconst decoder = new TextDecoder( label );\n\t\t\t\t\t\t\treturn response.arrayBuffer().then( ab => decoder.decode( ab ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.then( data => {\n\n\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\tCache.add( url, data );\n\n\t\t\t\tconst callbacks = loading[ url ];\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( data );\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t\t.catch( err => {\n\n\t\t\t\t// Abort errors and other errors are handled the same\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tif ( callbacks === undefined ) {\n\n\t\t\t\t\t// When onLoad was called and url was deleted in `loading`\n\t\t\t\t\tthis.manager.itemError( url );\n\t\t\t\t\tthrow err;\n\n\t\t\t\t}\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( err );\n\n\t\t\t\t}\n\n\t\t\t\tthis.manager.itemError( url );\n\n\t\t\t} )\n\t\t\t.finally( () => {\n\n\t\t\t\tthis.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\tthis.manager.itemStart( url );\n\n\t}\n\n\tsetResponseType( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t}\n\n\tsetMimeType( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n}\n\nclass AnimationLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass CompressedTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new CompressedTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass ImageLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = createElementNS( 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tCache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\tremoveEventListeners();\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction removeEventListeners() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.slice( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\nclass CubeTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new CubeTexture();\n\t\ttexture.colorSpace = SRGBColorSpace;\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nclass DataTextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new DataTexture();\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tlet texData;\n\n\t\t\ttry {\n\n\t\t\t\ttexData = scope.parse( buffer );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) {\n\n\t\t\t\t\tonError( error );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = texData.colorSpace;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t}\n\n\t\t\tif ( texData.generateMipmaps !== undefined ) {\n\n\t\t\t\ttexture.generateMipmaps = texData.generateMipmaps;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass TextureLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new Texture();\n\n\t\tconst loader = new ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n}\n\nclass Light extends Object3D {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper();\n\n\t\tthis.isLight = true;\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity;\n\n\t}\n\n\tdispose() {\n\n\t\t// Empty here in base class; some subclasses override.\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.intensity = source.intensity;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.color = this.color.getHex();\n\t\tdata.object.intensity = this.intensity;\n\n\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\t\tif ( this.target !== undefined ) data.object.target = this.target.uuid;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass HemisphereLight extends Light {\n\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\tthis.isHemisphereLight = true;\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();\nconst _lookTarget$1 = /*@__PURE__*/ new Vector3();\n\nclass LightShadow {\n\n\tconstructor( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.intensity = 1;\n\n\t\tthis.bias = 0;\n\t\tthis.normalBias = 0;\n\t\tthis.radius = 1;\n\t\tthis.blurSamples = 8;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.mapPass = null;\n\t\tthis.matrix = new Matrix4();\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis._frustum = new Frustum();\n\t\tthis._frameExtents = new Vector2( 1, 1 );\n\n\t\tthis._viewportCount = 1;\n\n\t\tthis._viewports = [\n\n\t\t\tnew Vector4( 0, 0, 1, 1 )\n\n\t\t];\n\n\t}\n\n\tgetViewportCount() {\n\n\t\treturn this._viewportCount;\n\n\t}\n\n\tgetFrustum() {\n\n\t\treturn this._frustum;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst shadowCamera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );\n\t\tshadowCamera.position.copy( _lightPositionWorld$1 );\n\n\t\t_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );\n\t\tshadowCamera.lookAt( _lookTarget$1 );\n\t\tshadowCamera.updateMatrixWorld();\n\n\t\t_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );\n\n\t\tshadowMatrix.set(\n\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t);\n\n\t\tshadowMatrix.multiply( _projScreenMatrix$1 );\n\n\t}\n\n\tgetViewport( viewportIndex ) {\n\n\t\treturn this._viewports[ viewportIndex ];\n\n\t}\n\n\tgetFrameExtents() {\n\n\t\treturn this._frameExtents;\n\n\t}\n\n\tdispose() {\n\n\t\tif ( this.map ) {\n\n\t\t\tthis.map.dispose();\n\n\t\t}\n\n\t\tif ( this.mapPass ) {\n\n\t\t\tthis.mapPass.dispose();\n\n\t\t}\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.camera = source.camera.clone();\n\n\t\tthis.intensity = source.intensity;\n\n\t\tthis.bias = source.bias;\n\t\tthis.radius = source.radius;\n\n\t\tthis.mapSize.copy( source.mapSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst object = {};\n\n\t\tif ( this.intensity !== 1 ) object.intensity = this.intensity;\n\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\tif ( this.normalBias !== 0 ) object.normalBias = this.normalBias;\n\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\tdelete object.camera.matrix;\n\n\t\treturn object;\n\n\t}\n\n}\n\nclass SpotLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.isSpotLightShadow = true;\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.focus = source.focus;\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass SpotLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isSpotLight = true;\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay;\n\n\t\tthis.map = null;\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _projScreenMatrix = /*@__PURE__*/ new Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new Vector3();\nconst _lookTarget = /*@__PURE__*/ new Vector3();\n\nclass PointLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis.isPointLightShadow = true;\n\n\t\tthis._frameExtents = new Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t// xzXZ\n\t\t\t// y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( far !== camera.far ) {\n\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nclass PointLight extends Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 2 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isPointLight = true;\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay;\n\n\t\tthis.shadow = new PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in candela)\n\t\t// for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in candela) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass DirectionalLightShadow extends LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t\tthis.isDirectionalLightShadow = true;\n\n\t}\n\n}\n\nclass DirectionalLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isDirectionalLight = true;\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DEFAULT_UP );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.shadow.dispose();\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.target = source.target.clone();\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nclass AmbientLight extends Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isAmbientLight = true;\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\nclass RectAreaLight extends Light {\n\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.isRectAreaLight = true;\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t}\n\n\tget power() {\n\n\t\t// compute the light's luminous power (in lumens) from its intensity (in nits)\n\t\treturn this.intensity * this.width * this.height * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// set the light's intensity (in nits) from the desired luminous power (in lumens)\n\t\tthis.intensity = power / ( this.width * this.height * Math.PI );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n}\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tthis.isSphericalHarmonics3 = true;\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nclass LightProbe extends Light {\n\n\tconstructor( sh = new SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.isLightProbe = true;\n\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass MaterialLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\t\tthis.textures = {};\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = MaterialLoader.createMaterialFromType( json.type );\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = json.sheen;\n\t\tif ( json.sheenColor !== undefined ) material.sheenColor = new Color().setHex( json.sheenColor );\n\t\tif ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness;\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity;\n\t\tif ( json.specularColor !== undefined && material.specularColor !== undefined ) material.specularColor.setHex( json.specularColor );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.dispersion !== undefined ) material.dispersion = json.dispersion;\n\t\tif ( json.iridescence !== undefined ) material.iridescence = json.iridescence;\n\t\tif ( json.iridescenceIOR !== undefined ) material.iridescenceIOR = json.iridescenceIOR;\n\t\tif ( json.iridescenceThicknessRange !== undefined ) material.iridescenceThicknessRange = json.iridescenceThicknessRange;\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.thickness !== undefined ) material.thickness = json.thickness;\n\t\tif ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;\n\t\tif ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor );\n\t\tif ( json.anisotropy !== undefined ) material.anisotropy = json.anisotropy;\n\t\tif ( json.anisotropyRotation !== undefined ) material.anisotropyRotation = json.anisotropyRotation;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.alphaHash !== undefined ) material.alphaHash = json.alphaHash;\n\t\tif ( json.depthFunc !== undefined ) material.depthFunc = json.depthFunc;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\tif ( json.blendSrc !== undefined ) material.blendSrc = json.blendSrc;\n\t\tif ( json.blendDst !== undefined ) material.blendDst = json.blendDst;\n\t\tif ( json.blendEquation !== undefined ) material.blendEquation = json.blendEquation;\n\t\tif ( json.blendSrcAlpha !== undefined ) material.blendSrcAlpha = json.blendSrcAlpha;\n\t\tif ( json.blendDstAlpha !== undefined ) material.blendDstAlpha = json.blendDstAlpha;\n\t\tif ( json.blendEquationAlpha !== undefined ) material.blendEquationAlpha = json.blendEquationAlpha;\n\t\tif ( json.blendColor !== undefined && material.blendColor !== undefined ) material.blendColor.setHex( json.blendColor );\n\t\tif ( json.blendAlpha !== undefined ) material.blendAlpha = json.blendAlpha;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== undefined ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;\n\t\tif ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;\n\t\tif ( json.forceSinglePass !== undefined ) material.forceSinglePass = json.forceSinglePass;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\tif ( json.glslVersion !== undefined ) material.glslVersion = json.glslVersion;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.lights !== undefined ) material.lights = json.lights;\n\t\tif ( json.clipping !== undefined ) material.clipping = json.clipping;\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\t\tif ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap );\n\t\tif ( json.specularColorMap !== undefined ) material.specularColorMap = getTexture( json.specularColorMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapRotation !== undefined ) material.envMapRotation.fromArray( json.envMapRotation );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.iridescenceMap !== undefined ) material.iridescenceMap = getTexture( json.iridescenceMap );\n\t\tif ( json.iridescenceThicknessMap !== undefined ) material.iridescenceThicknessMap = getTexture( json.iridescenceThicknessMap );\n\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\t\tif ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );\n\n\t\tif ( json.anisotropyMap !== undefined ) material.anisotropyMap = getTexture( json.anisotropyMap );\n\n\t\tif ( json.sheenColorMap !== undefined ) material.sheenColorMap = getTexture( json.sheenColorMap );\n\t\tif ( json.sheenRoughnessMap !== undefined ) material.sheenRoughnessMap = getTexture( json.sheenRoughnessMap );\n\n\t\treturn material;\n\n\t}\n\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n\tstatic createMaterialFromType( type ) {\n\n\t\tconst materialLib = {\n\t\t\tShadowMaterial,\n\t\t\tSpriteMaterial,\n\t\t\tRawShaderMaterial,\n\t\t\tShaderMaterial,\n\t\t\tPointsMaterial,\n\t\t\tMeshPhysicalMaterial,\n\t\t\tMeshStandardMaterial,\n\t\t\tMeshPhongMaterial,\n\t\t\tMeshToonMaterial,\n\t\t\tMeshNormalMaterial,\n\t\t\tMeshLambertMaterial,\n\t\t\tMeshDepthMaterial,\n\t\t\tMeshDistanceMaterial,\n\t\t\tMeshBasicMaterial,\n\t\t\tMeshMatcapMaterial,\n\t\t\tLineDashedMaterial,\n\t\t\tLineBasicMaterial,\n\t\t\tMaterial\n\t\t};\n\n\t\treturn new materialLib[ type ]();\n\n\t}\n\n}\n\nclass LoaderUtils {\n\n\tstatic decodeText( array ) { // @deprecated, r165\n\n\t\tconsole.warn( 'THREE.LoaderUtils: decodeText() has been deprecated with r165 and will be removed with r175. Use TextDecoder instead.' );\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t}\n\n\tstatic extractUrlBase( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.slice( 0, index + 1 );\n\n\t}\n\n\tstatic resolveURL( url, path ) {\n\n\t\t// Invalid URL\n\t\tif ( typeof url !== 'string' || url === '' ) return '';\n\n\t\t// Host Relative URL\n\t\tif ( /^https?:\\/\\//i.test( path ) && /^\\//.test( url ) ) {\n\n\t\t\tpath = path.replace( /(^https?:\\/\\/[^\\/]+).*/i, '$1' );\n\n\t\t}\n\n\t\t// Absolute URL http://,https://,//\n\t\tif ( /^(https?:)?\\/\\//i.test( url ) ) return url;\n\n\t\t// Data URI\n\t\tif ( /^data:.*,.*$/i.test( url ) ) return url;\n\n\t\t// Blob URL\n\t\tif ( /^blob:.*$/i.test( url ) ) return url;\n\n\t\t// Relative URL\n\t\treturn path + url;\n\n\t}\n\n}\n\nclass InstancedBufferGeometry extends BufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isInstancedBufferGeometry = true;\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.instanceCount = Infinity;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n}\n\nclass BufferGeometryLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = getTypedArray( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = getTypedArray( index.type, index.array );\n\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tif ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );\n\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = getTypedArray( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n}\n\nclass ObjectLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( new Error( 'THREE.ObjectLoader: Can\\'t load ' + url ) );\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tasync loadAsync( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tconst text = await loader.loadAsync( url, onProgress );\n\n\t\tconst json = JSON.parse( text );\n\n\t\tconst metadata = json.metadata;\n\n\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\tthrow new Error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\n\t\t}\n\n\t\treturn await scope.parseAsync( json );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\t\tthis.bindLightTargets( object );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ].data instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tasync parseAsync( json ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = await this.parseImagesAsync( json.images );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, textures, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\t\tthis.bindLightTargets( object );\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( data.type in Geometries ) {\n\n\t\t\t\t\t\t\tgeometry = Geometries[ data.type ].fromJSON( data, shapes );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( `THREE.ObjectLoader: Unsupported geometry type \"${ data.type }\"` );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t}\n\n\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new LoadingManager( onLoad );\n\n\t\t\tloader = new ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tasync parseImagesAsync( json ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tasync function deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn await loader.loadAsync( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: getTypedArray( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tloader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\tconst imageArray = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = await deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timageArray.push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\timages[ image.uuid ] = new Source( imageArray );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = await deserializeImage( image.url );\n\t\t\t\t\timages[ image.uuid ] = new Source( deserializedImage );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tconst source = images[ data.image ];\n\t\t\t\tconst image = source.data;\n\n\t\t\t\tlet texture;\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new CubeTexture();\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new DataTexture();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new Texture();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.source = source;\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\t\t\t\tif ( data.channel !== undefined ) texture.channel = data.channel;\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.internalFormat !== undefined ) texture.internalFormat = data.internalFormat;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.colorSpace !== undefined ) texture.colorSpace = data.colorSpace;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.generateMipmaps !== undefined ) texture.generateMipmaps = data.generateMipmaps;\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\t\t\t\tif ( data.compareFunction !== undefined ) texture.compareFunction = data.compareFunction;\n\n\t\t\t\tif ( data.userData !== undefined ) texture.userData = data.userData;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, textures, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tfunction getTexture( uuid ) {\n\n\t\t\tif ( textures[ uuid ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined texture', uuid );\n\n\t\t\t}\n\n\t\t\treturn textures[ uuid ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject.background = getTexture( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.environment !== undefined ) {\n\n\t\t\t\t\tobject.environment = getTexture( data.environment );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( data.fog.name !== '' ) {\n\n\t\t\t\t\t\tobject.fog.name = data.fog.name;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness;\n\t\t\t\tif ( data.backgroundIntensity !== undefined ) object.backgroundIntensity = data.backgroundIntensity;\n\t\t\t\tif ( data.backgroundRotation !== undefined ) object.backgroundRotation.fromArray( data.backgroundRotation );\n\n\t\t\t\tif ( data.environmentIntensity !== undefined ) object.environmentIntensity = data.environmentIntensity;\n\t\t\t\tif ( data.environmentRotation !== undefined ) object.environmentRotation.fromArray( data.environmentRotation );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\t\t\t\tobject.target = data.target || '';\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\t\t\t\tobject.target = data.target || '';\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\t\t\t\tconst instanceColor = data.instanceColor;\n\n\t\t\t\tobject = new InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new InstancedBufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\t\t\t\tif ( instanceColor !== undefined ) object.instanceColor = new InstancedBufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'BatchedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new BatchedMesh( data.maxInstanceCount, data.maxVertexCount, data.maxIndexCount, material );\n\t\t\t\tobject.geometry = geometry;\n\t\t\t\tobject.perObjectFrustumCulled = data.perObjectFrustumCulled;\n\t\t\t\tobject.sortObjects = data.sortObjects;\n\n\t\t\t\tobject._drawRanges = data.drawRanges;\n\t\t\t\tobject._reservedRanges = data.reservedRanges;\n\n\t\t\t\tobject._visibility = data.visibility;\n\t\t\t\tobject._active = data.active;\n\t\t\t\tobject._bounds = data.bounds.map( bound => {\n\n\t\t\t\t\tconst box = new Box3();\n\t\t\t\t\tbox.min.fromArray( bound.boxMin );\n\t\t\t\t\tbox.max.fromArray( bound.boxMax );\n\n\t\t\t\t\tconst sphere = new Sphere();\n\t\t\t\t\tsphere.radius = bound.sphereRadius;\n\t\t\t\t\tsphere.center.fromArray( bound.sphereCenter );\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tboxInitialized: bound.boxInitialized,\n\t\t\t\t\t\tbox: box,\n\n\t\t\t\t\t\tsphereInitialized: bound.sphereInitialized,\n\t\t\t\t\t\tsphere: sphere\n\t\t\t\t\t};\n\n\t\t\t\t} );\n\n\t\t\t\tobject._maxInstanceCount = data.maxInstanceCount;\n\t\t\t\tobject._maxVertexCount = data.maxVertexCount;\n\t\t\t\tobject._maxIndexCount = data.maxIndexCount;\n\n\t\t\t\tobject._geometryInitialized = data.geometryInitialized;\n\t\t\t\tobject._geometryCount = data.geometryCount;\n\n\t\t\t\tobject._matricesTexture = getTexture( data.matricesTexture.uuid );\n\t\t\t\tif ( data.colorsTexture !== undefined ) object._colorsTexture = getTexture( data.colorsTexture.uuid );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.up !== undefined ) object.up.fromArray( data.up );\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.intensity !== undefined ) object.shadow.intensity = data.shadow.intensity;\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance, level.hysteresis );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tbindLightTargets( object ) {\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isDirectionalLight || child.isSpotLight ) {\n\n\t\t\t\tconst uuid = child.target;\n\n\t\t\t\tconst target = object.getObjectByProperty( 'uuid', uuid );\n\n\t\t\t\tif ( target !== undefined ) {\n\n\t\t\t\t\tchild.target = target;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.target = new Object3D();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: UVMapping,\n\tCubeReflectionMapping: CubeReflectionMapping,\n\tCubeRefractionMapping: CubeRefractionMapping,\n\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: CubeUVReflectionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: RepeatWrapping,\n\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: NearestFilter,\n\tNearestMipmapNearestFilter: NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: NearestMipmapLinearFilter,\n\tLinearFilter: LinearFilter,\n\tLinearMipmapNearestFilter: LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: LinearMipmapLinearFilter\n};\n\nclass ImageBitmapLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.isImageBitmapLoader = true;\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.options = { premultiplyAlpha: 'none' };\n\n\t}\n\n\tsetOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\t// If cached is a promise, wait for it to resolve\n\t\t\tif ( cached.then ) {\n\n\t\t\t\tcached.then( imageBitmap => {\n\n\t\t\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} ).catch( e => {\n\n\t\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\t} );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// If cached is not a promise (i.e., it's already an imageBitmap)\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tconst promise = fetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\tCache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t\treturn imageBitmap;\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tCache.remove( url );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tCache.add( url, promise );\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n}\n\nlet _context;\n\nclass AudioContext {\n\n\tstatic getContext() {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t}\n\n\tstatic setContext( value ) {\n\n\t\t_context = value;\n\n\t}\n\n}\n\nclass AudioLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} ).catch( handleError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\thandleError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\tfunction handleError( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\n\t\t}\n\n\t}\n\n}\n\nconst _eyeRight = /*@__PURE__*/ new Matrix4();\nconst _eyeLeft = /*@__PURE__*/ new Matrix4();\nconst _projectionMatrix = /*@__PURE__*/ new Matrix4();\n\nclass StereoCamera {\n\n\tconstructor() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t_projectionMatrix.copy( camera.projectionMatrix );\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( _projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\t_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\t_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( _projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n}\n\nclass Clock {\n\n\tconstructor( autoStart = true ) {\n\n\t\tthis.autoStart = autoStart;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\nconst _position$1 = /*@__PURE__*/ new Vector3();\nconst _quaternion$1 = /*@__PURE__*/ new Quaternion();\nconst _scale$1 = /*@__PURE__*/ new Vector3();\nconst _orientation$1 = /*@__PURE__*/ new Vector3();\n\nclass AudioListener extends Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 );\n\n\t\t_orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position$1.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position$1.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position$1.x, _position$1.y, _position$1.z );\n\t\t\tlistener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass Audio extends Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tif ( this.source !== null ) {\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t}\n\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this._connected === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.isPlaying === true && this.source.detune !== undefined ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _position = /*@__PURE__*/ new Vector3();\nconst _quaternion = /*@__PURE__*/ new Quaternion();\nconst _scale = /*@__PURE__*/ new Vector3();\nconst _orientation = /*@__PURE__*/ new Vector3();\n\nclass PositionalAudio extends Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tconnect() {\n\n\t\tsuper.connect();\n\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tdisconnect() {\n\n\t\tsuper.disconnect();\n\n\t\tthis.panner.disconnect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_slerp( buffer, dstOffset, srcOffset, t ) {\n\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\tQuaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /*@__PURE__*/ /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /*@__PURE__*/ /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /*@__PURE__*/ /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones', 'map' ];\n\nclass Composite {\n\n\tconstructor( targetGroup, path, optionalParsedPath ) {\n\n\t\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tgetValue( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t}\n\n\tsetValue( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t}\n\n\tbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t}\n\n\tunbind() {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n}\n\n// Note: This class uses a State pattern on a per-method basis:\n// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n// prototype version of these methods with one that represents\n// the bound state. When the property is not found, the methods\n// become no-ops.\nclass PropertyBinding {\n\n\tconstructor( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName );\n\n\t\tthis.rootNode = rootNode;\n\n\t\t// initial state of these methods that calls 'bind'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n\n\tstatic create( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tstatic sanitizeNodeName( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t}\n\n\tstatic parseTrackName( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( matches === null ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t}\n\n\tstatic findNode( root, nodeName ) {\n\n\t\tif ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable() {}\n\t_setValue_unavailable() {}\n\n\t// Getters\n\n\t_getValue_direct( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.targetObject[ this.propertyName ];\n\n\t}\n\n\t_getValue_array( buffer, offset ) {\n\n\t\tconst source = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t}\n\n\t}\n\n\t_getValue_arrayElement( buffer, offset ) {\n\n\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t}\n\n\t_getValue_toArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t}\n\n\t// Direct\n\n\t_setValue_direct( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// EntireArray\n\n\t_setValue_array( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t}\n\n\t_setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tconst dest = this.resolvedProperty;\n\n\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t}\n\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// ArrayElement\n\n\t_setValue_arrayElement( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t}\n\n\t_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t// HasToFromArray\n\n\t_setValue_fromArray( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t}\n\n\t_setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.needsUpdate = true;\n\n\t}\n\n\t_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t}\n\n\t_getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t}\n\n\t_setValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t}\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind() {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName );\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.warn( 'THREE.PropertyBinding: No target node found for track: ' + this.path + '.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map':\n\n\t\t\t\t\tif ( 'map' in targetObject ) {\n\n\t\t\t\t\t\ttargetObject = targetObject.map;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.map ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.map;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t}\n\n\tunbind() {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n}\n\nPropertyBinding.Composite = Composite;\n\nPropertyBinding.prototype.BindingType = {\n\tDirect: 0,\n\tEntireArray: 1,\n\tArrayElement: 2,\n\tHasFromToArray: 3\n};\n\nPropertyBinding.prototype.Versioning = {\n\tNone: 0,\n\tNeedsUpdate: 1,\n\tMatrixWorldNeedsUpdate: 2\n};\n\nPropertyBinding.prototype.GetterByBindingType = [\n\n\tPropertyBinding.prototype._getValue_direct,\n\tPropertyBinding.prototype._getValue_array,\n\tPropertyBinding.prototype._getValue_arrayElement,\n\tPropertyBinding.prototype._getValue_toArray,\n\n];\n\nPropertyBinding.prototype.SetterByBindingTypeAndVersioning = [\n\n\t[\n\t\t// Direct\n\t\tPropertyBinding.prototype._setValue_direct,\n\t\tPropertyBinding.prototype._setValue_direct_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// EntireArray\n\n\t\tPropertyBinding.prototype._setValue_array,\n\t\tPropertyBinding.prototype._setValue_array_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// ArrayElement\n\t\tPropertyBinding.prototype._setValue_arrayElement,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,\n\n\t], [\n\n\t\t// HasToFromArray\n\t\tPropertyBinding.prototype._setValue_fromArray,\n\t\tPropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,\n\t\tPropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,\n\n\t]\n\n];\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nclass AnimationObjectGroup {\n\n\tconstructor() {\n\n\t\tthis.isAnimationObjectGroup = true;\n\n\t\tthis.uuid = generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tadd() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\tremove() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// remove & forget\n\tuncache() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t}\n\n\tunsubscribe_( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n}\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\tdeltaTime = 0;\n\n\t\t\t} else {\n\n\n\t\t\t\tthis._startTime = null; // unschedule\n\t\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _controlInterpolantsResultBuffer = new Float32Array( 1 );\n\n\nclass AnimationMixer extends EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t}\n\n\t_activateAction( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t}\n\n\t_deactivateAction( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t}\n\n\t// Memory manager\n\n\t_initMemoryManager() {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t}\n\n\t_removeInactiveAction( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t}\n\n\t_removeInactiveBindingsForAction( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_lendAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t}\n\n\t_takeBackAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t}\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t}\n\n\t_removeInactiveBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t}\n\n\t_takeBackBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t}\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, _controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t_takeBackControlInterpolant( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t}\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t}\n\n\t// get an existing action\n\texistingAction( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// advance the time and update apply the animation\n\tupdate( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t// return this mixer's root target object\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t}\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remove a targeted clip from the cache\n\tuncacheAction( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n}\n\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\nlet _id = 0;\n\nclass UniformsGroup extends EventDispatcher {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isUniformsGroup = true;\n\n\t\tObject.defineProperty( this, 'id', { value: _id ++ } );\n\n\t\tthis.name = '';\n\n\t\tthis.usage = StaticDrawUsage;\n\t\tthis.uniforms = [];\n\n\t}\n\n\tadd( uniform ) {\n\n\t\tthis.uniforms.push( uniform );\n\n\t\treturn this;\n\n\t}\n\n\tremove( uniform ) {\n\n\t\tconst index = this.uniforms.indexOf( uniform );\n\n\t\tif ( index !== - 1 ) this.uniforms.splice( index, 1 );\n\n\t\treturn this;\n\n\t}\n\n\tsetName( name ) {\n\n\t\tthis.name = name;\n\n\t\treturn this;\n\n\t}\n\n\tsetUsage( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tthis.name = source.name;\n\t\tthis.usage = source.usage;\n\n\t\tconst uniformsSource = source.uniforms;\n\n\t\tthis.uniforms.length = 0;\n\n\t\tfor ( let i = 0, l = uniformsSource.length; i < l; i ++ ) {\n\n\t\t\tconst uniforms = Array.isArray( uniformsSource[ i ] ) ? uniformsSource[ i ] : [ uniformsSource[ i ] ];\n\n\t\t\tfor ( let j = 0; j < uniforms.length; j ++ ) {\n\n\t\t\t\tthis.uniforms.push( uniforms[ j ].clone() );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass InstancedInterleavedBuffer extends InterleavedBuffer {\n\n\tconstructor( array, stride, meshPerAttribute = 1 ) {\n\n\t\tsuper( array, stride );\n\n\t\tthis.isInstancedInterleavedBuffer = true;\n\n\t\tthis.meshPerAttribute = meshPerAttribute;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t}\n\n\tclone( data ) {\n\n\t\tconst ib = super.clone( data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t}\n\n\ttoJSON( data ) {\n\n\t\tconst json = super.toJSON( data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n}\n\nclass GLBufferAttribute {\n\n\tconstructor( buffer, type, itemSize, elementSize, count ) {\n\n\t\tthis.isGLBufferAttribute = true;\n\n\t\tthis.name = '';\n\n\t\tthis.buffer = buffer;\n\t\tthis.type = type;\n\t\tthis.itemSize = itemSize;\n\t\tthis.elementSize = elementSize;\n\t\tthis.count = count;\n\n\t\tthis.version = 0;\n\n\t}\n\n\tset needsUpdate( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n\tsetBuffer( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t}\n\n\tsetType( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetItemSize( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t}\n\n\tsetCount( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _matrix = /*@__PURE__*/ new Matrix4();\n\nclass Raycaster {\n\n\tconstructor( origin, direction, near = 0, far = Infinity ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near;\n\t\tthis.far = far;\n\t\tthis.camera = null;\n\t\tthis.layers = new Layers();\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: { threshold: 1 },\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t}\n\n\tset( origin, direction ) {\n\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.ray.set( origin, direction );\n\n\t}\n\n\tsetFromCamera( coords, camera ) {\n\n\t\tif ( camera.isPerspectiveCamera ) {\n\n\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\t\t\tthis.camera = camera;\n\n\t\t} else if ( camera.isOrthographicCamera ) {\n\n\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\t\t\tthis.camera = camera;\n\n\t\t} else {\n\n\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );\n\n\t\t}\n\n\t}\n\n\tsetFromXRController( controller ) {\n\n\t\t_matrix.identity().extractRotation( controller.matrixWorld );\n\n\t\tthis.ray.origin.setFromMatrixPosition( controller.matrixWorld );\n\t\tthis.ray.direction.set( 0, 0, - 1 ).applyMatrix4( _matrix );\n\n\t\treturn this;\n\n\t}\n\n\tintersectObject( object, recursive = true, intersects = [] ) {\n\n\t\tintersect( object, this, intersects, recursive );\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n\tintersectObjects( objects, recursive = true, intersects = [] ) {\n\n\t\tfor ( let i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\tintersect( objects[ i ], this, intersects, recursive );\n\n\t\t}\n\n\t\tintersects.sort( ascSort );\n\n\t\treturn intersects;\n\n\t}\n\n}\n\nfunction ascSort( a, b ) {\n\n\treturn a.distance - b.distance;\n\n}\n\nfunction intersect( object, raycaster, intersects, recursive ) {\n\n\tlet propagate = true;\n\n\tif ( object.layers.test( raycaster.layers ) ) {\n\n\t\tconst result = object.raycast( raycaster, intersects );\n\n\t\tif ( result === false ) propagate = false;\n\n\t}\n\n\tif ( propagate === true && recursive === true ) {\n\n\t\tconst children = object.children;\n\n\t\tfor ( let i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\tintersect( children[ i ], raycaster, intersects, true );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n *\n * phi (the polar angle) is measured from the positive y-axis. The positive y-axis is up.\n * theta (the azimuthal angle) is measured from the positive z-axis.\n */\nclass Spherical {\n\n\tconstructor( radius = 1, phi = 0, theta = 0 ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi; // polar angle\n\t\tthis.theta = theta; // azimuthal angle\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, phi, theta ) {\n\n\t\tthis.radius = radius;\n\t\tthis.phi = phi;\n\t\tthis.theta = theta;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.phi = other.phi;\n\t\tthis.theta = other.theta;\n\n\t\treturn this;\n\n\t}\n\n\t// restrict phi to be between EPS and PI-EPS\n\tmakeSafe() {\n\n\t\tconst EPS = 0.000001;\n\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + y * y + z * z );\n\n\t\tif ( this.radius === 0 ) {\n\n\t\t\tthis.theta = 0;\n\t\t\tthis.phi = 0;\n\n\t\t} else {\n\n\t\t\tthis.theta = Math.atan2( x, z );\n\t\t\tthis.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\tthis.radius = radius; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = y; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nclass Matrix2 {\n\n\tconstructor( n11, n12, n21, n22 ) {\n\n\t\tMatrix2.prototype.isMatrix2 = true;\n\n\t\tthis.elements = [\n\t\t\t1, 0,\n\t\t\t0, 1,\n\t\t];\n\n\t\tif ( n11 !== undefined ) {\n\n\t\t\tthis.set( n11, n12, n21, n22 );\n\n\t\t}\n\n\t}\n\n\tidentity() {\n\n\t\tthis.set(\n\t\t\t1, 0,\n\t\t\t0, 1,\n\t\t);\n\n\t\treturn this;\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tset( n11, n12, n21, n22 ) {\n\n\t\tconst te = this.elements;\n\n\t\tte[ 0 ] = n11; te[ 2 ] = n12;\n\t\tte[ 1 ] = n21; te[ 3 ] = n22;\n\n\t\treturn this;\n\n\t}\n\n}\n\nconst _vector$4 = /*@__PURE__*/ new Vector2();\n\nclass Box2 {\n\n\tconstructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {\n\n\t\tthis.isBox2 = true;\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x >= this.min.x && point.x <= this.max.x &&\n\t\t\tpoint.y >= this.min.y && point.y <= this.max.y;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x >= this.min.x && box.min.x <= this.max.x &&\n\t\t\tbox.max.y >= this.min.y && box.min.y <= this.max.y;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\treturn this.clampPoint( point, _vector$4 ).distanceTo( point );\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nconst _startP = /*@__PURE__*/ new Vector3();\nconst _startEnd = /*@__PURE__*/ new Vector3();\n\nclass Line3 {\n\n\tconstructor( start = new Vector3(), end = new Vector3() ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\nconst _vector$3 = /*@__PURE__*/ new Vector3();\n\nclass SpotLightHelper extends Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'SpotLightHelper';\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t// update the local matrix based on the parent and light target transforms\n\t\tif ( this.parent ) {\n\n\t\t\tthis.parent.updateWorldMatrix( true );\n\n\t\t\tthis.matrix\n\t\t\t\t.copy( this.parent.matrixWorld )\n\t\t\t\t.invert()\n\t\t\t\t.multiply( this.light.matrixWorld );\n\n\t\t} else {\n\n\t\t\tthis.matrix.copy( this.light.matrixWorld );\n\n\t\t}\n\n\t\tthis.matrixWorld.copy( this.light.matrixWorld );\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector$3 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\nconst _vector$2 = /*@__PURE__*/ new Vector3();\nconst _boneMatrix = /*@__PURE__*/ new Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new Matrix4();\n\n\nclass SkeletonHelper extends LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new Color( 0, 0, 1 );\n\t\tconst color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.type = 'SkeletonHelper';\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector$2.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object.isBone === true ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\nclass PointLightHelper extends Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\nconst _vector$1 = /*@__PURE__*/ new Vector3();\nconst _color1 = /*@__PURE__*/ new Color();\nconst _color2 = /*@__PURE__*/ new Color();\n\nclass HemisphereLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'HemisphereLightHelper';\n\n\t\tconst geometry = new OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\n\t\tmesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\nclass GridHelper extends LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass PolarGridHelper extends LineSegments {\n\n\tconstructor( radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new Color( color1 );\n\t\tcolor2 = new Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the sectors\n\n\t\tif ( sectors > 1 ) {\n\n\t\t\tfor ( let i = 0; i < sectors; i ++ ) {\n\n\t\t\t\tconst v = ( i / sectors ) * ( Math.PI * 2 );\n\n\t\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( x, 0, z );\n\n\t\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// create the rings\n\n\t\tfor ( let i = 0; i < rings; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / rings * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nconst _v1 = /*@__PURE__*/ new Vector3();\nconst _v2 = /*@__PURE__*/ new Vector3();\nconst _v3 = /*@__PURE__*/ new Vector3();\n\nclass DirectionalLightHelper extends Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\n\t\tthis.light = light;\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'DirectionalLightHelper';\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateWorldMatrix( true, false );\n\t\tthis.light.target.updateWorldMatrix( true, false );\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\nconst _vector = /*@__PURE__*/ new Vector3();\nconst _camera = /*@__PURE__*/ new Camera();\n\n/**\n *\t- shows frustum, line of sight and up of the camera\n *\t- suitable for fast updates\n * \t- based on frustum visualization in lightgl.js shadowmap example\n *\t\thttps://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html\n */\n\nclass CameraHelper extends LineSegments {\n\n\tconstructor( camera ) {\n\n\t\tconst geometry = new BufferGeometry();\n\t\tconst material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst pointMap = {};\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2' );\n\t\taddLine( 'n2', 'n4' );\n\t\taddLine( 'n4', 'n3' );\n\t\taddLine( 'n3', 'n1' );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2' );\n\t\taddLine( 'f2', 'f4' );\n\t\taddLine( 'f4', 'f3' );\n\t\taddLine( 'f3', 'f1' );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1' );\n\t\taddLine( 'n2', 'f2' );\n\t\taddLine( 'n3', 'f3' );\n\t\taddLine( 'n4', 'f4' );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1' );\n\t\taddLine( 'p', 'n2' );\n\t\taddLine( 'p', 'n3' );\n\t\taddLine( 'p', 'n4' );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2' );\n\t\taddLine( 'u2', 'u3' );\n\t\taddLine( 'u3', 'u1' );\n\n\t\t// target\n\n\t\taddLine( 'c', 't' );\n\t\taddLine( 'p', 'c' );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2' );\n\t\taddLine( 'cn3', 'cn4' );\n\n\t\taddLine( 'cf1', 'cf2' );\n\t\taddLine( 'cf3', 'cf4' );\n\n\t\tfunction addLine( a, b ) {\n\n\t\t\taddPoint( a );\n\t\t\taddPoint( b );\n\n\t\t}\n\n\t\tfunction addPoint( id ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( 0, 0, 0 );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'CameraHelper';\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t\t// colors\n\n\t\tconst colorFrustum = new Color( 0xffaa00 );\n\t\tconst colorCone = new Color( 0xff0000 );\n\t\tconst colorUp = new Color( 0x00aaff );\n\t\tconst colorTarget = new Color( 0xffffff );\n\t\tconst colorCross = new Color( 0x333333 );\n\n\t\tthis.setColors( colorFrustum, colorCone, colorUp, colorTarget, colorCross );\n\n\t}\n\n\tsetColors( frustum, cone, up, target, cross ) {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst colorAttribute = geometry.getAttribute( 'color' );\n\n\t\t// near\n\n\t\tcolorAttribute.setXYZ( 0, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 1, frustum.r, frustum.g, frustum.b ); // n1, n2\n\t\tcolorAttribute.setXYZ( 2, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 3, frustum.r, frustum.g, frustum.b ); // n2, n4\n\t\tcolorAttribute.setXYZ( 4, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 5, frustum.r, frustum.g, frustum.b ); // n4, n3\n\t\tcolorAttribute.setXYZ( 6, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 7, frustum.r, frustum.g, frustum.b ); // n3, n1\n\n\t\t// far\n\n\t\tcolorAttribute.setXYZ( 8, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 9, frustum.r, frustum.g, frustum.b ); // f1, f2\n\t\tcolorAttribute.setXYZ( 10, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 11, frustum.r, frustum.g, frustum.b ); // f2, f4\n\t\tcolorAttribute.setXYZ( 12, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 13, frustum.r, frustum.g, frustum.b ); // f4, f3\n\t\tcolorAttribute.setXYZ( 14, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 15, frustum.r, frustum.g, frustum.b ); // f3, f1\n\n\t\t// sides\n\n\t\tcolorAttribute.setXYZ( 16, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 17, frustum.r, frustum.g, frustum.b ); // n1, f1\n\t\tcolorAttribute.setXYZ( 18, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 19, frustum.r, frustum.g, frustum.b ); // n2, f2\n\t\tcolorAttribute.setXYZ( 20, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 21, frustum.r, frustum.g, frustum.b ); // n3, f3\n\t\tcolorAttribute.setXYZ( 22, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 23, frustum.r, frustum.g, frustum.b ); // n4, f4\n\n\t\t// cone\n\n\t\tcolorAttribute.setXYZ( 24, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 25, cone.r, cone.g, cone.b ); // p, n1\n\t\tcolorAttribute.setXYZ( 26, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 27, cone.r, cone.g, cone.b ); // p, n2\n\t\tcolorAttribute.setXYZ( 28, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 29, cone.r, cone.g, cone.b ); // p, n3\n\t\tcolorAttribute.setXYZ( 30, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 31, cone.r, cone.g, cone.b ); // p, n4\n\n\t\t// up\n\n\t\tcolorAttribute.setXYZ( 32, up.r, up.g, up.b ); colorAttribute.setXYZ( 33, up.r, up.g, up.b ); // u1, u2\n\t\tcolorAttribute.setXYZ( 34, up.r, up.g, up.b ); colorAttribute.setXYZ( 35, up.r, up.g, up.b ); // u2, u3\n\t\tcolorAttribute.setXYZ( 36, up.r, up.g, up.b ); colorAttribute.setXYZ( 37, up.r, up.g, up.b ); // u3, u1\n\n\t\t// target\n\n\t\tcolorAttribute.setXYZ( 38, target.r, target.g, target.b ); colorAttribute.setXYZ( 39, target.r, target.g, target.b ); // c, t\n\t\tcolorAttribute.setXYZ( 40, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 41, cross.r, cross.g, cross.b ); // p, c\n\n\t\t// cross\n\n\t\tcolorAttribute.setXYZ( 42, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 43, cross.r, cross.g, cross.b ); // cn1, cn2\n\t\tcolorAttribute.setXYZ( 44, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 45, cross.r, cross.g, cross.b ); // cn3, cn4\n\n\t\tcolorAttribute.setXYZ( 46, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 47, cross.r, cross.g, cross.b ); // cf1, cf2\n\t\tcolorAttribute.setXYZ( 48, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 49, cross.r, cross.g, cross.b ); // cf3, cf4\n\n\t\tcolorAttribute.needsUpdate = true;\n\n\t}\n\n\tupdate() {\n\n\t\tconst geometry = this.geometry;\n\t\tconst pointMap = this.pointMap;\n\n\t\tconst w = 1, h = 1;\n\n\t\t// we need just camera projection matrix inverse\n\t\t// world matrix must be identity\n\n\t\t_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );\n\n\t\t// center / target\n\n\t\tsetPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );\n\t\tsetPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );\n\n\t\t// near\n\n\t\tsetPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );\n\t\tsetPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );\n\t\tsetPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );\n\t\tsetPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );\n\n\t\t// far\n\n\t\tsetPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );\n\t\tsetPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );\n\t\tsetPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );\n\t\tsetPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );\n\n\t\t// up\n\n\t\tsetPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );\n\t\tsetPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );\n\n\t\t// cross\n\n\t\tsetPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );\n\t\tsetPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );\n\t\tsetPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );\n\t\tsetPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );\n\n\t\tsetPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );\n\t\tsetPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );\n\t\tsetPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );\n\t\tsetPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\n\nfunction setPoint( point, pointMap, geometry, camera, x, y, z ) {\n\n\t_vector.set( x, y, z ).unproject( camera );\n\n\tconst points = pointMap[ point ];\n\n\tif ( points !== undefined ) {\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tposition.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t}\n\n}\n\nconst _box = /*@__PURE__*/ new Box3();\n\nclass BoxHelper extends LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source, recursive ) {\n\n\t\tsuper.copy( source, recursive );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass Box3Helper extends LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass PlaneHelper extends Line {\n\n\tconstructor( plane, size = 1, hex = 0xffff00 ) {\n\n\t\tconst color = hex;\n\n\t\tconst positions = [ 1, - 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, - 1, 0, 1, 1, 0 ];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tsuper( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = size;\n\n\t\tconst positions2 = [ 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\n\t\tconst geometry2 = new BufferGeometry();\n\t\tgeometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tthis.position.set( 0, 0, 0 );\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, 1 );\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tthis.translateZ( - this.plane.constant );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n}\n\nconst _axis = /*@__PURE__*/ new Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends Object3D {\n\n\t// dir is assumed to be normalized\n\n\tconstructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.line.geometry.dispose();\n\t\tthis.line.material.dispose();\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n}\n\nclass AxesHelper extends LineSegments {\n\n\tconstructor( size = 1 ) {\n\n\t\tconst vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tconst colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tconst geometry = new BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'AxesHelper';\n\n\t}\n\n\tsetColors( xAxisColor, yAxisColor, zAxisColor ) {\n\n\t\tconst color = new Color();\n\t\tconst array = this.geometry.attributes.color.array;\n\n\t\tcolor.set( xAxisColor );\n\t\tcolor.toArray( array, 0 );\n\t\tcolor.toArray( array, 3 );\n\n\t\tcolor.set( yAxisColor );\n\t\tcolor.toArray( array, 6 );\n\t\tcolor.toArray( array, 9 );\n\n\t\tcolor.set( zAxisColor );\n\t\tcolor.toArray( array, 12 );\n\t\tcolor.toArray( array, 15 );\n\n\t\tthis.geometry.attributes.color.needsUpdate = true;\n\n\t\treturn this;\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n}\n\nclass ShapePath {\n\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPath = new Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\ttoShapes( isCCW ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tlet toChange = 0;\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange ++;\n\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( toChange > 0 && ambiguous === false ) {\n\n\t\t\t\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nclass WebGLMultipleRenderTargets extends WebGLRenderTarget { // @deprecated, r162\n\n\tconstructor( width = 1, height = 1, count = 1, options = {} ) {\n\n\t\tconsole.warn( 'THREE.WebGLMultipleRenderTargets has been deprecated and will be removed in r172. Use THREE.WebGLRenderTarget and set the \"count\" parameter to enable MRT.' );\n\n\t\tsuper( width, height, { ...options, count } );\n\n\t\tthis.isWebGLMultipleRenderTargets = true;\n\n\t}\n\n\tget texture() {\n\n\t\treturn this.textures;\n\n\t}\n\n}\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: REVISION,\n\t} } ) );\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = REVISION;\n\n\t}\n\n}\n\nexport { ACESFilmicToneMapping, AddEquation, AddOperation, AdditiveAnimationBlendMode, AdditiveBlending, AgXToneMapping, AlphaFormat, AlwaysCompare, AlwaysDepth, AlwaysStencilFunc, AmbientLight, AnimationAction, AnimationClip, AnimationLoader, AnimationMixer, AnimationObjectGroup, AnimationUtils, ArcCurve, ArrayCamera, ArrowHelper, AttachedBindMode, Audio, AudioAnalyser, AudioContext, AudioListener, AudioLoader, AxesHelper, BackSide, BasicDepthPacking, BasicShadowMap, BatchedMesh, Bone, BooleanKeyframeTrack, Box2, Box3, Box3Helper, BoxGeometry, BoxHelper, BufferAttribute, BufferGeometry, BufferGeometryLoader, ByteType, Cache, Camera, CameraHelper, CanvasTexture, CapsuleGeometry, CatmullRomCurve3, CineonToneMapping, CircleGeometry, ClampToEdgeWrapping, Clock, Color, ColorKeyframeTrack, ColorManagement, CompressedArrayTexture, CompressedCubeTexture, CompressedTexture, CompressedTextureLoader, ConeGeometry, ConstantAlphaFactor, ConstantColorFactor, CubeCamera, CubeReflectionMapping, CubeRefractionMapping, CubeTexture, CubeTextureLoader, CubeUVReflectionMapping, CubicBezierCurve, CubicBezierCurve3, CubicInterpolant, CullFaceBack, CullFaceFront, CullFaceFrontBack, CullFaceNone, Curve, CurvePath, CustomBlending, CustomToneMapping, CylinderGeometry, Cylindrical, Data3DTexture, DataArrayTexture, DataTexture, DataTextureLoader, DataUtils, DecrementStencilOp, DecrementWrapStencilOp, DefaultLoadingManager, DepthFormat, DepthStencilFormat, DepthTexture, DetachedBindMode, DirectionalLight, DirectionalLightHelper, DiscreteInterpolant, DisplayP3ColorSpace, DodecahedronGeometry, DoubleSide, DstAlphaFactor, DstColorFactor, DynamicCopyUsage, DynamicDrawUsage, DynamicReadUsage, EdgesGeometry, EllipseCurve, EqualCompare, EqualDepth, EqualStencilFunc, EquirectangularReflectionMapping, EquirectangularRefractionMapping, Euler, EventDispatcher, ExtrudeGeometry, FileLoader, Float16BufferAttribute, Float32BufferAttribute, FloatType, Fog, FogExp2, FramebufferTexture, FrontSide, Frustum, GLBufferAttribute, GLSL1, GLSL3, GreaterCompare, GreaterDepth, GreaterEqualCompare, GreaterEqualDepth, GreaterEqualStencilFunc, GreaterStencilFunc, GridHelper, Group, HalfFloatType, HemisphereLight, HemisphereLightHelper, IcosahedronGeometry, ImageBitmapLoader, ImageLoader, ImageUtils, IncrementStencilOp, IncrementWrapStencilOp, InstancedBufferAttribute, InstancedBufferGeometry, InstancedInterleavedBuffer, InstancedMesh, Int16BufferAttribute, Int32BufferAttribute, Int8BufferAttribute, IntType, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, InterpolateSmooth, InvertStencilOp, KeepStencilOp, KeyframeTrack, LOD, LatheGeometry, Layers, LessCompare, LessDepth, LessEqualCompare, LessEqualDepth, LessEqualStencilFunc, LessStencilFunc, Light, LightProbe, Line, Line3, LineBasicMaterial, LineCurve, LineCurve3, LineDashedMaterial, LineLoop, LineSegments, LinearDisplayP3ColorSpace, LinearFilter, LinearInterpolant, LinearMipMapLinearFilter, LinearMipMapNearestFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, LinearSRGBColorSpace, LinearToneMapping, LinearTransfer, Loader, LoaderUtils, LoadingManager, LoopOnce, LoopPingPong, LoopRepeat, LuminanceAlphaFormat, LuminanceFormat, MOUSE, Material, MaterialLoader, MathUtils, Matrix2, Matrix3, Matrix4, MaxEquation, Mesh, MeshBasicMaterial, MeshDepthMaterial, MeshDistanceMaterial, MeshLambertMaterial, MeshMatcapMaterial, MeshNormalMaterial, MeshPhongMaterial, MeshPhysicalMaterial, MeshStandardMaterial, MeshToonMaterial, MinEquation, MirroredRepeatWrapping, MixOperation, MultiplyBlending, MultiplyOperation, NearestFilter, NearestMipMapLinearFilter, NearestMipMapNearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NeutralToneMapping, NeverCompare, NeverDepth, NeverStencilFunc, NoBlending, NoColorSpace, NoToneMapping, NormalAnimationBlendMode, NormalBlending, NotEqualCompare, NotEqualDepth, NotEqualStencilFunc, NumberKeyframeTrack, Object3D, ObjectLoader, ObjectSpaceNormalMap, OctahedronGeometry, OneFactor, OneMinusConstantAlphaFactor, OneMinusConstantColorFactor, OneMinusDstAlphaFactor, OneMinusDstColorFactor, OneMinusSrcAlphaFactor, OneMinusSrcColorFactor, OrthographicCamera, P3Primaries, PCFShadowMap, PCFSoftShadowMap, PMREMGenerator, Path, PerspectiveCamera, Plane, PlaneGeometry, PlaneHelper, PointLight, PointLightHelper, Points, PointsMaterial, PolarGridHelper, PolyhedronGeometry, PositionalAudio, PropertyBinding, PropertyMixer, QuadraticBezierCurve, QuadraticBezierCurve3, Quaternion, QuaternionKeyframeTrack, QuaternionLinearInterpolant, RED_GREEN_RGTC2_Format, RED_RGTC1_Format, REVISION, RGBADepthPacking, RGBAFormat, RGBAIntegerFormat, RGBA_ASTC_10x10_Format, RGBA_ASTC_10x5_Format, RGBA_ASTC_10x6_Format, RGBA_ASTC_10x8_Format, RGBA_ASTC_12x10_Format, RGBA_ASTC_12x12_Format, RGBA_ASTC_4x4_Format, RGBA_ASTC_5x4_Format, RGBA_ASTC_5x5_Format, RGBA_ASTC_6x5_Format, RGBA_ASTC_6x6_Format, RGBA_ASTC_8x5_Format, RGBA_ASTC_8x6_Format, RGBA_ASTC_8x8_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_2BPPV1_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT1_Format, RGBA_S3TC_DXT3_Format, RGBA_S3TC_DXT5_Format, RGBDepthPacking, RGBFormat, RGBIntegerFormat, RGB_BPTC_SIGNED_Format, RGB_BPTC_UNSIGNED_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_2BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, RGDepthPacking, RGFormat, RGIntegerFormat, RawShaderMaterial, Ray, Raycaster, Rec709Primaries, RectAreaLight, RedFormat, RedIntegerFormat, ReinhardToneMapping, RenderTarget, RepeatWrapping, ReplaceStencilOp, ReverseSubtractEquation, RingGeometry, SIGNED_RED_GREEN_RGTC2_Format, SIGNED_RED_RGTC1_Format, SRGBColorSpace, SRGBTransfer, Scene, ShaderChunk, ShaderLib, ShaderMaterial, ShadowMaterial, Shape, ShapeGeometry, ShapePath, ShapeUtils, ShortType, Skeleton, SkeletonHelper, SkinnedMesh, Source, Sphere, SphereGeometry, Spherical, SphericalHarmonics3, SplineCurve, SpotLight, SpotLightHelper, Sprite, SpriteMaterial, SrcAlphaFactor, SrcAlphaSaturateFactor, SrcColorFactor, StaticCopyUsage, StaticDrawUsage, StaticReadUsage, StereoCamera, StreamCopyUsage, StreamDrawUsage, StreamReadUsage, StringKeyframeTrack, SubtractEquation, SubtractiveBlending, TOUCH, TangentSpaceNormalMap, TetrahedronGeometry, Texture, TextureLoader, TextureUtils, TorusGeometry, TorusKnotGeometry, Triangle, TriangleFanDrawMode, TriangleStripDrawMode, TrianglesDrawMode, TubeGeometry, UVMapping, Uint16BufferAttribute, Uint32BufferAttribute, Uint8BufferAttribute, Uint8ClampedBufferAttribute, Uniform, UniformsGroup, UniformsLib, UniformsUtils, UnsignedByteType, UnsignedInt248Type, UnsignedInt5999Type, UnsignedIntType, UnsignedShort4444Type, UnsignedShort5551Type, UnsignedShortType, VSMShadowMap, Vector2, Vector3, Vector4, VectorKeyframeTrack, VideoTexture, WebGL3DRenderTarget, WebGLArrayRenderTarget, WebGLCoordinateSystem, WebGLCubeRenderTarget, WebGLMultipleRenderTargets, WebGLRenderTarget, WebGLRenderer, WebGLUtils, WebGPUCoordinateSystem, WireframeGeometry, WrapAroundEnding, ZeroCurvatureEnding, ZeroFactor, ZeroSlopeEnding, ZeroStencilOp, createCanvasElement };\n","// IIID Parametrics\n// ================\n//\n// This library implements parametric modeling of frame and panel doors and\n// similar constructions. The main challenge is to avoid stretching the UV\n// coordinates of a mesh while manipulating its overall dimensions. This is\n// accomplished mainly through the concept of\n// [nine slice scaling](https://en.wikipedia.org/wiki/9-slice_scaling),\n// introduced in Adobe Flash. The library uses the terms rail, stile, and panel,\n// which have special meaning in [frame and\n// panel](https://en.wikipedia.org/wiki/Frame_and_panel) construction.\n\nimport {\n Box2,\n BoxGeometry,\n BufferAttribute,\n BufferGeometry,\n Vector2,\n Vector3\n} from 'three';\n\n\n// The AttributeBuilder class inserts data into an underlying typed array.\n// The underlying array needs to be constructed with a known capacity and\n// the builder will not check if it is about to overrun that capacity, but a\n// well designed mesh construction algorithm shouldn't run into runtime\n// errors.\n// `Type` is the constructor of the TypedArray to use, e.g. Float32Array in\n// most cases.\n// `itemSize` is 2 for UV attributes, or 3 for positions or normals.\n// `count` is the number of items, so the underlying TypedArray has length\n// itemSize*count.\nclass AttributeBuilder {\n constructor(Type, itemSize, count) {\n this.data = new Type(itemSize*count);\n this.itemSize = itemSize;\n this.index = 0;\n }\n\n // Each item parameter should be an array of numbers matching the type\n // of the array. The length of each item should match the itemSize with\n // which we were constructed.\n add(...items) {\n const jlen = this.itemSize;\n for(let item of items) {\n for(let j=0; j < jlen; j++){\n this.data[this.index++] = item[j];\n }\n }\n }\n\n // This is a convenience method for adding a triangle given three\n // points. It's the same as calling .add with three arguments, but has\n // the advantage of explicitly naming its purpose.\n tri(a, b, c) {\n this.add(a, b, c);\n }\n\n // Given four items, generate two triangles with the same winding order.\n // If the quad is given in counterclockwise order with vertexes a, b,\n // c, and d, then the two triangles generated are abc, and acd.\n //
\n    //   d       c\n    //    -------\n    //    |    /|\n    //    |  /  |\n    //    |/    |\n    //    -------\n    //   a       b\n    // 
\n quad(a, b, c, d) {\n this.add(a, b, c);\n this.add(a, c, d);\n }\n\n // Inserts a quad, but with reversed winding order. Using this method\n // makes it easier to copy-paste from a similar surface with the\n // opposite facing direction\n rquad(a, b, c, d) {\n this.quad(a, d, c, b)\n }\n\n // Returns a new BufferAttribute with the underlying data and item size.\n finalize() {\n if(this.i < this.data.length) {\n console.warn('AttributeBuilder finalized but not all data written.', this);\n }\n return new BufferAttribute(this.data, this.itemSize);\n }\n}\n\n// Doors\n// ------\n\n// This section contains functions related to door construction.\n\n// **buttJointFrame(geometry, dims)**\n//\n// Returns a BufferGeometry instance representing a butt jointed door frame\n// with the given outer dimensions. The stile runs the full height of the\n// frame whereas the rail only runs the width minus twice the width of the\n// stile.\n//\n// `geometry` should include BufferGeometry instances named\n// `frame_rail_endcap`, `frame_rail_body`, `frame_stile_endcap`, and\n// `frame_stile_body`.\nexport const buttJointFrame = function(geometry, dims){\n var clones = Object();\n for( var name of ['frame_rail_endcap', 'frame_rail_body', 'frame_stile_endcap', 'frame_stile_body']){\n clones[name] = partRemoveOffset(geometry[name].clone());\n };\n\n var stile_dims = dimensions(clones['frame_stile_body']);\n var rail_length = dims.width - 2*stile_dims.width; // rails run between stiles\n var stile_length = dims.height; // stiles run full height\n\n var left = stile(clones, stile_length);\n var right = mirror(left, AXIS_X);\n // top is a reserved word in JS, so we use top_rail instead\n var bottom_rail = rail(clones, rail_length);\n var top_rail = mirror(bottom_rail, AXIS_Y);\n\n var rail_dims = dimensions(bottom_rail);\n\n right.translate(rail_length + stile_dims.width, 0, 0);\n bottom_rail.translate(stile_dims.width, 0, 0);\n top_rail.translate(stile_dims.width, stile_length - rail_dims.height, 0);\n\n let result = join([left, right, top_rail, bottom_rail]);\n result.name = 'ButtJointFrame';\n return result;\n}\n\n// **miteredFrame(geometry, dims)**\n//\n// Returns a BufferGeometry instance representing a door frame made with\n// miter cuts.\n//\n// `geometry` should include BufferGeometry instances named\n// `frame_rail_endcap`, `frame_rail_body`, `frame_stile_endcap`, and\n// `frame_stile_body`.\nexport const miteredFrame = function(geometry, dims){\n var clones = Object();\n for( var name of ['frame_rail_endcap', 'frame_rail_body', 'frame_stile_endcap', 'frame_stile_body']){\n clones[name] = partRemoveOffset(geometry[name].clone());\n };\n\n var left = stile(clones, dims.height);\n var right = mirror(left, AXIS_X);\n\n var bottom_rail = rail(clones, dims.width);\n var top_rail = mirror(bottom_rail, AXIS_Y);\n\n var stile_dims = dimensions(left);\n right.translate(dims.width - stile_dims.width, 0, 0);\n\n var rail_dims = dimensions(bottom_rail);\n top_rail.translate(0, dims.height - rail_dims.height, 0);\n\n let result = join([left, right, top_rail, bottom_rail]);\n result.name = 'MiteredFrame';\n return result;\n}\n\n// **beadboard(geometry, dims)**\n//\n// Creates a beadboard panel suitable for use with a door frame. The offsets\n// in the resulting BufferGeometry would probably make this panel unsuitable\n// for use as a generic vertical panel.\nexport const beadboard = function(geometry, dims){\n var unit = partRemoveOffset(geometry['beadboard_unit'].clone());\n var unitDims = dimensions(unit);\n var repetitions = Math.ceil( dims.width / unitDims.width );\n var panelgeo = repeat(unit, repetitions, 0, 0);\n partScaleToFit(panelgeo, new Vector2(0, dims.height));\n panelgeo.name = 'BeadboardPanel';\n return panelgeo;\n}\n\n// **panel(geometry, dims)**\n//\n// Creates a 'nine slice' panel suitable for use with a door frame. This\n// could be a simple flat panel, a whole single piece door panel, a raised\n// panel, etc., depending on the passed geometry. This function can only\n// represent panels with uniform corners, symmetrical \"rails\" and \"stiles\"\n// (not literal boards, but the horizontal and vertical geometries that run\n// along the edges), and a flat interior.\nexport const panel = function(geometry, dims){\n var result = nineSlice(\n geometry['panel_corner'].clone(),\n geometry['panel_rail'].clone(),\n geometry['panel_stile'].clone(),\n geometry['panel_center'].clone(),\n dims);\n result.name = 'Panel';\n return result;\n}\n\nexport const scoopPanel = function(geometry, dims){\n var result = nineSliceWithScoop(\n geometry['panel_scoop'].clone(),\n geometry['panel_corner_tall'].clone(),\n geometry['panel_rail_tall'].clone(),\n geometry['panel_corner'].clone(),\n geometry['panel_rail'].clone(),\n geometry['panel_stile'].clone(),\n geometry['panel_center'].clone(),\n dims);\n result.name = 'Panel';\n return result;\n}\n\n// **normalizeDoor(frame, panelgeo)**\n//\n// After creating a frame and panel pair, the two BufferGeometry instances\n// may have mismatched UV scales or origins. This method will match and\n// normalize the UVs and center the panel within the frame. When you crate a\n// panel for your door, you should account for the width of the frame's\n// rails and stiles.\nexport const normalizeDoor = function(frame, panelgeo){\n centerPanelInFrame(frame, panelgeo);\n uvNormalize(frame);\n uvMatchScale(frame, panelgeo);\n}\n\n// **centerPanelInFrame(frame, panelgeo)**\n//\n// This is an internal function called by the `door()` function to do the\n// job of aligning the panel within the X and Y extents of the frame. Only\n// the panel geometry is modified. The Z offset of the object is unchanged\n// (as of this writing all doors are three quarter inch and so the Z offset\n// is inherent in the panel geometry).\nexport function centerPanelInFrame(frame, panelgeo) {\n var frameDims = dimensions(frame);\n var panelDims = dimensions(panelgeo);\n removeOffset(panelgeo);\n var dx = (frameDims.width - panelDims.width) / 2;\n var dy = (frameDims.height - panelDims.height) / 2;\n panelgeo.translate(dx, dy, 0);\n}\n\n// **frameAndPanel(geometry, dims, frameType, panelType)**\n//\n// This is a slightly more knowledgable function that knows which frame\n// geometries belong to which IIID parametric functions. The result is\n// always a two-element array like [frame, panel], but frame may be null if\n// the type of door has no frame. The purpose of this function is to allow\n// doors to be treated more uniformly as data rather than having lots of\n// code that special cases different types. This does mean that new door\n// styles may have to update this method in order to work.\n//\n// geometry - an Object containing the BufferGeometry instances to build the\n// requested door.\n// dims - the size of the door to output as a Vector2.\n// panelType -\nexport const frameAndPanel = function(geometry, dims, frameType, panelType) {\n let frame;\n switch(frameType) {\n case null:\n case undefined:\n case \"\":\n frame = null;\n break;\n\n case 'frame_shaker_0.5in':\n case 'frame_shaker_2.5in':\n frame = buttJointFrame(geometry, dims);\n break;\n\n default:\n frame = miteredFrame(geometry, dims);\n }\n\n let panelDims;\n if(frameType) {\n const frameWidth = Number.parseFloat(\n frameType.replace(/.+_([\\d.]+)*in/, '$1'));\n // Reduce the size of the panel dimensions by the frame width, but\n // add a half inch so that the panel overlaps the frame by a quarter\n // inch.\n const d = frameWidth * 2 - 0.5;\n panelDims = new Vector2(dims.x-d, dims.y-d)\n } else {\n panelDims = dims;\n }\n\n let panelgeo;\n switch(panelType) {\n case 'panel_beadboard':\n panelgeo = beadboard(geometry, panelDims);\n break;\n case 'panel_scoop_3x0.75':\n panelgeo = scoopPanel(geometry, panelDims);\n break;\n default:\n panelgeo = panel(geometry, panelDims);\n }\n\n if(frame)\n normalizeDoor(frame, panelgeo);\n else {\n uvNormalize(panelgeo);\n removeOffset(panelgeo);\n }\n\n return [frame, panelgeo];\n}\n\n// Light Models\n// ------------\n\nexport const puckLight = function(geometry, dims) {\n var unit = partRemoveOffset(geometry['puck_light'].clone());\n return unit;\n}\n\nexport const stripLight = function(geometry, dims){\n var unit = partRemoveOffset(geometry['strip_light'].clone());\n var unitDims = dimensions(unit);\n var repetitions = Math.ceil( dims.width / unitDims.width );\n var panelego = repeat(unit, repetitions, 0, 0);\n return panelgeo;\n}\n\n\n\n// Vertical Panels\n// ---------------\n\n// These functions build the vertical boring panels, corner cutbacks,\n// hutches, etc.\n\n// **verticalBoringPanel(geometry, dims)**\n//\n// Assembles a vertical boring panel from the components provided in the\n// `geometry` parameter, which is an object containing BufferGeometry\n// instances of the components. The item names that the function expects\n// are:\n// * `vbp_corner`\n// * `vbp_rail`\n// * `vbp_stile`\n// * `vbp_center_plain`\n// * `vbp_center_bored`\n//\n// Additionally, there are optional elements of the geometry:\n// * `vbp_corner_radius3`\n// * `vbp_hutch_corner_interior_default`\n// * `vbp_hutch_corner_interior_radius3`\n//\n// The `dims` parameter contains the overall dimensions of the panel. The\n// `boringBox` parameter is a THREE.Box2 object specifying where the boring\n// holes occur.\n//\n// *For example,* a 24 by 36 inch panel with a column of holes placed 2\n// inches from the left edge of the the 24 inch width, and another at 22\n// inches (two inches from the right). The columns start four inches from\n// the bottom edge and end at 32 inches, four inches from the top edge.\n// ```\n// var vbp = verticalBoringPanel(geometry, new Vector2(24, 36),\n// new THREE.Box2(\n// new Vector2(2, 4),\n// new Vector2(22, 32)));\n// ```\n//\n// The options object (optional) specifies radius or cutback corners and hutch\n// placement through two properties:\n//\n// - `corners`: The value of this property is a list of objects. Each\n// object has the properties:\n// - `type`: A string value that is one of `radius3`, `cutback2x4`, or\n// `cutback3x6`. Any other values are treated as the default.\n// - `position`: A string value that is one of `bl`, `br`, `tl`, or\n// `tr` (case sensitive) which stand for top/bottom and left/right.\n// - `hutch`: The value of this property is another object\n// - `depth`: A floating point number indicating the height of the\n// hutch measured in inches.\n// - `height`: A floating point number indicating the height of the\n// hutch measuered in inches. This is the point on the panel where\n// it takes an L shaped turn.\n// - `type`: An optional string value that can be 'radius'. Any other\n// value (or no value) is treated as the default square corner.\n// - *Note:* instead of providing a parameter to place the hutch on the\n// left or right side of the panel, use the mirrorZ function to\n// flip the Z coordinates and thus create the symmetrical mate that\n// would pair with this boring panel. I believe this should cover\n// all cases where a left-right parameter would be used.\nexport function verticalBoringPanel(geometry, dims, boringBox, options){\n\n // 1. Create the frame\n // The corner also gives us the dimensions of the rails and stiles\n var cornerDims = dimensions(geometry.vbp_corner);\n\n var defaultOptions = {\n corners: [ { position: 'tl', type: 'default' },\n { position: 'tr', type: 'default' },\n { position: 'bl', type: 'default' },\n { position: 'br', type: 'default' }],\n hutch: { depth: -1, height: -1, type: 'default' }\n };\n options = _extend(defaultOptions, options);\n\n if(options.hutch.depth > 0){\n if(options.hutch.type == 'radius3' && options.hutch.depth <= 6.0){\n console.log(\"WARNING: the radius3 hutch requires a minimum depth of 6.5 inches.\");\n options.hutch.depth = 6.0001;\n }\n else if(options.hutch.type == 'default' && options.hutch.depth <= 0.5){\n console.log(\"WARNING: the default hutch requires a depth greater than 1/2 inch.\");\n options.hutch.depth = 0.5001;\n }\n }\n\n // The default frame dimensions... any of these can be increased by a\n // radius or cutback corner. The right width can be increased even more\n // by the depth of the hutch.\n var frameDims = {\n leftWidth: cornerDims.width,\n rightWidth: cornerDims.width,\n topHeight: cornerDims.height,\n bottomHeight: cornerDims.height\n };\n\n var bl, tl, br, tr;\n var blDims, tlDims, brDims, trDims;\n\n for(var corner of options.corners){\n var geo;\n var position = corner.position;\n var cornerName = \"vbp_corner_\" + corner.type;\n if( geometry.hasOwnProperty(cornerName) ){\n geo = partRemoveOffset(geometry[cornerName].clone());\n } else {\n // If it's a cutback, make it since it doesn't already exist.\n if( cornerName.includes('cutback') ){\n var matches = cornerName.match(/cutback([\\d\\.]+)x([\\d\\.]+)/);\n var width = Number.parseFloat(matches[1]);\n var height = Number.parseFloat(matches[2]);\n geo = partRemoveOffset(_vbpCutback(geometry, width, height));\n // cache this in the geometry, we may need it again.\n geo[cornerName] = geo.clone();\n } else {\n // otherwise fallback on the default\n geo = partRemoveOffset(geometry.vbp_corner.clone());\n }\n }\n var gDims = dimensions(geo);\n switch( position ){\n case 'tl':\n frameDims.topHeight = Math.max(frameDims.topHeight, gDims.height);\n tl = mirror(geo, AXIS_Y);\n tlDims = gDims;\n break;\n case 'tr':\n frameDims.topHeight = Math.max(frameDims.topHeight, gDims.height);\n tr = mirror(mirror(geo, AXIS_Y), AXIS_X);\n trDims = gDims;\n break;\n case 'bl':\n frameDims.bottomHeight = Math.max(frameDims.bottomHeight, gDims.height);\n bl = geo;\n blDims = gDims;\n break;\n case 'br':\n frameDims.bottomHeight = Math.max(frameDims.bottomHeight, gDims.height);\n br = mirror(geo, AXIS_X);\n brDims = gDims;\n break;\n default:\n console.log(`Error: unrecognized corner position, \"${position}\".`)\n break;\n }\n }\n\n var cornerFillStile = partRemoveOffset(geometry.vbp_stile.clone());\n var cornerFillCenter = partRemoveOffset(geometry.vbp_center_plain.clone());\n if( tlDims.height < frameDims.topHeight ){\n var infill = cornerFillStile.clone();\n partScaleToFit(infill, new Vector2(0, frameDims.topHeight - tlDims.height));\n var infillDims = dimensions(infill);\n if( infillDims.width < tlDims.width ){\n var infillExtra = cornerFillCenter.clone();\n partScaleToFit(infillExtra, new Vector2(tlDims.width - infillDims.width, infillDims.height));\n infill = gridJoin([[infill, infillExtra]]);\n }\n tl = gridJoin([[tl],[infill]])\n tlDims = dimensions(tl);\n }\n if( trDims.height < frameDims.topHeight ){\n var infill = cornerFillStile.clone();\n infill = mirror(infill, AXIS_X);\n partScaleToFit(infill, new Vector2(0, frameDims.topHeight - trDims.height));\n var infillDims = dimensions(infill);\n if( infillDims.width < trDims.width ){\n var infillExtra = cornerFillCenter.clone();\n partScaleToFit(infillExtra, new Vector2(trDims.width - infillDims.width, infillDims.height));\n infill = gridJoin([[infillExtra, infill]]);\n }\n tr = gridJoin([[tr], [infill]]);\n trDims = dimensions(tr);\n }\n if( blDims.height < frameDims.bottomHeight ){\n var infill = cornerFillStile.clone();\n partScaleToFit(infill, new Vector2(0, frameDims.bottomHeight - blDims.height));\n var infillDims = dimensions(infill);\n if( infillDims.width < blDims.width ){\n var infillExtra = cornerFillCenter.clone();\n partScaleToFit(infillExtra, new Vector2(blDims.width - infillDims.width, infillDims.height));\n infill = gridJoin([[infill, infillExtra]]);\n }\n bl = gridJoin([[infill],[bl]])\n blDims = dimensions(bl);\n }\n if( brDims.height < frameDims.bottomHeight ){\n var infill = cornerFillStile.clone();\n infill = mirror(infill, AXIS_X);\n partScaleToFit(infill, new Vector2(0, frameDims.bottomHeight - brDims.height));\n var infillDims = dimensions(infill);\n if( infillDims.width < brDims.width ){\n var infillExtra = cornerFillCenter.clone();\n partScaleToFit(infillExtra, new Vector2(brDims.width - infillDims.width, infillDims.height));\n infill = gridJoin([[infillExtra, infill]]);\n }\n br = gridJoin([[infill], [br]]);\n brDims = dimensions(br);\n }\n\n // Fix up the bottom right corner if there's a hutch.\n if( options.hutch.depth > 0 ){\n var fill = partRemoveOffset(geometry.vbp_rail.clone());\n var fillWidth = options.hutch.depth;\n partScaleToFit(fill, new Vector2(fillWidth, 0));\n var fillDims = dimensions(fill);\n if(fillDims.height < brDims.height){\n var fillCenter = partRemoveOffset(geometry.vbp_center_plain.clone());\n var fillHeight = brDims.height - fillDims.height\n partScaleToFit(fillCenter, new Vector2(fillWidth, fillHeight));\n fill = gridJoin([[fillCenter], [fill]]);\n }\n br = gridJoin([[fill, br]]);\n //brDims = dimensions(br);\n }\n\n // Now the rails and stiles\n var ml, mr, bc, tc;\n\n // the fill for the rails and stiles\n var rsFill = partRemoveOffset(geometry.vbp_center_plain.clone());\n\n ml = partRemoveOffset(geometry.vbp_stile.clone());\n partScaleToFit(ml, new Vector2(0, dims.height - frameDims.bottomHeight - frameDims.topHeight));\n\n if(options.hutch.depth > 0){\n mr = mrHutch(geometry, dims, frameDims, options.hutch);\n } else {\n mr = mirror(ml, AXIS_X);\n }\n\n bc = partRemoveOffset(geometry.vbp_rail.clone());\n partScaleToFit(bc, new Vector2(dims.width - blDims.width - brDims.width, 0));\n var bcDims = dimensions(bc);\n if( bcDims.height < frameDims.bottomHeight ){\n var bcFill = rsFill.clone();\n partScaleToFit(bcFill, new Vector2(bcDims.width, frameDims.bottomHeight - bcDims.height));\n bc = gridJoin([[bcFill],[bc]])\n }\n\n tc = mirror(partRemoveOffset(geometry.vbp_rail.clone()), AXIS_Y);\n partScaleToFit(tc, new Vector2(dims.width - tlDims.width - trDims.width, 0));\n var tcDims = dimensions(tc);\n if( tcDims.height < frameDims.topHeight ){\n var tcFill = rsFill.clone();\n partScaleToFit(tcFill, new Vector2(tcDims.width, frameDims.topHeight - tcDims.height));\n tc = gridJoin([[tc],[tcFill]]);\n }\n\n var frame = [[tl, tc, tr],\n [ml, null, mr],\n [bl, bc, br]];\n\n // 2. Create the interior with the boring holes\n\n // Adjust the boringBox to exclude the frame area\n var min = new Vector2(frameDims.leftWidth, frameDims.bottomHeight);\n var max = new Vector2(dims.width - frameDims.rightWidth,\n dims.height - frameDims.topHeight);\n var validArea = new Box2(min, max);\n\n boringBox.intersect(validArea);\n\n var centerDims = dimensions(geometry.vbp_center_plain);\n\n var infillTemplate = geometry.vbp_center_plain.clone();\n partRemoveOffset(infillTemplate);\n partScaleToFit(infillTemplate, new Vector2(dims.width - frameDims.leftWidth - frameDims.rightWidth, 0));\n\n var bodyRows = [];\n\n var bottomFillHeight = 0;\n if (boringBox.min.y > frameDims.bottomHeight ){\n var infill = infillTemplate.clone();\n // The height of the infill is reduced by 16mm (half the centerDims\n // height) so that the boring hole is centered on the starting\n // point.\n bottomFillHeight = boringBox.min.y - frameDims.bottomHeight - centerDims.height/2;\n partScaleToFit(infill, new Vector2(0, bottomFillHeight));\n bodyRows.push(infill);\n } // if firstBox.min.y == frameDims.bottomHeight, then there's no infill\n\n // Note the fudge factor where we scootch the boring cells left by half\n // their width\n var leftFillWidth = boringBox.min.x - frameDims.leftWidth - centerDims.width/2;\n var centerFillWidth = boringBox.max.x - boringBox.min.x - centerDims.width;\n var rightFillWidth = dims.width - boringBox.max.x - frameDims.rightWidth - centerDims.width/2;\n\n var cell = geometry.vbp_center_bored.clone();\n var leftFill = partRemoveOffset(geometry.vbp_center_plain.clone());\n var centerFill = leftFill.clone();\n var rightFill = leftFill.clone();\n\n // Note, in some cases (but not all), this is one less repetition than I'd like\n var repetitions = Math.floor((boringBox.max.y - boringBox.min.y) / centerDims.height);\n\n // I'm not sure why, but it seems like sometimes repeat introduces an offset into the UVs.\n var leftCells = partRemoveOffset(repeat(cell, repetitions, 1, 1));\n var rightCells = leftCells.clone();\n var cellDims = dimensions(leftCells);\n\n // The elements are ordered horizontally:\n // left fill, boring cell, center fill, boring cell, right fill\n\n partScaleToFit(leftFill, new Vector2(leftFillWidth, cellDims.height));\n partScaleToFit(centerFill, new Vector2(centerFillWidth, cellDims.height));\n partScaleToFit(rightFill, new Vector2(rightFillWidth, cellDims.height));\n\n var boxGeometry = gridJoin([[leftFill, leftCells, centerFill, rightCells, rightFill]]);\n\n bodyRows.push(boxGeometry);\n\n // Make the infill above it\n var boxTopPos = boringBox.min.y + cellDims.height;\n var infill = infillTemplate.clone();\n var topFillHeight = dims.height - cellDims.height - bottomFillHeight -\n frameDims.topHeight - frameDims.bottomHeight;\n partScaleToFit(infill, new Vector2(0, topFillHeight));\n bodyRows.push(infill);\n\n bodyRows.reverse();\n var temp = [];\n for( var i=0; i < bodyRows.length; i++ ){\n temp.push([bodyRows[i]]);\n }\n var body = gridJoin(temp);\n\n frame[1][1] = body;\n\n var result = gridJoin(frame);\n uvNormalize(result);\n\n result.name = 'VerticalBoringPanel';\n\n return result;\n}\n\n// **mrHutch(dims, frameDims, depth, height, geometry)**\n//\n// This function creates the hutch geometry that takes up the middle-right\n// area of the overall VerticalBoringPanel grid.\nexport function mrHutch(geometry, dims, frameDims, options){\n // Prepare the geometry\n var center = partRemoveOffset(geometry.vbp_center_plain.clone());\n var topStile = partRemoveOffset(geometry.vbp_stile.clone());\n topStile = mirror(topStile, AXIS_X);\n var bottomStile = topStile.clone();\n var rail = partRemoveOffset(geometry.vbp_rail.clone());\n rail = mirror(rail, AXIS_Y)\n var cornerInterior = partRemoveOffset(geometry['vbp_hutch_corner_interior_' + options.type]);\n var corner = null;\n switch( options.type ){\n case 'radius3':\n corner = partRemoveOffset(geometry.vbp_corner_radius3.clone());\n break;\n default:\n corner = partRemoveOffset(geometry.vbp_corner.clone());\n break;\n }\n corner = mirror(mirror(corner, AXIS_Y), AXIS_X);\n\n // Measure and scale all of the part sizes that we'll need\n var cornerDims = dimensions(corner);\n var cornerInteriorDims = dimensions(cornerInterior);\n var railDims = dimensions(rail);\n var bottomStileDims = dimensions(bottomStile);\n\n //var mrHeight = dims.height - frameDims.topHeight - frameDims.bottomHeight;\n var topStileHeight = dims.height - frameDims.topHeight - options.height - cornerInteriorDims.height + railDims.height;\n var bottomStileHeight = options.height - cornerDims.height - frameDims.bottomHeight;\n var railWidth = options.depth - cornerDims.width - cornerInteriorDims.width + bottomStileDims.width;\n var centerWidth = options.depth;\n var centerHeight = bottomStileHeight;\n\n partScaleToFit(topStile, new Vector2(0, topStileHeight));\n partScaleToFit(bottomStile, new Vector2(0, bottomStileHeight));\n partScaleToFit(rail, new Vector2(railWidth, 0));\n partScaleToFit(center, new Vector2(centerWidth, centerHeight));\n\n // If corner is taller than the rail, add some fill below the interior\n // corner and the rail.\n if( railDims.height < cornerDims.height ){\n var railFill = partRemoveOffset(geometry.vbp_center_plain.clone());\n var ciFill = railFill.clone();\n\n var fillHeight = cornerDims.height - railDims.height;\n\n partScaleToFit(railFill, new Vector2(railWidth, fillHeight));\n partScaleToFit(ciFill, new Vector2(cornerInteriorDims.width, fillHeight));\n\n cornerInterior = gridJoin([[cornerInterior], [ciFill]]);\n rail = gridJoin([[rail], [railFill]]);\n }\n\n // Assemble the part\n var grid = [[topStile],\n [cornerInterior, rail, corner],\n [center, bottomStile]];\n var result = gridJoin(grid);\n return result;\n}\n\n// **_vbpCutback(geometry, width, height)**\n//\n// Generates an *ad hoc* cutback corner.\n//\n// The geometry parameter is a dictionary of BufferGeometry instances named\n// `vbp_cutback_rail_endcap`, `vbp_cutback_stile_endcap`,\n// `vbp_cutback_infill`, and `vbp_cutback_center`.\nfunction _vbpCutback(geometry, width, height){\n var railEndcap = flipFlop(partRemoveOffset(geometry.vbp_cutback_rail_endcap.clone()));\n var stileEndcap = flipFlop(partRemoveOffset(geometry.vbp_cutback_stile_endcap.clone()));\n var infill = flipFlop(partRemoveOffset(geometry.vbp_cutback_infill.clone()));\n var center = flipFlop(partRemoveOffset(geometry.vbp_cutback_center.clone()));\n\n var railFill = infill.clone();\n var stileFill = infill.clone();\n\n var railEndcapDims = dimensions(railEndcap);\n var stileEndcapDims = dimensions(stileEndcap);\n var infillDims = dimensions(infill);\n\n var centerWidth = width - infillDims.width;\n var centerHeight = height - infillDims.height;\n var railFillWidth = centerWidth - railEndcapDims.width;\n var stileFillHeight = centerHeight - stileEndcapDims.height;\n\n partScaleToFit(center, new Vector2(centerWidth, centerHeight));\n partScaleToFit(railFill, new Vector2(railFillWidth, 0));\n partScaleToFit(stileFill, new Vector2(0, stileFillHeight));\n\n // Note that we're doing everything flip-flopped into the positive\n // quadrant because that's how gridJoin works best, but the corners are\n // modeled in the negative quadrant.\n var rail = gridJoin([[railFill, railEndcap]]);\n var stile = gridJoin([\n [stileEndcap],\n [stileFill]]);\n var result = gridJoin([\n [stile, center],\n [infill, rail]]);\n\n flipFlop(result);\n return result;\n}\n\n// **twoSidedVBP(geometry, dims, frontBoxes, backBoxes)**\n//\n// A convenience function that creates two half-thickness boring panels with\n// the given boring patterns and joins them.\n//\n// The geometry parameter is a dictionary of BufferGeometry instances named\n// `front_corner`, `front_rail`, `front_stile`, `front_center_plain`,\n// `front_center_bored`, `back_corner`, `back_rail`, `back_stile`,\n// `back_center_plain`, `back_center_bored`.\nexport function twoSidedVBP(geometry, dims, frontBox, backBox, options){\n var frontGeometry = _tsvbpSplitGeometry(geometry, 'front');\n var backGeometry = _tsvbpSplitGeometry(geometry, 'back');\n var front = verticalBoringPanel(frontGeometry, dims, frontBox, options);\n var back = verticalBoringPanel(backGeometry, dims, backBox, options);\n return join([front, back]);\n}\n\n// A subroutine to keep the twoSidedVBP implementation clean.\nfunction _tsvbpSplitGeometry(geometry, prefix){\n var result = new Object();\n for( var name in geometry ){\n if( name.startsWith(prefix) ){\n var newname = name.replace(prefix, 'vbp');\n result[newname] = geometry[name];\n }\n }\n return result;\n}\n\n// **slatwall(geometry, dims)**\n//\n// The geometry parameter is a dictionary of BufferGeometry instances named\n// `facing_center`, `facing_corner`, `facing_edge_bottom`,\n// `facing_edge_left`, `substrate_center`, `substrate_corner`,\n// `substrate_edge_bottom`, `substrate_edge_left`.\nexport function slatwall(geometry, dims){\n var facing = _slatwall(\n geometry['facing_center'],\n geometry['facing_corner'],\n geometry['facing_edge_bottom'],\n geometry['facing_edge_left'],\n dims\n );\n var substrate = _slatwall(\n geometry['substrate_center'],\n geometry['substrate_corner'],\n geometry['substrate_edge_bottom'],\n geometry['substrate_edge_left'],\n dims\n );\n\n uvNormalize(facing);\n uvNormalize(substrate);\n\n return [facing, substrate];\n}\n\nfunction _slatwall(center, corner, edge_bottom, edge_left, dims){\n var bottom = cappedRow(corner, edge_bottom, dims.width);\n var top = mirror(bottom, AXIS_Y);\n var bodyUnit = cappedRow(edge_left, center, dims.width);\n\n var bottomDims = dimensions(bottom);\n var bodyUnitDims = dimensions(bodyUnit);\n\n var repetitions = Math.floor( (dims.height - 2*bottomDims.height) / bodyUnitDims.height );\n var body = repeat(bodyUnit, repetitions, 1, 1);\n\n var roundedHeight = repetitions*bodyUnitDims.height + bottomDims.height;\n var newBottomHeight = dims.height - roundedHeight;\n\n partScaleToFit(bottom,\n new Vector2( bottomDims.width, newBottomHeight ));\n\n var result = gridJoin([[top], [body], [bottom]]);\n return result;\n}\n\n// **shelfPanel(geometry, dims)**\n// The geometry dictionary should be the contents of one of the\n// panel_plain_*.obj files. The dims is a Vector2 with x for the width, and\n// y for the depth; the height (thickness) of the shelf is baked into the\n// given geometry.\nexport function shelfPanel(geometry, dims) {\n var panelgeo = panel(geometry, dims);\n removeOffset(panelgeo);\n uvNormalize(panelgeo);\n uvTranspose(panelgeo);\n\n // Rotate it before getting the dimensions sice it only measures x-y\n // dimensions and we want it's thickness (height)\n panelgeo.rotateX(Math.PI/2);\n var dims = dimensions(panelgeo);\n panelgeo.translate(0, dims.y, 0);\n\n return panelgeo;\n}\n\n// **shelfWire(geometries, sku, dims)**\n// The geometry dictionary should contain entries for all of the SKUs for\n// the set. Note that this ignores the vertical dimensions, but still uses a\n// Vector2 paramters for consistency with other functions.\nexport function shelfWire(geometry, sku, dims) {\n var bgeo = geometry[sku];\n var bgeoDims = dimensions(bgeo);\n\n var repetitions = Math.floor( dims.x / bgeoDims.width );\n var result = repeat(bgeo, repetitions, 0, 0);\n var resultWidth = bgeoDims.width * repetitions;\n\n // Adding the spacers is a little more complex. First we decide the\n // depth of the spacer.\n var spacerZ = -1;\n switch(sku) {\n case '300':\n case '305':\n spacerZ = 12;\n break;\n case '316':\n case '37304':\n spacerZ = 10;\n }\n\n // If we have a spacer for this model, then we build it out of\n // a box primitive.\n if(spacerZ > 0) {\n // the shelf is 1.5 inches tall, but the spacer is about an eighth /// of an inch shy on either side.\n var spacer = new BoxGeometry(0.75, 1.25, 0.125);\n // centered on x, moved up by half height on Y plus an eigth inch\n // margin, and out on Z to whereever the coat hanging wire is for\n // this SKU.\n spacer.translate(0.75, 0.75, spacerZ - 3/32);\n\n // The box geometry is indexed, but our procedures work on non-\n // indexed meshes (triangles).\n spacer = spacer.toNonIndexed();\n\n var offset = (resultWidth % 12.75) / 2 + 0.375;\n var spacers = [];\n var x = offset;\n // While the right edge of the spacer is less than the width of the\n // whole unit.\n while((x + 0.75) < resultWidth) {\n var offsetSpacer = spacer.clone();\n offsetSpacer.translate(x, 0, 0);\n spacers.push(offsetSpacer);\n x+=12;\n }\n\n spacers.push(result);\n result = join(spacers);\n }\n\n return result;\n}\n\n// **shelfWireTrack(geometry, dims)**\n// The geometry dictionary should contain an item named 'track'\nexport function shelfWireTrack(geometry, dims) {\n var bgeo = geometry['track'];\n var bgeoDims = dimensions(bgeo);\n\n var repetitions = Math.floor( dims.y / bgeoDims.height );\n var result = repeat(bgeo, repetitions, 1, 1);\n\n return result;\n}\n\n// **stairs(geometry, box)**\n//\n// The geometry is for the tread, which will always be\n// panel_plain_0.75in.obj. The dimensions are given as a THREE.Vector3 with\n// the x, y, and z comporents representing width, height, and depth\n// respectively. The 'steps' specifies the number of stair treads to\n// generate. The top tread is always flush with the height of the bounding\n// box. This function returns an array of two geometries: one for the base\n// and one for the treads. This allows for a two-tone effect. The base\n// doesn't currently have UVs.\nexport function stairs(geometry, box, steps) {\n var width = box.x;\n var height = box.y;\n var depth = box.z;\n\n // The treads overhang the edge by a distance equal to their height\n var offset = 0.75;\n\n var baseWidth = width - 2*offset;\n var baseDepth = depth - offset;\n var baseHeight = height - offset;\n\n var w = baseWidth;\n var d = baseDepth / steps;\n var h = baseHeight / steps;\n\n var treadDepth = d + 2*offset;\n\n var tread = shelfPanel(geometry, new Vector2(width, treadDepth));\n tread.translate(0, 0, -offset/2);\n var treads = [];\n\n var vertsPerStep = 6*3;\n var p = new Float32Array(3*vertsPerStep*steps);\n var normals = new Float32Array(3*vertsPerStep*steps);\n\n var x0 = offset;\n var i = 0;\n\n // positive X (px), negative X (nx), and positive Z (pz) arrays are used\n // to set the vertex normals for the stair base\n let px = [1, 0, 0];\n let nx = [-1, 0, 0];\n let pz = [0, 0, 1];\n\n for(var n=1; n<=steps; n++) {\n var m = steps - n + 1;\n\n var clone = tread.clone();\n clone.translate(0, m*h, (n-1)*d);\n treads.push(clone);\n\n // The base is two triangle fans separated by the width of the unit.\n // Each triangle fan has its origin (the point to wihch all\n // triangles connect)\n var o1 = [x0, 0, 0];\n var o2 = [x0+w, 0, 0];\n var a1 = [x0, m*h, (n-1)*d];\n var a2 = [x0+w, m*h, (n-1)*d];\n var b1 = [x0, m*h, n*d];\n var b2 = [x0+w, m*h, n*d];\n var c1 = [x0, (m-1)*h, n*d]\n var c2 = [x0+w, (m-1)*h, n*d]\n\n var triangles = [\n // the left panel of the base, if looking up the stairs\n o1, b1, a1,\n o1, c1, b1,\n // the two triangles are the front faces of the risers\n c1, b2, b1,\n c1, c2, b2,\n // the right panel of the base\n o2, a2, b2, // reverse the winding order for the opposite side\n o2, b2, c2\n ];\n\n let normalVectors = [\n nx, nx, nx,\n nx, nx, nx,\n pz, pz, pz,\n pz, pz, pz,\n px, px, px,\n px, px, px\n ];\n\n for(var j=0; j dims.width) {\n scale_scoop = dims.width / (scoop_dims.width + 2 * corner_tall_dims.width);\n } else {\n scale_scoop_rail = (dims.width - (scoop_dims.width + 2 * corner_tall_dims.width)) / (rail_tall_dims.width * 2);\n }\n\n var new_center_width = dims.width - 2 * corner_dims.width;\n var new_center_height = dims.height - corner_dims.height - scoop_dims.height * scale_scoop;\n var scale_horizontal = new_center_width / center_dims.width;\n var scale_vertical = new_center_height / center_dims.height;\n\n [scoop, corner_tall, rail_tall, corner, edge_bottom, edge_left, center].forEach(function(item){\n removeOffset(item);\n uvRemoveOffset(item);\n });\n\n partScale(scoop, new Vector2(scale_scoop, scale_scoop));\n partScale(corner_tall, new Vector2(scale_scoop, scale_scoop));\n partScale(rail_tall, new Vector2(scale_scoop_rail, 1));\n var rail_tall_2 = mirror(rail_tall, AXIS_X);\n partScale(edge_bottom, new Vector2(scale_horizontal, 1));\n partScale(edge_left, new Vector2(1, scale_vertical));\n var edge_right = mirror(edge_left, AXIS_X);\n partScale(center, new Vector2(scale_horizontal, scale_vertical))\n\n var corner_bottom_left = corner;\n var corner_bottom_right = mirror(corner, AXIS_X);\n\n var corner_top_left = mirror(corner_tall, AXIS_NONE);\n var corner_top_right = mirror(corner_top_left, AXIS_X);\n\n var result = gridJoin(\n [[corner_top_left, rail_tall, scoop, rail_tall_2, corner_top_right],\n [edge_left, center, edge_right ],\n [corner_bottom_left, edge_bottom, corner_bottom_right ]]);\n\n result.translate(offset_x, offset_y, 0)\n uvTranslate(result, new Vector2(corner_uvBounds.min.u, corner_uvBounds.min.v));\n\n return result;\n }\n\n// **rail(geometry, length)**\n//\n// Create a rail of the given length from the endcap and the body geometry.\nexport function rail(geometry, length){\n var start = geometry['frame_rail_endcap'].clone();\n var body = geometry['frame_rail_body'].clone();\n var end = geometry['frame_rail_endcap'].clone();\n\n // normally we would do a mirror operation, but we need a different UV\n // orientation for rails (horizontal frame members).\n var dims = dimensions(end);\n var dims_uv = uvDimensions(end);\n end.scale(-1,1,1);\n end.translate(dims.width, 0, 0);\n flipNormals(end);\n uvScale(end, new Vector2(1, -1));\n uvTranslate(end, new Vector2(0, dims_uv.height));\n\n var start_dims = dimensions(start);\n var body_dims = dimensions(body)\n\n var new_body_width = length - 2*start_dims.width;\n var scale = new_body_width / body_dims.width;\n\n body.scale(scale, 1, 1);\n // note that we're scaling the UVs vertically since the wood grain runs in the\n // long direction of the rail.\n uvScale(body, new Vector2(1, scale));\n\n return rail_join([start, body, end]);\n}\n\n// **stile(geometry, length)**\n//\n// Create a stile of the given length from the endcap and body geometry.\nexport function stile(geometry, length){\n var start = geometry['frame_stile_endcap'].clone();\n var body = geometry['frame_stile_body'].clone();\n var end = mirror(start, AXIS_Y);\n\n var start_dims = dimensions(start)\n var body_dims = dimensions(body)\n\n var new_body_height = length - 2*start_dims.height;\n var scale = new_body_height / body_dims.height;\n\n body.scale(1, scale, 1);\n uvScale(body, new Vector2(1, scale));\n\n return stile_join([start, body, end]);\n}\n\n// **cappedRow(endcap, body, length)**\n//\n// Mirrors the endcap and scales the body to fill the given length.\nexport function cappedRow(endcap, body, length){\n let start = partRemoveOffset(endcap.clone());\n let end = mirror(start, AXIS_X);\n body = partRemoveOffset(body.clone());\n\n let startDims = dimensions(start)\n let newBodyWidth = length - 2*startDims.width;\n\n partScaleToFit(body, new Vector2(newBodyWidth, 0));\n\n return gridJoin([[start, body, end]]);\n}\n\n// UV operations\n// -------------\n\n// These functions change the UV coordinates of BufferGeometry, which are\n// stored in its 'uv' attribute.\n\n// **uvBounds(bgeo)**\n//\n// Finds the minimum and maximum `u` and `v` values for the given BufferGeometry.\n// Returns a Box2 object with properties min and max, which are Vector2\n// objects. So if bounds = uvBounds(bgeo), then the left bound is given by\n// bounds.min.x, while the top bound is given by bounds.max.y. The parameter\n// bgeo should be a BufferGeometry instance.\nexport function uvBounds(bgeo){\nif(bgeo.userData['uvNeedsUpdate'] !== false){\n var u_min, v_min, u_max, v_max;\n u_min = v_min = Infinity;\n u_max = v_max = -Infinity;\n var uvs = bgeo.getAttribute('uv');\n for( var i=0; i u_max ) u_max = u;\n if( v < v_min ) v_min = v;\n if( v > v_max ) v_max = v;\n }\n let bounds = new Box2(\n new Vector2(u_min, v_min),\n new Vector2(u_max, v_max));\n bgeo.userData['uvBounds'] = bounds;\n bgeo.userData['uvNeedsUpdate'] = false;\n }\n return bgeo.userData['uvBounds']\n}\n\n// Return the width and height of the bmesh's UVs as a Vector2 with\n// properties named width and height. The parameter bgeo should be a\n// BufferGeometry instance.\nexport function uvDimensions(bgeo){\n // b is a Box2 with min and max properties, each of which are Vector2 instances.\n var b = uvBounds(bgeo);\n return new Vector2(b.max.x - b.min.x, b.max.y - b.min.y);\n}\n\n// **uvScale(bgeo, scale)**\n//\n// Scales the UV coordinates by the given scale factor. The bgeo should be a\n// BufferGeometry instance. The scale parameter should be a Vector2 where x\n// and y correspond to the u and v scaling factors.\nexport function uvScale(bgeo, scale){\n var uvs = bgeo.getAttribute('uv');\n for( var i=0; i -1 ){\n for( var group of bgeo.groups ){\n if( group.materialIndex == mi ){\n var i = group.start * uvs.itemSize;\n var imax = (i + group.count) * uvs.itemSize;\n _uvTranspose(uvs.array, i, imax);\n }\n }\n } else {\n _uvTranspose(uvs.array, 0, uvs.array.length);\n }\n uvs.needsUpdate = true;\n bgeo.userData['uvNeedsUpdate'] = true;\n}\n\nfunction _uvTranspose(a, i, imax){\n while( i < imax ) {\n var u=i;\n var v=i+1;\n [a[u], a[v]] = [a[v], a[u]];\n i+=2;\n }\n}\n\n// **uvTranslate(bgeo, translation)**\n//\n// Translates the UV coordinates by the given translation factor. The bgeo\n// should be a BufferGeometry instance. The translation parameter should be a\n// Vector2.\nexport function uvTranslate(bgeo, translation){\n var uvs = bgeo.getAttribute('uv');\n for( var i=0; i 0 )\n scaleX = size.width / dims.width;\n if( size.height > 0 )\n scaleY = size.height / dims.height;\n partScale(bgeo, new Vector2(scaleX, scaleY));\n}\n\n// **partRemoveOffset(bgeo)**\n//\n// Removes the offset from the vertexes and the UVs simultaneously. Returns\n// the input parameter for convenience with chaining.\nexport function partRemoveOffset(bgeo){\n removeOffset(bgeo);\n uvRemoveOffset(bgeo);\n return bgeo;\n}\n\n// **gridJoin(grid)**\n//\n// The grid is joined into a new result. Write the grid as a list of rows;\n// the rows being lists of bmeshes. Write it so that it looks\n// \"right-side-up\" as written, but remember that when assembled the geometry\n// will be in the positive quadrant of the XY plane. If the bottom-left\n// corner has a UV or XY offset, then that offset will be preserved. The XY\n// and UV coordinates of the grid items will be modified in-place, so they\n// can't be reused.\n//\n// Here's how you would write the grid for a 3x3:\n// [[left-top, center-top, right-top ],\n// [left-center, center-center, right-center],\n// [left-bottom, center-bottom, right-bottom]]\n//\nexport function gridJoin(grid){\n var x, y, u, v\n x = y = 0; u = v = 0;\n for( var i=grid.length-1; i >= 0; i-- ){\n var row = grid[i];\n x = 0; u = 0;\n var new_y, new_v;\n var first_in_row = true;\n for( var j=0; j < row.length; j++ ){\n var item = row[j];\n var dims = dimensions(item);\n var dims_uv = uvDimensions(item);\n if( first_in_row ){\n new_y = y + dims.height;\n new_v = v + dims_uv.height;\n first_in_row = false;\n }\n item.translate(x, y, 0);\n uvTranslate(item, new Vector2(u, v));\n x = x + dims.width;\n u = u + dims_uv.width;\n }\n y = new_y;\n v = new_v;\n }\n var flat = new Array();\n for(var i=0; i outputs \"/assets/obstructions/bag-2.glb\"\n\ntype ResolveFunction = (assetId: string, type: string) => string\n\nclass AssetPathResolver {\n match: RegExp;\n\n // Larger priority numbers are resolved first\n priority: number;\n resolve: ResolveFunction;\n\n constructor(match: RegExp, priority: number, resolve: ResolveFunction) {\n this.match = match;\n this.priority = priority;\n this.resolve = resolve;\n }\n}\n\nexport class AssetPathResolverError extends Error { }\n\nexport class AssetManager {\n private resolvers: AssetPathResolver[] = [];\n\n addResolver(match: RegExp, priority: number, resolve: ResolveFunction) {\n this.resolvers.push(new AssetPathResolver(match, priority, resolve));\n this.resolvers.sort((a, b) => b.priority - a.priority);\n }\n\n resolve(assetId: string, type: string): string {\n for(const resolver of this.resolvers) {\n if(resolver.match.test(assetId)) {\n return resolver.resolve(assetId, type);\n }\n }\n throw new AssetPathResolverError(`No resolver for assetId \"${assetId}\"`);\n };\n}\n\nconst assets = new AssetManager();\n\n// Per-client files exactly mirror the hierarchy of regular assets, but are\n// rooted at /company-files/[client name]/assets/...\n// We allways match client assets first so they may shadow built-in assets\nassets.addResolver(\n /^clients\\/[^\\/]+\\/.+/, Infinity,\n (assetId: string, type: string): string => {\n const [_, client, suffix] = /^clients\\/([^\\/]+)\\/(.+)/.exec(assetId);\n // assetPath will begin with `/assets/`\n const assetPath = assets.resolve(suffix, type);\n return `/company-files/${client}${assetPath}`;\n });\n\nassets.addResolver(\n /^obstructions\\//, 10,\n (assetId: string, type: string): string => {\n switch(type) {\n case 'Preview':\n return `/assets/${assetId}-preview.png`;\n case 'LowResModel':\n return `/assets/${assetId}.glb`;\n case 'HighResModel':\n return `/assets/${assetId}.blend`;\n }\n throw new AssetPathResolverError(`Unsupported feature type \"${type}\"`);\n });\n\nassets.addResolver(\n /^materials\\//, 20,\n (assetId: string, type: string): string => {\n switch(type) {\n case 'OnlineMaterial':\n return `/assets/${assetId}.glb`;\n }\n throw new AssetPathResolverError(`Unsupported feature type \"${type}\"`);\n });\n\n// Catch-all resolver will just use the asset ID as a file path and hope for\n// the best. It is the last to match, with a negative infinite priority so it's\n// always last in the list. It just assumes you're looking for a glb/blend\n// combo. This way we don't have to add resolvers unless they offer files more\n// than just glb and blend.\nassets.addResolver(\n /.*/, -Infinity,\n (assetId: string, type: string): string => {\n switch(type) {\n case 'LowResModel':\n return `/assets/${assetId}.glb`;\n case 'HighResModel':\n return `/assets/${assetId}.blend`;\n }\n throw new AssetPathResolverError(`Unsupported feature type \"${type}\"`);\n });\n\n// We'd have to make the assets.resolve() method async, but we could\n// conceivably resolve assets on the server, e.g. client-contributed assets\n// that live in the database, but I think it would be easier to do client\n// assets as above.\n//\n// assets.addResolver(\n// /.*/, 9999,\n// (assetId: string, type: string): string => {\n// const response = await fetch(`/api/assets/${assetId}?type=${type}`);\n// // etc...\n// });\n\nexport default assets;\n","import { Color } from \"three\";\n\n/**\n * This is a little utility to help with adapting legacy three.js color\n * specifications to the LinearSRGBColorSpace. Accepts a hexedecimal number\n * (e.g. 0xFFFFFF) or a CSS color string, which three.js will interpret. If\n * `THREE.ColorManagement.enabled == false`, then the value is accepted as\n * linear and remains linear.\n */\nexport const gammaCorrect = (c: Color | number | string): Color => {\n const color = new Color(c); \n color.r = Math.sqrt(color.r);\n color.g = Math.sqrt(color.g);\n color.b = Math.sqrt(color.b);\n return color;\n}\n\nexport default gammaCorrect;\n","import {\n AmbientLight,\n ArrowHelper,\n BufferAttribute,\n BufferGeometry,\n Color,\n DirectionalLight,\n EdgesGeometry,\n Euler,\n Group,\n HemisphereLight,\n Light,\n LineBasicMaterial,\n LineSegments,\n Mesh,\n MeshBasicMaterial,\n Object3D,\n Sphere,\n Vector3,\n} from 'three';\nimport { wallLength } from './controllers/wallControllers';\nimport * as dm from './domain'\nimport logging from './logging';\nimport { gammaCorrect } from './utils/gammaCorrect';\n\nconst log = logging('utils');\n\n/**\n * Like jQuery's ready handler, this will fire when document.readyState\n * transitions to interactive, or it will get enqueued at the end of the\n * current execution if the readyState has already advanced beyond 'loading'.\n */\nexport const ready = (fn: () => void) => {\n if(document.readyState == 'loading'){\n document.addEventListener('DOMContentLoaded', fn);\n }\n else {\n setTimeout(fn, 0);\n }\n}\n\n/**\n * A convenience to look up elements in the current document by id.\n */\nexport const id = (x: string) => document.getElementById(x);\n\n/**\n * Clamps a numeric value between the min and max values.\n */\nexport const clamp = (value: number, min: number, max: number) => {\n return Math.min(max, Math.max(value, min));\n}\n\n/**\n * Show or hide helpers around objects in the 3D scene to aid with visual\n * diagnostics.\n */\nexport const helpers = (scene: Object3D, heights: number[], toggle: boolean) => {\n if(toggle) {\n // Draw lines at the 32mm offsets that represent where the holes are in\n // the boring panels\n const linesHelper = lines(heights);\n linesHelper.position.x = -72;\n scene.add(linesHelper);\n } else {\n let helpers = new Array();\n scene.traverse((obj) => {\n if(obj.userData.isHelper){\n helpers.push(obj);\n }\n });\n for(let helper of helpers){\n scene.remove(helper);\n }\n }\n}\n(window as any).helpers = helpers;\n\nexport class ThreeAxisHelper extends Object3D {\n constructor(size: number = 6) {\n super();\n this.add(new ArrowHelper(\n new Vector3(1, 0, 0),\n new Vector3(0, 0, 0),\n size,\n 0xFF0000\n ));\n this.add(new ArrowHelper(\n new Vector3(0, 1, 0),\n new Vector3(0, 0, 0),\n size,\n 0x00FF00\n ));\n this.add(new ArrowHelper(\n new Vector3(0, 0, 1),\n new Vector3(0, 0, 0),\n size,\n 0x0000FF\n ));\n }\n}\n\n/**\n * Diagnostic function to display everything as a wireframe to make it easier\n * to see if there are misalignment issues.\n */\nexport const wireframe = (input: Object3D, ) => {\n const color: number = 0x000000;\n const hitColor = gammaCorrect(0x003080);\n input.traverse(obj => {\n if(obj.userData.isSectionHit && obj instanceof Mesh) {\n const lines = new LineSegments(\n obj.geometry,\n new LineBasicMaterial({color: hitColor})\n );\n lines.position.copy(obj.position);\n lines.rotation.copy(obj.rotation);\n lines.scale.copy(obj.scale);\n lines.renderOrder = 2;\n obj.parent.add(lines);\n obj.visible = true;\n obj.material.transparent = true;\n obj.material.opacity = 0.333;\n obj.material.depthWrite = false;\n }\n else if(obj instanceof Mesh && obj.geometry.attributes.position) {\n const edges = new EdgesGeometry(obj.geometry);\n const lines = new LineSegments(\n edges,\n new LineBasicMaterial({color}));\n lines.position.copy(obj.position);\n lines.rotation.copy(obj.rotation);\n lines.scale.copy(obj.scale);\n obj.parent.add(lines);\n obj.visible = false;\n }\n });\n}\n\n/**\n * Creates horizontal lines at the given height intervals and returns them as\n * gray line segments.\n */\nexport const lines = (heights: number[]) => {\n const\n geo = new BufferGeometry(),\n verts = new Float32Array(heights.length * 6),\n mat = new MeshBasicMaterial({ color: gammaCorrect(0xCCCCCC) }),\n lines = new LineSegments(geo, mat);\n\n for(let i=0, j=0; i < heights.length; i++, j+=6) {\n const\n z = 0,\n y = heights[i];\n verts[j ] = 0;\n verts[j+1] = y;\n verts[j+2] = z;\n verts[j+3] = 144; // 12 ft\n verts[j+4] = y;\n verts[j+5] = z;\n }\n\n geo.setAttribute('position', new BufferAttribute(verts, 3));\n lines.userData.isHelper = true;\n return lines;\n}\n\n/**\n * Only allow a function to be called once per frame. This could be done with a\n * specific timeout time, but this is using requestAnimationFrame since it's\n * meant to be used with a drag handler.\n */\nexport const throttle = (fn: () => void) => {\n let first = true;\n return () => {\n if(first) {\n first = false;\n try {\n fn();\n }\n catch(error) {\n log.error(error);\n } finally {\n requestAnimationFrame(() => first = true);\n }\n }\n };\n};\n\n/**\n * Defer execution of the function f until currently queued tasks have\n * completed. This is useful if you want to do some processing after the current\n * round of event handlers has finished running.\n * @function defer\n */\nexport const defer = (f: (args: any[]) => any) => {\n setTimeout(f, 0);\n}\n\n/**\n * This metafunction will create a new function that executes the given function\n * on a deferred basis every time, whereas defer immediately executes the given\n * function only once.\n * @function deferred\n */\nexport const deferred = (f: (args: any[]) => any) => {\n return () => {\n setTimeout(f, 0);\n }\n}\n\n/**\n * If you start many async procedures at nearly the same time they are not\n * guaranteed to complete in order. This class helps by dropping the effects of\n * async procedures that finish after a procedure started at a later time.\n */\nexport class OrderedEffects {\n serial: number = 0;\n\n async queue(cause: () => Promise, effect: (arg: T) => void) {\n const sequence = this.serial++;\n\n let result = await cause();\n\n if(this.serial > sequence+1) {\n // drop the change\n }\n else {\n effect(result);\n }\n }\n}\n\n/**\n * This object throttles the queued functions to occurr no more than once per\n * frame. In doing so, it introduces one frame of latency. This means that\n * queued functions will run on the next frame, at the earliest, but that if\n * a second function is queued while waiting for the first, then the first will\n * never run and only the function queued later will run.\n */\nexport class ThrottledDeferred {\n requestId: number | undefined;\n\n queue(fn: () => any) {\n if(this.requestId !== undefined) {\n window.cancelAnimationFrame(this.requestId);\n }\n this.requestId = window.requestAnimationFrame(() => {\n this.requestId = undefined;\n fn();\n });\n }\n}\n\ninterface NoArgConstructor {\n new(): V;\n}\n\n/**\n * Default maps take a constructor function as an argument and will return a\n * new instance when getting a non-existent value from the map.\n */\nexport class DefaultMap extends Map {\n\n ctor: NoArgConstructor;\n\n constructor(ctor: NoArgConstructor) {\n super();\n this.ctor = ctor;\n }\n\n get(key: K): V {\n if(!this.has(key)) {\n this.set(key, new this.ctor());\n }\n return super.get(key);\n }\n}\n\n/**\n * The UpdateManager holds any number of ThrottledDeferred queues, stored by\n * a unique identifier.\n */\nexport class UpdateManager {\n private pending: DefaultMap =\n new DefaultMap(ThrottledDeferred);\n\n queue(id: unknown, fn: () => any) {\n this.pending.get(id).queue(fn);\n }\n}\n\n/**\n * Returns a function that returns the time since it was last called. It starts\n * at infinity, which is logically correct in some way, but also ridiculous.\n */\nexport const delta = () => {\n let last = -Infinity;\n return () => {\n const\n now = performance.now(),\n result = now - last;\n last = now;\n return result;\n }\n};\n\n\n/**\n * Convert a string into an HTMLElement\n */\nexport const html = (str: string) => {\n const elt = document.createElement('template');\n elt.innerHTML = str;\n return elt.content;\n}\n\nexport const basename = (url: string) => {\n if(url) {\n let elts = url.split('/');\n return elts[elts.length-1];\n } else {\n return null;\n }\n}\n\n\n/**\n * Similar to the range() function in Python, but without the optional step\n * parameter. The direction of iteration is determined automatically. Note that\n * range(3, 0) is not the reverse of range(0, 3) because the first parameter\n * is always inclusive, and the second parameter is always exclusive.\n */\nexport function* range(start: number, end: number) {\n if(start > end) {\n for(let i = start; i > end; i--) {\n yield i;\n }\n } else {\n for(let i = start; i < end; i++) {\n yield i;\n }\n }\n}\n\n/**\n * Iterate over two iterators in tandem, stopping when the shorter is\n * exhausted.\n */\nexport const zip =\n function*(a: Iterable, b: Iterable): Generator<[A, B]>\n{\n const ai = a[Symbol.iterator]();\n const bi = b[Symbol.iterator]();\n\n let ar = ai.next();\n let br = bi.next();\n let done = ar.done || br.done;\n\n while(!done) {\n yield [ar.value, br.value];\n\n ar = ai.next();\n br = bi.next();\n done = ar.done || br.done;\n }\n}\n\n\n/**\n * See https://en.wikipedia.org/wiki/Linear_interpolation#Programming_language_support\n * @param a - the value at t=0\n * @param b - the value at t=1\n * @param t - a proportion on the unit interval [0, 1] used to scale\n * linearly between a and b.\n * @returns - a value between a and b determined by the magnitude of\n * t.\n */\nexport const lerp = (a: number, b: number, t: number) => {\n return (1-t)*a + t*b;\n}\n\n/**\n * Creates a conventional Promise that resolves after some number of\n * milliseconds.\n * @param duration - how many milliseconds to wait before resolving.\n * @returns - the promise has no value, it just resolves.\n */\nexport const timer = (duration: number) => {\n return new Promise( resolve => {\n setTimeout(resolve, duration);\n });\n}\n\n\n// The rest are easing functions: https://easings.net/\n\nexport const easeInOutSine = (x: number) => {\n return -(Math.cos(Math.PI * x) - 1) / 2;\n}\n\nexport const easeInExpo = (x: number) => {\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\n}\n\n/**\n * Removes the item from the array.\n *\n * *Warning* Don't use this on array properties of DomainModel objects. Use the\n * `removed` version to re-assign the whole array property instead of editing\n * its value in place, e.g. item.sections = removed(section, item.sections);\n * @param item the thing to remove\n * @param a the array to remove it from\n * @returns true if it was removed, false otherwise\n */\nexport const remove = (item: T, a: Array): boolean => {\n const i = a.indexOf(item);\n if(i > -1) {\n a.splice(i, 1);\n return true;\n }\n return false;\n}\n\n/**\n * Returns a copy of the array a with the item removed, or merely a duplicate\n * of the array if the item cannot be found.\n * @param item the thing to remove\n * @param a the array to copy; the item will be removed from the copy\n */\nexport const removed = (item: T, a: T[]): T[] => {\n const b = Array.from(a);\n remove(item, b);\n return b;\n}\n\n/**\n * Replace the old item in the array with the given replacement item.\n *\n * *Warning* Don't use this on array properties of DomainModel objects. Use the\n * `replaced` version to re-assign the whole array property instead of editing\n * its value in place, e.g. item.sections = replaced(old, repl, item.sections);\n * @param old the item to be replaced\n * @param replacement the item to replace the old item with\n * @param a the array to operate on\n * @returns true if the item was replaced, false otherwise\n */\nexport const replace = (old: T, replacement: T, a: Array): boolean => {\n const i = a.indexOf(old);\n if(i > -1) {\n a.splice(i, 1, replacement);\n return true;\n }\n return false;\n}\n\n/**\n * Returns a copy of the array a with the old item replaced with the\n * replacement.\n * @param old the item to be replaced\n * @param replacement the item to replace the old item with\n * @param a the array to operate on\n * @returns a copy of a with the old item replaced with the replacement\n */\nexport const replaced = (old: T, replacement: T, a: T[]): T[] => {\n const b = Array.from(a);\n replace(old, replacement, b);\n return b;\n}\n\n/**\n * Returns a new set that contains only elements that appear in both sets. This\n * operation is symmetrical meaning the order of the `a` and `b` parameters\n * should not matter.\n * @returns a new set containing only the items that appear both in a and b.\n */\nexport const intersection = (a: Set, b: Set): Set => {\n var result = new Set();\n for(let item of a) {\n if(b.has(item)) result.add(item);\n }\n return result;\n}\n\n/**\n * Choose the closest numeric element from a list.\n */\nexport const select = (x: number, input: number[]): number => {\n const differences = new Array(input.length);\n for(let i=0; i {\n let m = Number.POSITIVE_INFINITY;\n let mi = -1;\n for(let i = 0; i < xs.length; i++) {\n if(xs[i] < m) {\n m = xs[i];\n mi = i;\n }\n }\n return mi;\n}\n\n\nexport const saveBuffer = (buffer: ArrayBuffer, filename: string) => {\n var blob = new Blob( [ buffer ], { type: 'application/octet-stream' } );\n const link = document.createElement('a');\n link.href = URL.createObjectURL( blob );\n link.download = filename;\n link.click();\n}\n\nexport const partition = (items: T[], predicate: (T) => boolean): [T[], T[]] =>\n{\n let i=0;\n while(i < items.length && predicate(items[i])) {\n i++;\n }\n return [items.slice(0, i), items.slice(i)];\n}\n\n/**\n * Iterate through all sequential pairs of an array.\n */\nexport function* pairwise(iterable: Iterable): Generator<[T, T?]> {\n let last: T = null;\n for(const item of iterable) {\n if(last == null) {\n last = item;\n continue;\n }\n yield [last, item];\n last = item;\n }\n}\n\n/**\n * Iterate through something two at a time. On the last iteration, the second\n * element of the tuple is null because there is no next element.\n */\nexport function* lookahead(iterable: Iterable): Generator<[T, T?]> {\n let last: T = null;\n for(const item of iterable) {\n if(last == null) {\n last = item;\n continue;\n }\n yield [last, item];\n last = item;\n }\n \n if(last) {\n yield [last, null];\n }\n}\n\nexport const firstMatching = (iterable: Iterable, p: (t: T) => boolean)\n : T | undefined =>\n{\n for(const item of iterable) {\n if(p(item)) return item;\n }\n}\n\nexport const uuid4 = () => {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n\n // Set the version bits to indicate version 4\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n // Set the variant bits\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n const chrs = bytes.reduce(\n (a, b) => a + b.toString(16).padStart(2, '0'),\n '');\n\n return (\n chrs.slice( 0, 8) + '-' +\n chrs.slice( 8, 12) + '-' +\n chrs.slice(12, 16) + '-' +\n chrs.slice(16, 20) + '-' +\n chrs.slice(20, 32)\n );\n};\n\n/**\n * Randomly re-order the input array.\n */\nexport const shuffle = (array: unknown[]): void => {\n for(let i = array.length - 1; i > 0; i--)\n {\n const j = Math.floor(Math.random() * i);\n [array[j], array[i]] = [array[i], array[j]]; // swap\n }\n}\n\ntype Resolver = () => void;\n\nexport const promiseWithResolvers = (): [Promise, Resolver, Resolver] => {\n let\n resolve: Resolver,\n reject: Resolver;\n\n const p = new Promise((resolver, rejecter) => {\n resolve = resolver;\n reject = rejecter;\n });\n\n return [p, resolve, reject];\n}\n","import Application from './Application';\nimport BaseView from './views/BaseView';\nimport DomainModel from './DomainModel';\nimport EventDispatcher from './EventDispatcher';\nimport logging from './logging';\n\nconst log = logging('selection');\n\n\nexport default class SelectionManager extends EventDispatcher {\n view?: BaseView;\n model?: DomainModel;\n\n private app: Application;\n\n constructor(app: Application) {\n super();\n this.app = app;\n }\n\n set(selection: BaseView)\n {\n log.trace(\"SelectionManager.set()\");\n\n // No need to do anything if this is a no-op.\n if(selection == this.view) return;\n\n this.clear();\n this.view = selection;\n this.model = selection.model;\n\n for(let mesh of selection.highlights) {\n if(mesh.userData.isSectionHit) {\n mesh.visible = true;\n }\n // highlight objects go on layer 1 (mask 0b10)\n mesh.layers.set(1);\n }\n\n this.trigger('set');\n }\n\n /**\n * Clears the current highlight.\n */\n clear()\n {\n log.debug(\"SelectionManager.clear()\");\n if(this.view) {\n for(let mesh of this.view.highlights) {\n if(mesh.userData.isSectionHit) {\n mesh.visible = false;\n }\n // regular objects go on layer 0 (mask 0b01)\n mesh.layers.set(0);\n }\n }\n delete this.view;\n delete this.model;\n this.app.pipeline.update = true;\n\n this.trigger('clear');\n }\n}\n","import EventDispatcher from './EventDispatcher';\n\n\n/**\n * This is the type of the argument to the `add` method of CommandHistory.\n */\ninterface UndoFrame {\n /*\n * A unique identifier for this undo frame. If multiple undo frames are\n * added with the same name, they are merged by preserving the old undo and\n * accepting the new redo. If the name is null (or omitted), then it will\n * never be merged with previous frames.\n */\n name?: string;\n\n /**\n * A string that describes the result of the action currently being\n * comitted to the history. If the previous value was five and the new\n * value is ten, the description should read \"set value to ten\".\n */\n description: string;\n\n /**\n * A callable that performs the undo action. The callable should not take\n * any arguments.\n */\n undo: () => void;\n\n /**\n * A callable that performs the redo action, that is, it undoes the redo.\n * The callable should not take any arguments.\n */\n redo: () => void;\n}\n\n/**\n * The command history provides undo/redo support based on higher order\n * functions. Instead of logging concrete instances of a Command class, we save\n * a pair of functions that correspond to undo and redo. The functions could be\n * bound methods of an object, or they could be closures that capture all the\n * necessary state in their environment.\n *\n * Two things this pattern cannot do: 1) keep undo/redo history between browser\n * sessions or 2) redo the last action. Those would require real concrete\n * Command objects, which require a lot more coding on the user's end because\n * every action in the UI must be represented by a class.\n */\nexport default class CommandHistory extends EventDispatcher {\n\n private undoStack: UndoFrame[] = new Array();\n private redoStack: UndoFrame[] = new Array();\n\n\n /**\n * Most use cases should call app.commit(). For anything out of the\n * ordinary, use the add method to add some history to the undo/redo stack.\n *\n * When a new command is added, the excess is discarded from the end of the\n * command stack, meaning that if you undo some stuff and then do something\n * else, then there's no way to redo anymore. To put it another way,\n * undo/redo is a simple stack data structure, not a tree.\n *\n * The add function raises a CustomEvent on the window object named\n * CommandHistory.add. This allows the UI to listen for updates and set the\n * disabled state of the undo and redo buttons accordingly.\n *\n */\n add(frame: UndoFrame) {\n // empty the redo stack, discard the contents\n this.redoStack.length = 0;\n\n // last may be null if we have a zero length undo stack\n const last = this.undoStack[this.undoStack.length-1];\n\n // If the new frame has a name string and it matches the last frame's\n // name, then we merge the two.\n if(last && frame.name != null && last.name === frame.name) {\n const newFrame = Object.assign({}, frame);\n newFrame.undo = last.undo;\n this.undoStack.pop();\n this.undoStack.push(newFrame);\n } else {\n this.undoStack.push(frame);\n }\n\n this.trigger('add');\n }\n\n /**\n * Calling undo on the command history undoes the last action that was added\n * to the stack. After an action has been undone, canRedo should return\n * true until another command is added to the stack. If there's nothing in\n * the stack, or we've already undone all the commands in the stack, then\n * calling undo again does nothing.\n */\n undo() {\n if(this.undoStack.length > 0){\n var frame = this.undoStack.pop();\n this.redoStack.push(frame);\n frame.undo();\n this.trigger('undo');\n }\n }\n\n /**\n * Once undo has been called, it is possible to \"undo the undo\" with a redo.\n * Each redo should be paired with a matching undo. If we don't have\n * anything to redo (canRedo is false), this does nothing.\n */\n redo() {\n if(this.redoStack.length > 0){\n var frame = this.redoStack.pop();\n this.undoStack.push(frame);\n frame.redo();\n this.trigger('redo');\n }\n }\n\n /**\n * If nothing has been added to the command history, or if we've already\n * undone all of the things in the command history, then we're unable to\n * undo anymore. This method is useful for setting the enabled or disabled\n * state of the undo button.\n * @returns Whether or not calling undo will have any effect.\n */\n canUndo(): boolean {\n return this.undoStack.length > 0;\n }\n\n /**\n * This method is useful for setting the enabled or disabled state of the\n * undo button. The only times that the redo method will have an effect is\n * basically just after we have undone something.\n * @return Whether or not calling redo will have any effect.\n */\n canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n /**\n * Get a tool tip for the undo button that shows what action will be\n * undone.\n */\n getUndoDescription(): string {\n if(this.undoStack.length > 0) {\n return \"Undo \" + this.undoStack[this.undoStack.length - 1].description;\n } else {\n return \"Nothing to undo\";\n }\n }\n\n /**\n * Get a tool tip for the redo button that shows what action will be\n * redone.\n */\n getRedoDescription(): string {\n if(this.redoStack.length > 0) {\n return \"Redo \" + this.redoStack[this.redoStack.length - 1].description;\n } else {\n return \"Nothing to redo\";\n }\n }\n};\n","import { Object3D } from 'three';\nimport DomainModel from './DomainModel';\nimport SelectionManager from './SelectionManager';\nimport CommandHistory from './CommandHistory';\nimport RenderPipeline from './RenderPipeline';\nimport { Picker } from './view3d';\nimport logging from './logging';\nimport EventDispatcher from './EventDispatcher';\nimport DefaultsManager from './DefaultsManager';\n\nconst log = logging('Application');\n\nexport default abstract class Application {\n model: DomainModel;\n object: Object3D;\n\n selection: SelectionManager = new SelectionManager(this);\n history: CommandHistory = new CommandHistory();\n pipeline: RenderPipeline;\n picker: Picker;\n defaults: DefaultsManager;\n\n private commands = new EventDispatcher();\n\n constructor() {\n window.addEventListener('app-command', this.handleCommand.bind(this));\n\n this.command('undo', () => {\n this.history.undo();\n this.refresh();\n });\n\n this.command('redo', () => {\n this.history.redo();\n this.refresh();\n });\n\n this.command('pipeline-update', () => {\n this.pipeline.update = true;\n });\n\n this.command('refresh', () => {\n this.refresh();\n });\n\n }\n\n /**\n * The implementation should begin running.\n */\n abstract start(): Promise;\n\n /**\n * The implementation should discard its old layout, construct a new one\n * from its domain model, and replace the object with a fresh view of the\n * new model.\n */\n abstract refresh(): Promise;\n\n /**\n * Register a handler for an application command. This could be done by an\n * app implementation itself, as with the undo/redo and pipeline-update\n * commands implemented in the base Application class, or they could be\n * implemented by any component of the application.\n *\n * Since commands as a concept are global and have a static lifetime, there\n * is no way to remove a command once it's registered. If you need\n * something like that, probably best to use an event bus of some sort,\n * e.g. the window's dispatchEvent() method.\n */\n command(action: string, handler: (...args: unknown[]) => unknown): void {\n this.commands.on(action, handler);\n }\n\n /**\n * Call `Application.do('command-name', ...)` to send a command to the\n * application instance. These commands are handled by functions registered\n * with the Application instance's command() method.\n */\n static do(action: string, ...args: any[]): void {\n window.dispatchEvent(new CustomEvent(\n 'app-command', { detail: { action, args }}));\n }\n\n /**\n * This is the primary interface to the command history based on\n * serializing the root domain model. It has a side-effect: it recursively\n * commits changes to app.model. In fact, if changes are commited outside\n * of this method, then this method won't work correctly.\n * @param name If it's undefined, then repreated commits will not merge.\n * Otherwise, repeated commits under the same name will merge so that they\n * appear as a single undo/redo frame.\n * @param description A user visible string describing the action taken to\n * generate this unde frame, e.g. 'Add drawer'\n */\n commit(name: string | undefined, description: string): void {\n const oldData = this.model.toJSON();\n this.model.commit(true);\n const newData = this.model.toJSON();\n this.history.add({\n name,\n description,\n undo: () => {\n this.model =\n (this.model.constructor as typeof DomainModel)\n .fromJSON(oldData);\n },\n redo: () => {\n this.model =\n (this.model.constructor as typeof DomainModel)\n .fromJSON(newData);\n }\n });\n this.pipeline.update = true;\n }\n\n setLogLevel(module: string, level: string) {\n const mod = logging(module);\n switch(level.toUpperCase()) {\n case 'TRACE':\n mod.level = log.TRACE;\n break;\n case 'DEBUG':\n mod.level = log.DEBUG;\n break;\n case 'INFO':\n mod.level = log.INFO;\n break;\n case 'WARN':\n mod.level = log.WARN;\n break;\n case 'ERROR':\n mod.level = log.ERROR;\n break;\n default:\n log.error(`Unconvertible log level '${level}', expected TRACE, DEBUG, INFO, WARN, or ERROR (case insensitive).`);\n }\n }\n\n /**\n * This is a utility method to dispatch CustomEvents of type 'app-command'\n * to the Application implementation's command method.\n */\n private handleCommand(event: CustomEvent) {\n const { action, args } = event.detail;\n this.commands.trigger(action, ...args);\n }\n}\n","/**\n * An extended Promise that provides a cancellation flag. Note that this is not\n * a fully general cancelable promise, but requires an animating caller to\n * reject the promise on cancellation.\n */\nexport class RoulerPromise extends Promise {\n canceled: boolean = false;\n}\n\n/**\n * This is an Error subclass that lets callers filter errors based on their\n * type.\n */\nexport class RoulerCanceled extends Error {\n constructor() {\n super('Rouler Canceled');\n }\n}\n\n/**\n * Executes a callback on every frame for a given number of milliseconds.\n * @param duration - how long to run the animation, measured in milliseconds.\n * @param fn - the callback to execute with parameter `t` representing the time\n * elapsed on the unit interval (0, 1], open on the zero side, meaning that `t`\n * skips 0.\n */\nexport const rouler = (duration: number, fn: (t: number) => void) => {\n const start = Date.now();\n\n let p: RoulerPromise, update: () => void;\n p = new RoulerPromise((resolve, reject) => {\n update = () => {\n if (p.canceled) {\n reject(new RoulerCanceled());\n return;\n }\n let delta = Date.now() - start;\n if (delta < duration) {\n window.requestAnimationFrame(update);\n fn(delta / duration);\n } else {\n fn(1);\n resolve();\n }\n };\n });\n update();\n return p;\n};\n","import Application from \"../Application\";\nimport { lerp, easeInOutSine } from \"../utils\";\nimport { rouler } from \"./rouler\";\n\n/**\n * In an earlier version, the drawer and door animation was automatically tied\n * to the domain model so that it was not possible to change the open property\n * without seeing the animation. This function replaces the original behavior,\n * but with slightly different syntax.\n *\n * Old style:\n *\n * drawer.open = 1.0;\n *\n * New style:\n *\n * animateOpen(drawer, 1.0);\n *\n * NB: it works for anything with an 'open' property, which should include\n * murphy beds as well as doors and drawers.\n */\nconst animateOpen = (target: number, model: { open: number; }) => {\n const start = model.open;\n\n rouler(500, (a: number) => {\n model.open = lerp(start, target, easeInOutSine(a));\n Application.do('pipeline-update');\n });\n};\n\nexport default animateOpen;\n","/**\n * Text = 3D Text\n *\n * parameters = {\n * font: , // font\n *\n * size: , // size of the text\n * depth: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: , // how far from text outline (including bevelOffset) is bevel\n * bevelOffset: // how far from text outline does bevel start\n * }\n */\n\nimport {\n\tExtrudeGeometry\n} from 'three';\n\nclass TextGeometry extends ExtrudeGeometry {\n\n\tconstructor( text, parameters = {} ) {\n\n\t\tconst font = parameters.font;\n\n\t\tif ( font === undefined ) {\n\n\t\t\tsuper(); // generate default extrude geometry\n\n\t\t} else {\n\n\t\t\tconst shapes = font.generateShapes( text, parameters.size );\n\n\t\t\t// translate parameters to ExtrudeGeometry API\n\n\t\t\tif ( parameters.depth === undefined && parameters.height !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.TextGeometry: .height is now depreciated. Please use .depth instead' ); // @deprecated, r163\n\n\t\t\t}\n\n\t\t\tparameters.depth = parameters.depth !== undefined ?\n\t\t\t\tparameters.depth : parameters.height !== undefined ?\n\t\t\t\t\tparameters.height : 50;\n\n\t\t\t// defaults\n\n\t\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\t\tsuper( shapes, parameters );\n\n\t\t}\n\n\t\tthis.type = 'TextGeometry';\n\n\t}\n\n}\n\n\nexport { TextGeometry };\n","import {\n\tFileLoader,\n\tLoader,\n\tShapePath\n} from 'three';\n\nclass FontLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tconst font = scope.parse( JSON.parse( text ) );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\treturn new Font( json );\n\n\t}\n\n}\n\n//\n\nclass Font {\n\n\tconstructor( data ) {\n\n\t\tthis.isFont = true;\n\n\t\tthis.type = 'Font';\n\n\t\tthis.data = data;\n\n\t}\n\n\tgenerateShapes( text, size = 100 ) {\n\n\t\tconst shapes = [];\n\t\tconst paths = createPaths( text, size, this.data );\n\n\t\tfor ( let p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tshapes.push( ...paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nfunction createPaths( text, size, data ) {\n\n\tconst chars = Array.from( text );\n\tconst scale = size / data.resolution;\n\tconst line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tconst paths = [];\n\n\tlet offsetX = 0, offsetY = 0;\n\n\tfor ( let i = 0; i < chars.length; i ++ ) {\n\n\t\tconst char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tconst ret = createPath( char, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\tconst glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) {\n\n\t\tconsole.error( 'THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + '.' );\n\n\t\treturn;\n\n\t}\n\n\tconst path = new ShapePath();\n\n\tlet x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tconst outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( let i = 0, l = outline.length; i < l; ) {\n\n\t\t\tconst action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\nexport { FontLoader, Font };\n","import { Group, Mesh, MeshBasicMaterial, Object3D, PlaneGeometry } from \"three\";\nimport { TextGeometry } from \"three/examples/jsm/geometries/TextGeometry\";\nimport { Font, FontLoader } from \"three/examples/jsm/loaders/FontLoader\";\n\nlet fontPromise: Promise = null;\nconst\n cache = new Map(),\n planeGeometry = new PlaneGeometry(1, 1),\n textMaterial = new MeshBasicMaterial({ color: 0x000000, transparent: true }),\n textPlaneMaterial = new MeshBasicMaterial({ color: 0xFFFFFF, transparent: true }),\n loader = new FontLoader();\n\nconst createTechDrawingLabel = async (text: string, size: number, x: number, y: number, scene: Object3D) => {\n if(fontPromise == null) {\n fontPromise = new Promise(resolve => {\n loader.load('fonts/gentilis_bold.typeface.json', function (font) {\n resolve(font);\n });\n });\n }\n\n // TODO: this await will never complete in the transitional app test page\n // and log a 404, which was easy for me to overlook. Maybe we just need\n // to actually fail on a loader error above and log the exception.\n const\n font = await fontPromise,\n cacheKey = `${text}|${size}`\n\n let textGeo: TextGeometry;\n if(cache.has(cacheKey)) {\n textGeo = cache.get(cacheKey);\n }\n else {\n textGeo = new TextGeometry(text, {\n font: font,\n size: size,\n height: 1,\n curveSegments: 1,\n });\n textGeo.computeBoundingBox();\n cache.set(cacheKey, textGeo);\n }\n let\n textWidth = textGeo.boundingBox.max.x - textGeo.boundingBox.min.x,\n textHeight = textGeo.boundingBox.max.y - textGeo.boundingBox.min.y;\n\n const group = new Group();\n group.position.set(x, y + (textHeight + 0.5)/2, 100);\n group.userData.isTechLabel = true;\n group.userData.techLabelText = text;\n\n const mesh = new Mesh(textGeo, textMaterial);\n mesh.userData.isTechLabelMesh = true;\n mesh.position.set(-textWidth / 2, - textHeight/2, 1);\n\n const plane = new Mesh(planeGeometry, textPlaneMaterial);\n plane.userData.isTechLabelMesh = true;\n plane.scale.set(textWidth + 0.5, textHeight + 0.5, 1);\n \n group.add(mesh);\n group.add(plane);\n scene.add(group); \n}\n\nexport default createTechDrawingLabel;\n","import { Euler, Object3D } from \"three\";\n\n/**\n * This is a helper function to set the position of a directional light\n * based on altitude and azimuth parameters, which may be more intuitive\n * than a 3D position. Altitude is the angle between the horizon and the\n * zenith, ranging between 0 and PI/2. Azimuth is the compass heading of the\n * light source, ranging from 0 to 2*PI, where 0 is East, PI/2 is North,\n * etc. In three.js the ground plane is XZ, so +Z is North, +X is East, etc.\n */\nexport const directionalPosition = (light: Object3D, alt: number, az: number) => {\n var euler = new Euler(0.0, az, alt, 'XYZ');\n // the initial position is arbitrary since the light rays are parallel\n light.position.x = 200;\n light.position.y = 0;\n light.position.z = 0;\n light.position.applyEuler(euler);\n}\nexport default directionalPosition;\n","import { ClosetUnit, Section, Wall } from \"./domain\";\nimport logging from './logging';\nimport { select } from \"./utils\";\n\nconst log = logging('measurement');\n\nexport let availableSlots: number[];\n\nexport const setAvailableSlots = (list: number[]) => {\n availableSlots = Array.from(list);\n}\n\nexport const getAvailableSlots = () => availableSlots;\n\n/**\n * Consults the chain of sections back to the root of the unit to discover the\n * origin of this unit with reference to the floor, i.e. y = 0. This is the\n * vertical point where the void space of the section begins, i.e. the top\n * surface of the fixed shelf below it.\n */\nexport const elevation = (section: Section): number => {\n if(section.parent instanceof Section) {\n if(section.parent.orientation == 'column') {\n // If the parent is in column orientation, then the sections are\n // stacked vertically\n return section.position.y + elevation(section.parent);\n } else {\n // otherwise the child sections are stacked horizontally and have\n // exactly the same elevation as their parent\n return elevation(section.parent);\n }\n } else if(section.parent instanceof ClosetUnit) {\n return section.parent.bottomShelf + section.parent.thickness - 3/8;\n } else if(section.parent instanceof Wall) {\n log.error('measurement elevation() unimplemented parent type: Wall. Elevation will be inaccurate.');\n } else {\n return 0;\n }\n}\n\n/*\n * The holes for \"fixed\"/cammed shelves are drilled 3/8\" from the bottom of the\n * shelf, regardless of material thickness. Directly in the middle for the most\n * common 3/4\" material.\n */\n\n/**\n * A tool for making approximate comparisons where rounding errors or other\n * factors might make simple numerical equality difficult. This is appropriate\n * for use on numbers that represent inches because the precision is one\n * thousandth of an inch, which may be too coarse for other units.\n */\nexport const approx = (a: number, b: number) => {\n return Math.abs(a - b) < 0.02;\n}\n\n/**\n * Test if a is greater than b by a margin greater than 1/1000th of an inch.\n */\nexport const approxGreaterThan = (a: number, b: number) => {\n return a - b > 0.02;\n}\n\n/**\n * Test if a is greater than or equal to b, considering them equal if they are\n * within 1/1000th of an inch.\n */\nexport const approxGteq = (a: number, b: number) => {\n return approxGreaterThan(a, b) || approx(a, b);\n}\n\n/**\n * Test if a is less than b by a margin greater than 1/1000th of an inch.\n */\nexport const approxLessThan = (a: number, b: number) => {\n return b - a > 0.02;\n}\n\n/**\n * Test if a is less than or equal to b, considering them equal if they are\n * within 1/1000th of an inch.\n */\nexport const approxLteq = (a: number, b: number) => {\n return approxLessThan(a, b) || approx(a, b);\n}\n\n/**\n * This is (sort of) a decimal truncation procedure, also sort of a floor\n * procedure. If you want to truncate a float to three decimal places, call\n * `trunc(f, 3)`. Thus pi truncated to three decimal places would yield 3.141.\n * Notice that properly rounded, that would be 3.142. Because of some\n * binary representation issues, rounding with this method doesn't always round\n * decimal fives in the same direction, so I'm calling this truncation instead.\n * This only really works for positive n.\n */\nexport const trunc = (x: number, n: number) => {\n const f = Math.pow(10, n);\n return Math.floor(x * f) / f;\n}\n\n/**\n * Check if the interval described by (a1, a2) overlaps the interval described\n * by (b1, b2). These intervals are open, so if they only share a point in\n * common, then they are not considered to overlap. Note that due to floating\n * point error, you may need to round or truncate the input to this function to\n * achieve a reliable result.\n *\n * Note that this will return false if a1 == a2 or b1 == b2. Checking whether\n * the point a is between b1 and b2 is much easier, and you probably want to\n * do that directly with `a > b1 && a < b2` instead.\n */\nexport const overlaps =\n (a1: number, a2: number, b1: number, b2: number): boolean =>\n{\n // Since we don't know if a1 < a2, we make d1 and d2 such that we're sure\n // d1 < d2, and that geometrically, d covers the same interval as a. The\n // same is true for b and e. Finally, we find points f1 and f2 which are\n // the start and end of the overlapping sections. If the a and b intervals\n // don't overlap, then the f interval ends up being \"backwards\", and we\n // return false.\n const\n d1 = Math.min(a1, a2),\n d2 = Math.max(a1, a2),\n\n e1 = Math.min(b1, b2),\n e2 = Math.max(b1, b2),\n\n f1 = Math.max(d1, e1),\n f2 = Math.min(d2, e2);\n\n return f1 < f2;\n}\n\n/**\n * Truncates the parameters to 1 decimal place and delegates the comparison to\n * the overlaps function. This avoids floating point error.\n */\nexport const approxOverlaps =\n (a1: number, a2: number, b1: number, b2: number): boolean =>\n{\n return overlaps(trunc(a1, 1), trunc(a2, 1), trunc(b1, 1), trunc(b2, 1));\n}\n\n/**\n * Converts a length in millimeters to an equivalent length in inches.\n * @function mm2in\n */\nexport const mm2in = (mm: number) => {\n return mm / 25.4;\n}\n\n/**\n * Converts a length in inches to an equivalent length in millimeters.\n * @function in2mm\n */\nexport const in2mm = (inches: number) => {\n return inches * 25.4;\n}\n\n/**\n * For the moment I'm calling a hole in a boring panel a 'slot'. The slots are\n * spaced at 32 millimeters, approximately 1.26 inches apart. The slot number\n * is an integer number of 32mm intervals.\n * @function slot2in\n */\nexport const slot2in = (slot: number) => {\n return mm2in(slot * 32);\n}\n\n/**\n * Given a measurement in iches, finds the nearest 'slot' in a panel with holes\n * at 32 mm intervals.\n * @function in2slot\n */\nexport const in2slot = (inches: number) => {\n return Math.round(in2mm(inches)/32);\n}\n\n/**\n * Rounds a measurement in inches to the nearest slot and returns the\n * measurement in inches. This is useful for snapping to slots. Note that the\n * input and output refer to absolute elevations and account for a 3/8\"\n * elevation of the first slot.\n */\nexport const round2slot = (inches: number) => {\n //return 0.375 + slot2in(in2slot(inches - 0.375));\n return select(inches, availableSlots);\n}\n\nexport const closestIndex = (inches: number) => {\n let m = Infinity;\n for(let i=0; i < availableSlots.length; i++) {\n const slot = availableSlots[i];\n const d = Math.abs(slot - inches);\n if(d > m) {\n return i - 1;\n }\n m = d;\n }\n}\n\n/**\n * Round the inch measurement up to the nearest slot, but if the measurement is\n * already (approximately) on a slot, then return the exact slot value. Note\n * that the input and output refer to absolute elevations.\n * @returns a measurement in inches rounded to a 32mm increment.\n */\nexport const slotCeil = (inches: number) => {\n for(let i=0; i < availableSlots.length; i++) {\n if(Math.abs(availableSlots[i] - inches) < 0.02) {\n return availableSlots[i];\n }\n if(availableSlots[i] > inches) {\n return availableSlots[i];\n }\n }\n}\n\n/**\n * This is like slotCeil except that it always returns the next slot higher\n * rather than returning the current slot when it's close.\n */\nexport const slotAbove = (inches: number) => {\n const len = availableSlots.length;\n for(let i=0; i < len; i++) {\n if(availableSlots[i] - inches > 0.02) {\n return availableSlots[i];\n }\n }\n return availableSlots[len-1];\n}\n\n/**\n * This is like slotFloor except that it always returns the next slot lower\n * rather than returning the current slot when it's close.\n */\nexport const slotBelow = (inches: number) => {\n const len = availableSlots.length;\n for(let i=2; i < len; i++) {\n if(availableSlots[i] - inches > 0.02) {\n return availableSlots[i-2];\n }\n }\n return availableSlots[len-2];\n}\n\n\n/**\n * Round the inch measurement down to the nearest slot, but if the measurement\n * is already (approximately) on a slot, then return the exact slot value. Note\n * that the input and output refer to absolute elevations.\n * @returns a measurement in inches rounded to a 32mm increment.\n */\nexport const slotFloor = (inches: number) => {\n for(let i=1; i < availableSlots.length; i++) {\n if(Math.abs(availableSlots[i] - inches) < 0.02) {\n return availableSlots[i];\n }\n if(availableSlots[i] > inches) {\n return availableSlots[i-1];\n }\n }\n}\n","import logging from '../logging';\nimport { Wall } from \"../domain\";\nimport { clamp, uuid4 } from \"../utils\";\nimport { approx, trunc } from '../measurement';\n\n\nconst log = logging('wallControllers');\n\n/**\n * Computes the maximum depth of all units on the wall. Returns zero for null\n * wall arguments because it's convenient for callers.\n */\nexport const wallDepth = (wall?: Wall) => {\n let max = 0;\n if(wall) {\n for(const unit of wall.closetUnits) {\n max = Math.max(max, unit.depth);\n }\n }\n return max;\n}\n\n\n/**\n * What's the highest point on the wall?\n */\nexport const maxHeight = (wall: Wall) => {\n let max = 0;\n for(const point of wall.heights) {\n max = Math.max(max, point.height);\n }\n return max;\n}\n\nexport const wallLength = (wall: Wall) => {\n const h = wall.heights;\n // return the last height x or 0\n return h[h.length - 1]?.x ?? 0;\n}\n\n\nexport const setWallLength = (wall: Wall, length: number) => {\n const h = wall.heights;\n return h[h.length - 1].x = length;\n}\n\n\n/**\n * Very important to note that the connection from a to b is directed, so even \n * if `isConnected(a, b)` is true, `isConnected(b, a)` may not be true. In the\n * case where both are true, a and b have the same length and direction, and\n * each starts at the endpoint of the other.\n */\nexport const isConnected = (a: Wall, b: Wall): boolean => {\n const\n r = a.rotation.y,\n t = wallLength(a),\n ax = a.position.x + (t* Math.cos(r)),\n az = a.position.z + (t* -Math.sin(r)),\n bx = b.position.x,\n bz = b.position.z;\n return approx(ax, bx) && approx(az, bz);\n}\n\n/**\n * Use the Wall.id and Wall.parentId fields to cluster the walls into\n * contiguous groups.\n */\nexport const groupWallsById = (walls: Wall[]): Set => {\n const\n result = new Set(),\n roots = new Set(),\n byParentId = new Map();\n for(const wall of walls) {\n if(wall.parentId == null) {\n roots.add(wall);\n } else {\n byParentId.set(wall.parentId, wall);\n }\n }\n for(const root of roots) {\n const group = [root];\n let parentId = root.id;\n while(byParentId.has(parentId)) {\n const child = byParentId.get(parentId);\n group.push(child);\n parentId = child.id;\n }\n result.add(group);\n }\n\n return result;\n}\n\nexport const groupWalls = (walls: Wall[]): [Set, Map] => {\n const\n roots = new Set(walls),\n links = new Map();\n outer: for(const wall of walls) {\n const\n r = wall.rotation.y,\n len = wallLength(wall),\n x = wall.position.x + (len * Math.cos(r)),\n z = wall.position.z + (len * -Math.sin(r));\n for(const other of walls) {\n const \n ox = other.position.x,\n oz = other.position.z;\n \n // Avoid creating circular links, which would result in the cycle\n // being removed from the roots set.\n if(approx(x, ox) && approx(z, oz) && !links.has(other))\n {\n links.set(wall, other);\n roots.delete(other);\n continue outer;\n }\n }\n }\n return [roots, links];\n}\n\n/**\n * Sort the given walls so that connected walls are contiguous in the list and\n * the walls appear in order according to their direction (each is a directed\n * line segment with origin, direction, and length).\n */\nexport const sortedByConnection = (walls: Wall[]): Wall[] => {\n const\n [roots, links] = groupWalls(walls),\n result: Wall[] = [];\n\n for(const root of roots) {\n result.push(root);\n if(root.id == null) root.id = uuid4();\n let lastId = root.id;\n let link = links.get(root);\n while(link != undefined) {\n result.push(link);\n link.parentId = lastId;\n if(link.id == null) link.id = uuid4();\n lastId = link.id\n link = links.get(link);\n }\n }\n\n return result;\n}\n\n/**\n * Group the walls into sub-arrays of connected walls. Islands will result in\n * a group of one or two walls for single and double sided respectively.\n */\nexport const connectedWalls = (walls: Wall[]): Wall[][] => {\n const\n [roots, links] = groupWalls(walls),\n result: Wall[][] = [];\n\n for(const root of roots) {\n const group: Wall[] = [];\n group.push(root);\n if(root.id == null) root.id = uuid4();\n let lastId = root.id;\n let link = links.get(root);\n while(link != undefined) {\n group.push(link);\n link.parentId = lastId;\n if(link.id == null) link.id = uuid4();\n lastId = link.id;\n link = links.get(link);\n }\n result.push(group);\n };\n return result;\n}\n\n/**\n * Centers the island relative to one of the walls in a room. The island wall\n * will be 96\" from the target wall, which leaves 48\" of clearance between the\n * island wall (with 24\" cabinets) and the target wall (which also has 24\"\n * cabinets). This attempts to shrink the island to as little as 48\" to ensure\n * that the island has at least 48\" of clearance on either end (if the target\n * wall has neighboring connected walls).\n *\n * Note that this procedure really only works for simple single-wall, L, and U\n * shaped layouts. More complicated layouts probably need the island to be\n * placed manually.\n */\nexport const alignIslandToWall = (island: Wall, target: Wall, context: Wall[]) => {\n const\n i = context.findIndex(x => x == target),\n hasPrev = i > 0 && isConnected(context[i-1], target),\n hasNext = i+1 < context.length && isConnected(target, context[i+1]),\n length = wallLength(target);\n\n let ilen = length;\n\n // We want to achieve 72\" of clearance which is 24\" of cabinets and 48\" of\n // walking space.\n if(hasPrev) ilen -= 72;\n if(hasNext) ilen -= 72;\n\n // Maximum island size is 96\" (eight feet) and minimum size is 48\". Note\n // that this means that if the target wall has two connected neighbors, it\n // should be at least 48+72+72, or else this procedure will cut into the\n // 48\" clerance needed to walk around the end of the island.\n ilen = Math.floor(3*clamp(ilen, 48, 96))/3;\n\n // Centered on the wall by default. The `o` variable represents the offset\n // from the end of the target wall.\n let o = (length - ilen) / 2;\n if(hasNext && hasPrev) {\n // leave it centered, but emit a warning if the wall is undersized for\n // this island. 48+72+72=192, the minimum target wall size when the\n // target wall has two neighbors.\n if(length < 192) {\n log.warn(`WallControllers.alignIslandToWall() target wall too short for island, not enough clearance on either end. target ID ${target.id}, island ID ${island.id}`);\n }\n }\n else if(hasNext) {\n // If it only has a wall after it, then make sure that the offset\n // clears the adjacent wall by at least 72\". Note that bigger numbers\n // mean placement further to the left when facing the target wall\n // because the offset `o` is measured from the _end_ of the target\n // wall.\n o = Math.max(o, 72);\n }\n else if(hasPrev) {\n // Smaller means further to the right, so either take the centering\n // offset or the point that puts the island 72 inches away from the\n // preceding wall, whichever is further to the right.\n o = Math.min(o, length - ilen - 72);\n }\n\n const\n x1 = target.position.x + (length - o) * Math.cos(target.rotation.y),\n z1 = target.position.z + (length - o) * -Math.sin(target.rotation.y),\n\n x2 = x1 + 96 * Math.cos(target.rotation.y - Math.PI/2),\n z2 = z1 + 96 * -Math.sin(target.rotation.y - Math.PI/2);\n\n setWallLength(island, ilen);\n island.rotation.y = target.rotation.y - Math.PI;\n island.position.x = x2;\n island.position.z = z2;\n}\n","import WallView from \"../views/WallView\";\nimport { PerspectiveCamera } from \"three\";\nimport { maxHeight, wallLength } from \"../controllers/wallControllers\";\n\n\n/**\n * Positions and rotates a camera to frame an isolated wall within the camera's\n * field of view. This makes the camera a child of the wall for the sake of\n * simplicity.\n *\n * Note that if you change the camera's fov, you may need to call\n * camera.updateProjectionMatrix(). This method only re-positions the camera,\n * so I don't update the projection matrix here.\n *\n * @param camera - the camera to modify\n * @param wall - the wall to look at\n * @param aspect - the aspect ratio of the rendering, i.e. canvas width/height\n * @param margin - amount of additional space above/below or left/right of the\n * wall to include in the view\n */\nconst lookAtWall = (\n camera: PerspectiveCamera,\n wall: WallView,\n aspect: number = 1,\n margin: number = 12) =>\n{\n const\n length = wall.model.showExtension\n ? wallLength(wall.model) + wall.model.leftExtension + wall.model.rightExtension\n : wallLength(wall.model),\n halfWidth = length / 2,\n halfHeight = maxHeight(wall.model) / 2,\n // vFov is half the camera.fov converted from degrees to radians\n vFov = camera.fov * Math.PI / 360,\n hFov = vFov * aspect,\n z = Math.max(\n (halfHeight + margin) / Math.tan(vFov),\n (halfWidth + margin) / Math.tan(hFov)\n );\n \n wall.add(camera);\n camera.position.x = halfWidth;\n camera.position.y = halfHeight;\n camera.position.z = z;\n camera.rotation.set(0, 0, 0);\n};\n\nexport default lookAtWall;\n","import { AmbientLight, DirectionalLight, HemisphereLight, Light } from \"three\";\nimport { directionalPosition } from \"./directionalPosition\";\nimport { gammaCorrect } from \"./gammaCorrect\";\n\nexport const makeKitchenLights = (alt: number, az: number): Light[] => {\n var result: Light[] = new Array();\n var mainLight = new DirectionalLight(0xFFFFFF, Math.PI * 0.5);\n mainLight.castShadow = true;\n\n directionalPosition(mainLight, alt, az);\n\n mainLight.shadow.camera.near = 1;\n mainLight.shadow.camera.far = 350;\n mainLight.shadow.camera.right = 400;\n mainLight.shadow.camera.left = -400;\n mainLight.shadow.camera.top = 400;\n mainLight.shadow.camera.bottom = -400;\n mainLight.shadow.mapSize.width = 4096;\n mainLight.shadow.mapSize.height = 4096;\n\n mainLight.shadow.bias = -0.001;\n mainLight.shadow.normalBias = -0.002;\n\n result.push(mainLight);\n\n const hemi = new HemisphereLight(\n gammaCorrect(0xFFFFFF), // zenith\n gammaCorrect(0x000000), // ground\n Math.PI/2);\n directionalPosition(hemi, alt, az);\n result.push(hemi);\n\n const ambient = new AmbientLight(gammaCorrect(0XFFF4F2), Math.PI/2);\n result.push(ambient);\n\n mainLight.layers.enable(1);\n hemi.layers.enable(1);\n ambient.layers.enable(1);\n\n return result;\n};\n\nexport default makeKitchenLights;\n","import { DirectionalLight, Sphere, Vector3 } from \"three\";\nimport { wallLength } from \"../controllers/wallControllers\";\nimport { Wall } from \"../domain\";\n\nexport const optimizeDirectionalShadow =\n (light: DirectionalLight, walls: Wall[]) =>\n{\n if(walls.length == 0) return new Sphere();\n\n const\n sphere = new Sphere(),\n target = light.target,\n camera = light.shadow.camera,\n direction = new Vector3(),\n p = new Vector3(),\n v = new Vector3(),\n points: Vector3[] = [];\n\n for(const wall of walls) {\n direction.set(\n Math.cos(wall.rotation.y),\n 0,\n Math.sin(-wall.rotation.y));\n for(const height of wall.heights) {\n p.copy(wall.position);\n v.copy(direction);\n v.multiplyScalar(height.x);\n p.add(v);\n points.push(p.clone());\n p.y = height.height;\n points.push(p.clone());\n }\n if(wall.showExtension) {\n p.copy(wall.position);\n v.copy(direction);\n v.multiplyScalar(-wall.leftExtension);\n p.add(v);\n points.push(p.clone());\n\n p.copy(wall.position);\n v.copy(direction);\n v.multiplyScalar(wallLength(wall) + wall.leftExtension + wall.rightExtension);\n p.add(v);\n points.push(p.clone());\n }\n }\n\n sphere.setFromPoints(points);\n //shuffle(points);\n //const sphere = welzl(new Set(points), new Set());\n\n const r = sphere.radius;\n\n target.position.copy(sphere.center);\n light.position.normalize();\n light.position.multiplyScalar(Math.max(1, r));\n light.position.add(sphere.center);\n\n camera.near = 0;\n camera.far = 2*r;\n camera.top = camera.right = r;\n camera.bottom = camera.left = -r;\n\n camera.updateWorldMatrix(true, false);\n target.updateWorldMatrix(true, false);\n\n return sphere;\n}\n\nexport default optimizeDirectionalShadow;\n","import { AmbientLight, DirectionalLight, Group, HemisphereLight } from \"three\";\nimport { Wall } from \"../domain\";\nimport { directionalPosition } from \"./directionalPosition\";\nimport { gammaCorrect } from \"./gammaCorrect\";\nimport { optimizeDirectionalShadow } from \"./optimizeDirectionalShadow\";\n\nexport const makeMainLights = (alt: number, az: number, walls: Wall[])\n : Group =>\n{\n var result = new Group();\n var mainLight = new DirectionalLight(0xFFFFFF, 2.5);\n mainLight.castShadow = true;\n\n // these are default values that should be overridden by the call to\n // optimizeDirectionalShadow().\n mainLight.shadow.camera.near = 1;\n mainLight.shadow.camera.far = 350;\n mainLight.shadow.camera.right = 300;\n mainLight.shadow.camera.left = -300;\n mainLight.shadow.camera.top = 300;\n mainLight.shadow.camera.bottom = -300;\n mainLight.shadow.mapSize.width = 4096;\n mainLight.shadow.mapSize.height = 4096;\n mainLight.shadow.camera.updateWorldMatrix(true, false);\n mainLight.target.updateWorldMatrix(true, false);\n\n directionalPosition(mainLight, alt, az);\n// optimizeDirectionalShadow(mainLight, walls);\n\n const sphere = optimizeDirectionalShadow(mainLight, walls);\n\n result.add(mainLight);\n\n const hemi = new HemisphereLight(\n gammaCorrect(0xFFFFFF), // zenith\n gammaCorrect(0x000000), // ground\n Math.PI/3);\n directionalPosition(hemi, alt, az);\n result.add(hemi);\n\n var ambient = new AmbientLight(gammaCorrect(0xFFFFFF), Math.PI/3);\n result.add(ambient);\n\n result.position.copy(sphere.center);\n for(const child of result.children) {\n child.position.sub(sphere.center);\n }\n mainLight.shadow.camera.updateWorldMatrix(true, false);\n mainLight.target.updateWorldMatrix(true, false);\n\n // DEBUG\n// const \n// sp = new SphereGeometry(sphere.radius),\n// spedges = new EdgesGeometry(sp),\n// segs = new LineSegments(spedges, new LineBasicMaterial({color: 0xFF0000}));\n// result.add(segs); \n\n return result;\n};\n\nexport default makeMainLights;\n","import logging, { setGlobalLevel } from './logging';\n\n\nconst log = logging('config');\n\nsetGlobalLevel(log.WARN);\n\n//logging('AssemblyBuilder').level = log.TRACE;\n//logging('assembly').level = log.TRACE;\n//logging('components').level = log.TRACE;\n//logging('config').level = log.TRACE;\n//logging('domain').level = log.TRACE;\n//logging('main').level = log.TRACE;\n//logging('ParametricCache').level = log.TRACE;\n//logging('properties').level = log.TRACE;\n//logging('tools').level = log.TRACE;\n//logging('layout').level = log.TRACE;\n//logging('selection').level = log.TRACE;\n//logging('view').level = log.TRACE;\n//logging('view3d').level = log.TRACE;\n//logging('UnitEditorApp').level = log.TRACE;\n//logging('sectionControllers').level = log.TRACE;\n\nexport const endpoint = '/test';\n// export const endpoint = '/api/v1/';\n\nexport const colors = '/closet-organizers-images/models/colors'\nexport const geometry = '/geometry'\nexport const images = '/images'\nexport const maps = '/maps'\nexport const models = '/closet-organizers-images/models'\n","type ExtensionFn = (...args: unknown[]) => unknown;\n\n/**\n * The factory classes all inherit from the BaseFactory. The factories aren't\n * much more than a namespace for a bunch of extensions.\n */\nexport default class BaseFactory {\n\n protected extensions: Map;\n private static instance: unknown;\n\n constructor() {\n this.extensions = new Map();\n }\n\n /**\n * Factories are often useful as singletons.\n */\n static getInstance() {\n if(! this.instance){\n this.instance = new this();\n }\n return this.instance;\n }\n\n /**\n * Subclasses can override the make method and delegate the extension call\n * to super.make() and then do any required caching or post processing.\n */\n make(name: string, ...args: unknown[]) {\n var ext = this.extensions.get(name);\n if(ext == null){\n throw new Error(`This factory doesn't have an extension by the name \"${name}\"`);\n }\n return ext.apply(this, args);\n }\n\n /**\n * Add a factory extension. The supplied function must be a full\n * fledged function, not a fat arrow function. The extension will be called\n * bound to the mesh factory instance so it can access the cache.\n */\n extend(name: string, f: ExtensionFn) {\n if(this.extensions.has(name)) {\n throw new Error(`The extend method cannot override the extension named \"${name}\". Use the override method if you really want to override the existing extension.`);\n }\n this.extensions.set(name, f);\n }\n\n /**\n * The extend method won't let you add two extensions by the same name, but\n * you can override an extension with this method. The old extension is\n * returned in case you plan to restore it later.\n */\n override(name: string, f: ExtensionFn) {\n var old = this.extensions.get(name);\n this.extensions.set(name, f);\n return old;\n }\n}\n","/**\n * The MemoryCache class caches objects in memory. Conceivably, we could have a\n * localStorage cache that would be persistent beyond the current session. The\n * cache is keyed by an arbitrary list of values, or more accurately an\n * arbitrary list of strings derived from the values you pass to the put method\n * (see the put method for details).\n */\nexport default class MemoryCache {\n\n private cache: Record;\n\n constructor() {\n this.cache = {};\n }\n\n /**\n * Stores the given item under a composite key formed from the given path\n * elements. For example: `cache.put(myobj, \"name\", 12)`.\n * @param {*} item - Arbitrary data. Note that you can perfectly well store\n * null or undefined if you want. But that's probably not what you want.\n * @param {...*} path - The remaining arguments should be data that uniquely\n * identifies the cached object. These arguments are all coerced into\n * strings, so avoid using Objects that just turn into a string like\n * \"[object Object]\", since that won't be unique.\n */\n put(item: T, ...path: Array) {\n var key = path.join('|');\n this.cache[key] = item;\n }\n\n /**\n * Retrieve an item from the cache.\n * @param {...*} path - this should be the same set of values you passed to\n * the put method when you stored an item.\n * @returns The previously cached item, or null if it can't be found.\n * There's no error for keys that can't be found, and if you store a null\n * value there's no way to tell if null was stored intentionally or not.\n */\n get(...path: Array) {\n var key = path.join('|');\n if(key in this.cache){\n return this.cache[key];\n } else {\n return null;\n }\n }\n\n keys() {\n return Object.keys(this.cache);\n }\n\n values() {\n return Object.values(this.cache);\n }\n\n /**\n * Note that this memoize implementation is limited in the same way that\n * put and get are: the arguments to fn should be unique when turned into a\n * string.\n */\n static memoize(fn: (...args: unknown[]) => T) {\n const cache: MemoryCache = new this();\n const wrapper = (...args: unknown[]) => {\n const key: string[] = args.map(x => String(x));\n var result = cache.get(...key);\n if(result) {\n return result;\n } else {\n result = fn(...args);\n cache.put(result, ...key);\n return result;\n }\n }\n return wrapper;\n }\n}\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tInstancedBufferAttribute,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tTrianglesDrawMode,\n\tVector3,\n} from 'three';\n\nfunction computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {\n\n\tif ( ! MikkTSpace || ! MikkTSpace.isReady ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Initialized MikkTSpace library required.' );\n\n\t}\n\n\tif ( ! geometry.hasAttribute( 'position' ) || ! geometry.hasAttribute( 'normal' ) || ! geometry.hasAttribute( 'uv' ) ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Tangents require \"position\", \"normal\", and \"uv\" attributes.' );\n\n\t}\n\n\tfunction getAttributeArray( attribute ) {\n\n\t\tif ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst dstArray = new Float32Array( attribute.count * attribute.itemSize );\n\n\t\t\tfor ( let i = 0, j = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tdstArray[ j ++ ] = attribute.getX( i );\n\t\t\t\tdstArray[ j ++ ] = attribute.getY( i );\n\n\t\t\t\tif ( attribute.itemSize > 2 ) {\n\n\t\t\t\t\tdstArray[ j ++ ] = attribute.getZ( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t\tif ( attribute.array instanceof Float32Array ) {\n\n\t\t\treturn attribute.array;\n\n\t\t}\n\n\t\treturn new Float32Array( attribute.array );\n\n\t}\n\n\t// MikkTSpace algorithm requires non-indexed input.\n\n\tconst _geometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\n\t// Compute vertex tangents.\n\n\tconst tangents = MikkTSpace.generateTangents(\n\n\t\tgetAttributeArray( _geometry.attributes.position ),\n\t\tgetAttributeArray( _geometry.attributes.normal ),\n\t\tgetAttributeArray( _geometry.attributes.uv )\n\n\t);\n\n\t// Texture coordinate convention of glTF differs from the apparent\n\t// default of the MikkTSpace library; .w component must be flipped.\n\n\tif ( negateSign ) {\n\n\t\tfor ( let i = 3; i < tangents.length; i += 4 ) {\n\n\t\t\ttangents[ i ] *= - 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\t_geometry.setAttribute( 'tangent', new BufferAttribute( tangents, 4 ) );\n\n\tif ( geometry !== _geometry ) {\n\n\t\tgeometry.copy( _geometry );\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * @param {Array} geometries\n * @param {Boolean} useGroups\n * @return {BufferGeometry}\n */\nfunction mergeGeometries( geometries, useGroups = false ) {\n\n\tconst isIndexed = geometries[ 0 ].index !== null;\n\n\tconst attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );\n\tconst morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );\n\n\tconst attributes = {};\n\tconst morphAttributes = {};\n\n\tconst morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;\n\n\tconst mergedGeometry = new BufferGeometry();\n\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\tconst geometry = geometries[ i ];\n\t\tlet attributesCount = 0;\n\n\t\t// ensure that all geometries are indexed, or none\n\n\t\tif ( isIndexed !== ( geometry.index !== null ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather attributes, exit early if they're different\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tif ( ! attributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( attributes[ name ] === undefined ) attributes[ name ] = [];\n\n\t\t\tattributes[ name ].push( geometry.attributes[ name ] );\n\n\t\t\tattributesCount ++;\n\n\t\t}\n\n\t\t// ensure geometries have the same number of attributes\n\n\t\tif ( attributesCount !== attributesUsed.size ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather morph attributes, exit early if they're different\n\n\t\tif ( morphTargetsRelative !== geometry.morphTargetsRelative ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tif ( ! morphAttributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];\n\n\t\t\tmorphAttributes[ name ].push( geometry.morphAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( useGroups ) {\n\n\t\t\tlet count;\n\n\t\t\tif ( isIndexed ) {\n\n\t\t\t\tcount = geometry.index.count;\n\n\t\t\t} else if ( geometry.attributes.position !== undefined ) {\n\n\t\t\t\tcount = geometry.attributes.position.count;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.addGroup( offset, count, i );\n\n\t\t\toffset += count;\n\n\t\t}\n\n\t}\n\n\t// merge indices\n\n\tif ( isIndexed ) {\n\n\t\tlet indexOffset = 0;\n\t\tconst mergedIndex = [];\n\n\t\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\t\tconst index = geometries[ i ].index;\n\n\t\t\tfor ( let j = 0; j < index.count; ++ j ) {\n\n\t\t\t\tmergedIndex.push( index.getX( j ) + indexOffset );\n\n\t\t\t}\n\n\t\t\tindexOffset += geometries[ i ].attributes.position.count;\n\n\t\t}\n\n\t\tmergedGeometry.setIndex( mergedIndex );\n\n\t}\n\n\t// merge attributes\n\n\tfor ( const name in attributes ) {\n\n\t\tconst mergedAttribute = mergeAttributes( attributes[ name ] );\n\n\t\tif ( ! mergedAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' attribute.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tmergedGeometry.setAttribute( name, mergedAttribute );\n\n\t}\n\n\t// merge morph attributes\n\n\tfor ( const name in morphAttributes ) {\n\n\t\tconst numMorphTargets = morphAttributes[ name ][ 0 ].length;\n\n\t\tif ( numMorphTargets === 0 ) break;\n\n\t\tmergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n\t\tmergedGeometry.morphAttributes[ name ] = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; ++ i ) {\n\n\t\t\tconst morphAttributesToMerge = [];\n\n\t\t\tfor ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {\n\n\t\t\t\tmorphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );\n\n\t\t\t}\n\n\t\t\tconst mergedMorphAttribute = mergeAttributes( morphAttributesToMerge );\n\n\t\t\tif ( ! mergedMorphAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );\n\n\t\t}\n\n\t}\n\n\treturn mergedGeometry;\n\n}\n\n/**\n * @param {Array} attributes\n * @return {BufferAttribute}\n */\nfunction mergeAttributes( attributes ) {\n\n\tlet TypedArray;\n\tlet itemSize;\n\tlet normalized;\n\tlet gpuType = - 1;\n\tlet arrayLength = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( itemSize === undefined ) itemSize = attribute.itemSize;\n\t\tif ( itemSize !== attribute.itemSize ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( normalized === undefined ) normalized = attribute.normalized;\n\t\tif ( normalized !== attribute.normalized ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( gpuType === - 1 ) gpuType = attribute.gpuType;\n\t\tif ( gpuType !== attribute.gpuType ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.count * itemSize;\n\n\t}\n\n\tconst array = new TypedArray( arrayLength );\n\tconst result = new BufferAttribute( array, itemSize, normalized );\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst tupleOffset = offset / itemSize;\n\t\t\tfor ( let j = 0, l = attribute.count; j < l; j ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tconst value = attribute.getComponent( j, c );\n\t\t\t\t\tresult.setComponent( j + tupleOffset, c, value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tarray.set( attribute.array, offset );\n\n\t\t}\n\n\t\toffset += attribute.count * itemSize;\n\n\t}\n\n\tif ( gpuType !== undefined ) {\n\n\t\tresult.gpuType = gpuType;\n\n\t}\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferAttribute}\n * @return {BufferAttribute}\n */\nexport function deepCloneAttribute( attribute ) {\n\n\tif ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {\n\n\t\treturn deinterleaveAttribute( attribute );\n\n\t}\n\n\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\treturn new InstancedBufferAttribute().copy( attribute );\n\n\t}\n\n\treturn new BufferAttribute().copy( attribute );\n\n}\n\n/**\n * @param {Array} attributes\n * @return {Array}\n */\nfunction interleaveAttributes( attributes ) {\n\n\t// Interleaves the provided attributes into an InterleavedBuffer and returns\n\t// a set of InterleavedBufferAttributes for each attribute\n\tlet TypedArray;\n\tlet arrayLength = 0;\n\tlet stride = 0;\n\n\t// calculate the length and type of the interleavedBuffer\n\tfor ( let i = 0, l = attributes.length; i < l; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'AttributeBuffers of different types cannot be interleaved' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.array.length;\n\t\tstride += attribute.itemSize;\n\n\t}\n\n\t// Create the set of buffer attributes\n\tconst interleavedBuffer = new InterleavedBuffer( new TypedArray( arrayLength ), stride );\n\tlet offset = 0;\n\tconst res = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\tfor ( let j = 0, l = attributes.length; j < l; j ++ ) {\n\n\t\tconst attribute = attributes[ j ];\n\t\tconst itemSize = attribute.itemSize;\n\t\tconst count = attribute.count;\n\t\tconst iba = new InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, attribute.normalized );\n\t\tres.push( iba );\n\n\t\toffset += itemSize;\n\n\t\t// Move the data for each attribute into the new interleavedBuffer\n\t\t// at the appropriate offset\n\t\tfor ( let c = 0; c < count; c ++ ) {\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\tiba[ setters[ k ] ]( c, attribute[ getters[ k ] ]( c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\n// returns a new, non-interleaved version of the provided attribute\nexport function deinterleaveAttribute( attribute ) {\n\n\tconst cons = attribute.data.array.constructor;\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst normalized = attribute.normalized;\n\n\tconst array = new cons( count * itemSize );\n\tlet newAttribute;\n\tif ( attribute.isInstancedInterleavedBufferAttribute ) {\n\n\t\tnewAttribute = new InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );\n\n\t} else {\n\n\t\tnewAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t}\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tnewAttribute.setX( i, attribute.getX( i ) );\n\n\t\tif ( itemSize >= 2 ) {\n\n\t\t\tnewAttribute.setY( i, attribute.getY( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 3 ) {\n\n\t\t\tnewAttribute.setZ( i, attribute.getZ( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 4 ) {\n\n\t\t\tnewAttribute.setW( i, attribute.getW( i ) );\n\n\t\t}\n\n\t}\n\n\treturn newAttribute;\n\n}\n\n// deinterleaves all attributes on the geometry\nexport function deinterleaveGeometry( geometry ) {\n\n\tconst attributes = geometry.attributes;\n\tconst morphTargets = geometry.morphTargets;\n\tconst attrMap = new Map();\n\n\tfor ( const key in attributes ) {\n\n\t\tconst attr = attributes[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tattributes[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n\tfor ( const key in morphTargets ) {\n\n\t\tconst attr = morphTargets[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tmorphTargets[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @return {number}\n */\nfunction estimateBytesUsed( geometry ) {\n\n\t// Return the estimated memory used by this geometry in bytes\n\t// Calculate using itemSize, count, and BYTES_PER_ELEMENT to account\n\t// for InterleavedBufferAttributes.\n\tlet mem = 0;\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst attr = geometry.getAttribute( name );\n\t\tmem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n\n\t}\n\n\tconst indices = geometry.getIndex();\n\tmem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n\treturn mem;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} tolerance\n * @return {BufferGeometry}\n */\nfunction mergeVertices( geometry, tolerance = 1e-4 ) {\n\n\ttolerance = Math.max( tolerance, Number.EPSILON );\n\n\t// Generate an index buffer if the geometry doesn't have one, or optimize it\n\t// if it's already available.\n\tconst hashToIndex = {};\n\tconst indices = geometry.getIndex();\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst vertexCount = indices ? indices.count : positions.count;\n\n\t// next value for triangle indices\n\tlet nextIndex = 0;\n\n\t// attributes and new attribute arrays\n\tconst attributeNames = Object.keys( geometry.attributes );\n\tconst tmpAttributes = {};\n\tconst tmpMorphAttributes = {};\n\tconst newIndices = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\t// Initialize the arrays, allocating space conservatively. Extra\n\t// space will be trimmed in the last step.\n\tfor ( let i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n\t\tconst name = attributeNames[ i ];\n\t\tconst attr = geometry.attributes[ name ];\n\n\t\ttmpAttributes[ name ] = new attr.constructor(\n\t\t\tnew attr.array.constructor( attr.count * attr.itemSize ),\n\t\t\tattr.itemSize,\n\t\t\tattr.normalized\n\t\t);\n\n\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\tif ( morphAttributes ) {\n\n\t\t\tif ( ! tmpMorphAttributes[ name ] ) tmpMorphAttributes[ name ] = [];\n\t\t\tmorphAttributes.forEach( ( morphAttr, i ) => {\n\n\t\t\t\tconst array = new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize );\n\t\t\t\ttmpMorphAttributes[ name ][ i ] = new morphAttr.constructor( array, morphAttr.itemSize, morphAttr.normalized );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// convert the error tolerance to an amount of decimal places to truncate to\n\tconst halfTolerance = tolerance * 0.5;\n\tconst exponent = Math.log10( 1 / tolerance );\n\tconst hashMultiplier = Math.pow( 10, exponent );\n\tconst hashAdditive = halfTolerance * hashMultiplier;\n\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\tconst index = indices ? indices.getX( i ) : i;\n\n\t\t// Generate a hash for the vertex attributes at the current index 'i'\n\t\tlet hash = '';\n\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t// double tilde truncates the decimal value\n\t\t\t\thash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * hashMultiplier + hashAdditive ) },`;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add another reference to the vertex if it's already\n\t\t// used by another index\n\t\tif ( hash in hashToIndex ) {\n\n\t\t\tnewIndices.push( hashToIndex[ hash ] );\n\n\t\t} else {\n\n\t\t\t// copy data to the new index in the temporary attributes\n\t\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\t\tconst name = attributeNames[ j ];\n\t\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\t\t\tconst itemSize = attribute.itemSize;\n\t\t\t\tconst newArray = tmpAttributes[ name ];\n\t\t\t\tconst newMorphArrays = tmpMorphAttributes[ name ];\n\n\t\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t\tconst getterFunc = getters[ k ];\n\t\t\t\t\tconst setterFunc = setters[ k ];\n\t\t\t\t\tnewArray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );\n\n\t\t\t\t\tif ( morphAttributes ) {\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttributes.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tnewMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttributes[ m ][ getterFunc ]( index ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thashToIndex[ hash ] = nextIndex;\n\t\t\tnewIndices.push( nextIndex );\n\t\t\tnextIndex ++;\n\n\t\t}\n\n\t}\n\n\t// generate result BufferGeometry\n\tconst result = geometry.clone();\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst tmpAttribute = tmpAttributes[ name ];\n\n\t\tresult.setAttribute( name, new tmpAttribute.constructor(\n\t\t\ttmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),\n\t\t\ttmpAttribute.itemSize,\n\t\t\ttmpAttribute.normalized,\n\t\t) );\n\n\t\tif ( ! ( name in tmpMorphAttributes ) ) continue;\n\n\t\tfor ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {\n\n\t\t\tconst tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];\n\n\t\t\tresult.morphAttributes[ name ][ j ] = new tmpMorphAttribute.constructor(\n\t\t\t\ttmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),\n\t\t\t\ttmpMorphAttribute.itemSize,\n\t\t\t\ttmpMorphAttribute.normalized,\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tresult.setIndex( newIndices );\n\n\treturn result;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {number} drawMode\n * @return {BufferGeometry}\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tif ( drawMode === TrianglesDrawMode ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.' );\n\t\treturn geometry;\n\n\t}\n\n\tif ( drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode ) {\n\n\t\tlet index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst numberOfTriangles = index.count - 2;\n\t\tconst newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tconst newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\t\tnewGeometry.clearGroups();\n\n\t\treturn newGeometry;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:', drawMode );\n\t\treturn geometry;\n\n\t}\n\n}\n\n/**\n * Calculates the morphed attributes of a morphed/skinned BufferGeometry.\n * Helpful for Raytracing or Decals.\n * @param {Mesh | Line | Points} object An instance of Mesh, Line or Points.\n * @return {Object} An Object with original position/normal attributes and morphed ones.\n */\nfunction computeMorphedAttributes( object ) {\n\n\tconst _vA = new Vector3();\n\tconst _vB = new Vector3();\n\tconst _vC = new Vector3();\n\n\tconst _tempA = new Vector3();\n\tconst _tempB = new Vector3();\n\tconst _tempC = new Vector3();\n\n\tconst _morphA = new Vector3();\n\tconst _morphB = new Vector3();\n\tconst _morphC = new Vector3();\n\n\tfunction _calculateMorphedAttributeData(\n\t\tobject,\n\t\tattribute,\n\t\tmorphAttribute,\n\t\tmorphTargetsRelative,\n\t\ta,\n\t\tb,\n\t\tc,\n\t\tmodifiedAttributeArray\n\t) {\n\n\t\t_vA.fromBufferAttribute( attribute, a );\n\t\t_vB.fromBufferAttribute( attribute, b );\n\t\t_vC.fromBufferAttribute( attribute, c );\n\n\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\tif ( morphAttribute && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\t\t\t_morphB.set( 0, 0, 0 );\n\t\t\t_morphC.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morph = morphAttribute[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morph, a );\n\t\t\t\t_tempB.fromBufferAttribute( morph, b );\n\t\t\t\t_tempC.fromBufferAttribute( morph, c );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_vA.add( _morphA );\n\t\t\t_vB.add( _morphB );\n\t\t\t_vC.add( _morphC );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tobject.applyBoneTransform( a, _vA );\n\t\t\tobject.applyBoneTransform( b, _vB );\n\t\t\tobject.applyBoneTransform( c, _vC );\n\n\t\t}\n\n\t\tmodifiedAttributeArray[ a * 3 + 0 ] = _vA.x;\n\t\tmodifiedAttributeArray[ a * 3 + 1 ] = _vA.y;\n\t\tmodifiedAttributeArray[ a * 3 + 2 ] = _vA.z;\n\t\tmodifiedAttributeArray[ b * 3 + 0 ] = _vB.x;\n\t\tmodifiedAttributeArray[ b * 3 + 1 ] = _vB.y;\n\t\tmodifiedAttributeArray[ b * 3 + 2 ] = _vB.z;\n\t\tmodifiedAttributeArray[ c * 3 + 0 ] = _vC.x;\n\t\tmodifiedAttributeArray[ c * 3 + 1 ] = _vC.y;\n\t\tmodifiedAttributeArray[ c * 3 + 2 ] = _vC.z;\n\n\t}\n\n\tconst geometry = object.geometry;\n\tconst material = object.material;\n\n\tlet a, b, c;\n\tconst index = geometry.index;\n\tconst positionAttribute = geometry.attributes.position;\n\tconst morphPosition = geometry.morphAttributes.position;\n\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\tconst normalAttribute = geometry.attributes.normal;\n\tconst morphNormal = geometry.morphAttributes.position;\n\n\tconst groups = geometry.groups;\n\tconst drawRange = geometry.drawRange;\n\tlet i, j, il, jl;\n\tlet group;\n\tlet start, end;\n\n\tconst modifiedPosition = new Float32Array( positionAttribute.count * positionAttribute.itemSize );\n\tconst modifiedNormal = new Float32Array( normalAttribute.count * normalAttribute.itemSize );\n\n\tif ( index !== null ) {\n\n\t\t// indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = index.getX( j );\n\t\t\t\t\tb = index.getX( j + 1 );\n\t\t\t\t\tc = index.getX( j + 2 );\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = index.getX( i );\n\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = j;\n\t\t\t\t\tb = j + 1;\n\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = i;\n\t\t\t\tb = i + 1;\n\t\t\t\tc = i + 2;\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst morphedPositionAttribute = new Float32BufferAttribute( modifiedPosition, 3 );\n\tconst morphedNormalAttribute = new Float32BufferAttribute( modifiedNormal, 3 );\n\n\treturn {\n\n\t\tpositionAttribute: positionAttribute,\n\t\tnormalAttribute: normalAttribute,\n\t\tmorphedPositionAttribute: morphedPositionAttribute,\n\t\tmorphedNormalAttribute: morphedNormalAttribute\n\n\t};\n\n}\n\nfunction mergeGroups( geometry ) {\n\n\tif ( geometry.groups.length === 0 ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge.' );\n\t\treturn geometry;\n\n\t}\n\n\tlet groups = geometry.groups;\n\n\t// sort groups by material index\n\n\tgroups = groups.sort( ( a, b ) => {\n\n\t\tif ( a.materialIndex !== b.materialIndex ) return a.materialIndex - b.materialIndex;\n\n\t\treturn a.start - b.start;\n\n\t} );\n\n\t// create index for non-indexed geometries\n\n\tif ( geometry.getIndex() === null ) {\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst indices = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\tindices.push( i, i + 1, i + 2 );\n\n\t\t}\n\n\t\tgeometry.setIndex( indices );\n\n\t}\n\n\t// sort index\n\n\tconst index = geometry.getIndex();\n\n\tconst newIndices = [];\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst groupStart = group.start;\n\t\tconst groupLength = groupStart + group.count;\n\n\t\tfor ( let j = groupStart; j < groupLength; j ++ ) {\n\n\t\t\tnewIndices.push( index.getX( j ) );\n\n\t\t}\n\n\t}\n\n\tgeometry.dispose(); // Required to force buffer recreation\n\tgeometry.setIndex( newIndices );\n\n\t// update groups indices\n\n\tlet start = 0;\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tgroup.start = start;\n\t\tstart += group.count;\n\n\t}\n\n\t// merge groups\n\n\tlet currentGroup = groups[ 0 ];\n\n\tgeometry.groups = [ currentGroup ];\n\n\tfor ( let i = 1; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tif ( currentGroup.materialIndex === group.materialIndex ) {\n\n\t\t\tcurrentGroup.count += group.count;\n\n\t\t} else {\n\n\t\t\tcurrentGroup = group;\n\t\t\tgeometry.groups.push( currentGroup );\n\n\t\t}\n\n\t}\n\n\treturn geometry;\n\n}\n\n\n/**\n * Modifies the supplied geometry if it is non-indexed, otherwise creates a new,\n * non-indexed geometry. Returns the geometry with smooth normals everywhere except\n * faces that meet at an angle greater than the crease angle.\n *\n * @param {BufferGeometry} geometry\n * @param {number} [creaseAngle]\n * @return {BufferGeometry}\n */\nfunction toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {\n\n\tconst creaseDot = Math.cos( creaseAngle );\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\n\t// reusable vectors\n\tconst verts = [ new Vector3(), new Vector3(), new Vector3() ];\n\tconst tempVec1 = new Vector3();\n\tconst tempVec2 = new Vector3();\n\tconst tempNorm = new Vector3();\n\tconst tempNorm2 = new Vector3();\n\n\t// hashes a vector\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\t\treturn `${x},${y},${z}`;\n\n\t}\n\n\t// BufferGeometry.toNonIndexed() warns if the geometry is non-indexed\n\t// and returns the original geometry\n\tconst resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\tconst posAttr = resultGeometry.attributes.position;\n\tconst vertexMap = {};\n\n\t// find all the normals shared by commonly located vertices\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\t// add the normal to the map for all vertices\n\t\tconst normal = new Vector3().crossVectors( tempVec1, tempVec2 ).normalize();\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tif ( ! ( hash in vertexMap ) ) {\n\n\t\t\t\tvertexMap[ hash ] = [];\n\n\t\t\t}\n\n\t\t\tvertexMap[ hash ].push( normal );\n\n\t\t}\n\n\t}\n\n\t// average normals from all vertices that share a common location if they are within the\n\t// provided crease threshold\n\tconst normalArray = new Float32Array( posAttr.count * 3 );\n\tconst normAttr = new BufferAttribute( normalArray, 3, false );\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\t// get the face normal for this vertex\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\ttempNorm.crossVectors( tempVec1, tempVec2 ).normalize();\n\n\t\t// average all normals that meet the threshold and set the normal value\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tconst otherNormals = vertexMap[ hash ];\n\t\t\ttempNorm2.set( 0, 0, 0 );\n\n\t\t\tfor ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {\n\n\t\t\t\tconst otherNorm = otherNormals[ k ];\n\t\t\t\tif ( tempNorm.dot( otherNorm ) > creaseDot ) {\n\n\t\t\t\t\ttempNorm2.add( otherNorm );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttempNorm2.normalize();\n\t\t\tnormAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );\n\n\t\t}\n\n\t}\n\n\tresultGeometry.setAttribute( 'normal', normAttr );\n\treturn resultGeometry;\n\n}\n\nexport {\n\tcomputeMikkTSpaceTangents,\n\tmergeGeometries,\n\tmergeAttributes,\n\tinterleaveAttributes,\n\testimateBytesUsed,\n\tmergeVertices,\n\ttoTrianglesDrawMode,\n\tcomputeMorphedAttributes,\n\tmergeGroups,\n\ttoCreasedNormals\n};\n","import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tColorManagement,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInstancedMesh,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace,\n\tInstancedBufferAttribute\n} from 'three';\nimport { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';\n\nclass GLTFLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsDispersionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureAVIFExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsBumpExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( parser );\n\n\t\t} );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\t// If a base path is set, resources will be relative paths from that plus the relative path of the gltf file\n\t\t\t// Example path = 'https://my-cnd-server.com/', url = 'assets/models/model.gltf'\n\t\t\t// resourcePath = 'https://my-cnd-server.com/assets/models/'\n\t\t\t// referenced resource 'model.bin' will be loaded from 'https://my-cnd-server.com/assets/models/model.bin'\n\t\t\t// referenced resource '../textures/texture.png' will be loaded from 'https://my-cnd-server.com/assets/textures/texture.png'\n\t\t\tconst relativeUrl = LoaderUtils.extractUrlBase( url );\n\t\t\tresourcePath = LoaderUtils.resolveURL( relativeUrl, this.path );\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\tthis.manager.itemStart( url );\n\n\t\tconst _onError = function ( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t};\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, _onError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\t_onError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, _onError );\n\n\t}\n\n\tsetDRACOLoader( dracoLoader ) {\n\n\t\tthis.dracoLoader = dracoLoader;\n\t\treturn this;\n\n\t}\n\n\tsetDDSLoader() {\n\n\t\tthrow new Error(\n\n\t\t\t'THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".'\n\n\t\t);\n\n\t}\n\n\tsetKTX2Loader( ktx2Loader ) {\n\n\t\tthis.ktx2Loader = ktx2Loader;\n\t\treturn this;\n\n\t}\n\n\tsetMeshoptDecoder( meshoptDecoder ) {\n\n\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\treturn this;\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tparse( data, path, onLoad, onError ) {\n\n\t\tlet json;\n\t\tconst extensions = {};\n\t\tconst plugins = {};\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tif ( typeof data === 'string' ) {\n\n\t\t\tjson = JSON.parse( data );\n\n\t\t} else if ( data instanceof ArrayBuffer ) {\n\n\t\t\tconst magic = textDecoder.decode( new Uint8Array( data, 0, 4 ) );\n\n\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tjson = JSON.parse( extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content );\n\n\t\t\t} else {\n\n\t\t\t\tjson = JSON.parse( textDecoder.decode( data ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tjson = data;\n\n\t\t}\n\n\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst parser = new GLTFParser( json, {\n\n\t\t\tpath: path || this.resourcePath || '',\n\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\trequestHeader: this.requestHeader,\n\t\t\tmanager: this.manager,\n\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t} );\n\n\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\tfor ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\tconst plugin = this.pluginCallbacks[ i ]( parser );\n\n\t\t\tif ( ! plugin.name ) console.error( 'THREE.GLTFLoader: Invalid plugin found: missing name' );\n\n\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t// Remove this workaround if we move all the existing\n\t\t\t// extension handlers to plugin system\n\t\t\textensions[ plugin.name ] = true;\n\n\t\t}\n\n\t\tif ( json.extensionsUsed ) {\n\n\t\t\tfor ( let i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\tconst extensionName = json.extensionsUsed[ i ];\n\t\t\t\tconst extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tparser.setExtensions( extensions );\n\t\tparser.setPlugins( plugins );\n\t\tparser.parse( onLoad, onError );\n\n\t}\n\n\tparseAsync( data, path ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( data, path, resolve, reject );\n\n\t\t} );\n\n\t}\n\n}\n\n/* GLTFREGISTRY */\n\nfunction GLTFRegistry() {\n\n\tlet objects = {};\n\n\treturn\t{\n\n\t\tget: function ( key ) {\n\n\t\t\treturn objects[ key ];\n\n\t\t},\n\n\t\tadd: function ( key, object ) {\n\n\t\t\tobjects[ key ] = object;\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete objects[ key ];\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\tobjects = {};\n\n\t\t}\n\n\t};\n\n}\n\n/*********************************/\n/********** EXTENSIONS ***********/\n/*********************************/\n\nconst EXTENSIONS = {\n\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\tKHR_MATERIALS_DISPERSION: 'KHR_materials_dispersion',\n\tKHR_MATERIALS_IOR: 'KHR_materials_ior',\n\tKHR_MATERIALS_SHEEN: 'KHR_materials_sheen',\n\tKHR_MATERIALS_SPECULAR: 'KHR_materials_specular',\n\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\tKHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',\n\tKHR_MATERIALS_ANISOTROPY: 'KHR_materials_anisotropy',\n\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\tKHR_MATERIALS_VOLUME: 'KHR_materials_volume',\n\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\tKHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',\n\tEXT_MATERIALS_BUMP: 'EXT_materials_bump',\n\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\tEXT_TEXTURE_AVIF: 'EXT_texture_avif',\n\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\tEXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'\n};\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightsExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\t_markDefs() {\n\n\t\tconst parser = this.parser;\n\t\tconst nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_loadLight( lightIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst cacheKey = 'light:' + lightIndex;\n\t\tlet dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tconst json = parser.json;\n\t\tconst extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tconst lightDefs = extensions.lights || [];\n\t\tconst lightDef = lightDefs[ lightIndex ];\n\t\tlet lightNode;\n\n\t\tconst color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.setRGB( lightDef.color[ 0 ], lightDef.color[ 1 ], lightDef.color[ 2 ], LinearSRGBColorSpace );\n\n\t\tconst range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tlightNode.decay = 2;\n\n\t\tassignExtrasToUserData( lightNode, lightDef );\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t}\n\n\tgetDependency( type, index ) {\n\n\t\tif ( type !== 'light' ) return;\n\n\t\treturn this._loadLight( index );\n\n\t}\n\n\tcreateNodeAttachment( nodeIndex ) {\n\n\t\tconst self = this;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\t\tconst lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tconst lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn MeshBasicMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;\n\n\t\tif ( emissiveStrength !== undefined ) {\n\n\t\t\tmaterialParams.emissiveIntensity = emissiveStrength;\n\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_dispersion\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_DISPERSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.dispersion = extension.dispersion !== undefined ? extension.dispersion : 0;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.iridescenceFactor !== undefined ) {\n\n\t\t\tmaterialParams.iridescence = extension.iridescenceFactor;\n\n\t\t}\n\n\t\tif ( extension.iridescenceTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );\n\n\t\t}\n\n\t\tif ( extension.iridescenceIor !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceIOR = extension.iridescenceIor;\n\n\t\t}\n\n\t\tif ( materialParams.iridescenceThicknessRange === undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange = [ 100, 400 ];\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMinimum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 0 ] = extension.iridescenceThicknessMinimum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMaximum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 1 ] = extension.iridescenceThicknessMaximum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.sheenColor = new Color( 0, 0, 0 );\n\t\tmaterialParams.sheenRoughness = 0;\n\t\tmaterialParams.sheen = 1;\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.sheenColorFactor !== undefined ) {\n\n\t\t\tconst colorFactor = extension.sheenColorFactor;\n\t\t\tmaterialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenRoughness = extension.sheenRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.sheenColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;\n\n\t\tif ( extension.thicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );\n\n\t\t}\n\n\t\tmaterialParams.attenuationDistance = extension.attenuationDistance || Infinity;\n\n\t\tconst colorArray = extension.attenuationColor || [ 1, 1, 1 ];\n\t\tmaterialParams.attenuationColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IOR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;\n\n\t\tif ( extension.specularTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );\n\n\t\t}\n\n\t\tconst colorArray = extension.specularColorFactor || [ 1, 1, 1 ];\n\t\tmaterialParams.specularColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\tif ( extension.specularColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n\n/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_MATERIALS_BUMP;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;\n\n\t\tif ( extension.bumpTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials anisotropy Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.anisotropyStrength !== undefined ) {\n\n\t\t\tmaterialParams.anisotropy = extension.anisotropyStrength;\n\n\t\t}\n\n\t\tif ( extension.anisotropyRotation !== undefined ) {\n\n\t\t\tmaterialParams.anisotropyRotation = extension.anisotropyRotation;\n\n\t\t}\n\n\t\tif ( extension.anisotropyTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * BasisU Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n */\nclass GLTFTextureBasisUExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ this.name ];\n\t\tconst loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * WebP Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n */\nclass GLTFTextureWebPExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image. Support for lossy images doesn't guarantee support for all\n\t\t\t\t// WebP images, unfortunately.\n\t\t\t\timage.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA';\n\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * AVIF Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif\n */\nclass GLTFTextureAVIFExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_AVIF;\n\t\tthis.isSupported = null;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.detectSupport().then( function ( isSupported ) {\n\n\t\t\tif ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: AVIF required by asset but unsupported.' );\n\n\t\t\t}\n\n\t\t\t// Fall back to PNG or JPEG.\n\t\t\treturn parser.loadTexture( textureIndex );\n\n\t\t} );\n\n\t}\n\n\tdetectSupport() {\n\n\t\tif ( ! this.isSupported ) {\n\n\t\t\tthis.isSupported = new Promise( function ( resolve ) {\n\n\t\t\t\tconst image = new Image();\n\n\t\t\t\t// Lossy test image.\n\t\t\t\timage.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=';\n\t\t\t\timage.onload = image.onerror = function () {\n\n\t\t\t\t\tresolve( image.height === 1 );\n\n\t\t\t\t};\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn this.isSupported;\n\n\t}\n\n}\n\n/**\n * meshopt BufferView Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n */\nclass GLTFMeshoptCompression {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tloadBufferView( index ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tconst extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tconst buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tconst decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn buffer.then( function ( res ) {\n\n\t\t\t\tconst byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tconst byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tconst count = extensionDef.count;\n\t\t\t\tconst stride = extensionDef.byteStride;\n\n\t\t\t\tconst source = new Uint8Array( res, byteOffset, byteLength );\n\n\t\t\t\tif ( decoder.decodeGltfBufferAsync ) {\n\n\t\t\t\t\treturn decoder.decodeGltfBufferAsync( count, stride, source, extensionDef.mode, extensionDef.filter ).then( function ( res ) {\n\n\t\t\t\t\t\treturn res.buffer;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync\n\t\t\t\t\treturn decoder.ready.then( function () {\n\n\t\t\t\t\t\tconst result = new ArrayBuffer( count * stride );\n\t\t\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n *\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n\t\tthis.parser = parser;\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( ! nodeDef.extensions || ! nodeDef.extensions[ this.name ] ||\n\t\t\tnodeDef.mesh === undefined ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst meshDef = json.meshes[ nodeDef.mesh ];\n\n\t\t// No Points or Lines + Instancing support yet\n\n\t\tfor ( const primitive of meshDef.primitives ) {\n\n\t\t\tif ( primitive.mode !== WEBGL_CONSTANTS.TRIANGLES &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN &&\n\t\t\t\t primitive.mode !== undefined ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extensionDef = nodeDef.extensions[ this.name ];\n\t\tconst attributesDef = extensionDef.attributes;\n\n\t\t// @TODO: Can we support InstancedMesh + SkinnedMesh?\n\n\t\tconst pending = [];\n\t\tconst attributes = {};\n\n\t\tfor ( const key in attributesDef ) {\n\n\t\t\tpending.push( this.parser.getDependency( 'accessor', attributesDef[ key ] ).then( accessor => {\n\n\t\t\t\tattributes[ key ] = accessor;\n\t\t\t\treturn attributes[ key ];\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tif ( pending.length < 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tpending.push( this.parser.createNodeMesh( nodeIndex ) );\n\n\t\treturn Promise.all( pending ).then( results => {\n\n\t\t\tconst nodeObject = results.pop();\n\t\t\tconst meshes = nodeObject.isGroup ? nodeObject.children : [ nodeObject ];\n\t\t\tconst count = results[ 0 ].count; // All attribute counts should be same\n\t\t\tconst instancedMeshes = [];\n\n\t\t\tfor ( const mesh of meshes ) {\n\n\t\t\t\t// Temporal variables\n\t\t\t\tconst m = new Matrix4();\n\t\t\t\tconst p = new Vector3();\n\t\t\t\tconst q = new Quaternion();\n\t\t\t\tconst s = new Vector3( 1, 1, 1 );\n\n\t\t\t\tconst instancedMesh = new InstancedMesh( mesh.geometry, mesh.material, count );\n\n\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\tif ( attributes.TRANSLATION ) {\n\n\t\t\t\t\t\tp.fromBufferAttribute( attributes.TRANSLATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.ROTATION ) {\n\n\t\t\t\t\t\tq.fromBufferAttribute( attributes.ROTATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.SCALE ) {\n\n\t\t\t\t\t\ts.fromBufferAttribute( attributes.SCALE, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinstancedMesh.setMatrixAt( i, m.compose( p, q, s ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Add instance attributes to the geometry, excluding TRS.\n\t\t\t\tfor ( const attributeName in attributes ) {\n\n\t\t\t\t\tif ( attributeName === '_COLOR_0' ) {\n\n\t\t\t\t\t\tconst attr = attributes[ attributeName ];\n\t\t\t\t\t\tinstancedMesh.instanceColor = new InstancedBufferAttribute( attr.array, attr.itemSize, attr.normalized );\n\n\t\t\t\t\t} else if ( attributeName !== 'TRANSLATION' &&\n\t\t\t\t\t\t attributeName !== 'ROTATION' &&\n\t\t\t\t\t\t attributeName !== 'SCALE' ) {\n\n\t\t\t\t\t\tmesh.geometry.setAttribute( attributeName, attributes[ attributeName ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Just in case\n\t\t\t\tObject3D.prototype.copy.call( instancedMesh, mesh );\n\n\t\t\t\tthis.parser.assignFinalMaterial( instancedMesh );\n\n\t\t\t\tinstancedMeshes.push( instancedMesh );\n\n\t\t\t}\n\n\t\t\tif ( nodeObject.isGroup ) {\n\n\t\t\t\tnodeObject.clear();\n\n\t\t\t\tnodeObject.add( ... instancedMeshes );\n\n\t\t\t\treturn nodeObject;\n\n\t\t\t}\n\n\t\t\treturn instancedMeshes[ 0 ];\n\n\t\t} );\n\n\t}\n\n}\n\n/* BINARY EXTENSION */\nconst BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\nclass GLTFBinaryExtension {\n\n\tconstructor( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tconst headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tthis.header = {\n\t\t\tmagic: textDecoder.decode( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tconst chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n\t\tconst chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tlet chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkContentsLength ) {\n\n\t\t\tconst chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tconst chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tconst contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = textDecoder.decode( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tconst byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * DRACO Mesh Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n */\nclass GLTFDracoMeshCompressionExtension {\n\n\tconstructor( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tdecodePrimitive( primitive, parser ) {\n\n\t\tconst json = this.json;\n\t\tconst dracoLoader = this.dracoLoader;\n\t\tconst bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tconst gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tconst threeAttributeMap = {};\n\t\tconst attributeNormalizedMap = {};\n\t\tconst attributeTypeMap = {};\n\n\t\tfor ( const attributeName in gltfAttributeMap ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( const attributeName in primitive.attributes ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tconst accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tconst componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType.name;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( const attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tconst normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Texture Transform Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n */\nclass GLTFTextureTransformExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\textendTexture( texture, transform ) {\n\n\t\tif ( ( transform.texCoord === undefined || transform.texCoord === texture.channel )\n\t\t\t&& transform.offset === undefined\n\t\t\t&& transform.rotation === undefined\n\t\t\t&& transform.scale === undefined ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21819.\n\t\t\treturn texture;\n\n\t\t}\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\ttexture.channel = transform.texCoord;\n\n\t\t}\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Mesh Quantization Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n */\nclass GLTFMeshQuantizationExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n}\n\n/*********************************/\n/********** INTERPOLATION ********/\n/*********************************/\n\n// Spline Interpolation\n// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\nclass GLTFCubicSplineInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( let i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\n\t\tconst stride2 = stride * 2;\n\t\tconst stride3 = stride * 3;\n\n\t\tconst td = t1 - t0;\n\n\t\tconst p = ( t - t0 ) / td;\n\t\tconst pp = p * p;\n\t\tconst ppp = pp * p;\n\n\t\tconst offset1 = i1 * stride3;\n\t\tconst offset0 = offset1 - stride3;\n\n\t\tconst s2 = - 2 * ppp + 3 * pp;\n\t\tconst s3 = ppp - pp;\n\t\tconst s0 = 1 - s2;\n\t\tconst s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( let i = 0; i !== stride; i ++ ) {\n\n\t\t\tconst p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tconst m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tconst p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tconst m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nconst _q = new Quaternion();\n\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = super.interpolate_( i1, t0, t, t1 );\n\n\t\t_q.fromArray( result ).normalize().toArray( result );\n\n\t\treturn result;\n\n\t}\n\n}\n\n\n/*********************************/\n/********** INTERNALS ************/\n/*********************************/\n\n/* CONSTANTS */\n\nconst WEBGL_CONSTANTS = {\n\tFLOAT: 5126,\n\t//FLOAT_MAT2: 35674,\n\tFLOAT_MAT3: 35675,\n\tFLOAT_MAT4: 35676,\n\tFLOAT_VEC2: 35664,\n\tFLOAT_VEC3: 35665,\n\tFLOAT_VEC4: 35666,\n\tLINEAR: 9729,\n\tREPEAT: 10497,\n\tSAMPLER_2D: 35678,\n\tPOINTS: 0,\n\tLINES: 1,\n\tLINE_LOOP: 2,\n\tLINE_STRIP: 3,\n\tTRIANGLES: 4,\n\tTRIANGLE_STRIP: 5,\n\tTRIANGLE_FAN: 6,\n\tUNSIGNED_BYTE: 5121,\n\tUNSIGNED_SHORT: 5123\n};\n\nconst WEBGL_COMPONENT_TYPES = {\n\t5120: Int8Array,\n\t5121: Uint8Array,\n\t5122: Int16Array,\n\t5123: Uint16Array,\n\t5125: Uint32Array,\n\t5126: Float32Array\n};\n\nconst WEBGL_FILTERS = {\n\t9728: NearestFilter,\n\t9729: LinearFilter,\n\t9984: NearestMipmapNearestFilter,\n\t9985: LinearMipmapNearestFilter,\n\t9986: NearestMipmapLinearFilter,\n\t9987: LinearMipmapLinearFilter\n};\n\nconst WEBGL_WRAPPINGS = {\n\t33071: ClampToEdgeWrapping,\n\t33648: MirroredRepeatWrapping,\n\t10497: RepeatWrapping\n};\n\nconst WEBGL_TYPE_SIZES = {\n\t'SCALAR': 1,\n\t'VEC2': 2,\n\t'VEC3': 3,\n\t'VEC4': 4,\n\t'MAT2': 4,\n\t'MAT3': 9,\n\t'MAT4': 16\n};\n\nconst ATTRIBUTES = {\n\tPOSITION: 'position',\n\tNORMAL: 'normal',\n\tTANGENT: 'tangent',\n\tTEXCOORD_0: 'uv',\n\tTEXCOORD_1: 'uv1',\n\tTEXCOORD_2: 'uv2',\n\tTEXCOORD_3: 'uv3',\n\tCOLOR_0: 'color',\n\tWEIGHTS_0: 'skinWeight',\n\tJOINTS_0: 'skinIndex',\n};\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\ttranslation: 'position',\n\trotation: 'quaternion',\n\tweights: 'morphTargetInfluences'\n};\n\nconst INTERPOLATION = {\n\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t // keyframe track will be initialized with a default interpolation type, then modified.\n\tLINEAR: InterpolateLinear,\n\tSTEP: InterpolateDiscrete\n};\n\nconst ALPHA_MODES = {\n\tOPAQUE: 'OPAQUE',\n\tMASK: 'MASK',\n\tBLEND: 'BLEND'\n};\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n */\nfunction createDefaultMaterial( cache ) {\n\n\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: FrontSide\n\t\t} );\n\n\t}\n\n\treturn cache[ 'DefaultMaterial' ];\n\n}\n\nfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t// Add unknown glTF extensions to an object's userData.\n\n\tfor ( const name in objectDef.extensions ) {\n\n\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * @param {Object3D|Material|BufferGeometry} object\n * @param {GLTF.definition} gltfDef\n */\nfunction assignExtrasToUserData( object, gltfDef ) {\n\n\tif ( gltfDef.extras !== undefined ) {\n\n\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n *\n * @param {BufferGeometry} geometry\n * @param {Array} targets\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addMorphTargets( geometry, targets, parser ) {\n\n\tlet hasMorphPosition = false;\n\tlet hasMorphNormal = false;\n\tlet hasMorphColor = false;\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\t\tif ( target.COLOR_0 !== undefined ) hasMorphColor = true;\n\n\t\tif ( hasMorphPosition && hasMorphNormal && hasMorphColor ) break;\n\n\t}\n\n\tif ( ! hasMorphPosition && ! hasMorphNormal && ! hasMorphColor ) return Promise.resolve( geometry );\n\n\tconst pendingPositionAccessors = [];\n\tconst pendingNormalAccessors = [];\n\tconst pendingColorAccessors = [];\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( hasMorphPosition ) {\n\n\t\t\tconst pendingAccessor = target.POSITION !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t: geometry.attributes.position;\n\n\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphNormal ) {\n\n\t\t\tconst pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t: geometry.attributes.normal;\n\n\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphColor ) {\n\n\t\t\tconst pendingAccessor = target.COLOR_0 !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.COLOR_0 )\n\t\t\t\t: geometry.attributes.color;\n\n\t\t\tpendingColorAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t}\n\n\treturn Promise.all( [\n\t\tPromise.all( pendingPositionAccessors ),\n\t\tPromise.all( pendingNormalAccessors ),\n\t\tPromise.all( pendingColorAccessors )\n\t] ).then( function ( accessors ) {\n\n\t\tconst morphPositions = accessors[ 0 ];\n\t\tconst morphNormals = accessors[ 1 ];\n\t\tconst morphColors = accessors[ 2 ];\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\tif ( hasMorphColor ) geometry.morphAttributes.color = morphColors;\n\t\tgeometry.morphTargetsRelative = true;\n\n\t\treturn geometry;\n\n\t} );\n\n}\n\n/**\n * @param {Mesh} mesh\n * @param {GLTF.Mesh} meshDef\n */\nfunction updateMorphTargets( mesh, meshDef ) {\n\n\tmesh.updateMorphTargets();\n\n\tif ( meshDef.weights !== undefined ) {\n\n\t\tfor ( let i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t}\n\n\t}\n\n\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\tconst targetNames = meshDef.extras.targetNames;\n\n\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\tfor ( let i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction createPrimitiveKey( primitiveDef ) {\n\n\tlet geometryKey;\n\n\tconst dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\n\tif ( dracoExtension ) {\n\n\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t} else {\n\n\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t}\n\n\tif ( primitiveDef.targets !== undefined ) {\n\n\t\tfor ( let i = 0, il = primitiveDef.targets.length; i < il; i ++ ) {\n\n\t\t\tgeometryKey += ':' + createAttributesKey( primitiveDef.targets[ i ] );\n\n\t\t}\n\n\t}\n\n\treturn geometryKey;\n\n}\n\nfunction createAttributesKey( attributes ) {\n\n\tlet attributesKey = '';\n\n\tconst keys = Object.keys( attributes ).sort();\n\n\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t}\n\n\treturn attributesKey;\n\n}\n\nfunction getNormalizedComponentScale( constructor ) {\n\n\t// Reference:\n\t// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n\tswitch ( constructor ) {\n\n\t\tcase Int8Array:\n\t\t\treturn 1 / 127;\n\n\t\tcase Uint8Array:\n\t\t\treturn 1 / 255;\n\n\t\tcase Int16Array:\n\t\t\treturn 1 / 32767;\n\n\t\tcase Uint16Array:\n\t\t\treturn 1 / 65535;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported normalized accessor component type.' );\n\n\t}\n\n}\n\nfunction getImageURIMimeType( uri ) {\n\n\tif ( uri.search( /\\.jpe?g($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/jpeg/ ) === 0 ) return 'image/jpeg';\n\tif ( uri.search( /\\.webp($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/webp/ ) === 0 ) return 'image/webp';\n\n\treturn 'image/png';\n\n}\n\nconst _identityMatrix = new Matrix4();\n\n/* GLTF PARSER */\n\nclass GLTFParser {\n\n\tconstructor( json = {}, options = {} ) {\n\n\t\tthis.json = json;\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options;\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Node cache\n\t\tthis.nodeCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\tthis.sourceCache = {};\n\t\tthis.textureCache = {};\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\n\t\tlet isSafari = false;\n\t\tlet safariVersion = - 1;\n\t\tlet isFirefox = false;\n\t\tlet firefoxVersion = - 1;\n\n\t\tif ( typeof navigator !== 'undefined' ) {\n\n\t\t\tconst userAgent = navigator.userAgent;\n\n\t\t\tisSafari = /^((?!chrome|android).)*safari/i.test( userAgent ) === true;\n\t\t\tconst safariMatch = userAgent.match( /Version\\/(\\d+)/ );\n\t\t\tsafariVersion = isSafari && safariMatch ? parseInt( safariMatch[ 1 ], 10 ) : - 1;\n\n\t\t\tisFirefox = userAgent.indexOf( 'Firefox' ) > - 1;\n\t\t\tfirefoxVersion = isFirefox ? userAgent.match( /Firefox\\/([0-9]+)\\./ )[ 1 ] : - 1;\n\n\t\t}\n\n\t\tif ( typeof createImageBitmap === 'undefined' || ( isSafari && safariVersion < 17 ) || ( isFirefox && firefoxVersion < 98 ) ) {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\t\tthis.textureLoader.setRequestHeader( this.options.requestHeader );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tsetExtensions( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tparse( onLoad, onError ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\t\tthis.nodeCache = {};\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( this._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.beforeRoot && ext.beforeRoot();\n\n\t\t} ) ).then( function () {\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tparser.getDependencies( 'scene' ),\n\t\t\t\tparser.getDependencies( 'animation' ),\n\t\t\t\tparser.getDependencies( 'camera' ),\n\n\t\t\t] );\n\n\t\t} ).then( function ( dependencies ) {\n\n\t\t\tconst result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\treturn Promise.all( parser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.afterRoot && ext.afterRoot( result );\n\n\t\t\t} ) ).then( function () {\n\n\t\t\t\tfor ( const scene of result.scenes ) {\n\n\t\t\t\t\tscene.updateMatrixWorld();\n\n\t\t\t\t}\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} );\n\n\t\t} ).catch( onError );\n\n\t}\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t */\n\t_markDefs() {\n\n\t\tconst nodeDefs = this.json.nodes || [];\n\t\tconst skinDefs = this.json.skins || [];\n\t\tconst meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tconst joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( let i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t */\n\t_addNodeRef( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t}\n\n\t/** Returns a reference to a shared resource, cloning it if necessary. */\n\t_getNodeRef( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tconst ref = object.clone();\n\n\t\t// Propagates mappings to the cloned object, prevents mappings on the\n\t\t// original object from being lost.\n\t\tconst updateMappings = ( original, clone ) => {\n\n\t\t\tconst mappings = this.associations.get( original );\n\t\t\tif ( mappings != null ) {\n\n\t\t\t\tthis.associations.set( clone, mappings );\n\n\t\t\t}\n\n\t\t\tfor ( const [ i, child ] of original.children.entries() ) {\n\n\t\t\t\tupdateMappings( child, clone.children[ i ] );\n\n\t\t\t}\n\n\t\t};\n\n\t\tupdateMappings( object, ref );\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t}\n\n\t_invokeOne( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t}\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise}\n\t */\n\tgetDependency( type, index ) {\n\n\t\tconst cacheKey = type + ':' + index;\n\t\tlet dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadNode && ext.loadNode( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadAnimation && ext.loadAnimation( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext != this && ext.getDependency && ext.getDependency( type, index );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( ! dependency ) {\n\n\t\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t}\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t * @param {string} type\n\t * @return {Promise>}\n\t */\n\tgetDependencies( type ) {\n\n\t\tlet dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tconst parser = this;\n\t\t\tconst defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferIndex\n\t * @return {Promise}\n\t */\n\tloadBuffer( bufferIndex ) {\n\n\t\tconst bufferDef = this.json.buffers[ bufferIndex ];\n\t\tconst loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tconst options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t * @param {number} bufferViewIndex\n\t * @return {Promise}\n\t */\n\tloadBufferView( bufferViewIndex ) {\n\n\t\tconst bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tconst byteLength = bufferViewDef.byteLength || 0;\n\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t * @param {number} accessorIndex\n\t * @return {Promise}\n\t */\n\tloadAccessor( accessorIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\t\t\tconst normalized = accessorDef.normalized === true;\n\n\t\t\tconst array = new TypedArray( accessorDef.count * itemSize );\n\t\t\treturn Promise.resolve( new BufferAttribute( array, itemSize, normalized ) );\n\n\t\t}\n\n\t\tconst pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tconst bufferView = bufferViews[ 0 ];\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tconst elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tconst itemBytes = elementBytes * itemSize;\n\t\t\tconst byteOffset = accessorDef.byteOffset || 0;\n\t\t\tconst byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tconst normalized = accessorDef.normalized === true;\n\t\t\tlet array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tconst ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tconst ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tlet ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tconst itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tconst TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tconst byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tconst byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tconst sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tconst sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t * @param {number} textureIndex\n\t * @return {Promise}\n\t */\n\tloadTexture( textureIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceIndex = textureDef.source;\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tlet loader = this.textureLoader;\n\n\t\tif ( sourceDef.uri ) {\n\n\t\t\tconst handler = options.manager.getHandler( sourceDef.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, sourceIndex, loader );\n\n\t}\n\n\tloadTextureImage( textureIndex, sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst cacheKey = ( sourceDef.uri || sourceDef.bufferView ) + ':' + textureDef.sampler;\n\n\t\tif ( this.textureCache[ cacheKey ] ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21559.\n\t\t\treturn this.textureCache[ cacheKey ];\n\n\t\t}\n\n\t\tconst promise = this.loadImageSource( sourceIndex, loader ).then( function ( texture ) {\n\n\t\t\ttexture.flipY = false;\n\n\t\t\ttexture.name = textureDef.name || sourceDef.name || '';\n\n\t\t\tif ( texture.name === '' && typeof sourceDef.uri === 'string' && sourceDef.uri.startsWith( 'data:image/' ) === false ) {\n\n\t\t\t\ttexture.name = sourceDef.uri;\n\n\t\t\t}\n\n\t\t\tconst samplers = json.samplers || {};\n\t\t\tconst sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\n\t\t\tparser.associations.set( texture, { textures: textureIndex } );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function () {\n\n\t\t\treturn null;\n\n\t\t} );\n\n\t\tthis.textureCache[ cacheKey ] = promise;\n\n\t\treturn promise;\n\n\t}\n\n\tloadImageSource( sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( this.sourceCache[ sourceIndex ] !== undefined ) {\n\n\t\t\treturn this.sourceCache[ sourceIndex ].then( ( texture ) => texture.clone() );\n\n\t\t}\n\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst URL = self.URL || self.webkitURL;\n\n\t\tlet sourceURI = sourceDef.uri || '';\n\t\tlet isObjectURL = false;\n\n\t\tif ( sourceDef.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tconst blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t} else if ( sourceDef.uri === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );\n\n\t\t}\n\n\t\tconst promise = Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tlet onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tconst texture = new Texture( imageBitmap );\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tresolve( texture );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( texture, sourceDef );\n\n\t\t\ttexture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType( sourceDef.uri );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function ( error ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader: Couldn\\'t load texture', sourceURI );\n\t\t\tthrow error;\n\n\t\t} );\n\n\t\tthis.sourceCache[ sourceIndex ] = promise;\n\t\treturn promise;\n\n\t}\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @return {Promise}\n\t */\n\tassignTexture( materialParams, mapName, mapDef, colorSpace ) {\n\n\t\tconst parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\tif ( ! texture ) return null;\n\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord > 0 ) {\n\n\t\t\t\ttexture = texture.clone();\n\t\t\t\ttexture.channel = mapDef.texCoord;\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tconst transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tconst gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = colorSpace;\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accommodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t * @param {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tassignFinalMaterial( mesh ) {\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet material = mesh.material;\n\n\t\tconst useDerivativeTangents = geometry.attributes.tangent === undefined;\n\t\tconst useVertexColors = geometry.attributes.color !== undefined;\n\t\tconst useFlatShading = geometry.attributes.normal === undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tconst cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tlet pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tconst cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tlet lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\tlineMaterial.map = material.map;\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useDerivativeTangents || useVertexColors || useFlatShading ) {\n\n\t\t\tlet cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( useDerivativeTangents ) cacheKey += 'derivative-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\n\t\t\tlet cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\n\t\t\t\tif ( useDerivativeTangents ) {\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\t\tif ( cachedMaterial.normalScale ) cachedMaterial.normalScale.y *= - 1;\n\t\t\t\t\tif ( cachedMaterial.clearcoatNormalScale ) cachedMaterial.clearcoatNormalScale.y *= - 1;\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t}\n\n\tgetMaterialType( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t * @param {number} materialIndex\n\t * @return {Promise}\n\t */\n\tloadMaterial( materialIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst materialDef = json.materials[ materialIndex ];\n\n\t\tlet materialType;\n\t\tconst materialParams = {};\n\t\tconst materialExtensions = materialDef.extensions || {};\n\n\t\tconst pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tconst kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tconst alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = materialDef.normalTexture.scale;\n\n\t\t\t\tmaterialParams.normalScale.set( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tconst emissiveFactor = materialDef.emissiveFactor;\n\t\t\tmaterialParams.emissive = new Color().setRGB( emissiveFactor[ 0 ], emissiveFactor[ 1 ], emissiveFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tconst material = new materialType( materialParams );\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { materials: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t}\n\n\t/** When Object3D instances are targeted by animation, they need unique names. */\n\tcreateUniqueName( originalName ) {\n\n\t\tconst sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tif ( sanitizedName in this.nodeNamesUsed ) {\n\n\t\t\treturn sanitizedName + '_' + ( ++ this.nodeNamesUsed[ sanitizedName ] );\n\n\t\t} else {\n\n\t\t\tthis.nodeNamesUsed[ sanitizedName ] = 0;\n\n\t\t\treturn sanitizedName;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @param {Array} primitives\n\t * @return {Promise>}\n\t */\n\tloadGeometries( primitives ) {\n\n\t\tconst parser = this;\n\t\tconst extensions = this.extensions;\n\t\tconst cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = primitives[ i ];\n\t\t\tconst cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tconst cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tlet geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t * @param {number} meshIndex\n\t * @return {Promise}\n\t */\n\tloadMesh( meshIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\tconst meshDef = json.meshes[ meshIndex ];\n\t\tconst primitives = meshDef.primitives;\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst materials = results.slice( 0, results.length - 1 );\n\t\t\tconst geometries = results[ results.length - 1 ];\n\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tconst geometry = geometries[ i ];\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true ) {\n\n\t\t\t\t\t\t// normalize skin weights to fix malformed assets (see #15319)\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tparser.associations.set( meshes[ i ], {\n\t\t\t\t\tmeshes: meshIndex,\n\t\t\t\t\tprimitives: i\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, meshes[ 0 ], meshDef );\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\n\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, group, meshDef );\n\n\t\t\tparser.associations.set( group, { meshes: meshIndex } );\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t * @param {number} cameraIndex\n\t * @return {Promise}\n\t */\n\tloadCamera( cameraIndex ) {\n\n\t\tlet camera;\n\t\tconst cameraDef = this.json.cameras[ cameraIndex ];\n\t\tconst params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t * @param {number} skinIndex\n\t * @return {Promise}\n\t */\n\tloadSkin( skinIndex ) {\n\n\t\tconst skinDef = this.json.skins[ skinIndex ];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = skinDef.joints.length; i < il; i ++ ) {\n\n\t\t\tpending.push( this._loadNodeShallow( skinDef.joints[ i ] ) );\n\n\t\t}\n\n\t\tif ( skinDef.inverseBindMatrices !== undefined ) {\n\n\t\t\tpending.push( this.getDependency( 'accessor', skinDef.inverseBindMatrices ) );\n\n\t\t} else {\n\n\t\t\tpending.push( null );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst inverseBindMatrices = results.pop();\n\t\t\tconst jointNodes = results;\n\n\t\t\t// Note that bones (joint nodes) may or may not be in the\n\t\t\t// scene graph at this time.\n\n\t\t\tconst bones = [];\n\t\t\tconst boneInverses = [];\n\n\t\t\tfor ( let i = 0, il = jointNodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst jointNode = jointNodes[ i ];\n\n\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\tconst mat = new Matrix4();\n\n\t\t\t\t\tif ( inverseBindMatrices !== null ) {\n\n\t\t\t\t\t\tmat.fromArray( inverseBindMatrices.array, i * 16 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinDef.joints[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t * @param {number} animationIndex\n\t * @return {Promise}\n\t */\n\tloadAnimation( animationIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst animationDef = json.animations[ animationIndex ];\n\t\tconst animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\tconst pendingNodes = [];\n\t\tconst pendingInputAccessors = [];\n\t\tconst pendingOutputAccessors = [];\n\t\tconst pendingSamplers = [];\n\t\tconst pendingTargets = [];\n\n\t\tfor ( let i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tconst channel = animationDef.channels[ i ];\n\t\t\tconst sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tconst target = channel.target;\n\t\t\tconst name = target.node;\n\t\t\tconst input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tconst output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tif ( target.node === undefined ) continue;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tconst nodes = dependencies[ 0 ];\n\t\t\tconst inputAccessors = dependencies[ 1 ];\n\t\t\tconst outputAccessors = dependencies[ 2 ];\n\t\t\tconst samplers = dependencies[ 3 ];\n\t\t\tconst targets = dependencies[ 4 ];\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst inputAccessor = inputAccessors[ i ];\n\t\t\t\tconst outputAccessor = outputAccessors[ i ];\n\t\t\t\tconst sampler = samplers[ i ];\n\t\t\t\tconst target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tif ( node.updateMatrix ) {\n\n\t\t\t\t\tnode.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tconst createdTracks = parser._createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target );\n\n\t\t\t\tif ( createdTracks ) {\n\n\t\t\t\t\tfor ( let k = 0; k < createdTracks.length; k ++ ) {\n\n\t\t\t\t\t\ttracks.push( createdTracks[ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( animationName, undefined, tracks );\n\n\t\t} );\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( nodeDef.mesh === undefined ) return null;\n\n\t\treturn parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\tconst node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\tfor ( let i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t * @param {number} nodeIndex\n\t * @return {Promise}\n\t */\n\tloadNode( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tconst nodePending = parser._loadNodeShallow( nodeIndex );\n\n\t\tconst childPending = [];\n\t\tconst childrenDef = nodeDef.children || [];\n\n\t\tfor ( let i = 0, il = childrenDef.length; i < il; i ++ ) {\n\n\t\t\tchildPending.push( parser.getDependency( 'node', childrenDef[ i ] ) );\n\n\t\t}\n\n\t\tconst skeletonPending = nodeDef.skin === undefined\n\t\t\t? Promise.resolve( null )\n\t\t\t: parser.getDependency( 'skin', nodeDef.skin );\n\n\t\treturn Promise.all( [\n\t\t\tnodePending,\n\t\t\tPromise.all( childPending ),\n\t\t\tskeletonPending\n\t\t] ).then( function ( results ) {\n\n\t\t\tconst node = results[ 0 ];\n\t\t\tconst children = results[ 1 ];\n\t\t\tconst skeleton = results[ 2 ];\n\n\t\t\tif ( skeleton !== null ) {\n\n\t\t\t\t// This full traverse should be fine because\n\t\t\t\t// child glTF nodes have not been added to this node yet.\n\t\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\t\tif ( ! mesh.isSkinnedMesh ) return;\n\n\t\t\t\t\tmesh.bind( skeleton, _identityMatrix );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\tnode.add( children[ i ] );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t// ._loadNodeShallow() parses a single node.\n\t// skin and child nodes are created and added in .loadNode() (no '_' prefix).\n\t_loadNodeShallow( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst parser = this;\n\n\t\t// This method is called from .loadNode() and .loadSkin().\n\t\t// Cache a node to avoid duplication.\n\n\t\tif ( this.nodeCache[ nodeIndex ] !== undefined ) {\n\n\t\t\treturn this.nodeCache[ nodeIndex ];\n\n\t\t}\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tconst nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\tconst pending = [];\n\n\t\tconst meshPromise = parser._invokeOne( function ( ext ) {\n\n\t\t\treturn ext.createNodeMesh && ext.createNodeMesh( nodeIndex );\n\n\t\t} );\n\n\t\tif ( meshPromise ) {\n\n\t\t\tpending.push( meshPromise );\n\n\t\t}\n\n\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t} ).forEach( function ( promise ) {\n\n\t\t\tpending.push( promise );\n\n\t\t} );\n\n\t\tthis.nodeCache[ nodeIndex ] = Promise.all( pending ).then( function ( objects ) {\n\n\t\t\tlet node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! parser.associations.has( node ) ) {\n\n\t\t\t\tparser.associations.set( node, {} );\n\n\t\t\t}\n\n\t\t\tparser.associations.get( node ).nodes = nodeIndex;\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t\treturn this.nodeCache[ nodeIndex ];\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t * @param {number} sceneIndex\n\t * @return {Promise}\n\t */\n\tloadScene( sceneIndex ) {\n\n\t\tconst extensions = this.extensions;\n\t\tconst sceneDef = this.json.scenes[ sceneIndex ];\n\t\tconst parser = this;\n\n\t\t// Loader returns Group, not Scene.\n\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\tconst scene = new Group();\n\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\tconst nodeIds = sceneDef.nodes || [];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\tpending.push( parser.getDependency( 'node', nodeIds[ i ] ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( nodes ) {\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tscene.add( nodes[ i ] );\n\n\t\t\t}\n\n\t\t\t// Removes dangling associations, associations that reference a node that\n\t\t\t// didn't make it into the scene.\n\t\t\tconst reduceAssociations = ( node ) => {\n\n\t\t\t\tconst reducedAssociations = new Map();\n\n\t\t\t\tfor ( const [ key, value ] of parser.associations ) {\n\n\t\t\t\t\tif ( key instanceof Material || key instanceof Texture ) {\n\n\t\t\t\t\t\treducedAssociations.set( key, value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tnode.traverse( ( node ) => {\n\n\t\t\t\t\tconst mappings = parser.associations.get( node );\n\n\t\t\t\t\tif ( mappings != null ) {\n\n\t\t\t\t\t\treducedAssociations.set( node, mappings );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\treturn reducedAssociations;\n\n\t\t\t};\n\n\t\t\tparser.associations = reduceAssociations( scene );\n\n\t\t\treturn scene;\n\n\t\t} );\n\n\t}\n\n\t_createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target ) {\n\n\t\tconst tracks = [];\n\n\t\tconst targetName = node.name ? node.name : node.uuid;\n\t\tconst targetNames = [];\n\n\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\ttargetNames.push( targetName );\n\n\t\t}\n\n\t\tlet TypedKeyframeTrack;\n\n\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.position:\n\t\t\tcase PATH_PROPERTIES.scale:\n\n\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tswitch ( outputAccessor.itemSize ) {\n\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 3:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\n\t\tconst outputArray = this._getArrayFromAccessor( outputAccessor );\n\n\t\tfor ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\tconst track = new TypedKeyframeTrack(\n\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\tinputAccessor.array,\n\t\t\t\toutputArray,\n\t\t\t\tinterpolation\n\t\t\t);\n\n\t\t\t// Override interpolation with custom factory method.\n\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\tthis._createCubicSplineTrackInterpolant( track );\n\n\t\t\t}\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\t_getArrayFromAccessor( accessor ) {\n\n\t\tlet outputArray = accessor.array;\n\n\t\tif ( accessor.normalized ) {\n\n\t\t\tconst scale = getNormalizedComponentScale( outputArray.constructor );\n\t\t\tconst scaled = new Float32Array( outputArray.length );\n\n\t\t\tfor ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t}\n\n\t\t\toutputArray = scaled;\n\n\t\t}\n\n\t\treturn outputArray;\n\n\t}\n\n\t_createCubicSplineTrackInterpolant( track ) {\n\n\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\tconst interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n\n\t\t\treturn new interpolantType( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t};\n\n\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t}\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n */\nfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst box = new Box3();\n\n\tif ( attributes.POSITION !== undefined ) {\n\n\t\tconst accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\tconst min = accessor.min;\n\t\tconst max = accessor.max;\n\n\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\tbox.set(\n\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] )\n\t\t\t);\n\n\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\tbox.min.multiplyScalar( boxScale );\n\t\t\t\tbox.max.multiplyScalar( boxScale );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t} else {\n\n\t\treturn;\n\n\t}\n\n\tconst targets = primitiveDef.targets;\n\n\tif ( targets !== undefined ) {\n\n\t\tconst maxDisplacement = new Vector3();\n\t\tconst vector = new Vector3();\n\n\t\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tconst target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\tconst accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\tconst min = accessor.min;\n\t\t\t\tconst max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\n\t\t\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\t\t\tvector.multiplyScalar( boxScale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\tbox.expandByVector( maxDisplacement );\n\n\t}\n\n\tgeometry.boundingBox = box;\n\n\tconst sphere = new Sphere();\n\n\tbox.getCenter( sphere.center );\n\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\tgeometry.boundingSphere = sphere;\n\n}\n\n/**\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n * @return {Promise}\n */\nfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst pending = [];\n\n\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t.then( function ( accessor ) {\n\n\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t} );\n\n\t}\n\n\tfor ( const gltfAttributeName in attributes ) {\n\n\t\tconst threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t}\n\n\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\tconst accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\tgeometry.setIndex( accessor );\n\n\t\t} );\n\n\t\tpending.push( accessor );\n\n\t}\n\n\tif ( ColorManagement.workingColorSpace !== LinearSRGBColorSpace && 'COLOR_0' in attributes ) {\n\n\t\tconsole.warn( `THREE.GLTFLoader: Converting vertex colors from \"srgb-linear\" to \"${ColorManagement.workingColorSpace}\" not supported.` );\n\n\t}\n\n\tassignExtrasToUserData( geometry, primitiveDef );\n\n\tcomputeBounds( geometry, primitiveDef, parser );\n\n\treturn Promise.all( pending ).then( function () {\n\n\t\treturn primitiveDef.targets !== undefined\n\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t: geometry;\n\n\t} );\n\n}\n\nexport { GLTFLoader };\n","import { Object3D } from \"three\";\n\n/**\n * A generator function to traverse an Object3D hierarchy. Unlike the\n * Object3D.traverse method, this can stop traversal after a success by simply\n * breaking out of the loop that is consuming the generator.\n *\n * It should be safe to remove the current element from its parent object\n * during traversal because the function iterates backwards.\n */\nexport function* traverse(obj: Object3D) {\n yield obj;\n if(obj && obj.children.length > 0) {\n for(let i=obj.children.length - 1; i >= 0; i--) {\n yield* traverse(obj.children[i]);\n }\n }\n}\nexport default traverse;\n","import logging, { Logger } from './logging';\n\n/**\n * Note that this class will not catch or log unhandled asynchronous\n * exceptions, so if you provide an async handler, make sure you have a catch\n * at the top level of your handler, otherwise the exception may be silently\n * swallowed, or in node.js, it could crash the process.\n */\nexport default class Signal extends Set<(...args: T) => unknown>\n{\n name: string;\n log: Logger;\n\n constructor(name: string, category: string = 'signals') {\n super();\n this.name = name;\n this.log = logging(category);\n\n this.trigger = this.trigger.bind(this);\n }\n\n once(handler: (...args: T) => unknown) {\n const wrapper = (...args: T) => {\n this.delete(wrapper);\n return handler(...args);\n };\n this.add(wrapper);\n }\n\n trigger(...args: T) {\n for(const handler of this) {\n try {\n handler(...args);\n } catch(error) {\n this.log.error(\n `Error in handler for ${this.name}`, error,\n 'Handler: ', handler);\n }\n }\n }\n}\n","import * as config from './config';\nimport BaseFactory from './BaseFactory';\nimport MemoryCache from './MemoryCache';\nimport logging from './logging';\nimport { Color, CubeRefractionMapping, CubeTextureLoader, Material, MeshBasicMaterial, MeshPhongMaterial, MeshStandardMaterial, MixOperation, NoColorSpace, Texture, TextureLoader, RepeatWrapping, ColorRepresentation, SRGBColorSpace, LoadingManager, DefaultLoadingManager, MeshPhysicalMaterial, } from 'three';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\nimport { Material as MaterialModel } from './domain';\nimport { gammaCorrect as gc } from './utils/gammaCorrect';\nimport assets from './assets';\nimport traverse from './utils/traverseGenerator';\nimport Signal from './Signal';\n\nconst log = logging('MaterialFactory');\n\nexport const blank = new MeshBasicMaterial(\n {\n colorWrite: false,\n depthTest: false,\n depthWrite: false,\n stencilWrite: false,\n visible: false,\n });\n\nexport class MaterialFactory extends BaseFactory {\n\n public manager: LoadingManager;\n public textureCube: Texture;\n\n private textures: MemoryCache;\n private materials: MemoryCache;\n\n private gltfLoader: GLTFLoader = new GLTFLoader();\n\n // Handler takes two arguments: the material that was just updated, and the\n // material in the GLB file from which it was derived.\n private onMaterialUpdate = new Signal<[updated: Material, source: Material]>(\n 'onMaterialUpdate', 'MaterialFactory');\n\n // Public Interface\n // ----------------\n\n // **new MaterialFactory()**\n //\n // The `MaterialFactory` is designed for a single page global instance. If\n // there are multilple scenes and canvases on a page, they should still be\n // able to share the same global instance. Throughout the examples I've used\n // the variable `mfac` to represent the global instance, but there's nothing\n // special about that name.\n constructor(manager?: LoadingManager) {\n super();\n this.manager = manager ? manager : DefaultLoadingManager;\n this.textures = new MemoryCache();\n this.materials = new MemoryCache();\n\n // We're using a global texture cube in the first iteration, so this\n // will move to a more formal mechanism later.\n this._initTextureCube();\n }\n\n\n // **make(name, ...args)**\n //\n // This method provides a single point of entry into the material factory.\n // If you want a chrome material, you can call `mfac.make('Chrome')`, or a\n // wood grain would look like `mfac.make('StandardMelamine',\n // 'maps/001.png')`.\n make(name: string, ...args: any[]) {\n this.manager.itemStart(name);\n try {\n let material = this.materials.get(name, ...args);\n if (material == null) {\n material = super.make(name, ...args);\n\n material.name = name;\n this.materials.put(material, name, ...args);\n }\n return material;\n } catch(error) {\n log.error(error);\n }finally {\n this.manager.itemEnd(name);\n }\n }\n\n // Makes a basic material from a plain JavaScript object with material and\n // color properties.\n // TODO: Eventually the make method should be fully aware of domain models.\n makefrom(model: MaterialModel) {\n // If we have an assetId, then this is loaded from a GLB file. We\n // return a MeshStandardMaterial and then load it from the GLB file.\n if(model.assetId) {\n let mat = this.materials.get(model.assetId) as MeshStandardMaterial;\n if(mat) return mat;\n // The three.js default is currently a plain white diffuse\n // material. This will be the appearance until the glb file\n // finishes loading.\n mat = new MeshStandardMaterial();\n mat.name = model.assetId;\n this.materials.put(mat, model.assetId);\n\n this.gltfLoader.load(\n assets.resolve(model.assetId, 'OnlineMaterial'),\n gltf => {\n for(const obj of traverse(gltf.scene)) {\n if(obj?.isMesh) {\n // If the GLB file has a MeshPhysicalMaterial,\n // then we need to update `mat` to be an instance\n // of that class.\n if(obj.material instanceof MeshPhysicalMaterial) {\n Object.assign(mat, obj.material);\n Object.setPrototypeOf(mat, MeshPhysicalMaterial.prototype);\n }\n mat.copy(obj.material);\n mat.envMap = this.textureCube;\n this.onMaterialUpdate.trigger(mat, obj.material);\n break;\n }\n }\n // because mat was cached even before loading\n // completed, every mesh using the assetId should get\n // the same material. So this should update all the\n // meshes using mat at once.\n mat.needsUpdate = true;\n });\n\n return mat;\n }\n switch (model.type) {\n case 'WindowEnvironment':\n // the extra color parameter would mess up the WindowEnvironment, so we omit it\n return this.make(model.type);\n default:\n return this.make(model.type, model.color);\n\n }\n }\n\n makeTransparent(model: MaterialModel, opacity: number) {\n const original = this.makefrom(model);\n\n let result = original;\n if(opacity < 1) {\n const cached = this.materials.get(\n \"transparent\", model.assetId, model.type, model.color,\n String(opacity));\n if(cached) {\n return cached;\n }\n\n result = original.clone();\n result.transparent = true;\n result.opacity = opacity;\n\n const handler = (updated: Material, source: Material) => {\n if(updated == original) {\n if(source instanceof MeshPhysicalMaterial) {\n Object.assign(result, source);\n Object.setPrototypeOf(result, MeshPhysicalMaterial.prototype);\n }\n result.copy(source);\n result.transparent = true;\n result.opacity = opacity;\n (result as MeshStandardMaterial).envMap = this.textureCube;\n result.needsUpdate = true;\n\n this.onMaterialUpdate.delete(handler);\n }\n };\n this.onMaterialUpdate.add(handler);\n\n this.materials.put(\n result, \"transparent\", model.assetId, model.type, model.color,\n String(opacity));\n }\n\n return result;\n }\n\n // **preloadTexture**\n //\n // This is a 'lazy loader' for texture maps. If you know all the texture\n // maps you're going to use on a page, you can call this to preload them\n // during page load so that the global DefaultLoadingManager can track them.\n // In any event this simply caches a texture by name, irrespective of\n // quality level, and returns that texture instance instead of double\n // loading.\n preloadTexture(texName: string) {\n let tex = this.textures.get(texName);\n if (tex == null) {\n const loader = new TextureLoader();\n tex = loader.load(\n texName,\n () => { /* noop onLoad */ },\n null, /* progress events no longer supported */\n (err) => {\n console.trace(\n `An error occurred while loading '${texName}'`, err);\n });\n tex.wrapS = tex.wrapT = RepeatWrapping;\n tex.colorSpace = SRGBColorSpace;\n this.textures.put(tex, texName);\n }\n return tex;\n }\n\n // **_initTextureCube()**\n //\n // For now, I think we can use the same texture cube for every reflective\n // material. When we add higher quality levels, we'll probably want to\n // load separate texture cubes for different materials.\n _initTextureCube() {\n if (this.textureCube == null) {\n this.textureCube = this.loadTextureCube(\n `${config.maps}/schadoplatz/32p/`, 'jpg');\n }\n }\n\n loadTextureCube(path: string, suffix: string) {\n let cube = this.textures.get(path, suffix);\n if(cube == null) {\n cube = new CubeTextureLoader()\n .setPath(path)\n .load([`px.${suffix}`, `nx.${suffix}`, `py.${suffix}`, `ny.${suffix}`, `pz.${suffix}`, `nz.${suffix}`]);\n this.textures.put(cube, path, suffix)\n }\n\tcube.colorSpace = NoColorSpace;\n return cube;\n }\n}\n\nconst mfac = MaterialFactory.getInstance() as MaterialFactory;\n\n// Material Definitions\n// --------------------\n\n// Everything below here is a material definition. \n\nmfac.extend('LightWarm', function() {\n var material = new MeshBasicMaterial({\n color: gc(0xe0d2ba),\n });\n return material;\n});\n\nmfac.extend('LightNeutral', function() {\n var material = new MeshBasicMaterial({\n color: gc(0xd6d4d6),\n });\n return material;\n});\n\nmfac.extend('LightCool', function() {\n var material = new MeshBasicMaterial({\n color: gc(0xd3d4dc),\n });\n return material;\n});\n\n\nmfac.extend('Chrome', function() {\n var material = new MeshPhongMaterial({\n color: 0xFFFFFF,\n specular: 0xFFFFFF,\n shininess: 100,\n reflectivity: 0.95,\n combine: MixOperation,\n envMap: this.textureCube\n });\n\n return material;\n});\n\nmfac.extend('Brass', function() {\n var material = new MeshPhongMaterial({\n // This is the exact material color we use in Cycles.\n color: gc(0xE4C28C),\n // The material color at 40% value\n specular: gc(0x66573f),\n shininess: 100,\n envMap: this.textureCube\n });\n return material;\n});\n\nmfac.extend('SatinNickel', function() {\n var material = new MeshPhongMaterial({\n color: gc(0xD0D0D8),\n specular: gc(0x111116),\n shininess: 50,\n reflectivity: 0.18,\n combine: MixOperation,\n envMap: this.textureCube\n });\n return material;\n});\n\nmfac.extend('Nickel', function() {\n return this.make('SatinNickel');\n});\n\nmfac.extend('Bronze', function() {\n var material = new MeshPhongMaterial({\n // Again, this value comes from Cycles material settings\n color: gc(0x0c0804),\n // specular: 0x543505,\n shininess: 1,\n reflectivity: 0.05,\n combine: MixOperation,\n envMap: this.textureCube\n });\n\n return material;\n});\n\nmfac.extend('MatteGold', function() {\n var material = new MeshPhongMaterial({\n // Again, this value comes from Cycles material settings\n color: gc(0xC6A677),\n // The material hue at 25% luminosity\n specular: gc(0x403526),\n shininess: 50,\n reflectivity: 0.18,\n combine: MixOperation,\n envMap: this.textureCube\n });\n return material;\n});\n\nmfac.extend('GlossBlack', function() {\n var material = new MeshPhongMaterial({\n color: gc(0x101010),\n specular: gc(0x222222),\n shininess: 100,\n envMap: this.textureCube\n });\n return material;\n});\n\nmfac.extend('MatteBlack', function() {\n return new MeshStandardMaterial({\n color: 0x282828,\n roughness: 50,\n });\n});\n\nmfac.extend('MatteAluminum', function() {\n var material = new MeshPhongMaterial({\n color: gc(0xA0A0A0),\n specular: gc(0x282828),\n shininess: 20,\n reflectivity: 0.5,\n combine: MixOperation,\n envMap: this.textureCube\n });\n return material;\n});\n\n// This has never been used, and it doesn't work anyway\n//mfac.extend('MatteNickel', function() {\n// var material = new MeshPhongMaterial({\n// color: gc(0xD9D2C5),\n// specular: gc(0x3674B1),\n// shininess: 20,\n// reflectivity: 0.05,\n// combine: MixOperation,\n// envMap: this.textureCube\n// });\n// return material;\n//});\n\nmfac.extend('Slate', function() {\n var material = new MeshPhongMaterial({\n color: gc(0x303030),\n specular: gc(0x323232),\n shininess: 100,\n envMap: this.textureCube\n });\n return material;\n});\n\nmfac.extend('White', function() {\n var material = new MeshPhongMaterial({\n color: 0xffffff,\n specular: 0xffffff,\n reflectivity: 0.5,\n shininess: 100,\n envMap: this.textureCube\n });\n return material;\n});\n\nmfac.extend('Ivory', function() {\n var material = new MeshPhongMaterial({\n color: gc(0xffffd0),\n specular: gc(0xfffff0),\n shininess: 100,\n reflectivity: 0.5,\n envMap: this.textureCube\n });\n return material;\n});\n\nmfac.extend('Mirror', function() {\n return this.make('Chrome');\n});\n\nmfac.extend('Glass', function() {\n var material = new MeshPhongMaterial({\n color: 0xFFFFFF,\n specular: 0xFFFFFF,\n shininess: 100,\n envMap: this.textureCube,\n transparent: true,\n opacity: 0.2,\n });\n return material;\n});\n\nmfac.extend('FrostedGlass', function() {\n var material = new MeshPhongMaterial({\n color: 0xFFFFFF,\n specular: 0xFFFFFF,\n shininess: 100,\n reflectivity: 0.1,\n combine: MixOperation,\n envMap: this.textureCube,\n transparent: true,\n opacity: 0.6,\n });\n return material;\n});\n\nmfac.extend('StandardMelamine', function(texName) {\n var tex = this.preloadTexture(texName);\n var material = new MeshPhongMaterial({\n map: tex,\n shininess: 30\n });\n material.userData.material_colormap = texName;\n return material;\n});\n\nmfac.extend('SemiGlossMelamine', function(texName) {\n var tex = this.preloadTexture(texName);\n var material = new MeshPhongMaterial({\n map: tex,\n shininess: 90\n });\n material.userData.material_colormap = texName;\n return material;\n});\n\nmfac.extend('GlossMelamine', function(texName: string, tint: number=0xFFFFFF) {\n var tex = this.preloadTexture(texName);\n var material = new MeshPhongMaterial({\n map: tex,\n shininess: 100,\n envMap: this.textureCube,\n reflectivity: 0.05,\n combine: MixOperation,\n color: tint,\n });\n material.userData.material_colormap = texName;\n material.userData.material_tint = tint;\n return material;\n});\n\nmfac.extend('Carpet', function(colorCode: string) {\n var color = this.preloadTexture(\n `${config.maps}/flooring/carpet_diffuse_01.jpg`);\n var normal = this.preloadTexture(\n `${config.maps}/flooring/carpet_normal.jpg`);\n\n var material = new MeshPhongMaterial({\n color: new Color(colorCode), //MJB\n map: color,\n shininess: 4,\n normalMap: normal\n });\n material.userData.material_tint = colorCode;\n return material;\n});\n\n// Note that the `colorCode` is a string, either '01', '02', '03', '04', '05',\n// '06', '07', '08', '09', or '10'.\nmfac.extend('OriginalFlooring', function(colorCode) {\n var color = this.preloadTexture(\n `${config.maps}/flooring/Floor_Original_diffuse_${colorCode}.jpg`);\n var normal = this.preloadTexture(\n `${config.maps}/flooring/Floor_Original_normal.jpg`);\n var specular = this.preloadTexture(\n `${config.maps}/flooring/Floor_Original_specular.jpg`);\n var material = new MeshPhongMaterial({\n //color: gc(0x808080),\n map: color,\n shininess: 70,\n specularMap: specular,\n normalMap: normal,\n envMap: this.textureCube,\n reflectivity: 0.6,\n combine: MixOperation\n });\n material.userData.material_tint = colorCode;\n return material;\n});\n\nmfac.extend('Parquet', function(map: string) {\n var material = null;\n if (!map) {\n map = \"01A\";\n }\n var mapCategory = map.slice(0, -1);\n var color = this.preloadTexture(\n `${config.maps}/flooring/Floor_Parquet_${map}.jpg`);\n var rough = null;\n if (this.level >= 4) {\n var rough = this.preloadTexture(\n `${config.maps}/flooring/Floor_Parquet_${mapCategory}_rough.jpg`);\n }\n material = new MeshStandardMaterial({\n map: color,\n roughnessMap: rough,\n // Setting the map and its intensity to zero effectively cancels the\n // influence of the scene.environment map\n envMap: this.textureCube,\n envMapIntensity: 0,\n });\n material.userData.material_colormap = map;\n return material;\n});\n\nmfac.extend('Herringbone', function(map: string) {\n var material = null;\n if (!map)\n map == \"01A\";\n var mapCategory = map.slice(0, -1);\n var color = this.preloadTexture(\n `${config.maps}/flooring/Floor_Herringbone_${map}.jpg`);\n var normal = this.preloadTexture(\n `${config.maps}/flooring/Floor_Herringbone_${mapCategory}_normal.jpg`);\n var height = this.preloadTexture(\n `${config.maps}/flooring/Floor_Herringbone_${mapCategory}_height.jpg`);\n var rough = this.preloadTexture(\n `${config.maps}/flooring/Floor_Herringbone_${mapCategory}_rough.jpg`);\n\n material = new MeshStandardMaterial({\n map: color,\n normalMap: normal,\n bumpMap: height,\n roughnessMap: rough,\n // Setting the map and its intensity to zero effectively cancels the\n // influence of the scene.environment map\n envMap: this.textureCube,\n envMapIntensity: 0,\n });\n material.userData.material_colormap = map;\n return material;\n});\n\nmfac.extend('WindowEnvironment', function(path, suffix) {\n\n if (path == null) path = `${config.maps}/we_original/`;\n if (suffix == null) suffix = 'jpg';\n\n let env = this.loadTextureCube(path, suffix);\n env.mapping = CubeRefractionMapping;\n\n let material = new MeshPhongMaterial({\n color: 0xFFFFFF,\n shininess: 100,\n envMap: env,\n refractionRatio: 0.98,\n combine: MixOperation\n });\n return material;\n});\n\nmfac.extend('GenericAsset', function(map) {\n var color = this.preloadTexture(map);\n const material = new MeshPhongMaterial({\n color: 0xFFFFFF,\n map: color,\n });\n return material;\n});\n\nmfac.extend('LeatherWinter', function() {\n var color = this.preloadTexture(\n `${config.maps}/leathers/Leather_Winter.jpg`);\n var normal = this.preloadTexture(\n `${config.maps}/leathers/Leather_Normal.jpg`);\n var rough = this.preloadTexture(\n `${config.maps}/leathers/Leather_Rough.jpg`);\n let material = new MeshStandardMaterial({\n map: color,\n roughnessMap: rough,\n roughness: 1.0,\n normalMap: normal,\n metalness: 0,\n metalnessMap: rough,\n //refractionRatio: 1.5,\n //combine: MixOperation\n });\n return material;\n});\n\nmfac.extend('LeatherOyster', function() {\n var color = this.preloadTexture(\n `${config.maps}/leathers/Leather_Oyster.jpg`);\n var normal = this.preloadTexture(\n `${config.maps}/leathers/Leather_Normal.jpg`);\n var rough = this.preloadTexture(\n `${config.maps}/leathers/Leather_Rough.jpg`);\n let material = new MeshStandardMaterial({\n map: color,\n roughnessMap: rough,\n roughness: 1.0,\n normalMap: normal,\n metalness: 0,\n metalnessMap: rough,\n //refractionRatio: 1.5,\n //combine: MixOperation\n });\n return material;\n});\n\nmfac.extend('LeatherPewter', function() {\n var color = this.preloadTexture(\n `${config.maps}/leathers/Leather_Pewter.jpg`);\n var normal = this.preloadTexture(\n `${config.maps}/leathers/Leather_Normal.jpg`);\n var rough = this.preloadTexture(\n `${config.maps}/leathers/Leather_Rough.jpg`);\n let material = new MeshStandardMaterial({\n map: color,\n roughnessMap: rough,\n roughness: 1.0,\n normalMap: normal,\n metalness: 0,\n metalnessMap: rough,\n //refractionRatio: 1.5,\n //combine: MixOperation\n });\n return material;\n});\n\nmfac.extend('WallPaint', function(wallColor: ColorRepresentation) {\n if(wallColor == null) wallColor = 0xB0B0B0;\n const tex = this.preloadTexture(\"/closet-organizers-images/3D Assets/wall1.png\");\n tex.repeat.set(0.02, 0.02);\n return new MeshStandardMaterial({\n color: gc(wallColor),\n map: tex,\n roughness: 1.0,\n metalness: 0.0,\n });\n});\n\nmfac.extend('WallExtension', function(wallColor: ColorRepresentation) {\n if(wallColor == null) wallColor = 0xB0B0B0;\n const tex = this.preloadTexture(\"/closet-organizers-images/3D Assets/wall_extension.png\");\n tex.repeat.set(0.02, 0.02);\n return new MeshStandardMaterial({\n color: gc(wallColor),\n map: tex,\n roughness: 1.0,\n metalness: 0.0,\n });\n});\n\n\nexport default mfac;\n","import { Box3, Mesh, Object3D, Vector3 as THREE_Vector3 } from 'three';\nimport DomainModel from '../DomainModel';\nimport { Material as Material, Vector3 } from '../domain';\nimport { OrderedEffects } from '../utils';\nimport mfac from '../MaterialFactory';\nimport logging from '../logging';\nimport Application from '../Application';\n\nconst log = logging('view');\n\nexport interface DomainModel3D extends DomainModel {\n position: Vector3;\n rotation: Vector3;\n // TODO: make the scale optional\n scale: Vector3;\n};\n\nexport default abstract class BaseView extends Object3D {\n\n model: DomainModel3D;\n highlights: Set = new Set();\n private _app: Application | undefined;\n\n protected updates: OrderedEffects = new OrderedEffects();\n\n constructor(model: DomainModel3D, app: Application) {\n super();\n\n this.model = model;\n this._app = app;\n }\n\n /**\n * Every implementing class should ensure that the init() method runs at\n * the end of the constructor or at least some time before the view is\n * needed in the scene.\n */\n init() {\n this.make();\n this.bind();\n this.bindTransform();\n }\n\n /**\n * Get the application from which this view was constructed. I don't\n * currently think we'll ever need to change this, so it's read-only.\n */\n get app(): Application {\n return this._app;\n }\n\n /**\n * Implementations should create an empty skeleton of their 3D children.\n */\n protected abstract make(): void;\n\n /**\n * Implementations should bind their model's change events to their\n * particular properties.\n */\n protected abstract bind(): void;\n\n /**\n * An automatic side-effect of the constructor is that this Object3D\n * instance (and its subclasses) will automatically track the 3D transform\n * of their corresponding models.\n */\n protected bindTransform(): void {\n this.model.position.bind('x',\n () => this.position.x = this.model.position.x);\n this.model.position.bind('y',\n () => this.position.y = this.model.position.y);\n this.model.position.bind('z',\n () => this.position.z = this.model.position.z);\n\n\n this.model.rotation.bind('x',\n () => this.rotation.x = this.model.rotation.x);\n this.model.rotation.bind('y',\n () => this.rotation.y = this.model.rotation.y);\n this.model.rotation.bind('z',\n () => this.rotation.z = this.model.rotation.z);\n\n\n this.model.scale.bind('x',\n () => this.scale.x = this.model.scale.x);\n this.model.scale.bind('y',\n () => this.scale.y = this.model.scale.y);\n this.model.scale.bind('z',\n () => this.scale.z = this.model.scale.z);\n }\n\n protected bindMaterial(mesh: Mesh, material: Material) {\n material.bind('change', () => {\n mesh.material = mfac.makefrom(material);\n Application.do('pipeline-update');\n });\n\n if('opacity' in this.model) {\n this.model.bind('opacity', () => {\n const opacity = this.model.get('opacity') as number;\n mesh.material = mfac.makeTransparent(material, opacity);\n Application.do('pipeline-update');\n });\n }\n }\n\n /**\n * When a Mesh instance's property needs to be an array of materials, the\n * plain bindMaterial method won't work. This method takes care of that\n * case.\n */\n protected bindMaterialArray(mesh: Mesh, materials: Material[]) {\n mesh.material = new Array(materials.length);\n for(let i = 0; i < materials.length; i++) {\n materials[i].bind(\"change\", () => {\n mesh.material[i] = mfac.makefrom(materials[i]);\n });\n if('opacity' in this.model) {\n this.model.bind('opacity', () => {\n const opacity = this.model.get('opacity') as number;\n mesh.material[i] = mfac.makeTransparent(materials[i], opacity);\n });\n }\n }\n }\n\n /**\n * If we are embedded in an Application instance, this requests that the\n * renderer render the next frame. Call this method after completing a\n * geometry update if you're not seeing your updates but they do appear\n * after a refresh, i.e. when the pipeline has paused rendering before\n * showing your change.\n *\n * Usually this is not required in a view because tool implementations\n * should already be updating the rendered view on user input.\n *\n * This is a little ugly because it leaks some coupling to the Application\n * from inside the views, but it's at least loose coupling.\n */\n protected pipelineUpdate() {\n if(this.app)\n this.app.pipeline.update = true;\n }\n\n /**\n * This has the wrong return signature to satisfy a quirk of TypeScript.\n * At the moment I don't need the clone to be completely the same as its\n * source, with its attachment to a model.\n */\n public clone(deep?: boolean): this {\n // In TypeScript, this.constructor is a Function, but we want it to be\n // a constructor. Not sure how to do it any better than this.\n let clone = new Object3D();\n clone.copy(this, deep);\n return clone as this;\n }\n\n /**\n * Computes the axis-aligned bounding box that precisely contains this\n * view.\n */\n public getVisualDimensons(): THREE_Vector3 {\n const box = new Box3();\n box.setFromObject(this, true);\n return box.getSize(new THREE_Vector3());\n }\n}\n","import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMaterial,\n\tMesh,\n\tMeshPhongMaterial,\n\tPoints,\n\tPointsMaterial,\n\tVector3,\n\tColor\n} from 'three';\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /;\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /;\n// usemap map_name\nconst _map_use_pattern = /^usemap /;\nconst _face_vertex_data_separator_pattern = /\\s+/;\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _ab = new Vector3();\nconst _cb = new Vector3();\n\nconst _color = new Color();\n\nfunction ParserState() {\n\n\tconst state = {\n\t\tobjects: [],\n\t\tobject: {},\n\n\t\tvertices: [],\n\t\tnormals: [],\n\t\tcolors: [],\n\t\tuvs: [],\n\n\t\tmaterials: {},\n\t\tmaterialLibraries: [],\n\n\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\tthis.object.name = name;\n\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t\tthis.object = {\n\t\t\t\tname: name || '',\n\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\tgeometry: {\n\t\t\t\t\tvertices: [],\n\t\t\t\t\tnormals: [],\n\t\t\t\t\tcolors: [],\n\t\t\t\t\tuvs: [],\n\t\t\t\t\thasUVIndices: false\n\t\t\t\t},\n\t\t\t\tmaterials: [],\n\t\t\t\tsmooth: true,\n\n\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\tconst previous = this._finalize( false );\n\n\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst material = {\n\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\tconst cloned = {\n\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t},\n\n\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t},\n\n\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\tconst lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\tfor ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\tthis.materials.splice( mi, 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Inherit previous objects material.\n\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\tconst declared = previousMaterial.clone( 0 );\n\t\t\t\tdeclared.inherited = true;\n\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t}\n\n\t\t\tthis.objects.push( this.object );\n\n\t\t},\n\n\t\tfinalize: function () {\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t},\n\n\t\taddVertex: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddVertexPoint: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddVertexLine: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.normals;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddFaceNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\t_vA.fromArray( src, a );\n\t\t\t_vB.fromArray( src, b );\n\t\t\t_vC.fromArray( src, c );\n\n\t\t\t_cb.subVectors( _vC, _vB );\n\t\t\t_ab.subVectors( _vA, _vB );\n\t\t\t_cb.cross( _ab );\n\n\t\t\t_cb.normalize();\n\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\n\t\t},\n\n\t\taddColor: function ( a, b, c ) {\n\n\t\t\tconst src = this.colors;\n\t\t\tconst dst = this.object.geometry.colors;\n\n\t\t\tif ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tif ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tif ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddUV: function ( a, b, c ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t},\n\n\t\taddDefaultUV: function () {\n\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\n\t\t},\n\n\t\taddUVLine: function ( a ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t},\n\n\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tlet ia = this.parseVertexIndex( a, vLen );\n\t\t\tlet ib = this.parseVertexIndex( b, vLen );\n\t\t\tlet ic = this.parseVertexIndex( c, vLen );\n\n\t\t\tthis.addVertex( ia, ib, ic );\n\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t// normals\n\n\t\t\tif ( na !== undefined && na !== '' ) {\n\n\t\t\t\tconst nLen = this.normals.length;\n\n\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\t\t\t\tib = this.parseNormalIndex( nb, nLen );\n\t\t\t\tic = this.parseNormalIndex( nc, nLen );\n\n\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t} else {\n\n\t\t\t\tthis.addFaceNormal( ia, ib, ic );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( ua !== undefined && ua !== '' ) {\n\n\t\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\tthis.object.geometry.hasUVIndices = true;\n\n\t\t\t} else {\n\n\t\t\t\t// add placeholder values (for inconsistent face definitions)\n\n\t\t\t\tthis.addDefaultUV();\n\n\t\t\t}\n\n\t\t},\n\n\t\taddPointGeometry: function ( vertices ) {\n\n\t\t\tthis.object.geometry.type = 'Points';\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tconst index = this.parseVertexIndex( vertices[ vi ], vLen );\n\n\t\t\t\tthis.addVertexPoint( index );\n\t\t\t\tthis.addColor( index );\n\n\t\t\t}\n\n\t\t},\n\n\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\tconst vLen = this.vertices.length;\n\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t}\n\n\t\t\tfor ( let uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tstate.startObject( '', false );\n\n\treturn state;\n\n}\n\n//\n\nclass OBJLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.materials = null;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tsetMaterials( materials ) {\n\n\t\tthis.materials = materials;\n\n\t\treturn this;\n\n\t}\n\n\tparse( text ) {\n\n\t\tconst state = new ParserState();\n\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet result = [];\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tconst line = lines[ i ].trimStart();\n\n\t\t\tif ( line.length === 0 ) continue;\n\n\t\t\tconst lineFirstChar = line.charAt( 0 );\n\n\t\t\t// @todo invoke passed in handler if any\n\t\t\tif ( lineFirstChar === '#' ) continue; // skip comments\n\n\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\tconst data = line.split( _face_vertex_data_separator_pattern );\n\n\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( data.length >= 7 ) {\n\n\t\t\t\t\t\t\t_color.setRGB(\n\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] )\n\t\t\t\t\t\t\t).convertSRGBToLinear();\n\n\t\t\t\t\t\t\tstate.colors.push( _color.r, _color.g, _color.b );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if no colors are defined, add placeholders so color and vertex indices match\n\n\t\t\t\t\t\t\tstate.colors.push( undefined, undefined, undefined );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\tconst lineData = line.slice( 1 ).trim();\n\t\t\t\tconst vertexData = lineData.split( _face_vertex_data_separator_pattern );\n\t\t\t\tconst faceVertices = [];\n\n\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\tfor ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertex = vertexData[ j ];\n\n\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\tconst vertexParts = vertex.split( '/' );\n\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\tconst v1 = faceVertices[ 0 ];\n\n\t\t\t\tfor ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\tconst v2 = faceVertices[ j ];\n\t\t\t\t\tconst v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\tconst lineParts = line.substring( 1 ).trim().split( ' ' );\n\t\t\t\tlet lineVertices = [];\n\t\t\t\tconst lineUVs = [];\n\n\t\t\t\tif ( line.indexOf( '/' ) === - 1 ) {\n\n\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\tconst parts = lineParts[ li ].split( '/' );\n\n\t\t\t\t\t\tif ( parts[ 0 ] !== '' ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\tif ( parts[ 1 ] !== '' ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t} else if ( lineFirstChar === 'p' ) {\n\n\t\t\t\tconst lineData = line.slice( 1 ).trim();\n\t\t\t\tconst pointData = lineData.split( ' ' );\n\n\t\t\t\tstate.addPointGeometry( pointData );\n\n\t\t\t} else if ( ( result = _object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t// o object_name\n\t\t\t\t// or\n\t\t\t\t// g group_name\n\n\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t// let name = result[ 0 ].slice( 1 ).trim();\n\t\t\t\tconst name = ( ' ' + result[ 0 ].slice( 1 ).trim() ).slice( 1 );\n\n\t\t\t\tstate.startObject( name );\n\n\t\t\t} else if ( _material_use_pattern.test( line ) ) {\n\n\t\t\t\t// material\n\n\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t} else if ( _material_library_pattern.test( line ) ) {\n\n\t\t\t\t// mtl file\n\n\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t} else if ( _map_use_pattern.test( line ) ) {\n\n\t\t\t\t// the line is parsed but ignored since the loader assumes textures are defined MTL files\n\t\t\t\t// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.' );\n\n\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t// smooth shading\n\n\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\tconst value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = state.object.currentMaterial();\n\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t} else {\n\n\t\t\t\t// Handle null terminated files without exception\n\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.finalize();\n\n\t\tconst container = new Group();\n\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\tconst hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );\n\n\t\tif ( hasPrimitives === true ) {\n\n\t\t\tfor ( let i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = state.objects[ i ];\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst materials = object.materials;\n\t\t\t\tconst isLine = ( geometry.type === 'Line' );\n\t\t\t\tconst isPoints = ( geometry.type === 'Points' );\n\t\t\t\tlet hasVertexColors = false;\n\n\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'normal', new Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\thasVertexColors = true;\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.hasUVIndices === true ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'uv', new Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Create materials\n\n\t\t\t\tconst createdMaterials = [];\n\n\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\tconst materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;\n\t\t\t\t\tlet material = state.materials[ materialHash ];\n\n\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialLine = new LineBasicMaterial();\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialLine, material );\n\t\t\t\t\t\t\tmaterialLine.color.copy( material.color );\n\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t} else if ( isPoints && material && ! ( material instanceof PointsMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialPoints = new PointsMaterial( { size: 10, sizeAttenuation: false } );\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialPoints, material );\n\t\t\t\t\t\t\tmaterialPoints.color.copy( material.color );\n\t\t\t\t\t\t\tmaterialPoints.map = material.map;\n\t\t\t\t\t\t\tmaterial = materialPoints;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material === undefined ) {\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmaterial = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\t\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\t\t\t\t\t\tmaterial.vertexColors = hasVertexColors;\n\n\t\t\t\t\t\tstate.materials[ materialHash ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t}\n\n\t\t\t\t// Create mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = object.name;\n\n\t\t\t\tcontainer.add( mesh );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n\t\t\tif ( state.vertices.length > 0 ) {\n\n\t\t\t\tconst material = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( state.vertices, 3 ) );\n\n\t\t\t\tif ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( state.colors, 3 ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst points = new Points( buffergeometry, material );\n\t\t\t\tcontainer.add( points );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn container;\n\n\t}\n\n}\n\nexport { OBJLoader };\n","import MemoryCache from './MemoryCache';\n\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\nimport { Mesh, Object3D } from 'three';\nimport mfac from './MaterialFactory';\n\n/**\n * The ModelLoader loads and caches Object3D instances from OBJ and GLTF files.\n */\nexport default class ModelLoader {\n\n cache: MemoryCache< Promise >;\n objLoader: OBJLoader;\n gltfLoader: GLTFLoader;\n\n private static instance: ModelLoader;\n\n constructor() {\n this.cache = new MemoryCache();\n this.objLoader = new OBJLoader();\n this.gltfLoader = new GLTFLoader();\n }\n\n /**\n * The ModelLoader may be used as a singleton\n */\n static getInstance() {\n if(! this.instance){\n this.instance = new this();\n }\n return this.instance;\n }\n\n private objLoad(url: string) {\n let promise: Promise = new Promise((resolve, reject) => {\n this.objLoader.load(\n url,\n // Load completed\n object => {\n object.name = url;\n object.traverse(child => {\n if(child instanceof Mesh) {\n child.geometry.name = url;\n child.castShadow = child.receiveShadow = true;\n }\n });\n resolve(object);\n },\n null, // progress callbacks is unsed/null\n error => {\n console.log(error);\n reject(error);\n }\n )\n });\n this.cache.put(promise, url);\n return promise;\n }\n\n private gltfLoad(url: string) {\n let promise: Promise = new Promise((resolve, reject) => {\n this.gltfLoader.load(\n url,\n // Load completed\n gltf => {\n const object = gltf.scene;\n object.name = url;\n object.traverse(child => {\n if(child instanceof Mesh) {\n child.geometry.name = url;\n child.castShadow = child.receiveShadow = true;\n\n if(child.material && \n 'cpsFactoryMaterial' in child.material.userData)\n {\n child.material =\n mfac.make(child.material.userData.cpsFactoryMaterial);\n }\n }\n });\n resolve(object);\n },\n null, // progress callbacks is unsed/null\n error => {\n console.log(error);\n reject(error);\n }\n )\n });\n this.cache.put(promise, url);\n return promise;\n }\n\n /**\n * Returns a Promise for the Object3D representing the top level object in\n * the loaded OBJ or GLTF file.\n */\n async get(url: string) {\n let promise = this.cache.get(url);\n if(promise == null) {\n const fileType = url.split('.').pop();\n if (fileType == \"obj\") {\n promise = this.objLoad(url);\n } else if (fileType == \"gltf\" || fileType == \"glb\") {\n promise = this.gltfLoad(url);\n }\n }\n let obj = await promise;\n return obj?.clone();\n }\n\n\n}\n","/**\n * Tools for coordinated resizing of meshes and their UVs.\n */\n\nimport { Box3, BufferGeometry, Mesh, Object3D } from \"three\"\n\ntype TypedArray =\n | Int8Array\n | Uint8Array\n | Uint8ClampedArray\n | Int16Array\n | Uint16Array\n | Int32Array\n | Uint32Array\n | Float32Array\n | Float64Array;\n\nexport enum Axis {\n x = 0,\n y = 1,\n z = 2,\n}\n\nexport enum UVAxis {\n u = 0,\n v = 1,\n}\n\n/**\n * Each of the axis parameters set the origin at a position relative to the\n * bounding box of the geometry. \n */\nexport const setOrigin = (geo: BufferGeometry, x: number, y: number, z: number) =>\n{\n if(geo.boundingBox == null) geo.computeBoundingBox();\n const\n b = geo.boundingBox,\n width = b.max.x - b.min.x,\n height = b.max.y - b.min.y,\n depth = b.max.z - b.min.z,\n dx = -x * width - b.min.x,\n dy = -y * height - b.min.y,\n dz = -z * depth - b.min.z;\n geo.translate(dx, dy, dz);\n}\n\n/**\n * Calculates the perimeters of all the triangles in the mesh, both in 3D and\n * UV space and returns the quotient UV/3D, i.e. how many UV units per unit in\n * 3D space. This scale factor allows you to move UV coordinates relative to\n * some movement in 3D, maintaining the UV mapping's aspect ratio when they are\n * axis-aligned.\n * @param skip - For meshes with many triangles, computing this scaling factor\n * could take too much time, so you could calculate the value for every Nth\n * triangle, and rely on it averaging out. This parameter is the number of\n * triangles to skip between iterations, so skipping 1 means you calculate the\n * perimeter for half of the triangles in the mesh, and skipping 2 means only\n * using a third of the triangles.\n */\nexport const calculateUvScale = (geo: BufferGeometry, skip: number = 0): number => {\n const\n index = geo.index.array,\n position = geo.getAttribute('position').array,\n uvs = geo.getAttribute('uv').array,\n inc = 3 * (skip + 1);\n let\n pTotal = 0,\n uvTotal = 0;\n for(let i = 0; i < index.length; i += inc)\n {\n const \n a = index[i] * 3,\n ax = position[a], ay = position[a+1], az = position[a+2],\n auv = index[i] * 2,\n au = uvs[auv], av = uvs[auv+1],\n\n bi = i+1,\n b = index[bi] * 3,\n bx = position[b], by = position[b+1], bz = position[b+2],\n buv = index[bi] * 2,\n bu = uvs[buv], bv = uvs[buv+1],\n\n ci = i+2,\n c = index[ci] * 3,\n cx = position[c], cy = position[c+1], cz = position[c+2],\n cuv = index[ci] * 2,\n cu = uvs[cuv], cv = uvs[cuv+1];\n\n pTotal += \n Math.sqrt((ax - bx)**2 + (ay - by)**2 + (az - bz)**2)\n + Math.sqrt((bx - cx)**2 + (by - cy)**2 + (bz - cz)**2)\n + Math.sqrt((cx - ax)**2 + (cy - ay)**2 + (cz - az)**2)\n uvTotal +=\n Math.sqrt((au - bu)**2 + (av - bv)**2)\n + Math.sqrt((bu - cu)**2 + (bv - cv)**2)\n + Math.sqrt((cu - au)**2 + (cv - av)**2);\n }\n return uvTotal / pTotal;\n}\n\n\n\n/**\n * This procedure moves verticies on the positive side of a given axis and\n * applies a coordinated movement to the corresponding UVs. This provides a way\n * to \"scale\" rectilinear meshes representing things like cabinets, doors,\n * shelves, etc., without distorting the aspect ratio of their parts or\n * stretching their texture maps.\n * @param d - the offset to apply to the vertices on the positive side of the\n * given axis.\n * @param axis - which axis to apply this transform to, i.e. X, Y, or Z.\n */\nexport const resize = (geo: BufferGeometry, d: number, axis: Axis) => {\n const\n position = geo.getAttribute('position').array as TypedArray,\n uvs = geo.getAttribute('uv').array as TypedArray,\n color = geo.getAttribute('color').array as TypedArray,\n offset = d * calculateUvScale(geo);\n for(let i = 0, j = 0, k = 0; i < position.length; i += 3, j += 2, k += 4)\n {\n const pi = i + axis as number;\n if(position[pi] > 0) \n {\n position[pi] += d;\n const c = color[k + axis as number];\n if(c == 0.5) {\n // move the vertex on the U axis\n uvs[j] += offset;\n } else if(c == 1.0) {\n // move the vertex on the V axis, and invert the direction.\n // This may need to be changed to += if we use glb native\n // materials.\n uvs[j+1] -= offset;\n }\n }\n }\n}\n\n\n/**\n * It can be difficult to get the size of a GLB model because each of its\n * materials belong to a different mesh. This gets the union of all the\n * geometries' bounding boxes and places the result in `box`. Note that this\n * will not account for any rotation/scaling of objects. It is probably only\n * appropriate for the GLB use case mentioned above.\n */\nexport const getGeometrySize = (obj: Object3D, box: Box3) => {\n box.min.set(0, 0, 0);\n box.max.set(0, 0, 0);\n obj.traverse(obj => {\n if(obj instanceof Mesh) {\n if(obj.geometry.boundingBox == null) {\n obj.geometry.computeBoundingBox();\n }\n box.union(obj.geometry.boundingBox);\n }\n });\n}\n","import * as config from '../config';\nimport Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport ModelLoader from '../ModelLoader';\nimport { Appliance } from '../domain';\nimport { Box3, BoxGeometry, Material, Mesh, MeshStandardMaterial, Object3D, PlaneGeometry } from 'three';\nimport mfac from '../MaterialFactory';\nimport { getGeometrySize } from '../geometry';\n\nconst\n ml = ModelLoader.getInstance(),\n hitMaterial = new MeshStandardMaterial({\n color: 0x80FFFF,\n opacity: 0.5,\n });\n\n\nconst prepModel = (model: Object3D) => {\n model.traverse(obj => {\n if(obj instanceof Mesh) {\n obj.material.envMap = mfac.textureCube;\n obj.scale.set(1, 1, 1);\n obj.castShadow = obj.receiveShadow = true;\n }\n });\n}\n\nexport default class ApplianceView extends BaseView {\n\n declare model: Appliance;\n\n root: Object3D;\n hit: Mesh;\n box: Box3 = new Box3();\n\n check: Object3D;\n\n faucet?: Object3D;\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n }\n\n add(child: Object3D) {\n super.add(child);\n child.traverse(obj => {\n if(obj instanceof Mesh) {\n this.highlights.add(obj);\n }\n });\n return this;\n }\n\n protected make(): void {\n this.name = 'Appliance';\n this.userData.isAppliance = true;\n this.userData.isRelocatable = true;\n\n this.hit = new Mesh(new BoxGeometry(), hitMaterial);\n this.hit.geometry.translate(0.5, 0.5, 0.5);\n //(this.hit.material as MeshStandardMaterial).transparent = true;\n this.hit.visible = false;\n this.hit.userData.isSelectable = true;\n this.hit.userData.isRelocatable = true;\n this.add(this.hit);\n }\n\n protected bind(): void {\n const\n updateAppearance = this.updateAppearance.bind(this),\n updateScale = this.updateScale.bind(this);\n\n this.model.bind('type', updateAppearance);\n this.model.on('make', updateAppearance);\n this.model.on('model', updateAppearance);\n\n this.model.on('width', updateScale);\n this.model.on('height', updateScale);\n this.model.on('depth', updateScale);\n\n this.model.bind('userChoice', async () => {\n if(this.model.userChoice == 'location') {\n this.check = await ml.get(`${config.models}/checkmark.glb`);\n\n // default position is the upper right\n this.check.position.x = this.model.width - 4;\n this.check.position.y = this.model.height - 4;\n this.check.position.z = this.model.depth + 0.25;\n\n switch(this.model.type) {\n case 'sink':\n this.check.position.x = this.model.width / 2;\n this.check.position.y = 3;\n this.check.position.z = this.model.depth;\n break;\n case 'farmhouse-sink':\n this.check.position.x = this.model.width / 2;\n break;\n\n }\n\n this.add(this.check);\n } else {\n this.check?.removeFromParent();\n delete this.check;\n }\n });\n }\n\n updateScale() {\n const { width, height, depth } = this.model;\n\n // TODO: need to use a box instead\n this.hit.scale.set(width, height, depth);\n this.hit.position.set(0, 0, 0);\n\n if(this.root instanceof Mesh && this.root.geometry instanceof BoxGeometry) {\n this.root.scale.set(1, 1, 1);\n this.root.rotation.set(0, 0, 0);\n } else {\n getGeometrySize(this.root, this.box);\n\n const\n w = this.box.max.x - this.box.min.x,\n h = this.box.max.y - this.box.min.y,\n d = this.box.max.z - this.box.min.z,\n sx = width == null ? 1 : width/w,\n sy = height == null ? 1 : height/h,\n sz = depth == null ? 1 : depth/d;\n\n this.root.scale.set(1, 1, 1);\n this.root.rotation.set(0, 0, 0);\n // TODO: investigate why this is inconsistent\n // compensate for the x-offset of the appliance model, which\n // probably has its origin centered (possibly eyballed). Note also\n // that we're rotating this 180 degrees, so it may look funny that\n // we're using the max here instead of the min.\n this.root.position.x = this.box.max.x * sx;\n this.root.rotation.y = Math.PI;\n this.root.scale.set(sx, sy, sz);\n }\n }\n\n updateAppearance() {\n this.updates.queue(\n () => this.loadAsset(),\n (object: Object3D) => {\n this.highlights.clear();\n object.traverse(obj => {\n if(obj instanceof Mesh) {\n this.highlights.add(obj);\n }\n });\n this.root?.removeFromParent();\n this.root = object;\n\n prepModel(this.root);\n// this.root.traverse(obj => {\n// if(obj instanceof Mesh) {\n// obj.material.envMap = mfac.textureCube;\n// obj.scale.set(1, 1, 1);\n// obj.castShadow = obj.receiveShadow = true;\n// }\n// });\n\n this.add(this.root);\n\n this.updateScale();\n\n this.pipelineUpdate();\n });\n }\n\n /**\n * Loads and sets up materials for generic assets.\n */\n async loadAsset() {\n switch(this.model.type) {\n case 'cooktop':\n return await ml.get(`${config.models}/gas-tabletop_02.glb`);\n\n case 'dishwasher':\n return await ml.get(`${config.models}/dishwasher_03.glb`);\n\n case 'microwave':\n return await ml.get(`${config.models}/microwave_01.glb`);\n\n case 'oven':\n return await ml.get(`${config.models}/oven_02_lo.glb`);\n\n case 'farmhouse-sink':\n this.faucet = await ml.get(`${config.models}/faucet_05.glb`);\n this.add(this.faucet);\n prepModel(this.faucet);\n this.faucet.position.set(this.model.width/2, 10, -2.5);\n this.faucet.rotation.set(0, Math.PI, 0);\n return await ml.get(`${config.models}/sink_06.glb`);\n\n case 'sink':\n this.faucet = await ml.get(`${config.models}/faucet_05.glb`);\n this.add(this.faucet);\n prepModel(this.faucet);\n this.faucet.position.set(this.model.width/2, 0, -3.5);\n this.faucet.rotation.set(0, Math.PI, 0);\n return await ml.get(`${config.models}/sink_07.glb`);\n\n case 'refrigerator':\n return await ml.get(`${config.models}/refrigerator-full_04_lo.glb`);\n\n case 'range':\n return await ml.get(`${config.models}/gas-range-oven-combo_04_lo.glb`);\n\n default:\n // this is temporary ... we shouldn't see these in production\n // TODO: remove this branch\n const { width, height, depth } = this.model;\n const geo = new BoxGeometry(width, height, depth);\n geo.translate(width/2, height/2, depth/2);\n const mesh = new Mesh(\n geo, new MeshStandardMaterial({color: 0x808080}));\n mesh.castShadow = mesh.receiveShadow = true;\n return mesh;\n }\n }\n}\n\n","/**\n * Just a plain exception, but with a unique type so you know where it came\n * from when you catch it.\n */\nexport class MeshWriterError extends Error { }\n\nexport type TypedArray= Int8Array | Uint8Array | Uint8ClampedArray | Int16Array\n | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array;\n\nexport type TypedArrayConstructor =\n typeof Int8Array\n | typeof Uint8Array\n | typeof Uint8ClampedArray\n | typeof Int16Array\n | typeof Uint16Array\n | typeof Int32Array\n | typeof Uint32Array\n | typeof Float32Array\n | typeof Float64Array\n ;\n\n/**\n* The Attr class describes attributes of buffer geometry. This is related to\n* the three.js BufferAttribute class, but in this case it doesn't store the\n* data or implement operations on that data. Further, we make the strong\n* assumption that the data is never normalized integer data, or that if it is,\n* then the underlying operations will deal with that knowledge based on the\n* attribute name, e.g. if we're dealing with vertext colors which are in some\n* sense normalized data.\n* @param {string} name - The attribute name. \"position\" for position, \"uv\" for\n* UV coordinates, \"normal\" for vertex normals, or \"color\" for vertex colors.\n* @param {number} size - The number of array elements that each vertx\n* occupies. For UVs this is 2, and for the other standard attributes it's 3.\n* @param {number} count - How many elements are in the underlying type array.\n* The length of the typed array will be size*count. The byte length of the\n* underlying array buffer will be size*count*type.BYTES_PER_ELEMENT.\n* @param {Function} type - The TypedArray constructor that pertains to the\n* underlying data.\n*/\nexport class Attr {\n name: string;\n size: number;\n count: number;\n type: TypedArrayConstructor;\n\n constructor(name: string, size: number, count: number, type: TypedArrayConstructor) {\n this.name = name;\n this.size = size;\n this.count = count;\n this.type = type;\n }\n\n get length() {\n return this.size * this.count;\n }\n\n get byteLength() {\n return this.size * this.count * this.type.BYTES_PER_ELEMENT;\n }\n}\n\n/**\n * The attribute map is a regular JavaScript Map object that also tracks\n * attributes by their names. In TypeScript generic syntax, this would be a\n * Map. The byName method provides easy access to the\n * attribute and data in the attribute map.\n */\nexport class AttrMap extends Map {\n nameMap: Map;\n\n constructor() {\n super();\n this.nameMap = new Map();\n }\n\n set(attr: Attr, data: TypedArray) {\n super.set(attr, data);\n this.nameMap.set(attr.name, [attr, data]);\n return this;\n }\n\n byName(name: string) {\n return this.nameMap.get(name);\n }\n}\n\n/**\n* The MeshWriter is an abstract base class that implements the generating\n* procedure.\n*/\nexport default abstract class MeshWriter {\n\n /**\n * Allocates array buffer space for each attribute and passes the\n * appropriate arrays to the implementer's `write` method.\n * @returns A mapping from attributes to their\n * binary data represented as TypedArray instances. Note that they all point\n * to a single contiguous byte buffer in memory.\n */\n generate(): AttrMap {\n const attrMap = new AttrMap();\n let totalSize = 0;\n const attrOffsets = new Map();\n const attrLengths = new Map();\n for(const attr of this.attrs) {\n attrOffsets.set(attr, totalSize);\n attrLengths.set(attr, attr.length);\n totalSize += attr.byteLength;\n }\n\n // Memory allocation is the biggest performance hit we can sustain, so\n // allocating all the memory for every operation we're about to do ...\n // all at once ... is supposed to be our big performance win with this\n // architecture.\n const buffer = new ArrayBuffer(totalSize);\n\n for(const attr of attrOffsets.keys()) {\n const offset = attrOffsets.get(attr);\n const len = attrLengths.get(attr);\n const data = new attr.type(buffer, offset, len);\n attrMap.set(attr, data);\n }\n\n this.write(attrMap);\n return attrMap;\n }\n\n /**\n * Implementing classes should override the `attrs` method.\n * @returns the set of attributes with size and type data.\n */\n abstract get attrs(): Set;\n\n /**\n * Implementing classes should override the write method.\n * @param attrMap - the attributes returned by the attrs property mapped\n * onto TypedArray instances that can received the data. Note that the\n * `generate` implementation uses a single ArrayBuffer to consolidate all\n * the TypedArray instances into one contiguous memory block.\n */\n abstract write(attrMap: AttrMap): void;\n\n}\n","import MeshWriter, {\n Attr,\n AttrMap,\n MeshWriterError,\n TypedArray,\n TypedArrayConstructor\n} from './MeshWriter';\n\n/**\n * Given two TypedArray implementations, choose the larger one or whichever is\n * a Float.\n */\nexport const upgradeType = (A: TypedArrayConstructor, B: TypedArrayConstructor) => {\n const list = [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array];\n const ai = list.indexOf(A);\n const bi = list.indexOf(B);\n\n console.assert(ai !== -1,\n `The type \"${A}\" doesn't appear to be a supported TypedArray.`);\n console.assert(bi !== -1,\n `The type \"${B}\" doesn't appear to be a supported TypedArray.`);\n\n const i = Math.max(ai, bi);\n return list[i];\n}\n\n/**\n * Find an item in an iterator. This is like Array.find, but you don't have to\n * convert the whole thing to an array. This is used in the Join operation.\n */\nconst find = (iter: Iterable, fn: (item: T) => boolean) => {\n for(const item of iter) {\n if(fn(item)) return item;\n }\n}\n\n/**\n * The Join operation concatenates a list of MeshWriter objects into a single\n * MeshWriter without transforming the constituents.\n */\nexport class Join extends MeshWriter {\n elements: MeshWriter[];\n\n constructor(elements: MeshWriter[]) {\n super();\n this.elements = elements;\n }\n\n get attrs() {\n const byName = new Map();\n for(const elt of this.elements) {\n for(const attr of elt.attrs) {\n let newAttr = byName.get(attr.name);\n if(newAttr) {\n if(newAttr.size != attr.size)\n throw new MeshWriterError(\n `The attribute \"${attr.name}\" has incompatible sizes \"${attr.size}\" and \"${newAttr.size}\".`);\n newAttr.count += attr.count;\n newAttr.type = upgradeType(newAttr.type, attr.type);\n } else {\n newAttr = new Attr(\n attr.name, attr.size, attr.count, attr.type);\n byName.set(attr.name, newAttr);\n }\n }\n }\n return new Set(byName.values());\n }\n\n write(attrMap: AttrMap) {\n // The set of attributes for each element, keyed by the element\n let attrsByElt: Map< MeshWriter, Set > = new Map();\n // The mappings we will eventually pass to each element, once we've\n // placed them at the right offset in the data arrays we received\n let eltAttrMaps: Map< MeshWriter, AttrMap> = new Map();\n\n for(const elt of this.elements) {\n attrsByElt.set(elt, elt.attrs);\n // create empty mappings which we'll populate next\n eltAttrMaps.set(elt, new AttrMap());\n }\n\n // In this loop we populate the attrMaps that we will pass to each\n // element's write method.\n for(const [attr, data] of attrMap) {\n let byteOffset = 0;\n\n for(const elt of this.elements) {\n const eltAttrs = attrsByElt.get(elt);\n const eltAttr = find(eltAttrs, a => a.name == attr.name);\n const newData = new eltAttr.type(\n data.buffer,\n data.byteOffset + byteOffset,\n eltAttr.length\n );\n byteOffset += newData.byteLength;\n\n const eltAttrMap = eltAttrMaps.get(elt);\n eltAttrMap.set(eltAttr, newData);\n }\n }\n\n for(const [elt, eltAttrMap] of eltAttrMaps.entries()) {\n elt.write(eltAttrMap);\n }\n }\n}\n\nexport class Translate extends MeshWriter {\n mesh: MeshWriter;\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number, mesh: MeshWriter) {\n super();\n this.mesh = mesh;\n this.x = x;\n this.y = y;\n this.z = z;\n }\n\n get attrs() { return this.mesh.attrs; }\n\n write(attrMap: AttrMap) {\n this.mesh.write(attrMap);\n const x = this.x,\n y = this.y,\n z = this.z,\n [_, pos] = attrMap.byName('position'),\n len = pos.length;\n for(let i=0; i {\n const t = d[i];\n d[i] = d[j];\n d[j] = t;\n }\n\n this.mesh.write(attrMap);\n for(let [attr, d] of attrMap.entries()) {\n const\n inc = attr.size * 3,\n off = attr.size * 2,\n imax = d.length;\n for(let i=0; i < imax; i+=inc) {\n const jmax = i+attr.size\n for(let j=i; j < jmax; j++) {\n swap(d, j, j+off);\n }\n }\n }\n }\n}\n\n\n/**\n * Adds a UV attribute to the underlying mesh, if it doesn't have one already.\n * Copies the X, Y coordinates of the position attribute to the UV attribute.\n */\nexport class XY2UV extends MeshWriter {\n mesh: MeshWriter;\n\n constructor(mesh: MeshWriter) {\n super();\n this.mesh = mesh;\n }\n\n get attrs() {\n let result = new Set(this.mesh.attrs);\n let count: number, type: TypedArrayConstructor;\n for(let attr of this.mesh.attrs) {\n if(attr.name === 'uv') {\n result.delete(attr);\n }\n else if(attr.name === 'position') {\n count = attr.count;\n type = attr.type;\n }\n }\n result.add(new Attr('uv', 2, count, type))\n return result;\n }\n\n write(attrMap: AttrMap) {\n this.mesh.write(attrMap);\n const\n [_posAttr, pos] = attrMap.byName('position'),\n [_uvAttr, uv] = attrMap.byName('uv'),\n len = pos.length;\n // This is a little weird, but it incremests through i and j, copying\n // each XY to UV, and skpping Z.\n for(let i=0, j=0; i < len; ) {\n uv[j++] = pos[i++]; // u = x\n uv[j++] = pos[i++]; // v = y\n i++; // skip z\n }\n }\n}\n\n\n/**\n * Sets the normal for all vertexes to the given (x, y, z) triplet. Will add\n * a normal attribute if none exists.\n */\nexport class SetNormal extends MeshWriter {\n mesh: MeshWriter;\n x: number;\n y: number;\n z: number;\n\n constructor(x: number, y: number, z: number, mesh: MeshWriter) {\n super();\n this.mesh = mesh;\n this.x = x; this.y = y; this.z = z;\n }\n\n get attrs() {\n let result = new Set(this.mesh.attrs);\n let count: number, type: TypedArrayConstructor;\n for(let attr of this.mesh.attrs) {\n if(attr.name === 'normal') {\n result.delete(attr);\n }\n else if(attr.name === 'position') {\n count = attr.count;\n type = attr.type;\n }\n }\n result.add(new Attr('normal', 3, count, type))\n return result;\n }\n\n write(attrMap: AttrMap) {\n this.mesh.write(attrMap);\n const\n [_normalAttr, n] = attrMap.byName('normal'),\n len = n.length,\n x = this.x, y = this.y, z = this.z;\n for(let i=0; i < len; ) {\n n[i++] = x; n[i++] = y; n[i++] = z;\n }\n }\n}\n","import MeshWriter, { Attr, AttrMap, MeshWriterError, TypedArray } from './MeshWriter';\nimport { Join } from './ops';\nimport {\n BufferAttribute,\n BufferGeometry,\n Group,\n LineBasicMaterial,\n LineSegments as LineSegments,\n Matrix4,\n Vector3 } from 'three';\n\n/**\n * A ThreeJSMesh is a MeshWriter that sources mesh data from a\n * BufferGeometry instance. It also provides a static method to create a\n * BufferGeometry from generated mesh data.\n * @param {BufferGeometry} geo - The BufferGeometry instance. This is\n * converted to non-indexed form (if required), otherwise the class retains a\n * copy of the given geometry. If you want to mutate the original, be aware that\n * that mutation will be observed when `attr` or `write` are called.\n */\nexport class ThreeJSMesh extends MeshWriter {\n geo: BufferGeometry;\n\n constructor(geo: BufferGeometry) {\n super();\n if(geo.index === null) {\n this.geo = geo;\n } else {\n this.geo = geo.toNonIndexed();\n }\n }\n\n /**\n * This implementation of the MeshWriter `attr` interface method produces\n * values that represent the underlying BufferGeometry.\n */\n get attrs() {\n const attrSet: Set = new Set();\n for(const attrName of Object.keys(this.geo.attributes)) {\n const tAttr = this.geo.getAttribute(attrName);\n const size = tAttr.itemSize;\n const count = tAttr.count;\n const type = Object.getPrototypeOf(tAttr.array).constructor;\n attrSet.add(new Attr(attrName, size, count, type));\n }\n return attrSet;\n }\n\n write(attrMap: AttrMap) {\n for(const [attr, data] of attrMap.entries()) {\n const tAttr = this.geo.getAttribute(attr.name);\n data.set(tAttr.array);\n }\n }\n\n /**\n * Transforms an attribute mapping, the sort of map returned from\n * MeshWriter.generate(), into a three.js BufferGeometry instance. Note that\n * this implementation currently uses the r102 API, which has changed\n * in more recent versions.\n */\n static toBufferGeometry(attrMap: AttrMap) {\n const geo = new BufferGeometry();\n for(const [attr, data] of attrMap.entries()) {\n const tAttr = new BufferAttribute(data, attr.size);\n geo.setAttribute(attr.name, tAttr);\n }\n return geo;\n }\n}\n\n\n/**\n * Generate an axis-aligned XY plane with its lower-left vertex at (x, y), and\n * its upper right vertex at (x+width, y+height).\n */\nexport class PlaneMesh extends MeshWriter {\n x: number;\n y: number;\n width: number;\n height: number;\n\n constructor(x: number, y: number, width: number, height: number) {\n super();\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n get attrs() {\n let result: Set = new Set();\n // name, size, count, type\n result.add(new Attr('position', 3, 6, Float32Array));\n return result;\n }\n\n write(attrMap: AttrMap) {\n const x = this.x,\n y = this.y,\n w = this.width, h = this.height,\n ax = x, ay = y,\n bx = x+w, by = y,\n cx = x+w, cy = y+h,\n dx = x, dy = y+h,\n [_, pos] = attrMap.byName('position');\n PlaneMesh.write3(pos, 0, ax, ay, 0, bx, by, 0, cx, cy, 0, dx, dy, 0);\n }\n\n /**\n * A convenience method to write an arbitrary quad in 3D space. This is\n * actually more general than the PlaneMesh, which is always in the XY plane\n * with a zero Z coordinate. The triangles are written counter-clocwise,\n * assuming that the vertexes are also given counterclockwise. Thus the\n * two sub-triangles are ABC and ACD. This can write position, normal, or\n * vertex color data. The equivalent for UVs is write2().\n *\n * D +------ + C\n * | /|\n * | / |\n * | / |\n * |/ |\n * A +------ + B\n *\n * @param d - The array to fill with data\n * @param i - the index at which to begin writing\n * @returns - the next index one might want to write into; this\n * helps if you want to do a bunch of quads and need help keeping track. It\n * will always be i+18 though, if you don't want to use it.\n */\n static write3(d: TypedArray, i: number,\n ax: number, ay: number, az: number,\n bx: number, by: number, bz: number,\n cx: number, cy: number, cz: number,\n dx: number, dy: number, dz: number)\n {\n // write the triangle ABC\n d[i++] = ax; d[i++] = ay; d[i++] = az;\n d[i++] = bx; d[i++] = by; d[i++] = bz;\n d[i++] = cx; d[i++] = cy; d[i++] = cz;\n\n // Now the triangle ACD\n d[i++] = ax; d[i++] = ay; d[i++] = az;\n d[i++] = cx; d[i++] = cy; d[i++] = cz;\n d[i++] = dx; d[i++] = dy; d[i++] = dz;\n\n return i;\n }\n\n /**\n * This is equivalent to write3, but writes two coordinates per vertex,\n * appropriate for UV coordinates. See the docs for write3.\n */\n static write2(d: TypedArray, i: number,\n au: number, av: number,\n bu: number, bv: number,\n cu: number, cv: number,\n du: number, dv: number)\n {\n // Triangle ABC\n d[i++] = au; d[i++] = av;\n d[i++] = bu; d[i++] = bv;\n d[i++] = cu; d[i++] = cv;\n\n // Triangle ACD\n d[i++] = au; d[i++] = av;\n d[i++] = cu; d[i++] = cv;\n d[i++] = du; d[i++] = dv;\n\n return i;\n }\n}\n\n\n/**\n * Generate a 90 degree triangle fan inside a unit plane. The `n` parameter\n * specifies how many vertexes to generate along the path of the arc. `n=2` will\n * generate a degenerate arc that's really just a triangle (half a quad). Larger\n * values of `n` will better approximate the arc with less faceting.\n */\nexport class ArcMesh extends MeshWriter {\n n: number;\n\n constructor(n: number) {\n super();\n if(n < 2) throw new MeshWriterError('An ArcMesh must have n >= 2.');\n this.n = n;\n }\n\n get attrs() {\n const result = new Set();\n const count = 3 * (this.n-1);\n // name, size, count, type\n result.add(new Attr('position', 3, count, Float32Array));\n return result;\n }\n\n write(attrMap: AttrMap) {\n const n = this.n,\n nm1 = n - 1,\n inc = Math.PI / (2*(n-1)),\n [_pattr, pos] = attrMap.byName('position');\n\n let b = [1, 0];\n for(let i=0, j=0, k=0, t=inc; i < nm1; i++, j+=9, k+=6, t+=inc) {\n const c = [Math.cos(t), Math.sin(t)];\n pos.set([0, 0, 0, ...b, 0, ...c, 0], j);\n b = c;\n }\n }\n}\n\n\nexport class InvArcMesh extends MeshWriter {\n n: number;\n\n constructor(n: number) {\n super()\n if(n < 2) throw new MeshWriterError('An InvArcMesh must have n >= 2');\n this.n = n;\n }\n\n get attrs() {\n const result = new Set();\n const count = 3 * (this.n-1);\n // name, size, count, type\n result.add(new Attr('position', 3, count, Float32Array));\n return result;\n }\n\n write(attrMap: AttrMap) {\n const n = this.n,\n nm1 = n - 1,\n inc = Math.PI / (2*nm1),\n [_pattr, pos] = attrMap.byName('position'),\n start = Math.PI + inc;\n\n let c = [0, 1];\n for(let i=0, j=0, k=0, t=inc; i < nm1; i++, j+=9, k+=6, t+=inc) {\n const b = [1-Math.cos(t), 1-Math.sin(t)];\n pos.set([0, 0, 0, ...b, 0, ...c, 0], j);\n c = b;\n }\n }\n}\n\n\n/**\n * Generates a quad with a round hole centered inside it. If n=0, the hole is\n * diamond shaped and the output has eight triangles. If n=1, then the hole is\n * octagonal because each quarter is cut once. If n=2, each quarter is cut twice\n * so that the hole has 12 vertexes. So the general formula for vertexes around\n * the hole is (n+1)*4.\n */\nexport class HoleMesh extends MeshWriter {\n width: number;\n height: number;\n radius: number;\n n: number;\n\n constructor(width: number, height: number, radius: number, n: number) {\n super();\n this.n = n;\n this.width = width;\n this.height = height;\n this.radius = radius;\n }\n\n get attrs() {\n const result = new Set();\n // Eight triangles at n=0, then four more for every n over 0. Here count\n // signifies the number of vertexes.\n const count = 24 + 12*this.n;\n // name, size, count, type\n result.add(new Attr('position', 3, count, Float32Array));\n return result;\n }\n\n write(attrMap: AttrMap) {\n const n = this.n,\n nm1 = n - 1,\n width = this.width,\n height = this.height,\n radius = this.radius,\n ox = width/2,\n oy = height/2,\n inc = n === 0 ? Math.PI/2 : Math.PI / (2*(n+1)),\n [_p, pos] = attrMap.byName('position'),\n len=4+n*4;\n\n // Usually I would just accumulate inc into the t parameter on each\n // loop, i.e. `t+=inc`, but here that leads to an accumulated error\n // that pushes the final vertex past one full revolution.\n let a = [ox+radius, oy], j = 0, k = 0;\n for(let i=0; i < len; i++, j+=9, k+=6) {\n const t = (i+1)*inc,\n sin = Math.sin(t),\n cos = Math.cos(t),\n b = [cos < 0 ? 0 : width, sin < 0 ? 0 : height],\n c = [ox+cos*radius, oy+sin*radius];\n pos.set([...a, 0, ...b, 0, ...c, 0], j);\n a = c;\n }\n\n // Now we manually fill in the last four triangles that connect the\n // edges of the quad to the top, bottom, left\n pos.set([\n // top\n 0, height, 0, ox, oy+radius, 0, width, height, 0,\n // right\n width, height, 0, ox+radius, oy, 0, width, 0, 0,\n // bottom\n 0, 0, 0, width, 0, 0, ox, oy-radius, 0,\n // left\n 0, 0, 0, ox-radius, oy, 0, 0, height, 0\n ], j);\n }\n}\n\n\nexport class PolygridMesh extends MeshWriter {\n voids: [number, number, number, number][];\n nodes: [number, number][];\n join: Join;\n\n constructor() {\n super();\n this.voids = [];\n this.nodes = [];\n }\n\n rect(x: number, y: number, width: number, height: number) {\n this.nodes.push([x, y], [x+width, y+height]);\n }\n\n void(x: number, y: number, width: number, height: number) {\n this.nodes.push([x, y], [x+width, y+height]);\n this.voids.push([x, y, x+width, y+height]);\n }\n\n isInVoid(x1: number, y1: number, x2: number, y2: number) {\n for(let v of this.voids) {\n if(x1 >= v[0] && y1 >= v[1] && x2 <= v[2] && y2 <= v[3]) {\n return true;\n }\n }\n return false;\n }\n\n get attrs() {\n let xs: Array | Set = new Set(),\n ys: Array | Set = new Set();\n for(let [x, y] of this.nodes) {\n xs.add(x); ys.add(y);\n }\n\n xs = Array.from(xs);\n ys = Array.from(ys);\n const comp = (a: number, b: number) => a-b;\n xs.sort(comp); ys.sort(comp);\n const xcount = xs.length - 1,\n ycount = ys.length - 1;\n\n const planes = new Array();\n for(let i=0; i < xcount; i++) {\n for(let j=0; j < ycount; j++) {\n if(this.isInVoid(xs[i], ys[j], xs[i+1], ys[j+1])) {\n continue;\n } else {\n const x = xs[i],\n y = ys[j],\n width = xs[i+1] - x,\n height = ys[j+1] - y;\n planes.push(new PlaneMesh(x, y, width, height));\n }\n }\n }\n\n this.join = new Join(planes);\n return this.join.attrs;\n }\n\n write(attrMap: AttrMap) {\n this.join.write(attrMap);\n }\n\n}\n\n/**\n * The EdgeList class represents 2D data in the XY plane that can be\n * extruded around another EdgeList. It's very important that polygons used\n * as the path for extrusions have vertex normals at each vertex. Vertex\n * normals imputed by bisecting the angle to neighboring vertices will be\n * incorrect at many boundaries.\n *\n * EdgeLists built in the counter-clockwise direction will have their\n * exterior surface on the outside.\n *\n * We have some redundant storage when edges are connected and have smooth\n * normals, but having each edge store both endpoints with unique normals\n * means the edge list can have gaps\n */\nexport class EdgeList {\n verts: number[];\n closed: boolean;\n\n lastX: number = 0;\n lastY: number = 0;\n\n constructor() {\n this.verts = [];\n this.closed = false;\n }\n\n get edgeCount() {\n return this.verts.length/8;\n }\n \n /**\n * Yields triplets of edges as `{prev, edge, next}` where each edge is in\n * the form [x1, y1, nx1, ny1, x2, y2, nx2, ny2]. The `n` prefixed entries\n * are the normal vector (pure direction).\n *\n * If there is one edge, the iterator will yield one edge. If there are two\n * or more edges and the `closed` property is true, then you will get an \n * additional edge that goes from the last to the first vertex.\n *\n * The `prev` and `next` edges may be null for the first and last edges\n * respectively. If the `closed` property is true, then the `prev` and\n * `next` edges will never be null and will \"wrap around\" the list of\n * vertices. In the case of a single edge with `closed = true`, this\n * doesn't make much sense, but it will happen without error.\n */\n *edges() {\n const v = this.verts;\n\n // If we don't even have one edge, there's nothing we can do\n if(v.length < 8) {\n return;\n }\n\n // Take care of the first edge as a special case.\n {\n const prev = this.closed ? v.slice(-8) : null;\n const edge = v.slice(0, 8);\n let next = null;\n if(v.length >= 16) {\n next = v.slice(8, 16);\n } else if(this.closed) {\n next = v.slice(-8);\n }\n\n yield { prev, edge, next };\n }\n\n // If we only had one edge, we're done, so we return early\n if(v.length == 8) {\n return;\n }\n\n // Loop over all the edge pairs in the middle of the array. This might\n // be none if there are two edges.\n const limit = this.edgeCount - 1;\n for(let i=1, j=8; i < limit; i++, j+=8) {\n const prev = v.slice(j-8, j);\n const edge = v.slice(j, j+8);\n const next = v.slice(j+8, j+16);\n\n yield { prev, edge, next };\n }\n\n // Do the last explicit edge as a special case.\n if(v.length >= 16) {\n const prev = v.slice(-16, -8);\n const edge = v.slice(-8);\n const next = this.closed ? v.slice(0, 8) : null;\n yield { prev, edge, next };\n }\n }\n\n push(ax: number, ay: number, anx: number, any: number,\n bx: number, by: number, bnx: number, bny: number)\n {\n this.verts.push(ax, ay, anx, any, bx, by, bnx, bny);\n this.lastX = bx;\n this.lastY = by;\n }\n\n /**\n * Pushes another point, using an automatic vertex normal that's\n * perpendicular to the path of travel.\n */\n move(dx: number, dy: number) {\n // nx, ny are a 90 degree clockwise rotation from the vector (dx, dy),\n // and they're normalized so that they'll give a good dot product later.\n const\n r = Math.sqrt(dx*dx + dy*dy),\n nx = dy/r,\n ny = -dx/r,\n v = this.verts,\n l = v.length,\n x = v[l-4] + dx,\n y = v[l-3] + dy;\n this.push(this.lastX, this.lastY, nx, ny, x, y, nx, ny);\n this.lastX = x;\n this.lastY = y;\n }\n\n /**\n * Automatically closes a path by moving to the first point. This might be\n * convenient in some cases. A path can be manually marked as closed by\n * setting the `closed` property, provided the last point is the same as the\n * first.\n */\n close() {\n const\n v = this.verts,\n l = v.length,\n x1 = v[0], y1 = v[1],\n x2 = v[l-4], y2 = v[l-3];\n\n this.move(x1-x2, y1-y2);\n\n this.closed = true;\n }\n\n /**\n * Starting from wherever the last point was drawn, draw an arc with n\n * segments. The minimum n is 1, lower values are ignored.\n */\n arc(start: number, theta: number, r: number, n: number) {\n n = Math.max(1, n);\n const\n x = this.lastX,\n y = this.lastY,\n cx = x - r*Math.cos(start),\n cy = y - r*Math.sin(start),\n inc = theta / n;\n\n for(let i=1; i <= n; i++) {\n const\n t = start + i*inc,\n cos = Math.cos(t),\n sin = Math.sin(t);\n // Push the point, plus a normal that extends along the radius\n this.push(this.lastX, this.lastY, cos, sin,\n cx + (r*cos), cy + (r*sin), cos, sin);\n }\n }\n\n /**\n * This generates a BufferGeometry appropriate for use with three.js\n * LineSegments. Each output line segment either represents a segment of\n * the polygon, or a normal vector.\n */\n toBufferGeometry() {\n const\n geo = new BufferGeometry(),\n d = new Float32Array(6*this.edgeCount),\n pos = new BufferAttribute(d, 3);\n\n let i = 0;\n for(const edge of this.edges()) {\n const [x1, y1, _nx1, _ny1, x2, y2, _nx2, _ny2] = edge.edge;\n\n d[i] = x1;\n d[i+1] = y1;\n\n d[i+3] = x2;\n d[i+4] = y2;\n\n i+= 6;\n }\n\n geo.setAttribute('position', pos);\n return geo;\n }\n\n normalsToBufferGeometry() {\n const\n geo = new BufferGeometry(),\n d = new Float32Array(12*this.edgeCount),\n pos = new BufferAttribute(d, 3);\n\n let i = 0;\n for(const edge of this.edges()) {\n const [x1, y1, nx1, ny1, x2, y2, nx2, ny2] = edge.edge;\n\n d[i] = x1;\n d[i+1] = y1;\n\n d[i+3] = x1+nx1;\n d[i+4] = y1+ny1;\n\n d[i+6] = x2;\n d[i+7] = y2;\n\n d[i+9] = x2+nx2;\n d[i+10] = y2+ny2;\n\n i+= 12;\n }\n\n geo.setAttribute('position', pos);\n return geo;\n }\n\n /**\n * Convert this to a group of `THREE.LineSegments` that can be added\n * directly to the scene.\n */\n toLineSegments(color: number = 0x000000, normalColor: number = 0xFF00FF) {\n\n const\n group = new Group(),\n edges = this.toBufferGeometry(),\n normals = this.normalsToBufferGeometry();\n\n group.add(new LineSegments(edges, new LineBasicMaterial({color})));\n group.add(new LineSegments(\n normals, new LineBasicMaterial({color: normalColor})));\n return group;\n }\n\n /**\n * Examines every edge in a buffer geometry and extracts the vertex edge\n * position and normals for the edges that lay on the ground plane with\n * normals also in the ground plane. From a practical perspective, this\n * means creating a model of a profile in Blender that appears in elevation\n * (in the XZ plane), and is extruded towards the front (negative Y axis).\n * When this comes into three.js, it will be in the XY plane, which makes\n * it more convenient to go from XYZ to XY. See 'jarlin_crown.blend' for an\n * example.\n *\n * Note also, that modeling the profiles in this way is basically necessary\n * to get Blender's modeling tools to assign the normals that we want.\n * Modeling the profile as just edges without faces, or only as faces in a\n * single plane, would result in normals pointing out of the plane, whereas\n * we want normals that make sense for the extruded surface, AKA the swept\n * profile.\n *\n * Since we're using the GLB format for this, we assume that the input\n * is indexed.\n */\n fromBufferGeometry(geo: BufferGeometry) {\n if(geo.index == null) {\n throw new MeshWriterError('EdgeList.fromBufferGeometry only works with indexed geometries');\n }\n\n const\n p = geo.getAttribute('position')?.array,\n n = geo.getAttribute('normal')?.array,\n idx = geo.index.array;\n\n if(n == null) {\n throw new MeshWriterError('EdgeList.fromBufferGeometry requires normal data in the input geometry');\n }\n\n // threshold of being near zero\n const lt = 1e-5;\n const gt = -lt;\n\n // iterate over the index array in groups of three (triangles) and stop\n // when the last vertex is at the end of the index array\n for(let i = 0, j = 1, k = 2; k < geo.index.array.length; i+=3, j+=3, k+=3)\n {\n // we'll extract points a, b, and c from the array, along with\n // their corresponding normal vectors. We throw away the z\n // component, but we do use it to check if we're in the XY plane\n const\n // indices of each coordinate\n iax = idx[i]*3, iay = iax+1, iaz = iay+1,\n ibx = idx[j]*3, iby = ibx+1, ibz = iby+1,\n icx = idx[k]*3, icy = icx+1, icz = icy+1,\n \n // position of each vertex\n pax = p[iax], pay = p[iay], paz = p[iaz],\n pbx = p[ibx], pby = p[iby], pbz = p[ibz],\n pcx = p[icx], pcy = p[icy], pcz = p[icz],\n\n // normal of each vertex\n nax = n[iax], nay = n[iay], naz = n[iaz],\n nbx = n[ibx], nby = n[iby], nbz = n[ibz],\n ncx = n[icx], ncy = n[icy], ncz = n[icz],\n \n // a, b, c are booleans testing if the vertex and its normals\n // all lay in the XY plane, i.e. z = 0;\n a = paz > gt && paz < lt && naz > gt && naz < lt,\n b = pbz > gt && pbz < lt && nbz > gt && nbz < lt,\n c = pcz > gt && pcz < lt && ncz > gt && ncz < lt;\n \n if(a && b) {\n this.push(pax, pay, nax, nay, pbx, pby, nbx, nby);\n }\n if (b && c) {\n this.push(pbx, pby, nbx, nby, pcx, pcy, ncx, ncy);\n }\n if (c && a) {\n this.push(pcx, pcy, ncx, ncy, pax, pay, nax, nay);\n }\n }\n this.sort();\n }\n\n /**\n * This is a subroutine of fromBufferGeometry that puts the edges in order\n * based on the assumption that the edge list is closed so we can start\n * from any random edge and get a good result. This also assumes that the\n * edges are all connected. Breaks in the profile will produce bad results.\n */\n sort() {\n // we never have to fix the last edge because it's guaranteed to be\n // sorted correctly when we check the second-to-last edge.\n const limit = this.verts.length - 8;\n for(let i = 0; i < limit; i+= 8) {\n // if we label the two endpoints of the edge a and b, then b's x\n // and y coordinates are the fourth and fifth elements respectively\n const\n bx = this.verts[i+4],\n by = this.verts[i+5];\n\n {\n // continuing to label endpoints c and d as the endpoints of\n // the edge following ab.\n const\n cx = this.verts[i+8],\n cy = this.verts[i+9];\n // if the next edge is already connected to this one, then we\n // have no work to do in this loop iteration.\n if(bx == cx && by == cy) {\n continue;\n }\n }\n\n // We're searching for the edge that connects with this one. We\n // already checked the one right after position `i`, so now we\n // start with the one after that and go all the way through the\n // end of the array.\n for(let j = i+16; j < this.verts.length; j += 8) {\n const\n cx = this.verts[j],\n cy = this.verts[j+1];\n\n if(bx == cx && by == cy) {\n // We found the connection! The edge at i connects to the\n // edge at j. So we want to swap the edge after i (at i+8)\n // with the edge at j. Like any swap, we copy the first\n // destination into a teporary variable, `edge`.\n const edge = this.verts.slice(i+8, i+16);\n\n // Then we overwrite the area previously occupied by edge\n // with the data at j.\n this.verts.copyWithin(i+8, j, j+8);\n\n // Finally, we copy the temporary variable back into the\n // array at position j\n for(let k=0; k < 8; k++) {\n this.verts[j+k] = edge[k];\n }\n break;\n }\n }\n }\n }\n}\n\n\n/**\n * This is a bit different to the DiagridFaceMesh, which only provides a\n * repeatable subunit of the face grid. Here we provide the entire face grid\n * in one go.\n */\nexport class GridFaceMesh extends MeshWriter {\n width: number;\n height: number;\n thickness: number;\n countX: number;\n countY: number;\n\n constructor(width: number, height: number, thickness: number,\n countX: number, countY: number)\n {\n super();\n this.width = width;\n this.height = height;\n this.thickness = thickness;\n this.countX = countX;\n this.countY = countY;\n }\n\n get attrs() {\n // Count is how many vertexes we have... since we're working with\n // triangles, this is always a multiple of 3. Our horizontal quads run\n // the full span, uninterrupted. Our vertical quads are interrupted by\n // each of the horizontals, so they're multiplied by the number of\n // horizontal spans.\n\n const\n result = new Set(),\n cx = this.countX,\n cy = this.countY,\n h = cy - 1, // the count of horizontal quads\n v = (cx - 1) * cy, // the count of vertical quads\n count = 6 * (h + v); // two tris and three verts (6) per quad\n\n // name, size, count, type\n result.add(new Attr('position', 3, count, Float32Array));\n result.add(new Attr('uv', 2, count, Float32Array));\n return result;\n }\n\n write(attrMap: AttrMap) {\n const\n w = this.width,\n h = this.height,\n t = this.thickness,\n t2 = t/2,\n cx = this.countX,\n cy = this.countY,\n hinc = (w - t*(cx - 1)) / cx, // distance between horizals\n vinc = (h - t*(cy - 1)) / cy, // distance between verticals\n ut = t/w, // the thickness as a portion of the width\n vt = vinc/w,\n [_p, pos] = attrMap.byName('position'),\n [_u, uv] = attrMap.byName('uv');\n\n // Write the horizontal quads and the vertical quads above them\n let j = 0, k = 0;\n for(let i = 1; i < cy; i++) {\n const\n y0 = i*vinc + t*(i-1),\n y1 = y0 + t,\n y2 = y1 + vinc, // the top of the vertical quads for this row\n u0 = i * ut,\n u1 = u0 + ut;\n j = PlaneMesh.write3(pos, j,\n 0, y0, 0, // lower left\n w, y0, 0, // lower right\n w, y1, 0, // upper right\n 0, y1, 0); // upper left\n k = PlaneMesh.write2(uv, k,\n u1, 0, // lower left\n u1, 1, // lower right\n u0, 1, // upper right\n u0, 0); // upper left\n\n // write the vertical quads\n for(let m=1; m < cx; m++) {\n const\n x0 = m*hinc + t*(m-1),\n x1 = x0 + t,\n v0 = i * vt,\n v1 = v0 + vt;\n j = PlaneMesh.write3(pos, j,\n x0, y1, 0, // lower left\n x1, y1, 0, // lower right\n x1, y2, 0, // upper right\n x0, y2, 0); // upper left\n k = PlaneMesh.write2(uv, k,\n 0, v0, // lower left\n ut, v0, // lower right\n ut, v1, // upper right\n 0, v1); // upper left\n }\n }\n // Write the last row of vertical quads (right at the bottom)\n // write the vertical quads\n const y1 = 0, y2 = vinc;\n for(let m=1; m < cx; m++) {\n const\n x0 = m*hinc + t*(m-1),\n x1 = x0 + t,\n v0 = 0,\n v1 = vt;\n j = PlaneMesh.write3(pos, j,\n x0, y1, 0, // lower left\n x1, y1, 0, // lower right\n x1, y2, 0, // upper right\n x0, y2, 0); // upper left\n k = PlaneMesh.write2(uv, k,\n 0, v0, // lower left\n ut, v0, // lower right\n ut, v1, // upper right\n 0, v1); // upper left\n }\n }\n}\n\n\n/**\n * This matches the GridFaceMesh in that it produces all the boxes in one go.\n */\nexport class GridBoxMesh extends MeshWriter {\n width: number;\n height: number;\n depth: number;\n thickness: number;\n countX: number;\n countY: number;\n\n constructor(width: number, height: number, depth: number, thickness: number,\n countX: number, countY: number)\n {\n super();\n this.width = width;\n this.height = height;\n this.depth = depth;\n this.thickness = thickness;\n this.countX = countX;\n this.countY = countY;\n }\n\n get attrs() {\n // Count is how many vertexes we have... since we're working with\n // triangles, this is always a multiple of 3. Our horizontal quads run\n // the full span, uninterrupted. Our vertical quads are interrupted by\n // each of the horizontals, so they're multiplied by the number of\n // horizontal spans.\n\n const\n result = new Set(),\n cx = this.countX,\n cy = this.countY,\n h = 2*(cy - 1), // the count of horizontal quads\n v = cy*2*(cx - 1), // the count of vertical quads\n count = 6 * (h + v); // two tris and three verts (6) per quad\n\n // name, size, count, type\n result.add(new Attr('position', 3, count, Float32Array));\n result.add(new Attr('uv', 2, count, Float32Array));\n result.add(new Attr('normal', 3, count, Float32Array));\n return result;\n }\n\n write(attrMap: AttrMap) {\n const\n w = this.width,\n h = this.height,\n d = this.depth,\n t = this.thickness,\n t2 = t/2,\n cx = this.countX,\n cy = this.countY,\n hinc = (w - t*(cx - 1)) / cx, // distance between horizals\n vinc = (h - t*(cy - 1)) / cy, // distance between verticals\n ut = t/w, // the thickness as a portion of the width\n vt = vinc/w,\n [_p, pos] = attrMap.byName('position'),\n [_u, uv] = attrMap.byName('uv'),\n [_n, normal] = attrMap.byName('normal');\n\n // Write the horizontal quads and the vertical quads above them\n let j = 0, k = 0, n = 0;\n for(let i = 1; i < cy; i++) {\n const\n y0 = i*vinc + t*(i-1),\n y1 = y0 + t,\n y2 = y1 + vinc, // the top of the vertical quads for this row\n v0 = 0,\n v1 = d/w;\n // Lower horizontal quad\n j = PlaneMesh.write3(pos, j,\n 0, y0, 0, // back, lower left\n w, y0, 0, // back, lower right\n w, y0, d, // front, lower right\n 0, y0, d, // front, lower left\n );\n k = PlaneMesh.write2(uv, k,\n 0, v0, // lower left\n 1, v0, // lower right\n 1, v1, // upper right\n 0, v1); // upper left\n n = PlaneMesh.write3(normal, n,\n 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0 );\n\n // Upper horizontal quad\n j = PlaneMesh.write3(pos, j,\n w, y1, 0, // back, upper right\n 0, y1, 0, // back, upper left\n 0, y1, d, // front, upper left\n w, y1, d, // front, upper right\n );\n k = PlaneMesh.write2(uv, k,\n 1, v0, // lower left\n 0, v0, // lower right\n 0, v1, // upper right\n 1, v1); // upper left\n n = PlaneMesh.write3(normal, n,\n 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0);\n\n\n // write the vertical quads\n for(let m=1; m < cx; m++) {\n const\n x0 = m*hinc + t*(m-1),\n x1 = x0 + t,\n v0 = i * vt,\n v1 = v0 + vt;\n j = PlaneMesh.write3(pos, j,\n x0, y1, d, // front lower left\n x0, y2, d, // front upper left\n x0, y2, 0, // back upper left\n x0, y1, 0, // back lower right\n );\n k = PlaneMesh.write2(uv, k,\n 0, v0, // lower left\n 0, v1, // upper left\n 1, v1,\n 1, v0,\n );\n n = PlaneMesh.write3(normal, n,\n -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0);\n\n j = PlaneMesh.write3(pos, j,\n x1, y1, 0, // back lower right\n x1, y2, 0, // back upper right\n x1, y2, d, // front upper right\n x1, y1, d, // front lower right\n );\n k = PlaneMesh.write2(uv, k,\n 0, v0, // lower right\n 0, v1, // upper right\n 1, v1,\n 1, v0,\n );\n n = PlaneMesh.write3(normal, n,\n 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0);\n }\n }\n // write the bottom row of vertical quads\n const y1 = 0, y2 = vinc;\n for(let m=1; m < cx; m++) {\n const\n x0 = m*hinc + t*(m-1),\n x1 = x0 + t,\n v0 = vt,\n v1 = v0 + vt;\n j = PlaneMesh.write3(pos, j,\n x0, y1, d, // front lower left\n x0, y2, d, // front upper left\n x0, y2, 0, // back upper left\n x0, y1, 0, // back lower right\n );\n k = PlaneMesh.write2(uv, k,\n 0, v0, // lower left\n 0, v1, // upper left\n 1, v1,\n 1, v0,\n );\n n = PlaneMesh.write3(normal, n,\n -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0);\n\n j = PlaneMesh.write3(pos, j,\n x1, y1, 0, // back lower right\n x1, y2, 0, // back upper right\n x1, y2, d, // front upper right\n x1, y1, d, // front lower right\n );\n k = PlaneMesh.write2(uv, k,\n 0, v0, // lower right\n 0, v1, // upper right\n 1, v1,\n 1, v0,\n );\n n = PlaneMesh.write3(normal, n,\n 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0);\n }\n\n }\n}\n\n/**\n * This is the front edge banding of a diagonal cubby.\n */\nexport class DiagridFaceMesh extends MeshWriter {\n width: number;\n height: number;\n thickness: number;\n\n constructor(width: number, height: number, thickness: number) {\n super();\n this.width = width;\n this.height = height;\n this.thickness = thickness;\n }\n\n get attrs() {\n const result = new Set();\n // Count is how many vertexes we have... since we're working with\n // triangles, this is always a multiple of 3.\n const count = 48; // 3 verts times 8 quads, times 2 tris per quad\n // name, size, count, type\n result.add(new Attr('position', 3, count, Float32Array));\n result.add(new Attr('uv', 2, count, Float32Array));\n return result;\n }\n\n write(attrMap: AttrMap) {\n const\n w = this.width,\n h = this.height,\n t = this.thickness,\n vp = DiagridFaceMesh.diagridPos(w, h, t),\n vu = DiagridFaceMesh.diagridUV(w, h, t),\n [_p, pos] = attrMap.byName('position'),\n [_u, uv] = attrMap.byName('uv');\n\n let i = 0;\n // Quad 1, 10, 8, 2\n i = PlaneMesh.write3(pos, i,\n vp[1][0], vp[1][1], 0,\n vp[10][0], vp[10][1], 0,\n vp[8][0], vp[8][1], 0,\n vp[2][0], vp[2][1], 0);\n // Quad 1, 5, 12, 10\n i = PlaneMesh.write3(pos, i,\n vp[1][0], vp[1][1], 0,\n vp[5][0], vp[5][1], 0,\n vp[12][0], vp[12][1], 0,\n vp[10][0], vp[10][1], 0);\n // Quad 4, 3, 7, 8\n i = PlaneMesh.write3(pos, i,\n vp[4][0], vp[4][1], 0,\n vp[3][0], vp[3][1], 0,\n vp[7][0], vp[7][1], 0,\n vp[8][0], vp[8][1], 0);\n // Quad 4, 8, 11, 6\n i = PlaneMesh.write3(pos, i,\n vp[4][0], vp[4][1], 0,\n vp[8][0], vp[8][1], 0,\n vp[11][0], vp[11][1], 0,\n vp[6][0], vp[6][1], 0);\n // Quad 16, 12, 9, 14\n i = PlaneMesh.write3(pos, i,\n vp[16][0], vp[16][1], 0,\n vp[12][0], vp[12][1], 0,\n vp[9][0], vp[9][1], 0,\n vp[14][0], vp[14][1], 0);\n // Quad 16, 17, 13, 12\n i = PlaneMesh.write3(pos, i,\n vp[16][0], vp[16][1], 0,\n vp[17][0], vp[17][1], 0,\n vp[13][0], vp[13][1], 0,\n vp[12][0], vp[12][1], 0);\n // Quad 19, 10, 12, 18\n i = PlaneMesh.write3(pos, i,\n vp[19][0], vp[19][1], 0,\n vp[10][0], vp[10][1], 0,\n vp[12][0], vp[12][1], 0,\n vp[18][0], vp[18][1], 0);\n // Quad 19, 15, 8, 10\n i = PlaneMesh.write3(pos, i,\n vp[19][0], vp[19][1], 0,\n vp[15][0], vp[15][1], 0,\n vp[8][0], vp[8][1], 0,\n vp[10][0], vp[10][1], 0);\n\n // Write the UVs. Elsewhere this u is labeled t, but we'll use u here to\n // avoid conflicting with the alias for the thickness parameter. This u\n // is the scaled version of t for the UV coordinates.\n const\n g = Math.sqrt(w*w + h*h),\n u = t*(1/g),\n u2 = u/2;\n\n i = 0;\n // Quad 1: 1, 10, 8, 2\n i = PlaneMesh.write2(uv, i,\n vu[1][0], vu[1][1],\n vu[10][0], vu[10][1],\n 0, vu[8][1],\n vu[2][0], vu[2][1]);\n // Quad 2: 1, 5, 12, 10\n i = PlaneMesh.write2(uv, i,\n vu[1][0], vu[1][1],\n vu[5][0], vu[5][1],\n u, vu[12][1],\n vu[10][0], vu[10][1]);\n // Quad 3: 4, 3, 7, 8\n i = PlaneMesh.write2(uv, i,\n vu[4][0], vu[4][1],\n vu[3][0], vu[3][1],\n vu[7][0], vu[7][1],\n u2, vu[8][1]);\n // Quad 4: 4, 8, 11, 6\n i = PlaneMesh.write2(uv, i,\n vu[4][0], vu[4][1],\n u2, vu[8][1],\n vu[11][0], vu[11][1],\n vu[6][0], vu[6][1]);\n // Quad 5: 16, 12, 9, 14\n i = PlaneMesh.write2(uv, i,\n vu[16][0], vu[16][1],\n u2, vu[12][1],\n vu[9][0], vu[9][1],\n vu[14][0], vu[14][1]);\n // Quad 6: 16, 17, 13, 12\n i = PlaneMesh.write2(uv, i,\n vu[16][0], vu[16][1],\n vu[17][0], vu[17][1],\n vu[13][0], vu[13][1],\n u2, vu[12][1]);\n // Quad 7: 19, 10, 12, 18\n i = PlaneMesh.write2(uv, i,\n vu[19][0], vu[19][1],\n vu[10][0], vu[10][1],\n u, vu[12][1],\n vu[18][0], vu[18][1]);\n // Quad 8: 19, 15, 8, 10\n i = PlaneMesh.write2(uv, i,\n vu[19][0], vu[19][1],\n vu[15][0], vu[15][1],\n 0, vu[8][1],\n vu[10][0], vu[10][1]);\n\n }\n\n /**\n * Generate the X, Y positions of the diagrid face vertexes.\n */\n static diagridPos(w: number, h: number, t: number) {\n const\n a = Math.atan2(w, h), // angle alpha\n x = t / (2*Math.sin(Math.PI/2 - a)),\n y = t / (2*Math.sin(a)),\n w2 = w/2,\n h2 = h/2,\n t2 = t/2,\n x2 = x/2,\n y2 = y/2,\n hmy = h-y,\n wmx = w-x;\n return [\n [], // Include an extra so we can use 1-based indexes\n [0, h],\n [x, h],\n [wmx, h],\n [w, h],\n [0, hmy],\n [w, hmy],\n [w2, h2+y],\n [w2+x2, h2+y2],\n [w2-x, h2],\n [w2, h2],\n [w2+x, h2],\n [w2-x2, h2-y2],\n [w2, h2-y],\n [0, y],\n [w, y],\n [0, 0],\n [x, 0],\n [wmx, 0],\n [w, 0]\n ];\n }\n\n static diagridUV(w: number, h: number, tw: number) {\n const\n g = Math.sqrt(w*w + h*h),\n t = tw*(1/g),\n t2 = t/2;\n return [\n [], // Include an extra so we can use 1-based indexes\n [t2, 0],\n [0, 0],\n [0, 1],\n [t2, 1],\n [t, 0],\n [t, 1],\n [0, 0.5],\n [null, 0.5],\n [0, 0.5],\n [t2, 0.5],\n [t, 0.5],\n [null, 0.5],\n [t, 0.5],\n [0, 0],\n [0, 1],\n [t2, 0],\n [t, 0],\n [t, 1],\n [t2, 1]\n ];\n }\n}\n\n/**\n * These are the backing shelves of the diagonal cubby.\n */\nexport class DiagridBoxMesh extends MeshWriter {\n width: number;\n height: number;\n depth: number;\n thickness: number;\n\n constructor(width: number, height: number, depth: number, thickness: number) {\n super()\n this.width = width;\n this.height = height;\n this.depth = depth;\n this.thickness = thickness;\n }\n\n get attrs() {\n const result = new Set();\n // Count is how many vertexes we have... since we're working with\n // triangles, this is always a multiple of 3.\n const count = 48; // 3 verts times 8 quads, times 2 tris per quad\n // name, size, count, type\n result.add(new Attr('position', 3, count, Float32Array));\n result.add(new Attr('normal', 3, count, Float32Array));\n result.add(new Attr('uv', 2, count, Float32Array));\n return result;\n }\n\n write(attrMap: AttrMap) {\n const\n w = this.width,\n h = this.height,\n d = this.depth,\n t = this.thickness,\n a = Math.atan2(w, h), // angle alpha\n cosa = Math.cos(a),\n sina = Math.sin(a),\n vp = DiagridFaceMesh.diagridPos(w, h, t),\n [_p, pos] = attrMap.byName('position'),\n [_n, n] = attrMap.byName('normal'),\n [_u, uv] = attrMap.byName('uv');\n\n const edges = [\n [7, 2, cosa, sina],\n [3, 7, -cosa, sina],\n [5, 9, -cosa, -sina],\n [9, 14, -cosa, sina],\n [17, 13, cosa, -sina],\n [13, 18, -cosa, -sina],\n [15, 11, cosa, sina],\n [11, 6, cosa, -sina]];\n\n let i = 0, j = 0;\n for(let [a, b, nx, ny] of edges) {\n PlaneMesh.write3(pos, i,\n vp[a][0], vp[a][1], 0,\n vp[b][0], vp[b][1], 0,\n vp[b][0], vp[b][1], d,\n vp[a][0], vp[a][1], d);\n i = PlaneMesh.write3(n, i,\n nx, ny, 0,\n nx, ny, 0,\n nx, ny, 0,\n nx, ny, 0);\n j = PlaneMesh.write2(uv, j, 0, 0, 1, 0, 1, 1, 0, 1);\n }\n }\n}\n\n\nexport class FuncMesh extends MeshWriter {\n uStart: number;\n uEnd: number;\n uCount: number;\n vStart: number;\n vEnd: number;\n vCount: number;\n xfn: (u: number, v: number) => number;\n yfn: (u: number, v: number) => number;\n zfn: (u: number, v: number) => number;\n\n constructor(uStart: number, uEnd: number, uCount: number,\n vStart: number, vEnd: number, vCount: number,\n xfn: (u: number, v: number) => number,\n yfn: (u: number, v: number) => number,\n zfn: (u: number, v: number) => number)\n {\n super();\n this.uStart = uStart;\n this.uEnd = uEnd;\n this.uCount = uCount;\n this.vStart = vStart;\n this.vEnd = vEnd;\n this.vCount = vCount;\n this.xfn = xfn;\n this.yfn = yfn;\n this.zfn = zfn;\n }\n\n get attrs() {\n const result = new Set();\n // Count is how many vertexes we have... since we're working with\n // triangles, this is always a multiple of 3.\n const count = 6 * this.uCount * this.vCount;\n // name, size, count, type\n result.add(new Attr('position', 3, count, Float32Array));\n result.add(new Attr('normal', 3, count, Float32Array));\n result.add(new Attr('uv', 2, count, Float32Array));\n return result;\n }\n\n write(attrMap: AttrMap) {\n const\n lerp = (a: number, b: number, t: number) => (1-t)*a + t*b,\n uStart = this.uStart,\n uEnd = this.uEnd,\n uCount = this.uCount,\n ucm1 = uCount - 1,\n vStart = this.vStart,\n vEnd = this.vEnd,\n vCount = this.vCount,\n vcm1 = vCount - 1,\n vcp1 = vCount + 1,\n xfn = this.xfn,\n yfn = this.yfn,\n zfn = this.zfn,\n [_p, pos] = attrMap.byName('position'),\n [_n, normal] = attrMap.byName('normal'),\n [_u, uv] = attrMap.byName('uv'),\n uvs = Array(uCount),\n verts = Array(uCount),\n ns = Array(uCount),\n\n // Some ad hoc vector operations\n minus = (v1: number[], v2: number[]) => [v1[0]-v2[0], v1[1]-v2[1], v1[2]-v2[2]],\n normalize = (v: number[]) => {\n const r = 1 / Math.sqrt(v[0]*v[0]+v[1]*v[1]+v[2]*v[2]);\n return [r*v[0], r*v[1], r*v[2]];\n },\n cross = (v1: number[], v2: number[]) => [\n v1[1]*v2[2] - v1[2]*v2[1],\n v1[2]*v2[0] - v1[0]*v2[2],\n v1[0]*v2[1] - v1[1]*v2[0],\n ];\n\n\n // Calculate the UV coordinates, XYZ positions, and normals for each\n // vertex. Note that we're sampling the x, y, and z functions at +/-\n // 0.5 u and v to determine the normal. This is more straightforward\n // than averaging neighboring vertexes.\n for(let ui=0; ui < uCount; ui++) {\n const\n u = lerp(uStart, uEnd, ui/ucm1),\n up = lerp(uStart, uEnd, (ui+0.5)/ucm1),\n um = lerp(uStart, uEnd, (ui-0.5)/ucm1);\n uvs[ui] = Array(vcp1);\n verts[ui] = Array(vcp1);\n ns[ui] = Array(vcp1)\n for(let vi=0; vi < vCount; vi++) {\n const\n v = lerp(vStart, vEnd, vi/vcm1),\n vp = lerp(vStart, vEnd, (vi+0.5)/vcm1),\n vm = lerp(vStart, vEnd, (vi-0.5)/vcm1),\n nup = [xfn(up, v), yfn(up, v), zfn(up, v)],\n num = [xfn(um, v), yfn(um, v), zfn(um, v)],\n nvp = [xfn(u, vp), yfn(u, vp), zfn(u, vp)],\n nvm = [xfn(u, vm), yfn(u, vm), zfn(u, vm)];\n\n uvs[ui][vi] = [ui/ucm1, vi/vcm1];\n verts[ui][vi] = [xfn(u, v), yfn(u, v), zfn(u, v)];\n ns[ui][vi] = normalize(cross(\n minus(nup, num),\n minus(nvp, nvm),\n ));\n }\n }\n\n // Finally, we use the UV, XYZ position, and normals grid to write all\n // the output triangles. This is roughly equivalent to converting an\n // indexed quad mesh to a non-indexed triangle mesh.\n let i = 0, j = 0;\n for(let ui=1, uim1=0; ui < uCount; ui++, uim1++) {\n for(let vi=1, vim1=0; vi < vCount; vi++, vim1++) {\n PlaneMesh.write3(pos, i,\n verts[uim1][vim1][0],\n verts[uim1][vim1][1],\n verts[uim1][vim1][2],\n\n verts[ui][vim1][0],\n verts[ui][vim1][1],\n verts[ui][vim1][2],\n\n verts[ui][vi][0],\n verts[ui][vi][1],\n verts[ui][vi][2],\n\n verts[uim1][vi][0],\n verts[uim1][vi][1],\n verts[uim1][vi][2],\n );\n\n i = PlaneMesh.write3(normal, i,\n ns[uim1][vim1][0],\n ns[uim1][vim1][1],\n ns[uim1][vim1][2],\n\n ns[ui][vim1][0],\n ns[ui][vim1][1],\n ns[ui][vim1][2],\n\n ns[ui][vi][0],\n ns[ui][vi][1],\n ns[ui][vi][2],\n\n ns[uim1][vi][0],\n ns[uim1][vi][1],\n ns[uim1][vi][2],\n );\n\n j = PlaneMesh.write2(uv, j,\n uvs[uim1][vim1][0],\n uvs[uim1][vim1][1],\n\n uvs[ui][vim1][0],\n uvs[ui][vim1][1],\n\n uvs[ui][vi][0],\n uvs[ui][vi][1],\n\n uvs[uim1][vi][0],\n uvs[uim1][vi][1],\n );\n }\n }\n\n }\n}\n\n/**\n * A little baby Matrix4 transformation class to support the SweptMesh.\n */\nexport class Transform {\n sm: Matrix4; // scratch matrix\n sv: Vector3; // scratch vector;\n m: Matrix4; // the internal state of the transform\n\n constructor() {\n this.sm = new Matrix4();\n this.sv = new Vector3();\n this.m = new Matrix4();\n }\n\n apply(v: Vector3) {\n v.applyMatrix4(this.m);\n }\n\n translate(x: number, y: number, z: number) {\n this.sv.set(x, y, z);\n this.sm.makeTranslation(this.sv);\n this.m.multiply(this.sm);\n }\n\n rotateX(theta: number) {\n this.sm.makeRotationX(theta);\n this.m.multiply(this.sm);\n }\n\n rotateY(theta: number) {\n this.sm.makeRotationY(theta);\n this.m.multiply(this.sm);\n }\n\n rotateZ(theta: number) {\n this.sm.makeRotationZ(theta);\n this.m.multiply(this.sm);\n }\n\n shearXY(theta: number) {\n const slope = Math.tan(-theta);\n this.sm.makeShear(slope, 0, 0, 0, 0, 0);\n this.m.multiply(this.sm);\n }\n\n shearXZ(theta: number) {\n const slope = Math.tan(-theta);\n this.sm.makeShear(0, slope, 0, 0, 0, 0);\n this.m.multiply(this.sm);\n }\n\n /**\n * If theta is zero, the shear is a noop. If you want a shear to the left,\n * supply a positive angle measured from the vertical. If you want a shear\n * to the right, supply a negative angle, also measured from the vertical.\n * Values of theta outside the range [-pi/2, pi/2] may not work as you\n * expect and values of exactly positive or negative pi/2 will result in\n * an infinity.\n */\n shearYX(theta: number) {\n const slope = Math.tan(-theta);\n this.sm.makeShear(0, 0, slope, 0, 0, 0);\n this.m.multiply(this.sm);\n }\n\n shearZX(theta: number) {\n const slope = Math.tan(-theta);\n this.sm.makeShear(0, 0, 0, 0, slope, 0);\n this.m.multiply(this.sm);\n }\n\n shearZY(theta: number) {\n const slope = Math.tan(-theta);\n this.sm.makeShear(0, 0, 0, 0, 0, slope);\n this.m.multiply(this.sm);\n }\n\n reset() {\n this.m.identity();\n }\n}\n\n/**\n * The SweptMesh moves a 2D polygonal polygon along a 2D plan. Both the profile\n * and the plan are represented by the EdgeList class. The really important\n * reason this exists is that the resulting mesh includes normals and UVs\n * derived from the underlying polygons.\n *\n * Think of the plan object as blueprint drawing of the basic shape of the\n * resulting mesh in the ground plane. The profile object establishes the\n * elevation of the object. As a result, the (x, y) coordinates of the plan\n * object will lay in the XZ plane of the output object. The X axis of the\n * profile object will point in a direction perpendicular to the current edge of\n * the plan. The Y axis of the profile object will become the Y axis of the\n * resulting 3D object.\n *\n * The vertex normal of the resulting mesh points in the direction of the\n * profile object's vertex normal, rotated by the vertex normal of the plan\n * object.\n *\n * The U coordinate of each vertex is given by the vertex's distance around the\n * perimeter of the profile object. Similarly, the V coordinate is given by the\n * vertex's distance around the perimeter of the plan object.\n *\n * If the `smooth` constructor parameter is false (the default), then normals\n * are transformed orthogonal to the plan edge. If `smooth` is true, then\n * normals are transformed to the bisecting angle between edges.\n */\nexport class SweptMesh extends MeshWriter {\n profile: EdgeList;\n plan: EdgeList;\n smooth: boolean;\n\n constructor(profile: EdgeList, plan: EdgeList, smooth: boolean = false) {\n super();\n this.profile = profile;\n this.plan = plan;\n this.smooth = smooth;\n }\n\n get attrs() {\n const\n result = new Set(),\n // The number of vertexes we'll need is two triangles per quad (6\n // vertexes) times a quad for every edge in the profile swept along\n // an edge in the plan.\n count = 6 * this.profile.edgeCount * this.plan.edgeCount;\n\n result.add(new Attr('position', 3, count, Float32Array));\n result.add(new Attr('normal', 3, count, Float32Array));\n result.add(new Attr('uv', 2, count, Float32Array));\n\n return result;\n }\n\n write(attrMap: AttrMap) {\n // For each edge in the plan:\n // - With a clean transformation matrix, move to the position of the\n // first vertex, and rotate to the angle that bisects the adjacent\n // edges.\n // - With another transformation matrix, move to the position of the\n // second vertex and rotate to the corresponding bisecting angle\n // - Form a quad spanning each edge of the profile transformed with\n // both of these matricies\n // - The normal of each vertex is the normal of the profile transformed\n // - The U of each vertex is its distance around the perimeter of the\n // profile\n // - The V of each vertex is its position projected onto the plan edge\n const\n [_p, pos] = attrMap.byName('position'),\n [_n, normal] = attrMap.byName('normal'),\n [_u, uv] = attrMap.byName('uv'),\n\n // a, b, c, d should be a counterclockwise winding of a quad\n a = new Vector3(),\n b = new Vector3(),\n c = new Vector3(),\n d = new Vector3(),\n m1 = new Matrix4(),\n m2 = new Matrix4(),\n t1 = new Transform(),\n t2 = new Transform();\n\n // Indices for position, normal, and uv respectively\n let i = 0; let j = 0; let k = 0;\n\n // We want to treat the plan line segments as being in the XZ plane.\n for(const plan of this.plan.edges()) {\n\n // Compute the bisector angles of the current edge\n // etheta is the global measure of the edge angle\n const\n [ex1, ey1, _enx1, _eny1, ex2, ey2, _enx2, _eny2] = plan.edge,\n etheta = Math.atan2(ey2-ey1, ex2-ex1),\n planEdgeLen = Math.sqrt((ex2-ex1)**2 + (ey2-ey1)**2);\n\n\n // b1 is the global measure of the bisector between the edge and \n // the previous edge\n let b1: number, b1g: number;\n if(plan.prev) {\n const [px1, py1, _pnx1, _pny1, px2, py2, pnx2, pny2] = plan.prev;\n // ptheta is the global angle of the previous edge\n const ptheta = Math.atan2(py2-py1, px2-px1);\n const normal = Math.atan2(pny2, pnx2);\n b1 = (etheta - ptheta) / 2;\n b1g = ptheta - normal;\n } else {\n b1 = 0;\n b1g = -etheta + Math.PI/2;\n }\n\n // b2 is the global measure of the bisector between the edge and\n // the next edge\n let b2: number, b2g: number;\n if(plan.next) {\n const [nx1, ny1, nnx1, nny1, nx2, ny2, _nnx2, _nny2] = plan.next;\n // ntheta is the global angle of the next edge.\n const ntheta = Math.atan2(ny2-ny1, nx2-nx1);\n const normal = Math.atan2(nny1, nnx1);\n b2 = (ntheta - etheta) / 2;\n b2g = etheta - normal;\n } else {\n b2 = 0;\n b2g = -etheta + Math.PI/2;\n }\n\n // We want to modify the Z coordinate by its X value, and the\n // coefficient is the tangent of the bisector angle.\n m1.makeShear(0, Math.tan(-b1), 0, 0, 0, 0);\n m2.makeShear(0, Math.tan(b2), 0, 0, 0, 0);\n\n // A running tally of the length of the profile perimeter\n let perimeter = 0;\n\n for(const profile of this.profile.edges()) {\n const [x1, y1, nx1, ny1, x2, y2, nx2, ny2] = profile.edge;\n\n const profileEdgeLen = Math.sqrt((x2-x1)**2 + (y2-y1)**2);\n\n // Calculate the positions. We shear the XY position of the\n // profile vertex to the desired angle, and then offset the\n // vertex position relative to the XZ position on the plan.\n t1.translate(ex1, 0, ey1);\n t1.rotateY(-etheta + Math.PI/2);\n\n t2.translate(ex2, 0, ey2);\n t2.rotateY(-etheta + Math.PI/2);\n \n // The oder here sets our winding order. We want edge ab to be\n // along the profile, edge bc along the plan, then edge cd in\n // the opposite direction along the profile, and edge da\n // backtracking to where we started at a.\n a.set(x1, y1, 0); a.applyMatrix4(m1); t1.apply(a);\n b.set(x2, y2, 0); b.applyMatrix4(m1); t1.apply(b);\n c.set(x2, y2, 0); c.applyMatrix4(m2); t2.apply(c);\n d.set(x1, y1, 0); d.applyMatrix4(m2); t2.apply(d);\n\n i = PlaneMesh.write3(pos, i,\n a.x, a.y, a.z,\n b.x, b.y, b.z,\n c.x, c.y, c.z,\n d.x, d.y, d.z);\n\n // Calculate the transformed surface normals. Because we know\n // this procedure does not scale the normal vector, we can use\n // plain matrix multiplication rather than the inverse\n // transpose used for general purpose transformations.\n if(this.smooth) {\n t1.reset(); t2.reset();\n// TODO: needs implementation, but not for crown molding. I suspect this would\n// be easier to implement after a cleanup. I think a big reason I was getting\n// in trouble is I was thinking of the normal vector of the plan as being\n// relative to the plan edge. When generated by the EdgeList class, it's in\n// object space, i.e. the global coordinate system.\n// t1.translate(ex1, 0, ey1); t1.rotateY(b1g);\n// t2.translate(ex2, 0, ey2); t2.rotateY(b2g);\n } else {\n t1.reset(); t2.reset();\n t1.rotateY(-etheta + Math.PI/2);\n t2.rotateY(-etheta + Math.PI/2);\n }\n \n a.set(nx1, ny1, 0); t1.apply(a);\n b.set(nx2, ny2, 0); t1.apply(b);\n c.set(nx2, ny2, 0); t2.apply(c);\n d.set(nx1, ny1, 0); t2.apply(d);\n\n j = PlaneMesh.write3(normal, j,\n a.x, a.y, a.z,\n b.x, b.y, b.z,\n c.x, c.y, c.z,\n d.x, d.y, d.z);\n\n // Calculate the UVs. The u coordinates are a simple running\n // tally of the distance around the profile perimeter. The v1\n // coordinate is the negative of the \"scalar projection\" of the\n // plan's x1 coordinate onto the edge. The v2 coordinate is\n // the sum of the edge length and the x2 coordinate projected\n // onto the edge.\n const\n u1 = perimeter,\n u2 = u1 + profileEdgeLen,\n v1 = -x1 * Math.cos(etheta - b1),\n v2 = planEdgeLen + x2 * Math.cos(etheta - b2);\n\n k = PlaneMesh.write2(uv, k,\n u1, v1, // a\n u2, v1, // b\n u2, v2, // c\n u1, v2, // d\n );\n\n perimeter += profileEdgeLen;\n t1.reset(); t2.reset();\n }\n }\n\n }\n\n}\n","import * as config from './config';\nimport BaseFactory from './BaseFactory';\nimport MemoryCache from './MemoryCache';\nimport { slot2in, in2slot } from './measurement';\nimport { \n AXIS_X,\n dimensions,\n drawerBox,\n frameAndPanel,\n mirror,\n panel,\n shelfPanel,\n uvNormalize,\n uvTranspose,\n verticalBoringPanel,\n} from './IIID';\nimport {\n DiagridBoxMesh,\n DiagridFaceMesh,\n GridFaceMesh,\n GridBoxMesh,\n ThreeJSMesh\n} from './mw/prims';\nimport { Join, SetNormal, Translate } from './mw/ops';\n\nimport {\n Box2,\n Box3,\n BoxGeometry,\n BufferGeometry,\n ExtrudeGeometry,\n Mesh,\n Shape,\n Vector2,\n Vector3,\n} from 'three';\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';\nimport ModelLoader from './ModelLoader';\nimport logging from './logging';\nimport { Axis, resize, setOrigin } from './geometry';\nimport { mergeGeometries } from 'three/examples/jsm/utils/BufferGeometryUtils';\nimport { lerp } from './utils';\nimport traverse from './utils/traverseGenerator';\n\n\nconst log = logging(\"ParametricCache\");\nconst ml = ModelLoader.getInstance();\n\ntype GeometryLibrary = Record;\n\n/**\n * Creates a single group for the given buffer geometry, effectively making the\n * Mesh using this geometry require a material array instead of a single\n * material.\n */\nconst singleGroup = (geo: BufferGeometry) => {\n const pos = geo.getAttribute('position');\n geo.addGroup(0, pos.count, 0);\n};\n\n\n/**\n * The ParametricCache ends up being the front-end for IIID.js. If you request\n * a piece of geometry in a specific style and dimensions, you'll get a\n * shared reference to any existing geometry with the same specifications.\n */\nexport class ParametricCache extends BaseFactory {\n\n geocache: MemoryCache< Promise >;\n results: MemoryCache;\n loader: OBJLoader;\n baseUrl: string;\n\n constructor() {\n super();\n this.geocache = new MemoryCache();\n this.results = new MemoryCache();\n this.loader = new OBJLoader();\n this.baseUrl = config.geometry;\n }\n\n async make(name: string, ...args: unknown[]): Promise {\n const key: string[] = args.map(x => String(x));\n let result = this.results.get(name, ...key);\n if( result == null ){\n result = await super.make(name, ...args);\n this.results.put(result, name, ...key);\n }\n return result;\n }\n\n private load(name: string) {\n const url = `${this.baseUrl}/${name}.obj`;\n\n const promise: Promise = new Promise(\n (resolve, reject) => {\n this.loader.load(url,\n object => {\n let geometry: GeometryLibrary = {};\n object.name = name;\n object.traverse(child => {\n if(child instanceof Mesh) {\n geometry[child.name] = child.geometry;\n child.geometry.name = name;\n }\n });\n resolve(geometry);\n },\n null, // no progress event updates, thus null\n error => reject(error)\n );\n });\n\n this.geocache.put(promise, name);\n return promise;\n }\n\n // Returns an Object appropriate to pass as the geometry parameter to\n // IIID.js. \n getgeo(name: string): Promise {\n let promise = this.geocache.get(name);\n if(promise == null) {\n promise = this.load(name);\n }\n return promise;\n }\n\n // This creates a new object with geometries from both the a and b names.\n // This helps with creating doors using the IIID.door() function, which\n // expects geometry for both the frame and panel in its geometry parameter.\n async union(a:string, b: string) {\n const \n ag = await this.getgeo(a),\n bg = await this.getgeo(b);\n return {...ag, ...bg};\n }\n\n}\n\nconst pc = new ParametricCache();\n\npc.extend('FrameAndPanel', async function(frameStyle: string, panelStyle: string, width: number, height: number, grain: string) {\n log.debug('ParametricCache::FrameAndPanel', ...arguments);\n let geometry: BufferGeometry;\n if(frameStyle)\n geometry = await this.union(frameStyle, panelStyle);\n else\n geometry = await this.getgeo(panelStyle);\n\n const [frameGeo, panelGeo] = frameAndPanel(\n geometry,\n new Vector2(width, height),\n frameStyle,\n panelStyle);\n\n // Set the grain direction by transposing the UVs for horizontal grain\n if(grain == 'horizontal') {\n uvTranspose(panelGeo);\n }\n\n return [frameGeo, panelGeo];\n});\n\n// This is a front facing panel like what appears on the front of a drawer,\n// door or hook rack.\npc.extend('FrontPanel', async function(\n panelStyle: string, width: number, height:number, grain: 'horizontal' | 'vertical')\n{\n const geometry = await this.getgeo(panelStyle);\n\n const panelGeo = panel(geometry, new Vector2(width, height));\n\n if(grain == 'horizontal') {\n uvTranspose(panelGeo);\n }\n\n return panelGeo;\n});\n\n// This is a panel with *depth* and height, i.e. an upright between sections\npc.extend('Panel', async function(panelStyle: string, depth: number, height: number, grain: string) {\n log.debug('ParametricCache::Panel', ...arguments);\n let geometry = await this.getgeo(panelStyle);\n var panelGeo = panel(geometry,\n new Vector2(depth, height));\n\n if(grain == 'horizontal') {\n uvTranspose(panelGeo);\n }\n\n uvNormalize(panelGeo);\n return panelGeo;\n});\n\npc.extend('DrawerBox', async function(width: number, height: number, depth: number, front){\n log.debug('ParametricCache::DrawerBox', ...arguments);\n return drawerBox(new Vector3(width, height, depth), front);\n});\n\npc.extend('ScoopFront', async function(width: number, height: number) {\n log.debug('ParametricCache::ScoopFront', ...arguments);\n let geometry = await this.getgeo('panel_scoop_3x0.75');\n const [_, panelGeo] = frameAndPanel(\n geometry,\n new Vector2(width, height),\n null, // no frame\n 'panel_scoop_3x0.75');\n uvNormalize(panelGeo);\n return [null, panelGeo];\n});\n\npc.extend('FlatFront', async function(width: number, height: number) {\n log.debug('ParametricCache::FlatFront', ...arguments);\n let geometry = await this.getgeo('panel_plain_0.75in');\n const [_, panelGeo] = frameAndPanel(\n geometry,\n new Vector2(width, height),\n null, // no frame\n 'panel_plain_0.75in');\n uvNormalize(panelGeo);\n return [null, panelGeo];\n});\n\npc.extend('FixedShelf', async function(width: number, depth: number) {\n log.debug('ParametricCache::FixedShelf', ...arguments);\n const basis = await pc.make(\n 'Resizable',\n `${this.baseUrl}/panel_resizable.glb`,\n width, depth, 0.75,\n 0, 0, 0 // left bottom back\n );\n const clone = basis.clone();\n clone.rotateX(Math.PI/2);\n clone.translate(0, 0.75, 0);\n uvTranspose(clone, 0);\n uvNormalize(clone);\n return clone;\n});\n\npc.extend('VerticalBoringPanel',\n async function(\n style: string,\n height: number,\n depth: number,\n mirrorPanel: boolean)\n{\n log.debug('ParametricCache::VerticalBoringPanel', ...arguments);\n let geometry = await this.getgeo(style);\n let bgeo = verticalBoringPanel(\n geometry,\n new Vector2(depth, height),\n new Box2(\n new Vector2(2, slot2in(1)),\n new Vector2(depth-2, slot2in(in2slot(height)-1))\n )\n );\n // The result is laid out in the XY plane, but we want it in the XZ plane\n bgeo.rotateY(Math.PI/2);\n bgeo.translate(0, 0, depth);\n\n if(mirrorPanel) {\n bgeo = mirror(bgeo, AXIS_X);\n }\n\n return bgeo;\n});\n\npc.extend('Divider', async function(height: number, depth: number) {\n log.debug('ParametricCache::Divider', ...arguments);\n const basis = await pc.make(\n 'Resizable',\n `${this.baseUrl}/panel_resizable.glb`,\n depth, height, 0.75,\n 0, 0, 0 // left bottom back\n );\n const clone = basis.clone();\n clone.rotateY(-Math.PI/2);\n clone.translate(0.75, 0, 0);\n uvNormalize(clone);\n return clone;\n});\n\npc.extend('AdjustableShelf', async function(width, _height, depth) {\n log.debug('ParametricCache::AdjustableShelf', ...arguments);\n const basis = await pc.make(\n 'Resizable',\n `${this.baseUrl}/panel_resizable.glb`,\n width, depth, 0.75,\n 0, 0, 0 // left bottom back\n );\n const clone = basis.clone();\n clone.rotateX(Math.PI/2);\n clone.translate(0, 0.75, 0);\n uvTranspose(clone, 0);\n uvNormalize(clone);\n return clone;\n});\n\npc.extend('GlassShelf', async function(width: number, _height, depth: number){\n log.debug('ParametricCache::GlassShelf', ...arguments);\n let geometry = await this.getgeo('panel_plain_0.25in');\n var shelf = shelfPanel(\n geometry,\n new Vector2(width, depth)\n );\n uvNormalize(shelf);\n singleGroup(shelf);\n return shelf;\n});\n\n\npc.extend('FlatShoeShelf', async function(width, _height, depth) {\n log.debug('ParametricCache::FlatShoeShelf', ...arguments);\n const shelf = await this.make('AdjustableShelf', width, _height, depth);\n return shelf;\n});\n\npc.extend('FixedShoeShelf', async function(width, _height, depth) {\n log.debug('ParametricCache::FixedShoeShelf', ...arguments);\n const shelf = await this.make('AdjustableShelf', width, _height, depth);\n const clone = shelf.clone();\n clone.translate(0, -3/8, 0);\n return clone;\n});\n\npc.extend('SlantedShelfWithFence', async function(\n style: string, width: number, _height, depth: number)\n{\n const \n shelfAngle = Math.PI/180 * 15,\n rakeHeight = Math.sin(shelfAngle) * depth,\n shelfDepth = Math.sqrt(depth*depth + rakeHeight*rakeHeight) - 1.0,\n fence = await ml.get(`${config.models}/${style}`),\n shelf = (await this.make('FixedShelf', width, shelfDepth)).clone();\n\n let fenceGeo: BufferGeometry;\n fence.traverse(obj => {\n if(obj instanceof Mesh) {\n fenceGeo = obj.geometry.clone();\n }\n });\n\n fenceGeo.translate(11.5, 0.125, depth - 14);\n fenceGeo.scale(width/23, 1, 1);\n\n shelf.rotateX(shelfAngle);\n shelf.translate(0, rakeHeight, 0.5);\n const shelfGeo = shelf.toNonIndexed();\n const joined = mergeGeometries([shelfGeo, fenceGeo]);\n\n joined.groups = shelfGeo.groups;\n joined.addGroup(\n joined.groups[1].count,\n fenceGeo.getAttribute('position').count,\n 2);\n\n return joined;\n});\n\npc.extend('SlidingShelf', async function(width: number, _height, depth: number) {\n log.debug('ParametricCache::SlidingShelf', ...arguments);\n const fixed = await this.make('FixedShelf', width - 0.5, depth);\n const clone = fixed.clone();\n clone.translate(0.25, -3/8, 0);\n\n // The slide is a little smaller than the space available (by 0.2 in) so\n // that there is some recess to give it a readable silhouette against the\n // shelving material\n let slideLeft = new BoxGeometry(0.25, 0.55, depth - 0.2);\n // move the origin to the back left center\n slideLeft.translate(0.125, 0, depth/2);\n const slideRight = slideLeft.clone();\n slideRight.translate(width - 0.25, 0, 0);\n const slides = mergeGeometries([slideLeft, slideRight]);\n singleGroup(slides);\n slides.groups[0].materialIndex = 2;\n const joined = mergeGeometries([clone, slides]);\n\n joined.groups = clone.groups;\n const last = joined.groups[joined.groups.length - 1];\n joined.addGroup(\n last.start+last.count,\n slides.attributes.position.count,\n 2);\n\n return joined;\n});\n\npc.extend('HangBar', async function(filename: string, width: number) {\n log.debug('ParametricCache::HangBar', ...arguments);\n const scene = await ml.get(`${config.models}/${filename}`);\n let geo: BufferGeometry;\n for(const obj of traverse(scene)) {\n if(obj instanceof Mesh) {\n geo = obj.geometry.clone();\n }\n }\n if(geo == null) {\n log.error(`Unable to load mesh from \"${filename}\"`);\n return;\n }\n\n if(geo.boundingBox == null) geo.computeBoundingBox();\n const dims = dimensions(geo);\n const scale = width / dims.x;\n geo.scale(scale, 1, 1);\n setOrigin(geo, 0, 0.5, 0.5);\n singleGroup(geo);\n return geo;\n});\n\n\npc.extend('CubbyBoxes', async function(\n countX: number, countY: number, diagonal: boolean, width: number, height: number, depth: number, thickness: number)\n{\n let boxes: BufferGeometry;\n if(diagonal) {\n const uWidth = width / countX;\n let uHeight = height / countY;\n\n let unitB = new DiagridBoxMesh(\n uWidth, uHeight, depth, thickness);\n\n let bs = [];\n for(let x = 0; x < countX; x++) {\n for(let y = 0; y < countY; y++) {\n bs.push(new Translate(uWidth*x, uHeight*y, 0, unitB));\n }\n }\n boxes = ThreeJSMesh.toBufferGeometry((new Join(bs)).generate());\n } else {\n const boxMesh = new GridBoxMesh(width, height, depth,\n thickness, countX, countY);\n boxes = ThreeJSMesh.toBufferGeometry(boxMesh.generate());\n }\n\n return boxes;\n});\n\npc.extend('CubbyFace', async function(\n countX: number, countY: number, diagonal: boolean, width: number, height: number, depth: number, thickness: number)\n{\n let face: BufferGeometry;\n if(diagonal) {\n const uWidth = width / countX;\n let uHeight = height / countY;\n const unitMesh = new DiagridFaceMesh(uWidth, uHeight, thickness);\n const unitF = new SetNormal(0, 0, 1, unitMesh);\n\n let fs = [];\n for(let x = 0; x < countX; x++) {\n for(let y = 0; y < countY; y++) {\n fs.push(new Translate(uWidth*x, uHeight*y, depth, unitF));\n }\n }\n face = ThreeJSMesh.toBufferGeometry((new Join(fs)).generate());\n } else {\n const faceMesh = new SetNormal(0, 0, 1,\n new Translate(0, 0, depth,\n new GridFaceMesh(width, height, thickness,\n countX, countY)));\n face = ThreeJSMesh.toBufferGeometry(faceMesh.generate());\n }\n\n return face;\n});\n\npc.extend('ToeKick', async function(\n width: number, height: number, depth: number)\n{\n const basis = await pc.make(\n 'Resizable',\n `${this.baseUrl}/panel_resizable.glb`,\n width, height, 0.75,\n 0, 0, 0 // left bottom back\n );\n const clone = basis.clone();\n clone.translate(0, 0, depth);\n uvTranspose(clone, 0);\n uvNormalize(clone);\n return clone;\n});\n\n\n/**\n * Note that this will return an indexed mesh, so it is unlikely to work\n * directly with the IIID functions, which all expect triangle meshes.\n */\npc.extend('Resizable', async function(\n url: string,\n width: number = -1, height: number = -1, depth: number = -1,\n ox: number = 0, oy: number = 0, oz: number = 0\n )\n{\n const\n scene = (await ml.get(url)),\n geometries: BufferGeometry[] = [],\n bb = new Box3();\n\n scene.traverse(obj => {\n if((obj as any).isMesh) {\n const geo = (obj as Mesh).geometry.clone();\n geo.name = url;\n geo.computeBoundingBox();\n bb.expandByPoint(geo.boundingBox.min);\n bb.expandByPoint(geo.boundingBox.max);\n geometries.push(geo);\n }\n });\n\n let dx = 0, dy = 0, dz = 0;\n if(width != -1) {\n dx = width - (bb.max.x - bb.min.x);\n }\n if(height != -1) {\n dy = height - (bb.max.y - bb.min.y);\n }\n if(depth != -1) {\n dz = depth - (bb.max.z - bb.min.z);\n }\n\n for(const geo of geometries) {\n if(dx != 0) {\n resize(geo, dx, Axis.x);\n }\n if(dy != 0) {\n resize(geo, dy, Axis.y);\n }\n if(dz != 0) {\n resize(geo, dz, Axis.z);\n }\n }\n \n const result = mergeGeometries(geometries, true);\n setOrigin(result, ox, oy, oz);\n // vertex colors are used for resize, not needed for display, and will\n // prevent merging with other geometries\n result.deleteAttribute('color'); \n\n return result;\n});\n\ntype Space = {\n start: number,\n width: number,\n open: boolean,\n}\n\nconst resample = (heights: number[], x: number) => {\n if(heights.length < 2) {\n log.error('ParametricCache resample() received invalid heights');\n return 0;\n }\n for(let i=0; i+3 < heights.length; i += 2) {\n const\n ax = heights[i],\n ah = heights[i+1],\n bx = heights[i+2],\n bh = heights[i+3];\n if(x >= ax && x <= bx) {\n const t = (x - ax) / (bx - ax);\n return lerp(ah, bh, isNaN(t) ? 0 : t);\n }\n //else if(x > bx) {\n // return bh;\n //}\n }\n if(heights.length >= 2 && x <= heights[1]) {\n return heights[1];\n }\n}\n\n// To support the simple caching mechanism, we expect a flattened array of\n// (x, height) pairs, i.e. the array should be interleaved so it looks like\n// [x1, height1, ... xN, heightN].\npc.extend('Wall', async function(heights: number[], spaces: Space[])\n{\n const geos: BufferGeometry[] = [];\n for(const space of spaces) {\n const\n shape = new Shape(),\n start = Math.max(space.start, heights[0]),\n end = space.start + space.width;\n shape.moveTo(start, 0);\n shape.lineTo(start, resample(heights, start));\n for(let i = 0; i < heights.length; i += 2) {\n const x = heights[i];\n if(x < space.start) continue;\n if(x > end) break;\n\n const height = heights[i+1];\n shape.lineTo(x, height);\n }\n shape.lineTo(end, resample(heights, end));\n shape.lineTo(end, 0);\n\n const geo = new ExtrudeGeometry(shape, {\n depth: 4.5,\n bevelEnabled: false,\n });\n geo.translate(0, 0, -4.5);\n\n geos.push(geo);\n }\n return geos;\n});\n\n// The origin of the resulting object should be placed where the two walls meet,\n// i.e. at the position of the second wall in the pair.\npc.extend('WallCornerFill', async function(\n height: number,\n ax: number, ay: number,\n bx: number, by: number,\n cx: number, cy: number,\n )\n{\n const shape = new Shape();\n shape.moveTo(0, 0);\n shape.lineTo(ax, ay);\n // c stands for 'corner', which is why it's in the middle\n shape.lineTo(cx, cy);\n shape.lineTo(bx, by);\n\n const geo = new ExtrudeGeometry(shape, {\n depth: height,\n bevelEnabled: false,\n });\n geo.rotateX(-Math.PI/2);\n return geo;\n});\n\nexport default pc;\n","import TableDataSource from './TableDataSource';\n\nexport class SkuDataError extends Error {};\n\n/**\n * The SKU data class assumes the existence of an SKU column in a\n */\nexport default class SkuData {\n\n index: Map = new Map();\n data: TableDataSource;\n\n constructor(data: TableDataSource) {\n this.data = data;\n this.buildIndex();\n }\n\n buildIndex() {\n const sku = this.data.column('sku');\n for(let i=0; i < sku.length; i++) {\n if(this.index.has(sku[i])) {\n throw new SkuDataError(`SkuData.buildIndex() found duplicate SKU \"${sku[i]}\"`);\n }\n this.index.set(sku[i], i);\n }\n }\n\n fields(sku: string): Record | undefined {\n const i = this.index.get(sku);\n if(i == null) return;\n return this.data.row(i);\n }\n\n string(sku: string, field: string): string | undefined {\n const i = this.index.get(sku);\n if(i == null) return;\n return this.data.cell(field, i);\n }\n\n json(sku: string, field: string): any | undefined {\n const result = this.string(sku, field);\n if(result == null) return;\n return JSON.parse(result);\n }\n\n boolean(sku: string, field: string): boolean | undefined {\n const result = this.string(sku, field);\n if(result == null) return;\n return Boolean(result);\n }\n\n number(sku: string, field: string): number | undefined {\n const result = this.string(sku, field);\n if(result == null) return;\n\n const num = Number(result);\n\n if(Number.isNaN(num)) return;\n \n return num;\n }\n\n}\n","import TableDataSource from './TableDataSource';\n\nexport class TsvDataSourceError extends Error {};\n\n/**\n * Assumes that there are no tabs in your data, that the first row is the\n * column names, and that empty cells are null, not the empty string.\n */\nexport default class TsvDataSource implements TableDataSource {\n \n columns: Map = new Map();\n readonly length: number;\n\n constructor(data: string) {\n this.length = this.parse(data);\n }\n\n parse(data: string) {\n const\n lines = data.split(/\\r?\\n/),\n // the array is definitely not empty because split at least returns\n // an array with an empty string in it\n namesLine = lines.shift() as string,\n names = namesLine.split('\\t'),\n splitLines = lines.map(line => line.split('\\t')),\n transposed = new Array(names.length);\n\n for(let i=0; i < transposed.length; i++) {\n transposed[i] = new Array(splitLines.length);\n }\n \n for(let j=0; j < splitLines.length; j++) {\n const line = splitLines[j];\n if(line.length > transposed.length) {\n throw new TsvDataSourceError(\n 'TsvDataSource.parse found an unlabeled column in the input');\n }\n for(let i=0; i < names.length; i++) {\n transposed[i][j] = line[i];\n }\n }\n\n for(let i=0; i < names.length; i++) {\n this.columns.set(names[i], transposed[i]);\n }\n\n return lines.length;\n }\n\n column(name: string): string[] | undefined {\n return this.columns.get(name);\n }\n\n cell(name: string, row: number): string | undefined {\n const column = this.columns.get(name);\n if(column) return column[row];\n }\n\n row(n: number): Record | undefined {\n if(n >= this.length) {\n return;\n }\n\n const record = {};\n for(const col of this.columns.keys()) {\n record[col] = this.columns.get(col)[n];\n }\n return record;\n }\n}\n","import * as config from '../config';\nimport MemoryCache from '../MemoryCache';\nimport SkuData from './SkuData';\nimport TsvDataSource from './TsvDataSource';\nimport mfac from '../MaterialFactory';\nimport { MeshStandardMaterial } from 'three';\n// @ts-ignore because the language server is not going to understand this\nimport { data as cabinetData } from './jarlin_cabinets.tsv'; // @ts-ignore\n// @ts-ignore\nimport { data as lineData } from './jarlin_lines.tsv';\n\nexport const cabinets = new SkuData(new TsvDataSource(cabinetData));\nexport const lines = new SkuData(new TsvDataSource(lineData));\n\nexport const cabinetWidth = (sku: string) => cabinets.number(sku, 'width')\nexport const cabinetHeight = (sku: string) => cabinets.number(sku, 'height')\nexport const cabinetDepth = (sku: string) => cabinets.number(sku, 'depth')\n\nexport const lineMaterial = MemoryCache.memoize((line: string) => {\n const solid = lines.boolean(line, 'solid');\n if(solid) {\n return new MeshStandardMaterial({\n color: lines.string(line, 'color'),\n roughness: 0.2,\n });\n } else {\n return new MeshStandardMaterial({\n map: mfac.preloadTexture(\n `${config.maps}/${lines.string(line, 'color_map')}`),\n roughness: 0.2,\n });\n }\n});\n","import * as config from '../config';\nimport Application from '../Application';\nimport BaseView from './BaseView';\nimport MemoryCache from '../MemoryCache';\nimport ModelLoader from '../ModelLoader';\nimport logging from '../logging';\nimport mfac from '../MaterialFactory';\nimport pc from '../ParametricCache';\nimport { Appliance, Cabinet, Room, Wall } from '../domain';\nimport { BoxGeometry, Group, Mesh, MeshStandardMaterial, Object3D } from 'three';\nimport { setOrigin } from '../geometry';\n\n// TODO: I'd love to have some indirection here so we don't pollute other apps\n// with Jarlin-specific data. We need dependency injection from the app level\n// to provide access this data instead of direct import. Maybe this is moot\n// if/when we are explicitly supporting cabinets throughout all apps. But un-\n// mooted if we have so many cabinet SKUs that they need to be loaded at\n// runtime.\nimport { cabinets, cabinetWidth, cabinetHeight, cabinetDepth, lineMaterial } from '../data/JarlinCatalogData';\n\nconst log = logging('view');\nconst ml = ModelLoader.getInstance();\n\nconst checkYPosition = (cabinet: Cabinet) => {\n if(cabinets.boolean(cabinet.sku, 'crown')) {\n switch(cabinets.string(cabinet.sku, 'model')) {\n case 'WP':\n case 'OC':\n return cabinetHeight(cabinet.sku) - 4;\n default:\n return -4;\n }\n }\n\n return cabinetHeight(cabinet.sku) - 4;\n}\n\nconst getApplianceFor = (cabinet: Cabinet): Appliance | undefined => {\n const id = cabinet.id;\n const wall = cabinet.parent as Wall;\n if(wall) {\n for(const appliance of wall.appliances) {\n if(appliance.cabinetId == id) {\n return appliance;\n }\n }\n }\n}\n\nexport default class CabinetView extends BaseView {\n declare model: Cabinet;\n\n implementation: Implementation;\n check: Object3D;\n\n constructor(model: Cabinet, app: Application) {\n super(model, app);\n\n this.name = 'CabinetView';\n\n this.init();\n }\n\n make() {\n const modelName = cabinets.string(this.model.sku, 'model');\n\n if(modelName in implementations) {\n const ViewClass = implementations[modelName];\n\n this.implementation = new ViewClass(this.model, this.highlights);\n this.add(this.implementation);\n } else {\n this.implementation = new FallbackCabinet(this.model, this.highlights);\n this.add(this.implementation);\n }\n\n }\n\n bind() {\n this.model.bind('userChoice', async () => {\n if(this.model.userChoice == 'location') {\n this.check = await ml.get(`${config.models}/checkmark.glb`);\n this.check.position.x = cabinetWidth(this.model.sku) - 4;\n this.check.position.y = checkYPosition(this.model);\n this.check.position.z = cabinetDepth(this.model.sku) + 1.75;\n this.add(this.check);\n } else {\n this.check?.removeFromParent();\n delete this.check;\n }\n });\n }\n}\n\nclass Implementation extends Object3D {\n model: Cabinet;\n hit: Mesh;\n // this is a reference to the parent view's highlights set\n highlights: Set;\n\n constructor(model: Cabinet, highlights: Set) {\n super();\n this.model = model;\n this.highlights = highlights;\n\n this.name = this.model.sku + '-impl';\n\n this.hit = new Mesh(\n new BoxGeometry(1, 1, 1),\n new MeshStandardMaterial({color: 0x80FFFF})\n );\n (this.hit.material as MeshStandardMaterial).transparent = true;\n (this.hit.material as MeshStandardMaterial).opacity = 0.5;\n this.hit.geometry.translate(0.5, 0.5, 0.5);\n this.hit.userData.isSelectable = true;\n this.hit.userData.isRelocatable = true;\n this.hit.name = 'Cabinet Hit';\n this.hit.visible = false;\n this.add(this.hit);\n\n const\n width = cabinetWidth(this.model.sku),\n height = cabinetHeight(this.model.sku),\n depth = cabinetDepth(this.model.sku);\n this.hit.scale.set(width, height, depth);\n }\n\n add(child: Object3D): this {\n super.add(child);\n // this visits the child itself as well as any children, so it takes\n // care of both meshes and groups or other structures\n child.traverse(obj => {\n if(obj instanceof Mesh) {\n this.highlights.add(obj);\n }\n });\n return this;\n }\n}\n\n/**\n * Abstraction of a double door\n */\nclass DoubleDoor extends Object3D {\n\n highlights: Set;\n line: string;\n placement: string;\n width: number;\n height: number;\n\n doorLeft: Mesh;\n doorRight: Mesh | undefined;\n doorRightPivot: Group = new Group();\n\n constructor(highlights: Set, line: string,\n placement: \"top\" | \"bottom\", width: number, height: number)\n {\n super();\n this.highlights = highlights;\n this.line = line;\n this.placement = placement;\n this.width = width;\n this.height = height;\n\n this.make().catch(log.error);\n }\n\n async make() {\n const\n doorWidth = (this.width - 0.25)/2,\n geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-door.glb`,\n doorWidth, this.height, -1,\n 0, 0, 0);\n\n this.doorLeft = new Mesh(geometry, lineMaterial(this.line));\n this.doorRight = new Mesh(geometry, lineMaterial(this.line));\n this.doorLeft.castShadow = this.doorLeft.receiveShadow = true;\n this.doorRight.castShadow = this.doorRight.receiveShadow = true;\n\n this.doorRight.position.x = -doorWidth;\n this.doorRightPivot.position.x = this.width;\n this.doorRightPivot.add(this.doorRight);\n this.add(this.doorRightPivot);\n this.add(this.doorLeft);\n\n this.highlights.add(this.doorRight);\n this.highlights.add(this.doorLeft);\n\n const\n handleLeft = new Handle(this.highlights),\n adjustment = handleLeft.style.includes('knob') ? 3 : 5,\n height = this.placement == \"top\"\n ? this.height - adjustment\n : adjustment;\n\n handleLeft.position.set(doorWidth - 1.25, height, 0.75);\n handleLeft.rotation.z = Math.PI/2;\n this.doorLeft.add(handleLeft);\n\n const handleRight = new Handle(this.highlights);\n handleRight.position.set(1.25, height, 0.75);\n handleRight.rotation.z = Math.PI/2;\n this.doorRight.add(handleRight);\n }\n\n}\n\nclass SkuB extends Implementation {\n\n line: string;\n width: number;\n box: Mesh;\n drawerLeft: Mesh;\n drawerRight: Mesh | undefined;\n doorLeft: Mesh;\n doorRight: Mesh | undefined;\n doorRightPivot: Group = new Group();\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n this.line = (model.parent.parent as Room).line;\n this.width = cabinetWidth(model.sku);\n this.box = new Mesh();\n this.box.castShadow = this.box.receiveShadow = true;\n this.box.material = lineMaterial(this.line);\n this.make();\n }\n\n async make() {\n this.box.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/B-box.glb`,\n this.width, -1, -1,\n 0, 0, 0\n );\n this.add(this.box);\n\n // note that we don't do split drawers or handles for sink cabinets\n if(cabinets.boolean(this.model.sku, 'split_drawer')) {\n\n const geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-drawer.glb`,\n this.width/2 - 0.25, 6.5 , -1,\n 0, 0, 0\n );\n this.drawerLeft = new Mesh(geometry, lineMaterial(this.line));\n this.drawerRight = new Mesh(geometry, lineMaterial(this.line));\n this.drawerLeft.castShadow = this.drawerLeft.receiveShadow = true;\n this.drawerRight.castShadow = this.drawerRight.receiveShadow = true;\n this.add(this.drawerLeft);\n this.add(this.drawerRight);\n\n if(cabinets.string(this.model.sku, 'appliance') != 'sink') {\n const leftHandle = new Handle(this.highlights);\n const rightHandle = new Handle(this.highlights);\n leftHandle.position.set(this.width/4, 30.75, 24.25);\n rightHandle.position.set(3*this.width/4, 30.75, 24.25);\n this.add(leftHandle);\n this.add(rightHandle);\n }\n } else {\n const geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-drawer.glb`,\n this.width - 0.25, 6.5, -1,\n 0, 0, 0\n );\n this.drawerLeft = new Mesh(geometry, lineMaterial(this.line));\n this.drawerLeft.castShadow = this.drawerLeft.receiveShadow = true;\n this.drawerLeft.geometry = geometry;\n this.add(this.drawerLeft);\n\n if(cabinets.string(this.model.sku, 'appliance') != 'sink') {\n const handle = new Handle(this.highlights);\n handle.position.set(this.width/2, 30.75, 24.5);\n this.add(handle)\n }\n }\n\n const\n drawerHeight = 6.5,\n doorHeight = 29 - drawerHeight;\n\n this.drawerLeft.position.set(0.125, 34 - drawerHeight, 24);\n this.drawerRight?.position.set(this.width / 2 + 0.125, 34 - drawerHeight, 24);\n\n if(cabinets.boolean(this.model.sku, 'double_door')) {\n const\n doorWidth = this.width/2 - 0.25,\n geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-door.glb`,\n doorWidth, doorHeight, -1,\n 0, 0, 0);\n\n this.doorLeft = new Mesh(geometry, lineMaterial(this.line));\n this.doorRight = new Mesh(geometry, lineMaterial(this.line));\n this.doorLeft.castShadow = this.doorLeft.receiveShadow = true;\n this.doorRight.castShadow = this.doorRight.receiveShadow = true;\n\n this.doorRight.position.x = -doorWidth;\n this.doorRightPivot.position.set(this.width - 0.125, 4.75, 24);\n this.doorRightPivot.add(this.doorRight);\n this.add(this.doorRightPivot);\n this.add(this.doorLeft);\n this.doorLeft.position.set(0.125, 4.75, 24);\n\n const handleLeft = new Handle(this.highlights);\n handleLeft.position.set(\n doorWidth - 1.25,\n handleLeft.style.includes('knob')? 20 : 18,\n 0.75);\n handleLeft.rotation.z = Math.PI/2;\n this.doorLeft.add(handleLeft);\n\n const handleRight = new Handle(this.highlights);\n handleRight.position.set(\n 1.25,\n handleRight.style.includes('knob')? 20 : 18,\n 0.75);\n handleRight.rotation.z = Math.PI/2;\n this.doorRight.add(handleRight);\n } else {\n const\n doorWidth = this.width - 0.25,\n geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-door.glb`,\n doorWidth, doorHeight, -1,\n 0, 0, 0);\n\n this.doorLeft = new Mesh(geometry, lineMaterial(this.line));\n this.doorLeft.castShadow = this.doorLeft.receiveShadow = true;\n // TODO: don't hard code the depth (for possible non-Jarlin cabinets)\n this.doorLeft.position.set(0.125, 4.75, 24);\n this.add(this.doorLeft);\n\n const handle = new Handle(this.highlights);\n handle.position.set(\n 1.25,\n handle.style.includes('knob')? 20 : 18,\n 0.75);\n handle.rotation.z = Math.PI/2;\n this.doorLeft.add(handle);\n }\n }\n}\n\nclass SkuBBC extends Implementation {\n\n line: string;\n // this is the nominal width; we will subtract an 1/8\" from each side later\n doorWidth: 15 | 18;\n box: Object3D;\n door: Mesh;\n drawer: Mesh;\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n this.line = (model.parent.parent as Room).line;\n // BBC39 gets 15\" door, BBC42 gets 18\"\n this.doorWidth = this.model.sku.indexOf('39') == -1 ? 18 : 15;\n this.door = new Mesh();\n this.drawer = new Mesh();\n this.door.material = lineMaterial(this.line);\n this.drawer.material = lineMaterial(this.line);\n\n this.make().catch(log.error);\n }\n\n async make() {\n this.box = await ml.get(`${config.models}/kitchen/${this.model.sku}.glb`);\n this.box.traverse(obj => {\n if(obj instanceof Mesh) {\n obj.material = lineMaterial(this.line);\n }\n });\n this.drawer.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-drawer.glb`,\n this.doorWidth - 0.25, 6.5, -1,\n 0, 0, 0);\n\n const\n drawerHeight = 6.5,\n doorHeight = 29 - drawerHeight;\n\n this.door.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-door.glb`,\n this.doorWidth - 0.25, doorHeight, -1,\n 0, 0, 0);\n\n // TODO: this only works with doors on the left side. Should position\n // the doors based on our position on the wall\n this.drawer.position.set(0.125, 34 - drawerHeight, 24);\n this.door.position.set(0.124, 4.75, 24);\n\n this.add(this.box);\n this.add(this.door);\n this.add(this.drawer);\n\n const drawerHandle = new Handle(this.highlights);\n drawerHandle.position.set(this.doorWidth/2, 30.75, 24.5);\n this.add(drawerHandle)\n\n const doorHandle = new Handle(this.highlights);\n doorHandle.position.set(\n 1.25,\n doorHandle.style.includes('knob')? 20 : 18,\n 0.75);\n doorHandle.rotation.z = Math.PI/2;\n this.door.add(doorHandle);\n }\n}\n\nclass SkuBLS extends Implementation {\n\n line: string;\n width: number;\n depth: number;\n box: Mesh;\n\n doorLeft: Mesh;\n doorRight: Mesh;\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n this.line = (model.parent.parent as Room).line;\n this.width = cabinetWidth(model.sku);\n this.depth = cabinetDepth(model.sku);\n\n this.box = new Mesh();\n this.box.castShadow = this.box.receiveShadow = true;\n this.box.material = lineMaterial(this.line);\n\n this.doorLeft = this.box.clone(true);\n this.doorRight = this.box.clone(true);\n\n this.make();\n }\n\n async make() {\n this.box.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.model.sku}.glb`,\n this.width, -1, -1,\n 0, 0, 0\n );\n this.add(this.box);\n\n const doorWidth = this.width - 24.75;\n\n this.doorLeft.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-door.glb`,\n doorWidth, 29.25 , -1,\n 0, 0, 0\n );\n this.doorLeft.position.set(0.125, 4.75, 24);\n this.add(this.doorLeft);\n\n const handle = new Handle(this.highlights);\n handle.position.set(\n 1.25,\n handle.style.includes('knob')? 26.75 : 24.75,\n 0.75);\n handle.rotation.z = Math.PI/2;\n this.doorLeft.add(handle);\n\n this.doorRight.geometry = this.doorLeft.geometry;\n this.doorRight.position.set(this.width - 24, 4.75, 24.5);\n this.doorRight.rotation.set(0, -Math.PI/2, 0);\n this.add(this.doorRight);\n }\n\n}\n\nclass SkuBSR extends Implementation {\n\n line: string;\n width: number;\n box: Mesh;\n door: Mesh;\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n this.line = (model.parent.parent as Room).line;\n this.width = cabinetWidth(model.sku);\n\n this.box = new Mesh();\n this.box.castShadow = this.box.receiveShadow = true;\n this.box.material = lineMaterial(this.line);\n\n this.door = this.box.clone(true);\n\n this.make();\n }\n\n async make() {\n this.box.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/B-box.glb`,\n this.width, -1, -1,\n 0, 0, 0\n );\n this.add(this.box);\n\n this.door.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-door.glb`,\n this.width - 0.25, 29.25 , -1,\n 0, 0, 0\n );\n this.door.position.set(0.125, 4.75, 24);\n this.add(this.door);\n\n const handle = new Handle(this.highlights);\n handle.position.set(\n (this.width - 0.25) / 2,\n handle.style.includes('knob')? 24 : 22,\n 0.5);\n handle.rotation.z = Math.PI/2;\n this.door.add(handle);\n }\n}\n\nclass SkuDB2 extends Implementation {\n\n line: string;\n width: number;\n box: Mesh;\n topDrawer: Mesh;\n bottomDrawer: Mesh;\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n this.line = (model.parent.parent as Room).line;\n this.width = cabinetWidth(model.sku);\n this.box = new Mesh();\n this.box.castShadow = this.box.receiveShadow = true;\n this.box.material = lineMaterial(this.line);\n this.make();\n }\n\n async make() {\n this.box.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/B-box-2.glb`,\n this.width, -1, -1,\n 0, 0, 0\n );\n this.add(this.box);\n\n const topGeometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-drawer.glb`,\n this.width - 0.25, 14.5, -1,\n 0, 0, 0\n );\n this.topDrawer = new Mesh(topGeometry, lineMaterial(this.line));\n this.topDrawer.castShadow = this.topDrawer.receiveShadow = true;\n this.topDrawer.geometry = topGeometry;\n this.add(this.topDrawer);\n\n // The top of the top drawer should be at 34\", leaving a 0.5\" gap below\n // the counter top\n this.topDrawer.position.set(0.125, 34 - 14.5, 24);\n\n // Deep cloning will still share geometry, which is fine here\n this.bottomDrawer = this.topDrawer.clone(true);\n this.add(this.bottomDrawer);\n\n // the toe kick is 4.5\" tall, so 4.75\" leaves a 1/4\" of face showing\n // below the door\n this.bottomDrawer.position.set(0.125, 4.75, 24);\n\n const topHandle = new Handle(this.highlights);\n topHandle.position.set((this.width - 0.25)/2, 7.25, 0.25);\n this.topDrawer.add(topHandle);\n\n const bottomHandle = new Handle(this.highlights);\n bottomHandle.position.set((this.width - 0.25)/2, 7.25, 0.25);\n this.bottomDrawer.add(bottomHandle);\n }\n}\n\nclass SkuDB3 extends Implementation {\n\n line: string;\n width: number;\n box: Mesh;\n topDrawer: Mesh;\n middleDrawer: Mesh;\n bottomDrawer: Mesh;\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n this.line = (model.parent.parent as Room).line;\n this.width = cabinetWidth(model.sku);\n this.box = new Mesh();\n this.box.castShadow = this.box.receiveShadow = true;\n this.box.material = lineMaterial(this.line);\n this.make();\n }\n\n async make() {\n this.box.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/B-box-3.glb`,\n this.width, -1, -1,\n 0, 0, 0\n );\n this.add(this.box);\n\n const topGeometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-drawer.glb`,\n this.width - 0.25, 6.5, -1,\n 0, 0, 0\n );\n this.topDrawer = new Mesh(topGeometry, lineMaterial(this.line));\n this.topDrawer.castShadow = this.topDrawer.receiveShadow = true;\n this.topDrawer.geometry = topGeometry;\n this.add(this.topDrawer);\n\n // The top of the top drawer should be at 34\", leaving a 0.5\" gap below\n // the counter top\n this.topDrawer.position.set(0.125, 34 - 6.5, 24);\n\n const midpoint = (this.width - 0.25)/2;\n\n const middleGeometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-drawer.glb`,\n this.width - 0.25, 11.25, -1,\n 0, 0, 0\n );\n this.middleDrawer = new Mesh(middleGeometry, lineMaterial(this.line));\n this.middleDrawer.castShadow = this.middleDrawer.receiveShadow = true;\n this.middleDrawer.geometry = middleGeometry;\n this.add(this.middleDrawer);\n\n this.middleDrawer.position.set(0.125, 16, 24);\n\n // Deep cloning will still share geometry, which is fine here\n this.bottomDrawer = this.middleDrawer.clone(true);\n this.add(this.bottomDrawer);\n\n // the toe kick is 4.5\" tall, so 4.75\" leaves a 1/4\" of face showing\n // below the door\n this.bottomDrawer.position.set(0.125, 4.75, 24);\n\n const topHandle = new Handle(this.highlights);\n topHandle.position.set(midpoint, 3.25, 0.25);\n this.topDrawer.add(topHandle);\n\n const middleHandle = new Handle(this.highlights);\n middleHandle.position.set(midpoint, 5.625, 0.25);\n this.middleDrawer.add(middleHandle);\n\n const bottomHandle = new Handle(this.highlights);\n bottomHandle.position.set(midpoint, 5.625, 0.25);\n this.bottomDrawer.add(bottomHandle);\n }\n}\n\nclass SkuSBS extends Implementation {\n\n line: string;\n box: Mesh;\n doorLeft: Mesh;\n doorRight: Mesh;\n doorRightPivot: Group = new Group();\n sink: Object3D;\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n this.line = (model.parent.parent as Room).line;\n this.box = new Mesh();\n this.box.castShadow = this.box.receiveShadow = true;\n this.box.material = lineMaterial(this.line);\n\n this.doorLeft = this.box.clone(true);\n this.doorRight = this.box.clone(true);\n\n this.make();\n }\n\n async make() {\n // we're not actually resizing this, but I want to cache the geometry\n // and I don't care about the scene.\n this.box.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/SB36-S.glb`,\n -1, -1, -1,\n 0, 0, 0\n );\n this.add(this.box);\n\n this.doorLeft.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-door.glb`,\n 17.75, 20.25, -1,\n 0, 0, 0\n );\n this.doorLeft.position.set(0.125, 4.75, 24);\n this.add(this.doorLeft);\n\n const handleLeft = new Handle(this.highlights);\n handleLeft.position.set(\n 16.5,\n handleLeft.style.includes('knob')? 17.25 : 15.25,\n 0.75);\n handleLeft.rotation.z = Math.PI/2;\n this.doorLeft.add(handleLeft);\n\n this.doorRight.geometry = this.doorLeft.geometry;\n this.doorRight.position.set(-17.75, 0, 0);\n this.doorRightPivot.add(this.doorRight);\n this.doorRightPivot.position.set(35.875, 4.75, 24);\n this.add(this.doorRightPivot);\n\n const handleRight = new Handle(this.highlights);\n handleRight.position.set(\n 1.25,\n handleRight.style.includes('knob')? 17.25 : 15.25,\n 0.75);\n handleRight.rotation.z = Math.PI/2;\n this.doorRight.add(handleRight);\n }\n}\n\nclass SkuW extends Implementation {\n line: string;\n width: number;\n height: number;\n depth: number;\n box: Mesh;\n doorLeft: Mesh;\n doorRight: Mesh | undefined;\n doorRightPivot: Group = new Group();\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n this.line = (model.parent.parent as Room).line;\n this.width = cabinetWidth(model.sku);\n this.height = cabinetHeight(model.sku);\n this.depth = cabinetDepth(model.sku);\n this.box = new Mesh();\n this.box.castShadow = this.box.receiveShadow = true;\n this.box.material = lineMaterial(this.line);\n\n this.make();\n }\n\n async make() {\n this.box.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/W-box.glb`,\n this.width, this.height, this.depth,\n 0, 1, 0\n );\n this.add(this.box);\n\n this.hit.position.y = -this.height;\n\n const doorHeight = this.height - 0.25;\n\n if(cabinets.boolean(this.model.sku, 'double_door')) {\n const\n doorWidth = this.width/2 - 0.25,\n geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-door.glb`,\n doorWidth, doorHeight, -1,\n 0, 1, 0);\n this.doorLeft = new Mesh(geometry, lineMaterial(this.line));\n this.doorRight = new Mesh(geometry, lineMaterial(this.line));\n this.doorLeft.castShadow = this.doorLeft.receiveShadow = true;\n this.doorRight.castShadow = this.doorRight.receiveShadow = true;\n\n this.doorRight.position.x = -doorWidth;\n this.doorRightPivot.position.set(this.width - 0.125, -0.125, this.depth);\n this.doorLeft.position.set(0.125, -0.125, this.depth);\n\n this.doorRightPivot.add(this.doorRight);\n this.add(this.doorRightPivot);\n this.add(this.doorLeft);\n\n const handleLeft = new Handle(this.highlights);\n handleLeft.position.set(\n doorWidth - 1.25,\n -doorHeight + (handleLeft.style.includes('knob') ? 3 : 5),\n 0.75\n );\n handleLeft.rotation.z = Math.PI/2;\n this.doorLeft.add(handleLeft);\n\n const handleRight = new Handle(this.highlights);\n handleRight.position.set(\n 1.25,\n -doorHeight + (handleLeft.style.includes('knob') ? 3 : 5),\n 0.75);\n handleRight.rotation.z = Math.PI/2;\n this.doorRight.add(handleRight);\n } else {\n\n const\n doorWidth = this.width - 0.25,\n geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-door.glb`,\n doorWidth, doorHeight, -1,\n 0, 1, 0);\n this.doorLeft = new Mesh(geometry, lineMaterial(this.line));\n this.doorLeft.castShadow = this.doorLeft.receiveShadow = true;\n this.doorLeft.position.set(0.125, -0.125, this.depth);\n this.add(this.doorLeft);\n\n const handle = new Handle(this.highlights);\n handle.position.set(\n 1.25,\n -doorHeight + (handle.style.includes('knob') ? 3 : 5),\n 0.75);\n handle.rotation.z = Math.PI/2;\n this.doorLeft.add(handle);\n }\n }\n}\n\nclass SkuWDC extends Implementation {\n\n line: string;\n height: number;\n box: Mesh;\n door: Mesh;\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n this.line = (model.parent.parent as Room).line;\n this.height = cabinetHeight(model.sku);\n\n this.box = new Mesh();\n this.box.castShadow = this.box.receiveShadow = true;\n this.box.material = lineMaterial(this.line);\n\n this.hit.position.y = -this.height;\n\n this.door = this.box.clone(true);\n\n this.make();\n }\n\n async make() {\n const model = cabinets.string(this.model.sku, 'model');\n this.box.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${model}-box.glb`,\n -1, this.height, -1,\n 0, 1, 0\n );\n this.add(this.box);\n\n // If we rotate 1/8\" by 45 degrees, its x and y components are...\n const eighthInchBy45 = Math.cos(Math.PI/4) * 0.125;\n\n // Math.sqrt(12**2 + 12**2) - 0.25\n const doorWidth: number = 16.72056275;\n switch(model) {\n case 'WDC12':\n this.door.position.set(\n eighthInchBy45,\n -0.25,\n 12 + eighthInchBy45);\n break;\n case 'WDC15':\n this.door.position.set(\n eighthInchBy45,\n -0.25,\n 15 + eighthInchBy45);\n break;\n\n default:\n log.error(`SkuWDC.make unknown model ${model}`);;\n }\n\n this.door.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-door.glb`,\n doorWidth, this.height - 0.5, -1,\n 0, 1, 0\n );\n this.door.rotation.set(0, -Math.PI/4, 0);\n this.add(this.door);\n\n const\n handle = new Handle(this.highlights),\n adjustment = handle.style.includes('knob')? 3 : 5,\n handleHeight = -this.height + 0.5 + adjustment;\n handle.position.set(\n 1.25,\n handleHeight,\n 0.75);\n handle.rotation.z = Math.PI/2;\n this.door.add(handle);\n }\n\n}\n\nclass SkuWP extends Implementation {\n\n line: string;\n width: number;\n height: number;\n box: Mesh;\n doorTop: Mesh | DoubleDoor;\n doorBottom: Mesh | DoubleDoor;\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n this.line = (model.parent.parent as Room).line;\n this.width = cabinetWidth(model.sku);\n this.height = cabinetHeight(model.sku);\n this.box = new Mesh();\n this.box.castShadow = this.box.receiveShadow = true;\n this.box.material = lineMaterial(this.line);\n this.make();\n }\n\n async make() {\n this.box.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/WP-box.glb`,\n this.width, this.height, -1,\n 0, 0, 0\n );\n this.add(this.box);\n\n\n if(cabinets.boolean(this.model.sku, 'double_door')) {\n this.doorTop = new DoubleDoor(\n this.highlights,\n this.line,\n \"bottom\", // handle placement\n this.width - 0.25,\n this.height - 54.5\n );\n this.add(this.doorTop);\n this.doorTop.position.set(0.125, 54.25, 24);\n\n this.doorBottom = new DoubleDoor(\n this.highlights,\n this.line,\n \"top\", // handle placement\n this.width - 0.25,\n 49.25\n );\n this.add(this.doorBottom);\n this.doorBottom.position.set(0.125, 4.75, 24);\n } else {\n const\n doorWidth = this.width - 0.25,\n geometryTop = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-door.glb`,\n doorWidth, this.height - 54.5, -1,\n 0, 0, 0),\n geometryBottom = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-door.glb`,\n doorWidth, 49.25, -1,\n 0, 0, 0);\n\n this.doorTop = new Mesh(geometryTop, lineMaterial(this.line));\n this.doorTop.castShadow = this.doorTop.receiveShadow = true;\n this.doorTop.position.set(0.125, 54.25, 24);\n this.add(this.doorTop);\n\n this.doorBottom = new Mesh(geometryBottom, lineMaterial(this.line));\n this.doorBottom.castShadow = this.doorBottom.receiveShadow = true;\n this.doorBottom.position.set(0.125, 4.75, 24);\n this.add(this.doorBottom);\n\n const\n topHandle = new Handle(this.highlights),\n adjustment = topHandle.style.includes('knob')? 3 : 5;\n topHandle.position.set(1.25, adjustment, 0.25);\n topHandle.rotation.z = Math.PI/2;\n this.doorTop.add(topHandle);\n\n const bottomHandle = new Handle(this.highlights);\n bottomHandle.position.set(1.25, 49.25 - adjustment, 0.25);\n bottomHandle.rotation.z = Math.PI/2;\n this.doorBottom.add(bottomHandle);\n }\n }\n}\n\nclass SkuOC extends Implementation {\n line: string;\n width: number;\n height: number;\n\n box: Mesh;\n door: DoubleDoor;\n topDrawer: Mesh;\n middleDrawer: Mesh;\n bottomDrawer: Mesh;\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n\n this.line = (model.parent.parent as Room).line;\n this.width = cabinetWidth(model.sku);\n this.height = cabinetHeight(model.sku);\n this.box = new Mesh();\n this.box.castShadow = this.box.receiveShadow = true;\n this.box.material = lineMaterial(this.line);\n this.make();\n }\n\n async make() {\n this.box.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/OC-box.glb`,\n this.width, this.height, -1,\n 0, 0, 0\n );\n this.add(this.box);\n\n this.door = new DoubleDoor(\n this.highlights,\n this.line,\n \"bottom\", // handle placement\n this.width - 0.25,\n this.height - 72.5\n );\n this.door.position.set(0.125, 72, 24);\n this.add(this.door);\n\n const topGeometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-drawer.glb`,\n this.width - 0.25, 6.5, -1,\n 0, 0, 0\n );\n this.topDrawer = new Mesh(topGeometry, lineMaterial(this.line));\n this.topDrawer.castShadow = this.topDrawer.receiveShadow = true;\n this.topDrawer.geometry = topGeometry;\n this.add(this.topDrawer);\n\n // The top of the top drawer should be at 34\", leaving a 0.5\" gap below\n // the counter top\n this.topDrawer.position.set(0.125, 34 - 6.5, 24);\n\n const midpoint = (this.width - 0.25)/2;\n\n const middleGeometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/${this.line}-drawer.glb`,\n this.width - 0.25, 11.25, -1,\n 0, 0, 0\n );\n this.middleDrawer = new Mesh(middleGeometry, lineMaterial(this.line));\n this.middleDrawer.castShadow = this.middleDrawer.receiveShadow = true;\n this.middleDrawer.geometry = middleGeometry;\n this.add(this.middleDrawer);\n\n this.middleDrawer.position.set(0.125, 16, 24);\n\n // Deep cloning will still share geometry, which is fine here\n this.bottomDrawer = this.middleDrawer.clone(true);\n this.add(this.bottomDrawer);\n\n // the toe kick is 4.5\" tall, so 4.75\" leaves a 1/4\" of face showing\n // below the door\n this.bottomDrawer.position.set(0.125, 4.75, 24);\n\n const topHandle = new Handle(this.highlights);\n topHandle.position.set(midpoint, 3.25, 0.25);\n this.topDrawer.add(topHandle);\n\n const middleHandle = new Handle(this.highlights);\n middleHandle.position.set(midpoint, 5.625, 0.25);\n this.middleDrawer.add(middleHandle);\n\n const bottomHandle = new Handle(this.highlights);\n bottomHandle.position.set(midpoint, 5.625, 0.25);\n this.bottomDrawer.add(bottomHandle);\n\n }\n}\n\nclass SkuBF extends Implementation {\n declare model: Cabinet;\n mesh: Mesh;\n\n line: string;\n width: number;\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n this.line = (model.parent.parent as Room).line;\n this.width = cabinetWidth(this.model.sku);\n this.mesh = new Mesh();\n this.mesh.castShadow = this.mesh.receiveShadow = true;\n this.mesh.material = lineMaterial(this.line);\n this.make().catch(log.error);\n }\n\n async make() {\n this.mesh.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/BF.glb`,\n this.width, -1, -1,\n 0, 0, 1);\n\n this.mesh.position.set(0, 0, 24);\n this.add(this.mesh);\n }\n}\n\nexport class SkuWF extends Implementation {\n declare model: Cabinet;\n mesh: Mesh;\n\n line: string;\n width: number;\n height: number;\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n\n this.line = (model.parent.parent as Room).line;\n this.width = cabinetWidth(this.model.sku);\n this.height = cabinetHeight(this.model.sku);\n this.mesh = new Mesh();\n this.mesh.castShadow = this.mesh.receiveShadow = true;\n this.mesh.material = lineMaterial(this.line);\n\n this.hit.scale.y = this.model.position.z;\n\n this.make().catch(log.error);\n }\n\n async make() {\n this.mesh.geometry = await pc.make(\n 'Resizable',\n `${config.models}/kitchen/WF.glb`,\n this.width, this.height, -1,\n 0, 1, 1);\n\n this.add(this.mesh);\n }\n}\n\nconst implementations: Record = {\n \"B\": SkuB,\n \"BBC\": SkuBBC,\n \"BF\": SkuBF,\n \"BLS\": SkuBLS,\n \"BSR\": SkuBSR,\n \"DB2\": SkuDB2,\n \"DB3\": SkuDB3,\n \"OC\": SkuOC,\n \"SBS\": SkuSBS,\n \"W\": SkuW,\n \"WDC12\": SkuWDC,\n \"WDC15\": SkuWDC,\n \"WF\": SkuWF,\n \"WP\": SkuWP,\n};\n\nexport class FallbackCabinet extends Implementation {\n\n declare model: Cabinet;\n mesh: Mesh;\n\n constructor(model: Cabinet, highlights: Set) {\n super(model, highlights);\n this.make();\n this.bind();\n }\n\n make(): void {\n this.mesh = new Mesh(\n new BoxGeometry(1, 1, 1),\n new MeshStandardMaterial({color: 0x808080})\n );\n this.mesh.castShadow = this.mesh.receiveShadow = true;\n\n if(cabinets.boolean(this.model.sku, 'crown')) {\n this.mesh.geometry.translate(0.5, -0.5, 0.5);\n }\n else {\n this.mesh.geometry.translate(0.5, 0.5, 0.5);\n }\n\n this.add(this.mesh);\n }\n\n bind(): void {\n const update = this.updateAppearance.bind(this);\n this.model.bind('sku', update);\n }\n\n updateAppearance() {\n const\n width = cabinetWidth(this.model.sku),\n height = cabinetHeight(this.model.sku),\n depth = cabinetDepth(this.model.sku);\n this.mesh.scale.set(width, height, depth);\n }\n\n}\n\nclass Handle extends Object3D {\n\n highlights: Set;\n style: string;\n\n constructor(highlights: Set) {\n super();\n this.name = 'CabinetHandle';\n this.highlights = highlights;\n\n let data: Record\n const selectionsStr = localStorage.getItem('kitchen-tool-selections');\n if(selectionsStr) {\n data = JSON.parse(selectionsStr);\n }\n this.style = String(data?.pull ?? 'pull1');\n\n this.init();\n }\n\n async init() {\n const object = (await Handle.load(this.style)).clone();\n\n object.traverse(child => {\n if(child instanceof Mesh) {\n this.highlights.add(child);\n }\n });\n\n this.add(object);\n }\n\n static async load(style: string) {\n const filename = {\n \"pull1\": \"d-hpull7.obj\",\n \"pull2\": \"d-hpull7.obj\",\n \"knob1\": \"d-hpull11.obj\",\n \"knob2\": \"d-hpull11.obj\",\n }[style];\n\n const material = {\n \"pull1\": \"Chrome\",\n \"pull2\": \"Brass\",\n \"knob1\": \"Chrome\",\n \"knob2\": \"Brass\",\n }[style];\n\n const object = (await ml.get(`${config.models}/${filename}`)).clone(true);\n\n object.traverse(child => {\n if(child instanceof Mesh) {\n setOrigin(child.geometry, 0.5, 0.5, 0);\n child.castShadow = child.receiveShadow = true;\n child.material = mfac.make(material);\n }\n });\n\n return object;\n }\n\n}\nHandle.load = MemoryCache.memoize(Handle.load);\n","import Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport logging from '../logging';\nimport pc from '../ParametricCache';\nimport { Cubby } from '../domain';\nimport { Mesh, BufferGeometry, Material } from 'three';\n\nconst log = logging('view');\n\nexport default class CubbyView extends BaseView {\n\n declare model: Cubby;\n\n box: Mesh;\n face: Mesh;\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n }\n\n make() {\n this.box = new Mesh(new BufferGeometry(), new Material());\n this.box.castShadow = this.box.receiveShadow = true;\n this.face = this.box.clone(true);\n\n this.name = 'Cubby';\n this.add(this.box);\n this.add(this.face);\n\n this.highlights.add(this.face);\n\n this.face.userData.isSelectable = true;\n this.userData.isCubby = true;\n\n return this;\n }\n\n bind() {\n this.bindMaterial(this.box, this.model.boxMaterial);\n this.bindMaterial(this.face, this.model.faceMaterial);\n\n let changeSize = this.changeSize.bind(this);\n this.model.bind('width', changeSize);\n this.model.on('height', changeSize);\n this.model.on('depth', changeSize);\n this.model.on('thickness', changeSize);\n this.model.on('countX', changeSize);\n this.model.on('countY', changeSize);\n }\n\n private async changeSize() {\n this.updates.queue(\n async () => [\n await pc.make('CubbyBoxes',\n this.model.countX, this.model.countY, this.model.diagonal,\n this.model.width, this.model.height, this.model.depth,\n this.model.thickness),\n await pc.make('CubbyFace',\n this.model.countX, this.model.countY, this.model.diagonal,\n this.model.width, this.model.height, this.model.depth,\n this.model.thickness),\n ],\n ([boxes, face]) => {\n this.box.geometry = boxes;\n this.face.geometry = face;\n }\n );\n }\n\n}\n","import Application from \"../Application\";\nimport BaseView, { DomainModel3D } from \"./BaseView\";\nimport pc from \"../ParametricCache\";\nimport { BufferGeometry, Material, Mesh } from \"three\";\nimport { Divider } from \"../domain\";\n\nexport default class DividerView extends BaseView {\n declare model: Divider;\n\n mesh: Mesh;\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n }\n\n make(): void {\n this.mesh = new Mesh(new BufferGeometry(), new Material());\n this.mesh.castShadow = this.mesh.receiveShadow = true;\n this.mesh.userData.isSelectable = true;\n this.mesh.userData.isMovable = true;\n this.mesh.userData.cursor = 'row-resize';\n\n if(this.model.orientation == 'horizontal') {\n this.name = 'Horizontal Divider';\n } else if(this.model.orientation == 'vertical') {\n this.name = 'Vertical Divider';\n }\n\n this.highlights.add(this.mesh);\n this.add(this.mesh);\n }\n\n bind(): void {\n this.updateSize = this.updateSize.bind(this);\n this.model.bind('width', this.updateSize);\n this.model.on('height', this.updateSize);\n this.model.on('depth', this.updateSize);\n this.model.bind('thickness', () => {\n const scale = this.model.thickness / 0.75;\n if(this.model.orientation == 'horizontal') {\n this.mesh.scale.set(1, scale, 1);\n } else {\n this.mesh.scale.set(scale, 1, 1);\n }\n\n // Request the parent deal with a dimensional change. This is less\n // explicit than would be ideal, but it has the desired effect\n // without introducing a special API.\n this.model.parent.trigger('width');\n });\n\n this.bindMaterialArray(this.mesh, this.model.materials);\n }\n\n private updateSize() {\n this.updates.queue(\n () => {\n if(this.model.orientation == 'horizontal') {\n return pc.make('FixedShelf', this.model.width, this.model.depth);\n } else if(this.model.orientation == 'vertical') {\n return pc.make('Divider', this.model.height, this.model.depth);\n }\n },\n (geometry) => {\n this.mesh.geometry = geometry;\n }\n );\n }\n}\n","import BaseView from '../views/BaseView';\nimport { Object3D } from 'three';\n\n/**\n * Find the BaseView instance to which the given Object3D belongs or throw an\n * error if none is found.\n *\n * Note that if the given object is itself an instance of BaseView, then the\n * object itself is returned. If you prefer to receive the view enclosing the\n * view you have, then call this as `getParentView(this.parent)`.\n */\nexport const getParentView = (obj: Object3D): BaseView => {\n let item: Object3D | null = obj;\n while(item != null) {\n if(item instanceof BaseView) {\n return item;\n } else {\n item = item.parent;\n }\n }\n throw new Error(\"Unable to locate parent view for Object3D\");\n}\n","import * as config from '../config';\nimport Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport ModelLoader from '../ModelLoader';\nimport logging from '../logging';\nimport { Handle } from '../domain';\nimport { Mesh, Object3D } from 'three';\nimport { getParentView } from '../controllers/baseViewControllers';\nimport { zip } from '../utils';\nimport assets from '../assets';\nimport Signal from '../Signal';\n\nconst log = logging('views');\n\nconst ml = ModelLoader.getInstance();\n\n\nexport default class HandleView extends BaseView {\n\n declare model: Handle;\n handle: Object3D;\n\n isNonRotating: boolean = false;\n\n geometryAvailable: boolean = false;\n onGeometryAvailable = new Signal<[HandleView]>(\"onGeometryAvailable\", \"views\");\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n this.setGlbMaterialOpacity = this.setGlbMaterialOpacity.bind(this);\n }\n\n protected make(): void {\n // Handles are not parametric, so there's no placeholder stub to\n // instantiate here.\n }\n\n protected bind(): void {\n const changeStyle = this.changeStyle.bind(this);\n this.model.bind('style', changeStyle);\n this.model.bind('opacity', () => {\n const castShadow = this.model.opacity == 1;\n this.traverse(obj => {\n obj.castShadow = castShadow;\n });\n });\n }\n\n changeStyle() {\n this.updates.queue(\n () => this.loadHandle(this.model),\n (handle: Object3D) => {\n this.handle?.removeFromParent();\n this.handle = handle;\n this.add(this.handle);\n\n this.highlights.clear();\n this.handle.traverse(obj => {\n if(obj instanceof Mesh) {\n this.highlights.add(obj);\n }\n });\n\n this.geometryAvailable = true;\n this.onGeometryAvailable.trigger(this);\n\n this.pipelineUpdate();\n });\n }\n\n /**\n * Loads and sets up materials for generic assets.\n */\n async loadHandle(handle: Handle) {\n let path: string;\n if(handle.assetId) {\n path = assets.resolve(handle.assetId, 'LowResModel');\n }\n else {\n path = `${config.models}/${handle.style}`;\n }\n const object = await ml.get(path);\n const suffix = path.split('.').pop().toLowerCase();\n const parentView = getParentView(this.parent);\n\n if (suffix === \"obj\") {\n\n object.traverse(child => {\n if(child instanceof Mesh && child.geometry) {\n child.castShadow = child.receiveShadow = true;\n parentView.highlights.add(child);\n if (handle.materials.length > 1) {\n this.bindMaterialArray(child, handle.materials);\n } else {\n this.bindMaterial(child, handle.materials[0]);\n }\n child.material.needsUpdate = true;\n }\n });\n\n }\n else if(suffix === \"glb\"\n && handle.materials\n && handle.materials.length > 0)\n {\n const children = [];\n object.traverse(child => {\n if(child instanceof Mesh && child.geometry) {\n if(child.userData[\"cps_pull_non_rotating\"]) {\n this.isNonRotating = true;\n }\n child.castShadow = child.receiveShadow = true;\n parentView.highlights.add(child);\n children.push(child);\n }\n });\n for(let [obj, mat] of zip(children, handle.materials)) {\n this.bindMaterial(obj, mat);\n }\n }\n else if(suffix == \"glb\") {\n object.traverse(child => {\n if(child instanceof Mesh && child.geometry) {\n child.castShadow = child.receiveShadow = true;\n parentView.highlights.add(child);\n }\n });\n handle.off('opacity', this.setGlbMaterialOpacity);\n handle.on('opacity', this.setGlbMaterialOpacity);\n }\n\n return object;\n };\n\n setGlbMaterialOpacity() {\n this.handle.traverse(obj => {\n if(obj instanceof Mesh) {\n obj.material.transparent = true;\n obj.material.opacity = this.model.opacity;\n }\n });\n }\n}\n","import { Box3, Object3D } from 'three';\nimport { Door, Handle } from '../domain';\nimport { getGeometrySize } from '../geometry';\nimport logging from '../logging';\nimport { clamp } from '../utils';\n\nconst log = logging('doorControllers');\n\nconst box = new Box3();\n\nexport const setHandleDirection = (handle: Handle, obj: Object3D, direction: 'h' | 'v', flip?: 'r') => {\n\n if(handle.assetId) {\n if(direction = 'v') {\n handle.rotation.z = -Math.PI/2;\n\n if(obj) getGeometrySize(obj, box);\n const\n width = box.max.x - box.min.x,\n height = box.max.y - box.min.y;\n if(width > 0 && width/height > 1.5) {\n obj.position.x = -width/2;\n } else if(width == 0) {\n log.error(\"doorControllers setHandleDirection: handle appears to have zero width; likely a loading problem\");\n }\n }\n if(flip == 'r') {\n handle.scale.y = -1;\n }\n } else {\n let style: string;\n if(direction == 'h') {\n style = handle.style.replace(/^d-v/, 'd-h');\n } else {\n style = handle.style.replace(/^d-h/, 'd-v');\n }\n\n const ext = style.slice(-3); // expected obj or glb\n\n style = style.replace(/r?.(glb|obj)$/, '');\n if(flip == 'r') {\n handle.style = style + `r.${ext}`;\n } else {\n handle.style = style + `.${ext}`;\n }\n }\n}\n\nconst IDEAL = 42;\n\n/**\n * This only works for Doors with left and right hinges. If called on a drawer\n * or a top- or bottom-hinged door, you will not get the right appearance.\n */\nexport const setHandleHeight = (elevation: number, handle: Handle, height: number) => {\n const\n door = handle.parent as Door,\n min = 2,\n max = door.height - 2 - (height > 2 ? height : 0);\n\n handle.position.y = clamp(IDEAL - elevation, min, max);\n}\n\n","import Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport HandleView from './HandleView';\nimport logging from '../logging';\nimport pc from '../ParametricCache';\nimport { Box3, BufferGeometry, Group, Mesh, Object3D } from 'three';\nimport { Door, Frame, Panel, Section, Wall } from '../domain';\nimport { OrderedEffects, zip } from '../utils';\nimport { blank } from '../MaterialFactory';\nimport { dimensions } from '../view3d';\nimport { elevation } from '../measurement';\nimport { setHandleDirection, setHandleHeight } from '../controllers/doorControllers';\nimport { getGeometrySize } from '../geometry';\n\nconst log = logging('view');\n\n//log.level = log.TRACE;\n\n\ntype XYZ = {x: number, y: number, z: number};\nconst set = (vec: XYZ, x: number, y: number, z: number) => {\n vec.x = x;\n vec.y = y;\n vec.z = z;\n}\n\ntype DoorProperties = {\n frame: Frame,\n panel: Panel,\n width: number,\n height: number,\n hinge: typeof Door.prototype.hinge,\n elevation?: number,\n};\n\ntype Side = \"top\" | \"bottom\" | \"left\" | \"right\" | null;\nconst opposite = (side: Side): Side => {\n switch(side) {\n case \"top\":\n return \"bottom\";\n case \"bottom\":\n return \"top\";\n case \"left\":\n return \"right\";\n case \"right\":\n return \"left\";\n case null:\n return null;\n }\n}\n\nconst box: Box3 = new Box3();\n\nclass SingleDoor extends Object3D {\n\n frame: Mesh;\n panel: Mesh;\n handle: HandleView;\n pivot: Group;\n\n updates = new OrderedEffects();\n\n constructor() {\n super();\n log.debug('SingleDoor constructor', this.uuid);\n this.frame = new Mesh(new BufferGeometry(), blank),\n this.frame.castShadow = this.frame.receiveShadow = true;\n\n this.panel = new Mesh(this.frame.geometry, blank),\n this.panel.castShadow = this.panel.receiveShadow = true;\n\n this.pivot = new Group(),\n\n this.frame.userData.isSelectable = true;\n this.panel.userData.isSelectable = true;\n this.frame.userData.isDoorMesh = true;\n this.panel.userData.isDoorMesh = true;\n\n // We only add the frame in updateGeometry if we have geometry for the\n // frame. Otherwise, having an empty BufferGeometry() as a child can\n // cause problems.\n this.pivot.add(this.panel);\n this.add(this.pivot);\n }\n\n updatePivot(door: DoorProperties) {\n log.debug('SingleDoor.updatePivot', this.uuid, door.hinge);\n this.pivot.position.set(0, 0, 0);\n this.frame.position.set(0, 0, 0);\n this.panel.position.set(0, 0, 0);\n switch(door.hinge) {\n case 'right':\n this.pivot.position.x = door.width;\n this.frame.position.x = -door.width;\n this.panel.position.x = -door.width;\n break;\n case 'top':\n this.pivot.position.y = door.height;\n this.frame.position.y = -door.height;\n this.panel.position.y = -door.height;\n break;\n }\n }\n\n async updateGeometry(door: DoorProperties) {\n log.debug('SingleDoor.updateGeometry', this.uuid, door.hinge);\n\n this.updates.queue(\n async () => pc.make('FrameAndPanel',\n door.frame?.style,\n door.panel.style,\n door.width,\n door.height,\n door.panel.grain\n ) as any as BufferGeometry[],\n\n ([frameGeo, panelGeo]) => {\n log.debug('SingleDoor.updateGeometry async', this.uuid, door.hinge);\n if(frameGeo == null) {\n this.frame.removeFromParent();\n } else {\n this.pivot.add(this.frame);\n this.frame.geometry = frameGeo;\n }\n this.panel.geometry = panelGeo;\n\n if(this.handle == null) {\n Application.do('pipeline-update');\n return;\n }\n // If this is a full-width handle, we position it so it's fully\n // the length of one side of the door.\n if(this.handle.model.isExtrusionPull\n || this.handle.model.style?.includes('pull-elite'))\n {\n let side = this.handle.model.side;\n if(side == null) {\n if(door.hinge == 'double') {\n // this should be unreachable\n } else {\n side = opposite(door.hinge);\n }\n }\n switch(side) {\n case \"left\":\n set(this.handle.model.position, 0, door.height, 0);\n set(this.handle.model.scale, door.height, 1, 1);\n set(this.handle.model.rotation, 0, 0, 1.5*Math.PI);\n break;\n case \"right\":\n set(this.handle.model.position, door.width, 0, 0);\n set(this.handle.model.scale, door.height, 1, 1);\n set(this.handle.model.rotation, 0, 0, 0.5*Math.PI);\n break;\n case \"top\":\n set(this.handle.model.position, door.width, door.height, -1);\n set(this.handle.model.scale, door.width, 1, 1);\n set(this.handle.model.rotation, 0, 0, Math.PI);\n break;\n case \"bottom\":\n set(this.handle.model.position, 0, 0, 0);\n set(this.handle.model.scale, door.width, 1, 1);\n set(this.handle.model.rotation, 0, 0, 0);\n break;\n default:\n log.error(`Unsupported full-width obj side: ${side}`);\n }\n } else {\n switch(door.hinge) {\n case 'left':\n this.handle.model.position.x = door.width - 0.75;\n if(!this.handle.isNonRotating)\n setHandleDirection(this.handle.model, this.handle.handle, 'v');\n break;\n case 'right':\n this.handle.model.position.x = 0.75;\n if(!this.handle.isNonRotating)\n setHandleDirection(this.handle.model, this.handle.handle, 'v', 'r');\n break;\n case 'top':\n this.handle.model.position.x = door.width / 2;\n this.handle.model.position.y = 0.75;\n break;\n case 'bottom':\n this.handle.model.position.x = door.width / 2;\n this.handle.model.position.y = door.height - 0.75;\n this.handle.rotation.z = Math.PI;\n break;\n }\n if(this.handle.model.assetId) {\n this.handle.model.position.z = 0.75;\n }\n }\n\n Application.do('pipeline-update');\n }\n );\n }\n}\n\n\nexport default class DoorView extends BaseView {\n\n\n declare model: Door;\n\n single?: SingleDoor;\n double?: { left: SingleDoor, right: SingleDoor };\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n }\n\n make() {\n this.name = 'Door';\n this.userData.isParametric = true;\n\n if(this.model.hinge == 'double') {\n log.debug('DoorView.make double door', this.uuid);\n this.double = {\n left: new SingleDoor(),\n right: new SingleDoor(),\n };\n this.add(this.double.left);\n this.add(this.double.right);\n this.highlights.add(this.double.left.frame);\n this.highlights.add(this.double.left.panel);\n this.highlights.add(this.double.right.frame);\n this.highlights.add(this.double.right.panel);\n\n if(this.model.handles.length == 1) {\n const left = this.model.handles[0];\n const right = left.clone(true);\n this.model.handles = [left, right];\n\n }\n if (this.model.handles.length == 2){\n for(let [door, handle] of\n zip([this.double.left, this.double.right], this.model.handles))\n {\n const view = new HandleView(handle, this.app);\n door.handle = view;\n door.panel.add(view);\n }\n }\n }\n else {\n log.debug('DoorView.make', this.uuid);\n this.single = new SingleDoor();\n this.add(this.single);\n this.highlights.add(this.single.frame);\n this.highlights.add(this.single.panel);\n\n // if we have too many handles for a single door, discard the extra\n if(this.model.handles.length > 1) {\n this.model.handles.length = 1;\n }\n // we could have zero handles, so check that we have a one and only\n if(this.model.handles.length == 1) {\n const view = new HandleView(this.model.handles[0], this.app);\n this.single.handle = view;\n this.single.panel.add(view);\n }\n }\n }\n\n bind() {\n log.debug('DoorView.bind', this.uuid);\n\n this.updateGeometry = this.updateGeometry.bind(this);\n this.layout = this.layout.bind(this);\n\n const door = this.model;\n\n door.bind('width', this.updateGeometry);\n door.on('height', this.updateGeometry);\n door.on('frame', this.updateGeometry);\n door.frame?.on('style', this.updateGeometry);\n door.on('panel', this.updateGeometry);\n door.panel.on('style', this.updateGeometry);\n\n door.on('hinge', () => {\n Application.do('refresh');\n });\n\n door.on('open', this.layout);\n\n // Frame/Panel for double doors\n if(door.hinge == 'double') {\n door.bind('frame', () => {\n if(door.frame) {\n this.bindMaterial(\n this.double.left.frame, this.model.frame.material);\n this.bindMaterial(\n this.double.right.frame, this.model.frame.material);\n } else {\n this.double.left.frame.visible = false;\n this.double.right.frame.visible = false;\n }\n });\n door.bind('panel', () => {\n this.bindMaterial(\n this.double.left.panel, this.model.panel.material);\n this.bindMaterial(\n this.double.right.panel, this.model.panel.material);\n });\n }\n // Frame/Panel for single doors\n else {\n door.bind('frame', () => {\n if(door.frame) {\n this.bindMaterial(\n this.single.frame, this.model.frame.material);\n } else {\n this.single.frame.visible = false;\n }\n });\n door.bind('panel', () => {\n this.bindMaterial(\n this.single.panel, this.model.panel.material);\n });\n }\n\n door.bind('opacity', () => {\n const castShadow = this.model.opacity == 1;\n if(this.single) {\n if(this.single.frame) this.single.frame.castShadow = castShadow;\n this.single.panel.castShadow = castShadow;\n }\n if(this.double) {\n if(this.double.left.frame) {\n this.double.left.frame.castShadow = castShadow;\n }\n this.double.left.panel.castShadow = castShadow;\n if(this.double.right.frame) {\n this.double.right.frame.castShadow = castShadow;\n }\n this.double.right.panel.castShadow = castShadow;\n }\n for(const handle of door.handles) {\n handle.opacity = door.opacity;\n }\n });\n }\n\n updateGeometry() {\n log.debug('DoorView.updateGeometry', this.uuid);\n let el: number;\n if(this.model.parent instanceof Section) {\n el = elevation(this.model.parent);\n } else {\n el = this.model.position.y;\n }\n const properties = {\n frame: this.model.frame,\n panel: this.model.panel,\n width: this.model.width,\n height: this.model.height,\n elevation: el,\n };\n if(this.model.hinge == 'double') {\n this.double.left.updateGeometry({\n ... properties,\n hinge: 'left',\n width: this.model.width / 2,\n });\n this.double.right.updateGeometry({\n ... properties,\n hinge: 'right',\n width: this.model.width / 2,\n });\n this.double.left.position.x = 0;\n this.double.right.position.x = this.model.width / 2;\n } else {\n this.single.updateGeometry({... properties, hinge: this.model.hinge});\n }\n this.layout();\n }\n\n layout() {\n log.debug('DoorView.layout', this.uuid);\n const open = this.model.open;\n const properties = {\n frame: this.model.frame,\n panel: this.model.panel,\n width: this.model.width,\n height: this.model.height,\n hinge: this.model.hinge,\n }\n switch(this.model.hinge) {\n case 'left':\n this.single.updatePivot({...properties});\n this.single.pivot.rotation.y = -Math.PI * open;\n break;\n case 'right':\n this.single.updatePivot({...properties});\n this.single.pivot.rotation.y = Math.PI * open;\n break;\n case 'top':\n this.single.updatePivot({...properties});\n this.single.pivot.rotation.x = -Math.PI * open;\n break;\n case 'bottom':\n this.single.updatePivot({...properties});\n this.single.pivot.rotation.x = Math.PI * open;\n break;\n case 'double':\n this.double.left.updatePivot({\n ...properties,\n hinge: 'left',\n width: this.model.width/2,\n });\n this.double.right.updatePivot({\n ...properties,\n hinge: 'right',\n width: this.model.width/2,\n });\n this.double.left.pivot.rotation.y = -Math.PI * open;\n this.double.right.pivot.rotation.y = Math.PI * open;\n break;\n }\n if(this.single) {\n this.placeHandle(this.single.handle);\n } else {\n this.placeHandle(this.double.left.handle);\n this.placeHandle(this.double.right.handle);\n }\n }\n\n placeHandle = (view: HandleView) => {\n if(!view) return;\n if(view.geometryAvailable) {\n box.min.set(0, 0, 0); box.max.set(0, 0, 0);\n getGeometrySize(view.handle, box);\n // handles in the new assets are stored on their side and rotated,\n // but the old ones have models for the different rotations. In any\n // case, we just want the larger of the two dimensions.\n const height = Math.max(\n box.max.x - box.min.x,\n box.max.y - box.min.y\n );\n\n if(this.model.parent instanceof Section\n && (this.model.hinge == 'left'\n || this.model.hinge == 'right'\n || this.model.hinge == 'double')\n && view.model.style.indexOf('pull-elite') == -1\n )\n {\n const el = elevation(this.model.parent);\n setHandleHeight(el, view.model, height);\n }\n else if(this.model.parent instanceof Wall)\n {\n const el = this.model.position.y;\n setHandleHeight(el, view.model, height);\n }\n else {\n const\n p = this.model.parent as DomainModel3D,\n el = p.position.y;\n setHandleHeight(el, view.model, height);\n }\n } else {\n //view.onGeometryAvailable.once(this.placeHandle);\n // Instead of calling ourself, we call ourself indirectly through\n // the updateGeometry method. That will cause the handle placement\n // logic to re-run in full.\n view.onGeometryAvailable.once(this.updateGeometry);\n }\n }\n}\n","import Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport HandleView from './HandleView';\nimport logging from '../logging';\nimport pc from '../ParametricCache';\nimport { BufferGeometry, Group, Mesh, Object3D, Material } from 'three';\nimport { Drawer } from '../domain';\n\nconst log = logging('view');\n\ntype XYZ = {x: number, y: number, z: number};\nconst set = (vec: XYZ, x: number, y: number, z: number) => {\n vec.x = x;\n vec.y = y;\n vec.z = z;\n}\n\nexport default class DrawerView extends BaseView {\n\n declare model: Drawer;\n\n front: Group;\n panel: Mesh;\n frame?: Mesh;\n box: Mesh;\n slide: Group;\n\n handles: Array;\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n }\n\n make() {\n this.handles = [];\n const drawer = this.model;\n\n this.front = new Group();\n this.panel = new Mesh(new BufferGeometry(), new Material());\n this.panel.castShadow = this.panel.receiveShadow = true;\n\n this.panel.name = 'Drawer Panel';\n this.panel.userData.isSelectable = true;\n this.panel.userData.isMovable = true;\n this.front.add(this.panel);\n this.highlights.add(this.panel);\n\n if(drawer.frame) {\n this.frame = new Mesh(new BufferGeometry(), new Material());\n\t this.frame.castShadow = this.frame.receiveShadow = true;\n\n this.frame.name = 'Drawer Frame';\n this.frame.userData.isSelectable = true;\n this.frame.userData.isMovable = true;\n this.front.add(this.frame);\n this.highlights.add(this.frame);\n }\n\n this.box = new Mesh(new BufferGeometry(), new Material());\n this.box.name = 'DrawerBox';\n\n this.name = 'Drawer';\n\n this.slide = new Group()\n this.slide.name = 'Slide';\n\n this.add(this.slide);\n this.slide.add(this.box);\n this.slide.add(this.front);\n\n for(let handle of drawer.handles) {\n const view = new HandleView(handle, this.app);\n this.handles.push(view);\n this.slide.add(view);\n }\n\n if(this.isBoxOnly()) {\n for(let child of this.slide.children) {\n child.position.z = -0.75;\n }\n }\n\n this.userData.isParametric = true;\n }\n\n bind() {\n\n if(this.isBoxOnly()) {\n this.bindMaterial(this.panel, this.model.box.material);\n } else {\n this.bindMaterial(this.panel, this.model.panel.material);\n }\n if(this.frame) {\n this.bindMaterial(this.frame, this.model.frame.material);\n }\n this.bindMaterial(this.box, this.model.box.material);\n\n const changeSize = this.changeSize.bind(this);\n this.model.bind('width', changeSize);\n this.model.on('height', changeSize);\n this.model.on('depth', changeSize);\n\n this.model.bind('open', () => {\n this.slide.position.z = this.model.open * this.model.depth;\n });\n\n this.model.bind('opacity', () => {\n const castShadow = this.model.opacity == 1;\n if(this.frame) this.frame.castShadow = castShadow;\n this.panel.castShadow = castShadow;\n this.box.castShadow = castShadow;\n for(const handle of this.model.handles) {\n handle.opacity = this.model.opacity;\n }\n });\n }\n\n private async changeSize() {\n const drawer = this.model;\n this.model.box.width = this.model.width - 1;\n this.model.box.height = this.model.height - 1;\n this.model.box.depth = this.model.depth;\n for(let model of this.model.handles) {\n // full width handles have width and height, other types ignore it\n model.width = this.model.width;\n model.height = this.model.height;\n }\n\n this.updates.queue(\n async () => { \n let front: BufferGeometry;\n if(drawer.scoop) {\n front = await pc.make(\n 'ScoopFront', drawer.width - 1, drawer.height - 1);\n } else if(drawer.panel == null || drawer.panel.style == null) {\n front = await pc.make(\n 'FlatFront', drawer.width - 1, drawer.height - 1);\n } else {\n front = await pc.make('FrameAndPanel',\n (drawer.frame && drawer.frame.style) ?\n drawer.frame.style : null,\n drawer.panel.style,\n drawer.width, drawer.height,\n drawer.panel.grain);\n\n }\n const box = await pc.make('DrawerBox',\n drawer.box.width,\n drawer.box.height,\n (this.isBoxOnly())? drawer.box.depth - 0.75 : drawer.box.depth,\n drawer.box.front);\n return [front, box];\n },\n ([frameAndPanel, boxGeo]) => {\n const [frameGeo, panelGeo] =\n frameAndPanel as any as BufferGeometry[];\n if(this.frame && frameGeo) {\n this.frame.geometry = frameGeo;\n }\n this.panel.geometry = panelGeo;\n\n this.box.geometry = boxGeo;\n\n const box = this.box;\n box.position.x = (drawer.width - drawer.box.width) / 2;\n box.position.y = (drawer.height - drawer.box.height) / 2;\n // push it forward just a bit so it intersects the panel\n box.position.z = 0.0625 - drawer.box.depth;\n\n if(this.isBoxOnly()) {\n this.panel.position.x = box.position.x;\n this.panel.position.y = box.position.y;\n }\n\n for(let handle of this.model.handles) {\n if(handle.isExtrusionPull\n || handle.style?.includes('pull-elite'))\n {\n let side = handle.side;\n if(side == null) side = 'top';\n switch(side) {\n case \"left\":\n set(handle.position, 0, handle.height, 0);\n set(handle.scale, handle.height, 1, 1);\n set(handle.rotation, 0, 0, 1.5*Math.PI);\n break;\n case \"right\":\n set(handle.position, handle.width, 0, 0);\n set(handle.scale, handle.height, 1, 1);\n set(handle.rotation, 0, 0, 0.5*Math.PI);\n break;\n case \"top\":\n set(handle.position, handle.width, handle.height, 0);\n set(handle.scale, handle.width, 1, 1);\n set(handle.rotation, 0, 0, Math.PI);\n break;\n case \"bottom\":\n set(handle.position, 0, 0, 0);\n set(handle.scale, handle.width, 1, 1);\n set(handle.rotation, 0, 0, 0);\n break;\n default:\n log.error(`Unsupported full-width obj side: ${handle.side}`);\n }\n } else {\n handle.position.x = this.model.width / 2;\n handle.position.y = this.model.height / 2 - 0.25;\n if(handle.assetId) {\n handle.position.z = 0.75;\n }\n }\n }\n\n this.pipelineUpdate();\n }\n );\n }\n\n isBoxOnly() {\n return this.model.scoop || this.model.panel == null || this.model.panel.style == null;\n }\n\n}\n","import Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport ModelLoader from '../ModelLoader';\nimport assets from '../assets';\nimport { Box3, Material, Mesh, MeshBasicMaterial, Object3D, PlaneGeometry } from 'three';\nimport { GenericAsset } from '../domain';\nimport { zip } from '../utils';\n\nconst ml = ModelLoader.getInstance();\n\n// this isn't really invisible, it's just not shown because the hit rectangle\n// is not shown.\nconst invisibleMaterial = new MeshBasicMaterial({\n color: 0x00FF00\n});\n\nexport default class GenericAssetView extends BaseView {\n\n declare model: GenericAsset;\n root: Object3D;\n hit: Mesh;\n hitBox: Box3 = new Box3();\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n\n this.name = 'Generic Asset';\n this.userData.isGenericAsset = true;\n this.userData.suppressExport = true;\n\n this.init();\n }\n\n make() {\n\n this.hit = new Mesh(new PlaneGeometry(), invisibleMaterial);\n this.hit.visible = false;\n this.hit.userData.isSelectable = true;\n this.hit.userData.isMovable = true;\n this.add(this.hit);\n\n this.setGlbMaterialOpacity = this.setGlbMaterialOpacity.bind(this);\n }\n\n bind() {\n const updateAppearance = this.updateAppearance.bind(this);\n this.model.bind('assetId', updateAppearance);\n this.model.bind('filename', updateAppearance);\n this.model.on('width', updateAppearance);\n }\n\n updateAppearance() {\n this.updates.queue(\n () => this.loadAsset(this.model),\n (object: Object3D) => {\n this.highlights.clear();\n object.traverse(obj => {\n if(obj instanceof Mesh) {\n this.highlights.add(obj);\n }\n });\n this.root?.removeFromParent();\n this.root = object;\n this.add(this.root);\n\n this.hitBox.makeEmpty();\n this.hitBox.expandByObject(this.root);\n\n const width = this.hitBox.max.x - this.hitBox.min.x;\n const height = this.hitBox.max.y - this.hitBox.min.y;\n\n // Make sure that the origin is on the bottom edge of the object\n // TODO: this doesn't work consistently for various origin\n // placements, possibly because that hit box is in the global\n // reference frame.\n //this.root.position.y = -this.hitBox.min.y;\n\n this.hit.scale.set(width, height, 1);\n this.hit.position.set(0, height/2, 12);\n\n this.pipelineUpdate();\n });\n }\n\n /**\n * Loads and sets up materials for generic assets.\n */\n async loadAsset(asset: GenericAsset) {\n let filename: string;\n if(asset.assetId) {\n filename = assets.resolve(asset.assetId, \"LowResModel\");\n }\n else {\n // old way of getting filename, now deprecated in favor of the\n // assetId field\n filename = asset.filename;\n }\n if(filename.indexOf('#') != -1) {\n const target = this.model.width;\n let closest = 0\n for(const width of this.model.availableWidths) {\n if(width > closest && width <= target) {\n closest = width;\n }\n }\n // fill in the default value if it's missing somehow\n if(closest == 0) {\n closest = this.model.availableWidths?.length > 0 ?\n Math.min(...this.model.availableWidths)\n : 24;\n }\n filename = filename.replace('#', String(closest));\n }\n const object = await ml.get(filename);\n const suffix = filename.split('.').pop().toLowerCase();\n\n if(asset.filename && asset.filename.indexOf('RodPD.obj') != -1) {\n for(const [child, material] of zip(object.children, asset.materials)) {\n this.bindMaterial(child as Mesh, material);\n ((child as Mesh).material as Material).needsUpdate = true;\n }\n }\n else if(suffix === \"obj\") {\n\n object.traverse(child => {\n if(child instanceof Mesh && child.geometry) {\n child.castShadow = true;\n child.receiveShadow = true;\n if (asset.materials.length > 1) {\n this.bindMaterialArray(child, asset.materials);\n } else {\n this.bindMaterial(child, asset.materials[0]);\n }\n child.material.needsUpdate = true;\n }\n });\n\n }\n else if(suffix === \"glb\"\n && asset.materials\n && asset.materials.length > 0)\n {\n const children = [];\n object.traverse(child => {\n if(child instanceof Mesh && child.geometry) {\n child.castShadow = true;\n child.receiveShadow = true;\n children.push(child);\n }\n });\n for(let [obj, mat] of zip(children, asset.materials)) {\n this.bindMaterial(obj, mat);\n }\n }\n else if(suffix == \"glb\") {\n asset.off('opacity', this.setGlbMaterialOpacity);\n asset.on('opacity', this.setGlbMaterialOpacity);\n }\n\n return object;\n };\n\n setGlbMaterialOpacity() {\n this.root.traverse(obj => {\n if(obj instanceof Mesh) {\n obj.material.transparent = true;\n obj.material.opacity = this.model.opacity;\n }\n });\n }\n\n}\n\n","import Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport GenericAssetView from './GenericAssetView';\nimport pc from '../ParametricCache';\nimport { BufferGeometry, Mesh } from 'three';\nimport { HookRack } from '../domain';\nimport { blank } from '../MaterialFactory';\nimport { uvNormalize } from '../IIID';\n\nexport default class HookrackView extends BaseView {\n\n declare model: HookRack;\n panel: Mesh;\n hooks: GenericAssetView[];\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n }\n\n make() {\n this.name = 'HookRack';\n this.userData.isHookRack = true;\n\n this.panel = new Mesh(new BufferGeometry(), blank);\n this.panel.castShadow = this.panel.receiveShadow = true;\n this.hooks = new Array(this.model.count);\n for(let i=0; i< this.model.count; i++) {\n this.hooks[i] = new GenericAssetView(this.model.hook, this.app);\n this.hooks[i].userData.suppressExport = false;\n this.add(this.hooks[i]);\n }\n\n this.add(this.panel);\n }\n\n bind() {\n const change = this.change.bind(this);\n this.model.bind('width', change);\n this.model.on('height', change);\n this.model.on('count', change);\n\n this.bindMaterial(this.panel, this.model.panel.material);\n }\n\n change() {\n this.updates.queue(\n async () => {\n let hooks: GenericAssetView[] = null;\n if(this.hooks.length != this.model.count) {\n hooks = new Array(this.model.count);\n for(let i=0; i< this.model.count; i++) {\n this.hooks[i] = new GenericAssetView(this.model.hook, this.app);\n this.hooks[i].userData.suppressExport = false;\n }\n }\n\n let panel = await pc.make('FrontPanel',\n this.model.panel.style,\n this.model.width,\n this.model.height,\n (this.model.width / this.model.height) >= 1 ? 'horizontal' : 'vertical');\n uvNormalize(panel);\n\n return { panel, hooks };\n },\n ({panel, hooks}) => {\n \n this.panel.geometry = panel;\n panel.computeBoundingBox();\n const panelDepth =\n panel.boundingBox.max.z - panel.boundingBox.min.z;\n\n if(hooks) {\n for(let old of this.hooks) {\n old.removeFromParent();\n }\n this.hooks = hooks;\n for(let hook of hooks) {\n this.add(hook);\n }\n }\n\n if((this.model.width / this.model.height) >= 1) {\n const space = this.model.width / this.model.count;\n for(let i=0; i < this.hooks.length; i++) {\n this.hooks[i].position.set(\n space/2 + space*i,\n this.model.height / 2,\n panelDepth);\n }\n } else {\n const space = this.model.height / this.model.count;\n for(let i=0; i < this.hooks.length; i++) {\n this.hooks[i].position.set(\n this.model.width / 2,\n space/2 + space*i,\n panelDepth);\n }\n }\n\n });\n }\n}\n","import Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport DoorView from './DoorView';\nimport GenericAssetView from './GenericAssetView';\nimport { Group } from 'three';\nimport { Murphybed } from '../domain';\n\nconst PIVOT_HEIGHT = 13;\n\nexport default class MurphybedView extends BaseView {\n\n declare model: Murphybed;\n \n pivot: Group;\n movables: Group;\n mattressOrientation: Group;\n\n mattress: GenericAssetView;\n door: DoorView;\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n }\n\n make() {\n this.name = 'Murphybed';\n this.mattress = new GenericAssetView(this.model.mattress, this.app);\n this.mattress.name = 'Mattress';\n this.mattress.userData.suppressExport = false;\n\n this.door = new DoorView(this.model.door, this.app);\n\n this.pivot = new Group();\n this.movables = new Group();\n this.mattressOrientation = new Group(); \n\n this.mattressOrientation.add(this.mattress);\n this.movables.add(this.mattressOrientation);\n this.movables.add(this.door);\n this.pivot.add(this.movables);\n this.add(this.pivot);\n\n this.pivot.position.set(0, PIVOT_HEIGHT - this.model.position.y, this.model.depth);\n this.movables.position.y = -this.pivot.position.y;\n }\n\n bind() {\n const changeSize = this.changeSize.bind(this);\n this.model.bind('width', changeSize);\n this.model.on('height', changeSize);\n this.model.on('size', changeSize);\n\n this.model.bind('open', () => {\n this.pivot.rotation.set(this.model.open*Math.PI/2, 0, 0);\n });\n }\n\n changeSize() {\n let width: number, height: number;\n switch(this.model.size) {\n case 'queen':\n width = 60;\n height = 75;\n break;\n case 'full':\n width = 54;\n height = 74;\n break;\n case 'twin':\n width = 38;\n height = 74;\n break;\n }\n if(!this.model.width) this.model.width = width;\n if(!this.model.height) this.model.height = height;\n if(this.model.direction == 'horizontal') {\n let w = height, h = width;\n this.mattressOrientation.rotation.set(-Math.PI/2, Math.PI/2, 0);\n this.mattress.position.set(\n -this.model.height + (this.model.height - h) / 2,\n 0,\n (this.model.width - w) / 2,\n );\n } else {\n this.mattressOrientation.rotation.set(-Math.PI/2, 0, 0);\n this.mattress.position.set(\n (this.model.width - width) / 2,\n 0,\n (this.model.height - height)/2);\n }\n \n this.model.door.batch(() => {\n this.model.door.width = this.model.width;\n this.model.door.height = this.model.height;\n });\n }\n}\n","import { Obstruction } from '../domain';\nimport BaseView from './BaseView';\n\nexport default class ObstructionView extends BaseView {\n\n declare model: Obstruction;\n\n protected make(): void {\n\n }\n protected bind(): void {\n\n }\n}\n","import Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport logging from '../logging';\nimport pc from '../ParametricCache';\nimport { Mesh, BufferGeometry, Material } from 'three';\nimport { ParametricPart } from '../domain';\n\nconst log = logging('view');\n\nexport default class ParametricPartView extends BaseView {\n\n declare model: ParametricPart;\n\n mesh: Mesh;\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n }\n\n make() {\n this.name = this.model.name;\n\n this.mesh = new Mesh(new BufferGeometry(), new Material());\n this.mesh.castShadow = this.mesh.receiveShadow = true;\n this.add(this.mesh);\n\n this.mesh.userData.isSelectable = true;\n this.mesh.userData.isMovable = true;\n this.mesh.userData.cursor = 'row-resize';\n this.mesh.userData.isParametricPart = true;\n\n this.highlights.add(this.mesh);\n }\n\n bind() {\n this.bindMaterialArray(this.mesh, this.model.materials);\n let changeSize = this.changeSize.bind(this);\n this.model.bind('width', changeSize);\n this.model.on('height', changeSize);\n this.model.on('depth', changeSize);\n }\n\n private async changeSize() {\n if(this.model.name == 'HangBar') {\n this.mesh.position.z = 12;\n this.updates.queue(\n async () => await pc.make(\n this.model.name,\n this.app.defaults.style.rod,\n this.model.width),\n (geo) => {\n this.mesh.geometry = geo;\n }\n );\n }\n else if(this.model.name == 'SlantedShelfWithFence') {\n this.updates.queue(\n async () => await pc.make(\n this.model.name,\n this.app.defaults.style.fence,\n this.model.width,\n this.model.height,\n this.model.depth),\n (geo) => {\n this.mesh.geometry = geo;\n }\n );\n }\n else {\n this.updates.queue(\n async () => await pc.make(this.model.name,\n this.model.width, this.model.height, this.model.depth),\n (geo) => {\n this.mesh.geometry = geo;\n }\n );\n }\n }\n\n}\n","import * as config from '../config';\nimport Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport ModelLoader from '../ModelLoader';\nimport logging from '../logging';\nimport { BufferGeometry, Material, Mesh, Object3D } from 'three';\nimport { Lights } from '../domain';\nimport { zip } from '../utils';\n\nconst log = logging('view');\n\nconst ml = ModelLoader.getInstance();\n\nexport default class LightsView extends BaseView {\n\n declare model: Lights;\n mesh: Mesh;\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n }\n\n make() {\n this.mesh = new Mesh(new BufferGeometry(), [new Material()]);\n this.mesh.castShadow = this.mesh.receiveShadow = true;\n }\n\n bind() {\n this.updateGeometry = this.updateGeometry.bind(this);\n this.updateLayout = this.updateLayout.bind(this);\n\n this.model.bind('materials', () => {\n this.bindMaterialArray(this.mesh, this.model.materials);\n });\n\n this.model.bind('type', this.updateGeometry);\n this.model.on('count', this.updateGeometry);\n\n this.model.on('width', this.updateLayout);\n this.model.on('height', this.updateLayout);\n this.model.on('depth', this.updateLayout);\n }\n\n updateGeometry() {\n for(const mesh of Array.from(this.children)) {\n mesh.removeFromParent();\n }\n if(this.model.type == 'strip') {\n this.updates.queue(\n () => ml.get(`${config.models}/strip_light_horizontal.obj`),\n (obj: Object3D) => {\n obj.traverse(child => {\n if(child instanceof Mesh) {\n this.mesh.geometry = child.geometry;\n }\n });\n this.mesh.geometry.addGroup(\n 0, this.mesh.geometry.attributes.position.count, 0);\n this.add(this.mesh);\n this.updateLayout();\n this.pipelineUpdate();\n });\n }\n // otherwise this is a puck light or set of puck lights\n else {\n this.updates.queue(\n () => ml.get(`${config.models}/puck_light.obj`),\n (obj: Object3D) => {\n obj.traverse(child => {\n if(child instanceof Mesh){\n this.mesh.geometry = child.geometry;\n }\n });\n\n for(let i=0; i < this.model.count; i++) {\n this.add(this.mesh.clone());\n }\n this.updateLayout();\n this.pipelineUpdate();\n });\n }\n }\n\n updateLayout() {\n if(this.children.length == 0) {\n return; // nothing to do until we have updated geometry\n }\n if(this.model.type == 'strip') {\n const obj = this.children[0];\n obj.scale.x = this.model.width;\n obj.position.x = this.model.width / 2;\n obj.position.y = this.model.height;\n obj.position.z = this.model.depth;\n }\n else {\n let positions: number[];\n\n switch(this.model.count) {\n case 1:\n positions = [0.5];\n break;\n case 2:\n positions = [0.25, 0.75];\n break;\n case 3:\n positions = [0.25, 0.5, 0.75];\n break;\n case 4:\n positions = [0.2, 0.4, 0.6, 0.8];\n break;\n default:\n positions = [];\n log.error(`LightsView.updateLayout() unsupported puck light count ${this.model.count}`);\n }\n\n for(const [position, puck] of zip(positions, this.children)) {\n puck.position.x = position * this.model.width;\n puck.position.y = this.model.height;\n puck.position.z = this.model.depth;\n }\n\n }\n }\n}\n","import { range } from '../utils';\n\ninterface Box {\n position: {x: number, y: number };\n width: number;\n height: number;\n}\n\ninterface Divider extends Box {\n thickness: number;\n};\n\n/**\n * This little adapter helps the StackLayoutHelper to deal with dividers\n * correctly using their thickness rather than width and height.\n */\nexport class DividerBox implements Box {\n divider: Divider;\n constructor(divider: Divider) {\n this.divider = divider;\n }\n get position() {\n return this.divider.position;\n }\n\n set position(value) {\n this.divider.position.x = value.x;\n this.divider.position.y = value.y;\n }\n\n get width() {\n return this.divider.thickness || 0.75;\n }\n\n set width(value) {\n this.divider.width = value;\n }\n\n get height() {\n return this.divider.thickness || 0.75;\n }\n\n set height(value) {\n this.divider.height = value;\n }\n}\n\n/**\n * The StackLayoutHelper\n */\nexport default class StackLayoutHelper {\n\n width: number = 1;\n height: number = 1;\n orientation: \"width\" | \"height\" = \"width\";\n alignment: \"start\" | \"end\" = \"start\";\n\n boxes: Box[] = [];\n\n constructor(\n width?: number,\n height?: number,\n orientation?: \"width\" | \"height\",\n alignment?: \"start\" | \"end\",\n boxes?: Box[])\n {\n if(width) this.width = width;\n if(height) this.height = height;\n if(orientation) this.orientation = orientation;\n if(alignment) this.alignment = alignment;\n if(boxes) this.boxes = boxes;\n }\n\n /**\n * This is always opposite to our orientation so we can use it to access\n * the *other* dimension. This is useful because the boxes in a stack\n * always inherit their transverse dimension from their parent.\n */\n get transverse(): \"width\" | \"height\" {\n if(this.orientation == \"width\") {\n return \"height\";\n } else {\n return \"width\";\n }\n }\n\n /**\n * If we're width-oriented (this.orientation == 'width'), then we're\n * stacking in the X direciton. Otherwise we're stacking in the Y\n * direction.\n */\n get component(): \"x\" | \"y\" {\n if(this.orientation == \"height\") {\n return \"y\";\n } else {\n return \"x\";\n }\n }\n\n get otherComponent(): \"x\" | \"y\" {\n if(this.orientation == \"height\") {\n return \"x\";\n } else {\n return \"y\";\n }\n }\n\n layout(): boolean {\n if(this.boxes.length == 0) return;\n\n let changed: boolean;\n\n // The default is start, so anything but 'end' explicitly should give\n // us a start layout.\n if(this.alignment == 'end') {\n changed = this.layoutEnd();\n }\n else {\n changed = this.layoutStart();\n }\n\n for(let box of this.boxes) {\n // The transverse property is the width/height that is opposite to\n // our actual orientation\n box[this.transverse] = this[this.transverse];\n }\n\n return changed;\n }\n\n /**\n * Takes care of the box offsets when the layout is aligned toward the\n * start. This is called by layout() and shouldn't be needed elsewhere.\n */\n private layoutStart(): boolean {\n const dim = this.component;\n const otherDim = this.otherComponent;\n\n let offset = 0;\n let changed = false;\n\n for(let i of range(0, this.boxes.length - 1)) {\n const box = this.boxes[i];\n if(box.position[dim] != offset) {\n box.position[dim] = offset;\n box.position[otherDim] = 0;\n changed = true;\n }\n offset += box[this.orientation];\n }\n let final = this.boxes[this.boxes.length - 1];\n if(final.position[dim] != offset) {\n final.position[dim] = offset;\n final.position[otherDim] = 0;\n changed = true;\n }\n final[this.orientation] = this[this.orientation] - offset;\n\n return changed;\n }\n\n /**\n * Takes care of the box offsets when the layout is aligned toward the\n * end. This is called by layout() and shouldn't be needed elsewhere.\n */\n private layoutEnd(): boolean {\n const dim = this.component;\n const otherDim = this.otherComponent;\n\n let offset = this[this.orientation];\n let total = 0;\n\n let changed = false;\n\n for(let i of range(this.boxes.length - 1, 0)) {\n const box = this.boxes[i];\n offset -= box[this.orientation];\n if(box.position[dim] != offset) {\n box.position[dim] = offset;\n box.position[otherDim] = 0;\n changed = true;\n }\n total += box[this.orientation];\n }\n\n let start = this.boxes[0];\n if(start.position[dim] != 0) {\n start.position[dim] = 0;\n start.position[otherDim] = 0;\n changed = true;\n }\n start[this.orientation] = this[this.orientation] - total;\n\n return changed;\n }\n}\n","import Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport CubbyView from './CubbyView';\nimport DividerView from './DividerView';\nimport DoorView from './DoorView';\nimport DrawerView from './DrawerView';\nimport GenericAssetView from './GenericAssetView';\nimport LightsView from './LightsView';\nimport ParametricPartView from './ParametricPartView';\nimport StackLayoutHelper, { DividerBox } from './StackLayoutHepler';\nimport logging from '../logging';\nimport { Mesh, MeshBasicMaterial, PlaneGeometry } from 'three';\nimport { Section } from '../domain';\nimport { deferred, zip } from '../utils';\nimport { gammaCorrect } from '../utils/gammaCorrect';\n\nconst log = logging('view');\n\nconst unitPlane = new PlaneGeometry(1, 1);\n // new BoxGeometry(1, 1, 1);\nunitPlane.translate(0.5, 0.5, 0);\n\n// Used on planes that provide hit detection for sections.\nconst hitMaterial = new MeshBasicMaterial({\n color: gammaCorrect(0x14a79d),\n});\n\nexport default class SectionView extends BaseView {\n\n declare model: Section;\n\n sections: SectionView[];\n dividers: DividerView[];\n lights: LightsView;\n\n hit: Mesh;\n\n private helper: StackLayoutHelper;\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n }\n\n make() {\n this.name = 'Section';\n\n this.sections = [];\n this.dividers = [];\n this.changeSize = this.changeSize.bind(this);\n\n this.helper = new StackLayoutHelper();\n this.helper.width = this.model.width;\n this.helper.height = this.model.height;\n this.helper.orientation = this.model.orientation == 'row' ? 'width' : 'height';\n this.helper.alignment = this.model.alignment;\n\n this.hit = new Mesh(unitPlane, hitMaterial);\n this.hit.visible = false;\n this.add(this.hit);\n\n this.hit.name = 'Section Hit';\n // Only \"leaf\" sections are directly selectable. Parent sections are\n // selected indirectly by clicking again on a leaf in order to select\n // the next parent\n this.hit.userData.isSelectable = (this.model.sections.length == 0);\n this.hit.userData.isSectionHit = true;\n\n this.highlights.add(this.hit);\n\n this.userData.isParametric = true;\n this.name = 'Section';\n\n for(let asset of this.model.assets) {\n let view = new GenericAssetView(asset, this.app);\n this.add(view);\n }\n for(let part of this.model.parametricParts) {\n let view = new ParametricPartView(part, this.app);\n this.add(view);\n }\n if(this.model.door) {\n this.add(new DoorView(this.model.door, this.app));\n }\n if(this.model.cubby) {\n this.add(new CubbyView(this.model.cubby, this.app));\n }\n if(this.model.lights) {\n this.lights = new LightsView(this.model.lights, this.app);\n this.add(this.lights);\n }\n for(let drawer of this.model.drawers) {\n this.add(new DrawerView(drawer, this.app));\n }\n\n if(this.model.sections.length == 0) {\n return; // nothing to do\n }\n if(this.model.sections.length == 1) {\n log.error(\"This Section model has a single child section and can't be\"\n + \" rendered\", this.model);\n }\n else if(this.model.sections.length != 1 + this.model.dividers.length) {\n log.error(\"This Section model doesn't have n+1 sections for n dividers.\", this.model);\n }\n else if(this.model.sections.length > 1) {\n\n for(const [subsection, divider] of\n zip(this.model.sections, this.model.dividers))\n { \n const subsectionView = new SectionView(subsection, this.app);\n this.sections.push(subsectionView);\n this.add(subsectionView);\n this.helper.boxes.push(subsection);\n\n const dividerView = new DividerView(divider, this.app);\n this.dividers.push(dividerView);\n this.add(dividerView);\n this.helper.boxes.push(new DividerBox(divider));\n\n if(this.model.orientation == 'row') {\n divider.height = this.model.height;\n divider.orientation = \"vertical\";\n } else {\n divider.width = this.model.width;\n divider.orientation = \"horizontal\";\n }\n }\n\n // The last lonely section who has no companion divider\n const last = this.model.sections[this.model.sections.length - 1];\n const lastView = new SectionView(last, this.app);\n this.sections.push(lastView);\n this.add(lastView);\n this.helper.boxes.push(last);\n }\n }\n\n bind() {\n this.model.bind('width', this.changeSize);\n this.model.on('height', this.changeSize);\n this.model.on('depth', this.changeSize);\n this.model.on('thickness', () => {\n for(let subsection of this.model.sections) {\n subsection.trigger('thickness');\n }\n for(let divider of this.model.dividers) {\n divider.trigger('thickness');\n }\n });\n\n this.model.on('orientation', this.changeSize);\n this.model.on('alignment', this.changeSize);\n\n this.model.on('lights', () => {\n this.lights?.removeFromParent();\n if(this.model.lights) {\n this.lights = new LightsView(this.model.lights, this.app);\n this.add(this.lights);\n this.layoutLights();\n } else {\n this.lights = null;\n this.pipelineUpdate();\n }\n });\n\n // I'm not totally clear on why changeSize has to be deferred, but it\n // interferes with adding new shelves if it is not\n if(this.model.orientation == 'row') {\n for(let subsection of this.model.sections) {\n subsection.on('width', deferred(this.changeSize));\n }\n } else if(this.model.orientation == 'column') {\n for(let subsection of this.model.sections) {\n subsection.on('height', deferred(this.changeSize));\n }\n }\n }\n\n private changeSize() {\n this.layoutSelf();\n this.layoutDividers();\n this.layoutAssets();\n this.layoutParametricParts();\n if(this.model.cubby) this.layoutCubby();\n if(this.model.door) this.layoutDoor();\n if(this.model.lights) this.layoutLights();\n this.layoutDrawers();\n }\n\n private layoutSelf() {\n this.helper.width = this.model.width;\n this.helper.height = this.model.height;\n\n this.helper.orientation = this.model.orientation == 'row' ? 'width' : 'height';\n this.helper.alignment = this.model.alignment;\n\n if(this.model.sections.length > 1) {\n this.helper.boxes = [];\n for(const [subsection, divider] of\n zip(this.model.sections, this.model.dividers))\n {\n this.helper.boxes.push(subsection);\n this.helper.boxes.push(new DividerBox(divider));\n }\n const last = this.model.sections[this.model.sections.length - 1];\n this.helper.boxes.push(last);\n }\n\n for(let subsection of this.model.sections) {\n subsection.depth = this.model.depth;\n }\n\n this.helper.layout();\n this.hit.scale.set(this.model.width, this.model.height, 1);\n }\n\n private layoutAssets() {\n for(const asset of this.model.assets) {\n asset.position.x = this.model.width / 2;\n asset.width = this.model.width;\n }\n }\n\n private layoutDividers() {\n for(const divider of this.model.dividers) {\n divider.depth = this.model.depth;\n if(this.model.orientation == 'row') {\n divider.height = this.model.height;\n divider.orientation = \"vertical\";\n } else {\n divider.width = this.model.width;\n divider.orientation = \"horizontal\";\n }\n }\n }\n\n private layoutParametricParts() {\n for(let part of this.model.parametricParts) {\n part.width = this.model.width;\n part.depth = this.model.depth;\n }\n }\n\n private layoutCubby() {\n this.model.cubby.width = this.model.width;\n this.model.cubby.height = this.model.height;\n this.model.cubby.depth = this.model.depth;\n }\n\n private layoutDoor() {\n this.model.door.width = this.model.width + 0.5;\n this.model.door.height = this.model.height + 6/8;\n this.model.door.position.x = -0.25;\n this.model.door.position.y = -3/8;\n this.model.door.position.z = this.model.depth;\n }\n\n private layoutLights() {\n this.model.lights.width = this.model.width;\n this.model.lights.height = this.model.height;\n this.model.lights.depth = this.model.depth - 3;\n }\n\n private layoutDrawers() {\n for(let drawer of this.model.drawers) {\n drawer.width = this.model.width + 0.5;\n drawer.depth = this.model.depth;\n drawer.position.x = -0.25;\n drawer.position.z = this.model.depth;\n }\n }\n}\n","import Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport logging from '../logging';\nimport pc from '../ParametricCache';\nimport { Mesh, BufferGeometry, Material } from 'three';\nimport { VerticalPanel } from '../domain';\n\nconst log = logging('view');\n\nexport default class VerticalPanelView extends BaseView {\n\n declare model: VerticalPanel;\n\n mesh: Mesh;\n\n highlights: Set = new Set();\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n }\n\n async make() {\n\n this.userData.isParametric = true;\n this.name = 'VerticalPanel';\n\n this.mesh = new Mesh(new BufferGeometry(), new Material());\n this.mesh.castShadow = true;\n this.mesh.receiveShadow = true;\n this.add(this.mesh);\n }\n\n protected bind(): void {\n this.changeSize = this.changeSize.bind(this);\n this.model.bind('width', this.changeSize);\n this.model.on('depth', this.changeSize);\n\n this.model.bind('thickness', () => {\n const scale = this.model.thickness / 0.75;\n this.mesh.scale.set(scale, 1, 1);\n });\n\n this.bindMaterial(this.mesh, this.model.material);\n }\n\n private changeSize() {\n this.updates.queue(\n async () => {\n let geometry = await pc.make(\n 'VerticalBoringPanel', \n 'boring_panel_half',\n this.model.height,\n this.model.depth,\n this.model.mirror,\n );\n return geometry;\n },\n (geo: BufferGeometry) => {\n this.mesh.geometry = geo;\n this.pipelineUpdate();\n }\n );\n }\n\n}\n","import * as dm from '../domain';\nimport ApplianceView from './ApplianceView';\nimport Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport CabinetView from './CabinetView';\nimport CubbyView from './CubbyView';\nimport DividerView from './DividerView';\nimport DoorView from './DoorView';\nimport DrawerView from './DrawerView';\nimport GenericAssetView from './GenericAssetView';\nimport HookRackView from './HookRackView';\nimport MurphybedView from './MurphybedView';\nimport ObstructionView from './ObstructionView';\nimport ParametricPartView from './ParametricPartView';\nimport SectionView from './SectionView';\nimport VerticalPanelView from './VerticalPanelView';\nimport mfac from '../MaterialFactory';\nimport pc from '../ParametricCache';\nimport { BoxGeometry, BufferGeometry, Color, Material, Mesh, MeshBasicMaterial, MeshPhongMaterial, MeshStandardMaterial, Object3D, } from 'three';\nimport { lerp, pairwise, partition, zip } from '../utils';\nimport { wallLength } from '../controllers/wallControllers';\n\n\ntype SpaceProperties = {\n start: number;\n width: number;\n open: boolean;\n extension: boolean;\n}\n\n// Red, shadeless material for the line dividing the wall from the extension\nexport const EXTENSION_LINE_MATERIAL = new MeshBasicMaterial({color: 0xE6160B});\n\nlet unitCubeGeometry: BufferGeometry;\nconst unitCube = (mat: Material) => {\n if(!unitCubeGeometry) {\n unitCubeGeometry = new BoxGeometry(1, 1, 1);\n unitCubeGeometry.translate(0.5, 0.5, 0.5);\n }\n return new Mesh(unitCubeGeometry, mat);\n};\n\n/**\n * Used internally. The important thing is definining the toString() method,\n * which allows us to directly pass a Space instance to the ParametricCache.\n * A plain object would have the cache key \"[object Object]\", so all spaces\n * would appear the same.\n */\nclass Space {\n start: number;\n width: number;\n open: boolean;\n extension: boolean;\n\n constructor(init: SpaceProperties) {\n this.start = init.start;\n this.width = init.width;\n this.open = init.open;\n this.extension = init.extension;\n }\n\n toString() {\n return `${this.start},${this.width},${this.open?1:0},${this.extension?1:0}`;\n }\n}\n\nexport const getParentWallView = (view: BaseView): WallView | undefined => {\n let parent: Object3D | undefined = view;\n while(view != null) {\n if(parent instanceof WallView) {\n return parent;\n }\n parent = parent.parent;\n }\n return undefined;\n}\n\nexport default class WallView extends BaseView {\n\n declare model: dm.Wall;\n meshes: Mesh[] = [];\n\n leftExtensionLine?: Mesh;\n rightExtensionLine?: Mesh;\n\n spaces: Space[] = [];\n\n // Hides the first 4.5\" of the wall so that it does not intersect a\n // connected wall at +90 degrees causing z-fighting and over-shading in\n // a Cycles render.\n hideStart: boolean;\n\n constructor(model: DomainModel3D, app: Application, hideStart: boolean) {\n super(model, app);\n\n this.hideStart = hideStart;\n\n this.init();\n }\n\n make() {\n setupSpacesArray(this.model, this.spaces);\n\n for(const _ of this.spaces) {\n const mesh = new Mesh(new BufferGeometry(), new Material())\n mesh.castShadow = mesh.receiveShadow = true;\n\n this.meshes.push(mesh);\n this.add(mesh);\n }\n\n for(let panel of this.model.panels) {\n this.add(new VerticalPanelView(panel, this.app));\n }\n\n for(let door of this.model.doors) {\n this.add(new DoorView(door, this.app));\n }\n\n for(let drawer of this.model.drawers) {\n this.add(new DrawerView(drawer, this.app));\n }\n\n for(let divider of this.model.dividers) {\n this.add(new DividerView(divider, this.app));\n }\n\n for(let asset of this.model.assets) {\n this.add(new GenericAssetView(asset, this.app));\n }\n\n for(let rack of this.model.hookRacks) {\n this.add(new HookRackView(rack, this.app));\n }\n\n for(let bed of this.model.beds) {\n this.add(new MurphybedView(bed, this.app));\n }\n\n for(let part of this.model.parametricParts) {\n this.add(new ParametricPartView(part, this.app));\n }\n\n for(let cubby of this.model.cubbies) {\n this.add(new CubbyView(cubby, this.app));\n }\n\n for(let section of this.model.sections) {\n this.add(new SectionView(section, this.app));\n }\n\n for(const cabinet of this.model.cabinets) {\n this.add(new CabinetView(cabinet, this.app));\n }\n\n for(const appliance of this.model.appliances) {\n this.add(new ApplianceView(appliance, this.app));\n }\n\n for(const obstruction of this.model.obstructions) {\n this.add(new ObstructionView(obstruction, this.app));\n }\n }\n\n bind() {\n this.buildGeometry = this.buildGeometry.bind(this);\n\n if(this.model.material.type == null) {\n this.model.material = dm.Material.fromJSON({\n type: \"WallPaint\",\n });\n }\n\n type Mat = MeshPhongMaterial | MeshStandardMaterial;\n const\n normalMat = mfac.makefrom(this.model.material) as Mat,\n openMat = (mfac.make('WallPaint') as Mat).clone(),\n extensionMat = mfac.make('WallExtension') as Mat,\n openExtensionMat = extensionMat.clone();\n openMat.color = openExtensionMat.color = new Color(\"#808080\");\n const updateMaterials = () => {\n for(const [mesh, space] of zip(this.meshes, this.spaces)) {\n switch(true) {\n case this.model.showOpenSpace && this.model.showExtension\n && space.open && space.extension:\n mesh.material = openExtensionMat;\n break;\n case this.model.showOpenSpace && space.open:\n mesh.material = openMat;\n break;\n case this.model.showExtension && space.extension:\n mesh.material = extensionMat;\n break;\n default:\n mesh.material = normalMat;\n }\n }\n };\n this.model.bind('showOpenSpace', updateMaterials);\n this.model.bind('showExtension', updateMaterials);\n\n const changeSize = () => {\n this.updates.queue(\n this.buildGeometry,\n (geos) => {\n for(const [mesh, geo] of zip(this.meshes, geos)) {\n mesh.geometry = geo;\n }\n }\n );\n };\n this.model.bind('depth', changeSize);\n this.model.on('heights', changeSize);\n\n this.model.bind('visible', () => {\n for(const mesh of this.meshes) {\n mesh.visible = this.model.visible;\n }\n });\n }\n\n async buildGeometry(): Promise {\n // the heights we pass to ParametricCache\n const\n heights = this.model.heights.map(h => { return {x: h.x, height: h.height} }),\n flatHeights: number[] = [];\n\n if(this.model.showExtension) {\n if(this.model.leftExtension > 0) {\n for(const height of heights) {\n height.x += this.model.leftExtension;\n }\n heights.splice(0, 0, {x: 0, height: heights[0].height});\n if(!this.leftExtensionLine) {\n this.leftExtensionLine = unitCube(EXTENSION_LINE_MATERIAL);\n }\n this.leftExtensionLine.position.set(\n this.model.leftExtension - 0.25, 0, 0);\n this.leftExtensionLine.scale.set(\n 0.5, this.model.heights[0].height, 0.1);\n this.leftExtensionLine.removeFromParent();\n this.add(this.leftExtensionLine);\n } else {\n if(this.leftExtensionLine) {\n this.leftExtensionLine.removeFromParent();\n this.leftExtensionLine = null;\n }\n }\n if(this.model.rightExtension > 0) {\n const last = heights[heights.length - 1];\n heights.push({x: last.x + this.model.rightExtension,\n height: heights[heights.length - 1].height});\n if(!this.rightExtensionLine) {\n this.rightExtensionLine = unitCube(EXTENSION_LINE_MATERIAL);\n }\n\n this.rightExtensionLine.position.set(\n (this.model.leftExtension ?? 0) + wallLength(this.model) - 0.25,\n 0,\n 0);\n const h = this.model.heights;\n this.rightExtensionLine.scale.set(\n 0.5, h[h.length-1].height, 0.1);\n this.rightExtensionLine.removeFromParent();\n this.add(this.rightExtensionLine);\n } else {\n if(this.rightExtensionLine) {\n this.rightExtensionLine.removeFromParent();\n this.rightExtensionLine = null;\n }\n }\n }\n\n if(this.hideStart) {\n const\n [left, right] = partition(heights, w => w.x < 4.5),\n a = left[left.length - 1],\n b = right[0],\n // \n t = 4.5 / (b.x - a.x),\n height = lerp(a.height, b.height, t);\n flatHeights.push(4.5, height);\n for(const {x, height} of right) {\n flatHeights.push(x, height);\n }\n }\n else {\n for(const {x, height} of heights) {\n flatHeights.push(x, height);\n }\n }\n return await pc.make('Wall', flatHeights, this.spaces) as any as BufferGeometry[];\n }\n\n}\n\nconst setupSpacesArray = (model: dm.Wall, spaces: Space[]) => {\n // We build up a list of x coordinates where there are changes from open\n // to non-open or from extension to normal textures. Later we create spaces\n // that span the gaps between the members of the list.\n const\n length = wallLength(model),\n points = [0, length];\n if(model.showExtension) {\n if(model.rightExtension > 0) {\n // add the extended right end\n points.push(model.rightExtension + length);\n }\n if(model.leftExtension > 0) {\n for(let i=0; i < points.length; i++) {\n points[i] += model.leftExtension;\n }\n // add the left extreme point\n points.push(0);\n }\n }\n // Note that points may contain duplicates, but we will sort it and ignore\n // intervals with zero widths\n const offset = model.showExtension ? 0 : -model.leftExtension;\n for(const space of model.openSpaces) {\n const start = space.start + offset;\n points.push(start);\n points.push(start + space.width);\n }\n points.sort((a, b) => a - b);\n\n const\n leftEnd = model.leftExtension,\n rightEnd = leftEnd + length;\n for(const [a, b] of pairwise(points)) {\n const width = b - a;\n // checking the width effectively de-duplicates the points array\n if(width > 0) {\n spaces.push(new Space({\n start: a + offset,\n width: width,\n extension: a < leftEnd || a >= rightEnd,\n open: false,\n }));\n }\n }\n\n for(const openSpace of model.openSpaces) {\n for(const space of spaces) {\n const\n openStart = openSpace.start + offset,\n openEnd = openStart + openSpace.width,\n spaceStart = space.start,\n spaceEnd = spaceStart + space.width;\n if(spaceStart >= openStart && spaceEnd <= openEnd) {\n space.open = true;\n } else if(space.start > openEnd) {\n break;\n }\n }\n }\n}\n\n","import Application from \"../Application\";\nimport logging from '../logging';\nimport { Object3D, LineBasicMaterial, MeshBasicMaterial, Mesh, BufferGeometry, EdgesGeometry, Material, LineSegments } from \"three\";\nimport WallView, {EXTENSION_LINE_MATERIAL} from \"../views/WallView\";\nimport createTechDrawingLabel from \"./createTechDrawingLabel\";\n\nconst log = logging('utils');\n\n/**\n * In an earlier version, the AssemblyBuilder handled creating the 3D objects\n * with the technical document materials. This does the same thing so that\n * the old code may run unmodified with the new domain model and view classes.\n */\nconst toTechnicalDocument = (root: Object3D, isMetric: boolean, doorOpacity: number = 1) => {\n\n const\n lineMaterial = new LineBasicMaterial(\n { color: 0x000000, linewidth: 2 }),\n background = new MeshBasicMaterial(\n { color: 0xFFFFFF, opacity: 1, transparent: false }),\n transparent = new MeshBasicMaterial(\n { color: 0x000000, opacity: 0.25, transparent: true }),\n doorMaterial = new MeshBasicMaterial(\n { color: 0xFFFFFF, opacity: doorOpacity, transparent: doorOpacity != 1 }),\n meshes: Mesh[] = [],\n cache = new Map();\n\n root.traverse(obj => {\n if ((obj as any).isMesh && obj.visible && !obj.userData.isConvertedForTechDoc) {\n const mesh = obj as Mesh;\n meshes.push(mesh);\n }\n });\n for (const mesh of meshes) {\n try {\n // skip any labels that have been added prior to this call\n if(mesh.userData.isTechLabelMesh) continue;\n if(mesh.material == EXTENSION_LINE_MATERIAL) {\n mesh.removeFromParent();\n continue;\n }\n\n let material: Material;\n if (mesh.userData.isDoorMesh) {\n mesh.material = doorMaterial;\n } else {\n if (Array.isArray(mesh.material)) {\n material = mesh.material[0];\n } else {\n material = mesh.material;\n }\n switch (material.name) {\n case 'Glass':\n case 'Mirror':\n case 'FrostedGlass':\n mesh.material = transparent;\n break;\n default:\n mesh.material = background;\n }\n }\n\n let edges: EdgesGeometry;\n if (mesh.geometry == null) {\n continue;\n }\n else if (cache.has(mesh.geometry)) {\n edges = cache.get(mesh.geometry);\n } else {\n const pos = mesh.geometry.getAttribute('position');\n if (pos && pos.count > 0) {\n edges = new EdgesGeometry(mesh.geometry);\n cache.set(mesh.geometry, edges);\n }\n }\n\n const lines = new LineSegments(edges, lineMaterial);\n\n lines.position.copy(mesh.position);\n lines.rotation.copy(mesh.rotation);\n lines.scale.copy(mesh.scale);\n mesh.parent.add(lines);\n mesh.userData.isConvertedForTechDoc = true;\n } catch (error) {\n log.error(error);\n }\n }\n\n createWallHeightLabels(root, isMetric);\n \n Application.do('pipeline-update');\n};\n\nconst createWallHeightLabels = (root: Object3D, isMetric: boolean) => {\n root.traverse(obj => {\n if(obj instanceof WallView && !obj.model.island) {\n const wall = obj.model;\n\n for(const point of wall.heights) {\n const\n height = Math.round(point.height * 1000) / 1000,\n offset = wall.leftExtension ?? 0;\n createTechDrawingLabel(\n String(isMetric ? Math.round(25.4*height) : height),\n 2.8, // inches\n point.x + offset, // inches\n point.height, // inches\n root,\n );\n }\n }\n });\n};\n\nexport default toTechnicalDocument;\n","import {\n\tPlaneGeometry,\n\tShaderMaterial,\n\tUniform,\n\tMesh,\n\tPerspectiveCamera,\n\tScene,\n\tWebGLRenderer,\n\tCanvasTexture,\n\tSRGBColorSpace\n} from 'three';\n\nlet _renderer;\nlet fullscreenQuadGeometry;\nlet fullscreenQuadMaterial;\nlet fullscreenQuad;\n\nexport function decompress( texture, maxTextureSize = Infinity, renderer = null ) {\n\n\tif ( ! fullscreenQuadGeometry ) fullscreenQuadGeometry = new PlaneGeometry( 2, 2, 1, 1 );\n\tif ( ! fullscreenQuadMaterial ) fullscreenQuadMaterial = new ShaderMaterial( {\n\t\tuniforms: { blitTexture: new Uniform( texture ) },\n\t\tvertexShader: `\n\t\t\tvarying vec2 vUv;\n\t\t\tvoid main(){\n\t\t\t\tvUv = uv;\n\t\t\t\tgl_Position = vec4(position.xy * 1.0,0.,.999999);\n\t\t\t}`,\n\t\tfragmentShader: `\n\t\t\tuniform sampler2D blitTexture; \n\t\t\tvarying vec2 vUv;\n\n\t\t\tvoid main(){ \n\t\t\t\tgl_FragColor = vec4(vUv.xy, 0, 1);\n\t\t\t\t\n\t\t\t\t#ifdef IS_SRGB\n\t\t\t\tgl_FragColor = LinearTosRGB( texture2D( blitTexture, vUv) );\n\t\t\t\t#else\n\t\t\t\tgl_FragColor = texture2D( blitTexture, vUv);\n\t\t\t\t#endif\n\t\t\t}`\n\t} );\n\n\tfullscreenQuadMaterial.uniforms.blitTexture.value = texture;\n\tfullscreenQuadMaterial.defines.IS_SRGB = texture.colorSpace == SRGBColorSpace;\n\tfullscreenQuadMaterial.needsUpdate = true;\n\n\tif ( ! fullscreenQuad ) {\n\n\t\tfullscreenQuad = new Mesh( fullscreenQuadGeometry, fullscreenQuadMaterial );\n\t\tfullscreenQuad.frustumCulled = false;\n\n\t}\n\n\tconst _camera = new PerspectiveCamera();\n\tconst _scene = new Scene();\n\t_scene.add( fullscreenQuad );\n\n\tif ( renderer === null ) {\n\n\t\trenderer = _renderer = new WebGLRenderer( { antialias: false } );\n\n\t}\n\n\tconst width = Math.min( texture.image.width, maxTextureSize );\n\tconst height = Math.min( texture.image.height, maxTextureSize );\n\n\trenderer.setSize( width, height );\n\trenderer.clear();\n\trenderer.render( _scene, _camera );\n\n\tconst canvas = document.createElement( 'canvas' );\n\tconst context = canvas.getContext( '2d' );\n\n\tcanvas.width = width;\n\tcanvas.height = height;\n\n\tcontext.drawImage( renderer.domElement, 0, 0, width, height );\n\n\tconst readableTexture = new CanvasTexture( canvas );\n\n\treadableTexture.minFilter = texture.minFilter;\n\treadableTexture.magFilter = texture.magFilter;\n\treadableTexture.wrapS = texture.wrapS;\n\treadableTexture.wrapT = texture.wrapT;\n\treadableTexture.name = texture.name;\n\n\tif ( _renderer ) {\n\n\t\t_renderer.forceContextLoss();\n\t\t_renderer.dispose();\n\t\t_renderer = null;\n\n\t}\n\n\treturn readableTexture;\n\n}\n","import {\n\tBufferAttribute,\n\tClampToEdgeWrapping,\n\tColor,\n\tDoubleSide,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tNoColorSpace,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tMathUtils,\n\tMatrix4,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tPropertyBinding,\n\tRGBAFormat,\n\tRepeatWrapping,\n\tScene,\n\tSource,\n\tSRGBColorSpace,\n\tCompressedTexture,\n\tVector3,\n\tQuaternion,\n\tREVISION\n} from 'three';\nimport { decompress } from './../utils/TextureUtils.js';\n\n\n/**\n * The KHR_mesh_quantization extension allows these extra attribute component types\n *\n * @see https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md#extending-mesh-attributes\n */\nconst KHR_mesh_quantization_ExtraAttrTypes = {\n\tPOSITION: [\n\t\t'byte',\n\t\t'byte normalized',\n\t\t'unsigned byte',\n\t\t'unsigned byte normalized',\n\t\t'short',\n\t\t'short normalized',\n\t\t'unsigned short',\n\t\t'unsigned short normalized',\n\t],\n\tNORMAL: [\n\t\t'byte normalized',\n\t\t'short normalized',\n\t],\n\tTANGENT: [\n\t\t'byte normalized',\n\t\t'short normalized',\n\t],\n\tTEXCOORD: [\n\t\t'byte',\n\t\t'byte normalized',\n\t\t'unsigned byte',\n\t\t'short',\n\t\t'short normalized',\n\t\t'unsigned short',\n\t],\n};\n\n\nclass GLTFExporter {\n\n\tconstructor() {\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFLightExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsUnlitExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsDispersionExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMaterialsBumpExtension( writer );\n\n\t\t} );\n\n\t\tthis.register( function ( writer ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( writer );\n\n\t\t} );\n\n\t}\n\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Function} onError Callback on errors\n\t * @param {Object} options options\n\t */\n\tparse( input, onDone, onError, options ) {\n\n\t\tconst writer = new GLTFWriter();\n\t\tconst plugins = [];\n\n\t\tfor ( let i = 0, il = this.pluginCallbacks.length; i < il; i ++ ) {\n\n\t\t\tplugins.push( this.pluginCallbacks[ i ]( writer ) );\n\n\t\t}\n\n\t\twriter.setPlugins( plugins );\n\t\twriter.write( input, onDone, options ).catch( onError );\n\n\t}\n\n\tparseAsync( input, options ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( input, resolve, reject, options );\n\n\t\t} );\n\n\t}\n\n}\n\n//------------------------------------------------------------------------------\n// Constants\n//------------------------------------------------------------------------------\n\nconst WEBGL_CONSTANTS = {\n\tPOINTS: 0x0000,\n\tLINES: 0x0001,\n\tLINE_LOOP: 0x0002,\n\tLINE_STRIP: 0x0003,\n\tTRIANGLES: 0x0004,\n\tTRIANGLE_STRIP: 0x0005,\n\tTRIANGLE_FAN: 0x0006,\n\n\tBYTE: 0x1400,\n\tUNSIGNED_BYTE: 0x1401,\n\tSHORT: 0x1402,\n\tUNSIGNED_SHORT: 0x1403,\n\tINT: 0x1404,\n\tUNSIGNED_INT: 0x1405,\n\tFLOAT: 0x1406,\n\n\tARRAY_BUFFER: 0x8892,\n\tELEMENT_ARRAY_BUFFER: 0x8893,\n\n\tNEAREST: 0x2600,\n\tLINEAR: 0x2601,\n\tNEAREST_MIPMAP_NEAREST: 0x2700,\n\tLINEAR_MIPMAP_NEAREST: 0x2701,\n\tNEAREST_MIPMAP_LINEAR: 0x2702,\n\tLINEAR_MIPMAP_LINEAR: 0x2703,\n\n\tCLAMP_TO_EDGE: 33071,\n\tMIRRORED_REPEAT: 33648,\n\tREPEAT: 10497\n};\n\nconst KHR_MESH_QUANTIZATION = 'KHR_mesh_quantization';\n\nconst THREE_TO_WEBGL = {};\n\nTHREE_TO_WEBGL[ NearestFilter ] = WEBGL_CONSTANTS.NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapNearestFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ NearestMipmapLinearFilter ] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;\nTHREE_TO_WEBGL[ LinearFilter ] = WEBGL_CONSTANTS.LINEAR;\nTHREE_TO_WEBGL[ LinearMipmapNearestFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[ LinearMipmapLinearFilter ] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;\n\nTHREE_TO_WEBGL[ ClampToEdgeWrapping ] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;\nTHREE_TO_WEBGL[ RepeatWrapping ] = WEBGL_CONSTANTS.REPEAT;\nTHREE_TO_WEBGL[ MirroredRepeatWrapping ] = WEBGL_CONSTANTS.MIRRORED_REPEAT;\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\tposition: 'translation',\n\tquaternion: 'rotation',\n\tmorphTargetInfluences: 'weights'\n};\n\nconst DEFAULT_SPECULAR_COLOR = new Color();\n\n// GLB constants\n// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\nconst GLB_HEADER_BYTES = 12;\nconst GLB_HEADER_MAGIC = 0x46546C67;\nconst GLB_VERSION = 2;\n\nconst GLB_CHUNK_PREFIX_BYTES = 8;\nconst GLB_CHUNK_TYPE_JSON = 0x4E4F534A;\nconst GLB_CHUNK_TYPE_BIN = 0x004E4942;\n\n//------------------------------------------------------------------------------\n// Utility functions\n//------------------------------------------------------------------------------\n\n/**\n * Compare two arrays\n * @param {Array} array1 Array 1 to compare\n * @param {Array} array2 Array 2 to compare\n * @return {Boolean} Returns true if both arrays are equal\n */\nfunction equalArray( array1, array2 ) {\n\n\treturn ( array1.length === array2.length ) && array1.every( function ( element, index ) {\n\n\t\treturn element === array2[ index ];\n\n\t} );\n\n}\n\n/**\n * Converts a string to an ArrayBuffer.\n * @param {string} text\n * @return {ArrayBuffer}\n */\nfunction stringToArrayBuffer( text ) {\n\n\treturn new TextEncoder().encode( text ).buffer;\n\n}\n\n/**\n * Is identity matrix\n *\n * @param {Matrix4} matrix\n * @returns {Boolean} Returns true, if parameter is identity matrix\n */\nfunction isIdentityMatrix( matrix ) {\n\n\treturn equalArray( matrix.elements, [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ] );\n\n}\n\n/**\n * Get the min and max vectors from the given attribute\n * @param {BufferAttribute} attribute Attribute to find the min/max in range from start to start + count\n * @param {Integer} start\n * @param {Integer} count\n * @return {Object} Object containing the `min` and `max` values (As an array of attribute.itemSize components)\n */\nfunction getMinMax( attribute, start, count ) {\n\n\tconst output = {\n\n\t\tmin: new Array( attribute.itemSize ).fill( Number.POSITIVE_INFINITY ),\n\t\tmax: new Array( attribute.itemSize ).fill( Number.NEGATIVE_INFINITY )\n\n\t};\n\n\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\tlet value;\n\n\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t} else {\n\n\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\tif ( attribute.normalized === true ) {\n\n\t\t\t\t\tvalue = MathUtils.normalize( value, attribute.array );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\toutput.min[ a ] = Math.min( output.min[ a ], value );\n\t\t\toutput.max[ a ] = Math.max( output.max[ a ], value );\n\n\t\t}\n\n\t}\n\n\treturn output;\n\n}\n\n/**\n * Get the required size + padding for a buffer, rounded to the next 4-byte boundary.\n * https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment\n *\n * @param {Integer} bufferSize The size the original buffer.\n * @returns {Integer} new buffer size with required padding.\n *\n */\nfunction getPaddedBufferSize( bufferSize ) {\n\n\treturn Math.ceil( bufferSize / 4 ) * 4;\n\n}\n\n/**\n * Returns a buffer aligned to 4-byte boundary.\n *\n * @param {ArrayBuffer} arrayBuffer Buffer to pad\n * @param {Integer} paddingByte (Optional)\n * @returns {ArrayBuffer} The same buffer if it's already aligned to 4-byte boundary or a new buffer\n */\nfunction getPaddedArrayBuffer( arrayBuffer, paddingByte = 0 ) {\n\n\tconst paddedLength = getPaddedBufferSize( arrayBuffer.byteLength );\n\n\tif ( paddedLength !== arrayBuffer.byteLength ) {\n\n\t\tconst array = new Uint8Array( paddedLength );\n\t\tarray.set( new Uint8Array( arrayBuffer ) );\n\n\t\tif ( paddingByte !== 0 ) {\n\n\t\t\tfor ( let i = arrayBuffer.byteLength; i < paddedLength; i ++ ) {\n\n\t\t\t\tarray[ i ] = paddingByte;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn array.buffer;\n\n\t}\n\n\treturn arrayBuffer;\n\n}\n\nfunction getCanvas() {\n\n\tif ( typeof document === 'undefined' && typeof OffscreenCanvas !== 'undefined' ) {\n\n\t\treturn new OffscreenCanvas( 1, 1 );\n\n\t}\n\n\treturn document.createElement( 'canvas' );\n\n}\n\nfunction getToBlobPromise( canvas, mimeType ) {\n\n\tif ( canvas.toBlob !== undefined ) {\n\n\t\treturn new Promise( ( resolve ) => canvas.toBlob( resolve, mimeType ) );\n\n\t}\n\n\tlet quality;\n\n\t// Blink's implementation of convertToBlob seems to default to a quality level of 100%\n\t// Use the Blink default quality levels of toBlob instead so that file sizes are comparable.\n\tif ( mimeType === 'image/jpeg' ) {\n\n\t\tquality = 0.92;\n\n\t} else if ( mimeType === 'image/webp' ) {\n\n\t\tquality = 0.8;\n\n\t}\n\n\treturn canvas.convertToBlob( {\n\n\t\ttype: mimeType,\n\t\tquality: quality\n\n\t} );\n\n}\n\n/**\n * Writer\n */\nclass GLTFWriter {\n\n\tconstructor() {\n\n\t\tthis.plugins = [];\n\n\t\tthis.options = {};\n\t\tthis.pending = [];\n\t\tthis.buffers = [];\n\n\t\tthis.byteOffset = 0;\n\t\tthis.buffers = [];\n\t\tthis.nodeMap = new Map();\n\t\tthis.skins = [];\n\n\t\tthis.extensionsUsed = {};\n\t\tthis.extensionsRequired = {};\n\n\t\tthis.uids = new Map();\n\t\tthis.uid = 0;\n\n\t\tthis.json = {\n\t\t\tasset: {\n\t\t\t\tversion: '2.0',\n\t\t\t\tgenerator: 'THREE.GLTFExporter r' + REVISION\n\t\t\t}\n\t\t};\n\n\t\tthis.cache = {\n\t\t\tmeshes: new Map(),\n\t\t\tattributes: new Map(),\n\t\t\tattributesNormalized: new Map(),\n\t\t\tmaterials: new Map(),\n\t\t\ttextures: new Map(),\n\t\t\timages: new Map()\n\t\t};\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\t/**\n\t * Parse scenes and generate GLTF output\n\t * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n\t * @param {Function} onDone Callback on completed\n\t * @param {Object} options options\n\t */\n\tasync write( input, onDone, options = {} ) {\n\n\t\tthis.options = Object.assign( {\n\t\t\t// default options\n\t\t\tbinary: false,\n\t\t\ttrs: false,\n\t\t\tonlyVisible: true,\n\t\t\tmaxTextureSize: Infinity,\n\t\t\tanimations: [],\n\t\t\tincludeCustomExtensions: false\n\t\t}, options );\n\n\t\tif ( this.options.animations.length > 0 ) {\n\n\t\t\t// Only TRS properties, and not matrices, may be targeted by animation.\n\t\t\tthis.options.trs = true;\n\n\t\t}\n\n\t\tthis.processInput( input );\n\n\t\tawait Promise.all( this.pending );\n\n\t\tconst writer = this;\n\t\tconst buffers = writer.buffers;\n\t\tconst json = writer.json;\n\t\toptions = writer.options;\n\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\t\tconst extensionsRequired = writer.extensionsRequired;\n\n\t\t// Merge buffers.\n\t\tconst blob = new Blob( buffers, { type: 'application/octet-stream' } );\n\n\t\t// Declare extensions.\n\t\tconst extensionsUsedList = Object.keys( extensionsUsed );\n\t\tconst extensionsRequiredList = Object.keys( extensionsRequired );\n\n\t\tif ( extensionsUsedList.length > 0 ) json.extensionsUsed = extensionsUsedList;\n\t\tif ( extensionsRequiredList.length > 0 ) json.extensionsRequired = extensionsRequiredList;\n\n\t\t// Update bytelength of the single buffer.\n\t\tif ( json.buffers && json.buffers.length > 0 ) json.buffers[ 0 ].byteLength = blob.size;\n\n\t\tif ( options.binary === true ) {\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#glb-file-format-specification\n\n\t\t\tconst reader = new FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\t// Binary chunk.\n\t\t\t\tconst binaryChunk = getPaddedArrayBuffer( reader.result );\n\t\t\t\tconst binaryChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\tbinaryChunkPrefix.setUint32( 0, binaryChunk.byteLength, true );\n\t\t\t\tbinaryChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_BIN, true );\n\n\t\t\t\t// JSON chunk.\n\t\t\t\tconst jsonChunk = getPaddedArrayBuffer( stringToArrayBuffer( JSON.stringify( json ) ), 0x20 );\n\t\t\t\tconst jsonChunkPrefix = new DataView( new ArrayBuffer( GLB_CHUNK_PREFIX_BYTES ) );\n\t\t\t\tjsonChunkPrefix.setUint32( 0, jsonChunk.byteLength, true );\n\t\t\t\tjsonChunkPrefix.setUint32( 4, GLB_CHUNK_TYPE_JSON, true );\n\n\t\t\t\t// GLB header.\n\t\t\t\tconst header = new ArrayBuffer( GLB_HEADER_BYTES );\n\t\t\t\tconst headerView = new DataView( header );\n\t\t\t\theaderView.setUint32( 0, GLB_HEADER_MAGIC, true );\n\t\t\t\theaderView.setUint32( 4, GLB_VERSION, true );\n\t\t\t\tconst totalByteLength = GLB_HEADER_BYTES\n\t\t\t\t\t+ jsonChunkPrefix.byteLength + jsonChunk.byteLength\n\t\t\t\t\t+ binaryChunkPrefix.byteLength + binaryChunk.byteLength;\n\t\t\t\theaderView.setUint32( 8, totalByteLength, true );\n\n\t\t\t\tconst glbBlob = new Blob( [\n\t\t\t\t\theader,\n\t\t\t\t\tjsonChunkPrefix,\n\t\t\t\t\tjsonChunk,\n\t\t\t\t\tbinaryChunkPrefix,\n\t\t\t\t\tbinaryChunk\n\t\t\t\t], { type: 'application/octet-stream' } );\n\n\t\t\t\tconst glbReader = new FileReader();\n\t\t\t\tglbReader.readAsArrayBuffer( glbBlob );\n\t\t\t\tglbReader.onloadend = function () {\n\n\t\t\t\t\tonDone( glbReader.result );\n\n\t\t\t\t};\n\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tif ( json.buffers && json.buffers.length > 0 ) {\n\n\t\t\t\tconst reader = new FileReader();\n\t\t\t\treader.readAsDataURL( blob );\n\t\t\t\treader.onloadend = function () {\n\n\t\t\t\t\tconst base64data = reader.result;\n\t\t\t\t\tjson.buffers[ 0 ].uri = base64data;\n\t\t\t\t\tonDone( json );\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tonDone( json );\n\n\t\t\t}\n\n\t\t}\n\n\n\t}\n\n\t/**\n\t * Serializes a userData.\n\t *\n\t * @param {THREE.Object3D|THREE.Material} object\n\t * @param {Object} objectDef\n\t */\n\tserializeUserData( object, objectDef ) {\n\n\t\tif ( Object.keys( object.userData ).length === 0 ) return;\n\n\t\tconst options = this.options;\n\t\tconst extensionsUsed = this.extensionsUsed;\n\n\t\ttry {\n\n\t\t\tconst json = JSON.parse( JSON.stringify( object.userData ) );\n\n\t\t\tif ( options.includeCustomExtensions && json.gltfExtensions ) {\n\n\t\t\t\tif ( objectDef.extensions === undefined ) objectDef.extensions = {};\n\n\t\t\t\tfor ( const extensionName in json.gltfExtensions ) {\n\n\t\t\t\t\tobjectDef.extensions[ extensionName ] = json.gltfExtensions[ extensionName ];\n\t\t\t\t\textensionsUsed[ extensionName ] = true;\n\n\t\t\t\t}\n\n\t\t\t\tdelete json.gltfExtensions;\n\n\t\t\t}\n\n\t\t\tif ( Object.keys( json ).length > 0 ) objectDef.extras = json;\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: userData of \\'' + object.name + '\\' ' +\n\t\t\t\t'won\\'t be serialized because of JSON.stringify error - ' + error.message );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Returns ids for buffer attributes.\n\t * @param {Object} object\n\t * @return {Integer}\n\t */\n\tgetUID( attribute, isRelativeCopy = false ) {\n\n\t\tif ( this.uids.has( attribute ) === false ) {\n\n\t\t\tconst uids = new Map();\n\n\t\t\tuids.set( true, this.uid ++ );\n\t\t\tuids.set( false, this.uid ++ );\n\n\t\t\tthis.uids.set( attribute, uids );\n\n\t\t}\n\n\t\tconst uids = this.uids.get( attribute );\n\n\t\treturn uids.get( isRelativeCopy );\n\n\t}\n\n\t/**\n\t * Checks if normal attribute values are normalized.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {Boolean}\n\t */\n\tisNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) ) return false;\n\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = normal.count; i < il; i ++ ) {\n\n\t\t\t// 0.0005 is from glTF-validator\n\t\t\tif ( Math.abs( v.fromBufferAttribute( normal, i ).length() - 1.0 ) > 0.0005 ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t/**\n\t * Creates normalized normal buffer attribute.\n\t *\n\t * @param {BufferAttribute} normal\n\t * @returns {BufferAttribute}\n\t *\n\t */\n\tcreateNormalizedNormalAttribute( normal ) {\n\n\t\tconst cache = this.cache;\n\n\t\tif ( cache.attributesNormalized.has( normal ) )\treturn cache.attributesNormalized.get( normal );\n\n\t\tconst attribute = normal.clone();\n\t\tconst v = new Vector3();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\tv.fromBufferAttribute( attribute, i );\n\n\t\t\tif ( v.x === 0 && v.y === 0 && v.z === 0 ) {\n\n\t\t\t\t// if values can't be normalized set (1, 0, 0)\n\t\t\t\tv.setX( 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\tv.normalize();\n\n\t\t\t}\n\n\t\t\tattribute.setXYZ( i, v.x, v.y, v.z );\n\n\t\t}\n\n\t\tcache.attributesNormalized.set( normal, attribute );\n\n\t\treturn attribute;\n\n\t}\n\n\t/**\n\t * Applies a texture transform, if present, to the map definition. Requires\n\t * the KHR_texture_transform extension.\n\t *\n\t * @param {Object} mapDef\n\t * @param {THREE.Texture} texture\n\t */\n\tapplyTextureTransform( mapDef, texture ) {\n\n\t\tlet didTransform = false;\n\t\tconst transformDef = {};\n\n\t\tif ( texture.offset.x !== 0 || texture.offset.y !== 0 ) {\n\n\t\t\ttransformDef.offset = texture.offset.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.rotation !== 0 ) {\n\n\t\t\ttransformDef.rotation = texture.rotation;\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( texture.repeat.x !== 1 || texture.repeat.y !== 1 ) {\n\n\t\t\ttransformDef.scale = texture.repeat.toArray();\n\t\t\tdidTransform = true;\n\n\t\t}\n\n\t\tif ( didTransform ) {\n\n\t\t\tmapDef.extensions = mapDef.extensions || {};\n\t\t\tmapDef.extensions[ 'KHR_texture_transform' ] = transformDef;\n\t\t\tthis.extensionsUsed[ 'KHR_texture_transform' ] = true;\n\n\t\t}\n\n\t}\n\n\tbuildMetalRoughTexture( metalnessMap, roughnessMap ) {\n\n\t\tif ( metalnessMap === roughnessMap ) return metalnessMap;\n\n\t\tfunction getEncodingConversion( map ) {\n\n\t\t\tif ( map.colorSpace === SRGBColorSpace ) {\n\n\t\t\t\treturn function SRGBToLinear( c ) {\n\n\t\t\t\t\treturn ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\treturn function LinearToLinear( c ) {\n\n\t\t\t\treturn c;\n\n\t\t\t};\n\n\t\t}\n\n\t\tconsole.warn( 'THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.' );\n\n\t\tif ( metalnessMap instanceof CompressedTexture ) {\n\n\t\t\tmetalnessMap = decompress( metalnessMap );\n\n\t\t}\n\n\t\tif ( roughnessMap instanceof CompressedTexture ) {\n\n\t\t\troughnessMap = decompress( roughnessMap );\n\n\t\t}\n\n\t\tconst metalness = metalnessMap ? metalnessMap.image : null;\n\t\tconst roughness = roughnessMap ? roughnessMap.image : null;\n\n\t\tconst width = Math.max( metalness ? metalness.width : 0, roughness ? roughness.width : 0 );\n\t\tconst height = Math.max( metalness ? metalness.height : 0, roughness ? roughness.height : 0 );\n\n\t\tconst canvas = getCanvas();\n\t\tcanvas.width = width;\n\t\tcanvas.height = height;\n\n\t\tconst context = canvas.getContext( '2d', {\n\t\t\twillReadFrequently: true,\n\t\t} );\n\t\tcontext.fillStyle = '#00ffff';\n\t\tcontext.fillRect( 0, 0, width, height );\n\n\t\tconst composite = context.getImageData( 0, 0, width, height );\n\n\t\tif ( metalness ) {\n\n\t\t\tcontext.drawImage( metalness, 0, 0, width, height );\n\n\t\t\tconst convert = getEncodingConversion( metalnessMap );\n\t\t\tconst data = context.getImageData( 0, 0, width, height ).data;\n\n\t\t\tfor ( let i = 2; i < data.length; i += 4 ) {\n\n\t\t\t\tcomposite.data[ i ] = convert( data[ i ] / 256 ) * 256;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( roughness ) {\n\n\t\t\tcontext.drawImage( roughness, 0, 0, width, height );\n\n\t\t\tconst convert = getEncodingConversion( roughnessMap );\n\t\t\tconst data = context.getImageData( 0, 0, width, height ).data;\n\n\t\t\tfor ( let i = 1; i < data.length; i += 4 ) {\n\n\t\t\t\tcomposite.data[ i ] = convert( data[ i ] / 256 ) * 256;\n\n\t\t\t}\n\n\t\t}\n\n\t\tcontext.putImageData( composite, 0, 0 );\n\n\t\t//\n\n\t\tconst reference = metalnessMap || roughnessMap;\n\n\t\tconst texture = reference.clone();\n\n\t\ttexture.source = new Source( canvas );\n\t\ttexture.colorSpace = NoColorSpace;\n\t\ttexture.channel = ( metalnessMap || roughnessMap ).channel;\n\n\t\tif ( metalnessMap && roughnessMap && metalnessMap.channel !== roughnessMap.channel ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match.' );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\t/**\n\t * Process a buffer to append to the default one.\n\t * @param {ArrayBuffer} buffer\n\t * @return {Integer}\n\t */\n\tprocessBuffer( buffer ) {\n\n\t\tconst json = this.json;\n\t\tconst buffers = this.buffers;\n\n\t\tif ( ! json.buffers ) json.buffers = [ { byteLength: 0 } ];\n\n\t\t// All buffers are merged before export.\n\t\tbuffers.push( buffer );\n\n\t\treturn 0;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView\n\t * @param {BufferAttribute} attribute\n\t * @param {number} componentType\n\t * @param {number} start\n\t * @param {number} count\n\t * @param {number} target (Optional) Target usage of the BufferView\n\t * @return {Object}\n\t */\n\tprocessBufferView( attribute, componentType, start, count, target ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\t// Create a new dataview and dump the attribute's array into it\n\n\t\tlet componentSize;\n\n\t\tswitch ( componentType ) {\n\n\t\t\tcase WEBGL_CONSTANTS.BYTE:\n\t\t\tcase WEBGL_CONSTANTS.UNSIGNED_BYTE:\n\n\t\t\t\tcomponentSize = 1;\n\n\t\t\t\tbreak;\n\n\t\t\tcase WEBGL_CONSTANTS.SHORT:\n\t\t\tcase WEBGL_CONSTANTS.UNSIGNED_SHORT:\n\n\t\t\t\tcomponentSize = 2;\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tcomponentSize = 4;\n\n\t\t}\n\n\t\tlet byteStride = attribute.itemSize * componentSize;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Each element of a vertex attribute MUST be aligned to 4-byte boundaries\n\t\t\t// inside a bufferView\n\t\t\tbyteStride = Math.ceil( byteStride / 4 ) * 4;\n\n\t\t}\n\n\t\tconst byteLength = getPaddedBufferSize( count * byteStride );\n\t\tconst dataView = new DataView( new ArrayBuffer( byteLength ) );\n\t\tlet offset = 0;\n\n\t\tfor ( let i = start; i < start + count; i ++ ) {\n\n\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\tlet value;\n\n\t\t\t\tif ( attribute.itemSize > 4 ) {\n\n\t\t\t\t\t // no support for interleaved data for itemSize > 4\n\n\t\t\t\t\tvalue = attribute.array[ i * attribute.itemSize + a ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( a === 0 ) value = attribute.getX( i );\n\t\t\t\t\telse if ( a === 1 ) value = attribute.getY( i );\n\t\t\t\t\telse if ( a === 2 ) value = attribute.getZ( i );\n\t\t\t\t\telse if ( a === 3 ) value = attribute.getW( i );\n\n\t\t\t\t\tif ( attribute.normalized === true ) {\n\n\t\t\t\t\t\tvalue = MathUtils.normalize( value, attribute.array );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( componentType === WEBGL_CONSTANTS.FLOAT ) {\n\n\t\t\t\t\tdataView.setFloat32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.INT ) {\n\n\t\t\t\t\tdataView.setInt32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_INT ) {\n\n\t\t\t\t\tdataView.setUint32( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.SHORT ) {\n\n\t\t\t\t\tdataView.setInt16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT ) {\n\n\t\t\t\t\tdataView.setUint16( offset, value, true );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.BYTE ) {\n\n\t\t\t\t\tdataView.setInt8( offset, value );\n\n\t\t\t\t} else if ( componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE ) {\n\n\t\t\t\t\tdataView.setUint8( offset, value );\n\n\t\t\t\t}\n\n\t\t\t\toffset += componentSize;\n\n\t\t\t}\n\n\t\t\tif ( ( offset % byteStride ) !== 0 ) {\n\n\t\t\t\toffset += byteStride - ( offset % byteStride );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bufferViewDef = {\n\n\t\t\tbuffer: this.processBuffer( dataView.buffer ),\n\t\t\tbyteOffset: this.byteOffset,\n\t\t\tbyteLength: byteLength\n\n\t\t};\n\n\t\tif ( target !== undefined ) bufferViewDef.target = target;\n\n\t\tif ( target === WEBGL_CONSTANTS.ARRAY_BUFFER ) {\n\n\t\t\t// Only define byteStride for vertex attributes.\n\t\t\tbufferViewDef.byteStride = byteStride;\n\n\t\t}\n\n\t\tthis.byteOffset += byteLength;\n\n\t\tjson.bufferViews.push( bufferViewDef );\n\n\t\t// @TODO Merge bufferViews where possible.\n\t\tconst output = {\n\n\t\t\tid: json.bufferViews.length - 1,\n\t\t\tbyteLength: 0\n\n\t\t};\n\n\t\treturn output;\n\n\t}\n\n\t/**\n\t * Process and generate a BufferView from an image Blob.\n\t * @param {Blob} blob\n\t * @return {Promise}\n\t */\n\tprocessBufferViewImage( blob ) {\n\n\t\tconst writer = this;\n\t\tconst json = writer.json;\n\n\t\tif ( ! json.bufferViews ) json.bufferViews = [];\n\n\t\treturn new Promise( function ( resolve ) {\n\n\t\t\tconst reader = new FileReader();\n\t\t\treader.readAsArrayBuffer( blob );\n\t\t\treader.onloadend = function () {\n\n\t\t\t\tconst buffer = getPaddedArrayBuffer( reader.result );\n\n\t\t\t\tconst bufferViewDef = {\n\t\t\t\t\tbuffer: writer.processBuffer( buffer ),\n\t\t\t\t\tbyteOffset: writer.byteOffset,\n\t\t\t\t\tbyteLength: buffer.byteLength\n\t\t\t\t};\n\n\t\t\t\twriter.byteOffset += buffer.byteLength;\n\t\t\t\tresolve( json.bufferViews.push( bufferViewDef ) - 1 );\n\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Process attribute to generate an accessor\n\t * @param {BufferAttribute} attribute Attribute to process\n\t * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range\n\t * @param {Integer} start (Optional)\n\t * @param {Integer} count (Optional)\n\t * @return {Integer|null} Index of the processed accessor on the \"accessors\" array\n\t */\n\tprocessAccessor( attribute, geometry, start, count ) {\n\n\t\tconst json = this.json;\n\n\t\tconst types = {\n\n\t\t\t1: 'SCALAR',\n\t\t\t2: 'VEC2',\n\t\t\t3: 'VEC3',\n\t\t\t4: 'VEC4',\n\t\t\t9: 'MAT3',\n\t\t\t16: 'MAT4'\n\n\t\t};\n\n\t\tlet componentType;\n\n\t\t// Detect the component type of the attribute array\n\t\tif ( attribute.array.constructor === Float32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.FLOAT;\n\n\t\t} else if ( attribute.array.constructor === Int32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.INT;\n\n\t\t} else if ( attribute.array.constructor === Uint32Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_INT;\n\n\t\t} else if ( attribute.array.constructor === Int16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.SHORT;\n\n\t\t} else if ( attribute.array.constructor === Uint16Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;\n\n\t\t} else if ( attribute.array.constructor === Int8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.BYTE;\n\n\t\t} else if ( attribute.array.constructor === Uint8Array ) {\n\n\t\t\tcomponentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: Unsupported bufferAttribute component type: ' + attribute.array.constructor.name );\n\n\t\t}\n\n\t\tif ( start === undefined ) start = 0;\n\t\tif ( count === undefined || count === Infinity ) count = attribute.count;\n\n\t\t// Skip creating an accessor if the attribute doesn't have data to export\n\t\tif ( count === 0 ) return null;\n\n\t\tconst minMax = getMinMax( attribute, start, count );\n\t\tlet bufferViewTarget;\n\n\t\t// If geometry isn't provided, don't infer the target usage of the bufferView. For\n\t\t// animation samplers, target must not be set.\n\t\tif ( geometry !== undefined ) {\n\n\t\t\tbufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;\n\n\t\t}\n\n\t\tconst bufferView = this.processBufferView( attribute, componentType, start, count, bufferViewTarget );\n\n\t\tconst accessorDef = {\n\n\t\t\tbufferView: bufferView.id,\n\t\t\tbyteOffset: bufferView.byteOffset,\n\t\t\tcomponentType: componentType,\n\t\t\tcount: count,\n\t\t\tmax: minMax.max,\n\t\t\tmin: minMax.min,\n\t\t\ttype: types[ attribute.itemSize ]\n\n\t\t};\n\n\t\tif ( attribute.normalized === true ) accessorDef.normalized = true;\n\t\tif ( ! json.accessors ) json.accessors = [];\n\n\t\treturn json.accessors.push( accessorDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process image\n\t * @param {Image} image to process\n\t * @param {Integer} format of the image (RGBAFormat)\n\t * @param {Boolean} flipY before writing out the image\n\t * @param {String} mimeType export format\n\t * @return {Integer} Index of the processed texture in the \"images\" array\n\t */\n\tprocessImage( image, format, flipY, mimeType = 'image/png' ) {\n\n\t\tif ( image !== null ) {\n\n\t\t\tconst writer = this;\n\t\t\tconst cache = writer.cache;\n\t\t\tconst json = writer.json;\n\t\t\tconst options = writer.options;\n\t\t\tconst pending = writer.pending;\n\n\t\t\tif ( ! cache.images.has( image ) ) cache.images.set( image, {} );\n\n\t\t\tconst cachedImages = cache.images.get( image );\n\n\t\t\tconst key = mimeType + ':flipY/' + flipY.toString();\n\n\t\t\tif ( cachedImages[ key ] !== undefined ) return cachedImages[ key ];\n\n\t\t\tif ( ! json.images ) json.images = [];\n\n\t\t\tconst imageDef = { mimeType: mimeType };\n\n\t\t\tconst canvas = getCanvas();\n\n\t\t\tcanvas.width = Math.min( image.width, options.maxTextureSize );\n\t\t\tcanvas.height = Math.min( image.height, options.maxTextureSize );\n\n\t\t\tconst ctx = canvas.getContext( '2d', {\n\t\t\t\twillReadFrequently: true,\n\t\t\t} );\n\n\t\t\tif ( flipY === true ) {\n\n\t\t\t\tctx.translate( 0, canvas.height );\n\t\t\t\tctx.scale( 1, - 1 );\n\n\t\t\t}\n\n\t\t\tif ( image.data !== undefined ) { // THREE.DataTexture\n\n\t\t\t\tif ( format !== RGBAFormat ) {\n\n\t\t\t\t\tconsole.error( 'GLTFExporter: Only RGBAFormat is supported.', format );\n\n\t\t\t\t}\n\n\t\t\t\tif ( image.width > options.maxTextureSize || image.height > options.maxTextureSize ) {\n\n\t\t\t\t\tconsole.warn( 'GLTFExporter: Image size is bigger than maxTextureSize', image );\n\n\t\t\t\t}\n\n\t\t\t\tconst data = new Uint8ClampedArray( image.height * image.width * 4 );\n\n\t\t\t\tfor ( let i = 0; i < data.length; i += 4 ) {\n\n\t\t\t\t\tdata[ i + 0 ] = image.data[ i + 0 ];\n\t\t\t\t\tdata[ i + 1 ] = image.data[ i + 1 ];\n\t\t\t\t\tdata[ i + 2 ] = image.data[ i + 2 ];\n\t\t\t\t\tdata[ i + 3 ] = image.data[ i + 3 ];\n\n\t\t\t\t}\n\n\t\t\t\tctx.putImageData( new ImageData( data, image.width, image.height ), 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tif ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||\n\t\t\t\t\t( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||\n\t\t\t\t\t( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ||\n\t\t\t\t\t( typeof OffscreenCanvas !== 'undefined' && image instanceof OffscreenCanvas ) ) {\n\n\t\t\t\t\tctx.drawImage( image, 0, 0, canvas.width, canvas.height );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Invalid image type. Use HTMLImageElement, HTMLCanvasElement, ImageBitmap or OffscreenCanvas.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( options.binary === true ) {\n\n\t\t\t\tpending.push(\n\n\t\t\t\t\tgetToBlobPromise( canvas, mimeType )\n\t\t\t\t\t\t.then( blob => writer.processBufferViewImage( blob ) )\n\t\t\t\t\t\t.then( bufferViewIndex => {\n\n\t\t\t\t\t\t\timageDef.bufferView = bufferViewIndex;\n\n\t\t\t\t\t\t} )\n\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\tif ( canvas.toDataURL !== undefined ) {\n\n\t\t\t\t\timageDef.uri = canvas.toDataURL( mimeType );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tpending.push(\n\n\t\t\t\t\t\tgetToBlobPromise( canvas, mimeType )\n\t\t\t\t\t\t\t.then( blob => new FileReader().readAsDataURL( blob ) )\n\t\t\t\t\t\t\t.then( dataURL => {\n\n\t\t\t\t\t\t\t\timageDef.uri = dataURL;\n\n\t\t\t\t\t\t\t} )\n\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst index = json.images.push( imageDef ) - 1;\n\t\t\tcachedImages[ key ] = index;\n\t\t\treturn index;\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.GLTFExporter: No valid image data found. Unable to process texture.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process sampler\n\t * @param {Texture} map Texture to process\n\t * @return {Integer} Index of the processed texture in the \"samplers\" array\n\t */\n\tprocessSampler( map ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.samplers ) json.samplers = [];\n\n\t\tconst samplerDef = {\n\t\t\tmagFilter: THREE_TO_WEBGL[ map.magFilter ],\n\t\t\tminFilter: THREE_TO_WEBGL[ map.minFilter ],\n\t\t\twrapS: THREE_TO_WEBGL[ map.wrapS ],\n\t\t\twrapT: THREE_TO_WEBGL[ map.wrapT ]\n\t\t};\n\n\t\treturn json.samplers.push( samplerDef ) - 1;\n\n\t}\n\n\t/**\n\t * Process texture\n\t * @param {Texture} map Map to process\n\t * @return {Integer} Index of the processed texture in the \"textures\" array\n\t */\n\tprocessTexture( map ) {\n\n\t\tconst writer = this;\n\t\tconst options = writer.options;\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.textures.has( map ) ) return cache.textures.get( map );\n\n\t\tif ( ! json.textures ) json.textures = [];\n\n\t\t// make non-readable textures (e.g. CompressedTexture) readable by blitting them into a new texture\n\t\tif ( map instanceof CompressedTexture ) {\n\n\t\t\tmap = decompress( map, options.maxTextureSize );\n\n\t\t}\n\n\t\tlet mimeType = map.userData.mimeType;\n\n\t\tif ( mimeType === 'image/webp' ) mimeType = 'image/png';\n\n\t\tconst textureDef = {\n\t\t\tsampler: this.processSampler( map ),\n\t\t\tsource: this.processImage( map.image, map.format, map.flipY, mimeType )\n\t\t};\n\n\t\tif ( map.name ) textureDef.name = map.name;\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeTexture && ext.writeTexture( map, textureDef );\n\n\t\t} );\n\n\t\tconst index = json.textures.push( textureDef ) - 1;\n\t\tcache.textures.set( map, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process material\n\t * @param {THREE.Material} material Material to process\n\t * @return {Integer|null} Index of the processed material in the \"materials\" array\n\t */\n\tprocessMaterial( material ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tif ( cache.materials.has( material ) ) return cache.materials.get( material );\n\n\t\tif ( material.isShaderMaterial ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: THREE.ShaderMaterial not supported.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( ! json.materials ) json.materials = [];\n\n\t\t// @QUESTION Should we avoid including any attribute that has the default value?\n\t\tconst materialDef = {\tpbrMetallicRoughness: {} };\n\n\t\tif ( material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true ) {\n\n\t\t\tconsole.warn( 'GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.' );\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorFactor\n\t\tconst color = material.color.toArray().concat( [ material.opacity ] );\n\n\t\tif ( ! equalArray( color, [ 1, 1, 1, 1 ] ) ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorFactor = color;\n\n\t\t}\n\n\t\tif ( material.isMeshStandardMaterial ) {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = material.metalness;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;\n\n\t\t} else {\n\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.5;\n\t\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.5;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.metallicRoughnessTexture\n\t\tif ( material.metalnessMap || material.roughnessMap ) {\n\n\t\t\tconst metalRoughTexture = this.buildMetalRoughTexture( material.metalnessMap, material.roughnessMap );\n\n\t\t\tconst metalRoughMapDef = {\n\t\t\t\tindex: this.processTexture( metalRoughTexture ),\n\t\t\t\tchannel: metalRoughTexture.channel\n\t\t\t};\n\t\t\tthis.applyTextureTransform( metalRoughMapDef, metalRoughTexture );\n\t\t\tmaterialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;\n\n\t\t}\n\n\t\t// pbrMetallicRoughness.baseColorTexture\n\t\tif ( material.map ) {\n\n\t\t\tconst baseColorMapDef = {\n\t\t\t\tindex: this.processTexture( material.map ),\n\t\t\t\ttexCoord: material.map.channel\n\t\t\t};\n\t\t\tthis.applyTextureTransform( baseColorMapDef, material.map );\n\t\t\tmaterialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;\n\n\t\t}\n\n\t\tif ( material.emissive ) {\n\n\t\t\tconst emissive = material.emissive;\n\t\t\tconst maxEmissiveComponent = Math.max( emissive.r, emissive.g, emissive.b );\n\n\t\t\tif ( maxEmissiveComponent > 0 ) {\n\n\t\t\t\tmaterialDef.emissiveFactor = material.emissive.toArray();\n\n\t\t\t}\n\n\t\t\t// emissiveTexture\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tconst emissiveMapDef = {\n\t\t\t\t\tindex: this.processTexture( material.emissiveMap ),\n\t\t\t\t\ttexCoord: material.emissiveMap.channel\n\t\t\t\t};\n\t\t\t\tthis.applyTextureTransform( emissiveMapDef, material.emissiveMap );\n\t\t\t\tmaterialDef.emissiveTexture = emissiveMapDef;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// normalTexture\n\t\tif ( material.normalMap ) {\n\n\t\t\tconst normalMapDef = {\n\t\t\t\tindex: this.processTexture( material.normalMap ),\n\t\t\t\ttexCoord: material.normalMap.channel\n\t\t\t};\n\n\t\t\tif ( material.normalScale && material.normalScale.x !== 1 ) {\n\n\t\t\t\t// glTF normal scale is univariate. Ignore `y`, which may be flipped.\n\t\t\t\t// Context: https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\tnormalMapDef.scale = material.normalScale.x;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( normalMapDef, material.normalMap );\n\t\t\tmaterialDef.normalTexture = normalMapDef;\n\n\t\t}\n\n\t\t// occlusionTexture\n\t\tif ( material.aoMap ) {\n\n\t\t\tconst occlusionMapDef = {\n\t\t\t\tindex: this.processTexture( material.aoMap ),\n\t\t\t\ttexCoord: material.aoMap.channel\n\t\t\t};\n\n\t\t\tif ( material.aoMapIntensity !== 1.0 ) {\n\n\t\t\t\tocclusionMapDef.strength = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\tthis.applyTextureTransform( occlusionMapDef, material.aoMap );\n\t\t\tmaterialDef.occlusionTexture = occlusionMapDef;\n\n\t\t}\n\n\t\t// alphaMode\n\t\tif ( material.transparent ) {\n\n\t\t\tmaterialDef.alphaMode = 'BLEND';\n\n\t\t} else {\n\n\t\t\tif ( material.alphaTest > 0.0 ) {\n\n\t\t\t\tmaterialDef.alphaMode = 'MASK';\n\t\t\t\tmaterialDef.alphaCutoff = material.alphaTest;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// doubleSided\n\t\tif ( material.side === DoubleSide ) materialDef.doubleSided = true;\n\t\tif ( material.name !== '' ) materialDef.name = material.name;\n\n\t\tthis.serializeUserData( material, materialDef );\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMaterial && ext.writeMaterial( material, materialDef );\n\n\t\t} );\n\n\t\tconst index = json.materials.push( materialDef ) - 1;\n\t\tcache.materials.set( material, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * Process mesh\n\t * @param {THREE.Mesh} mesh Mesh to process\n\t * @return {Integer|null} Index of the processed mesh in the \"meshes\" array\n\t */\n\tprocessMesh( mesh ) {\n\n\t\tconst cache = this.cache;\n\t\tconst json = this.json;\n\n\t\tconst meshCacheKeyParts = [ mesh.geometry.uuid ];\n\n\t\tif ( Array.isArray( mesh.material ) ) {\n\n\t\t\tfor ( let i = 0, l = mesh.material.length; i < l; i ++ ) {\n\n\t\t\t\tmeshCacheKeyParts.push( mesh.material[ i ].uuid\t);\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tmeshCacheKeyParts.push( mesh.material.uuid );\n\n\t\t}\n\n\t\tconst meshCacheKey = meshCacheKeyParts.join( ':' );\n\n\t\tif ( cache.meshes.has( meshCacheKey ) ) return cache.meshes.get( meshCacheKey );\n\n\t\tconst geometry = mesh.geometry;\n\n\t\tlet mode;\n\n\t\t// Use the correct mode\n\t\tif ( mesh.isLineSegments ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINES;\n\n\t\t} else if ( mesh.isLineLoop ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_LOOP;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.LINE_STRIP;\n\n\t\t} else if ( mesh.isPoints ) {\n\n\t\t\tmode = WEBGL_CONSTANTS.POINTS;\n\n\t\t} else {\n\n\t\t\tmode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;\n\n\t\t}\n\n\t\tconst meshDef = {};\n\t\tconst attributes = {};\n\t\tconst primitives = [];\n\t\tconst targets = [];\n\n\t\t// Conversion between attributes names in threejs and gltf spec\n\t\tconst nameConversion = {\n\t\t\tuv: 'TEXCOORD_0',\n\t\t\tuv1: 'TEXCOORD_1',\n\t\t\tuv2: 'TEXCOORD_2',\n\t\t\tuv3: 'TEXCOORD_3',\n\t\t\tcolor: 'COLOR_0',\n\t\t\tskinWeight: 'WEIGHTS_0',\n\t\t\tskinIndex: 'JOINTS_0'\n\t\t};\n\n\t\tconst originalNormal = geometry.getAttribute( 'normal' );\n\n\t\tif ( originalNormal !== undefined && ! this.isNormalizedNormalAttribute( originalNormal ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.' );\n\n\t\t\tgeometry.setAttribute( 'normal', this.createNormalizedNormalAttribute( originalNormal ) );\n\n\t\t}\n\n\t\t// @QUESTION Detect if .vertexColors = true?\n\t\t// For every attribute create an accessor\n\t\tlet modifiedAttribute = null;\n\n\t\tfor ( let attributeName in geometry.attributes ) {\n\n\t\t\t// Ignore morph target attributes, which are exported later.\n\t\t\tif ( attributeName.slice( 0, 5 ) === 'morph' ) continue;\n\n\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\tattributeName = nameConversion[ attributeName ] || attributeName.toUpperCase();\n\n\t\t\t// Prefix all geometry attributes except the ones specifically\n\t\t\t// listed in the spec; non-spec attributes are considered custom.\n\t\t\tconst validVertexAttributes =\n\t\t\t\t\t/^(POSITION|NORMAL|TANGENT|TEXCOORD_\\d+|COLOR_\\d+|JOINTS_\\d+|WEIGHTS_\\d+)$/;\n\n\t\t\tif ( ! validVertexAttributes.test( attributeName ) ) attributeName = '_' + attributeName;\n\n\t\t\tif ( cache.attributes.has( this.getUID( attribute ) ) ) {\n\n\t\t\t\tattributes[ attributeName ] = cache.attributes.get( this.getUID( attribute ) );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// JOINTS_0 must be UNSIGNED_BYTE or UNSIGNED_SHORT.\n\t\t\tmodifiedAttribute = null;\n\t\t\tconst array = attribute.array;\n\n\t\t\tif ( attributeName === 'JOINTS_0' &&\n\t\t\t\t! ( array instanceof Uint16Array ) &&\n\t\t\t\t! ( array instanceof Uint8Array ) ) {\n\n\t\t\t\tconsole.warn( 'GLTFExporter: Attribute \"skinIndex\" converted to type UNSIGNED_SHORT.' );\n\t\t\t\tmodifiedAttribute = new BufferAttribute( new Uint16Array( array ), attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tconst accessor = this.processAccessor( modifiedAttribute || attribute, geometry );\n\n\t\t\tif ( accessor !== null ) {\n\n\t\t\t\tif ( ! attributeName.startsWith( '_' ) ) {\n\n\t\t\t\t\tthis.detectMeshQuantization( attributeName, attribute );\n\n\t\t\t\t}\n\n\t\t\t\tattributes[ attributeName ] = accessor;\n\t\t\t\tcache.attributes.set( this.getUID( attribute ), accessor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( originalNormal !== undefined ) geometry.setAttribute( 'normal', originalNormal );\n\n\t\t// Skip if no exportable attributes found\n\t\tif ( Object.keys( attributes ).length === 0 ) return null;\n\n\t\t// Morph targets\n\t\tif ( mesh.morphTargetInfluences !== undefined && mesh.morphTargetInfluences.length > 0 ) {\n\n\t\t\tconst weights = [];\n\t\t\tconst targetNames = [];\n\t\t\tconst reverseDictionary = {};\n\n\t\t\tif ( mesh.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tfor ( const key in mesh.morphTargetDictionary ) {\n\n\t\t\t\t\treverseDictionary[ mesh.morphTargetDictionary[ key ] ] = key;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0; i < mesh.morphTargetInfluences.length; ++ i ) {\n\n\t\t\t\tconst target = {};\n\t\t\t\tlet warned = false;\n\n\t\t\t\tfor ( const attributeName in geometry.morphAttributes ) {\n\n\t\t\t\t\t// glTF 2.0 morph supports only POSITION/NORMAL/TANGENT.\n\t\t\t\t\t// Three.js doesn't support TANGENT yet.\n\n\t\t\t\t\tif ( attributeName !== 'position' && attributeName !== 'normal' ) {\n\n\t\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'GLTFExporter: Only POSITION and NORMAL morph are supported.' );\n\t\t\t\t\t\t\twarned = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst attribute = geometry.morphAttributes[ attributeName ][ i ];\n\t\t\t\t\tconst gltfAttributeName = attributeName.toUpperCase();\n\n\t\t\t\t\t// Three.js morph attribute has absolute values while the one of glTF has relative values.\n\t\t\t\t\t//\n\t\t\t\t\t// glTF 2.0 Specification:\n\t\t\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#morph-targets\n\n\t\t\t\t\tconst baseAttribute = geometry.attributes[ attributeName ];\n\n\t\t\t\t\tif ( cache.attributes.has( this.getUID( attribute, true ) ) ) {\n\n\t\t\t\t\t\ttarget[ gltfAttributeName ] = cache.attributes.get( this.getUID( attribute, true ) );\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Clones attribute not to override\n\t\t\t\t\tconst relativeAttribute = attribute.clone();\n\n\t\t\t\t\tif ( ! geometry.morphTargetsRelative ) {\n\n\t\t\t\t\t\tfor ( let j = 0, jl = attribute.count; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tfor ( let a = 0; a < attribute.itemSize; a ++ ) {\n\n\t\t\t\t\t\t\t\tif ( a === 0 ) relativeAttribute.setX( j, attribute.getX( j ) - baseAttribute.getX( j ) );\n\t\t\t\t\t\t\t\tif ( a === 1 ) relativeAttribute.setY( j, attribute.getY( j ) - baseAttribute.getY( j ) );\n\t\t\t\t\t\t\t\tif ( a === 2 ) relativeAttribute.setZ( j, attribute.getZ( j ) - baseAttribute.getZ( j ) );\n\t\t\t\t\t\t\t\tif ( a === 3 ) relativeAttribute.setW( j, attribute.getW( j ) - baseAttribute.getW( j ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget[ gltfAttributeName ] = this.processAccessor( relativeAttribute, geometry );\n\t\t\t\t\tcache.attributes.set( this.getUID( baseAttribute, true ), target[ gltfAttributeName ] );\n\n\t\t\t\t}\n\n\t\t\t\ttargets.push( target );\n\n\t\t\t\tweights.push( mesh.morphTargetInfluences[ i ] );\n\n\t\t\t\tif ( mesh.morphTargetDictionary !== undefined ) targetNames.push( reverseDictionary[ i ] );\n\n\t\t\t}\n\n\t\t\tmeshDef.weights = weights;\n\n\t\t\tif ( targetNames.length > 0 ) {\n\n\t\t\t\tmeshDef.extras = {};\n\t\t\t\tmeshDef.extras.targetNames = targetNames;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst isMultiMaterial = Array.isArray( mesh.material );\n\n\t\tif ( isMultiMaterial && geometry.groups.length === 0 ) return null;\n\n\t\tlet didForceIndices = false;\n\n\t\tif ( isMultiMaterial && geometry.index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tfor ( let i = 0, il = geometry.attributes.position.count; i < il; i ++ ) {\n\n\t\t\t\tindices[ i ] = i;\n\n\t\t\t}\n\n\t\t\tgeometry.setIndex( indices );\n\n\t\t\tdidForceIndices = true;\n\n\t\t}\n\n\t\tconst materials = isMultiMaterial ? mesh.material : [ mesh.material ];\n\t\tconst groups = isMultiMaterial ? geometry.groups : [ { materialIndex: 0, start: undefined, count: undefined } ];\n\n\t\tfor ( let i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = {\n\t\t\t\tmode: mode,\n\t\t\t\tattributes: attributes,\n\t\t\t};\n\n\t\t\tthis.serializeUserData( geometry, primitive );\n\n\t\t\tif ( targets.length > 0 ) primitive.targets = targets;\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\tlet cacheKey = this.getUID( geometry.index );\n\n\t\t\t\tif ( groups[ i ].start !== undefined || groups[ i ].count !== undefined ) {\n\n\t\t\t\t\tcacheKey += ':' + groups[ i ].start + ':' + groups[ i ].count;\n\n\t\t\t\t}\n\n\t\t\t\tif ( cache.attributes.has( cacheKey ) ) {\n\n\t\t\t\t\tprimitive.indices = cache.attributes.get( cacheKey );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tprimitive.indices = this.processAccessor( geometry.index, geometry, groups[ i ].start, groups[ i ].count );\n\t\t\t\t\tcache.attributes.set( cacheKey, primitive.indices );\n\n\t\t\t\t}\n\n\t\t\t\tif ( primitive.indices === null ) delete primitive.indices;\n\n\t\t\t}\n\n\t\t\tconst material = this.processMaterial( materials[ groups[ i ].materialIndex ] );\n\n\t\t\tif ( material !== null ) primitive.material = material;\n\n\t\t\tprimitives.push( primitive );\n\n\t\t}\n\n\t\tif ( didForceIndices === true ) {\n\n\t\t\tgeometry.setIndex( null );\n\n\t\t}\n\n\t\tmeshDef.primitives = primitives;\n\n\t\tif ( ! json.meshes ) json.meshes = [];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeMesh && ext.writeMesh( mesh, meshDef );\n\n\t\t} );\n\n\t\tconst index = json.meshes.push( meshDef ) - 1;\n\t\tcache.meshes.set( meshCacheKey, index );\n\t\treturn index;\n\n\t}\n\n\t/**\n\t * If a vertex attribute with a\n\t * [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview)\n\t * is used, it is checked whether it is a valid data type according to the\n\t * [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md)\n\t * extension.\n\t * In this case the extension is automatically added to the list of used extensions.\n\t *\n\t * @param {string} attributeName\n\t * @param {THREE.BufferAttribute} attribute\n\t */\n\tdetectMeshQuantization( attributeName, attribute ) {\n\n\t\tif ( this.extensionsUsed[ KHR_MESH_QUANTIZATION ] ) return;\n\n\t\tlet attrType = undefined;\n\n\t\tswitch ( attribute.array.constructor ) {\n\n\t\t\tcase Int8Array:\n\n\t\t\t\tattrType = 'byte';\n\n\t\t\t\tbreak;\n\n\t\t\tcase Uint8Array:\n\n\t\t\t\tattrType = 'unsigned byte';\n\n\t\t\t\tbreak;\n\n\t\t\tcase Int16Array:\n\n\t\t\t\tattrType = 'short';\n\n\t\t\t\tbreak;\n\n\t\t\tcase Uint16Array:\n\n\t\t\t\tattrType = 'unsigned short';\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\treturn;\n\n\t\t}\n\n\t\tif ( attribute.normalized ) attrType += ' normalized';\n\n\t\tconst attrNamePrefix = attributeName.split( '_', 1 )[ 0 ];\n\n\t\tif ( KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ] && KHR_mesh_quantization_ExtraAttrTypes[ attrNamePrefix ].includes( attrType ) ) {\n\n\t\t\tthis.extensionsUsed[ KHR_MESH_QUANTIZATION ] = true;\n\t\t\tthis.extensionsRequired[ KHR_MESH_QUANTIZATION ] = true;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Process camera\n\t * @param {THREE.Camera} camera Camera to process\n\t * @return {Integer} Index of the processed mesh in the \"camera\" array\n\t */\n\tprocessCamera( camera ) {\n\n\t\tconst json = this.json;\n\n\t\tif ( ! json.cameras ) json.cameras = [];\n\n\t\tconst isOrtho = camera.isOrthographicCamera;\n\n\t\tconst cameraDef = {\n\t\t\ttype: isOrtho ? 'orthographic' : 'perspective'\n\t\t};\n\n\t\tif ( isOrtho ) {\n\n\t\t\tcameraDef.orthographic = {\n\t\t\t\txmag: camera.right * 2,\n\t\t\t\tymag: camera.top * 2,\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tcameraDef.perspective = {\n\t\t\t\taspectRatio: camera.aspect,\n\t\t\t\tyfov: MathUtils.degToRad( camera.fov ),\n\t\t\t\tzfar: camera.far <= 0 ? 0.001 : camera.far,\n\t\t\t\tznear: camera.near < 0 ? 0 : camera.near\n\t\t\t};\n\n\t\t}\n\n\t\t// Question: Is saving \"type\" as name intentional?\n\t\tif ( camera.name !== '' ) cameraDef.name = camera.type;\n\n\t\treturn json.cameras.push( cameraDef ) - 1;\n\n\t}\n\n\t/**\n\t * Creates glTF animation entry from AnimationClip object.\n\t *\n\t * Status:\n\t * - Only properties listed in PATH_PROPERTIES may be animated.\n\t *\n\t * @param {THREE.AnimationClip} clip\n\t * @param {THREE.Object3D} root\n\t * @return {number|null}\n\t */\n\tprocessAnimation( clip, root ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.animations ) json.animations = [];\n\n\t\tclip = GLTFExporter.Utils.mergeMorphTargetTracks( clip.clone(), root );\n\n\t\tconst tracks = clip.tracks;\n\t\tconst channels = [];\n\t\tconst samplers = [];\n\n\t\tfor ( let i = 0; i < tracks.length; ++ i ) {\n\n\t\t\tconst track = tracks[ i ];\n\t\t\tconst trackBinding = PropertyBinding.parseTrackName( track.name );\n\t\t\tlet trackNode = PropertyBinding.findNode( root, trackBinding.nodeName );\n\t\t\tconst trackProperty = PATH_PROPERTIES[ trackBinding.propertyName ];\n\n\t\t\tif ( trackBinding.objectName === 'bones' ) {\n\n\t\t\t\tif ( trackNode.isSkinnedMesh === true ) {\n\n\t\t\t\t\ttrackNode = trackNode.skeleton.getBoneByName( trackBinding.objectIndex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttrackNode = undefined;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! trackNode || ! trackProperty ) {\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Could not export animation track \"%s\".', track.name );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst inputItemSize = 1;\n\t\t\tlet outputItemSize = track.values.length / track.times.length;\n\n\t\t\tif ( trackProperty === PATH_PROPERTIES.morphTargetInfluences ) {\n\n\t\t\t\toutputItemSize /= trackNode.morphTargetInfluences.length;\n\n\t\t\t}\n\n\t\t\tlet interpolation;\n\n\t\t\t// @TODO export CubicInterpolant(InterpolateSmooth) as CUBICSPLINE\n\n\t\t\t// Detecting glTF cubic spline interpolant by checking factory method's special property\n\t\t\t// GLTFCubicSplineInterpolant is a custom interpolant and track doesn't return\n\t\t\t// valid value from .getInterpolation().\n\t\t\tif ( track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true ) {\n\n\t\t\t\tinterpolation = 'CUBICSPLINE';\n\n\t\t\t\t// itemSize of CUBICSPLINE keyframe is 9\n\t\t\t\t// (VEC3 * 3: inTangent, splineVertex, and outTangent)\n\t\t\t\t// but needs to be stored as VEC3 so dividing by 3 here.\n\t\t\t\toutputItemSize /= 3;\n\n\t\t\t} else if ( track.getInterpolation() === InterpolateDiscrete ) {\n\n\t\t\t\tinterpolation = 'STEP';\n\n\t\t\t} else {\n\n\t\t\t\tinterpolation = 'LINEAR';\n\n\t\t\t}\n\n\t\t\tsamplers.push( {\n\t\t\t\tinput: this.processAccessor( new BufferAttribute( track.times, inputItemSize ) ),\n\t\t\t\toutput: this.processAccessor( new BufferAttribute( track.values, outputItemSize ) ),\n\t\t\t\tinterpolation: interpolation\n\t\t\t} );\n\n\t\t\tchannels.push( {\n\t\t\t\tsampler: samplers.length - 1,\n\t\t\t\ttarget: {\n\t\t\t\t\tnode: nodeMap.get( trackNode ),\n\t\t\t\t\tpath: trackProperty\n\t\t\t\t}\n\t\t\t} );\n\n\t\t}\n\n\t\tjson.animations.push( {\n\t\t\tname: clip.name || 'clip_' + json.animations.length,\n\t\t\tsamplers: samplers,\n\t\t\tchannels: channels\n\t\t} );\n\n\t\treturn json.animations.length - 1;\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D} object\n\t * @return {number|null}\n\t */\n\t processSkin( object ) {\n\n\t\tconst json = this.json;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tconst node = json.nodes[ nodeMap.get( object ) ];\n\n\t\tconst skeleton = object.skeleton;\n\n\t\tif ( skeleton === undefined ) return null;\n\n\t\tconst rootJoint = object.skeleton.bones[ 0 ];\n\n\t\tif ( rootJoint === undefined ) return null;\n\n\t\tconst joints = [];\n\t\tconst inverseBindMatrices = new Float32Array( skeleton.bones.length * 16 );\n\t\tconst temporaryBoneInverse = new Matrix4();\n\n\t\tfor ( let i = 0; i < skeleton.bones.length; ++ i ) {\n\n\t\t\tjoints.push( nodeMap.get( skeleton.bones[ i ] ) );\n\t\t\ttemporaryBoneInverse.copy( skeleton.boneInverses[ i ] );\n\t\t\ttemporaryBoneInverse.multiply( object.bindMatrix ).toArray( inverseBindMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( json.skins === undefined ) json.skins = [];\n\n\t\tjson.skins.push( {\n\t\t\tinverseBindMatrices: this.processAccessor( new BufferAttribute( inverseBindMatrices, 16 ) ),\n\t\t\tjoints: joints,\n\t\t\tskeleton: nodeMap.get( rootJoint )\n\t\t} );\n\n\t\tconst skinIndex = node.skin = json.skins.length - 1;\n\n\t\treturn skinIndex;\n\n\t}\n\n\t/**\n\t * Process Object3D node\n\t * @param {THREE.Object3D} node Object3D to processNode\n\t * @return {Integer} Index of the node in the nodes list\n\t */\n\tprocessNode( object ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst nodeMap = this.nodeMap;\n\n\t\tif ( ! json.nodes ) json.nodes = [];\n\n\t\tconst nodeDef = {};\n\n\t\tif ( options.trs ) {\n\n\t\t\tconst rotation = object.quaternion.toArray();\n\t\t\tconst position = object.position.toArray();\n\t\t\tconst scale = object.scale.toArray();\n\n\t\t\tif ( ! equalArray( rotation, [ 0, 0, 0, 1 ] ) ) {\n\n\t\t\t\tnodeDef.rotation = rotation;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( position, [ 0, 0, 0 ] ) ) {\n\n\t\t\t\tnodeDef.translation = position;\n\n\t\t\t}\n\n\t\t\tif ( ! equalArray( scale, [ 1, 1, 1 ] ) ) {\n\n\t\t\t\tnodeDef.scale = scale;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( object.matrixAutoUpdate ) {\n\n\t\t\t\tobject.updateMatrix();\n\n\t\t\t}\n\n\t\t\tif ( isIdentityMatrix( object.matrix ) === false ) {\n\n\t\t\t\tnodeDef.matrix = object.matrix.elements;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// We don't export empty strings name because it represents no-name in Three.js.\n\t\tif ( object.name !== '' ) nodeDef.name = String( object.name );\n\n\t\tthis.serializeUserData( object, nodeDef );\n\n\t\tif ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\tconst meshIndex = this.processMesh( object );\n\n\t\t\tif ( meshIndex !== null ) nodeDef.mesh = meshIndex;\n\n\t\t} else if ( object.isCamera ) {\n\n\t\t\tnodeDef.camera = this.processCamera( object );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) this.skins.push( object );\n\n\t\tif ( object.children.length > 0 ) {\n\n\t\t\tconst children = [];\n\n\t\t\tfor ( let i = 0, l = object.children.length; i < l; i ++ ) {\n\n\t\t\t\tconst child = object.children[ i ];\n\n\t\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\t\tif ( nodeIndex !== null ) children.push( nodeIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( children.length > 0 ) nodeDef.children = children;\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.writeNode && ext.writeNode( object, nodeDef );\n\n\t\t} );\n\n\t\tconst nodeIndex = json.nodes.push( nodeDef ) - 1;\n\t\tnodeMap.set( object, nodeIndex );\n\t\treturn nodeIndex;\n\n\t}\n\n\t/**\n\t * Process Scene\n\t * @param {Scene} node Scene to process\n\t */\n\tprocessScene( scene ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( ! json.scenes ) {\n\n\t\t\tjson.scenes = [];\n\t\t\tjson.scene = 0;\n\n\t\t}\n\n\t\tconst sceneDef = {};\n\n\t\tif ( scene.name !== '' ) sceneDef.name = scene.name;\n\n\t\tjson.scenes.push( sceneDef );\n\n\t\tconst nodes = [];\n\n\t\tfor ( let i = 0, l = scene.children.length; i < l; i ++ ) {\n\n\t\t\tconst child = scene.children[ i ];\n\n\t\t\tif ( child.visible || options.onlyVisible === false ) {\n\n\t\t\t\tconst nodeIndex = this.processNode( child );\n\n\t\t\t\tif ( nodeIndex !== null ) nodes.push( nodeIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( nodes.length > 0 ) sceneDef.nodes = nodes;\n\n\t\tthis.serializeUserData( scene, sceneDef );\n\n\t}\n\n\t/**\n\t * Creates a Scene to hold a list of objects and parse it\n\t * @param {Array} objects List of objects to process\n\t */\n\tprocessObjects( objects ) {\n\n\t\tconst scene = new Scene();\n\t\tscene.name = 'AuxScene';\n\n\t\tfor ( let i = 0; i < objects.length; i ++ ) {\n\n\t\t\t// We push directly to children instead of calling `add` to prevent\n\t\t\t// modify the .parent and break its original scene and hierarchy\n\t\t\tscene.children.push( objects[ i ] );\n\n\t\t}\n\n\t\tthis.processScene( scene );\n\n\t}\n\n\t/**\n\t * @param {THREE.Object3D|Array} input\n\t */\n\tprocessInput( input ) {\n\n\t\tconst options = this.options;\n\n\t\tinput = input instanceof Array ? input : [ input ];\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.beforeParse && ext.beforeParse( input );\n\n\t\t} );\n\n\t\tconst objectsWithoutScene = [];\n\n\t\tfor ( let i = 0; i < input.length; i ++ ) {\n\n\t\t\tif ( input[ i ] instanceof Scene ) {\n\n\t\t\t\tthis.processScene( input[ i ] );\n\n\t\t\t} else {\n\n\t\t\t\tobjectsWithoutScene.push( input[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( objectsWithoutScene.length > 0 ) this.processObjects( objectsWithoutScene );\n\n\t\tfor ( let i = 0; i < this.skins.length; ++ i ) {\n\n\t\t\tthis.processSkin( this.skins[ i ] );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < options.animations.length; ++ i ) {\n\n\t\t\tthis.processAnimation( options.animations[ i ], input[ 0 ] );\n\n\t\t}\n\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\text.afterParse && ext.afterParse( input );\n\n\t\t} );\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tfor ( let i = 0, il = this.plugins.length; i < il; i ++ ) {\n\n\t\t\tfunc( this.plugins[ i ] );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n */\nclass GLTFLightExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_lights_punctual';\n\n\t}\n\n\twriteNode( light, nodeDef ) {\n\n\t\tif ( ! light.isLight ) return;\n\n\t\tif ( ! light.isDirectionalLight && ! light.isPointLight && ! light.isSpotLight ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Only directional, point, and spot lights are supported.', light );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst writer = this.writer;\n\t\tconst json = writer.json;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst lightDef = {};\n\n\t\tif ( light.name ) lightDef.name = light.name;\n\n\t\tlightDef.color = light.color.toArray();\n\n\t\tlightDef.intensity = light.intensity;\n\n\t\tif ( light.isDirectionalLight ) {\n\n\t\t\tlightDef.type = 'directional';\n\n\t\t} else if ( light.isPointLight ) {\n\n\t\t\tlightDef.type = 'point';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t} else if ( light.isSpotLight ) {\n\n\t\t\tlightDef.type = 'spot';\n\n\t\t\tif ( light.distance > 0 ) lightDef.range = light.distance;\n\n\t\t\tlightDef.spot = {};\n\t\t\tlightDef.spot.innerConeAngle = ( 1.0 - light.penumbra ) * light.angle;\n\t\t\tlightDef.spot.outerConeAngle = light.angle;\n\n\t\t}\n\n\t\tif ( light.decay !== undefined && light.decay !== 2 ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, '\n\t\t\t\t+ 'and expects light.decay=2.' );\n\n\t\t}\n\n\t\tif ( light.target\n\t\t\t\t&& ( light.target.parent !== light\n\t\t\t\t|| light.target.position.x !== 0\n\t\t\t\t|| light.target.position.y !== 0\n\t\t\t\t|| light.target.position.z !== - 1 ) ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFExporter: Light direction may be lost. For best results, '\n\t\t\t\t+ 'make light.target a child of the light with position 0,0,-1.' );\n\n\t\t}\n\n\t\tif ( ! extensionsUsed[ this.name ] ) {\n\n\t\t\tjson.extensions = json.extensions || {};\n\t\t\tjson.extensions[ this.name ] = { lights: [] };\n\t\t\textensionsUsed[ this.name ] = true;\n\n\t\t}\n\n\t\tconst lights = json.extensions[ this.name ].lights;\n\t\tlights.push( lightDef );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { light: lights.length - 1 };\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_unlit';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshBasicMaterial ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = {};\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t\tmaterialDef.pbrMetallicRoughness.metallicFactor = 0.0;\n\t\tmaterialDef.pbrMetallicRoughness.roughnessFactor = 0.9;\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_clearcoat';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.clearcoat === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.clearcoatFactor = material.clearcoat;\n\n\t\tif ( material.clearcoatMap ) {\n\n\t\t\tconst clearcoatMapDef = {\n\t\t\t\tindex: writer.processTexture( material.clearcoatMap ),\n\t\t\t\ttexCoord: material.clearcoatMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( clearcoatMapDef, material.clearcoatMap );\n\t\t\textensionDef.clearcoatTexture = clearcoatMapDef;\n\n\t\t}\n\n\t\textensionDef.clearcoatRoughnessFactor = material.clearcoatRoughness;\n\n\t\tif ( material.clearcoatRoughnessMap ) {\n\n\t\t\tconst clearcoatRoughnessMapDef = {\n\t\t\t\tindex: writer.processTexture( material.clearcoatRoughnessMap ),\n\t\t\t\ttexCoord: material.clearcoatRoughnessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( clearcoatRoughnessMapDef, material.clearcoatRoughnessMap );\n\t\t\textensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef;\n\n\t\t}\n\n\t\tif ( material.clearcoatNormalMap ) {\n\n\t\t\tconst clearcoatNormalMapDef = {\n\t\t\t\tindex: writer.processTexture( material.clearcoatNormalMap ),\n\t\t\t\ttexCoord: material.clearcoatNormalMap.channel\n\t\t\t};\n\n\t\t\tif ( material.clearcoatNormalScale.x !== 1 ) clearcoatNormalMapDef.scale = material.clearcoatNormalScale.x;\n\n\t\t\twriter.applyTextureTransform( clearcoatNormalMapDef, material.clearcoatNormalMap );\n\t\t\textensionDef.clearcoatNormalTexture = clearcoatNormalMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\n\t}\n\n}\n\n/**\n * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_dispersion\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_dispersion';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.dispersion === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.dispersion = material.dispersion;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_iridescence';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.iridescence === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.iridescenceFactor = material.iridescence;\n\n\t\tif ( material.iridescenceMap ) {\n\n\t\t\tconst iridescenceMapDef = {\n\t\t\t\tindex: writer.processTexture( material.iridescenceMap ),\n\t\t\t\ttexCoord: material.iridescenceMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( iridescenceMapDef, material.iridescenceMap );\n\t\t\textensionDef.iridescenceTexture = iridescenceMapDef;\n\n\t\t}\n\n\t\textensionDef.iridescenceIor = material.iridescenceIOR;\n\t\textensionDef.iridescenceThicknessMinimum = material.iridescenceThicknessRange[ 0 ];\n\t\textensionDef.iridescenceThicknessMaximum = material.iridescenceThicknessRange[ 1 ];\n\n\t\tif ( material.iridescenceThicknessMap ) {\n\n\t\t\tconst iridescenceThicknessMapDef = {\n\t\t\t\tindex: writer.processTexture( material.iridescenceThicknessMap ),\n\t\t\t\ttexCoord: material.iridescenceThicknessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( iridescenceThicknessMapDef, material.iridescenceThicknessMap );\n\t\t\textensionDef.iridescenceThicknessTexture = iridescenceThicknessMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_transmission';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.transmissionFactor = material.transmission;\n\n\t\tif ( material.transmissionMap ) {\n\n\t\t\tconst transmissionMapDef = {\n\t\t\t\tindex: writer.processTexture( material.transmissionMap ),\n\t\t\t\ttexCoord: material.transmissionMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( transmissionMapDef, material.transmissionMap );\n\t\t\textensionDef.transmissionTexture = transmissionMapDef;\n\n\t\t}\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_volume';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.transmission === 0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.thicknessFactor = material.thickness;\n\n\t\tif ( material.thicknessMap ) {\n\n\t\t\tconst thicknessMapDef = {\n\t\t\t\tindex: writer.processTexture( material.thicknessMap ),\n\t\t\t\ttexCoord: material.thicknessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( thicknessMapDef, material.thicknessMap );\n\t\t\textensionDef.thicknessTexture = thicknessMapDef;\n\n\t\t}\n\n\t\textensionDef.attenuationDistance = material.attenuationDistance;\n\t\textensionDef.attenuationColor = material.attenuationColor.toArray();\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_ior';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.ior === 1.5 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.ior = material.ior;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_specular';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || ( material.specularIntensity === 1.0 &&\n\t\t material.specularColor.equals( DEFAULT_SPECULAR_COLOR ) &&\n\t\t ! material.specularIntensityMap && ! material.specularColorMap ) ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.specularIntensityMap ) {\n\n\t\t\tconst specularIntensityMapDef = {\n\t\t\t\tindex: writer.processTexture( material.specularIntensityMap ),\n\t\t\t\ttexCoord: material.specularIntensityMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( specularIntensityMapDef, material.specularIntensityMap );\n\t\t\textensionDef.specularTexture = specularIntensityMapDef;\n\n\t\t}\n\n\t\tif ( material.specularColorMap ) {\n\n\t\t\tconst specularColorMapDef = {\n\t\t\t\tindex: writer.processTexture( material.specularColorMap ),\n\t\t\t\ttexCoord: material.specularColorMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( specularColorMapDef, material.specularColorMap );\n\t\t\textensionDef.specularColorTexture = specularColorMapDef;\n\n\t\t}\n\n\t\textensionDef.specularFactor = material.specularIntensity;\n\t\textensionDef.specularColorFactor = material.specularColor.toArray();\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_sheen';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.sheen == 0.0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.sheenRoughnessMap ) {\n\n\t\t\tconst sheenRoughnessMapDef = {\n\t\t\t\tindex: writer.processTexture( material.sheenRoughnessMap ),\n\t\t\t\ttexCoord: material.sheenRoughnessMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( sheenRoughnessMapDef, material.sheenRoughnessMap );\n\t\t\textensionDef.sheenRoughnessTexture = sheenRoughnessMapDef;\n\n\t\t}\n\n\t\tif ( material.sheenColorMap ) {\n\n\t\t\tconst sheenColorMapDef = {\n\t\t\t\tindex: writer.processTexture( material.sheenColorMap ),\n\t\t\t\ttexCoord: material.sheenColorMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( sheenColorMapDef, material.sheenColorMap );\n\t\t\textensionDef.sheenColorTexture = sheenColorMapDef;\n\n\t\t}\n\n\t\textensionDef.sheenRoughnessFactor = material.sheenRoughness;\n\t\textensionDef.sheenColorFactor = material.sheenColor.toArray();\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Anisotropy Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_anisotropy\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_anisotropy';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshPhysicalMaterial || material.anisotropy == 0.0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.anisotropyMap ) {\n\n\t\t\tconst anisotropyMapDef = { index: writer.processTexture( material.anisotropyMap ) };\n\t\t\twriter.applyTextureTransform( anisotropyMapDef, material.anisotropyMap );\n\t\t\textensionDef.anisotropyTexture = anisotropyMapDef;\n\n\t\t}\n\n\t\textensionDef.anisotropyStrength = material.anisotropy;\n\t\textensionDef.anisotropyRotation = material.anisotropyRotation;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'KHR_materials_emissive_strength';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshStandardMaterial || material.emissiveIntensity === 1.0 ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\textensionDef.emissiveStrength = material.emissiveIntensity;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n\n/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'EXT_materials_bump';\n\n\t}\n\n\twriteMaterial( material, materialDef ) {\n\n\t\tif ( ! material.isMeshStandardMaterial || (\n\t\t material.bumpScale === 1 &&\n\t\t ! material.bumpMap ) ) return;\n\n\t\tconst writer = this.writer;\n\t\tconst extensionsUsed = writer.extensionsUsed;\n\n\t\tconst extensionDef = {};\n\n\t\tif ( material.bumpMap ) {\n\n\t\t\tconst bumpMapDef = {\n\t\t\t\tindex: writer.processTexture( material.bumpMap ),\n\t\t\t\ttexCoord: material.bumpMap.channel\n\t\t\t};\n\t\t\twriter.applyTextureTransform( bumpMapDef, material.bumpMap );\n\t\t\textensionDef.bumpTexture = bumpMapDef;\n\n\t\t}\n\n\t\textensionDef.bumpFactor = material.bumpScale;\n\n\t\tmaterialDef.extensions = materialDef.extensions || {};\n\t\tmaterialDef.extensions[ this.name ] = extensionDef;\n\n\t\textensionsUsed[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( writer ) {\n\n\t\tthis.writer = writer;\n\t\tthis.name = 'EXT_mesh_gpu_instancing';\n\n\t}\n\n\twriteNode( object, nodeDef ) {\n\n\t\tif ( ! object.isInstancedMesh ) return;\n\n\t\tconst writer = this.writer;\n\n\t\tconst mesh = object;\n\n\t\tconst translationAttr = new Float32Array( mesh.count * 3 );\n\t\tconst rotationAttr = new Float32Array( mesh.count * 4 );\n\t\tconst scaleAttr = new Float32Array( mesh.count * 3 );\n\n\t\tconst matrix = new Matrix4();\n\t\tconst position = new Vector3();\n\t\tconst quaternion = new Quaternion();\n\t\tconst scale = new Vector3();\n\n\t\tfor ( let i = 0; i < mesh.count; i ++ ) {\n\n\t\t\tmesh.getMatrixAt( i, matrix );\n\t\t\tmatrix.decompose( position, quaternion, scale );\n\n\t\t\tposition.toArray( translationAttr, i * 3 );\n\t\t\tquaternion.toArray( rotationAttr, i * 4 );\n\t\t\tscale.toArray( scaleAttr, i * 3 );\n\n\t\t}\n\n\t\tconst attributes = {\n\t\t\tTRANSLATION: writer.processAccessor( new BufferAttribute( translationAttr, 3 ) ),\n\t\t\tROTATION: writer.processAccessor( new BufferAttribute( rotationAttr, 4 ) ),\n\t\t\tSCALE: writer.processAccessor( new BufferAttribute( scaleAttr, 3 ) ),\n\t\t};\n\n\t\tif ( mesh.instanceColor )\n\t\t\tattributes._COLOR_0 = writer.processAccessor( mesh.instanceColor );\n\n\t\tnodeDef.extensions = nodeDef.extensions || {};\n\t\tnodeDef.extensions[ this.name ] = { attributes };\n\n\t\twriter.extensionsUsed[ this.name ] = true;\n\t\twriter.extensionsRequired[ this.name ] = true;\n\n\t}\n\n}\n\n/**\n * Static utility functions\n */\nGLTFExporter.Utils = {\n\n\tinsertKeyframe: function ( track, time ) {\n\n\t\tconst tolerance = 0.001; // 1ms\n\t\tconst valueSize = track.getValueSize();\n\n\t\tconst times = new track.TimeBufferType( track.times.length + 1 );\n\t\tconst values = new track.ValueBufferType( track.values.length + valueSize );\n\t\tconst interpolant = track.createInterpolant( new track.ValueBufferType( valueSize ) );\n\n\t\tlet index;\n\n\t\tif ( track.times.length === 0 ) {\n\n\t\t\ttimes[ 0 ] = time;\n\n\t\t\tfor ( let i = 0; i < valueSize; i ++ ) {\n\n\t\t\t\tvalues[ i ] = 0;\n\n\t\t\t}\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time < track.times[ 0 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ 0 ] - time ) < tolerance ) return 0;\n\n\t\t\ttimes[ 0 ] = time;\n\t\t\ttimes.set( track.times, 1 );\n\n\t\t\tvalues.set( interpolant.evaluate( time ), 0 );\n\t\t\tvalues.set( track.values, valueSize );\n\n\t\t\tindex = 0;\n\n\t\t} else if ( time > track.times[ track.times.length - 1 ] ) {\n\n\t\t\tif ( Math.abs( track.times[ track.times.length - 1 ] - time ) < tolerance ) {\n\n\t\t\t\treturn track.times.length - 1;\n\n\t\t\t}\n\n\t\t\ttimes[ times.length - 1 ] = time;\n\t\t\ttimes.set( track.times, 0 );\n\n\t\t\tvalues.set( track.values, 0 );\n\t\t\tvalues.set( interpolant.evaluate( time ), track.values.length );\n\n\t\t\tindex = times.length - 1;\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < track.times.length; i ++ ) {\n\n\t\t\t\tif ( Math.abs( track.times[ i ] - time ) < tolerance ) return i;\n\n\t\t\t\tif ( track.times[ i ] < time && track.times[ i + 1 ] > time ) {\n\n\t\t\t\t\ttimes.set( track.times.slice( 0, i + 1 ), 0 );\n\t\t\t\t\ttimes[ i + 1 ] = time;\n\t\t\t\t\ttimes.set( track.times.slice( i + 1 ), i + 2 );\n\n\t\t\t\t\tvalues.set( track.values.slice( 0, ( i + 1 ) * valueSize ), 0 );\n\t\t\t\t\tvalues.set( interpolant.evaluate( time ), ( i + 1 ) * valueSize );\n\t\t\t\t\tvalues.set( track.values.slice( ( i + 1 ) * valueSize ), ( i + 2 ) * valueSize );\n\n\t\t\t\t\tindex = i + 1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\ttrack.times = times;\n\t\ttrack.values = values;\n\n\t\treturn index;\n\n\t},\n\n\tmergeMorphTargetTracks: function ( clip, root ) {\n\n\t\tconst tracks = [];\n\t\tconst mergedTracks = {};\n\t\tconst sourceTracks = clip.tracks;\n\n\t\tfor ( let i = 0; i < sourceTracks.length; ++ i ) {\n\n\t\t\tlet sourceTrack = sourceTracks[ i ];\n\t\t\tconst sourceTrackBinding = PropertyBinding.parseTrackName( sourceTrack.name );\n\t\t\tconst sourceTrackNode = PropertyBinding.findNode( root, sourceTrackBinding.nodeName );\n\n\t\t\tif ( sourceTrackBinding.propertyName !== 'morphTargetInfluences' || sourceTrackBinding.propertyIndex === undefined ) {\n\n\t\t\t\t// Tracks that don't affect morph targets, or that affect all morph targets together, can be left as-is.\n\t\t\t\ttracks.push( sourceTrack );\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tif ( sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete\n\t\t\t\t&& sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear ) {\n\n\t\t\t\tif ( sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\t\t// This should never happen, because glTF morph target animations\n\t\t\t\t\t// affect all targets already.\n\t\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.' );\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.' );\n\n\t\t\t\tsourceTrack = sourceTrack.clone();\n\t\t\t\tsourceTrack.setInterpolation( InterpolateLinear );\n\n\t\t\t}\n\n\t\t\tconst targetCount = sourceTrackNode.morphTargetInfluences.length;\n\t\t\tconst targetIndex = sourceTrackNode.morphTargetDictionary[ sourceTrackBinding.propertyIndex ];\n\n\t\t\tif ( targetIndex === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFExporter: Morph target name not found: ' + sourceTrackBinding.propertyIndex );\n\n\t\t\t}\n\n\t\t\tlet mergedTrack;\n\n\t\t\t// If this is the first time we've seen this object, create a new\n\t\t\t// track to store merged keyframe data for each morph target.\n\t\t\tif ( mergedTracks[ sourceTrackNode.uuid ] === undefined ) {\n\n\t\t\t\tmergedTrack = sourceTrack.clone();\n\n\t\t\t\tconst values = new mergedTrack.ValueBufferType( targetCount * mergedTrack.times.length );\n\n\t\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\t\tvalues[ j * targetCount + targetIndex ] = mergedTrack.values[ j ];\n\n\t\t\t\t}\n\n\t\t\t\t// We need to take into consideration the intended target node\n\t\t\t\t// of our original un-merged morphTarget animation.\n\t\t\t\tmergedTrack.name = ( sourceTrackBinding.nodeName || '' ) + '.morphTargetInfluences';\n\t\t\t\tmergedTrack.values = values;\n\n\t\t\t\tmergedTracks[ sourceTrackNode.uuid ] = mergedTrack;\n\t\t\t\ttracks.push( mergedTrack );\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst sourceInterpolant = sourceTrack.createInterpolant( new sourceTrack.ValueBufferType( 1 ) );\n\n\t\t\tmergedTrack = mergedTracks[ sourceTrackNode.uuid ];\n\n\t\t\t// For every existing keyframe of the merged track, write a (possibly\n\t\t\t// interpolated) value from the source track.\n\t\t\tfor ( let j = 0; j < mergedTrack.times.length; j ++ ) {\n\n\t\t\t\tmergedTrack.values[ j * targetCount + targetIndex ] = sourceInterpolant.evaluate( mergedTrack.times[ j ] );\n\n\t\t\t}\n\n\t\t\t// For every existing keyframe of the source track, write a (possibly\n\t\t\t// new) keyframe to the merged track. Values from the previous loop may\n\t\t\t// be written again, but keyframes are de-duplicated.\n\t\t\tfor ( let j = 0; j < sourceTrack.times.length; j ++ ) {\n\n\t\t\t\tconst keyframeIndex = this.insertKeyframe( mergedTrack, sourceTrack.times[ j ] );\n\t\t\t\tmergedTrack.values[ keyframeIndex * targetCount + targetIndex ] = sourceTrack.values[ j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\treturn clip;\n\n\t}\n\n};\n\nexport { GLTFExporter };\n","import {\n\tColor,\n\tMatrix3,\n\tVector2,\n\tVector3\n} from 'three';\n\nclass OBJExporter {\n\n\tparse( object ) {\n\n\t\tlet output = '';\n\n\t\tlet indexVertex = 0;\n\t\tlet indexVertexUvs = 0;\n\t\tlet indexNormals = 0;\n\n\t\tconst vertex = new Vector3();\n\t\tconst color = new Color();\n\t\tconst normal = new Vector3();\n\t\tconst uv = new Vector2();\n\n\t\tconst face = [];\n\n\t\tfunction parseMesh( mesh ) {\n\n\t\t\tlet nbVertex = 0;\n\t\t\tlet nbNormals = 0;\n\t\t\tlet nbVertexUvs = 0;\n\n\t\t\tconst geometry = mesh.geometry;\n\n\t\t\tconst normalMatrixWorld = new Matrix3();\n\n\t\t\t// shortcuts\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\tconst normals = geometry.getAttribute( 'normal' );\n\t\t\tconst uvs = geometry.getAttribute( 'uv' );\n\t\t\tconst indices = geometry.getIndex();\n\n\t\t\t// name of the mesh object\n\t\t\toutput += 'o ' + mesh.name + '\\n';\n\n\t\t\t// name of the mesh material\n\t\t\tif ( mesh.material && mesh.material.name ) {\n\n\t\t\t\toutput += 'usemtl ' + mesh.material.name + '\\n';\n\n\t\t\t}\n\n\t\t\t// vertices\n\n\t\t\tif ( vertices !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++, nbVertex ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\n\t\t\t\t\t// transform the vertex to world space\n\t\t\t\t\tvertex.applyMatrix4( mesh.matrixWorld );\n\n\t\t\t\t\t// transform the vertex to export format\n\t\t\t\t\toutput += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = uvs.count; i < l; i ++, nbVertexUvs ++ ) {\n\n\t\t\t\t\tuv.fromBufferAttribute( uvs, i );\n\n\t\t\t\t\t// transform the uv to export format\n\t\t\t\t\toutput += 'vt ' + uv.x + ' ' + uv.y + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// normals\n\n\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\tnormalMatrixWorld.getNormalMatrix( mesh.matrixWorld );\n\n\t\t\t\tfor ( let i = 0, l = normals.count; i < l; i ++, nbNormals ++ ) {\n\n\t\t\t\t\tnormal.fromBufferAttribute( normals, i );\n\n\t\t\t\t\t// transform the normal to world space\n\t\t\t\t\tnormal.applyMatrix3( normalMatrixWorld ).normalize();\n\n\t\t\t\t\t// transform the normal to export format\n\t\t\t\t\toutput += 'vn ' + normal.x + ' ' + normal.y + ' ' + normal.z + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// faces\n\n\t\t\tif ( indices !== null ) {\n\n\t\t\t\tfor ( let i = 0, l = indices.count; i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( let m = 0; m < 3; m ++ ) {\n\n\t\t\t\t\t\tconst j = indices.getX( i + m ) + 1;\n\n\t\t\t\t\t\tface[ m ] = ( indexVertex + j ) + ( normals || uvs ? '/' + ( uvs ? ( indexVertexUvs + j ) : '' ) + ( normals ? '/' + ( indexNormals + j ) : '' ) : '' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// transform the face to export format\n\t\t\t\t\toutput += 'f ' + face.join( ' ' ) + '\\n';\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( let m = 0; m < 3; m ++ ) {\n\n\t\t\t\t\t\tconst j = i + m + 1;\n\n\t\t\t\t\t\tface[ m ] = ( indexVertex + j ) + ( normals || uvs ? '/' + ( uvs ? ( indexVertexUvs + j ) : '' ) + ( normals ? '/' + ( indexNormals + j ) : '' ) : '' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// transform the face to export format\n\t\t\t\t\toutput += 'f ' + face.join( ' ' ) + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// update index\n\t\t\tindexVertex += nbVertex;\n\t\t\tindexVertexUvs += nbVertexUvs;\n\t\t\tindexNormals += nbNormals;\n\n\t\t}\n\n\t\tfunction parseLine( line ) {\n\n\t\t\tlet nbVertex = 0;\n\n\t\t\tconst geometry = line.geometry;\n\t\t\tconst type = line.type;\n\n\t\t\t// shortcuts\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\n\t\t\t// name of the line object\n\t\t\toutput += 'o ' + line.name + '\\n';\n\n\t\t\tif ( vertices !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++, nbVertex ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\n\t\t\t\t\t// transform the vertex to world space\n\t\t\t\t\tvertex.applyMatrix4( line.matrixWorld );\n\n\t\t\t\t\t// transform the vertex to export format\n\t\t\t\t\toutput += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( type === 'Line' ) {\n\n\t\t\t\toutput += 'l ';\n\n\t\t\t\tfor ( let j = 1, l = vertices.count; j <= l; j ++ ) {\n\n\t\t\t\t\toutput += ( indexVertex + j ) + ' ';\n\n\t\t\t\t}\n\n\t\t\t\toutput += '\\n';\n\n\t\t\t}\n\n\t\t\tif ( type === 'LineSegments' ) {\n\n\t\t\t\tfor ( let j = 1, k = j + 1, l = vertices.count; j < l; j += 2, k = j + 1 ) {\n\n\t\t\t\t\toutput += 'l ' + ( indexVertex + j ) + ' ' + ( indexVertex + k ) + '\\n';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// update index\n\t\t\tindexVertex += nbVertex;\n\n\t\t}\n\n\t\tfunction parsePoints( points ) {\n\n\t\t\tlet nbVertex = 0;\n\n\t\t\tconst geometry = points.geometry;\n\n\t\t\tconst vertices = geometry.getAttribute( 'position' );\n\t\t\tconst colors = geometry.getAttribute( 'color' );\n\n\t\t\toutput += 'o ' + points.name + '\\n';\n\n\t\t\tif ( vertices !== undefined ) {\n\n\t\t\t\tfor ( let i = 0, l = vertices.count; i < l; i ++, nbVertex ++ ) {\n\n\t\t\t\t\tvertex.fromBufferAttribute( vertices, i );\n\t\t\t\t\tvertex.applyMatrix4( points.matrixWorld );\n\n\t\t\t\t\toutput += 'v ' + vertex.x + ' ' + vertex.y + ' ' + vertex.z;\n\n\t\t\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\t\t\tcolor.fromBufferAttribute( colors, i ).convertLinearToSRGB();\n\n\t\t\t\t\t\toutput += ' ' + color.r + ' ' + color.g + ' ' + color.b;\n\n\t\t\t\t\t}\n\n\t\t\t\t\toutput += '\\n';\n\n\t\t\t\t}\n\n\t\t\t\toutput += 'p ';\n\n\t\t\t\tfor ( let j = 1, l = vertices.count; j <= l; j ++ ) {\n\n\t\t\t\t\toutput += ( indexVertex + j ) + ' ';\n\n\t\t\t\t}\n\n\t\t\t\toutput += '\\n';\n\n\t\t\t}\n\n\t\t\t// update index\n\t\t\tindexVertex += nbVertex;\n\n\t\t}\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isMesh === true ) {\n\n\t\t\t\tparseMesh( child );\n\n\t\t\t}\n\n\t\t\tif ( child.isLine === true ) {\n\n\t\t\t\tparseLine( child );\n\n\t\t\t}\n\n\t\t\tif ( child.isPoints === true ) {\n\n\t\t\t\tparsePoints( child );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn output;\n\n\t}\n\n}\n\nexport { OBJExporter };\n","import Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport SectionView from './SectionView';\nimport logging from '../logging';\nimport pc from '../ParametricCache';\nimport { ClosetUnit } from '../domain';\nimport { Mesh, BufferGeometry, Material } from 'three';\n\nconst log = logging('view');\n\nexport default class ClosetUnitView extends BaseView {\n\n declare model: ClosetUnit;\n\n private leftPanel: Mesh;\n private rightPanel: Mesh;\n private topShelf: Mesh;\n private bottomShelf: Mesh;\n private toeKick: Mesh;\n\n private content: SectionView;\n\n highlights: Set = new Set();\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n this.init();\n }\n\n async make() {\n\n this.userData.isParametric = true;\n this.name = 'ClosetUnit';\n\n const empty = new Mesh(new BufferGeometry(), new Material());\n empty.castShadow = empty.receiveShadow = true;\n this.leftPanel = empty;\n this.rightPanel = empty.clone();\n this.topShelf = empty.clone();\n this.bottomShelf = empty.clone();\n this.toeKick = empty.clone();\n this.content = new SectionView(this.model.content, this.app);\n\n this.add(this.leftPanel);\n this.add(this.rightPanel);\n this.add(this.topShelf);\n this.add(this.bottomShelf);\n this.add(this.toeKick);\n this.add(this.content);\n }\n\n protected bind(): void {\n const changeSize = this.changeSize.bind(this);\n this.model.bind('width', changeSize);\n this.model.on('height', changeSize);\n this.model.on('depth', changeSize);\n this.model.on('thickness', changeSize);\n this.model.on('bottomShelf', changeSize);\n this.model.on('topShelf', changeSize);\n this.model.on('toeKick', changeSize);\n this.model.on(\n 'thickness', () => this.model.content.trigger('thickness'));\n\n this.bindMaterialArray(this.leftPanel, this.model.materials);\n this.bindMaterialArray(this.rightPanel, this.model.materials);\n this.bindMaterialArray(this.topShelf, this.model.materials);\n this.bindMaterialArray(this.bottomShelf, this.model.materials);\n this.bindMaterialArray(this.toeKick, this.model.materials);\n }\n\n private changeSize() {\n const thickness = this.model.thickness;\n\n this.rightPanel.position.set(this.model.width+thickness, 0, 0);\n this.topShelf.position.set(thickness, this.model.height-thickness, 0);\n this.bottomShelf.position.set(thickness, this.model.bottomShelf - 3/8, 0);\n this.toeKick.position.set(thickness, 0, 0);\n\n this.updates.queue(\n async () => {\n// const left = await pc.make(\n// 'VerticalBoringPanel', \n// 'boring_panel_half',\n// this.model.height,\n// this.model.depth\n// );\n// const right = mirror(left, AXIS_X);\n const left = await pc.make(\n 'Divider', this.model.height, this.model.depth);\n const right = left.clone();\n\n const top = await pc.make(\n 'FixedShelf', this.model.width, this.model.depth);\n const bottom = await pc.make(\n 'FixedShelf', this.model.width, this.model.depth);\n\n let toeKick: BufferGeometry | undefined;\n if(this.model.toeKick) {\n toeKick = await pc.make(\n 'ToeKick',\n this.model.width,\n this.model.bottomShelf - 3/8,\n this.model.depth - 3);\n }\n\n return { left, right, top, bottom, toeKick };\n },\n ({ left, right, top, bottom, toeKick }) => {\n this.leftPanel.geometry = left;\n this.rightPanel.geometry = right;\n this.topShelf.geometry = top;\n this.bottomShelf.geometry = bottom;\n if(toeKick) {\n this.toeKick.geometry = toeKick;\n } else {\n this.toeKick.geometry = new BufferGeometry();\n }\n\n const thicknessScale = thickness / 0.75;\n\n this.leftPanel.scale.set(thicknessScale, 1, 1);\n this.rightPanel.scale.set(thicknessScale, 1, 1);\n this.topShelf.scale.set(1, thicknessScale, 1);\n this.bottomShelf.scale.set(1, thicknessScale, 1);\n\n // The bottomShelf measurement is to the bottom of the bottom\n // shelf, not to its hole. If the bottom shelf is at 0,\n // then its pin is at 3/8\". If it is at 32mm, then its pin is\n // in the hole at 3/8\" + 32mm, but the bottomShelf measurment\n // still looks like 32mm. This is different from fixed shelves\n // which are measured from 3/8\" above their bottom surface.\n // Note that 32mm = ~1.26\".\n this.toeKick.visible = this.model.bottomShelf > 1.2;\n \n this.layoutContent();\n this.pipelineUpdate();\n }\n );\n }\n\n layoutContent() {\n const thickness = this.model.thickness;\n\n this.model.content.height =\n this.model.height - this.model.bottomShelf + 3/8 - 2*thickness;\n this.model.content.width = this.model.width;\n this.model.content.depth = this.model.depth;\n this.model.content.position.x = thickness;\n this.model.content.position.y = this.model.bottomShelf -3/8 + thickness;\n this.model.content.position.z = 0;\n }\n}\n","import * as config from '../config';\nimport Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport DomainModel from '../DomainModel';\nimport ModelLoader from '../ModelLoader';\n// @ts-ignore\nimport landmarks from '../data/jarlin_cabinets_landmarks.json';\nimport logging from '../logging';\nimport traverse from '../utils/traverseGenerator';\nimport { BufferGeometry, Group, Matrix4, Mesh, Vector2, Vector3, Vector4 } from 'three';\nimport { Cabinet, Room, Vector3 as DomainVector3, Wall } from '../domain';\nimport { EdgeList, SweptMesh, ThreeJSMesh } from '../mw/prims';\nimport { cabinets, cabinetDepth, cabinetWidth, lineMaterial, cabinetHeight } from '../data/JarlinCatalogData';\nimport { lookahead, pairwise } from '../utils';\nimport { uvDimensions, uvScale } from '../IIID';\n\nconst log = logging('view');\nconst ml = ModelLoader.getInstance();\n\nconst needsCrownMolding = (cabinet: Cabinet) => {\n return cabinets.boolean(cabinet.sku, 'crown');\n}\n\nconst crownYPosition = (cabinet: Cabinet) => {\n switch(cabinets.string(cabinet.sku, 'model')){\n case 'WP':\n case 'OC':\n return cabinetHeight(cabinet.sku);\n default:\n return cabinet.position.y;\n }\n}\n\nconst isFiller = (cabinet: Cabinet) => {\n return cabinet.sku.startsWith('BF') || cabinet.sku.startsWith('WF');\n}\n\nconst firstCrownedCabinet = (wall: Wall) => {\n for(const cabinet of wall.cabinets) {\n if(needsCrownMolding(cabinet)) {\n return cabinet;\n }\n }\n}\n\nconst vapprox = (a: Vector3, b: Vector3) => {\n return (\n Math.abs(a.x - b.x) +\n Math.abs(a.y - b.y) +\n Math.abs(a.z - b.z)\n ) < 0.001;\n}\n\nconst gatherCabinetClusters = (room: Room) => {\n\n let\n clusters: Cabinet[][] = [],\n cluster: Cabinet[] = [];\n\n for(const [wall, nextWall] of lookahead(room.walls))\n {\n const cabinets = wall.cabinets.filter(needsCrownMolding);\n\n for(const [cabinet, nextCabinet] of lookahead(cabinets))\n {\n cluster.push(cabinet);\n\n const\n width = cabinetWidth(cabinet.sku),\n depth = isFiller(cabinet)\n ? cabinet.position.z\n : cabinetDepth(cabinet.sku),\n rightEdge = cabinet.position.x + width,\n adjacent =\n nextCabinet != null\n && rightEdge == nextCabinet.position.x\n && crownYPosition(cabinet) == crownYPosition(nextCabinet);\n\n if(adjacent) {\n continue;\n }\n\n // If we're in a corner, and the first cabinet on the next wall is\n // inside our\n if(nextCabinet == null && nextWall && nextWall.cabinets.length > 0) {\n const first: Cabinet = firstCrownedCabinet(nextWall);\n if(first\n && first.position.x <= depth\n && crownYPosition(cabinet) == crownYPosition(first))\n {\n continue;\n }\n }\n\n // If we haven't continued the cluster above, then we split it\n // by default\n\n clusters.push(cluster);\n cluster = [];\n }\n }\n return clusters;\n}\n\ntype XYZ = {x: number, y: number, z: number};\n\nconst copy = (src: XYZ, dest: XYZ) => {\n dest.x = src.x;\n dest.y = src.y;\n dest.z = src.z;\n}\n\nconst isDomainModel3D = (model: DomainModel): model is DomainModel3D => {\n return 'position' in model && model[\"position\"] instanceof DomainVector3\n && 'rotation' in model && model[\"rotation\"] instanceof DomainVector3\n}\n\n// another cut-down transform class for the very specific purpose of getting\n// cabinet positions in world space for adding crown molding globally\nexport class Transform {\n scratch: Matrix4 = new Matrix4();\n self: Matrix4 = new Matrix4();\n vec4: Vector4 = new Vector4();\n\n init(model: DomainModel3D) {\n this.self.identity();\n const parents: DomainModel3D[] = [model];\n let parent = model.parent;\n while(parent != null && isDomainModel3D(parent)) {\n parents.push(parent);\n parent = parent.parent;\n }\n\n parents.reverse();\n\n for(const parent of parents) {\n this.translate(parent.position);\n this.rotate(parent.rotation);\n }\n }\n\n toWorldPosition(src: XYZ, dest: XYZ) {\n copy(src, this.vec4);\n this.vec4.w = 1;\n this.vec4.applyMatrix4(this.self);\n copy(this.vec4, dest);\n }\n\n translate({x, y, z}: XYZ) {\n this.scratch.makeTranslation(x, y, z);\n this.self.multiply(this.scratch);\n }\n\n /**\n * Rotates X, Y, and Z in that order. Our DomainModel3D class is always in\n * XYZ order.\n */\n rotate({x, y, z}: XYZ) {\n this.scratch.makeRotationX(x);\n this.self.multiply(this.scratch);\n this.scratch.makeRotationY(y);\n this.self.multiply(this.scratch);\n this.scratch.makeRotationZ(z);\n this.self.multiply(this.scratch);\n }\n}\n\nconst renderCabinetClusters = async (room: Room, clusters: Cabinet[][]) => {\n const\n group = new Group(),\n meshes: Mesh[] = [],\n v = new Vector3(),\n t = new Transform();\n\n for(const cluster of clusters) {\n if(cluster.length == 0) continue;\n\n const\n first = cluster[0],\n last = cluster[cluster.length - 1],\n plan = new EdgeList(),\n verts: Vector3[] = [];\n\n t.init(first.parent as Wall);\n\n t.toWorldPosition({x: first.position.x, y:0, z:0}, v);\n verts.push(v.clone());\n\n for(const cabinet of cluster) {\n // the cluster may span walls, so we re-initialize for every\n // cabinet.\n t.init(cabinet.parent as Wall);\n if(cabinet.sku in landmarks) {\n const pos = landmarks[cabinet.sku].crown\n for(let i=0; i < pos.length; i+=2) {\n t.toWorldPosition({\n x: cabinet.position.x + pos[i],\n y: 0,\n z: cabinet.position.z + pos[i+1]},\n v);\n verts.push(v.clone());\n }\n } else {\n const depth = cabinet.position.z + (isFiller(cabinet)\n ? 0\n : cabinetDepth(cabinet.sku));\n // TODO: clamp X so it's no closer than 12\" from the START of the\n // wall, unless this is the first cabinet\n t.toWorldPosition({\n x: cabinet.position.x,\n y: 0,\n z: depth},\n v);\n verts.push(v.clone());\n\n // TODO: clamp X so it's no closer than 12\" from the END of the\n // wall, unless this is the last cabinet\n t.toWorldPosition({\n x: cabinet.position.x + cabinetWidth(cabinet.sku),\n y: 0,\n z: depth},\n v);\n verts.push(v.clone());\n }\n }\n\n t.init(last.parent as Wall);\n if(last.sku in landmarks) {\n const pos = landmarks[last.sku].last;\n t.toWorldPosition({\n x: last.position.x + pos[0],\n y:0,\n z: last.position.z + pos[1]},\n v);\n } else {\n t.toWorldPosition(\n {x: last.position.x + cabinetWidth(last.sku), y:0, z:0}, v);\n }\n verts.push(v.clone());\n\n // Filter out duplicates because they mess up the EdgeList plan\n const filtered: Vector3[] = [];\n for(const [v, next] of lookahead(verts)) {\n if(next && vapprox(v, next)) {\n continue;\n }\n filtered.push(v);\n }\n\n filtered.reverse();\n for(const [a, b] of pairwise(filtered)) {\n plan.push(a.x,a.z, 0,0, b.x,b.z, 0,0);\n }\n\n const profileObj = await ml.get(\n `${config.geometry}/crown_jarlin_${room.molding.crown}.glb`);\n let profileGeo: BufferGeometry;\n for(const obj of traverse(profileObj)) {\n if(obj instanceof Mesh) {\n profileGeo = obj.geometry;\n }\n }\n const profile = new EdgeList();\n try {\n profile.fromBufferGeometry(profileGeo);\n } catch(error) {\n log.error(error);\n return;\n }\n\n const sw = new SweptMesh(profile, plan);\n const geo = ThreeJSMesh.toBufferGeometry(sw.generate());\n const mat = lineMaterial(room.line);\n const mesh = new Mesh(geo, mat);\n mesh.castShadow = mesh.receiveShadow = true;\n mesh.position.y = crownYPosition(last);\n group.add(mesh);\n\n meshes.push(mesh);\n }\n\n if(meshes.length > 0) {\n const ref = meshes[0];\n const uvDims = uvDimensions(ref.geometry);\n const scale = 1 / Math.max(uvDims.width, uvDims.height);\n const scaleVec = new Vector2(scale, scale);\n for(const mesh of meshes) {\n uvScale(mesh.geometry, scaleVec);\n }\n }\n\n return group;\n}\n\n\nexport default class CrownMoldingView extends BaseView {\n declare model: Room;\n\n constructor(model: Room, app: Application) {\n super(model, app);\n\n this.updateAppearance = this.updateAppearance.bind(this);\n\n this.init();\n }\n\n protected make(): void {\n this.name = 'Crown Molding';\n this.userData.isParametric = true;\n }\n\n protected bind(): void {\n this.model.bind('walls', this.updateAppearance);\n }\n\n updateAppearance() {\n this.updates.queue(\n async () => {\n if(this.model.molding.crown) {\n const\n clusters = gatherCabinetClusters(this.model),\n group = await renderCabinetClusters(this.model, clusters);\n return group;\n }\n },\n (group: Group | undefined) => {\n if(group) {\n for(const child of Array.from(this.children)) {\n child.removeFromParent();\n }\n this.add(group);\n }\n })\n }\n}\n","import * as config from '../config';\nimport Application from '../Application';\nimport BaseView from './BaseView';\n// @ts-ignore\nimport landmarks from '../data/jarlin_cabinets_landmarks.json';\nimport logging from '../logging';\nimport mfac from '../MaterialFactory';\nimport { Appliance, Cabinet, Room, Wall } from '../domain';\nimport { ExtrudeGeometry, Group, Mesh, Path, Shape, Vector2, Vector3 } from 'three';\nimport { Transform } from './CrownMoldingView';\nimport { cabinets, cabinetWidth } from '../data/JarlinCatalogData';\nimport { firstMatching, lookahead, ThreeAxisHelper } from '../utils';\nimport { uvDimensions, uvScale } from '../IIID';\nimport { trunc } from '../measurement';\n\nconst log = logging('view');\n\nconst APPROX_PI = trunc(Math.PI, 3);\n\nconst needsCountertop = (cabinet: Cabinet) => {\n return cabinets.boolean(cabinet.sku, 'countertop');\n}\n\nconst cornerShouldBeFilled = (cabinet: Cabinet, wall: Wall, nextWall: Wall): boolean => {\n const \n wallLength = wall.heights[wall.heights.length - 1].x,\n width = cabinetWidth(cabinet.sku);\n\n // If the next wall has a cabinet within 30 inches of this wall, then\n // we may want to extend the countertop around the corner. This assumes\n // the angle between walls is always negative. Note that since fillers\n // are a special kind of cabinet, and they will also receive countertop.\n let nextWallInRange = false;\n if(nextWall != null) {\n const startOfNextWall = firstMatching(nextWall.cabinets, needsCountertop);\n if(startOfNextWall != null) {\n // something with landmarks will add its own corner\n if(startOfNextWall.sku in landmarks) {\n return false;\n }\n\n const\n r1 = wall.rotation.y,\n r2 = nextWall.rotation.y,\n dr = trunc(Math.abs(r2 - r1), 3);\n if(dr == APPROX_PI) {\n return false;\n }\n\n nextWallInRange = startOfNextWall.position.x < 24;\n }\n }\n const inRange = cabinet.position.x + width + 24 >= wallLength;\n // if we do, and the first cabinet on the next wall is also\n // in range, then \n return inRange && nextWallInRange;\n}\n\n/**\n * A little 2D point position that marks the back corner of the countertop.\n */\nclass Corner {\n x: number;\n z: number;\n\n constructor(x: number, z: number)\n {\n this.x = x;\n this.z = z;\n }\n}\n\nclass Cluster extends Array {\n sinks: Appliance[] = [];\n}\n\nconst gatherCabinetClusters = (room: Room) => {\n \n let \n clusters: Cluster[] = [],\n cluster: Cluster = new Cluster();\n\n for(const [wall, nextWall] of lookahead(room.walls))\n {\n const boxes: Array = wall.cabinets.filter(needsCountertop);\n\n const sinks = wall.appliances.filter(a => a.type == 'sink');\n sinks.sort((a, b) => a.position.x - b.position.x);\n\n for(const appliance of wall.appliances) {\n if(appliance.type == 'dishwasher') {\n boxes.push(appliance);\n }\n }\n // we put the appliance in out-of-order, so we need to sort it\n boxes.sort((a, b) => a.position.x - b.position.x);\n\n for(const [box, nextCabinet] of lookahead(boxes))\n {\n cluster.push(box);\n \n const\n width = box instanceof Cabinet\n ? cabinetWidth(box.sku)\n : box.width,\n rightEdge = box.position.x + width,\n adjacent = nextCabinet != null && rightEdge == nextCabinet.position.x;\n if(adjacent) \n {\n const i = sinks.findIndex(sink => sink.position.x < rightEdge);\n cluster.sinks.push(...sinks.splice(0, i+1));\n continue;\n } \n\n // If we're on the last cabinet on this wall, check if we extend\n // into the 24\" depth of the bank of cabinets on the next wall.\n // Note that if this last cabinet\n if(nextCabinet == null\n && nextWall != null\n && box instanceof Cabinet\n && !(box.sku in landmarks))\n {\n // Note that cornerShouldBeFilled is false if the next wall\n // starts with a cabinet that includes landmarks, i.e. some,\n // but not all corner cabinets.\n if(cornerShouldBeFilled(box, wall, nextWall))\n {\n // This assumes that the room has no transform\n cluster.push(\n new Corner(nextWall.position.x, nextWall.position.z));\n continue;\n }\n }\n\n clusters.push(cluster);\n cluster = new Cluster();\n }\n }\n\n return clusters;\n};\n\n// TODO: memoize this\nconst renderCabinetClusters = (room: Room, clusters: Cluster[]): Mesh[] => {\n const\n meshes: Mesh[] = [],\n v = new Vector3(),\n t = new Transform();\n\n for(const cluster of clusters) {\n const\n forward: Vector2[] = [],\n reverse: Vector2[] = [];\n\n let lastWasCorner = false;\n\n for(const [cabinet, nextCabinet] of lookahead(cluster))\n {\n if(cabinet instanceof Corner) {\n reverse.push(new Vector2(cabinet.x, cabinet.z))\n lastWasCorner = true;\n continue;\n }\n\n if(cabinet instanceof Cabinet) {\n addCountertopPoints(\n forward, reverse,\n cabinet, nextCabinet as Cabinet, lastWasCorner,\n t, v);\n } else if(cabinet instanceof Appliance) {\n const appliance = cabinet;\n t.init(appliance);\n\n v.set(0, 0, 25)\n t.toWorldPosition(v, v);\n forward.push(new Vector2(v.x, v.z));\n\n v.set(appliance.width, 0, 25)\n t.toWorldPosition(v, v);\n forward.push(new Vector2(v.x, v.z));\n\n v.set(0, 0, 0);\n t.toWorldPosition(v, v);\n reverse.push(new Vector2(v.x, v.z));\n\n v.set(appliance.width, 0, 0);\n t.toWorldPosition(v, v);\n reverse.push(new Vector2(v.x, v.z));\n }\n\n lastWasCorner = false;\n }\n\n reverse.reverse();\n const \n shape = new Shape(),\n first = forward.shift();\n\n shape.moveTo(first.x, first.y);\n\n// const app = (window as any).app as Application;\n// let i = 1;\n// const helper = new ThreeAxisHelper(++i);\n// helper.position.set(first.x, 37.5, first.y);\n// app.pipeline.scene.add(helper);\n\n for(const point of forward.concat(reverse)) {\n shape.lineTo(point.x, point.y); \n\n// const helper = new ThreeAxisHelper(++i);\n// helper.position.set(point.x, 37.5, point.y);\n// app.pipeline.scene.add(helper);\n }\n\n for(const ap of cluster.sinks) {\n const path = new Path();\n\n const\n x1 = ap.position.x + 0.25,\n x2 = x1 + ap.width - 0.5,\n y1 = ap.position.z + 0.25,\n y2 = y1 + ap.depth - 0.5;\n \n t.init(ap.parent as Wall);\n t.toWorldPosition({x: x1, z: y1, y: 0}, v);\n path.moveTo(v.x, v.z);\n const ax = v.x, ay = v.z;\n\n t.toWorldPosition({x: x2, z: y1, y: 0}, v);\n path.lineTo(v.x, v.z);\n\n t.toWorldPosition({x: x2, z: y2, y: 0}, v);\n path.lineTo(v.x, v.z);\n\n t.toWorldPosition({x: x1, z: y2, y: 0}, v);\n path.lineTo(v.x, v.z);\n\n path.lineTo(ax, ay); // close the path??\n\n shape.holes.push(path);\n }\n\n const geo = new ExtrudeGeometry([shape], {\n bevelEnabled: true,\n // the bevel thickness is additive, so we need to adjust the\n // 3cm depth by the thickness of the bevel.\n depth: 1.1811 - 0.25,\n bevelThickness: 0.125,\n // the bevel size is additive, so we offset the shape in the\n // negative direction to account for it.\n bevelSize: 0.125,\n bevelOffset: -0.125,\n });\n\n let color: string = '673.png';\n let tint: number = 0xFFFFFF;\n\n switch(room.line) {\n case 'CT':\n color = '1192.png';\n tint = 0xCCCCCC;\n break;\n case 'PE':\n color = '1047.png';\n tint = 0x553b27;\n break;\n case 'NT':\n color = '673.png';\n tint = 0x8e9ecc;\n break;\n case 'AL':\n color = '1025.png';\n tint = 0xDDDDDD;\n break;\n case 'SG':\n color = '1047.png';\n tint = 0xCCCCCC;\n break;\n case 'SO':\n color = '670.png';\n tint = 0xCCCCCC;\n break;\n case 'ES':\n color = '670.png';\n tint = 0xCCCCCC;\n break;\n case 'DS':\n color = '1155.png';\n tint = 0xF8FFFF;\n break;\n case 'SM':\n color = '670.png';\n tint = 0xCCCCCC;\n break;\n case 'AB':\n color = '670.png';\n tint = 0xCCCCCC;\n break;\n default:\n color = '673.png';\n }\n\n const mesh = new Mesh(\n geo,\n mfac.make('GlossMelamine', `${config.colors}/${color}`, tint)\n );\n mesh.castShadow = mesh.receiveShadow = true;\n\n meshes.push(mesh);\n\n mesh.rotation.set(Math.PI/2, 0, 0);\n mesh.position.set(0, 34.5 + 1.1811 - 0.125, 0);\n\n }\n\n return meshes;\n}\n\n/**\n * A sub-routine of the render\n */\nconst addCountertopPoints =\n (forwardOut: Array, reverseOut: Array,\n cabinet: Cabinet, nextCabinet: Cabinet, lastWasCorner: boolean,\n t: Transform, v: Vector3) =>\n{\n if(cabinet.sku in landmarks) {\n t.init(cabinet);\n const {forward, reverse} = landmarks[cabinet.sku];\n for(let i=0; i < forward.length; i+=2) {\n v.x = forward[i];\n v.y = 0;\n v.z = forward[i+1];\n t.toWorldPosition(v, v);\n forwardOut.push(new Vector2(v.x, v.z));\n }\n for(let i=0; i < reverse.length; i+=2) {\n v.x = reverse[i];\n v.y = 0;\n v.z = reverse[i+1];\n t.toWorldPosition(v, v);\n reverseOut.push(new Vector2(v.x, v.z));\n }\n } else {\n const\n width = cabinetWidth(cabinet.sku),\n rightEdge = cabinet.position.x + width,\n wall = cabinet.parent as Wall,\n wallLength = wall.heights[wall.heights.length - 1].x;\n\n\n // the left edge of the cabinet, adjusted to be 24\" if we're just\n // coming out of a corner\n let x1: number = cabinet.position.x;\n if(lastWasCorner) {\n x1 = 24;\n }\n\n let x2: number = rightEdge;\n if(nextCabinet instanceof Corner) {\n x2 = Math.min(rightEdge, wallLength - 24);\n }\n\n // we pick up the rotation of the wall, but track the position of\n // the cabinet manually to accomodate adjustments around the\n // corners.\n t.init(cabinet.parent as Wall);\n\n t.toWorldPosition({x: x1, y: 0, z: 25}, v);\n forwardOut.push(new Vector2(v.x, v.z));\n\n t.toWorldPosition({x: x2, y: 0, z: 25}, v);\n forwardOut.push(new Vector2(v.x, v.z));\n\n t.toWorldPosition({x: x1, y: 0, z: 0}, v);\n reverseOut.push(new Vector2(v.x, v.z));\n\n t.toWorldPosition({x: x2, y: 0, z: 0}, v);\n reverseOut.push(new Vector2(v.x, v.z));\n }\n}\n\n\nexport default class CountertopView extends BaseView {\n declare model: Room;\n\n constructor(model: Room, app: Application) {\n super(model, app);\n this.init();\n }\n\n protected make(): void {\n\n const clusters = gatherCabinetClusters(this.model);\n const meshes = renderCabinetClusters(this.model, clusters);\n\n const group = new Group();\n\n if(meshes.length > 0) {\n const ref = meshes[0];\n const uvDims = uvDimensions(ref.geometry);\n const scale = 1 / Math.max(uvDims.width, uvDims.height);\n const scaleVec = new Vector2(scale, scale);\n for(const mesh of meshes) {\n uvScale(mesh.geometry, scaleVec);\n group.add(mesh);\n }\n }\n\n this.add(group);\n }\n\n protected bind(): void {\n\n }\n\n}\n","import Application from '../Application';\nimport BaseView, { DomainModel3D } from './BaseView';\nimport CountertopView from './CountertopView';\nimport WallView from './WallView';\nimport mfac from '../MaterialFactory';\nimport pc from '../ParametricCache';\nimport { Mesh } from 'three';\nimport { Room } from '../domain';\nimport { approx } from '../measurement';\nimport CrownMoldingView from './CrownMoldingView';\n\nconst rot90 = (x: number, y: number) => [-y, x];\n\n// Adapted from https://en.wikipedia.org/wiki/Intersection_(geometry)#Two_lines\n// xs, ys is the intersection of two lines a1*x + b1*y = c1, and\n// a2*x + b2*y = c2. In our case, b1 and b2 are always one. The general formula\n// are:\n// xs = (c1*b2 - c2*b1) / (a1*b2 - a2*b1)\n// ys = (a1*c2 - a2*c1) / (a1*b2 - a2*b1)\nconst intersect = (\n a1: number, c1: number, a2: number, c2: number): [number, number] =>\n{\n return [\n (c1 - c2) / (a1 - a2),\n (a1*c2 - a2*c1) / (a1 - a2)\n ];\n}\n\nexport default class RoomView extends BaseView {\n\n declare model: Room;\n\n walls: WallView[];\n fillers: Mesh[];\n\n constructor(model: DomainModel3D, app: Application) {\n super(model, app);\n \n this.walls = [];\n this.fillers = [];\n\n this.init();\n }\n\n make() {\n let last: number = Infinity;\n for(let wall of this.model.walls) {\n const hideStart = approx(Math.PI/2, wall.rotation.y - last);\n const view = new WallView(wall, this.app, hideStart);\n this.walls.push(view);\n this.add(view);\n\n last = wall.rotation.y;\n }\n\n if(this.model.walls.length > 0) {\n // Iterate through the walls in adjacent pairs\n for(let i=1; i < this.model.walls.length; i++) {\n const a = this.model.walls[i-1];\n const b = this.model.walls[i];\n // ignore corners adjacent to islands or invisible walls\n if(a.island || b.island) {\n continue;\n }\n if(!(a.visible && b.visible)) {\n continue;\n }\n // If b is rotated clockwise (negative) more than a, then the\n // bend in the wall is clockwise, and we need a filler.\n if(b.rotation.y - a.rotation.y < 0) {\n const\n height = b.heights[0].height,\n [ax, ay] = rot90(\n Math.cos(a.rotation.y)*4.5,\n Math.sin(a.rotation.y)*4.5\n ),\n [bx, by] = rot90(\n Math.cos(b.rotation.y)*4.5,\n Math.sin(b.rotation.y)*4.5\n ),\n // the slopes of a and b\n am = Math.tan(a.rotation.y),\n bm = Math.tan(b.rotation.y),\n\n // solve the familiar `y = mx + b` for b given known\n // points. In terms of our variables, this means solving\n // `ay = am*ax + ac` for ac. The ac variable becomes a\n // parameter to the `intersect` function which uses the\n // general form of a line `ay + bx + c = 0` to solve for\n // a two line intersection.\n ac = -am*ax + ay,\n bc = -bm*bx + by,\n // c for \"corner\"\n [cx, cy] = intersect(-am, ac, -bm, bc);\n\n pc.make('WallCornerFill', height, ax, ay, bx, by, cx, cy)\n .then(geo => {\n const mesh = new Mesh(geo, mfac.make('WallPaint'))\n mesh.castShadow = mesh.receiveShadow = true;\n mesh.position.set(\n b.position.x, b.position.y, b.position.z);\n this.fillers.push(mesh);\n this.add(mesh);\n });\n }\n }\n }\n\n this.add(new CountertopView(this.model, this.app));\n this.add(new CrownMoldingView(this.model, this.app));\n }\n\n bind() {\n // nothing to do here ... the fillers won't really work if the walls\n // move dynamically. For now we don't anticipate the floor plan\n // changing in a live 3D view.\n }\n\n /**\n * Searches the room's walls for a wall with the given `wallId` and sets\n * the view's visibility to `isVisible`. This will make the wall and all of\n * its children invisible. Note that the Wall.visible domain model property\n * is used for making only the wall mesh invisible, but it will still\n * display the wall's children. This supports islands and peninsulas, not\n * for interactively toggling whether the object is visible.\n */\n setWallViewVisible(wallId: number, isVisible: boolean) {\n for(let wall of this.walls) {\n if(wall.model.id == String(wallId)) {\n wall.visible = isVisible;\n }\n }\n // Request that the render pipeline update the display because we just\n // made a change\n Application.do('pipeline-update');\n }\n}\n","import DomainModel from \"./DomainModel\";\nimport * as dm from './domain';\nimport logging from './logging';\n\nconst log = logging('DefaultsManager');\n\n\nexport default class DefaultsManager {\n defaults: dm.Defaults;\n material: dm.MaterialDefaults;\n style: dm.StyleDefaults;\n\n constructor(defaults: dm.Defaults) {\n this.defaults = defaults;\n this.material = defaults.material;\n this.style = defaults.style;\n\n this.reset = this.reset.bind(this);\n }\n\n get(ctor: typeof DomainModel, props: Record): DomainModel\n {\n const material = this.material;\n const style = this.style;\n switch(ctor) {\n case dm.ClosetUnit:\n break;\n\n case dm.Cubby:\n return dm.Cubby.fromJSON({\n faceMaterial: material.edgeband,\n boxMaterial: material.shelving,\n ...props,\n });\n\n case dm.Divider:\n return dm.Divider.fromJSON({\n materials: [\n material.edgeband,\n material.shelving,\n ]\n });\n\n case dm.Door:\n return dm.Door.fromJSON({\n frame: style.doorFrame\n ? {\n style: style.doorFrame,\n material: material.door,\n }\n : null,\n panel: {\n style: style.doorPanel,\n grain: \"vertical\",\n material: material.door,\n },\n handles:\n props.hinge == 'double'\n ? [\n {\n style: templ(style.hardware, 'v'),\n materials: [material.hardware],\n },\n {\n style: templ(style.hardware, 'v'),\n materials: [material.hardware],\n },\n ]\n : [\n {\n style: templ(\n style.hardware,\n props.hinge == 'left' || props.hinge == 'right'\n ? 'v' : 'h'),\n materials: [material.hardware]\n },\n ],\n ...props,\n });\n\n case dm.HookRack:\n break;\n\n case dm.VerticalPanel:\n return dm.VerticalPanel.fromJSON({\n materials: [material.shelving],\n ...props,\n });\n\n case dm.Drawer:\n return dm.Drawer.fromJSON({\n frame: props.scoop || style.drawerFrame == null ? null : {\n style: style.drawerFrame,\n material: material.drawer,\n },\n panel: props.scoop\n ? {\n style: \"\",\n grain: \"horizontal\",\n material: material.drawerBox\n }\n : {\n style: style.drawerPanel,\n grain: \"horizontal\",\n material: material.drawer\n },\n handles: props.scoop\n ? []\n : [{\n position: { x: 9, y: props.height/2 - 0.25, z: 0},\n style: templ(style.hardware, 'h'),\n materials: [material.hardware],\n }],\n box: {\n material: material.drawerBox,\n },\n ...props,\n });\n\n case dm.DrawerBox:\n return dm.DrawerBox.fromJSON({\n materials: [material.drawerBox],\n ...props,\n });\n\n case dm.GenericAsset: {\n let materials: object;\n if(props.filename.indexOf(\"TAG\") == -1) {\n materials = [];\n } else {\n const [_tag, name, ..._extra] = props.filename.split(\"_\");\n switch(name) {\n case \"LaundryOrganizer\":\n materials = [\n {type: \"GlossBlack\"},\n material.tagMetal,\n material.tagFabric];\n break;\n case \"PantRack\":\n case \"ShoeOrganizer\":\n materials = [material.tagMetal, {type: \"GlossBlack\"}];\n break;\n default:\n materials = [material.tagMetal, material.tagFabric]\n }\n }\n return dm.GenericAsset.fromJSON({materials, ...props});\n }\n\n // accepts a 'direction' property, either 'h' or 'v' to fill in the\n // handle filename template\n case dm.Handle:\n let hinge = '';\n if(props.hinge == 'right') hinge = 'r';\n\n return dm.Handle.fromJSON({\n materials: [material.hardware],\n style: templ(style.hardware, String(props.direction), hinge),\n ...props,\n });\n\n case dm.Lights:\n return dm.Lights.fromJSON({\n materials:\n props.type == 'strip'\n ? [material.light]\n : [material.hardware, material.light],\n ...props,\n });\n\n case dm.ParametricPart:\n const materials = {\n 'HangBar': [material.rod],\n 'GlassShelf': [{type: 'Glass'}],\n 'AdjustableShelf': [\n material.shelving,\n material.edgeband,\n ],\n 'FlatShoeShelf': [\n material.shelving,\n material.edgeband,\n ],\n 'FixedShoeShelf': [\n material.shelving,\n material.edgeband,\n ],\n 'SlidingShelf': [\n material.shelving,\n material.edgeband,\n {type: 'Chrome'},\n ],\n 'SlantedShelfWithFence': [\n material.shelving,\n material.edgeband,\n material.hardware,\n ],\n }[props.name] || [material.shelving];\n return dm.ParametricPart.fromJSON({\n materials,\n ...props,\n });\n\n case dm.Wall:\n break;\n\n default:\n log.error('DefaultsManager get(): no default material for model');\n }\n }\n\n reset(model: DomainModel) {\n const material = this.material;\n const style = this.style;\n\n const ctor = Object.getPrototypeOf(model).constructor;\n switch(ctor) {\n case dm.ClosetUnit: {\n const unit = model as dm.ClosetUnit;\n unit.materials = [material.shelving, material.edgeband];\n break;\n }\n case dm.Cubby: {\n const cubby = model as dm.Cubby;\n cubby.faceMaterial = material.edgeband;\n cubby.boxMaterial = material.shelving;\n break;\n }\n case dm.Divider: {\n const divider = model as dm.Divider;\n divider.materials = [material.shelving, material.edgeband];\n break;\n }\n case dm.Door: {\n const door = model as dm.Door;\n if(style.doorFrame == null) {\n door.frame = null;\n } else {\n door.frame = dm.Frame.fromJSON({\n style: style.doorFrame,\n material: material.door,\n }, door);\n }\n\n door.panel.style = style.doorPanel;\n door.panel.material = material.door;\n\n let handle: dm.Handle;\n if(door.handles.length > 0) {\n handle = dm.Handle.fromJSON(door.handles[0], door);\n } else {\n handle = dm.Handle.fromJSON({}, door);\n }\n handle.style = templ(\n style.hardware,\n door.hinge == 'left' || door.hinge == 'right'\n ? 'v' : 'h');\n handle.materials = [material.hardware];\n if(door.hinge == 'double') {\n const left = handle;\n const right = handle.clone(true);\n door.handles = [left, right];\n } else {\n door.handles = [handle];\n }\n\n break;\n }\n case dm.Drawer: {\n const drawer = model as dm.Drawer;\n if(style.drawerFrame == null) {\n drawer.frame = null;\n } else {\n drawer.frame = dm.Frame.fromJSON({\n style: style.drawerFrame,\n material: material.drawer,\n }, drawer);\n }\n\n drawer.panel.style = style.drawerPanel;\n drawer.panel.material = material.drawer;\n\n let handle: dm.Handle;\n if(drawer.handles.length > 0) {\n // we assume that normally the handle.side property is null\n // to imply the default position opposite the hinge. The\n // one likely other case would be if a cabinet has a full\n // width pull at the top or bottom, in which case they\n // both have the same setting.\n handle = dm.Handle.fromJSON(drawer.handles[0], drawer);\n } else {\n handle = dm.Handle.fromJSON({}, drawer);\n }\n handle.style = templ(style.hardware, 'h');\n handle.materials = [material.hardware];\n drawer.handles = [handle];\n\n break;\n }\n case dm.DrawerBox: {\n const box = model as dm.DrawerBox;\n box.material = material.drawerBox;\n break;\n }\n case dm.GenericAsset: {\n const asset = model as dm.GenericAsset;\n if(asset.filename.indexOf(\"TAG\") == -1) {\n asset.materials = [];\n } else {\n const [_tag, name, ..._extra] = asset.filename.split(\"_\");\n switch(name) {\n case \"LaundryOrganizer\":\n asset.materials = [\n dm.Material.fromJSON({type: \"GlossBlack\"}),\n material.tagMetal,\n material.tagFabric];\n break;\n case \"PantRack\":\n case \"ShoeOrganizer\":\n asset.materials = [\n material.tagMetal,\n dm.Material.fromJSON({type: \"GlossBlack\"})\n ];\n break;\n default:\n asset.materials = [material.tagMetal, material.tagFabric]\n }\n }\n break;\n }\n case dm.Lights: {\n const lights = model as dm.Lights;\n lights.materials = lights.type == 'strip'\n ? [material.light]\n : [material.hardware, material.light];\n break;\n }\n case dm.ParametricPart: {\n const part = model as dm.ParametricPart;\n switch(part.name) {\n case 'HangBar': \n part.materials = [material.rod];\n break;\n case 'GlassShelf':\n part.materials = [dm.Material.fromJSON({type: 'Glass'})];\n break;\n case 'FixedShoeShelf':\n case 'FlatShoeShelf':\n case 'AdjustableShelf':\n part.materials = [material.shelving, material.edgeband];\n break;\n case 'SlidingShelf':\n part.materials = [\n material.shelving,\n material.edgeband,\n dm.Material.fromJSON({type: 'Chrome'})\n ];\n break;\n case 'SlantedShelfWithFence':\n part.materials = [\n material.shelving,\n material.edgeband,\n material.hardware,\n ];\n break;\n\n default:\n part.materials = [material.shelving];\n }\n }\n // There is no default case because this is expected to be called\n // by the DomainModel.traverse function, in which case we will\n // visit some items we don't need to modify at all.\n }\n }\n}\n\n// Probably a lot more concise ways of writing this, but I think this is the\n// clearest I can come up with. All # characters will be consumed unless they\n// are escaped with a leading backslash, i.e. \\#. Each additional argument is\n// substituted for a # in the input until arguments run out, then the # is\n// merely deleted an no error is logged.\nconst templ = (template: string, ...args: string[]): string => {\n let result = \"\";\n let i = 0;\n const segments = template.split(/(? {\n return '\\t'.repeat(indent) + str + '\\n';\n}\n\nexport const toGlbFile = (obj: Object3D): Promise => {\n return new Promise((resolve, reject) => {\n let exporter = new GLTFExporter();\n exporter.parse(\n obj,\n (glb: ArrayBuffer) => resolve(glb),\n error => reject(error),\n { binary: true }\n );\n });\n}\n\nconst array = (property: string, model: any, indent: number) => {\n let result = '';\n if(model[property] && model[property].length > 0) {\n result += ln(`${property} (${model[property].length})`, indent);\n for(let child of model[property]) {\n result += describe(child, indent+1);\n }\n }\n return result;\n}\n\nconst vecln = (property: string, model: any, indent: number) => {\n let result = '';\n const {x, y, z} = model[property] as {x: number, y: number, z: number};\n result += ln(`${property}: ${x.toFixed(3)}, ${y.toFixed(3)}, ${z.toFixed(3)}`, indent);\n return result;\n}\n\nexport const describe = (model: any, indent: number = 0): string => {\n let result = \"\";\n switch(model.constructor) {\n case dm.ClosetUnit:\n result += ln('ClosetUnit', indent++);\n result += describe(model.content, indent+1);\n break;\n case dm.Section:\n result += ln('Section', indent++);\n result += ln(`width: ${model.width}`, indent);\n result += ln(`height: ${model.height}`, indent);\n result += ln(`elevation: ${elevation(model)}`, indent);\n result += array('sections', model, indent);\n result += array('parametricParts', model, indent);\n result += array('drawers', model, indent);\n result += array('assets', model, indent);\n \n if(model.door) {\n result += describe(model.door, indent);\n }\n break;\n case dm.ParametricPart:\n result += ln(`ParametricPart (${model.name})`, indent);\n break;\n case dm.Drawer:\n result += ln(`Drawer (${model.height}\")`, indent);\n break;\n case dm.GenericAsset:\n result += ln('GenericAsset', indent++);\n result += ln(`filename: ${model.filename}`, indent);\n result += ln(`height: ${model.height}`, indent);\n result += ln(`position.y: ${model.position.y}`, indent);\n break;\n case dm.Door:\n result += ln(`Door (${model.hinge})`, indent++);\n result += ln(`width: ${model.width}`, indent);\n result += array('handles', model, indent);\n break;\n case dm.Handle:\n result += ln(`Handle`, indent++);\n result += ln(`side: ${model.side}`, indent);\n result += vecln('position', model, indent);\n }\n return result;\n}\n\n(window as any).dev = {\n\n tree() {\n const app: any = (window as any).app;\n console.log(describe(app.model));\n },\n\n // store a design in local storage under the given name\n store(name: string) {\n if(!name) {\n console.error(`Can't store with name \"${name}\"`);\n return;\n }\n const app: any = (window as any).app;\n const str = localStorage.getItem('CPS_unit_dev_stored_units');\n if(str) {\n const data = JSON.parse(str);\n data[name] = app.model.toJSON();\n localStorage.setItem('CPS_unit_dev_stored_units',\n JSON.stringify(data));\n } else {\n localStorage.setItem('CPS_unit_dev_stored_units',\n JSON.stringify({\n [name]: app.model.toJSON()\n }));\n }\n },\n\n // lists available stored designs\n stored() {\n const str = localStorage.getItem('CPS_unit_dev_stored_units');\n if(str) {\n const data = JSON.parse(str);\n return Array.from(Object.keys(data));\n } else {\n return [];\n }\n },\n\n load(name: string) {\n const app: any = (window as any).app;\n const str = localStorage.getItem('CPS_unit_dev_stored_units');\n if(str) {\n const data = JSON.parse(str);\n if(name in data) {\n app.model = dm.ClosetUnit.fromJSON(data[name]);\n app.refresh();\n } else {\n console.error(`No stored unit named \"${name}\"`);\n }\n } else {\n console.error('No stored units');\n }\n },\n\n edgeBanding() {\n const app: any = (window as any).app;\n app.model.traverse((model: DomainModel) => {\n if(model instanceof dm.Divider || model instanceof dm.ClosetUnit) {\n model.materials[0] = dm.Material.fromJSON({\n \"type\": \"StandardMelamine\",\n \"color\": `${config.colors}/358.png`,\n });\n } else if(model instanceof dm.ParametricPart\n && model.name == 'AdjustableShelf')\n {\n model.materials[0] = dm.Material.fromJSON({\n \"type\": \"StandardMelamine\",\n \"color\": `${config.colors}/358.png`,\n });\n }\n });\n app.commit(null, 'Update divider materials');\n app.refresh();\n },\n\n updateLoopRunning: false,\n\n startUpdateLoop() {\n const app: any = (window as any).app;\n this.updateLoopRunning = true;\n const animate = () => {\n if(this.updateLoopRunning) {\n requestAnimationFrame(animate);\n app.pipeline.update = true;\n console.log('update');\n }\n }\n animate();\n },\n\n stopUpdateLoop() {\n this.updateLoopRunning = false;\n },\n\n async reset(url: string) {\n const\n app: Application = (window as any).app,\n response = await fetch(url),\n data = await response.json(),\n config = dm.ClosetConfig.fromJSON(data);\n\n app.defaults = new DefaultsManager(config.defaults);\n\n app.model.traverse((model: DomainModel) => {\n app.defaults.reset(model);\n });\n app.refresh();\n },\n\n wireframe(object: Object3D = null) {\n const app: Application = (window as any).app;\n utils.wireframe(object == null ? app.object : object);\n app.pipeline.update = true;\n },\n\n animateOpen(amount: number, model: DomainModel) {\n if('open' in model) {\n animateOpen(amount, model as any);\n }\n },\n\n techDoc(obj: Object3D, doorOpacity: number = 1) {\n toTechnicalDocument(obj, false, doorOpacity);\n },\n\n async export(obj: Object3D) {\n const buffer = await toGlbFile(obj);\n utils.saveBuffer(buffer, 'export.glb');\n },\n\n directionalLightHelper(root: Object3D) {\n for(const obj of traverse(root)) {\n if(obj instanceof DirectionalLight) {\n const helper = new DirectionalLightHelper(obj);\n root.add(helper);\n\n if(obj.castShadow) {\n const camera = obj.shadow.camera;\n const helper = new CameraHelper(camera);\n root.add(helper);\n }\n }\n }\n },\n\n swept() {\n const app: Application = (window as any).app;\n\n const profile = new EdgeList();\n profile.move(1, 0);\n profile.move(0, 1);\n profile.arc(-Math.PI/2, Math.PI, 1, 6);\n profile.move(0, 1);\n profile.move(-1, 0);\n// profile.move(0, 1);\n// profile.move(3, 3);\n// profile.move(0, 1);\n// profile.move(-3, 3);\n// profile.move(-1, 0);\n\n app.pipeline.scene.add(profile.toLineSegments());\n\n const plan = new EdgeList();\n plan.move(0, 6);\n plan.move(-12, 0);\n plan.move(0, -6);\n plan.move(-12, 0);\n plan.move(0, 6);\n plan.move(-12, 0);\n plan.move(0, -6);\n\n const planVis = plan.toLineSegments();\n planVis.rotation.x = Math.PI/2;\n app.pipeline.scene.add(planVis);\n\n const sw = new SweptMesh(profile, plan);\n const geo = ThreeJSMesh.toBufferGeometry(sw.generate());\n\n const mesh = new Mesh(\n //geo, new MeshStandardMaterial({transparent: true, opacity: 0.6}));\n geo, new MeshStandardMaterial());\n const wireframe = new LineSegments(\n new WireframeGeometry(geo),\n new LineBasicMaterial(\n {color: 0x808080, transparent: true, opacity: 0.6}));\n\n app.pipeline.scene.add(mesh);\n //app.pipeline.scene.add(wireframe);\n //app.pipeline.scene.add(new VertexNormalsHelper(mesh));\n //app.pipeline.scene.add(new utils.ThreeAxisHelper());\n },\n\n profile() {\n const app: Application = (window as any).app;\n\n const profile = new EdgeList();\n profile.move(0, 12);\n profile.move(3, 0);\n profile.move(0, 3);\n profile.move(-3, 0);\n profile.move(0, 0);\n\n // We want to shear 45 degrees to the right of vertical\n const theta = -Math.PI/4;\n\n const m1 = new Matrix4();\n const m2 = new Matrix4();\n const s = new Matrix4();\n m1.makeShear(0, Math.tan(-theta), 0, 0, 0, 0);\n\n s.makeTranslation(0, 0, 6);\n m2.multiply(s);\n s.makeRotationY(Math.PI/4);\n m2.multiply(s);\n const group = profile.toLineSegments();\n for(let child of group.children) {\n console.log(child);\n if((child as any).geometry instanceof BufferGeometry) {\n const geo = (child as Mesh).geometry\n geo.applyMatrix4(m1);\n geo.applyMatrix4(m2);\n geo.computeBoundingBox();\n }\n }\n\n app.pipeline.scene.add(group);\n app.pipeline.scene.add(profile.toLineSegments());\n app.pipeline.scene.add(new utils.ThreeAxisHelper());\n },\n\n freeview() {\n const app = (window as any).app;\n Application.do('view-3d');\n const tool = app.multitool;\n if(tool) {\n const orbit = tool.orbit;\n orbit.controls.enablePan = true;\n orbit.controls.screenSpacePanning = true;\n orbit.controls.minAzimuthAngle = -Infinity;\n orbit.controls.maxAzimuthAngle = Infinity;\n orbit.controls.minDistance = 0;\n orbit.controls.maxDistance = Infinity;\n }\n },\n\n sortWallsByConnection(walls: dm.Wall[]) {\n utils.shuffle(walls);\n return sortedByConnection(walls)\n },\n\n setupModel(overrides: any) {\n const\n app = (window as any).app,\n data = {\n layout: \"U-Shape\",\n island: false,\n style: \"PE\",\n pull: \"pull1\",\n wall1: 150,\n wall2: 192,\n wall3: 150,\n },\n selectionString = localStorage.getItem('kitchen-tool-selections'),\n selection = JSON.parse(selectionString);\n\n Object.assign(data, selection);\n Object.assign(data, overrides);\n localStorage.setItem('kitchen-tool-selections', JSON.stringify(data));\n\n app.common.setupModel();\n app.refresh();\n },\n\n lookAtWall(wall: WallView, pipeline: RenderPipeline) {\n if(! (pipeline.camera instanceof PerspectiveCamera)) return;\n const\n aspect = pipeline.canvas.width / pipeline.canvas.height,\n camera = pipeline.camera;\n lookAtWall(camera, wall, aspect);\n pipeline.update = true;\n }\n}\n","import Application from '../Application';\n\n/**\n * The tool class is barely a class, it's more of a pattern. Subclasses should\n * override the abstract methods and add whatever additional methods they might\n * need. The pattern for a tool is that its begin method should be called by an\n * event handler. The begin method then sets up any event handlers that are\n * then required. The cancel and end methods should tear down those event\n * handlers. Subclasses might add additional methods such as drag (usually an\n * event listener listening for mouse movenments).\n *\n * Recall that using JavaScript methods as event handlers can cause the method\n * to loose its binding to the `this` keyword; subclasses may want to bind\n * their own methods in their constructor like Tool does with the abstract\n * methods. Subclasses don't have to re-bind those methods, they're done when\n * calling super() in the subclass's constructor.\n */\nexport default abstract class Tool {\n\n /**\n * This constructor is really the raison d'etre for the abstract class: it\n * binds all the abstract methods to this so that implementations get these\n * benefits from calling super();\n */\n constructor() {\n this.enable = this.enable.bind(this);\n this.disable = this.disable.bind(this);\n this.begin = this.begin.bind(this);\n this.cancel = this.cancel.bind(this);\n this.end = this.end.bind(this);\n }\n\n /**\n * Enabling the tool allows interacitons to be started. Side effects of\n * enabling may include attaching the begin method to an event handler.\n */\n abstract enable(): void;\n\n /**\n * Disabling the tool means that it should no longer interact with the\n * user. This is probably accomplished by the implementation removing any\n * relevant event listeners.\n */\n abstract disable(): void;\n\n /**\n * The begin method starts an interaction, e.g. by being called by an event\n * handler.\n */\n abstract begin(event?: Event): void;\n\n /**\n * Any action that ends without changing the state of the app should go\n * through 'cancel' to tear down the state of the tool. At the end of the\n * cancel method, the class should be ready for another call to activate.\n */\n abstract cancel(): void;\n\n /**\n * The end method is very similar to cancel in that it ends the tool's\n * lifecycle, but in addition to resetting the state of the tool, it also\n * asks the app to create a new entry in the command history.\n */\n abstract end(event?: Event): void;\n\n}\n","import {\n\tEventDispatcher,\n\tMOUSE,\n\tQuaternion,\n\tSpherical,\n\tTOUCH,\n\tVector2,\n\tVector3,\n\tPlane,\n\tRay,\n\tMathUtils\n} from 'three';\n\n// OrbitControls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move\n\nconst _changeEvent = { type: 'change' };\nconst _startEvent = { type: 'start' };\nconst _endEvent = { type: 'end' };\nconst _ray = new Ray();\nconst _plane = new Plane();\nconst TILT_LIMIT = Math.cos( 70 * MathUtils.DEG2RAD );\n\nclass OrbitControls extends EventDispatcher {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper();\n\n\t\tthis.object = object;\n\t\tthis.domElement = domElement;\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t\t// Set to false to disable this control\n\t\tthis.enabled = true;\n\n\t\t// \"target\" sets the location of focus, where the object orbits around\n\t\tthis.target = new Vector3();\n\n\t\t// Sets the 3D cursor (similar to Blender), from which the maxTargetRadius takes effect\n\t\tthis.cursor = new Vector3();\n\n\t\t// How far you can dolly in and out ( PerspectiveCamera only )\n\t\tthis.minDistance = 0;\n\t\tthis.maxDistance = Infinity;\n\n\t\t// How far you can zoom in and out ( OrthographicCamera only )\n\t\tthis.minZoom = 0;\n\t\tthis.maxZoom = Infinity;\n\n\t\t// Limit camera target within a spherical area around the cursor\n\t\tthis.minTargetRadius = 0;\n\t\tthis.maxTargetRadius = Infinity;\n\n\t\t// How far you can orbit vertically, upper and lower limits.\n\t\t// Range is 0 to Math.PI radians.\n\t\tthis.minPolarAngle = 0; // radians\n\t\tthis.maxPolarAngle = Math.PI; // radians\n\n\t\t// How far you can orbit horizontally, upper and lower limits.\n\t\t// If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n\t\tthis.minAzimuthAngle = - Infinity; // radians\n\t\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t\t// Set to true to enable damping (inertia)\n\t\t// If damping is enabled, you must call controls.update() in your animation loop\n\t\tthis.enableDamping = false;\n\t\tthis.dampingFactor = 0.05;\n\n\t\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t\t// Set to false to disable zooming\n\t\tthis.enableZoom = true;\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t// Set to false to disable rotating\n\t\tthis.enableRotate = true;\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t// Set to false to disable panning\n\t\tthis.enablePan = true;\n\t\tthis.panSpeed = 1.0;\n\t\tthis.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n\t\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\t\tthis.zoomToCursor = false;\n\n\t\t// Set to true to automatically rotate around the target\n\t\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\t\tthis.autoRotate = false;\n\t\tthis.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n\t\t// The four arrow keys\n\t\tthis.keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' };\n\n\t\t// Mouse buttons\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t// Touch fingers\n\t\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n\t\t// for reset\n\t\tthis.target0 = this.target.clone();\n\t\tthis.position0 = this.object.position.clone();\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t// the target DOM element for key events\n\t\tthis._domElementKeyEvents = null;\n\n\t\t//\n\t\t// public methods\n\t\t//\n\n\t\tthis.getPolarAngle = function () {\n\n\t\t\treturn spherical.phi;\n\n\t\t};\n\n\t\tthis.getAzimuthalAngle = function () {\n\n\t\t\treturn spherical.theta;\n\n\t\t};\n\n\t\tthis.getDistance = function () {\n\n\t\t\treturn this.object.position.distanceTo( this.target );\n\n\t\t};\n\n\t\tthis.listenToKeyEvents = function ( domElement ) {\n\n\t\t\tdomElement.addEventListener( 'keydown', onKeyDown );\n\t\t\tthis._domElementKeyEvents = domElement;\n\n\t\t};\n\n\t\tthis.stopListenToKeyEvents = function () {\n\n\t\t\tthis._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n\t\t\tthis._domElementKeyEvents = null;\n\n\t\t};\n\n\t\tthis.saveState = function () {\n\n\t\t\tscope.target0.copy( scope.target );\n\t\t\tscope.position0.copy( scope.object.position );\n\t\t\tscope.zoom0 = scope.object.zoom;\n\n\t\t};\n\n\t\tthis.reset = function () {\n\n\t\t\tscope.target.copy( scope.target0 );\n\t\t\tscope.object.position.copy( scope.position0 );\n\t\t\tscope.object.zoom = scope.zoom0;\n\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\tscope.update();\n\n\t\t\tstate = STATE.NONE;\n\n\t\t};\n\n\t\t// this method is exposed, but perhaps it would be better if we can make it private...\n\t\tthis.update = function () {\n\n\t\t\tconst offset = new Vector3();\n\n\t\t\t// so camera.up is the orbit axis\n\t\t\tconst quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n\t\t\tconst quatInverse = quat.clone().invert();\n\n\t\t\tconst lastPosition = new Vector3();\n\t\t\tconst lastQuaternion = new Quaternion();\n\t\t\tconst lastTargetPosition = new Vector3();\n\n\t\t\tconst twoPI = 2 * Math.PI;\n\n\t\t\treturn function update( deltaTime = null ) {\n\n\t\t\t\tconst position = scope.object.position;\n\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t\t// angle from z-axis around y-axis\n\t\t\t\tspherical.setFromVector3( offset );\n\n\t\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\t\trotateLeft( getAutoRotationAngle( deltaTime ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scope.enableDamping ) {\n\n\t\t\t\t\tspherical.theta += sphericalDelta.theta * scope.dampingFactor;\n\t\t\t\t\tspherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t\t}\n\n\t\t\t\t// restrict theta to be between desired limits\n\n\t\t\t\tlet min = scope.minAzimuthAngle;\n\t\t\t\tlet max = scope.maxAzimuthAngle;\n\n\t\t\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\t\t\tif ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI;\n\n\t\t\t\t\tif ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI;\n\n\t\t\t\t\tif ( min <= max ) {\n\n\t\t\t\t\t\tspherical.theta = Math.max( min, Math.min( max, spherical.theta ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tspherical.theta = ( spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\t\t\tMath.max( min, spherical.theta ) :\n\t\t\t\t\t\t\tMath.min( max, spherical.theta );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// restrict phi to be between desired limits\n\t\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\t\tspherical.makeSafe();\n\n\n\t\t\t\t// move target to panned location\n\n\t\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\t\tscope.target.addScaledVector( panOffset, scope.dampingFactor );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tscope.target.add( panOffset );\n\n\t\t\t\t}\n\n\t\t\t\t// Limit the target distance from the cursor to create a sphere around the center of interest\n\t\t\t\tscope.target.sub( scope.cursor );\n\t\t\t\tscope.target.clampLength( scope.minTargetRadius, scope.maxTargetRadius );\n\t\t\t\tscope.target.add( scope.cursor );\n\n\t\t\t\tlet zoomChanged = false;\n\t\t\t\t// adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera\n\t\t\t\t// we adjust zoom later in these cases\n\t\t\t\tif ( scope.zoomToCursor && performCursorZoom || scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tspherical.radius = clampDistance( spherical.radius );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst prevRadius = spherical.radius;\n\t\t\t\t\tspherical.radius = clampDistance( spherical.radius * scale );\n\t\t\t\t\tzoomChanged = prevRadius != spherical.radius;\n\n\t\t\t\t}\n\n\t\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t\t}\n\n\t\t\t\t// adjust camera position\n\t\t\t\tif ( scope.zoomToCursor && performCursorZoom ) {\n\n\t\t\t\t\tlet newRadius = null;\n\t\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t\t// move the camera down the pointer ray\n\t\t\t\t\t\t// this method avoids floating point error\n\t\t\t\t\t\tconst prevRadius = offset.length();\n\t\t\t\t\t\tnewRadius = clampDistance( prevRadius * scale );\n\n\t\t\t\t\t\tconst radiusDelta = prevRadius - newRadius;\n\t\t\t\t\t\tscope.object.position.addScaledVector( dollyDirection, radiusDelta );\n\t\t\t\t\t\tscope.object.updateMatrixWorld();\n\n\t\t\t\t\t\tzoomChanged = !! radiusDelta;\n\n\t\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\t\t// adjust the ortho camera position based on zoom changes\n\t\t\t\t\t\tconst mouseBefore = new Vector3( mouse.x, mouse.y, 0 );\n\t\t\t\t\t\tmouseBefore.unproject( scope.object );\n\n\t\t\t\t\t\tconst prevZoom = scope.object.zoom;\n\t\t\t\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );\n\t\t\t\t\t\tscope.object.updateProjectionMatrix();\n\n\t\t\t\t\t\tzoomChanged = prevZoom !== scope.object.zoom;\n\n\t\t\t\t\t\tconst mouseAfter = new Vector3( mouse.x, mouse.y, 0 );\n\t\t\t\t\t\tmouseAfter.unproject( scope.object );\n\n\t\t\t\t\t\tscope.object.position.sub( mouseAfter ).add( mouseBefore );\n\t\t\t\t\t\tscope.object.updateMatrixWorld();\n\n\t\t\t\t\t\tnewRadius = offset.length();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.' );\n\t\t\t\t\t\tscope.zoomToCursor = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// handle the placement of the target\n\t\t\t\t\tif ( newRadius !== null ) {\n\n\t\t\t\t\t\tif ( this.screenSpacePanning ) {\n\n\t\t\t\t\t\t\t// position the orbit target in front of the new camera position\n\t\t\t\t\t\t\tscope.target.set( 0, 0, - 1 )\n\t\t\t\t\t\t\t\t.transformDirection( scope.object.matrix )\n\t\t\t\t\t\t\t\t.multiplyScalar( newRadius )\n\t\t\t\t\t\t\t\t.add( scope.object.position );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// get the ray and translation plane to compute target\n\t\t\t\t\t\t\t_ray.origin.copy( scope.object.position );\n\t\t\t\t\t\t\t_ray.direction.set( 0, 0, - 1 ).transformDirection( scope.object.matrix );\n\n\t\t\t\t\t\t\t// if the camera is 20 degrees above the horizon then don't adjust the focus target to avoid\n\t\t\t\t\t\t\t// extremely large values\n\t\t\t\t\t\t\tif ( Math.abs( scope.object.up.dot( _ray.direction ) ) < TILT_LIMIT ) {\n\n\t\t\t\t\t\t\t\tobject.lookAt( scope.target );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t_plane.setFromNormalAndCoplanarPoint( scope.object.up, scope.target );\n\t\t\t\t\t\t\t\t_ray.intersectPlane( _plane, scope.target );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tconst prevZoom = scope.object.zoom;\n\t\t\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / scale ) );\n\n\t\t\t\t\tif ( prevZoom !== scope.object.zoom ) {\n\n\t\t\t\t\t\tscope.object.updateProjectionMatrix();\n\t\t\t\t\t\tzoomChanged = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscale = 1;\n\t\t\t\tperformCursorZoom = false;\n\n\t\t\t\t// update condition is:\n\t\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\t\tif ( zoomChanged ||\n\t\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ||\n\t\t\t\t\tlastTargetPosition.distanceToSquared( scope.target ) > EPS ) {\n\n\t\t\t\t\tscope.dispatchEvent( _changeEvent );\n\n\t\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\t\tlastTargetPosition.copy( scope.target );\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t};\n\n\t\t}();\n\n\t\tthis.dispose = function () {\n\n\t\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu );\n\n\t\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\t\tscope.domElement.removeEventListener( 'pointercancel', onPointerUp );\n\t\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel );\n\n\t\t\tscope.domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t\tscope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\t\t\tconst document = scope.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\t\tdocument.removeEventListener( 'keydown', interceptControlDown, { capture: true } );\n\n\t\t\tif ( scope._domElementKeyEvents !== null ) {\n\n\t\t\t\tscope._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n\t\t\t\tscope._domElementKeyEvents = null;\n\n\t\t\t}\n\n\t\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t\t};\n\n\t\t//\n\t\t// internals\n\t\t//\n\n\t\tconst scope = this;\n\n\t\tconst STATE = {\n\t\t\tNONE: - 1,\n\t\t\tROTATE: 0,\n\t\t\tDOLLY: 1,\n\t\t\tPAN: 2,\n\t\t\tTOUCH_ROTATE: 3,\n\t\t\tTOUCH_PAN: 4,\n\t\t\tTOUCH_DOLLY_PAN: 5,\n\t\t\tTOUCH_DOLLY_ROTATE: 6\n\t\t};\n\n\t\tlet state = STATE.NONE;\n\n\t\tconst EPS = 0.000001;\n\n\t\t// current position in spherical coordinates\n\t\tconst spherical = new Spherical();\n\t\tconst sphericalDelta = new Spherical();\n\n\t\tlet scale = 1;\n\t\tconst panOffset = new Vector3();\n\n\t\tconst rotateStart = new Vector2();\n\t\tconst rotateEnd = new Vector2();\n\t\tconst rotateDelta = new Vector2();\n\n\t\tconst panStart = new Vector2();\n\t\tconst panEnd = new Vector2();\n\t\tconst panDelta = new Vector2();\n\n\t\tconst dollyStart = new Vector2();\n\t\tconst dollyEnd = new Vector2();\n\t\tconst dollyDelta = new Vector2();\n\n\t\tconst dollyDirection = new Vector3();\n\t\tconst mouse = new Vector2();\n\t\tlet performCursorZoom = false;\n\n\t\tconst pointers = [];\n\t\tconst pointerPositions = {};\n\n\t\tlet controlActive = false;\n\n\t\tfunction getAutoRotationAngle( deltaTime ) {\n\n\t\t\tif ( deltaTime !== null ) {\n\n\t\t\t\treturn ( 2 * Math.PI / 60 * scope.autoRotateSpeed ) * deltaTime;\n\n\t\t\t} else {\n\n\t\t\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getZoomScale( delta ) {\n\n\t\t\tconst normalizedDelta = Math.abs( delta * 0.01 );\n\t\t\treturn Math.pow( 0.95, scope.zoomSpeed * normalizedDelta );\n\n\t\t}\n\n\t\tfunction rotateLeft( angle ) {\n\n\t\t\tsphericalDelta.theta -= angle;\n\n\t\t}\n\n\t\tfunction rotateUp( angle ) {\n\n\t\t\tsphericalDelta.phi -= angle;\n\n\t\t}\n\n\t\tconst panLeft = function () {\n\n\t\t\tconst v = new Vector3();\n\n\t\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\t\tv.multiplyScalar( - distance );\n\n\t\t\t\tpanOffset.add( v );\n\n\t\t\t};\n\n\t\t}();\n\n\t\tconst panUp = function () {\n\n\t\t\tconst v = new Vector3();\n\n\t\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t\t}\n\n\t\t\t\tv.multiplyScalar( distance );\n\n\t\t\t\tpanOffset.add( v );\n\n\t\t\t};\n\n\t\t}();\n\n\t\t// deltaX and deltaY are in pixels; right and down are positive\n\t\tconst pan = function () {\n\n\t\t\tconst offset = new Vector3();\n\n\t\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\t\tconst element = scope.domElement;\n\n\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t// perspective\n\t\t\t\t\tconst position = scope.object.position;\n\t\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\t\tlet targetDistance = offset.length();\n\n\t\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\t// orthographic\n\t\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\t\tscope.enablePan = false;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}();\n\n\t\tfunction dollyOut( dollyScale ) {\n\n\t\t\tif ( scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscale /= dollyScale;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\t\tscope.enableZoom = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction dollyIn( dollyScale ) {\n\n\t\t\tif ( scope.object.isPerspectiveCamera || scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscale *= dollyScale;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\t\tscope.enableZoom = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction updateZoomParameters( x, y ) {\n\n\t\t\tif ( ! scope.zoomToCursor ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tperformCursorZoom = true;\n\n\t\t\tconst rect = scope.domElement.getBoundingClientRect();\n\t\t\tconst dx = x - rect.left;\n\t\t\tconst dy = y - rect.top;\n\t\t\tconst w = rect.width;\n\t\t\tconst h = rect.height;\n\n\t\t\tmouse.x = ( dx / w ) * 2 - 1;\n\t\t\tmouse.y = - ( dy / h ) * 2 + 1;\n\n\t\t\tdollyDirection.set( mouse.x, mouse.y, 1 ).unproject( scope.object ).sub( scope.object.position ).normalize();\n\n\t\t}\n\n\t\tfunction clampDistance( dist ) {\n\n\t\t\treturn Math.max( scope.minDistance, Math.min( scope.maxDistance, dist ) );\n\n\t\t}\n\n\t\t//\n\t\t// event callbacks - update the object state\n\t\t//\n\n\t\tfunction handleMouseDownRotate( event ) {\n\n\t\t\trotateStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseDownDolly( event ) {\n\n\t\t\tupdateZoomParameters( event.clientX, event.clientX );\n\t\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseDownPan( event ) {\n\n\t\t\tpanStart.set( event.clientX, event.clientY );\n\n\t\t}\n\n\t\tfunction handleMouseMoveRotate( event ) {\n\n\t\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\t\tconst element = scope.domElement;\n\n\t\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\t\trotateStart.copy( rotateEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseMoveDolly( event ) {\n\n\t\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\t\tdollyOut( getZoomScale( dollyDelta.y ) );\n\n\t\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\t\tdollyIn( getZoomScale( dollyDelta.y ) );\n\n\t\t\t}\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseMovePan( event ) {\n\n\t\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleMouseWheel( event ) {\n\n\t\t\tupdateZoomParameters( event.clientX, event.clientY );\n\n\t\t\tif ( event.deltaY < 0 ) {\n\n\t\t\t\tdollyIn( getZoomScale( event.deltaY ) );\n\n\t\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\t\tdollyOut( getZoomScale( event.deltaY ) );\n\n\t\t\t}\n\n\t\t\tscope.update();\n\n\t\t}\n\n\t\tfunction handleKeyDown( event ) {\n\n\t\t\tlet needsUpdate = false;\n\n\t\t\tswitch ( event.code ) {\n\n\t\t\t\tcase scope.keys.UP:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\trotateUp( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpan( 0, scope.keyPanSpeed );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.BOTTOM:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\trotateUp( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.LEFT:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\trotateLeft( 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase scope.keys.RIGHT:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\trotateLeft( - 2 * Math.PI * scope.rotateSpeed / scope.domElement.clientHeight );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpan( - scope.keyPanSpeed, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tneedsUpdate = true;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( needsUpdate ) {\n\n\t\t\t\t// prevent the browser from scrolling on cursor keys\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tscope.update();\n\n\t\t\t}\n\n\n\t\t}\n\n\t\tfunction handleTouchStartRotate( event ) {\n\n\t\t\tif ( pointers.length === 1 ) {\n\n\t\t\t\trotateStart.set( event.pageX, event.pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\t\trotateStart.set( x, y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction handleTouchStartPan( event ) {\n\n\t\t\tif ( pointers.length === 1 ) {\n\n\t\t\t\tpanStart.set( event.pageX, event.pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\t\tpanStart.set( x, y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction handleTouchStartDolly( event ) {\n\n\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\tconst dx = event.pageX - position.x;\n\t\t\tconst dy = event.pageY - position.y;\n\n\t\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyStart.set( 0, distance );\n\n\t\t}\n\n\t\tfunction handleTouchStartDollyPan( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\t\tif ( scope.enablePan ) handleTouchStartPan( event );\n\n\t\t}\n\n\t\tfunction handleTouchStartDollyRotate( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\t\tif ( scope.enableRotate ) handleTouchStartRotate( event );\n\n\t\t}\n\n\t\tfunction handleTouchMoveRotate( event ) {\n\n\t\t\tif ( pointers.length == 1 ) {\n\n\t\t\t\trotateEnd.set( event.pageX, event.pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\t\trotateEnd.set( x, y );\n\n\t\t\t}\n\n\t\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\t\tconst element = scope.domElement;\n\n\t\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\t\trotateStart.copy( rotateEnd );\n\n\t\t}\n\n\t\tfunction handleTouchMovePan( event ) {\n\n\t\t\tif ( pointers.length === 1 ) {\n\n\t\t\t\tpanEnd.set( event.pageX, event.pageY );\n\n\t\t\t} else {\n\n\t\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\t\tpanEnd.set( x, y );\n\n\t\t\t}\n\n\t\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\t\tpan( panDelta.x, panDelta.y );\n\n\t\t\tpanStart.copy( panEnd );\n\n\t\t}\n\n\t\tfunction handleTouchMoveDolly( event ) {\n\n\t\t\tconst position = getSecondPointerPosition( event );\n\n\t\t\tconst dx = event.pageX - position.x;\n\t\t\tconst dy = event.pageY - position.y;\n\n\t\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tdollyEnd.set( 0, distance );\n\n\t\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\t\tdollyOut( dollyDelta.y );\n\n\t\t\tdollyStart.copy( dollyEnd );\n\n\t\t\tconst centerX = ( event.pageX + position.x ) * 0.5;\n\t\t\tconst centerY = ( event.pageY + position.y ) * 0.5;\n\n\t\t\tupdateZoomParameters( centerX, centerY );\n\n\t\t}\n\n\t\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\t\tif ( scope.enablePan ) handleTouchMovePan( event );\n\n\t\t}\n\n\t\tfunction handleTouchMoveDollyRotate( event ) {\n\n\t\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\t\tif ( scope.enableRotate ) handleTouchMoveRotate( event );\n\n\t\t}\n\n\t\t//\n\t\t// event handlers - FSM: listen for events and reset state\n\t\t//\n\n\t\tfunction onPointerDown( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( pointers.length === 0 ) {\n\n\t\t\t\tscope.domElement.setPointerCapture( event.pointerId );\n\n\t\t\t\tscope.domElement.addEventListener( 'pointermove', onPointerMove );\n\t\t\t\tscope.domElement.addEventListener( 'pointerup', onPointerUp );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( isTrackingPointer( event ) ) return;\n\n\t\t\t//\n\n\t\t\taddPointer( event );\n\n\t\t\tif ( event.pointerType === 'touch' ) {\n\n\t\t\t\tonTouchStart( event );\n\n\t\t\t} else {\n\n\t\t\t\tonMouseDown( event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerMove( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tif ( event.pointerType === 'touch' ) {\n\n\t\t\t\tonTouchMove( event );\n\n\t\t\t} else {\n\n\t\t\t\tonMouseMove( event );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onPointerUp( event ) {\n\n\t\t\tremovePointer( event );\n\n\t\t\tswitch ( pointers.length ) {\n\n\t\t\t\tcase 0:\n\n\t\t\t\t\tscope.domElement.releasePointerCapture( event.pointerId );\n\n\t\t\t\t\tscope.domElement.removeEventListener( 'pointermove', onPointerMove );\n\t\t\t\t\tscope.domElement.removeEventListener( 'pointerup', onPointerUp );\n\n\t\t\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\n\t\t\t\t\tconst pointerId = pointers[ 0 ];\n\t\t\t\t\tconst position = pointerPositions[ pointerId ];\n\n\t\t\t\t\t// minimal placeholder event - allows state correction on pointer-up\n\t\t\t\t\tonTouchStart( { pointerId: pointerId, pageX: position.x, pageY: position.y } );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseDown( event ) {\n\n\t\t\tlet mouseAction;\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase 0:\n\n\t\t\t\t\tmouseAction = scope.mouseButtons.LEFT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\n\t\t\t\t\tmouseAction = scope.mouseButtons.MIDDLE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\n\t\t\t\t\tmouseAction = scope.mouseButtons.RIGHT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tmouseAction = - 1;\n\n\t\t\t}\n\n\t\t\tswitch ( mouseAction ) {\n\n\t\t\t\tcase MOUSE.DOLLY:\n\n\t\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MOUSE.ROTATE:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MOUSE.PAN:\n\n\t\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t\tif ( state !== STATE.NONE ) {\n\n\t\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseMove( event ) {\n\n\t\t\tswitch ( state ) {\n\n\t\t\t\tcase STATE.ROTATE:\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.DOLLY:\n\n\t\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.PAN:\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onMouseWheel( event ) {\n\n\t\t\tif ( scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t\thandleMouseWheel( customWheelEvent( event ) );\n\n\t\t\tscope.dispatchEvent( _endEvent );\n\n\t\t}\n\n\t\tfunction customWheelEvent( event ) {\n\n\t\t\tconst mode = event.deltaMode;\n\n\t\t\t// minimal wheel event altered to meet delta-zoom demand\n\t\t\tconst newEvent = {\n\t\t\t\tclientX: event.clientX,\n\t\t\t\tclientY: event.clientY,\n\t\t\t\tdeltaY: event.deltaY,\n\t\t\t};\n\n\t\t\tswitch ( mode ) {\n\n\t\t\t\tcase 1: // LINE_MODE\n\t\t\t\t\tnewEvent.deltaY *= 16;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2: // PAGE_MODE\n\t\t\t\t\tnewEvent.deltaY *= 100;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t// detect if event was triggered by pinching\n\t\t\tif ( event.ctrlKey && ! controlActive ) {\n\n\t\t\t\tnewEvent.deltaY *= 10;\n\n\t\t\t}\n\n\t\t\treturn newEvent;\n\n\t\t}\n\n\t\tfunction interceptControlDown( event ) {\n\n\t\t\tif ( event.key === 'Control' ) {\n\n\t\t\t\tcontrolActive = true;\n\n\n\t\t\t\tconst document = scope.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\t\t\tdocument.addEventListener( 'keyup', interceptControlUp, { passive: true, capture: true } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction interceptControlUp( event ) {\n\n\t\t\tif ( event.key === 'Control' ) {\n\n\t\t\t\tcontrolActive = false;\n\n\n\t\t\t\tconst document = scope.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\t\t\tdocument.removeEventListener( 'keyup', interceptControlUp, { passive: true, capture: true } );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onKeyDown( event ) {\n\n\t\t\tif ( scope.enabled === false || scope.enablePan === false ) return;\n\n\t\t\thandleKeyDown( event );\n\n\t\t}\n\n\t\tfunction onTouchStart( event ) {\n\n\t\t\ttrackPointer( event );\n\n\t\t\tswitch ( pointers.length ) {\n\n\t\t\t\tcase 1:\n\n\t\t\t\t\tswitch ( scope.touches.ONE ) {\n\n\t\t\t\t\t\tcase TOUCH.ROTATE:\n\n\t\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TOUCH.PAN:\n\n\t\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartPan( event );\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\n\t\t\t\t\tswitch ( scope.touches.TWO ) {\n\n\t\t\t\t\t\tcase TOUCH.DOLLY_PAN:\n\n\t\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartDollyPan( event );\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\t\t\thandleTouchStartDollyRotate( event );\n\n\t\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t\tif ( state !== STATE.NONE ) {\n\n\t\t\t\tscope.dispatchEvent( _startEvent );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onTouchMove( event ) {\n\n\t\t\ttrackPointer( event );\n\n\t\t\tswitch ( state ) {\n\n\t\t\t\tcase STATE.TOUCH_ROTATE:\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_PAN:\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleTouchMovePan( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_DOLLY_PAN:\n\n\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleTouchMoveDollyRotate( event );\n\n\t\t\t\t\tscope.update();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction onContextMenu( event ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\n\t\t\tevent.preventDefault();\n\n\t\t}\n\n\t\tfunction addPointer( event ) {\n\n\t\t\tpointers.push( event.pointerId );\n\n\t\t}\n\n\t\tfunction removePointer( event ) {\n\n\t\t\tdelete pointerPositions[ event.pointerId ];\n\n\t\t\tfor ( let i = 0; i < pointers.length; i ++ ) {\n\n\t\t\t\tif ( pointers[ i ] == event.pointerId ) {\n\n\t\t\t\t\tpointers.splice( i, 1 );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction isTrackingPointer( event ) {\n\n\t\t\tfor ( let i = 0; i < pointers.length; i ++ ) {\n\n\t\t\t\tif ( pointers[ i ] == event.pointerId ) return true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tfunction trackPointer( event ) {\n\n\t\t\tlet position = pointerPositions[ event.pointerId ];\n\n\t\t\tif ( position === undefined ) {\n\n\t\t\t\tposition = new Vector2();\n\t\t\t\tpointerPositions[ event.pointerId ] = position;\n\n\t\t\t}\n\n\t\t\tposition.set( event.pageX, event.pageY );\n\n\t\t}\n\n\t\tfunction getSecondPointerPosition( event ) {\n\n\t\t\tconst pointerId = ( event.pointerId === pointers[ 0 ] ) ? pointers[ 1 ] : pointers[ 0 ];\n\n\t\t\treturn pointerPositions[ pointerId ];\n\n\t\t}\n\n\t\t//\n\n\t\tscope.domElement.addEventListener( 'contextmenu', onContextMenu );\n\n\t\tscope.domElement.addEventListener( 'pointerdown', onPointerDown );\n\t\tscope.domElement.addEventListener( 'pointercancel', onPointerUp );\n\t\tscope.domElement.addEventListener( 'wheel', onMouseWheel, { passive: false } );\n\n\t\tconst document = scope.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\tdocument.addEventListener( 'keydown', interceptControlDown, { passive: true, capture: true } );\n\n\t\t// force an update at start\n\n\t\tthis.update();\n\n\t}\n\n}\n\nexport { OrbitControls };\n","import Application from '../Application';\nimport Tool from './Tool';\nimport logging from '../logging';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';\nimport { Vector3 } from 'three';\n\nconst log = logging('tools');\n\n/**\n * This orbit tool wraps the three.js OrbitControls.\n */\nexport default class OrbitTool extends Tool {\n\n target: Vector3 = new Vector3(12.75, 42, 0);\n\n private app: Application;\n controls: OrbitControls;\n\n constructor(app: Application) {\n super();\n\n this.app = app;\n\n this.controls = new OrbitControls(\n app.pipeline.camera, app.pipeline.canvas);\n\n // Always remain centered on the target by disabling panning\n this.controls.enablePan = false;\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.25;\n this.controls.screenSpacePanning = false;\n this.controls.minDistance = 24;\n this.controls.maxDistance = 90;\n this.controls.minAzimuthAngle = -Math.PI/2;\n this.controls.maxAzimuthAngle = Math.PI/2;\n this.controls.target = this.target;\n this.controls.enabled = true;\n\n this.controls.update();\n\n this.update = this.update.bind(this);\n this.change = this.change.bind(this);\n }\n\n enable(): void {\n log.debug('OrbitTool.enable()');\n this.controls.enabled = true;\n this.controls.object = this.app.pipeline.camera;\n // remove a listener fist to avoid double registration\n this.app.pipeline.canvas.removeEventListener(\n 'pointerdown', this.begin);\n this.app.pipeline.canvas.addEventListener('pointerdown', this.begin);\n\n this.app.pipeline.canvas.removeEventListener('wheel', this.change);\n this.app.pipeline.canvas.addEventListener('wheel', this.change);\n\n this.update();\n }\n\n disable(): void {\n log.debug('OrbitTool.disable()');\n this.controls.enabled = false;\n this.app.pipeline.canvas.removeEventListener(\n 'pointerdown', this.begin);\n this.app.pipeline.canvas.removeEventListener('wheel', this.change);\n }\n\n // We expect to be activated by a pointerdown event\n begin(): void {\n log.debug('OrbitTool.begin()');\n // Every time we activate, we update the controls' reference to the\n // camera since the pipeline's camera object could change\n this.controls.object = this.app.pipeline.camera;\n this.controls.addEventListener('change', this.change);\n this.app.pipeline.on('before-render', this.update);\n\n window.addEventListener('pointerup', this.end, {once: true});\n }\n\n cancel(): void {\n log.debug('OrbitTool.cancel()');\n this.controls.removeEventListener('change', this.change);\n this.app.pipeline.off('before-render', this.update);\n }\n\n end(): void {\n log.debug('OrbitTool.end()');\n this.cancel();\n }\n\n /**\n * Called before render to update the controls\n */\n private update(): void {\n //log.debug('OrbitTool.update()');\n if(this.controls.enabled) this.controls.update();\n }\n\n /**\n * Called by the orbit controls whenever an update results in a change in\n * the camera position.\n */\n private change(): void {\n //log.debug('OrbitTool.change()');\n this.app.pipeline.update = true;\n }\n}\n","import EventDispatcher from './EventDispatcher';\nimport logging from './logging';\nimport {\n Camera,\n ColorManagement,\n LinearSRGBColorSpace,\n Material,\n MeshBasicMaterial,\n NeutralToneMapping,\n OrthographicCamera,\n PCFSoftShadowMap,\n PerspectiveCamera,\n Scene,\n SRGBColorSpace,\n WebGLRenderer,\n} from 'three';\nimport { gammaCorrect } from './utils/gammaCorrect';\n\nconst log = logging('render');\n\n\nexport const highlights: Record = {\n selection: new MeshBasicMaterial({\n color: gammaCorrect(0x14a79d),\n // opacity: 0.5,\n // transparent: true,\n }),\n target: new MeshBasicMaterial({\n color: 0x000000,\n opacity: 0.25,\n transparent: true,\n }),\n\n error: new MeshBasicMaterial({\n color: 0xF91800,\n opacity: 0.25,\n transparent: true,\n }),\n};\n\n/**\n * A render pipeline can start and stop rendering or render a single frame. The\n * actual rendering is handled by a subclass implementation that adds rendering\n * capability, namely the RenderPipeline implementation below.\n *\n * If we ever need it, the pipeline is the appropriate thing to ask for an\n * image of whatever's on the current render target. This is because the still\n * needs to be grabbed just after rendering has completed, otherwise you might\n * end up with a blank still.\n */\nexport default abstract class RenderPipeline extends EventDispatcher {\n renderer: WebGLRenderer;\n scene: Scene;\n abstract get camera(): Camera;\n get canvas(): HTMLCanvasElement { return this.renderer?.domElement; }\n\n /**\n * When in the running state, the render pipeline constantly checking the\n * update flag on each frame. If the update flag is true then the pipeline\n * actually renders the frame, otherwise it does nothing and checks again\n * on the next frame. The running state can be changed with the start and\n * stop methods.\n */\n update = true;\n\n /**\n * A flag indicating whether the pipeline is currently running. When it is\n * running (after start() is called), it checks the update flag on each\n * frame and renders only when there has been an update since the last\n * render. When it is stopped (initially and after stop() is called), the\n * update flag is not even checked.\n */\n private running: boolean = false;\n\n constructor(renderer?: WebGLRenderer, scene?: Scene) {\n super();\n\n ColorManagement.enabled = true;\n\n if(renderer) {\n this.renderer = renderer;\n } else {\n this.renderer = new WebGLRenderer({\n \"antialias\": true,\n \"alpha\": true,\n });\n this.renderer.shadowMap.enabled = true;\n this.renderer.shadowMap.type = PCFSoftShadowMap;\n }\n this.renderer.autoClear = false;\n\n this.renderer.outputColorSpace = SRGBColorSpace;\n this.renderer.toneMapping = NeutralToneMapping;\n\n if(scene) {\n this.scene = scene;\n } else {\n this.scene = new Scene();\n }\n\n this.animate = this.animate.bind(this);\n this.resize = this.resize.bind(this);\n }\n\n /**\n * Begin rendering. Note that even while the pipeline is started, it still\n * checks the `update` property on every frame to decide whether or not to\n * render.\n */\n start(): void {\n this.running = true;\n window.addEventListener(\"resize\", this.resize);\n window.dispatchEvent(new Event('resize'));\n window.requestAnimationFrame(this.animate);\n }\n\n /**\n * Stops the rendering loop so that it no longer checks the \n */\n stop(): void {\n this.running = false;\n window.removeEventListener(\"resize\", this.resize);\n }\n\n /*\n * This is a private function that checks the this.continue flag and then\n * recursively calls itself if we're still running.\n */\n private animate() {\n if(this.running) {\n window.requestAnimationFrame(this.animate);\n if(this.update) {\n this.trigger('before-render');\n\n // Render the base scene as normal\n this.camera.layers.mask = 0b1111;\n this.renderer.clear();\n this.renderer.render(this.scene, this.camera);\n\n // Render the selected objects (thing that is currently being\n // operated upon)\n this.camera.layers.mask = 0b0010;\n this.scene.overrideMaterial = highlights.selection;\n this.renderer.render(this.scene, this.camera);\n\n // Render the target objects (thing that will be affected)\n this.camera.layers.mask = 0b0100;\n this.scene.overrideMaterial = highlights.target;\n this.renderer.render(this.scene, this.camera);\n\n // Render the error objects (thing that has an error)\n this.camera.layers.mask = 0b1000;\n this.scene.overrideMaterial = highlights.error;\n this.renderer.render(this.scene, this.camera);\n\n\n this.scene.overrideMaterial = null;\n\n this.update = false;\n this.trigger('after-render');\n }\n }\n }\n\n /**\n * Implementation must handle window resize events with this method.\n */\n protected abstract resize(): void;\n}\n\nexport class DummyRenderPipeline extends RenderPipeline {\n\n get camera(): Camera {\n throw new Error('Method not implemented.');\n }\n\n start() {\n // do nothing\n }\n\n stop() {\n // do nothing\n }\n\n protected resize(): void {\n // do nothing\n }\n}\n\n/**\n * A toggleable render pipeline that has either an orthographic or perspective\n * camera.\n */\nexport class ToggleRenderPipeline extends RenderPipeline {\n private ortho: OrthoRenderPipeline;\n private perspective: PerspectiveRenderPipeline;\n private state: \"ortho\" | \"perspective\" = \"ortho\";\n\n constructor(renderer?: WebGLRenderer, scene?: Scene) {\n super(renderer, scene);\n\n this.ortho = new OrthoRenderPipeline(this.renderer, this.scene);\n this.perspective = new PerspectiveRenderPipeline(this.renderer, this.scene);\n }\n\n /**\n * Toggles between orthographic and perspective views.\n * @param which a string either \"ortho\" or \"perspective\"\n */\n view(which: \"ortho\" | \"perspective\") {\n this.state = which;\n this.update = true;\n }\n\n get camera() {\n switch(this.state) {\n case \"ortho\":\n return this.ortho.camera;\n case \"perspective\":\n return this.perspective.camera;\n default:\n log.error(`Unsupported view specification '${this.state}'`);\n }\n }\n\n resize() {\n this.update = true;\n this.ortho.resize();\n this.perspective.resize();\n }\n\n}\n\nexport class OrthoRenderPipeline extends RenderPipeline {\n\n private ortho: OrthographicCamera;\n\n constructor(renderer?: WebGLRenderer, scene?: Scene) {\n super(renderer, scene);\n\n this.ortho = new OrthographicCamera();\n this.ortho.near = 0.1;\n this.ortho.far = 1000;\n // Probably want to set this dynamically based on the dimensions of\n // the unit, but this is the midpoint along X (24\" + 2*0.75\" side\n // panels), halfway up the height of the unit, and the 120 units in Z\n // is arbitrary for the orthographic camera.\n this.ortho.position.set(12.75, 42, 120);\n\n this.scene.add(this.ortho);\n\n }\n\n get camera() {\n return this.ortho;\n }\n\n resize() {\n this.update = true;\n const\n width = this.canvas.clientWidth,\n height = this.canvas.clientHeight,\n aspect = width/height;\n\n // Sets the size without updating the CSS style with the size.\n // Effectively this changes the pixel dimensions of the output to\n // match the screen size of the canvas.\n this.renderer.setSize(width, height, false);\n\n // The 50 is approximate here, may want to scale it to the height\n // of the unit.\n this.ortho.left = -aspect*50;\n this.ortho.right = aspect*50;\n this.ortho.top = 50;\n this.ortho.bottom = -50;\n this.ortho.updateProjectionMatrix();\n }\n\n}\n\n\nexport class PerspectiveRenderPipeline extends RenderPipeline {\n\n private perspective: PerspectiveCamera;\n\n constructor(renderer?: WebGLRenderer, scene?: Scene) {\n super(renderer, scene);\n\n this.perspective = new PerspectiveCamera(75, 1.0, 0.1, 1000);\n this.perspective.position.set(12.75, 42, 75);\n this.scene.add(this.perspective);\n }\n\n get camera() {\n return this.perspective;\n }\n\n resize() {\n this.update = true;\n const\n width = this.canvas.clientWidth,\n height = this.canvas.clientHeight,\n aspect = width/height;\n\n // Sets the size without updating the CSS style with the size.\n // Effectively this changes the pixel dimensions of the output to\n // match the screen size of the canvas.\n this.renderer.setSize(width, height, false);\n\n // Note that you still have to run these methods on the camera or\n // the output will be distorted:\n this.perspective.aspect = aspect;\n this.perspective.updateProjectionMatrix();\n }\n}\n\n","/**\n * To build this file, run `npx rollup -c rollup-transitional.config.js` in the\n * root directory. This will output test/transitional/cps.js. Then, run\n * `build -t` to copy the build products into the build folder. Run\n * `python3 -m http.server 8000` in the build folder to view the results in\n * your browser by visiting http://localhost:8000/transitional.html.\n *\n * A slow but workable one-liner: `find test/transitional/ -type f | entr -s \"npx rollup -c rollup-transitional.config.js && ./build.sh -t\"`\n */\nexport * as domain from '../../domain';\nexport * as IIID from '../../IIID';\n\n// Note that here we're exporting the AssetManager instance, which is the\n// default export from the assets module.\nimport _assets from '../../assets';\nexport const assets = _assets;\n\nimport * as utils_classic from '../../utils';\nimport animateOpen from '../../utils/animateOpen';\nimport createTechDrawingLabel from '../../utils/createTechDrawingLabel';\nimport directionalPosition from '../../utils/directionalPosition';\nimport gammaCorrect from '../../utils/gammaCorrect';\nimport lookAtWall from '../../utils/lookAtWall';\nimport makeKitchenLights from '../../utils/makeKitchenLights';\nimport makeMainLights from '../../utils/makeMainLights';\nimport optimizeDirectionalShadow from '../../utils/optimizeDirectionalShadow';\nimport toTechnicalDocument from '../../utils/toTechnicalDocument';\nimport { rouler } from '../../utils/rouler';\nexport const utils = {\n ...utils_classic,\n animateOpen,\n createTechDrawingLabel,\n directionalPosition,\n gammaCorrect,\n lookAtWall,\n makeKitchenLights,\n makeMainLights,\n optimizeDirectionalShadow,\n rouler,\n toTechnicalDocument,\n}\n\nimport * as THREE_CLASSIC from 'three';\nimport { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\nimport { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter';\nimport { OBJExporter } from 'three/examples/jsm/exporters/OBJExporter';\nimport { FontLoader } from 'three/examples/jsm/loaders/FontLoader.js';\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry';\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils';\nexport const THREE = {\n ... THREE_CLASSIC,\n BufferGeometryUtils,\n GLTFExporter,\n GLTFLoader,\n OBJExporter,\n OBJLoader,\n FontLoader,\n TextGeometry,\n};\n\nimport ClosetUnitView from '../../views/ClosetUnitView';\nimport CubbyView from '../../views/CubbyView';\nimport DividerView from '../../views/DividerView';\nimport DoorView from '../../views/DoorView';\nimport DrawerView from '../../views/DrawerView';\nimport GenericAssetView from '../../views/GenericAssetView';\nimport HandleView from '../../views/HandleView';\nimport HookRackView from '../../views/HookRackView';\nimport LightsView from '../../views/LightsView';\nimport MurphybedView from '../../views/MurphybedView';\nimport ParametricPartView from '../../views/ParametricPartView';\nimport RoomView from '../../views/RoomView';\nimport SectionView from '../../views/SectionView';\nimport StackLayoutHepler from '../../views/StackLayoutHepler';\nimport VerticalPanelView from '../../views/VerticalPanelView';\nimport WallView from '../../views/WallView';\n\nexport const views = {\n ClosetUnitView,\n CubbyView,\n DividerView,\n DoorView,\n DrawerView,\n GenericAssetView,\n HandleView,\n HookRackView,\n LightsView,\n MurphybedView,\n ParametricPartView,\n RoomView,\n SectionView,\n StackLayoutHepler,\n VerticalPanelView,\n WallView,\n};\n\nimport '../../dev';\nimport * as dm from '../../domain';\nimport Application from '../../Application';\nimport DefaultsManager from '../../DefaultsManager';\nimport OrbitTool from '../../tools/OrbitTool';\nimport { DummyRenderPipeline, PerspectiveRenderPipeline } from '../../RenderPipeline';\nimport materialFactory from '../../MaterialFactory';\nimport parametricCache from '../../ParametricCache';\n\nexport const mfac = materialFactory;\nexport const pc = parametricCache;\n\nexport class TransitionalApp extends Application {\n\n constructor(defaults: dm.Defaults) {\n super();\n this.defaults = new DefaultsManager(defaults);\n this.pipeline = new DummyRenderPipeline();\n }\n\n async start(): Promise {\n }\n\n async refresh(): Promise {\n }\n\n}\n\nexport class SimpleApp extends Application {\n navtool: OrbitTool;\n\n constructor(defaults: dm.Defaults) {\n super();\n this.defaults = new DefaultsManager(defaults);\n this.pipeline = new PerspectiveRenderPipeline();\n this.navtool = new OrbitTool(this);\n\n this.navtool.controls.enablePan = true;\n this.navtool.controls.screenSpacePanning = true;\n this.navtool.controls.minAzimuthAngle = -Infinity;\n this.navtool.controls.maxAzimuthAngle = Infinity;\n this.navtool.controls.minDistance = 0;\n this.navtool.controls.maxDistance = Infinity;\n }\n async start(): Promise {\n this.pipeline.start();\n this.navtool.enable();\n }\n refresh(): Promise {\n throw new Error('Method not implemented.');\n }\n}\n"],"names":["EventDispatcher","log","logger","Vector3","Material","Handle","Vector2","clamp","lerp","_color","_vA","_vB","_vC","_identityMatrix","_ray","intersect","assets","logging","lines","GLTFMaterialsClearcoatExtension","GLTFMaterialsDispersionExtension","GLTFMaterialsSheenExtension","GLTFMaterialsTransmissionExtension","GLTFMaterialsVolumeExtension","GLTFMaterialsIorExtension","GLTFMaterialsEmissiveStrengthExtension","GLTFMaterialsSpecularExtension","GLTFMaterialsIridescenceExtension","GLTFMaterialsAnisotropyExtension","GLTFMaterialsBumpExtension","GLTFMeshGpuInstancing","GLTFMaterialsUnlitExtension","WEBGL_CONSTANTS","PATH_PROPERTIES","config.maps","mfac","gc","THREE_Vector3","ml","hitMaterial","config.models","Transform","config.geometry","pc","cabinetData","lineData","box","set","HookRackView","dm.Material","gatherCabinetClusters","DomainVector3","renderCabinetClusters","config.colors","dm.ClosetUnit","dm.Cubby","dm.Divider","dm.Door","dm.HookRack","dm.VerticalPanel","dm.Drawer","dm.DrawerBox","dm.GenericAsset","dm.Handle","dm.Lights","dm.ParametricPart","dm.Wall","dm.Frame","dm.Section","dm.ClosetConfig","utils.wireframe","utils.saveBuffer","utils.ThreeAxisHelper","utils.shuffle","_assets","StackLayoutHepler","materialFactory","parametricCache"],"mappings":"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I,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAChhD;IACA,IAAI,KAAK,GAAG,OAAO,CAAC;AACpB;AACA;IACA,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;IAC9B,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;AAC9B;IACA;IACA,SAAS,YAAY,GAAG;AACxB;IACA,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;IAC3C,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;IAC3C,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;IAC3C,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;IAC3C,CAAC,MAAM,IAAI,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG;IAClH,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,GAAG;IACpH,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,GAAG,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE;IAC9G,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;AAClG;IACA;IACA,CAAC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3B;IACA,CAAC;AACD;IACA,SAASG,OAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG;AAClC;IACA,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;AAChD;IACA,CAAC;AACD;IACA;IACA;IACA,SAAS,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG;AACjC;IACA,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC9B;IACA,CAAC;AACD;IACA;IACA,SAAS,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;AACxC;IACA,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;AACpD;IACA,CAAC;AACD;IACA;IACA,SAAS,WAAW,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG;AACpC;IACA,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;AAChB;IACA,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACnC;IACA,EAAE,MAAM;AACR;IACA,EAAE,OAAO,CAAC,CAAC;AACX;IACA,EAAE;AACF;IACA,CAAC;AACD;IACA;IACA,SAASC,MAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG;AACzB;IACA,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC9B;IACA,CAAC;AACD;IACA;IACA,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG;AAClC;IACA,CAAC,OAAOA,MAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE,CAAC;AACpD;IACA,CAAC;AACD;IACA;IACA,SAAS,QAAQ,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,GAAG;AACnC;IACA,CAAC,OAAO,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;AACvE;IACA,CAAC;AACD;IACA;IACA,SAAS,UAAU,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG;AACnC;IACA,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC;IAC1B,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC;AAC1B;IACA,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,EAAE,CAAC;AACjC;IACA,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B;IACA,CAAC;AACD;IACA,SAAS,YAAY,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG;AACrC;IACA,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC;IAC1B,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC;AAC1B;IACA,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,OAAO,GAAG,GAAG,GAAG,EAAE,CAAC;AACjC;IACA,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC;AAChD;IACA,CAAC;AACD;IACA;IACA,SAAS,OAAO,EAAE,GAAG,EAAE,IAAI,GAAG;AAC9B;IACA,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC;AAC/D;IACA,CAAC;AACD;IACA;IACA,SAAS,SAAS,EAAE,GAAG,EAAE,IAAI,GAAG;AAChC;IACA,CAAC,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,GAAG,GAAG,EAAE,CAAC;AAC7C;IACA,CAAC;AACD;IACA;IACA,SAAS,eAAe,EAAE,KAAK,GAAG;AAClC;IACA,CAAC,OAAO,KAAK,KAAK,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AACxC;IACA,CAAC;AACD;IACA;IACA,SAAS,YAAY,EAAE,CAAC,GAAG;AAC3B;IACA,CAAC,KAAK,CAAC,KAAK,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AAClC;IACA;AACA;IACA,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,UAAU,CAAC;AAC7B;IACA,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AACtC;IACA,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;AAC3C;IACA,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,UAAU,CAAC;AAChD;IACA,CAAC;AACD;IACA,SAAS,QAAQ,EAAE,OAAO,GAAG;AAC7B;IACA,CAAC,OAAO,OAAO,GAAG,OAAO,CAAC;AAC1B;IACA,CAAC;AACD;IACA,SAAS,QAAQ,EAAE,OAAO,GAAG;AAC7B;IACA,CAAC,OAAO,OAAO,GAAG,OAAO,CAAC;AAC1B;IACA,CAAC;AACD;IACA,SAAS,YAAY,EAAE,KAAK,GAAG;AAC/B;IACA,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;AACvD;IACA,CAAC;AACD;IACA,SAAS,cAAc,EAAE,KAAK,GAAG;AACjC;IACA,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AACjE;IACA,CAAC;AACD;IACA,SAAS,eAAe,EAAE,KAAK,GAAG;AAClC;IACA,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAClE;IACA,CAAC;AACD;IACA,SAAS,4BAA4B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG;AAC3D;IACA;AACA;IACA;IACA;IACA;AACA;IACA,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACtB,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACtB;IACA,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IACzB,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AACzB;IACA,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;IAClC,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AAClC;IACA,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;IACnC,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACnC;IACA,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;IACnC,CAAC,MAAM,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;AACnC;IACA,CAAC,SAAS,KAAK;AACf;IACA,EAAE,KAAK,KAAK;IACZ,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;IACrD,GAAG,MAAM;AACT;IACA,EAAE,KAAK,KAAK;IACZ,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;IACrD,GAAG,MAAM;AACT;IACA,EAAE,KAAK,KAAK;IACZ,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;IACrD,GAAG,MAAM;AACT;IACA,EAAE,KAAK,KAAK;IACZ,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;IACrD,GAAG,MAAM;AACT;IACA,EAAE,KAAK,KAAK;IACZ,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;IACrD,GAAG,MAAM;AACT;IACA,EAAE,KAAK,KAAK;IACZ,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;IACrD,GAAG,MAAM;AACT;IACA,EAAE;IACF,GAAG,OAAO,CAAC,IAAI,EAAE,iFAAiF,GAAG,KAAK,EAAE,CAAC;AAC7G;IACA,EAAE;AACF;IACA,CAAC;AACD;IACA,SAAS,WAAW,EAAE,KAAK,EAAE,KAAK,GAAG;AACrC;IACA,CAAC,SAAS,KAAK,CAAC,WAAW;AAC3B;IACA,EAAE,KAAK,YAAY;AACnB;IACA,GAAG,OAAO,KAAK,CAAC;AAChB;IACA,EAAE,KAAK,WAAW;AAClB;IACA,GAAG,OAAO,KAAK,GAAG,YAAY,CAAC;AAC/B;IACA,EAAE,KAAK,WAAW;AAClB;IACA,GAAG,OAAO,KAAK,GAAG,OAAO,CAAC;AAC1B;IACA,EAAE,KAAK,UAAU;AACjB;IACA,GAAG,OAAO,KAAK,GAAG,KAAK,CAAC;AACxB;IACA,EAAE,KAAK,UAAU;AACjB;IACA,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC;AAClD;IACA,EAAE,KAAK,UAAU;AACjB;IACA,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC;AAC7C;IACA,EAAE,KAAK,SAAS;AAChB;IACA,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC;AAC3C;IACA,EAAE;AACF;IACA,GAAG,MAAM,IAAI,KAAK,EAAE,yBAAyB,EAAE,CAAC;AAChD;IACA,EAAE;AACF;IACA,CAAC;AACD;IACA,SAAS,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG;AACnC;IACA,CAAC,SAAS,KAAK,CAAC,WAAW;AAC3B;IACA,EAAE,KAAK,YAAY;AACnB;IACA,GAAG,OAAO,KAAK,CAAC;AAChB;IACA,EAAE,KAAK,WAAW;AAClB;IACA,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,YAAY,EAAE,CAAC;AAC7C;IACA,EAAE,KAAK,WAAW;AAClB;IACA,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,CAAC;AACxC;IACA,EAAE,KAAK,UAAU;AACjB;IACA,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;AACtC;IACA,EAAE,KAAK,UAAU;AACjB;IACA,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,YAAY,EAAE,CAAC;AAC7C;IACA,EAAE,KAAK,UAAU;AACjB;IACA,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,CAAC;AACxC;IACA,EAAE,KAAK,SAAS;AAChB;IACA,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;AACtC;IACA,EAAE;AACF;IACA,GAAG,MAAM,IAAI,KAAK,EAAE,yBAAyB,EAAE,CAAC;AAChD;IACA,EAAE;AACF;IACA,CAAC;AACD;IACA,MAAM,SAAS,GAAG;IAClB,CAAC,OAAO,EAAE,OAAO;IACjB,CAAC,OAAO,EAAE,OAAO;IACjB,CAAC,YAAY,EAAE,YAAY;IAC3B,CAAC,KAAK,EAAED,OAAK;IACb,CAAC,eAAe,EAAE,eAAe;IACjC,CAAC,SAAS,EAAE,SAAS;IACrB,CAAC,WAAW,EAAE,WAAW;IACzB,CAAC,IAAI,EAAEC,MAAI;IACX,CAAC,IAAI,EAAE,IAAI;IACX,CAAC,QAAQ,EAAE,QAAQ;IACnB,CAAC,UAAU,EAAE,UAAU;IACvB,CAAC,YAAY,EAAE,YAAY;IAC3B,CAAC,OAAO,EAAE,OAAO;IACjB,CAAC,SAAS,EAAE,SAAS;IACrB,CAAC,eAAe,EAAE,eAAe;IACjC,CAAC,YAAY,EAAE,YAAY;IAC3B,CAAC,QAAQ,EAAE,QAAQ;IACnB,CAAC,QAAQ,EAAE,QAAQ;IACnB,CAAC,YAAY,EAAE,YAAY;IAC3B,CAAC,cAAc,EAAE,cAAc;IAC/B,CAAC,eAAe,EAAE,eAAe;IACjC,CAAC,4BAA4B,EAAE,4BAA4B;IAC3D,CAAC,SAAS,EAAE,SAAS;IACrB,CAAC,WAAW,EAAE,WAAW;IACzB,CAAC,CAAC;AACF;IACA,MAAM,OAAO,CAAC;AACd;IACA,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG;AAC7B;IACA,EAAE,OAAO,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;AACrC;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACb;IACA,EAAE;AACF;IACA,CAAC,IAAI,KAAK,GAAG;AACb;IACA,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;AAChB;IACA,EAAE;AACF;IACA,CAAC,IAAI,KAAK,EAAE,KAAK,GAAG;AACpB;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;AACjB;IACA,EAAE;AACF;IACA,CAAC,IAAI,MAAM,GAAG;AACd;IACA,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;AAChB;IACA,EAAE;AACF;IACA,CAAC,IAAI,MAAM,EAAE,KAAK,GAAG;AACrB;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;AACjB;IACA,EAAE;AACF;IACA,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG;AACb;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACb;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,SAAS,EAAE,MAAM,GAAG;AACrB;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;IAClB,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;AAClB;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,IAAI,EAAE,CAAC,GAAG;AACX;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACb;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,IAAI,EAAE,CAAC,GAAG;AACX;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACb;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,GAAG;AAC9B;IACA,EAAE,SAAS,KAAK;AAChB;IACA,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM;IACjC,GAAG,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM;IACjC,GAAG,SAAS,MAAM,IAAI,KAAK,EAAE,yBAAyB,GAAG,KAAK,EAAE,CAAC;AACjE;IACA,GAAG;AACH;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,YAAY,EAAE,KAAK,GAAG;AACvB;IACA,EAAE,SAAS,KAAK;AAChB;IACA,GAAG,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;IACzB,GAAG,KAAK,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;IACzB,GAAG,SAAS,MAAM,IAAI,KAAK,EAAE,yBAAyB,GAAG,KAAK,EAAE,CAAC;AACjE;IACA,GAAG;AACH;IACA,EAAE;AACF;IACA,CAAC,KAAK,GAAG;AACT;IACA,EAAE,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AAChD;IACA,EAAE;AACF;IACA,CAAC,IAAI,EAAE,CAAC,GAAG;AACX;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACf,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACf;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,GAAG,EAAE,CAAC,GAAG;AACV;IACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,SAAS,EAAE,CAAC,GAAG;AAChB;IACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IACd,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACd;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,GAAG;AACpB;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,GAAG;AACzB;IACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACpB;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,GAAG,EAAE,CAAC,GAAG;AACV;IACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,SAAS,EAAE,CAAC,GAAG;AAChB;IACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IACd,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACd;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,GAAG;AACpB;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,QAAQ,EAAE,CAAC,GAAG;AACf;IACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,cAAc,EAAE,MAAM,GAAG;AAC1B;IACA,EAAE,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;IACnB,EAAE,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;AACnB;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,MAAM,EAAE,CAAC,GAAG;AACb;IACA,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChB,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,YAAY,EAAE,MAAM,GAAG;AACxB;IACA,EAAE,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;AAC3C;IACA,EAAE;AACF;IACA,CAAC,YAAY,EAAE,CAAC,GAAG;AACnB;IACA,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC/B,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AACvB;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5C,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5C;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,GAAG,EAAE,CAAC,GAAG;AACV;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,GAAG,EAAE,CAAC,GAAG;AACV;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG;AACnB;IACA;AACA;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;IACxD,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;AACxD;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG;AAC/B;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1D,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1D;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG;AACzB;IACA,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC/B;IACA,EAAE,OAAO,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACrG;IACA,EAAE;AACF;IACA,CAAC,KAAK,GAAG;AACT;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;IAChC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AAChC;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,IAAI,GAAG;AACR;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;IAC/B,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AAC/B;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,KAAK,GAAG;AACT;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;IAChC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AAChC;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,WAAW,GAAG;AACf;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;IAChC,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AAChC;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,MAAM,GAAG;AACV;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACpB,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACpB;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,GAAG,EAAE,CAAC,GAAG;AACV;IACA,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrC;IACA,EAAE;AACF;IACA,CAAC,KAAK,EAAE,CAAC,GAAG;AACZ;IACA,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrC;IACA,EAAE;AACF;IACA,CAAC,QAAQ,GAAG;AACZ;IACA,EAAE,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC3C;IACA,EAAE;AACF;IACA,CAAC,MAAM,GAAG;AACV;IACA,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;AACxD;IACA,EAAE;AACF;IACA,CAAC,eAAe,GAAG;AACnB;IACA,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;AACjD;IACA,EAAE;AACF;IACA,CAAC,SAAS,GAAG;AACb;IACA,EAAE,OAAO,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AACjD;IACA,EAAE;AACF;IACA,CAAC,KAAK,GAAG;AACT;IACA;AACA;IACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AAC3D;IACA,EAAE,OAAO,KAAK,CAAC;AACf;IACA,EAAE;AACF;IACA,CAAC,OAAO,EAAE,CAAC,GAAG;AACd;IACA,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;AAClE;IACA,EAAE,KAAK,WAAW,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9C;IACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC;AAC5C;IACA;AACA;IACA,EAAE,OAAO,IAAI,CAAC,IAAI,EAAED,OAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AAC7C;IACA,EAAE;AACF;IACA,CAAC,UAAU,EAAE,CAAC,GAAG;AACjB;IACA,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,CAAC;AAClD;IACA,EAAE;AACF;IACA,CAAC,iBAAiB,EAAE,CAAC,GAAG;AACxB;IACA,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7C,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC3B;IACA,EAAE;AACF;IACA,CAAC,mBAAmB,EAAE,CAAC,GAAG;AAC1B;IACA,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7D;IACA,EAAE;AACF;IACA,CAAC,SAAS,EAAE,MAAM,GAAG;AACrB;IACA,EAAE,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;AACnD;IACA,EAAE;AACF;IACA,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,GAAG;AAClB;IACA,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;IACrC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC;AACrC;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,GAAG;AAC9B;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;IAC1C,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;AAC1C;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,MAAM,EAAE,CAAC,GAAG;AACb;IACA,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,GAAG;AACtD;IACA,EAAE;AACF;IACA,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG;AAChC;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC;IAC3B,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;AAC/B;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG;AACnC;IACA,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3B,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC/B;IACA,EAAE,OAAO,KAAK,CAAC;AACf;IACA,EAAE;AACF;IACA,CAAC,mBAAmB,EAAE,SAAS,EAAE,KAAK,GAAG;AACzC;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;IACnC,EAAE,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACnC;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,GAAG;AAC/B;IACA,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;AACrD;IACA,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC9B,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AAC9B;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IACpC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACpC;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,MAAM,GAAG;AACV;IACA,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IACzB,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACzB;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG;AACxB;IACA,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;IACf,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;AACf;IACA,EAAE;AACF;IACA,CAAC;AACD;IACA,MAAM,OAAO,CAAC;AACd;IACA,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG;AAC5D;IACA,EAAE,OAAO,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;AACrC;IACA,EAAE,IAAI,CAAC,QAAQ,GAAG;AAClB;IACA,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACV;IACA,GAAG,CAAC;AACJ;IACA,EAAE,KAAK,GAAG,KAAK,SAAS,GAAG;AAC3B;IACA,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC3D;IACA,GAAG;AACH;IACA,EAAE;AACF;IACA,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG;AACpD;IACA,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC3B;IACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;IAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;IAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;AAC9C;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,QAAQ,GAAG;AACZ;IACA,EAAE,IAAI,CAAC,GAAG;AACV;IACA,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;IACV,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACV;IACA,GAAG,CAAC;AACJ;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,IAAI,EAAE,CAAC,GAAG;AACX;IACA,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC3B,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;AACxB;IACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;IAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;IAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;AAC1D;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG;AACrC;IACA,EAAE,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACxC,EAAE,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACxC,EAAE,KAAK,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxC;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,cAAc,EAAE,CAAC,GAAG;AACrB;IACA,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;AACxB;IACA,EAAE,IAAI,CAAC,GAAG;AACV;IACA,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;IAC5B,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE;IAC5B,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC7B;IACA,GAAG,CAAC;AACJ;IACA,EAAE,OAAO,IAAI,CAAC;AACd;IACA,EAAE;AACF;IACA,CAAC,QAAQ,EAAE,CAAC,GAAG;AACf;IACA,EAAE,OAAO,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC1C;IACA,EAAE;AACF;IACA,CAAC,WAAW,EAAE,CAAC,GAAG;AAClB;IACA,EAAE,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;AAC1C;IACA,EAAE;AACF;IACA,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,GAAG;AAC1B;IACA,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;IACxB,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;IACxB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC3B;IACA,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;IACpD,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;IACpD,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;AACpD;IACA,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;IACpD,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;IACpD,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;AACpD;IACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC9C;IACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC9C;IACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC9C,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,G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AE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;IACrE,EAAE,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;AACrE;IACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC3D;IACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1D,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC1D,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAA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GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;IACnI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;IACnI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;AACnI;IACA,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,GAAG,MAAM,CAAC;IACzB,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;IACnI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,CAAC;IACnI,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG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Q,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;IAC5B,GAAG;AACH;IACA,EAAE,YAAY,EAAE,sBAAsB,EAAE;AACxC;IACA,EAAE,cAAc,YAAY,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;AACH;IACA,EAAE,QAAQ,EAAE,UAAU;IACtB,EAAE,SAAS,EAAE,KAAK;IAClB,EAAE,UAAU,EAAE,KAAK;AACnB;IACA,EAAE,EAAE,CAAC;AACL;IACA,CAAC;AACD;IACA,SAAS,mBAAmB,GAAG;AAC/B;IACA,CAAC,OAAO,IAAI,cAAc,EAAE;AAC5B;IACA,EAAE,IAAI,EAAE,iBAAiB;AACzB;IACA,EAAE,QAAQ,EAAE;IACZ,GAAG,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;IAC5B,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE;IAC/B,GAAG;AACH;IACA,EAAE,YAAY,EAAE,sBAAsB,EAAE;AACxC;IACA,EAAE,cAAc,YAAY,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;AACH;IACA,EAAE,QAAQ,EAAE,UAAU;IACtB,EAAE,SAAS,EAAE,KAAK;IAClB,EAAE,UAAU,EAAE,KAAK;AACnB;IACA,EAAE,EAAE,CAAC;AACL;IACA,CAAC;AACD;IACA,SAAS,sBAAsB,GAAG;AAClC;IACA,CAAC,iBAAiB,CAAC;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,CAAC,CAAC;AAC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AE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAC7H,EAAE,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAC7H,EAAE,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;AAC7H;IACA;AACA;IACA,EAAE,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAC7H,EAAE,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAC7H,EAAE,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAC7H,EAAE,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,E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CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACvB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAG,CAAC,EACvB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;IAE7B,QAAA,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EACvB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACvB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACvB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACvB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;IAE7B,QAAA,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EACvB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACvB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACvB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACvB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;IAE7B,QAAA,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EACvB,EAAE,CAAC,EAAE,CAAC,CAA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"}