diff options
author | Thomas F. K. Jorna <[email protected]> | 2021-07-23 16:03:49 +0200 |
---|---|---|
committer | Thomas F. K. Jorna <[email protected]> | 2021-07-23 16:03:49 +0200 |
commit | 7f8afb99e24d546973662ef2d59cf85db9d019dd (patch) | |
tree | 115620ac372a2ca2eeae8c24bcdf4c6207699075 /out/_next/static/chunks/fb7d5399-a8c606efbc9e7c0edf90.js | |
parent | 10cda32757e4940845c5c1479af09fe0b323222c (diff) | |
parent | 57b2ae80a4e6e496526f815f1e3fd1af56e0aa8c (diff) |
made links a little brighter
Diffstat (limited to 'out/_next/static/chunks/fb7d5399-a8c606efbc9e7c0edf90.js')
-rw-r--r-- | out/_next/static/chunks/fb7d5399-a8c606efbc9e7c0edf90.js | 21137 |
1 files changed, 21137 insertions, 0 deletions
diff --git a/out/_next/static/chunks/fb7d5399-a8c606efbc9e7c0edf90.js b/out/_next/static/chunks/fb7d5399-a8c606efbc9e7c0edf90.js new file mode 100644 index 0000000..1a661af --- /dev/null +++ b/out/_next/static/chunks/fb7d5399-a8c606efbc9e7c0edf90.js @@ -0,0 +1,21137 @@ +;(self.webpackChunk_N_E = self.webpackChunk_N_E || []).push([ + [737], + { + 2212: function (t, e, n) { + 'use strict' + n.d(e, { + Mig: function () { + return Jo + }, + _Li: function () { + return s + }, + ZzF: function () { + return mt + }, + TlE: function () { + return Be + }, + u9r: function () { + return Je + }, + SUY: function () { + return ll + }, + Ilk: function () { + return Ie + }, + _3: function () { + return Zs + }, + yj7: function () { + return ha + }, + m_w: function () { + return Js + }, + Ox3: function () { + return Yo + }, + pBf: function () { + return W + }, + a$l: function () { + return He + }, + ZAu: function () { + return kr + }, + x12: function () { + return Os + }, + nls: function () { + return Cs + }, + wem: function () { + return v + }, + RsA: function () { + return i + }, + yGw: function () { + return Vt + }, + Kj0: function () { + return mn + }, + vBJ: function () { + return Ne + }, + YBo: function () { + return no + }, + iKG: function () { + return qo + }, + cPb: function () { + return Mn + }, + JOQ: function () { + return Cn + }, + mXe: function () { + return pa + }, + _fP: function () { + return ht + }, + wk1: function () { + return E + }, + iMs: function () { + return Tl + }, + xsS: function () { + return Qr + }, + jyz: function () { + return _n + }, + Aip: function () { + return Xa + }, + xo$: function () { + return Xa + }, + $V: function () { + return Al + }, + QmN: function () { + return r + }, + dpR: function () { + return Ro + }, + Lcc: function () { + return Ya + }, + rDY: function () { + return xn + }, + FM8: function () { + return tt + }, + Pa4: function () { + return ut + }, + dd2: function () { + return lt + }, + CP7: function () { + return Yr + }, + }) + const i = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }, + r = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }, + s = 1, + a = 100, + o = 301, + l = 302, + c = 306, + h = 307, + u = 1e3, + d = 1001, + p = 1002, + m = 1003, + f = 1004, + g = 1005, + v = 1006, + y = 1008, + x = 1009, + _ = 1012, + b = 1014, + M = 1015, + w = 1016, + S = 1020, + T = 1022, + E = 1023, + L = 1026, + A = 1027, + R = 2300, + C = 2301, + P = 2302, + D = 2400, + I = 2401, + N = 2402, + z = 2500, + O = 3e3, + B = 3001, + F = 3007, + U = 3002, + H = 7680, + G = 35044, + V = 35048, + k = '300 es' + class W { + addEventListener(t, e) { + void 0 === this._listeners && (this._listeners = {}) + const n = this._listeners + void 0 === n[t] && (n[t] = []), -1 === n[t].indexOf(e) && n[t].push(e) + } + hasEventListener(t, e) { + if (void 0 === this._listeners) return !1 + const n = this._listeners + return void 0 !== n[t] && -1 !== n[t].indexOf(e) + } + removeEventListener(t, e) { + if (void 0 === this._listeners) return + const n = this._listeners[t] + if (void 0 !== n) { + const t = n.indexOf(e) + ;-1 !== t && n.splice(t, 1) + } + } + dispatchEvent(t) { + if (void 0 === this._listeners) return + const e = this._listeners[t.type] + if (void 0 !== e) { + t.target = this + const n = e.slice(0) + for (let e = 0, i = n.length; e < i; e++) n[e].call(this, t) + t.target = null + } + } + } + const j = [] + for (let jl = 0; jl < 256; jl++) j[jl] = (jl < 16 ? '0' : '') + jl.toString(16) + const q = Math.PI / 180, + X = 180 / Math.PI + function Y() { + const t = (4294967295 * Math.random()) | 0, + e = (4294967295 * Math.random()) | 0, + n = (4294967295 * Math.random()) | 0, + i = (4294967295 * Math.random()) | 0 + return ( + j[255 & t] + + j[(t >> 8) & 255] + + j[(t >> 16) & 255] + + j[(t >> 24) & 255] + + '-' + + j[255 & e] + + j[(e >> 8) & 255] + + '-' + + j[((e >> 16) & 15) | 64] + + j[(e >> 24) & 255] + + '-' + + j[(63 & n) | 128] + + j[(n >> 8) & 255] + + '-' + + j[(n >> 16) & 255] + + j[(n >> 24) & 255] + + j[255 & i] + + j[(i >> 8) & 255] + + j[(i >> 16) & 255] + + j[(i >> 24) & 255] + ).toUpperCase() + } + function J(t, e, n) { + return Math.max(e, Math.min(n, t)) + } + function Z(t, e) { + return ((t % e) + e) % e + } + function Q(t, e, n) { + return (1 - n) * t + n * e + } + function K(t) { + return 0 === (t & (t - 1)) && 0 !== t + } + function $(t) { + return Math.pow(2, Math.floor(Math.log(t) / Math.LN2)) + } + class tt { + constructor(t = 0, e = 0) { + ;(this.x = t), (this.y = e) + } + get width() { + return this.x + } + set width(t) { + this.x = t + } + get height() { + return this.y + } + set height(t) { + this.y = t + } + set(t, e) { + return (this.x = t), (this.y = e), this + } + setScalar(t) { + return (this.x = t), (this.y = t), this + } + setX(t) { + return (this.x = t), this + } + setY(t) { + return (this.y = t), this + } + setComponent(t, e) { + switch (t) { + case 0: + this.x = e + break + case 1: + this.y = e + break + default: + throw new Error('index is out of range: ' + t) + } + return this + } + getComponent(t) { + switch (t) { + case 0: + return this.x + case 1: + return this.y + default: + throw new Error('index is out of range: ' + t) + } + } + clone() { + return new this.constructor(this.x, this.y) + } + copy(t) { + return (this.x = t.x), (this.y = t.y), this + } + add(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.', + ), + this.addVectors(t, e)) + : ((this.x += t.x), (this.y += t.y), this) + } + addScalar(t) { + return (this.x += t), (this.y += t), this + } + addVectors(t, e) { + return (this.x = t.x + e.x), (this.y = t.y + e.y), this + } + addScaledVector(t, e) { + return (this.x += t.x * e), (this.y += t.y * e), this + } + sub(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.', + ), + this.subVectors(t, e)) + : ((this.x -= t.x), (this.y -= t.y), this) + } + subScalar(t) { + return (this.x -= t), (this.y -= t), this + } + subVectors(t, e) { + return (this.x = t.x - e.x), (this.y = t.y - e.y), this + } + multiply(t) { + return (this.x *= t.x), (this.y *= t.y), this + } + multiplyScalar(t) { + return (this.x *= t), (this.y *= t), this + } + divide(t) { + return (this.x /= t.x), (this.y /= t.y), this + } + divideScalar(t) { + return this.multiplyScalar(1 / t) + } + applyMatrix3(t) { + const e = this.x, + n = this.y, + i = t.elements + return (this.x = i[0] * e + i[3] * n + i[6]), (this.y = i[1] * e + i[4] * n + i[7]), this + } + min(t) { + return (this.x = Math.min(this.x, t.x)), (this.y = Math.min(this.y, t.y)), this + } + max(t) { + return (this.x = Math.max(this.x, t.x)), (this.y = Math.max(this.y, t.y)), this + } + clamp(t, e) { + return ( + (this.x = Math.max(t.x, Math.min(e.x, this.x))), + (this.y = Math.max(t.y, Math.min(e.y, this.y))), + this + ) + } + clampScalar(t, e) { + return ( + (this.x = Math.max(t, Math.min(e, this.x))), + (this.y = Math.max(t, Math.min(e, this.y))), + this + ) + } + clampLength(t, e) { + const n = this.length() + return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) + } + floor() { + return (this.x = Math.floor(this.x)), (this.y = Math.floor(this.y)), this + } + ceil() { + return (this.x = Math.ceil(this.x)), (this.y = Math.ceil(this.y)), this + } + round() { + return (this.x = Math.round(this.x)), (this.y = Math.round(this.y)), this + } + roundToZero() { + return ( + (this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x)), + (this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y)), + this + ) + } + negate() { + return (this.x = -this.x), (this.y = -this.y), this + } + dot(t) { + return this.x * t.x + this.y * t.y + } + cross(t) { + return this.x * t.y - this.y * t.x + } + lengthSq() { + return this.x * this.x + this.y * this.y + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + angle() { + return Math.atan2(-this.y, -this.x) + Math.PI + } + distanceTo(t) { + return Math.sqrt(this.distanceToSquared(t)) + } + distanceToSquared(t) { + const e = this.x - t.x, + n = this.y - t.y + return e * e + n * n + } + manhattanDistanceTo(t) { + return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + } + setLength(t) { + return this.normalize().multiplyScalar(t) + } + lerp(t, e) { + return (this.x += (t.x - this.x) * e), (this.y += (t.y - this.y) * e), this + } + lerpVectors(t, e, n) { + return (this.x = t.x + (e.x - t.x) * n), (this.y = t.y + (e.y - t.y) * n), this + } + equals(t) { + return t.x === this.x && t.y === this.y + } + fromArray(t, e = 0) { + return (this.x = t[e]), (this.y = t[e + 1]), this + } + toArray(t = [], e = 0) { + return (t[e] = this.x), (t[e + 1] = this.y), t + } + fromBufferAttribute(t, e, n) { + return ( + void 0 !== n && + console.warn('THREE.Vector2: offset has been removed from .fromBufferAttribute().'), + (this.x = t.getX(e)), + (this.y = t.getY(e)), + this + ) + } + rotateAround(t, e) { + const n = Math.cos(e), + i = Math.sin(e), + r = this.x - t.x, + s = this.y - t.y + return (this.x = r * n - s * i + t.x), (this.y = r * i + s * n + t.y), this + } + random() { + return (this.x = Math.random()), (this.y = Math.random()), this + } + } + tt.prototype.isVector2 = !0 + class et { + constructor() { + ;(this.elements = [1, 0, 0, 0, 1, 0, 0, 0, 1]), + arguments.length > 0 && + console.error( + 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.', + ) + } + set(t, e, n, i, r, s, a, o, l) { + const c = this.elements + return ( + (c[0] = t), + (c[1] = i), + (c[2] = a), + (c[3] = e), + (c[4] = r), + (c[5] = o), + (c[6] = n), + (c[7] = s), + (c[8] = l), + this + ) + } + identity() { + return this.set(1, 0, 0, 0, 1, 0, 0, 0, 1), this + } + copy(t) { + const e = this.elements, + n = t.elements + return ( + (e[0] = n[0]), + (e[1] = n[1]), + (e[2] = n[2]), + (e[3] = n[3]), + (e[4] = n[4]), + (e[5] = n[5]), + (e[6] = n[6]), + (e[7] = n[7]), + (e[8] = n[8]), + this + ) + } + extractBasis(t, e, n) { + return ( + t.setFromMatrix3Column(this, 0), + e.setFromMatrix3Column(this, 1), + n.setFromMatrix3Column(this, 2), + this + ) + } + setFromMatrix4(t) { + const e = t.elements + return this.set(e[0], e[4], e[8], e[1], e[5], e[9], e[2], e[6], e[10]), this + } + multiply(t) { + return this.multiplyMatrices(this, t) + } + premultiply(t) { + return this.multiplyMatrices(t, this) + } + multiplyMatrices(t, e) { + const n = t.elements, + i = e.elements, + r = this.elements, + s = n[0], + a = n[3], + o = n[6], + l = n[1], + c = n[4], + h = n[7], + u = n[2], + d = n[5], + p = n[8], + m = i[0], + f = i[3], + g = i[6], + v = i[1], + y = i[4], + x = i[7], + _ = i[2], + b = i[5], + M = i[8] + return ( + (r[0] = s * m + a * v + o * _), + (r[3] = s * f + a * y + o * b), + (r[6] = s * g + a * x + o * M), + (r[1] = l * m + c * v + h * _), + (r[4] = l * f + c * y + h * b), + (r[7] = l * g + c * x + h * M), + (r[2] = u * m + d * v + p * _), + (r[5] = u * f + d * y + p * b), + (r[8] = u * g + d * x + p * M), + this + ) + } + multiplyScalar(t) { + const e = this.elements + return ( + (e[0] *= t), + (e[3] *= t), + (e[6] *= t), + (e[1] *= t), + (e[4] *= t), + (e[7] *= t), + (e[2] *= t), + (e[5] *= t), + (e[8] *= t), + this + ) + } + determinant() { + const t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + s = t[4], + a = t[5], + o = t[6], + l = t[7], + c = t[8] + return e * s * c - e * a * l - n * r * c + n * a * o + i * r * l - i * s * o + } + invert() { + const t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + s = t[4], + a = t[5], + o = t[6], + l = t[7], + c = t[8], + h = c * s - a * l, + u = a * o - c * r, + d = l * r - s * o, + p = e * h + n * u + i * d + if (0 === p) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0) + const m = 1 / p + return ( + (t[0] = h * m), + (t[1] = (i * l - c * n) * m), + (t[2] = (a * n - i * s) * m), + (t[3] = u * m), + (t[4] = (c * e - i * o) * m), + (t[5] = (i * r - a * e) * m), + (t[6] = d * m), + (t[7] = (n * o - l * e) * m), + (t[8] = (s * e - n * r) * m), + this + ) + } + transpose() { + let t + const e = this.elements + return ( + (t = e[1]), + (e[1] = e[3]), + (e[3] = t), + (t = e[2]), + (e[2] = e[6]), + (e[6] = t), + (t = e[5]), + (e[5] = e[7]), + (e[7] = t), + this + ) + } + getNormalMatrix(t) { + return this.setFromMatrix4(t).invert().transpose() + } + transposeIntoArray(t) { + const e = this.elements + return ( + (t[0] = e[0]), + (t[1] = e[3]), + (t[2] = e[6]), + (t[3] = e[1]), + (t[4] = e[4]), + (t[5] = e[7]), + (t[6] = e[2]), + (t[7] = e[5]), + (t[8] = e[8]), + this + ) + } + setUvTransform(t, e, n, i, r, s, a) { + const o = Math.cos(r), + l = Math.sin(r) + return ( + this.set( + n * o, + n * l, + -n * (o * s + l * a) + s + t, + -i * l, + i * o, + -i * (-l * s + o * a) + a + e, + 0, + 0, + 1, + ), + this + ) + } + scale(t, e) { + const n = this.elements + return (n[0] *= t), (n[3] *= t), (n[6] *= t), (n[1] *= e), (n[4] *= e), (n[7] *= e), this + } + rotate(t) { + const e = Math.cos(t), + n = Math.sin(t), + i = this.elements, + r = i[0], + s = i[3], + a = i[6], + o = i[1], + l = i[4], + c = i[7] + return ( + (i[0] = e * r + n * o), + (i[3] = e * s + n * l), + (i[6] = e * a + n * c), + (i[1] = -n * r + e * o), + (i[4] = -n * s + e * l), + (i[7] = -n * a + e * c), + this + ) + } + translate(t, e) { + const n = this.elements + return ( + (n[0] += t * n[2]), + (n[3] += t * n[5]), + (n[6] += t * n[8]), + (n[1] += e * n[2]), + (n[4] += e * n[5]), + (n[7] += e * n[8]), + this + ) + } + equals(t) { + const e = this.elements, + n = t.elements + for (let i = 0; i < 9; i++) if (e[i] !== n[i]) return !1 + return !0 + } + fromArray(t, e = 0) { + for (let n = 0; n < 9; n++) this.elements[n] = t[n + e] + return this + } + toArray(t = [], e = 0) { + const n = this.elements + return ( + (t[e] = n[0]), + (t[e + 1] = n[1]), + (t[e + 2] = n[2]), + (t[e + 3] = n[3]), + (t[e + 4] = n[4]), + (t[e + 5] = n[5]), + (t[e + 6] = n[6]), + (t[e + 7] = n[7]), + (t[e + 8] = n[8]), + t + ) + } + clone() { + return new this.constructor().fromArray(this.elements) + } + } + let nt + et.prototype.isMatrix3 = !0 + class it { + static getDataURL(t) { + if (/^data:/i.test(t.src)) return t.src + if ('undefined' == typeof HTMLCanvasElement) return t.src + let e + if (t instanceof HTMLCanvasElement) e = t + else { + void 0 === nt && + (nt = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas')), + (nt.width = t.width), + (nt.height = t.height) + const n = nt.getContext('2d') + t instanceof ImageData + ? n.putImageData(t, 0, 0) + : n.drawImage(t, 0, 0, t.width, t.height), + (e = nt) + } + return e.width > 2048 || e.height > 2048 + ? (console.warn( + 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', + t, + ), + e.toDataURL('image/jpeg', 0.6)) + : e.toDataURL('image/png') + } + } + let rt = 0 + class st extends W { + constructor( + t = st.DEFAULT_IMAGE, + e = st.DEFAULT_MAPPING, + n = 1001, + i = 1001, + r = v, + s = 1008, + a = E, + o = 1009, + l = 1, + c = 3e3, + ) { + super(), + Object.defineProperty(this, 'id', { value: rt++ }), + (this.uuid = Y()), + (this.name = ''), + (this.image = t), + (this.mipmaps = []), + (this.mapping = e), + (this.wrapS = n), + (this.wrapT = i), + (this.magFilter = r), + (this.minFilter = s), + (this.anisotropy = l), + (this.format = a), + (this.internalFormat = null), + (this.type = o), + (this.offset = new tt(0, 0)), + (this.repeat = new tt(1, 1)), + (this.center = new tt(0, 0)), + (this.rotation = 0), + (this.matrixAutoUpdate = !0), + (this.matrix = new et()), + (this.generateMipmaps = !0), + (this.premultiplyAlpha = !1), + (this.flipY = !0), + (this.unpackAlignment = 4), + (this.encoding = c), + (this.version = 0), + (this.onUpdate = null) + } + updateMatrix() { + this.matrix.setUvTransform( + this.offset.x, + this.offset.y, + this.repeat.x, + this.repeat.y, + this.rotation, + this.center.x, + this.center.y, + ) + } + clone() { + return new this.constructor().copy(this) + } + copy(t) { + return ( + (this.name = t.name), + (this.image = t.image), + (this.mipmaps = t.mipmaps.slice(0)), + (this.mapping = t.mapping), + (this.wrapS = t.wrapS), + (this.wrapT = t.wrapT), + (this.magFilter = t.magFilter), + (this.minFilter = t.minFilter), + (this.anisotropy = t.anisotropy), + (this.format = t.format), + (this.internalFormat = t.internalFormat), + (this.type = t.type), + this.offset.copy(t.offset), + this.repeat.copy(t.repeat), + this.center.copy(t.center), + (this.rotation = t.rotation), + (this.matrixAutoUpdate = t.matrixAutoUpdate), + this.matrix.copy(t.matrix), + (this.generateMipmaps = t.generateMipmaps), + (this.premultiplyAlpha = t.premultiplyAlpha), + (this.flipY = t.flipY), + (this.unpackAlignment = t.unpackAlignment), + (this.encoding = t.encoding), + this + ) + } + toJSON(t) { + const e = void 0 === t || 'string' === typeof t + if (!e && void 0 !== t.textures[this.uuid]) return t.textures[this.uuid] + const n = { + metadata: { version: 4.5, type: 'Texture', generator: 'Texture.toJSON' }, + uuid: this.uuid, + name: this.name, + mapping: this.mapping, + repeat: [this.repeat.x, this.repeat.y], + offset: [this.offset.x, this.offset.y], + center: [this.center.x, this.center.y], + rotation: this.rotation, + wrap: [this.wrapS, this.wrapT], + format: this.format, + type: this.type, + encoding: this.encoding, + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + flipY: this.flipY, + premultiplyAlpha: this.premultiplyAlpha, + unpackAlignment: this.unpackAlignment, + } + if (void 0 !== this.image) { + const i = this.image + if ((void 0 === i.uuid && (i.uuid = Y()), !e && void 0 === t.images[i.uuid])) { + let e + if (Array.isArray(i)) { + e = [] + for (let t = 0, n = i.length; t < n; t++) + i[t].isDataTexture ? e.push(at(i[t].image)) : e.push(at(i[t])) + } else e = at(i) + t.images[i.uuid] = { uuid: i.uuid, url: e } + } + n.image = i.uuid + } + return e || (t.textures[this.uuid] = n), n + } + dispose() { + this.dispatchEvent({ type: 'dispose' }) + } + transformUv(t) { + if (300 !== this.mapping) return t + if ((t.applyMatrix3(this.matrix), t.x < 0 || t.x > 1)) + switch (this.wrapS) { + case u: + t.x = t.x - Math.floor(t.x) + break + case d: + t.x = t.x < 0 ? 0 : 1 + break + case p: + 1 === Math.abs(Math.floor(t.x) % 2) + ? (t.x = Math.ceil(t.x) - t.x) + : (t.x = t.x - Math.floor(t.x)) + } + if (t.y < 0 || t.y > 1) + switch (this.wrapT) { + case u: + t.y = t.y - Math.floor(t.y) + break + case d: + t.y = t.y < 0 ? 0 : 1 + break + case p: + 1 === Math.abs(Math.floor(t.y) % 2) + ? (t.y = Math.ceil(t.y) - t.y) + : (t.y = t.y - Math.floor(t.y)) + } + return this.flipY && (t.y = 1 - t.y), t + } + set needsUpdate(t) { + !0 === t && this.version++ + } + } + function at(t) { + return ('undefined' !== typeof HTMLImageElement && t instanceof HTMLImageElement) || + ('undefined' !== typeof HTMLCanvasElement && t instanceof HTMLCanvasElement) || + ('undefined' !== typeof ImageBitmap && t instanceof ImageBitmap) + ? it.getDataURL(t) + : t.data + ? { + data: Array.prototype.slice.call(t.data), + width: t.width, + height: t.height, + type: t.data.constructor.name, + } + : (console.warn('THREE.Texture: Unable to serialize Texture.'), {}) + } + ;(st.DEFAULT_IMAGE = void 0), (st.DEFAULT_MAPPING = 300), (st.prototype.isTexture = !0) + class ot { + constructor(t = 0, e = 0, n = 0, i = 1) { + ;(this.x = t), (this.y = e), (this.z = n), (this.w = i) + } + get width() { + return this.z + } + set width(t) { + this.z = t + } + get height() { + return this.w + } + set height(t) { + this.w = t + } + set(t, e, n, i) { + return (this.x = t), (this.y = e), (this.z = n), (this.w = i), this + } + setScalar(t) { + return (this.x = t), (this.y = t), (this.z = t), (this.w = t), this + } + setX(t) { + return (this.x = t), this + } + setY(t) { + return (this.y = t), this + } + setZ(t) { + return (this.z = t), this + } + setW(t) { + return (this.w = t), this + } + setComponent(t, e) { + switch (t) { + case 0: + this.x = e + break + case 1: + this.y = e + break + case 2: + this.z = e + break + case 3: + this.w = e + break + default: + throw new Error('index is out of range: ' + t) + } + return this + } + getComponent(t) { + switch (t) { + case 0: + return this.x + case 1: + return this.y + case 2: + return this.z + case 3: + return this.w + default: + throw new Error('index is out of range: ' + t) + } + } + clone() { + return new this.constructor(this.x, this.y, this.z, this.w) + } + copy(t) { + return ( + (this.x = t.x), + (this.y = t.y), + (this.z = t.z), + (this.w = void 0 !== t.w ? t.w : 1), + this + ) + } + add(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.', + ), + this.addVectors(t, e)) + : ((this.x += t.x), (this.y += t.y), (this.z += t.z), (this.w += t.w), this) + } + addScalar(t) { + return (this.x += t), (this.y += t), (this.z += t), (this.w += t), this + } + addVectors(t, e) { + return ( + (this.x = t.x + e.x), + (this.y = t.y + e.y), + (this.z = t.z + e.z), + (this.w = t.w + e.w), + this + ) + } + addScaledVector(t, e) { + return ( + (this.x += t.x * e), (this.y += t.y * e), (this.z += t.z * e), (this.w += t.w * e), this + ) + } + sub(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.', + ), + this.subVectors(t, e)) + : ((this.x -= t.x), (this.y -= t.y), (this.z -= t.z), (this.w -= t.w), this) + } + subScalar(t) { + return (this.x -= t), (this.y -= t), (this.z -= t), (this.w -= t), this + } + subVectors(t, e) { + return ( + (this.x = t.x - e.x), + (this.y = t.y - e.y), + (this.z = t.z - e.z), + (this.w = t.w - e.w), + this + ) + } + multiply(t) { + return (this.x *= t.x), (this.y *= t.y), (this.z *= t.z), (this.w *= t.w), this + } + multiplyScalar(t) { + return (this.x *= t), (this.y *= t), (this.z *= t), (this.w *= t), this + } + applyMatrix4(t) { + const e = this.x, + n = this.y, + i = this.z, + r = this.w, + s = t.elements + return ( + (this.x = s[0] * e + s[4] * n + s[8] * i + s[12] * r), + (this.y = s[1] * e + s[5] * n + s[9] * i + s[13] * r), + (this.z = s[2] * e + s[6] * n + s[10] * i + s[14] * r), + (this.w = s[3] * e + s[7] * n + s[11] * i + s[15] * r), + this + ) + } + divideScalar(t) { + return this.multiplyScalar(1 / t) + } + setAxisAngleFromQuaternion(t) { + this.w = 2 * Math.acos(t.w) + const e = Math.sqrt(1 - t.w * t.w) + return ( + e < 1e-4 + ? ((this.x = 1), (this.y = 0), (this.z = 0)) + : ((this.x = t.x / e), (this.y = t.y / e), (this.z = t.z / e)), + this + ) + } + setAxisAngleFromRotationMatrix(t) { + let e, n, i, r + const s = 0.01, + a = 0.1, + o = t.elements, + l = o[0], + c = o[4], + h = o[8], + u = o[1], + d = o[5], + p = o[9], + m = o[2], + f = o[6], + g = o[10] + if (Math.abs(c - u) < s && Math.abs(h - m) < s && Math.abs(p - f) < s) { + if ( + Math.abs(c + u) < a && + Math.abs(h + m) < a && + Math.abs(p + f) < a && + Math.abs(l + d + g - 3) < a + ) + return this.set(1, 0, 0, 0), this + e = Math.PI + const t = (l + 1) / 2, + o = (d + 1) / 2, + v = (g + 1) / 2, + y = (c + u) / 4, + x = (h + m) / 4, + _ = (p + f) / 4 + return ( + t > o && t > v + ? t < s + ? ((n = 0), (i = 0.707106781), (r = 0.707106781)) + : ((n = Math.sqrt(t)), (i = y / n), (r = x / n)) + : o > v + ? o < s + ? ((n = 0.707106781), (i = 0), (r = 0.707106781)) + : ((i = Math.sqrt(o)), (n = y / i), (r = _ / i)) + : v < s + ? ((n = 0.707106781), (i = 0.707106781), (r = 0)) + : ((r = Math.sqrt(v)), (n = x / r), (i = _ / r)), + this.set(n, i, r, e), + this + ) + } + let v = Math.sqrt((f - p) * (f - p) + (h - m) * (h - m) + (u - c) * (u - c)) + return ( + Math.abs(v) < 0.001 && (v = 1), + (this.x = (f - p) / v), + (this.y = (h - m) / v), + (this.z = (u - c) / v), + (this.w = Math.acos((l + d + g - 1) / 2)), + this + ) + } + min(t) { + return ( + (this.x = Math.min(this.x, t.x)), + (this.y = Math.min(this.y, t.y)), + (this.z = Math.min(this.z, t.z)), + (this.w = Math.min(this.w, t.w)), + this + ) + } + max(t) { + return ( + (this.x = Math.max(this.x, t.x)), + (this.y = Math.max(this.y, t.y)), + (this.z = Math.max(this.z, t.z)), + (this.w = Math.max(this.w, t.w)), + this + ) + } + clamp(t, e) { + return ( + (this.x = Math.max(t.x, Math.min(e.x, this.x))), + (this.y = Math.max(t.y, Math.min(e.y, this.y))), + (this.z = Math.max(t.z, Math.min(e.z, this.z))), + (this.w = Math.max(t.w, Math.min(e.w, this.w))), + this + ) + } + clampScalar(t, e) { + return ( + (this.x = Math.max(t, Math.min(e, this.x))), + (this.y = Math.max(t, Math.min(e, this.y))), + (this.z = Math.max(t, Math.min(e, this.z))), + (this.w = Math.max(t, Math.min(e, this.w))), + this + ) + } + clampLength(t, e) { + const n = this.length() + return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) + } + floor() { + return ( + (this.x = Math.floor(this.x)), + (this.y = Math.floor(this.y)), + (this.z = Math.floor(this.z)), + (this.w = Math.floor(this.w)), + this + ) + } + ceil() { + return ( + (this.x = Math.ceil(this.x)), + (this.y = Math.ceil(this.y)), + (this.z = Math.ceil(this.z)), + (this.w = Math.ceil(this.w)), + this + ) + } + round() { + return ( + (this.x = Math.round(this.x)), + (this.y = Math.round(this.y)), + (this.z = Math.round(this.z)), + (this.w = Math.round(this.w)), + this + ) + } + roundToZero() { + return ( + (this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x)), + (this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y)), + (this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z)), + (this.w = this.w < 0 ? Math.ceil(this.w) : Math.floor(this.w)), + this + ) + } + negate() { + return ( + (this.x = -this.x), (this.y = -this.y), (this.z = -this.z), (this.w = -this.w), this + ) + } + dot(t) { + return this.x * t.x + this.y * t.y + this.z * t.z + this.w * t.w + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + Math.abs(this.w) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + setLength(t) { + return this.normalize().multiplyScalar(t) + } + lerp(t, e) { + return ( + (this.x += (t.x - this.x) * e), + (this.y += (t.y - this.y) * e), + (this.z += (t.z - this.z) * e), + (this.w += (t.w - this.w) * e), + this + ) + } + lerpVectors(t, e, n) { + return ( + (this.x = t.x + (e.x - t.x) * n), + (this.y = t.y + (e.y - t.y) * n), + (this.z = t.z + (e.z - t.z) * n), + (this.w = t.w + (e.w - t.w) * n), + this + ) + } + equals(t) { + return t.x === this.x && t.y === this.y && t.z === this.z && t.w === this.w + } + fromArray(t, e = 0) { + return ( + (this.x = t[e]), (this.y = t[e + 1]), (this.z = t[e + 2]), (this.w = t[e + 3]), this + ) + } + toArray(t = [], e = 0) { + return (t[e] = this.x), (t[e + 1] = this.y), (t[e + 2] = this.z), (t[e + 3] = this.w), t + } + fromBufferAttribute(t, e, n) { + return ( + void 0 !== n && + console.warn('THREE.Vector4: offset has been removed from .fromBufferAttribute().'), + (this.x = t.getX(e)), + (this.y = t.getY(e)), + (this.z = t.getZ(e)), + (this.w = t.getW(e)), + this + ) + } + random() { + return ( + (this.x = Math.random()), + (this.y = Math.random()), + (this.z = Math.random()), + (this.w = Math.random()), + this + ) + } + } + ot.prototype.isVector4 = !0 + class lt extends W { + constructor(t, e, n = {}) { + super(), + (this.width = t), + (this.height = e), + (this.depth = 1), + (this.scissor = new ot(0, 0, t, e)), + (this.scissorTest = !1), + (this.viewport = new ot(0, 0, t, e)), + (this.texture = new st( + void 0, + n.mapping, + n.wrapS, + n.wrapT, + n.magFilter, + n.minFilter, + n.format, + n.type, + n.anisotropy, + n.encoding, + )), + (this.texture.image = { width: t, height: e, depth: 1 }), + (this.texture.generateMipmaps = void 0 !== n.generateMipmaps && n.generateMipmaps), + (this.texture.minFilter = void 0 !== n.minFilter ? n.minFilter : v), + (this.depthBuffer = void 0 === n.depthBuffer || n.depthBuffer), + (this.stencilBuffer = void 0 !== n.stencilBuffer && n.stencilBuffer), + (this.depthTexture = void 0 !== n.depthTexture ? n.depthTexture : null) + } + setTexture(t) { + ;(t.image = { width: this.width, height: this.height, depth: this.depth }), + (this.texture = t) + } + setSize(t, e, n = 1) { + ;(this.width === t && this.height === e && this.depth === n) || + ((this.width = t), + (this.height = e), + (this.depth = n), + (this.texture.image.width = t), + (this.texture.image.height = e), + (this.texture.image.depth = n), + this.dispose()), + this.viewport.set(0, 0, t, e), + this.scissor.set(0, 0, t, e) + } + clone() { + return new this.constructor().copy(this) + } + copy(t) { + return ( + (this.width = t.width), + (this.height = t.height), + (this.depth = t.depth), + this.viewport.copy(t.viewport), + (this.texture = t.texture.clone()), + (this.texture.image = { ...this.texture.image }), + (this.depthBuffer = t.depthBuffer), + (this.stencilBuffer = t.stencilBuffer), + (this.depthTexture = t.depthTexture), + this + ) + } + dispose() { + this.dispatchEvent({ type: 'dispose' }) + } + } + lt.prototype.isWebGLRenderTarget = !0 + ;(class extends lt { + constructor(t, e, n) { + super(t, e) + const i = this.texture + this.texture = [] + for (let r = 0; r < n; r++) this.texture[r] = i.clone() + } + setSize(t, e, n = 1) { + if (this.width !== t || this.height !== e || this.depth !== n) { + ;(this.width = t), (this.height = e), (this.depth = n) + for (let i = 0, r = this.texture.length; i < r; i++) + (this.texture[i].image.width = t), + (this.texture[i].image.height = e), + (this.texture[i].image.depth = n) + this.dispose() + } + return this.viewport.set(0, 0, t, e), this.scissor.set(0, 0, t, e), this + } + copy(t) { + this.dispose(), + (this.width = t.width), + (this.height = t.height), + (this.depth = t.depth), + this.viewport.set(0, 0, this.width, this.height), + this.scissor.set(0, 0, this.width, this.height), + (this.depthBuffer = t.depthBuffer), + (this.stencilBuffer = t.stencilBuffer), + (this.depthTexture = t.depthTexture), + (this.texture.length = 0) + for (let e = 0, n = t.texture.length; e < n; e++) this.texture[e] = t.texture[e].clone() + return this + } + }.prototype.isWebGLMultipleRenderTargets = !0) + class ct extends lt { + constructor(t, e, n) { + super(t, e, n), (this.samples = 4) + } + copy(t) { + return super.copy.call(this, t), (this.samples = t.samples), this + } + } + ct.prototype.isWebGLMultisampleRenderTarget = !0 + class ht { + constructor(t = 0, e = 0, n = 0, i = 1) { + ;(this._x = t), (this._y = e), (this._z = n), (this._w = i) + } + static slerp(t, e, n, i) { + return ( + console.warn( + 'THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.', + ), + n.slerpQuaternions(t, e, i) + ) + } + static slerpFlat(t, e, n, i, r, s, a) { + let o = n[i + 0], + l = n[i + 1], + c = n[i + 2], + h = n[i + 3] + const u = r[s + 0], + d = r[s + 1], + p = r[s + 2], + m = r[s + 3] + if (0 === a) return (t[e + 0] = o), (t[e + 1] = l), (t[e + 2] = c), void (t[e + 3] = h) + if (1 === a) return (t[e + 0] = u), (t[e + 1] = d), (t[e + 2] = p), void (t[e + 3] = m) + if (h !== m || o !== u || l !== d || c !== p) { + let t = 1 - a + const e = o * u + l * d + c * p + h * m, + n = e >= 0 ? 1 : -1, + i = 1 - e * e + if (i > Number.EPSILON) { + const r = Math.sqrt(i), + s = Math.atan2(r, e * n) + ;(t = Math.sin(t * s) / r), (a = Math.sin(a * s) / r) + } + const r = a * n + if ( + ((o = o * t + u * r), + (l = l * t + d * r), + (c = c * t + p * r), + (h = h * t + m * r), + t === 1 - a) + ) { + const t = 1 / Math.sqrt(o * o + l * l + c * c + h * h) + ;(o *= t), (l *= t), (c *= t), (h *= t) + } + } + ;(t[e] = o), (t[e + 1] = l), (t[e + 2] = c), (t[e + 3] = h) + } + static multiplyQuaternionsFlat(t, e, n, i, r, s) { + const a = n[i], + o = n[i + 1], + l = n[i + 2], + c = n[i + 3], + h = r[s], + u = r[s + 1], + d = r[s + 2], + p = r[s + 3] + return ( + (t[e] = a * p + c * h + o * d - l * u), + (t[e + 1] = o * p + c * u + l * h - a * d), + (t[e + 2] = l * p + c * d + a * u - o * h), + (t[e + 3] = c * p - a * h - o * u - l * d), + t + ) + } + get x() { + return this._x + } + set x(t) { + ;(this._x = t), this._onChangeCallback() + } + get y() { + return this._y + } + set y(t) { + ;(this._y = t), this._onChangeCallback() + } + get z() { + return this._z + } + set z(t) { + ;(this._z = t), this._onChangeCallback() + } + get w() { + return this._w + } + set w(t) { + ;(this._w = t), this._onChangeCallback() + } + set(t, e, n, i) { + return ( + (this._x = t), + (this._y = e), + (this._z = n), + (this._w = i), + this._onChangeCallback(), + this + ) + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._w) + } + copy(t) { + return ( + (this._x = t.x), + (this._y = t.y), + (this._z = t.z), + (this._w = t.w), + this._onChangeCallback(), + this + ) + } + setFromEuler(t, e) { + if (!t || !t.isEuler) + throw new Error( + 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.', + ) + const n = t._x, + i = t._y, + r = t._z, + s = t._order, + a = Math.cos, + o = Math.sin, + l = a(n / 2), + c = a(i / 2), + h = a(r / 2), + u = o(n / 2), + d = o(i / 2), + p = o(r / 2) + switch (s) { + case 'XYZ': + ;(this._x = u * c * h + l * d * p), + (this._y = l * d * h - u * c * p), + (this._z = l * c * p + u * d * h), + (this._w = l * c * h - u * d * p) + break + case 'YXZ': + ;(this._x = u * c * h + l * d * p), + (this._y = l * d * h - u * c * p), + (this._z = l * c * p - u * d * h), + (this._w = l * c * h + u * d * p) + break + case 'ZXY': + ;(this._x = u * c * h - l * d * p), + (this._y = l * d * h + u * c * p), + (this._z = l * c * p + u * d * h), + (this._w = l * c * h - u * d * p) + break + case 'ZYX': + ;(this._x = u * c * h - l * d * p), + (this._y = l * d * h + u * c * p), + (this._z = l * c * p - u * d * h), + (this._w = l * c * h + u * d * p) + break + case 'YZX': + ;(this._x = u * c * h + l * d * p), + (this._y = l * d * h + u * c * p), + (this._z = l * c * p - u * d * h), + (this._w = l * c * h - u * d * p) + break + case 'XZY': + ;(this._x = u * c * h - l * d * p), + (this._y = l * d * h - u * c * p), + (this._z = l * c * p + u * d * h), + (this._w = l * c * h + u * d * p) + break + default: + console.warn('THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + s) + } + return !1 !== e && this._onChangeCallback(), this + } + setFromAxisAngle(t, e) { + const n = e / 2, + i = Math.sin(n) + return ( + (this._x = t.x * i), + (this._y = t.y * i), + (this._z = t.z * i), + (this._w = Math.cos(n)), + this._onChangeCallback(), + this + ) + } + setFromRotationMatrix(t) { + const e = t.elements, + n = e[0], + i = e[4], + r = e[8], + s = e[1], + a = e[5], + o = e[9], + l = e[2], + c = e[6], + h = e[10], + u = n + a + h + if (u > 0) { + const t = 0.5 / Math.sqrt(u + 1) + ;(this._w = 0.25 / t), + (this._x = (c - o) * t), + (this._y = (r - l) * t), + (this._z = (s - i) * t) + } else if (n > a && n > h) { + const t = 2 * Math.sqrt(1 + n - a - h) + ;(this._w = (c - o) / t), + (this._x = 0.25 * t), + (this._y = (i + s) / t), + (this._z = (r + l) / t) + } else if (a > h) { + const t = 2 * Math.sqrt(1 + a - n - h) + ;(this._w = (r - l) / t), + (this._x = (i + s) / t), + (this._y = 0.25 * t), + (this._z = (o + c) / t) + } else { + const t = 2 * Math.sqrt(1 + h - n - a) + ;(this._w = (s - i) / t), + (this._x = (r + l) / t), + (this._y = (o + c) / t), + (this._z = 0.25 * t) + } + return this._onChangeCallback(), this + } + setFromUnitVectors(t, e) { + let n = t.dot(e) + 1 + return ( + n < Number.EPSILON + ? ((n = 0), + Math.abs(t.x) > Math.abs(t.z) + ? ((this._x = -t.y), (this._y = t.x), (this._z = 0), (this._w = n)) + : ((this._x = 0), (this._y = -t.z), (this._z = t.y), (this._w = n))) + : ((this._x = t.y * e.z - t.z * e.y), + (this._y = t.z * e.x - t.x * e.z), + (this._z = t.x * e.y - t.y * e.x), + (this._w = n)), + this.normalize() + ) + } + angleTo(t) { + return 2 * Math.acos(Math.abs(J(this.dot(t), -1, 1))) + } + rotateTowards(t, e) { + const n = this.angleTo(t) + if (0 === n) return this + const i = Math.min(1, e / n) + return this.slerp(t, i), this + } + identity() { + return this.set(0, 0, 0, 1) + } + invert() { + return this.conjugate() + } + conjugate() { + return (this._x *= -1), (this._y *= -1), (this._z *= -1), this._onChangeCallback(), this + } + dot(t) { + return this._x * t._x + this._y * t._y + this._z * t._z + this._w * t._w + } + lengthSq() { + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w + } + length() { + return Math.sqrt( + this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w, + ) + } + normalize() { + let t = this.length() + return ( + 0 === t + ? ((this._x = 0), (this._y = 0), (this._z = 0), (this._w = 1)) + : ((t = 1 / t), + (this._x = this._x * t), + (this._y = this._y * t), + (this._z = this._z * t), + (this._w = this._w * t)), + this._onChangeCallback(), + this + ) + } + multiply(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.', + ), + this.multiplyQuaternions(t, e)) + : this.multiplyQuaternions(this, t) + } + premultiply(t) { + return this.multiplyQuaternions(t, this) + } + multiplyQuaternions(t, e) { + const n = t._x, + i = t._y, + r = t._z, + s = t._w, + a = e._x, + o = e._y, + l = e._z, + c = e._w + return ( + (this._x = n * c + s * a + i * l - r * o), + (this._y = i * c + s * o + r * a - n * l), + (this._z = r * c + s * l + n * o - i * a), + (this._w = s * c - n * a - i * o - r * l), + this._onChangeCallback(), + this + ) + } + slerp(t, e) { + if (0 === e) return this + if (1 === e) return this.copy(t) + const n = this._x, + i = this._y, + r = this._z, + s = this._w + let a = s * t._w + n * t._x + i * t._y + r * t._z + if ( + (a < 0 + ? ((this._w = -t._w), + (this._x = -t._x), + (this._y = -t._y), + (this._z = -t._z), + (a = -a)) + : this.copy(t), + a >= 1) + ) + return (this._w = s), (this._x = n), (this._y = i), (this._z = r), this + const o = 1 - a * a + if (o <= Number.EPSILON) { + const t = 1 - e + return ( + (this._w = t * s + e * this._w), + (this._x = t * n + e * this._x), + (this._y = t * i + e * this._y), + (this._z = t * r + e * this._z), + this.normalize(), + this._onChangeCallback(), + this + ) + } + const l = Math.sqrt(o), + c = Math.atan2(l, a), + h = Math.sin((1 - e) * c) / l, + u = Math.sin(e * c) / l + return ( + (this._w = s * h + this._w * u), + (this._x = n * h + this._x * u), + (this._y = i * h + this._y * u), + (this._z = r * h + this._z * u), + this._onChangeCallback(), + this + ) + } + slerpQuaternions(t, e, n) { + this.copy(t).slerp(e, n) + } + equals(t) { + return t._x === this._x && t._y === this._y && t._z === this._z && t._w === this._w + } + fromArray(t, e = 0) { + return ( + (this._x = t[e]), + (this._y = t[e + 1]), + (this._z = t[e + 2]), + (this._w = t[e + 3]), + this._onChangeCallback(), + this + ) + } + toArray(t = [], e = 0) { + return ( + (t[e] = this._x), (t[e + 1] = this._y), (t[e + 2] = this._z), (t[e + 3] = this._w), t + ) + } + fromBufferAttribute(t, e) { + return ( + (this._x = t.getX(e)), + (this._y = t.getY(e)), + (this._z = t.getZ(e)), + (this._w = t.getW(e)), + this + ) + } + _onChange(t) { + return (this._onChangeCallback = t), this + } + _onChangeCallback() {} + } + ht.prototype.isQuaternion = !0 + class ut { + constructor(t = 0, e = 0, n = 0) { + ;(this.x = t), (this.y = e), (this.z = n) + } + set(t, e, n) { + return void 0 === n && (n = this.z), (this.x = t), (this.y = e), (this.z = n), this + } + setScalar(t) { + return (this.x = t), (this.y = t), (this.z = t), this + } + setX(t) { + return (this.x = t), this + } + setY(t) { + return (this.y = t), this + } + setZ(t) { + return (this.z = t), this + } + setComponent(t, e) { + switch (t) { + case 0: + this.x = e + break + case 1: + this.y = e + break + case 2: + this.z = e + break + default: + throw new Error('index is out of range: ' + t) + } + return this + } + getComponent(t) { + switch (t) { + case 0: + return this.x + case 1: + return this.y + case 2: + return this.z + default: + throw new Error('index is out of range: ' + t) + } + } + clone() { + return new this.constructor(this.x, this.y, this.z) + } + copy(t) { + return (this.x = t.x), (this.y = t.y), (this.z = t.z), this + } + add(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.', + ), + this.addVectors(t, e)) + : ((this.x += t.x), (this.y += t.y), (this.z += t.z), this) + } + addScalar(t) { + return (this.x += t), (this.y += t), (this.z += t), this + } + addVectors(t, e) { + return (this.x = t.x + e.x), (this.y = t.y + e.y), (this.z = t.z + e.z), this + } + addScaledVector(t, e) { + return (this.x += t.x * e), (this.y += t.y * e), (this.z += t.z * e), this + } + sub(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.', + ), + this.subVectors(t, e)) + : ((this.x -= t.x), (this.y -= t.y), (this.z -= t.z), this) + } + subScalar(t) { + return (this.x -= t), (this.y -= t), (this.z -= t), this + } + subVectors(t, e) { + return (this.x = t.x - e.x), (this.y = t.y - e.y), (this.z = t.z - e.z), this + } + multiply(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.', + ), + this.multiplyVectors(t, e)) + : ((this.x *= t.x), (this.y *= t.y), (this.z *= t.z), this) + } + multiplyScalar(t) { + return (this.x *= t), (this.y *= t), (this.z *= t), this + } + multiplyVectors(t, e) { + return (this.x = t.x * e.x), (this.y = t.y * e.y), (this.z = t.z * e.z), this + } + applyEuler(t) { + return ( + (t && t.isEuler) || + console.error( + 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.', + ), + this.applyQuaternion(pt.setFromEuler(t)) + ) + } + applyAxisAngle(t, e) { + return this.applyQuaternion(pt.setFromAxisAngle(t, e)) + } + applyMatrix3(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.elements + return ( + (this.x = r[0] * e + r[3] * n + r[6] * i), + (this.y = r[1] * e + r[4] * n + r[7] * i), + (this.z = r[2] * e + r[5] * n + r[8] * i), + this + ) + } + applyNormalMatrix(t) { + return this.applyMatrix3(t).normalize() + } + applyMatrix4(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.elements, + s = 1 / (r[3] * e + r[7] * n + r[11] * i + r[15]) + return ( + (this.x = (r[0] * e + r[4] * n + r[8] * i + r[12]) * s), + (this.y = (r[1] * e + r[5] * n + r[9] * i + r[13]) * s), + (this.z = (r[2] * e + r[6] * n + r[10] * i + r[14]) * s), + this + ) + } + applyQuaternion(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.x, + s = t.y, + a = t.z, + o = t.w, + l = o * e + s * i - a * n, + c = o * n + a * e - r * i, + h = o * i + r * n - s * e, + u = -r * e - s * n - a * i + return ( + (this.x = l * o + u * -r + c * -a - h * -s), + (this.y = c * o + u * -s + h * -r - l * -a), + (this.z = h * o + u * -a + l * -s - c * -r), + this + ) + } + project(t) { + return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix) + } + unproject(t) { + return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld) + } + transformDirection(t) { + const e = this.x, + n = this.y, + i = this.z, + r = t.elements + return ( + (this.x = r[0] * e + r[4] * n + r[8] * i), + (this.y = r[1] * e + r[5] * n + r[9] * i), + (this.z = r[2] * e + r[6] * n + r[10] * i), + this.normalize() + ) + } + divide(t) { + return (this.x /= t.x), (this.y /= t.y), (this.z /= t.z), this + } + divideScalar(t) { + return this.multiplyScalar(1 / t) + } + min(t) { + return ( + (this.x = Math.min(this.x, t.x)), + (this.y = Math.min(this.y, t.y)), + (this.z = Math.min(this.z, t.z)), + this + ) + } + max(t) { + return ( + (this.x = Math.max(this.x, t.x)), + (this.y = Math.max(this.y, t.y)), + (this.z = Math.max(this.z, t.z)), + this + ) + } + clamp(t, e) { + return ( + (this.x = Math.max(t.x, Math.min(e.x, this.x))), + (this.y = Math.max(t.y, Math.min(e.y, this.y))), + (this.z = Math.max(t.z, Math.min(e.z, this.z))), + this + ) + } + clampScalar(t, e) { + return ( + (this.x = Math.max(t, Math.min(e, this.x))), + (this.y = Math.max(t, Math.min(e, this.y))), + (this.z = Math.max(t, Math.min(e, this.z))), + this + ) + } + clampLength(t, e) { + const n = this.length() + return this.divideScalar(n || 1).multiplyScalar(Math.max(t, Math.min(e, n))) + } + floor() { + return ( + (this.x = Math.floor(this.x)), + (this.y = Math.floor(this.y)), + (this.z = Math.floor(this.z)), + this + ) + } + ceil() { + return ( + (this.x = Math.ceil(this.x)), + (this.y = Math.ceil(this.y)), + (this.z = Math.ceil(this.z)), + this + ) + } + round() { + return ( + (this.x = Math.round(this.x)), + (this.y = Math.round(this.y)), + (this.z = Math.round(this.z)), + this + ) + } + roundToZero() { + return ( + (this.x = this.x < 0 ? Math.ceil(this.x) : Math.floor(this.x)), + (this.y = this.y < 0 ? Math.ceil(this.y) : Math.floor(this.y)), + (this.z = this.z < 0 ? Math.ceil(this.z) : Math.floor(this.z)), + this + ) + } + negate() { + return (this.x = -this.x), (this.y = -this.y), (this.z = -this.z), this + } + dot(t) { + return this.x * t.x + this.y * t.y + this.z * t.z + } + lengthSq() { + return this.x * this.x + this.y * this.y + this.z * this.z + } + length() { + return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z) + } + manhattanLength() { + return Math.abs(this.x) + Math.abs(this.y) + Math.abs(this.z) + } + normalize() { + return this.divideScalar(this.length() || 1) + } + setLength(t) { + return this.normalize().multiplyScalar(t) + } + lerp(t, e) { + return ( + (this.x += (t.x - this.x) * e), + (this.y += (t.y - this.y) * e), + (this.z += (t.z - this.z) * e), + this + ) + } + lerpVectors(t, e, n) { + return ( + (this.x = t.x + (e.x - t.x) * n), + (this.y = t.y + (e.y - t.y) * n), + (this.z = t.z + (e.z - t.z) * n), + this + ) + } + cross(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.', + ), + this.crossVectors(t, e)) + : this.crossVectors(this, t) + } + crossVectors(t, e) { + const n = t.x, + i = t.y, + r = t.z, + s = e.x, + a = e.y, + o = e.z + return (this.x = i * o - r * a), (this.y = r * s - n * o), (this.z = n * a - i * s), this + } + projectOnVector(t) { + const e = t.lengthSq() + if (0 === e) return this.set(0, 0, 0) + const n = t.dot(this) / e + return this.copy(t).multiplyScalar(n) + } + projectOnPlane(t) { + return dt.copy(this).projectOnVector(t), this.sub(dt) + } + reflect(t) { + return this.sub(dt.copy(t).multiplyScalar(2 * this.dot(t))) + } + angleTo(t) { + const e = Math.sqrt(this.lengthSq() * t.lengthSq()) + if (0 === e) return Math.PI / 2 + const n = this.dot(t) / e + return Math.acos(J(n, -1, 1)) + } + distanceTo(t) { + return Math.sqrt(this.distanceToSquared(t)) + } + distanceToSquared(t) { + const e = this.x - t.x, + n = this.y - t.y, + i = this.z - t.z + return e * e + n * n + i * i + } + manhattanDistanceTo(t) { + return Math.abs(this.x - t.x) + Math.abs(this.y - t.y) + Math.abs(this.z - t.z) + } + setFromSpherical(t) { + return this.setFromSphericalCoords(t.radius, t.phi, t.theta) + } + setFromSphericalCoords(t, e, n) { + const i = Math.sin(e) * t + return ( + (this.x = i * Math.sin(n)), (this.y = Math.cos(e) * t), (this.z = i * Math.cos(n)), this + ) + } + setFromCylindrical(t) { + return this.setFromCylindricalCoords(t.radius, t.theta, t.y) + } + setFromCylindricalCoords(t, e, n) { + return (this.x = t * Math.sin(e)), (this.y = n), (this.z = t * Math.cos(e)), this + } + setFromMatrixPosition(t) { + const e = t.elements + return (this.x = e[12]), (this.y = e[13]), (this.z = e[14]), this + } + setFromMatrixScale(t) { + const e = this.setFromMatrixColumn(t, 0).length(), + n = this.setFromMatrixColumn(t, 1).length(), + i = this.setFromMatrixColumn(t, 2).length() + return (this.x = e), (this.y = n), (this.z = i), this + } + setFromMatrixColumn(t, e) { + return this.fromArray(t.elements, 4 * e) + } + setFromMatrix3Column(t, e) { + return this.fromArray(t.elements, 3 * e) + } + equals(t) { + return t.x === this.x && t.y === this.y && t.z === this.z + } + fromArray(t, e = 0) { + return (this.x = t[e]), (this.y = t[e + 1]), (this.z = t[e + 2]), this + } + toArray(t = [], e = 0) { + return (t[e] = this.x), (t[e + 1] = this.y), (t[e + 2] = this.z), t + } + fromBufferAttribute(t, e, n) { + return ( + void 0 !== n && + console.warn('THREE.Vector3: offset has been removed from .fromBufferAttribute().'), + (this.x = t.getX(e)), + (this.y = t.getY(e)), + (this.z = t.getZ(e)), + this + ) + } + random() { + return (this.x = Math.random()), (this.y = Math.random()), (this.z = Math.random()), this + } + } + ut.prototype.isVector3 = !0 + const dt = new ut(), + pt = new ht() + class mt { + constructor(t = new ut(1 / 0, 1 / 0, 1 / 0), e = new ut(-1 / 0, -1 / 0, -1 / 0)) { + ;(this.min = t), (this.max = e) + } + set(t, e) { + return this.min.copy(t), this.max.copy(e), this + } + setFromArray(t) { + let e = 1 / 0, + n = 1 / 0, + i = 1 / 0, + r = -1 / 0, + s = -1 / 0, + a = -1 / 0 + for (let o = 0, l = t.length; o < l; o += 3) { + const l = t[o], + c = t[o + 1], + h = t[o + 2] + l < e && (e = l), + c < n && (n = c), + h < i && (i = h), + l > r && (r = l), + c > s && (s = c), + h > a && (a = h) + } + return this.min.set(e, n, i), this.max.set(r, s, a), this + } + setFromBufferAttribute(t) { + let e = 1 / 0, + n = 1 / 0, + i = 1 / 0, + r = -1 / 0, + s = -1 / 0, + a = -1 / 0 + for (let o = 0, l = t.count; o < l; o++) { + const l = t.getX(o), + c = t.getY(o), + h = t.getZ(o) + l < e && (e = l), + c < n && (n = c), + h < i && (i = h), + l > r && (r = l), + c > s && (s = c), + h > a && (a = h) + } + return this.min.set(e, n, i), this.max.set(r, s, a), this + } + setFromPoints(t) { + this.makeEmpty() + for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]) + return this + } + setFromCenterAndSize(t, e) { + const n = gt.copy(e).multiplyScalar(0.5) + return this.min.copy(t).sub(n), this.max.copy(t).add(n), this + } + setFromObject(t) { + return this.makeEmpty(), this.expandByObject(t) + } + clone() { + return new this.constructor().copy(this) + } + copy(t) { + return this.min.copy(t.min), this.max.copy(t.max), this + } + makeEmpty() { + return ( + (this.min.x = this.min.y = this.min.z = 1 / 0), + (this.max.x = this.max.y = this.max.z = -1 / 0), + this + ) + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y || this.max.z < this.min.z + } + getCenter(t) { + return this.isEmpty() + ? t.set(0, 0, 0) + : t.addVectors(this.min, this.max).multiplyScalar(0.5) + } + getSize(t) { + return this.isEmpty() ? t.set(0, 0, 0) : t.subVectors(this.max, this.min) + } + expandByPoint(t) { + return this.min.min(t), this.max.max(t), this + } + expandByVector(t) { + return this.min.sub(t), this.max.add(t), this + } + expandByScalar(t) { + return this.min.addScalar(-t), this.max.addScalar(t), this + } + expandByObject(t) { + t.updateWorldMatrix(!1, !1) + const e = t.geometry + void 0 !== e && + (null === e.boundingBox && e.computeBoundingBox(), + vt.copy(e.boundingBox), + vt.applyMatrix4(t.matrixWorld), + this.union(vt)) + const n = t.children + for (let i = 0, r = n.length; i < r; i++) this.expandByObject(n[i]) + return this + } + containsPoint(t) { + return !( + t.x < this.min.x || + t.x > this.max.x || + t.y < this.min.y || + t.y > this.max.y || + t.z < this.min.z || + t.z > this.max.z + ) + } + containsBox(t) { + return ( + this.min.x <= t.min.x && + t.max.x <= this.max.x && + this.min.y <= t.min.y && + t.max.y <= this.max.y && + this.min.z <= t.min.z && + t.max.z <= this.max.z + ) + } + getParameter(t, e) { + return e.set( + (t.x - this.min.x) / (this.max.x - this.min.x), + (t.y - this.min.y) / (this.max.y - this.min.y), + (t.z - this.min.z) / (this.max.z - this.min.z), + ) + } + intersectsBox(t) { + return !( + t.max.x < this.min.x || + t.min.x > this.max.x || + t.max.y < this.min.y || + t.min.y > this.max.y || + t.max.z < this.min.z || + t.min.z > this.max.z + ) + } + intersectsSphere(t) { + return ( + this.clampPoint(t.center, gt), gt.distanceToSquared(t.center) <= t.radius * t.radius + ) + } + intersectsPlane(t) { + let e, n + return ( + t.normal.x > 0 + ? ((e = t.normal.x * this.min.x), (n = t.normal.x * this.max.x)) + : ((e = t.normal.x * this.max.x), (n = t.normal.x * this.min.x)), + t.normal.y > 0 + ? ((e += t.normal.y * this.min.y), (n += t.normal.y * this.max.y)) + : ((e += t.normal.y * this.max.y), (n += t.normal.y * this.min.y)), + t.normal.z > 0 + ? ((e += t.normal.z * this.min.z), (n += t.normal.z * this.max.z)) + : ((e += t.normal.z * this.max.z), (n += t.normal.z * this.min.z)), + e <= -t.constant && n >= -t.constant + ) + } + intersectsTriangle(t) { + if (this.isEmpty()) return !1 + this.getCenter(St), + Tt.subVectors(this.max, St), + yt.subVectors(t.a, St), + xt.subVectors(t.b, St), + _t.subVectors(t.c, St), + bt.subVectors(xt, yt), + Mt.subVectors(_t, xt), + wt.subVectors(yt, _t) + let e = [ + 0, + -bt.z, + bt.y, + 0, + -Mt.z, + Mt.y, + 0, + -wt.z, + wt.y, + bt.z, + 0, + -bt.x, + Mt.z, + 0, + -Mt.x, + wt.z, + 0, + -wt.x, + -bt.y, + bt.x, + 0, + -Mt.y, + Mt.x, + 0, + -wt.y, + wt.x, + 0, + ] + return ( + !!At(e, yt, xt, _t, Tt) && + ((e = [1, 0, 0, 0, 1, 0, 0, 0, 1]), + !!At(e, yt, xt, _t, Tt) && + (Et.crossVectors(bt, Mt), (e = [Et.x, Et.y, Et.z]), At(e, yt, xt, _t, Tt))) + ) + } + clampPoint(t, e) { + return e.copy(t).clamp(this.min, this.max) + } + distanceToPoint(t) { + return gt.copy(t).clamp(this.min, this.max).sub(t).length() + } + getBoundingSphere(t) { + return this.getCenter(t.center), (t.radius = 0.5 * this.getSize(gt).length()), t + } + intersect(t) { + return this.min.max(t.min), this.max.min(t.max), this.isEmpty() && this.makeEmpty(), this + } + union(t) { + return this.min.min(t.min), this.max.max(t.max), this + } + applyMatrix4(t) { + return ( + this.isEmpty() || + (ft[0].set(this.min.x, this.min.y, this.min.z).applyMatrix4(t), + ft[1].set(this.min.x, this.min.y, this.max.z).applyMatrix4(t), + ft[2].set(this.min.x, this.max.y, this.min.z).applyMatrix4(t), + ft[3].set(this.min.x, this.max.y, this.max.z).applyMatrix4(t), + ft[4].set(this.max.x, this.min.y, this.min.z).applyMatrix4(t), + ft[5].set(this.max.x, this.min.y, this.max.z).applyMatrix4(t), + ft[6].set(this.max.x, this.max.y, this.min.z).applyMatrix4(t), + ft[7].set(this.max.x, this.max.y, this.max.z).applyMatrix4(t), + this.setFromPoints(ft)), + this + ) + } + translate(t) { + return this.min.add(t), this.max.add(t), this + } + equals(t) { + return t.min.equals(this.min) && t.max.equals(this.max) + } + } + mt.prototype.isBox3 = !0 + const ft = [new ut(), new ut(), new ut(), new ut(), new ut(), new ut(), new ut(), new ut()], + gt = new ut(), + vt = new mt(), + yt = new ut(), + xt = new ut(), + _t = new ut(), + bt = new ut(), + Mt = new ut(), + wt = new ut(), + St = new ut(), + Tt = new ut(), + Et = new ut(), + Lt = new ut() + function At(t, e, n, i, r) { + for (let s = 0, a = t.length - 3; s <= a; s += 3) { + Lt.fromArray(t, s) + const a = r.x * Math.abs(Lt.x) + r.y * Math.abs(Lt.y) + r.z * Math.abs(Lt.z), + o = e.dot(Lt), + l = n.dot(Lt), + c = i.dot(Lt) + if (Math.max(-Math.max(o, l, c), Math.min(o, l, c)) > a) return !1 + } + return !0 + } + const Rt = new mt(), + Ct = new ut(), + Pt = new ut(), + Dt = new ut() + class It { + constructor(t = new ut(), e = -1) { + ;(this.center = t), (this.radius = e) + } + set(t, e) { + return this.center.copy(t), (this.radius = e), this + } + setFromPoints(t, e) { + const n = this.center + void 0 !== e ? n.copy(e) : Rt.setFromPoints(t).getCenter(n) + let i = 0 + for (let r = 0, s = t.length; r < s; r++) i = Math.max(i, n.distanceToSquared(t[r])) + return (this.radius = Math.sqrt(i)), this + } + copy(t) { + return this.center.copy(t.center), (this.radius = t.radius), this + } + isEmpty() { + return this.radius < 0 + } + makeEmpty() { + return this.center.set(0, 0, 0), (this.radius = -1), this + } + containsPoint(t) { + return t.distanceToSquared(this.center) <= this.radius * this.radius + } + distanceToPoint(t) { + return t.distanceTo(this.center) - this.radius + } + intersectsSphere(t) { + const e = this.radius + t.radius + return t.center.distanceToSquared(this.center) <= e * e + } + intersectsBox(t) { + return t.intersectsSphere(this) + } + intersectsPlane(t) { + return Math.abs(t.distanceToPoint(this.center)) <= this.radius + } + clampPoint(t, e) { + const n = this.center.distanceToSquared(t) + return ( + e.copy(t), + n > this.radius * this.radius && + (e.sub(this.center).normalize(), e.multiplyScalar(this.radius).add(this.center)), + e + ) + } + getBoundingBox(t) { + return this.isEmpty() + ? (t.makeEmpty(), t) + : (t.set(this.center, this.center), t.expandByScalar(this.radius), t) + } + applyMatrix4(t) { + return ( + this.center.applyMatrix4(t), (this.radius = this.radius * t.getMaxScaleOnAxis()), this + ) + } + translate(t) { + return this.center.add(t), this + } + expandByPoint(t) { + Dt.subVectors(t, this.center) + const e = Dt.lengthSq() + if (e > this.radius * this.radius) { + const t = Math.sqrt(e), + n = 0.5 * (t - this.radius) + this.center.add(Dt.multiplyScalar(n / t)), (this.radius += n) + } + return this + } + union(t) { + return ( + Pt.subVectors(t.center, this.center).normalize().multiplyScalar(t.radius), + this.expandByPoint(Ct.copy(t.center).add(Pt)), + this.expandByPoint(Ct.copy(t.center).sub(Pt)), + this + ) + } + equals(t) { + return t.center.equals(this.center) && t.radius === this.radius + } + clone() { + return new this.constructor().copy(this) + } + } + const Nt = new ut(), + zt = new ut(), + Ot = new ut(), + Bt = new ut(), + Ft = new ut(), + Ut = new ut(), + Ht = new ut() + class Gt { + constructor(t = new ut(), e = new ut(0, 0, -1)) { + ;(this.origin = t), (this.direction = e) + } + set(t, e) { + return this.origin.copy(t), this.direction.copy(e), this + } + copy(t) { + return this.origin.copy(t.origin), this.direction.copy(t.direction), this + } + at(t, e) { + return e.copy(this.direction).multiplyScalar(t).add(this.origin) + } + lookAt(t) { + return this.direction.copy(t).sub(this.origin).normalize(), this + } + recast(t) { + return this.origin.copy(this.at(t, Nt)), this + } + closestPointToPoint(t, e) { + e.subVectors(t, this.origin) + const n = e.dot(this.direction) + return n < 0 + ? e.copy(this.origin) + : e.copy(this.direction).multiplyScalar(n).add(this.origin) + } + distanceToPoint(t) { + return Math.sqrt(this.distanceSqToPoint(t)) + } + distanceSqToPoint(t) { + const e = Nt.subVectors(t, this.origin).dot(this.direction) + return e < 0 + ? this.origin.distanceToSquared(t) + : (Nt.copy(this.direction).multiplyScalar(e).add(this.origin), Nt.distanceToSquared(t)) + } + distanceSqToSegment(t, e, n, i) { + zt.copy(t).add(e).multiplyScalar(0.5), + Ot.copy(e).sub(t).normalize(), + Bt.copy(this.origin).sub(zt) + const r = 0.5 * t.distanceTo(e), + s = -this.direction.dot(Ot), + a = Bt.dot(this.direction), + o = -Bt.dot(Ot), + l = Bt.lengthSq(), + c = Math.abs(1 - s * s) + let h, u, d, p + if (c > 0) + if (((h = s * o - a), (u = s * a - o), (p = r * c), h >= 0)) + if (u >= -p) + if (u <= p) { + const t = 1 / c + ;(h *= t), (u *= t), (d = h * (h + s * u + 2 * a) + u * (s * h + u + 2 * o) + l) + } else (u = r), (h = Math.max(0, -(s * u + a))), (d = -h * h + u * (u + 2 * o) + l) + else (u = -r), (h = Math.max(0, -(s * u + a))), (d = -h * h + u * (u + 2 * o) + l) + else + u <= -p + ? ((h = Math.max(0, -(-s * r + a))), + (u = h > 0 ? -r : Math.min(Math.max(-r, -o), r)), + (d = -h * h + u * (u + 2 * o) + l)) + : u <= p + ? ((h = 0), (u = Math.min(Math.max(-r, -o), r)), (d = u * (u + 2 * o) + l)) + : ((h = Math.max(0, -(s * r + a))), + (u = h > 0 ? r : Math.min(Math.max(-r, -o), r)), + (d = -h * h + u * (u + 2 * o) + l)) + else + (u = s > 0 ? -r : r), + (h = Math.max(0, -(s * u + a))), + (d = -h * h + u * (u + 2 * o) + l) + return ( + n && n.copy(this.direction).multiplyScalar(h).add(this.origin), + i && i.copy(Ot).multiplyScalar(u).add(zt), + d + ) + } + intersectSphere(t, e) { + Nt.subVectors(t.center, this.origin) + const n = Nt.dot(this.direction), + i = Nt.dot(Nt) - n * n, + r = t.radius * t.radius + if (i > r) return null + const s = Math.sqrt(r - i), + a = n - s, + o = n + s + return a < 0 && o < 0 ? null : a < 0 ? this.at(o, e) : this.at(a, e) + } + intersectsSphere(t) { + return this.distanceSqToPoint(t.center) <= t.radius * t.radius + } + distanceToPlane(t) { + const e = t.normal.dot(this.direction) + if (0 === e) return 0 === t.distanceToPoint(this.origin) ? 0 : null + const n = -(this.origin.dot(t.normal) + t.constant) / e + return n >= 0 ? n : null + } + intersectPlane(t, e) { + const n = this.distanceToPlane(t) + return null === n ? null : this.at(n, e) + } + intersectsPlane(t) { + const e = t.distanceToPoint(this.origin) + if (0 === e) return !0 + return t.normal.dot(this.direction) * e < 0 + } + intersectBox(t, e) { + let n, i, r, s, a, o + const l = 1 / this.direction.x, + c = 1 / this.direction.y, + h = 1 / this.direction.z, + u = this.origin + return ( + l >= 0 + ? ((n = (t.min.x - u.x) * l), (i = (t.max.x - u.x) * l)) + : ((n = (t.max.x - u.x) * l), (i = (t.min.x - u.x) * l)), + c >= 0 + ? ((r = (t.min.y - u.y) * c), (s = (t.max.y - u.y) * c)) + : ((r = (t.max.y - u.y) * c), (s = (t.min.y - u.y) * c)), + n > s || r > i + ? null + : ((r > n || n !== n) && (n = r), + (s < i || i !== i) && (i = s), + h >= 0 + ? ((a = (t.min.z - u.z) * h), (o = (t.max.z - u.z) * h)) + : ((a = (t.max.z - u.z) * h), (o = (t.min.z - u.z) * h)), + n > o || a > i + ? null + : ((a > n || n !== n) && (n = a), + (o < i || i !== i) && (i = o), + i < 0 ? null : this.at(n >= 0 ? n : i, e))) + ) + } + intersectsBox(t) { + return null !== this.intersectBox(t, Nt) + } + intersectTriangle(t, e, n, i, r) { + Ft.subVectors(e, t), Ut.subVectors(n, t), Ht.crossVectors(Ft, Ut) + let s, + a = this.direction.dot(Ht) + if (a > 0) { + if (i) return null + s = 1 + } else { + if (!(a < 0)) return null + ;(s = -1), (a = -a) + } + Bt.subVectors(this.origin, t) + const o = s * this.direction.dot(Ut.crossVectors(Bt, Ut)) + if (o < 0) return null + const l = s * this.direction.dot(Ft.cross(Bt)) + if (l < 0) return null + if (o + l > a) return null + const c = -s * Bt.dot(Ht) + return c < 0 ? null : this.at(c / a, r) + } + applyMatrix4(t) { + return this.origin.applyMatrix4(t), this.direction.transformDirection(t), this + } + equals(t) { + return t.origin.equals(this.origin) && t.direction.equals(this.direction) + } + clone() { + return new this.constructor().copy(this) + } + } + class Vt { + constructor() { + ;(this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]), + arguments.length > 0 && + console.error( + 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.', + ) + } + set(t, e, n, i, r, s, a, o, l, c, h, u, d, p, m, f) { + const g = this.elements + return ( + (g[0] = t), + (g[4] = e), + (g[8] = n), + (g[12] = i), + (g[1] = r), + (g[5] = s), + (g[9] = a), + (g[13] = o), + (g[2] = l), + (g[6] = c), + (g[10] = h), + (g[14] = u), + (g[3] = d), + (g[7] = p), + (g[11] = m), + (g[15] = f), + this + ) + } + identity() { + return this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this + } + clone() { + return new Vt().fromArray(this.elements) + } + copy(t) { + const e = this.elements, + n = t.elements + return ( + (e[0] = n[0]), + (e[1] = n[1]), + (e[2] = n[2]), + (e[3] = n[3]), + (e[4] = n[4]), + (e[5] = n[5]), + (e[6] = n[6]), + (e[7] = n[7]), + (e[8] = n[8]), + (e[9] = n[9]), + (e[10] = n[10]), + (e[11] = n[11]), + (e[12] = n[12]), + (e[13] = n[13]), + (e[14] = n[14]), + (e[15] = n[15]), + this + ) + } + copyPosition(t) { + const e = this.elements, + n = t.elements + return (e[12] = n[12]), (e[13] = n[13]), (e[14] = n[14]), this + } + setFromMatrix3(t) { + const e = t.elements + return ( + this.set(e[0], e[3], e[6], 0, e[1], e[4], e[7], 0, e[2], e[5], e[8], 0, 0, 0, 0, 1), + this + ) + } + extractBasis(t, e, n) { + return ( + t.setFromMatrixColumn(this, 0), + e.setFromMatrixColumn(this, 1), + n.setFromMatrixColumn(this, 2), + this + ) + } + makeBasis(t, e, n) { + return this.set(t.x, e.x, n.x, 0, t.y, e.y, n.y, 0, t.z, e.z, n.z, 0, 0, 0, 0, 1), this + } + extractRotation(t) { + const e = this.elements, + n = t.elements, + i = 1 / kt.setFromMatrixColumn(t, 0).length(), + r = 1 / kt.setFromMatrixColumn(t, 1).length(), + s = 1 / kt.setFromMatrixColumn(t, 2).length() + return ( + (e[0] = n[0] * i), + (e[1] = n[1] * i), + (e[2] = n[2] * i), + (e[3] = 0), + (e[4] = n[4] * r), + (e[5] = n[5] * r), + (e[6] = n[6] * r), + (e[7] = 0), + (e[8] = n[8] * s), + (e[9] = n[9] * s), + (e[10] = n[10] * s), + (e[11] = 0), + (e[12] = 0), + (e[13] = 0), + (e[14] = 0), + (e[15] = 1), + this + ) + } + makeRotationFromEuler(t) { + ;(t && t.isEuler) || + console.error( + 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.', + ) + const e = this.elements, + n = t.x, + i = t.y, + r = t.z, + s = Math.cos(n), + a = Math.sin(n), + o = Math.cos(i), + l = Math.sin(i), + c = Math.cos(r), + h = Math.sin(r) + if ('XYZ' === t.order) { + const t = s * c, + n = s * h, + i = a * c, + r = a * h + ;(e[0] = o * c), + (e[4] = -o * h), + (e[8] = l), + (e[1] = n + i * l), + (e[5] = t - r * l), + (e[9] = -a * o), + (e[2] = r - t * l), + (e[6] = i + n * l), + (e[10] = s * o) + } else if ('YXZ' === t.order) { + const t = o * c, + n = o * h, + i = l * c, + r = l * h + ;(e[0] = t + r * a), + (e[4] = i * a - n), + (e[8] = s * l), + (e[1] = s * h), + (e[5] = s * c), + (e[9] = -a), + (e[2] = n * a - i), + (e[6] = r + t * a), + (e[10] = s * o) + } else if ('ZXY' === t.order) { + const t = o * c, + n = o * h, + i = l * c, + r = l * h + ;(e[0] = t - r * a), + (e[4] = -s * h), + (e[8] = i + n * a), + (e[1] = n + i * a), + (e[5] = s * c), + (e[9] = r - t * a), + (e[2] = -s * l), + (e[6] = a), + (e[10] = s * o) + } else if ('ZYX' === t.order) { + const t = s * c, + n = s * h, + i = a * c, + r = a * h + ;(e[0] = o * c), + (e[4] = i * l - n), + (e[8] = t * l + r), + (e[1] = o * h), + (e[5] = r * l + t), + (e[9] = n * l - i), + (e[2] = -l), + (e[6] = a * o), + (e[10] = s * o) + } else if ('YZX' === t.order) { + const t = s * o, + n = s * l, + i = a * o, + r = a * l + ;(e[0] = o * c), + (e[4] = r - t * h), + (e[8] = i * h + n), + (e[1] = h), + (e[5] = s * c), + (e[9] = -a * c), + (e[2] = -l * c), + (e[6] = n * h + i), + (e[10] = t - r * h) + } else if ('XZY' === t.order) { + const t = s * o, + n = s * l, + i = a * o, + r = a * l + ;(e[0] = o * c), + (e[4] = -h), + (e[8] = l * c), + (e[1] = t * h + r), + (e[5] = s * c), + (e[9] = n * h - i), + (e[2] = i * h - n), + (e[6] = a * c), + (e[10] = r * h + t) + } + return ( + (e[3] = 0), + (e[7] = 0), + (e[11] = 0), + (e[12] = 0), + (e[13] = 0), + (e[14] = 0), + (e[15] = 1), + this + ) + } + makeRotationFromQuaternion(t) { + return this.compose(jt, t, qt) + } + lookAt(t, e, n) { + const i = this.elements + return ( + Jt.subVectors(t, e), + 0 === Jt.lengthSq() && (Jt.z = 1), + Jt.normalize(), + Xt.crossVectors(n, Jt), + 0 === Xt.lengthSq() && + (1 === Math.abs(n.z) ? (Jt.x += 1e-4) : (Jt.z += 1e-4), + Jt.normalize(), + Xt.crossVectors(n, Jt)), + Xt.normalize(), + Yt.crossVectors(Jt, Xt), + (i[0] = Xt.x), + (i[4] = Yt.x), + (i[8] = Jt.x), + (i[1] = Xt.y), + (i[5] = Yt.y), + (i[9] = Jt.y), + (i[2] = Xt.z), + (i[6] = Yt.z), + (i[10] = Jt.z), + this + ) + } + multiply(t, e) { + return void 0 !== e + ? (console.warn( + 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.', + ), + this.multiplyMatrices(t, e)) + : this.multiplyMatrices(this, t) + } + premultiply(t) { + return this.multiplyMatrices(t, this) + } + multiplyMatrices(t, e) { + const n = t.elements, + i = e.elements, + r = this.elements, + s = n[0], + a = n[4], + o = n[8], + l = n[12], + c = n[1], + h = n[5], + u = n[9], + d = n[13], + p = n[2], + m = n[6], + f = n[10], + g = n[14], + v = n[3], + y = n[7], + x = n[11], + _ = n[15], + b = i[0], + M = i[4], + w = i[8], + S = i[12], + T = i[1], + E = i[5], + L = i[9], + A = i[13], + R = i[2], + C = i[6], + P = i[10], + D = i[14], + I = i[3], + N = i[7], + z = i[11], + O = i[15] + return ( + (r[0] = s * b + a * T + o * R + l * I), + (r[4] = s * M + a * E + o * C + l * N), + (r[8] = s * w + a * L + o * P + l * z), + (r[12] = s * S + a * A + o * D + l * O), + (r[1] = c * b + h * T + u * R + d * I), + (r[5] = c * M + h * E + u * C + d * N), + (r[9] = c * w + h * L + u * P + d * z), + (r[13] = c * S + h * A + u * D + d * O), + (r[2] = p * b + m * T + f * R + g * I), + (r[6] = p * M + m * E + f * C + g * N), + (r[10] = p * w + m * L + f * P + g * z), + (r[14] = p * S + m * A + f * D + g * O), + (r[3] = v * b + y * T + x * R + _ * I), + (r[7] = v * M + y * E + x * C + _ * N), + (r[11] = v * w + y * L + x * P + _ * z), + (r[15] = v * S + y * A + x * D + _ * O), + this + ) + } + multiplyScalar(t) { + const e = this.elements + return ( + (e[0] *= t), + (e[4] *= t), + (e[8] *= t), + (e[12] *= t), + (e[1] *= t), + (e[5] *= t), + (e[9] *= t), + (e[13] *= t), + (e[2] *= t), + (e[6] *= t), + (e[10] *= t), + (e[14] *= t), + (e[3] *= t), + (e[7] *= t), + (e[11] *= t), + (e[15] *= t), + this + ) + } + determinant() { + const t = this.elements, + e = t[0], + n = t[4], + i = t[8], + r = t[12], + s = t[1], + a = t[5], + o = t[9], + l = t[13], + c = t[2], + h = t[6], + u = t[10], + d = t[14] + return ( + t[3] * (+r * o * h - i * l * h - r * a * u + n * l * u + i * a * d - n * o * d) + + t[7] * (+e * o * d - e * l * u + r * s * u - i * s * d + i * l * c - r * o * c) + + t[11] * (+e * l * h - e * a * d - r * s * h + n * s * d + r * a * c - n * l * c) + + t[15] * (-i * a * c - e * o * h + e * a * u + i * s * h - n * s * u + n * o * c) + ) + } + transpose() { + const t = this.elements + let e + return ( + (e = t[1]), + (t[1] = t[4]), + (t[4] = e), + (e = t[2]), + (t[2] = t[8]), + (t[8] = e), + (e = t[6]), + (t[6] = t[9]), + (t[9] = e), + (e = t[3]), + (t[3] = t[12]), + (t[12] = e), + (e = t[7]), + (t[7] = t[13]), + (t[13] = e), + (e = t[11]), + (t[11] = t[14]), + (t[14] = e), + this + ) + } + setPosition(t, e, n) { + const i = this.elements + return ( + t.isVector3 + ? ((i[12] = t.x), (i[13] = t.y), (i[14] = t.z)) + : ((i[12] = t), (i[13] = e), (i[14] = n)), + this + ) + } + invert() { + const t = this.elements, + e = t[0], + n = t[1], + i = t[2], + r = t[3], + s = t[4], + a = t[5], + o = t[6], + l = t[7], + c = t[8], + h = t[9], + u = t[10], + d = t[11], + p = t[12], + m = t[13], + f = t[14], + g = t[15], + v = h * f * l - m * u * l + m * o * d - a * f * d - h * o * g + a * u * g, + y = p * u * l - c * f * l - p * o * d + s * f * d + c * o * g - s * u * g, + x = c * m * l - p * h * l + p * a * d - s * m * d - c * a * g + s * h * g, + _ = p * h * o - c * m * o - p * a * u + s * m * u + c * a * f - s * h * f, + b = e * v + n * y + i * x + r * _ + if (0 === b) return this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + const M = 1 / b + return ( + (t[0] = v * M), + (t[1] = (m * u * r - h * f * r - m * i * d + n * f * d + h * i * g - n * u * g) * M), + (t[2] = (a * f * r - m * o * r + m * i * l - n * f * l - a * i * g + n * o * g) * M), + (t[3] = (h * o * r - a * u * r - h * i * l + n * u * l + a * i * d - n * o * d) * M), + (t[4] = y * M), + (t[5] = (c * f * r - p * u * r + p * i * d - e * f * d - c * i * g + e * u * g) * M), + (t[6] = (p * o * r - s * f * r - p * i * l + e * f * l + s * i * g - e * o * g) * M), + (t[7] = (s * u * r - c * o * r + c * i * l - e * u * l - s * i * d + e * o * d) * M), + (t[8] = x * M), + (t[9] = (p * h * r - c * m * r - p * n * d + e * m * d + c * n * g - e * h * g) * M), + (t[10] = (s * m * r - p * a * r + p * n * l - e * m * l - s * n * g + e * a * g) * M), + (t[11] = (c * a * r - s * h * r - c * n * l + e * h * l + s * n * d - e * a * d) * M), + (t[12] = _ * M), + (t[13] = (c * m * i - p * h * i + p * n * u - e * m * u - c * n * f + e * h * f) * M), + (t[14] = (p * a * i - s * m * i - p * n * o + e * m * o + s * n * f - e * a * f) * M), + (t[15] = (s * h * i - c * a * i + c * n * o - e * h * o - s * n * u + e * a * u) * M), + this + ) + } + scale(t) { + const e = this.elements, + n = t.x, + i = t.y, + r = t.z + return ( + (e[0] *= n), + (e[4] *= i), + (e[8] *= r), + (e[1] *= n), + (e[5] *= i), + (e[9] *= r), + (e[2] *= n), + (e[6] *= i), + (e[10] *= r), + (e[3] *= n), + (e[7] *= i), + (e[11] *= r), + this + ) + } + getMaxScaleOnAxis() { + const t = this.elements, + e = t[0] * t[0] + t[1] * t[1] + t[2] * t[2], + n = t[4] * t[4] + t[5] * t[5] + t[6] * t[6], + i = t[8] * t[8] + t[9] * t[9] + t[10] * t[10] + return Math.sqrt(Math.max(e, n, i)) + } + makeTranslation(t, e, n) { + return this.set(1, 0, 0, t, 0, 1, 0, e, 0, 0, 1, n, 0, 0, 0, 1), this + } + makeRotationX(t) { + const e = Math.cos(t), + n = Math.sin(t) + return this.set(1, 0, 0, 0, 0, e, -n, 0, 0, n, e, 0, 0, 0, 0, 1), this + } + makeRotationY(t) { + const e = Math.cos(t), + n = Math.sin(t) + return this.set(e, 0, n, 0, 0, 1, 0, 0, -n, 0, e, 0, 0, 0, 0, 1), this + } + makeRotationZ(t) { + const e = Math.cos(t), + n = Math.sin(t) + return this.set(e, -n, 0, 0, n, e, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1), this + } + makeRotationAxis(t, e) { + const n = Math.cos(e), + i = Math.sin(e), + r = 1 - n, + s = t.x, + a = t.y, + o = t.z, + l = r * s, + c = r * a + return ( + this.set( + l * s + n, + l * a - i * o, + l * o + i * a, + 0, + l * a + i * o, + c * a + n, + c * o - i * s, + 0, + l * o - i * a, + c * o + i * s, + r * o * o + n, + 0, + 0, + 0, + 0, + 1, + ), + this + ) + } + makeScale(t, e, n) { + return this.set(t, 0, 0, 0, 0, e, 0, 0, 0, 0, n, 0, 0, 0, 0, 1), this + } + makeShear(t, e, n, i, r, s) { + return this.set(1, n, r, 0, t, 1, s, 0, e, i, 1, 0, 0, 0, 0, 1), this + } + compose(t, e, n) { + const i = this.elements, + r = e._x, + s = e._y, + a = e._z, + o = e._w, + l = r + r, + c = s + s, + h = a + a, + u = r * l, + d = r * c, + p = r * h, + m = s * c, + f = s * h, + g = a * h, + v = o * l, + y = o * c, + x = o * h, + _ = n.x, + b = n.y, + M = n.z + return ( + (i[0] = (1 - (m + g)) * _), + (i[1] = (d + x) * _), + (i[2] = (p - y) * _), + (i[3] = 0), + (i[4] = (d - x) * b), + (i[5] = (1 - (u + g)) * b), + (i[6] = (f + v) * b), + (i[7] = 0), + (i[8] = (p + y) * M), + (i[9] = (f - v) * M), + (i[10] = (1 - (u + m)) * M), + (i[11] = 0), + (i[12] = t.x), + (i[13] = t.y), + (i[14] = t.z), + (i[15] = 1), + this + ) + } + decompose(t, e, n) { + const i = this.elements + let r = kt.set(i[0], i[1], i[2]).length() + const s = kt.set(i[4], i[5], i[6]).length(), + a = kt.set(i[8], i[9], i[10]).length() + this.determinant() < 0 && (r = -r), + (t.x = i[12]), + (t.y = i[13]), + (t.z = i[14]), + Wt.copy(this) + const o = 1 / r, + l = 1 / s, + c = 1 / a + return ( + (Wt.elements[0] *= o), + (Wt.elements[1] *= o), + (Wt.elements[2] *= o), + (Wt.elements[4] *= l), + (Wt.elements[5] *= l), + (Wt.elements[6] *= l), + (Wt.elements[8] *= c), + (Wt.elements[9] *= c), + (Wt.elements[10] *= c), + e.setFromRotationMatrix(Wt), + (n.x = r), + (n.y = s), + (n.z = a), + this + ) + } + makePerspective(t, e, n, i, r, s) { + void 0 === s && + console.warn( + 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.', + ) + const a = this.elements, + o = (2 * r) / (e - t), + l = (2 * r) / (n - i), + c = (e + t) / (e - t), + h = (n + i) / (n - i), + u = -(s + r) / (s - r), + d = (-2 * s * r) / (s - r) + return ( + (a[0] = o), + (a[4] = 0), + (a[8] = c), + (a[12] = 0), + (a[1] = 0), + (a[5] = l), + (a[9] = h), + (a[13] = 0), + (a[2] = 0), + (a[6] = 0), + (a[10] = u), + (a[14] = d), + (a[3] = 0), + (a[7] = 0), + (a[11] = -1), + (a[15] = 0), + this + ) + } + makeOrthographic(t, e, n, i, r, s) { + const a = this.elements, + o = 1 / (e - t), + l = 1 / (n - i), + c = 1 / (s - r), + h = (e + t) * o, + u = (n + i) * l, + d = (s + r) * c + return ( + (a[0] = 2 * o), + (a[4] = 0), + (a[8] = 0), + (a[12] = -h), + (a[1] = 0), + (a[5] = 2 * l), + (a[9] = 0), + (a[13] = -u), + (a[2] = 0), + (a[6] = 0), + (a[10] = -2 * c), + (a[14] = -d), + (a[3] = 0), + (a[7] = 0), + (a[11] = 0), + (a[15] = 1), + this + ) + } + equals(t) { + const e = this.elements, + n = t.elements + for (let i = 0; i < 16; i++) if (e[i] !== n[i]) return !1 + return !0 + } + fromArray(t, e = 0) { + for (let n = 0; n < 16; n++) this.elements[n] = t[n + e] + return this + } + toArray(t = [], e = 0) { + const n = this.elements + return ( + (t[e] = n[0]), + (t[e + 1] = n[1]), + (t[e + 2] = n[2]), + (t[e + 3] = n[3]), + (t[e + 4] = n[4]), + (t[e + 5] = n[5]), + (t[e + 6] = n[6]), + (t[e + 7] = n[7]), + (t[e + 8] = n[8]), + (t[e + 9] = n[9]), + (t[e + 10] = n[10]), + (t[e + 11] = n[11]), + (t[e + 12] = n[12]), + (t[e + 13] = n[13]), + (t[e + 14] = n[14]), + (t[e + 15] = n[15]), + t + ) + } + } + Vt.prototype.isMatrix4 = !0 + const kt = new ut(), + Wt = new Vt(), + jt = new ut(0, 0, 0), + qt = new ut(1, 1, 1), + Xt = new ut(), + Yt = new ut(), + Jt = new ut(), + Zt = new Vt(), + Qt = new ht() + class Kt { + constructor(t = 0, e = 0, n = 0, i = Kt.DefaultOrder) { + ;(this._x = t), (this._y = e), (this._z = n), (this._order = i) + } + get x() { + return this._x + } + set x(t) { + ;(this._x = t), this._onChangeCallback() + } + get y() { + return this._y + } + set y(t) { + ;(this._y = t), this._onChangeCallback() + } + get z() { + return this._z + } + set z(t) { + ;(this._z = t), this._onChangeCallback() + } + get order() { + return this._order + } + set order(t) { + ;(this._order = t), this._onChangeCallback() + } + set(t, e, n, i = this._order) { + return ( + (this._x = t), + (this._y = e), + (this._z = n), + (this._order = i), + this._onChangeCallback(), + this + ) + } + clone() { + return new this.constructor(this._x, this._y, this._z, this._order) + } + copy(t) { + return ( + (this._x = t._x), + (this._y = t._y), + (this._z = t._z), + (this._order = t._order), + this._onChangeCallback(), + this + ) + } + setFromRotationMatrix(t, e = this._order, n = !0) { + const i = t.elements, + r = i[0], + s = i[4], + a = i[8], + o = i[1], + l = i[5], + c = i[9], + h = i[2], + u = i[6], + d = i[10] + switch (e) { + case 'XYZ': + ;(this._y = Math.asin(J(a, -1, 1))), + Math.abs(a) < 0.9999999 + ? ((this._x = Math.atan2(-c, d)), (this._z = Math.atan2(-s, r))) + : ((this._x = Math.atan2(u, l)), (this._z = 0)) + break + case 'YXZ': + ;(this._x = Math.asin(-J(c, -1, 1))), + Math.abs(c) < 0.9999999 + ? ((this._y = Math.atan2(a, d)), (this._z = Math.atan2(o, l))) + : ((this._y = Math.atan2(-h, r)), (this._z = 0)) + break + case 'ZXY': + ;(this._x = Math.asin(J(u, -1, 1))), + Math.abs(u) < 0.9999999 + ? ((this._y = Math.atan2(-h, d)), (this._z = Math.atan2(-s, l))) + : ((this._y = 0), (this._z = Math.atan2(o, r))) + break + case 'ZYX': + ;(this._y = Math.asin(-J(h, -1, 1))), + Math.abs(h) < 0.9999999 + ? ((this._x = Math.atan2(u, d)), (this._z = Math.atan2(o, r))) + : ((this._x = 0), (this._z = Math.atan2(-s, l))) + break + case 'YZX': + ;(this._z = Math.asin(J(o, -1, 1))), + Math.abs(o) < 0.9999999 + ? ((this._x = Math.atan2(-c, l)), (this._y = Math.atan2(-h, r))) + : ((this._x = 0), (this._y = Math.atan2(a, d))) + break + case 'XZY': + ;(this._z = Math.asin(-J(s, -1, 1))), + Math.abs(s) < 0.9999999 + ? ((this._x = Math.atan2(u, l)), (this._y = Math.atan2(a, r))) + : ((this._x = Math.atan2(-c, d)), (this._y = 0)) + break + default: + console.warn( + 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + e, + ) + } + return (this._order = e), !0 === n && this._onChangeCallback(), this + } + setFromQuaternion(t, e, n) { + return Zt.makeRotationFromQuaternion(t), this.setFromRotationMatrix(Zt, e, n) + } + setFromVector3(t, e = this._order) { + return this.set(t.x, t.y, t.z, e) + } + reorder(t) { + return Qt.setFromEuler(this), this.setFromQuaternion(Qt, t) + } + equals(t) { + return ( + t._x === this._x && t._y === this._y && t._z === this._z && t._order === this._order + ) + } + fromArray(t) { + return ( + (this._x = t[0]), + (this._y = t[1]), + (this._z = t[2]), + void 0 !== t[3] && (this._order = t[3]), + this._onChangeCallback(), + this + ) + } + toArray(t = [], e = 0) { + return ( + (t[e] = this._x), + (t[e + 1] = this._y), + (t[e + 2] = this._z), + (t[e + 3] = this._order), + t + ) + } + toVector3(t) { + return t ? t.set(this._x, this._y, this._z) : new ut(this._x, this._y, this._z) + } + _onChange(t) { + return (this._onChangeCallback = t), this + } + _onChangeCallback() {} + } + ;(Kt.prototype.isEuler = !0), + (Kt.DefaultOrder = 'XYZ'), + (Kt.RotationOrders = ['XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX']) + class $t { + constructor() { + this.mask = 1 + } + set(t) { + this.mask = (1 << t) | 0 + } + enable(t) { + this.mask |= (1 << t) | 0 + } + enableAll() { + this.mask = -1 + } + toggle(t) { + this.mask ^= (1 << t) | 0 + } + disable(t) { + this.mask &= ~((1 << t) | 0) + } + disableAll() { + this.mask = 0 + } + test(t) { + return 0 !== (this.mask & t.mask) + } + } + let te = 0 + const ee = new ut(), + ne = new ht(), + ie = new Vt(), + re = new ut(), + se = new ut(), + ae = new ut(), + oe = new ht(), + le = new ut(1, 0, 0), + ce = new ut(0, 1, 0), + he = new ut(0, 0, 1), + ue = { type: 'added' }, + de = { type: 'removed' } + class pe extends W { + constructor() { + super(), + Object.defineProperty(this, 'id', { value: te++ }), + (this.uuid = Y()), + (this.name = ''), + (this.type = 'Object3D'), + (this.parent = null), + (this.children = []), + (this.up = pe.DefaultUp.clone()) + const t = new ut(), + e = new Kt(), + n = new ht(), + i = new ut(1, 1, 1) + e._onChange(function () { + n.setFromEuler(e, !1) + }), + n._onChange(function () { + e.setFromQuaternion(n, void 0, !1) + }), + Object.defineProperties(this, { + position: { configurable: !0, enumerable: !0, value: t }, + rotation: { configurable: !0, enumerable: !0, value: e }, + quaternion: { configurable: !0, enumerable: !0, value: n }, + scale: { configurable: !0, enumerable: !0, value: i }, + modelViewMatrix: { value: new Vt() }, + normalMatrix: { value: new et() }, + }), + (this.matrix = new Vt()), + (this.matrixWorld = new Vt()), + (this.matrixAutoUpdate = pe.DefaultMatrixAutoUpdate), + (this.matrixWorldNeedsUpdate = !1), + (this.layers = new $t()), + (this.visible = !0), + (this.castShadow = !1), + (this.receiveShadow = !1), + (this.frustumCulled = !0), + (this.renderOrder = 0), + (this.animations = []), + (this.userData = {}) + } + onBeforeRender() {} + onAfterRender() {} + applyMatrix4(t) { + this.matrixAutoUpdate && this.updateMatrix(), + this.matrix.premultiply(t), + this.matrix.decompose(this.position, this.quaternion, this.scale) + } + applyQuaternion(t) { + return this.quaternion.premultiply(t), this + } + setRotationFromAxisAngle(t, e) { + this.quaternion.setFromAxisAngle(t, e) + } + setRotationFromEuler(t) { + this.quaternion.setFromEuler(t, !0) + } + setRotationFromMatrix(t) { + this.quaternion.setFromRotationMatrix(t) + } + setRotationFromQuaternion(t) { + this.quaternion.copy(t) + } + rotateOnAxis(t, e) { + return ne.setFromAxisAngle(t, e), this.quaternion.multiply(ne), this + } + rotateOnWorldAxis(t, e) { + return ne.setFromAxisAngle(t, e), this.quaternion.premultiply(ne), this + } + rotateX(t) { + return this.rotateOnAxis(le, t) + } + rotateY(t) { + return this.rotateOnAxis(ce, t) + } + rotateZ(t) { + return this.rotateOnAxis(he, t) + } + translateOnAxis(t, e) { + return ( + ee.copy(t).applyQuaternion(this.quaternion), + this.position.add(ee.multiplyScalar(e)), + this + ) + } + translateX(t) { + return this.translateOnAxis(le, t) + } + translateY(t) { + return this.translateOnAxis(ce, t) + } + translateZ(t) { + return this.translateOnAxis(he, t) + } + localToWorld(t) { + return t.applyMatrix4(this.matrixWorld) + } + worldToLocal(t) { + return t.applyMatrix4(ie.copy(this.matrixWorld).invert()) + } + lookAt(t, e, n) { + t.isVector3 ? re.copy(t) : re.set(t, e, n) + const i = this.parent + this.updateWorldMatrix(!0, !1), + se.setFromMatrixPosition(this.matrixWorld), + this.isCamera || this.isLight ? ie.lookAt(se, re, this.up) : ie.lookAt(re, se, this.up), + this.quaternion.setFromRotationMatrix(ie), + i && + (ie.extractRotation(i.matrixWorld), + ne.setFromRotationMatrix(ie), + this.quaternion.premultiply(ne.invert())) + } + add(t) { + if (arguments.length > 1) { + for (let t = 0; t < arguments.length; t++) this.add(arguments[t]) + return this + } + return t === this + ? (console.error("THREE.Object3D.add: object can't be added as a child of itself.", t), + this) + : (t && t.isObject3D + ? (null !== t.parent && t.parent.remove(t), + (t.parent = this), + this.children.push(t), + t.dispatchEvent(ue)) + : console.error('THREE.Object3D.add: object not an instance of THREE.Object3D.', t), + this) + } + remove(t) { + if (arguments.length > 1) { + for (let t = 0; t < arguments.length; t++) this.remove(arguments[t]) + return this + } + const e = this.children.indexOf(t) + return ( + -1 !== e && ((t.parent = null), this.children.splice(e, 1), t.dispatchEvent(de)), this + ) + } + removeFromParent() { + const t = this.parent + return null !== t && t.remove(this), this + } + clear() { + for (let t = 0; t < this.children.length; t++) { + const e = this.children[t] + ;(e.parent = null), e.dispatchEvent(de) + } + return (this.children.length = 0), this + } + attach(t) { + return ( + this.updateWorldMatrix(!0, !1), + ie.copy(this.matrixWorld).invert(), + null !== t.parent && + (t.parent.updateWorldMatrix(!0, !1), ie.multiply(t.parent.matrixWorld)), + t.applyMatrix4(ie), + this.add(t), + t.updateWorldMatrix(!1, !0), + this + ) + } + getObjectById(t) { + return this.getObjectByProperty('id', t) + } + getObjectByName(t) { + return this.getObjectByProperty('name', t) + } + getObjectByProperty(t, e) { + if (this[t] === e) return this + for (let n = 0, i = this.children.length; n < i; n++) { + const i = this.children[n].getObjectByProperty(t, e) + if (void 0 !== i) return i + } + } + getWorldPosition(t) { + return this.updateWorldMatrix(!0, !1), t.setFromMatrixPosition(this.matrixWorld) + } + getWorldQuaternion(t) { + return this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(se, t, ae), t + } + getWorldScale(t) { + return this.updateWorldMatrix(!0, !1), this.matrixWorld.decompose(se, oe, t), t + } + getWorldDirection(t) { + this.updateWorldMatrix(!0, !1) + const e = this.matrixWorld.elements + return t.set(e[8], e[9], e[10]).normalize() + } + raycast() {} + traverse(t) { + t(this) + const e = this.children + for (let n = 0, i = e.length; n < i; n++) e[n].traverse(t) + } + traverseVisible(t) { + if (!1 === this.visible) return + t(this) + const e = this.children + for (let n = 0, i = e.length; n < i; n++) e[n].traverseVisible(t) + } + traverseAncestors(t) { + const e = this.parent + null !== e && (t(e), e.traverseAncestors(t)) + } + updateMatrix() { + this.matrix.compose(this.position, this.quaternion, this.scale), + (this.matrixWorldNeedsUpdate = !0) + } + updateMatrixWorld(t) { + this.matrixAutoUpdate && this.updateMatrix(), + (this.matrixWorldNeedsUpdate || t) && + (null === this.parent + ? this.matrixWorld.copy(this.matrix) + : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), + (this.matrixWorldNeedsUpdate = !1), + (t = !0)) + const e = this.children + for (let n = 0, i = e.length; n < i; n++) e[n].updateMatrixWorld(t) + } + updateWorldMatrix(t, e) { + const n = this.parent + if ( + (!0 === t && null !== n && n.updateWorldMatrix(!0, !1), + this.matrixAutoUpdate && this.updateMatrix(), + null === this.parent + ? this.matrixWorld.copy(this.matrix) + : this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix), + !0 === e) + ) { + const t = this.children + for (let e = 0, n = t.length; e < n; e++) t[e].updateWorldMatrix(!1, !0) + } + } + toJSON(t) { + const e = void 0 === t || 'string' === typeof t, + n = {} + e && + ((t = { + geometries: {}, + materials: {}, + textures: {}, + images: {}, + shapes: {}, + skeletons: {}, + animations: {}, + }), + (n.metadata = { version: 4.5, type: 'Object', generator: 'Object3D.toJSON' })) + const i = {} + function r(e, n) { + return void 0 === e[n.uuid] && (e[n.uuid] = n.toJSON(t)), n.uuid + } + if ( + ((i.uuid = this.uuid), + (i.type = this.type), + '' !== this.name && (i.name = this.name), + !0 === this.castShadow && (i.castShadow = !0), + !0 === this.receiveShadow && (i.receiveShadow = !0), + !1 === this.visible && (i.visible = !1), + !1 === this.frustumCulled && (i.frustumCulled = !1), + 0 !== this.renderOrder && (i.renderOrder = this.renderOrder), + '{}' !== JSON.stringify(this.userData) && (i.userData = this.userData), + (i.layers = this.layers.mask), + (i.matrix = this.matrix.toArray()), + !1 === this.matrixAutoUpdate && (i.matrixAutoUpdate = !1), + this.isInstancedMesh && + ((i.type = 'InstancedMesh'), + (i.count = this.count), + (i.instanceMatrix = this.instanceMatrix.toJSON()), + null !== this.instanceColor && (i.instanceColor = this.instanceColor.toJSON())), + this.isScene) + ) + this.background && + (this.background.isColor + ? (i.background = this.background.toJSON()) + : this.background.isTexture && (i.background = this.background.toJSON(t).uuid)), + this.environment && + this.environment.isTexture && + (i.environment = this.environment.toJSON(t).uuid) + else if (this.isMesh || this.isLine || this.isPoints) { + i.geometry = r(t.geometries, this.geometry) + const e = this.geometry.parameters + if (void 0 !== e && void 0 !== e.shapes) { + const n = e.shapes + if (Array.isArray(n)) + for (let e = 0, i = n.length; e < i; e++) { + const i = n[e] + r(t.shapes, i) + } + else r(t.shapes, n) + } + } + if ( + (this.isSkinnedMesh && + ((i.bindMode = this.bindMode), + (i.bindMatrix = this.bindMatrix.toArray()), + void 0 !== this.skeleton && + (r(t.skeletons, this.skeleton), (i.skeleton = this.skeleton.uuid))), + void 0 !== this.material) + ) + if (Array.isArray(this.material)) { + const e = [] + for (let n = 0, i = this.material.length; n < i; n++) + e.push(r(t.materials, this.material[n])) + i.material = e + } else i.material = r(t.materials, this.material) + if (this.children.length > 0) { + i.children = [] + for (let e = 0; e < this.children.length; e++) + i.children.push(this.children[e].toJSON(t).object) + } + if (this.animations.length > 0) { + i.animations = [] + for (let e = 0; e < this.animations.length; e++) { + const n = this.animations[e] + i.animations.push(r(t.animations, n)) + } + } + if (e) { + const e = s(t.geometries), + i = s(t.materials), + r = s(t.textures), + a = s(t.images), + o = s(t.shapes), + l = s(t.skeletons), + c = s(t.animations) + e.length > 0 && (n.geometries = e), + i.length > 0 && (n.materials = i), + r.length > 0 && (n.textures = r), + a.length > 0 && (n.images = a), + o.length > 0 && (n.shapes = o), + l.length > 0 && (n.skeletons = l), + c.length > 0 && (n.animations = c) + } + return (n.object = i), n + function s(t) { + const e = [] + for (const n in t) { + const i = t[n] + delete i.metadata, e.push(i) + } + return e + } + } + clone(t) { + return new this.constructor().copy(this, t) + } + copy(t, e = !0) { + if ( + ((this.name = t.name), + this.up.copy(t.up), + this.position.copy(t.position), + (this.rotation.order = t.rotation.order), + this.quaternion.copy(t.quaternion), + this.scale.copy(t.scale), + this.matrix.copy(t.matrix), + this.matrixWorld.copy(t.matrixWorld), + (this.matrixAutoUpdate = t.matrixAutoUpdate), + (this.matrixWorldNeedsUpdate = t.matrixWorldNeedsUpdate), + (this.layers.mask = t.layers.mask), + (this.visible = t.visible), + (this.castShadow = t.castShadow), + (this.receiveShadow = t.receiveShadow), + (this.frustumCulled = t.frustumCulled), + (this.renderOrder = t.renderOrder), + (this.userData = JSON.parse(JSON.stringify(t.userData))), + !0 === e) + ) + for (let n = 0; n < t.children.length; n++) { + const e = t.children[n] + this.add(e.clone()) + } + return this + } + } + ;(pe.DefaultUp = new ut(0, 1, 0)), + (pe.DefaultMatrixAutoUpdate = !0), + (pe.prototype.isObject3D = !0) + const me = new ut(), + fe = new ut(), + ge = new ut(), + ve = new ut(), + ye = new ut(), + xe = new ut(), + _e = new ut(), + be = new ut(), + Me = new ut(), + we = new ut() + class Se { + constructor(t = new ut(), e = new ut(), n = new ut()) { + ;(this.a = t), (this.b = e), (this.c = n) + } + static getNormal(t, e, n, i) { + i.subVectors(n, e), me.subVectors(t, e), i.cross(me) + const r = i.lengthSq() + return r > 0 ? i.multiplyScalar(1 / Math.sqrt(r)) : i.set(0, 0, 0) + } + static getBarycoord(t, e, n, i, r) { + me.subVectors(i, e), fe.subVectors(n, e), ge.subVectors(t, e) + const s = me.dot(me), + a = me.dot(fe), + o = me.dot(ge), + l = fe.dot(fe), + c = fe.dot(ge), + h = s * l - a * a + if (0 === h) return r.set(-2, -1, -1) + const u = 1 / h, + d = (l * o - a * c) * u, + p = (s * c - a * o) * u + return r.set(1 - d - p, p, d) + } + static containsPoint(t, e, n, i) { + return this.getBarycoord(t, e, n, i, ve), ve.x >= 0 && ve.y >= 0 && ve.x + ve.y <= 1 + } + static getUV(t, e, n, i, r, s, a, o) { + return ( + this.getBarycoord(t, e, n, i, ve), + o.set(0, 0), + o.addScaledVector(r, ve.x), + o.addScaledVector(s, ve.y), + o.addScaledVector(a, ve.z), + o + ) + } + static isFrontFacing(t, e, n, i) { + return me.subVectors(n, e), fe.subVectors(t, e), me.cross(fe).dot(i) < 0 + } + set(t, e, n) { + return this.a.copy(t), this.b.copy(e), this.c.copy(n), this + } + setFromPointsAndIndices(t, e, n, i) { + return this.a.copy(t[e]), this.b.copy(t[n]), this.c.copy(t[i]), this + } + clone() { + return new this.constructor().copy(this) + } + copy(t) { + return this.a.copy(t.a), this.b.copy(t.b), this.c.copy(t.c), this + } + getArea() { + return ( + me.subVectors(this.c, this.b), + fe.subVectors(this.a, this.b), + 0.5 * me.cross(fe).length() + ) + } + getMidpoint(t) { + return t + .addVectors(this.a, this.b) + .add(this.c) + .multiplyScalar(1 / 3) + } + getNormal(t) { + return Se.getNormal(this.a, this.b, this.c, t) + } + getPlane(t) { + return t.setFromCoplanarPoints(this.a, this.b, this.c) + } + getBarycoord(t, e) { + return Se.getBarycoord(t, this.a, this.b, this.c, e) + } + getUV(t, e, n, i, r) { + return Se.getUV(t, this.a, this.b, this.c, e, n, i, r) + } + containsPoint(t) { + return Se.containsPoint(t, this.a, this.b, this.c) + } + isFrontFacing(t) { + return Se.isFrontFacing(this.a, this.b, this.c, t) + } + intersectsBox(t) { + return t.intersectsTriangle(this) + } + closestPointToPoint(t, e) { + const n = this.a, + i = this.b, + r = this.c + let s, a + ye.subVectors(i, n), xe.subVectors(r, n), be.subVectors(t, n) + const o = ye.dot(be), + l = xe.dot(be) + if (o <= 0 && l <= 0) return e.copy(n) + Me.subVectors(t, i) + const c = ye.dot(Me), + h = xe.dot(Me) + if (c >= 0 && h <= c) return e.copy(i) + const u = o * h - c * l + if (u <= 0 && o >= 0 && c <= 0) return (s = o / (o - c)), e.copy(n).addScaledVector(ye, s) + we.subVectors(t, r) + const d = ye.dot(we), + p = xe.dot(we) + if (p >= 0 && d <= p) return e.copy(r) + const m = d * l - o * p + if (m <= 0 && l >= 0 && p <= 0) return (a = l / (l - p)), e.copy(n).addScaledVector(xe, a) + const f = c * p - d * h + if (f <= 0 && h - c >= 0 && d - p >= 0) + return ( + _e.subVectors(r, i), + (a = (h - c) / (h - c + (d - p))), + e.copy(i).addScaledVector(_e, a) + ) + const g = 1 / (f + m + u) + return (s = m * g), (a = u * g), e.copy(n).addScaledVector(ye, s).addScaledVector(xe, a) + } + equals(t) { + return t.a.equals(this.a) && t.b.equals(this.b) && t.c.equals(this.c) + } + } + let Te = 0 + class Ee extends W { + constructor() { + super(), + Object.defineProperty(this, 'id', { value: Te++ }), + (this.uuid = Y()), + (this.name = ''), + (this.type = 'Material'), + (this.fog = !0), + (this.blending = 1), + (this.side = 0), + (this.vertexColors = !1), + (this.opacity = 1), + (this.transparent = !1), + (this.blendSrc = 204), + (this.blendDst = 205), + (this.blendEquation = a), + (this.blendSrcAlpha = null), + (this.blendDstAlpha = null), + (this.blendEquationAlpha = null), + (this.depthFunc = 3), + (this.depthTest = !0), + (this.depthWrite = !0), + (this.stencilWriteMask = 255), + (this.stencilFunc = 519), + (this.stencilRef = 0), + (this.stencilFuncMask = 255), + (this.stencilFail = H), + (this.stencilZFail = H), + (this.stencilZPass = H), + (this.stencilWrite = !1), + (this.clippingPlanes = null), + (this.clipIntersection = !1), + (this.clipShadows = !1), + (this.shadowSide = null), + (this.colorWrite = !0), + (this.precision = null), + (this.polygonOffset = !1), + (this.polygonOffsetFactor = 0), + (this.polygonOffsetUnits = 0), + (this.dithering = !1), + (this.alphaTest = 0), + (this.alphaToCoverage = !1), + (this.premultipliedAlpha = !1), + (this.visible = !0), + (this.toneMapped = !0), + (this.userData = {}), + (this.version = 0) + } + onBuild() {} + onBeforeCompile() {} + customProgramCacheKey() { + return this.onBeforeCompile.toString() + } + setValues(t) { + if (void 0 !== t) + for (const e in t) { + const n = t[e] + if (void 0 === n) { + console.warn("THREE.Material: '" + e + "' parameter is undefined.") + continue + } + if ('shading' === e) { + console.warn( + 'THREE.' + + this.type + + ': .shading has been removed. Use the boolean .flatShading instead.', + ), + (this.flatShading = 1 === n) + continue + } + const i = this[e] + void 0 !== i + ? i && i.isColor + ? i.set(n) + : i && i.isVector3 && n && n.isVector3 + ? i.copy(n) + : (this[e] = n) + : console.warn( + 'THREE.' + this.type + ": '" + e + "' is not a property of this material.", + ) + } + } + toJSON(t) { + const e = void 0 === t || 'string' === typeof t + e && (t = { textures: {}, images: {} }) + const n = { metadata: { version: 4.5, type: 'Material', generator: 'Material.toJSON' } } + function i(t) { + const e = [] + for (const n in t) { + const i = t[n] + delete i.metadata, e.push(i) + } + return e + } + if ( + ((n.uuid = this.uuid), + (n.type = this.type), + '' !== this.name && (n.name = this.name), + this.color && this.color.isColor && (n.color = this.color.getHex()), + void 0 !== this.roughness && (n.roughness = this.roughness), + void 0 !== this.metalness && (n.metalness = this.metalness), + this.sheen && this.sheen.isColor && (n.sheen = this.sheen.getHex()), + this.emissive && this.emissive.isColor && (n.emissive = this.emissive.getHex()), + this.emissiveIntensity && + 1 !== this.emissiveIntensity && + (n.emissiveIntensity = this.emissiveIntensity), + this.specular && this.specular.isColor && (n.specular = this.specular.getHex()), + void 0 !== this.shininess && (n.shininess = this.shininess), + void 0 !== this.clearcoat && (n.clearcoat = this.clearcoat), + void 0 !== this.clearcoatRoughness && (n.clearcoatRoughness = this.clearcoatRoughness), + this.clearcoatMap && + this.clearcoatMap.isTexture && + (n.clearcoatMap = this.clearcoatMap.toJSON(t).uuid), + this.clearcoatRoughnessMap && + this.clearcoatRoughnessMap.isTexture && + (n.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON(t).uuid), + this.clearcoatNormalMap && + this.clearcoatNormalMap.isTexture && + ((n.clearcoatNormalMap = this.clearcoatNormalMap.toJSON(t).uuid), + (n.clearcoatNormalScale = this.clearcoatNormalScale.toArray())), + this.map && this.map.isTexture && (n.map = this.map.toJSON(t).uuid), + this.matcap && this.matcap.isTexture && (n.matcap = this.matcap.toJSON(t).uuid), + this.alphaMap && this.alphaMap.isTexture && (n.alphaMap = this.alphaMap.toJSON(t).uuid), + this.lightMap && + this.lightMap.isTexture && + ((n.lightMap = this.lightMap.toJSON(t).uuid), + (n.lightMapIntensity = this.lightMapIntensity)), + this.aoMap && + this.aoMap.isTexture && + ((n.aoMap = this.aoMap.toJSON(t).uuid), (n.aoMapIntensity = this.aoMapIntensity)), + this.bumpMap && + this.bumpMap.isTexture && + ((n.bumpMap = this.bumpMap.toJSON(t).uuid), (n.bumpScale = this.bumpScale)), + this.normalMap && + this.normalMap.isTexture && + ((n.normalMap = this.normalMap.toJSON(t).uuid), + (n.normalMapType = this.normalMapType), + (n.normalScale = this.normalScale.toArray())), + this.displacementMap && + this.displacementMap.isTexture && + ((n.displacementMap = this.displacementMap.toJSON(t).uuid), + (n.displacementScale = this.displacementScale), + (n.displacementBias = this.displacementBias)), + this.roughnessMap && + this.roughnessMap.isTexture && + (n.roughnessMap = this.roughnessMap.toJSON(t).uuid), + this.metalnessMap && + this.metalnessMap.isTexture && + (n.metalnessMap = this.metalnessMap.toJSON(t).uuid), + this.emissiveMap && + this.emissiveMap.isTexture && + (n.emissiveMap = this.emissiveMap.toJSON(t).uuid), + this.specularMap && + this.specularMap.isTexture && + (n.specularMap = this.specularMap.toJSON(t).uuid), + this.envMap && + this.envMap.isTexture && + ((n.envMap = this.envMap.toJSON(t).uuid), + void 0 !== this.combine && (n.combine = this.combine)), + void 0 !== this.envMapIntensity && (n.envMapIntensity = this.envMapIntensity), + void 0 !== this.reflectivity && (n.reflectivity = this.reflectivity), + void 0 !== this.refractionRatio && (n.refractionRatio = this.refractionRatio), + this.gradientMap && + this.gradientMap.isTexture && + (n.gradientMap = this.gradientMap.toJSON(t).uuid), + void 0 !== this.transmission && (n.transmission = this.transmission), + this.transmissionMap && + this.transmissionMap.isTexture && + (n.transmissionMap = this.transmissionMap.toJSON(t).uuid), + void 0 !== this.thickness && (n.thickness = this.thickness), + this.thicknessMap && + this.thicknessMap.isTexture && + (n.thicknessMap = this.thicknessMap.toJSON(t).uuid), + void 0 !== this.attenuationDistance && + (n.attenuationDistance = this.attenuationDistance), + void 0 !== this.attenuationColor && + (n.attenuationColor = this.attenuationColor.getHex()), + void 0 !== this.size && (n.size = this.size), + null !== this.shadowSide && (n.shadowSide = this.shadowSide), + void 0 !== this.sizeAttenuation && (n.sizeAttenuation = this.sizeAttenuation), + 1 !== this.blending && (n.blending = this.blending), + 0 !== this.side && (n.side = this.side), + this.vertexColors && (n.vertexColors = !0), + this.opacity < 1 && (n.opacity = this.opacity), + !0 === this.transparent && (n.transparent = this.transparent), + (n.depthFunc = this.depthFunc), + (n.depthTest = this.depthTest), + (n.depthWrite = this.depthWrite), + (n.colorWrite = this.colorWrite), + (n.stencilWrite = this.stencilWrite), + (n.stencilWriteMask = this.stencilWriteMask), + (n.stencilFunc = this.stencilFunc), + (n.stencilRef = this.stencilRef), + (n.stencilFuncMask = this.stencilFuncMask), + (n.stencilFail = this.stencilFail), + (n.stencilZFail = this.stencilZFail), + (n.stencilZPass = this.stencilZPass), + this.rotation && 0 !== this.rotation && (n.rotation = this.rotation), + !0 === this.polygonOffset && (n.polygonOffset = !0), + 0 !== this.polygonOffsetFactor && (n.polygonOffsetFactor = this.polygonOffsetFactor), + 0 !== this.polygonOffsetUnits && (n.polygonOffsetUnits = this.polygonOffsetUnits), + this.linewidth && 1 !== this.linewidth && (n.linewidth = this.linewidth), + void 0 !== this.dashSize && (n.dashSize = this.dashSize), + void 0 !== this.gapSize && (n.gapSize = this.gapSize), + void 0 !== this.scale && (n.scale = this.scale), + !0 === this.dithering && (n.dithering = !0), + this.alphaTest > 0 && (n.alphaTest = this.alphaTest), + !0 === this.alphaToCoverage && (n.alphaToCoverage = this.alphaToCoverage), + !0 === this.premultipliedAlpha && (n.premultipliedAlpha = this.premultipliedAlpha), + !0 === this.wireframe && (n.wireframe = this.wireframe), + this.wireframeLinewidth > 1 && (n.wireframeLinewidth = this.wireframeLinewidth), + 'round' !== this.wireframeLinecap && (n.wireframeLinecap = this.wireframeLinecap), + 'round' !== this.wireframeLinejoin && (n.wireframeLinejoin = this.wireframeLinejoin), + !0 === this.morphTargets && (n.morphTargets = !0), + !0 === this.morphNormals && (n.morphNormals = !0), + !0 === this.flatShading && (n.flatShading = this.flatShading), + !1 === this.visible && (n.visible = !1), + !1 === this.toneMapped && (n.toneMapped = !1), + '{}' !== JSON.stringify(this.userData) && (n.userData = this.userData), + e) + ) { + const e = i(t.textures), + r = i(t.images) + e.length > 0 && (n.textures = e), r.length > 0 && (n.images = r) + } + return n + } + clone() { + return new this.constructor().copy(this) + } + copy(t) { + ;(this.name = t.name), + (this.fog = t.fog), + (this.blending = t.blending), + (this.side = t.side), + (this.vertexColors = t.vertexColors), + (this.opacity = t.opacity), + (this.transparent = t.transparent), + (this.blendSrc = t.blendSrc), + (this.blendDst = t.blendDst), + (this.blendEquation = t.blendEquation), + (this.blendSrcAlpha = t.blendSrcAlpha), + (this.blendDstAlpha = t.blendDstAlpha), + (this.blendEquationAlpha = t.blendEquationAlpha), + (this.depthFunc = t.depthFunc), + (this.depthTest = t.depthTest), + (this.depthWrite = t.depthWrite), + (this.stencilWriteMask = t.stencilWriteMask), + (this.stencilFunc = t.stencilFunc), + (this.stencilRef = t.stencilRef), + (this.stencilFuncMask = t.stencilFuncMask), + (this.stencilFail = t.stencilFail), + (this.stencilZFail = t.stencilZFail), + (this.stencilZPass = t.stencilZPass), + (this.stencilWrite = t.stencilWrite) + const e = t.clippingPlanes + let n = null + if (null !== e) { + const t = e.length + n = new Array(t) + for (let i = 0; i !== t; ++i) n[i] = e[i].clone() + } + return ( + (this.clippingPlanes = n), + (this.clipIntersection = t.clipIntersection), + (this.clipShadows = t.clipShadows), + (this.shadowSide = t.shadowSide), + (this.colorWrite = t.colorWrite), + (this.precision = t.precision), + (this.polygonOffset = t.polygonOffset), + (this.polygonOffsetFactor = t.polygonOffsetFactor), + (this.polygonOffsetUnits = t.polygonOffsetUnits), + (this.dithering = t.dithering), + (this.alphaTest = t.alphaTest), + (this.alphaToCoverage = t.alphaToCoverage), + (this.premultipliedAlpha = t.premultipliedAlpha), + (this.visible = t.visible), + (this.toneMapped = t.toneMapped), + (this.userData = JSON.parse(JSON.stringify(t.userData))), + this + ) + } + dispose() { + this.dispatchEvent({ type: 'dispose' }) + } + set needsUpdate(t) { + !0 === t && this.version++ + } + } + Ee.prototype.isMaterial = !0 + const Le = { + aliceblue: 15792383, + antiquewhite: 16444375, + aqua: 65535, + aquamarine: 8388564, + azure: 15794175, + beige: 16119260, + bisque: 16770244, + black: 0, + blanchedalmond: 16772045, + blue: 255, + blueviolet: 9055202, + brown: 10824234, + burlywood: 14596231, + cadetblue: 6266528, + chartreuse: 8388352, + chocolate: 13789470, + coral: 16744272, + cornflowerblue: 6591981, + cornsilk: 16775388, + crimson: 14423100, + cyan: 65535, + darkblue: 139, + darkcyan: 35723, + darkgoldenrod: 12092939, + darkgray: 11119017, + darkgreen: 25600, + darkgrey: 11119017, + darkkhaki: 12433259, + darkmagenta: 9109643, + darkolivegreen: 5597999, + darkorange: 16747520, + darkorchid: 10040012, + darkred: 9109504, + darksalmon: 15308410, + darkseagreen: 9419919, + darkslateblue: 4734347, + darkslategray: 3100495, + darkslategrey: 3100495, + darkturquoise: 52945, + darkviolet: 9699539, + deeppink: 16716947, + deepskyblue: 49151, + dimgray: 6908265, + dimgrey: 6908265, + dodgerblue: 2003199, + firebrick: 11674146, + floralwhite: 16775920, + forestgreen: 2263842, + fuchsia: 16711935, + gainsboro: 14474460, + ghostwhite: 16316671, + gold: 16766720, + goldenrod: 14329120, + gray: 8421504, + green: 32768, + greenyellow: 11403055, + grey: 8421504, + honeydew: 15794160, + hotpink: 16738740, + indianred: 13458524, + indigo: 4915330, + ivory: 16777200, + khaki: 15787660, + lavender: 15132410, + lavenderblush: 16773365, + lawngreen: 8190976, + lemonchiffon: 16775885, + lightblue: 11393254, + lightcoral: 15761536, + lightcyan: 14745599, + lightgoldenrodyellow: 16448210, + lightgray: 13882323, + lightgreen: 9498256, + lightgrey: 13882323, + lightpink: 16758465, + lightsalmon: 16752762, + lightseagreen: 2142890, + lightskyblue: 8900346, + lightslategray: 7833753, + lightslategrey: 7833753, + lightsteelblue: 11584734, + lightyellow: 16777184, + lime: 65280, + limegreen: 3329330, + linen: 16445670, + magenta: 16711935, + maroon: 8388608, + mediumaquamarine: 6737322, + mediumblue: 205, + mediumorchid: 12211667, + mediumpurple: 9662683, + mediumseagreen: 3978097, + mediumslateblue: 8087790, + mediumspringgreen: 64154, + mediumturquoise: 4772300, + mediumvioletred: 13047173, + midnightblue: 1644912, + mintcream: 16121850, + mistyrose: 16770273, + moccasin: 16770229, + navajowhite: 16768685, + navy: 128, + oldlace: 16643558, + olive: 8421376, + olivedrab: 7048739, + orange: 16753920, + orangered: 16729344, + orchid: 14315734, + palegoldenrod: 15657130, + palegreen: 10025880, + paleturquoise: 11529966, + palevioletred: 14381203, + papayawhip: 16773077, + peachpuff: 16767673, + peru: 13468991, + pink: 16761035, + plum: 14524637, + powderblue: 11591910, + purple: 8388736, + rebeccapurple: 6697881, + red: 16711680, + rosybrown: 12357519, + royalblue: 4286945, + saddlebrown: 9127187, + salmon: 16416882, + sandybrown: 16032864, + seagreen: 3050327, + seashell: 16774638, + sienna: 10506797, + silver: 12632256, + skyblue: 8900331, + slateblue: 6970061, + slategray: 7372944, + slategrey: 7372944, + snow: 16775930, + springgreen: 65407, + steelblue: 4620980, + tan: 13808780, + teal: 32896, + thistle: 14204888, + tomato: 16737095, + turquoise: 4251856, + violet: 15631086, + wheat: 16113331, + white: 16777215, + whitesmoke: 16119285, + yellow: 16776960, + yellowgreen: 10145074, + }, + Ae = { h: 0, s: 0, l: 0 }, + Re = { h: 0, s: 0, l: 0 } + function Ce(t, e, n) { + return ( + n < 0 && (n += 1), + n > 1 && (n -= 1), + n < 1 / 6 + ? t + 6 * (e - t) * n + : n < 0.5 + ? e + : n < 2 / 3 + ? t + 6 * (e - t) * (2 / 3 - n) + : t + ) + } + function Pe(t) { + return t < 0.04045 ? 0.0773993808 * t : Math.pow(0.9478672986 * t + 0.0521327014, 2.4) + } + function De(t) { + return t < 0.0031308 ? 12.92 * t : 1.055 * Math.pow(t, 0.41666) - 0.055 + } + class Ie { + constructor(t, e, n) { + return void 0 === e && void 0 === n ? this.set(t) : this.setRGB(t, e, n) + } + set(t) { + return ( + t && t.isColor + ? this.copy(t) + : 'number' === typeof t + ? this.setHex(t) + : 'string' === typeof t && this.setStyle(t), + this + ) + } + setScalar(t) { + return (this.r = t), (this.g = t), (this.b = t), this + } + setHex(t) { + return ( + (t = Math.floor(t)), + (this.r = ((t >> 16) & 255) / 255), + (this.g = ((t >> 8) & 255) / 255), + (this.b = (255 & t) / 255), + this + ) + } + setRGB(t, e, n) { + return (this.r = t), (this.g = e), (this.b = n), this + } + setHSL(t, e, n) { + if (((t = Z(t, 1)), (e = J(e, 0, 1)), (n = J(n, 0, 1)), 0 === e)) + this.r = this.g = this.b = n + else { + const i = n <= 0.5 ? n * (1 + e) : n + e - n * e, + r = 2 * n - i + ;(this.r = Ce(r, i, t + 1 / 3)), (this.g = Ce(r, i, t)), (this.b = Ce(r, i, t - 1 / 3)) + } + return this + } + setStyle(t) { + function e(e) { + void 0 !== e && + parseFloat(e) < 1 && + console.warn('THREE.Color: Alpha component of ' + t + ' will be ignored.') + } + let n + if ((n = /^((?:rgb|hsl)a?)\(([^\)]*)\)/.exec(t))) { + let t + const i = n[1], + r = n[2] + switch (i) { + case 'rgb': + case 'rgba': + if ((t = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r))) + return ( + (this.r = Math.min(255, parseInt(t[1], 10)) / 255), + (this.g = Math.min(255, parseInt(t[2], 10)) / 255), + (this.b = Math.min(255, parseInt(t[3], 10)) / 255), + e(t[4]), + this + ) + if ( + (t = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(r)) + ) + return ( + (this.r = Math.min(100, parseInt(t[1], 10)) / 100), + (this.g = Math.min(100, parseInt(t[2], 10)) / 100), + (this.b = Math.min(100, parseInt(t[3], 10)) / 100), + e(t[4]), + this + ) + break + case 'hsl': + case 'hsla': + if ( + (t = + /^\s*(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( + r, + )) + ) { + const n = parseFloat(t[1]) / 360, + i = parseInt(t[2], 10) / 100, + r = parseInt(t[3], 10) / 100 + return e(t[4]), this.setHSL(n, i, r) + } + } + } else if ((n = /^\#([A-Fa-f\d]+)$/.exec(t))) { + const t = n[1], + e = t.length + if (3 === e) + return ( + (this.r = parseInt(t.charAt(0) + t.charAt(0), 16) / 255), + (this.g = parseInt(t.charAt(1) + t.charAt(1), 16) / 255), + (this.b = parseInt(t.charAt(2) + t.charAt(2), 16) / 255), + this + ) + if (6 === e) + return ( + (this.r = parseInt(t.charAt(0) + t.charAt(1), 16) / 255), + (this.g = parseInt(t.charAt(2) + t.charAt(3), 16) / 255), + (this.b = parseInt(t.charAt(4) + t.charAt(5), 16) / 255), + this + ) + } + return t && t.length > 0 ? this.setColorName(t) : this + } + setColorName(t) { + const e = Le[t.toLowerCase()] + return ( + void 0 !== e ? this.setHex(e) : console.warn('THREE.Color: Unknown color ' + t), this + ) + } + clone() { + return new this.constructor(this.r, this.g, this.b) + } + copy(t) { + return (this.r = t.r), (this.g = t.g), (this.b = t.b), this + } + copyGammaToLinear(t, e = 2) { + return ( + (this.r = Math.pow(t.r, e)), + (this.g = Math.pow(t.g, e)), + (this.b = Math.pow(t.b, e)), + this + ) + } + copyLinearToGamma(t, e = 2) { + const n = e > 0 ? 1 / e : 1 + return ( + (this.r = Math.pow(t.r, n)), + (this.g = Math.pow(t.g, n)), + (this.b = Math.pow(t.b, n)), + this + ) + } + convertGammaToLinear(t) { + return this.copyGammaToLinear(this, t), this + } + convertLinearToGamma(t) { + return this.copyLinearToGamma(this, t), this + } + copySRGBToLinear(t) { + return (this.r = Pe(t.r)), (this.g = Pe(t.g)), (this.b = Pe(t.b)), this + } + copyLinearToSRGB(t) { + return (this.r = De(t.r)), (this.g = De(t.g)), (this.b = De(t.b)), this + } + convertSRGBToLinear() { + return this.copySRGBToLinear(this), this + } + convertLinearToSRGB() { + return this.copyLinearToSRGB(this), this + } + getHex() { + return ((255 * this.r) << 16) ^ ((255 * this.g) << 8) ^ ((255 * this.b) << 0) + } + getHexString() { + return ('000000' + this.getHex().toString(16)).slice(-6) + } + getHSL(t) { + const e = this.r, + n = this.g, + i = this.b, + r = Math.max(e, n, i), + s = Math.min(e, n, i) + let a, o + const l = (s + r) / 2 + if (s === r) (a = 0), (o = 0) + else { + const t = r - s + switch (((o = l <= 0.5 ? t / (r + s) : t / (2 - r - s)), r)) { + case e: + a = (n - i) / t + (n < i ? 6 : 0) + break + case n: + a = (i - e) / t + 2 + break + case i: + a = (e - n) / t + 4 + } + a /= 6 + } + return (t.h = a), (t.s = o), (t.l = l), t + } + getStyle() { + return ( + 'rgb(' + + ((255 * this.r) | 0) + + ',' + + ((255 * this.g) | 0) + + ',' + + ((255 * this.b) | 0) + + ')' + ) + } + offsetHSL(t, e, n) { + return ( + this.getHSL(Ae), + (Ae.h += t), + (Ae.s += e), + (Ae.l += n), + this.setHSL(Ae.h, Ae.s, Ae.l), + this + ) + } + add(t) { + return (this.r += t.r), (this.g += t.g), (this.b += t.b), this + } + addColors(t, e) { + return (this.r = t.r + e.r), (this.g = t.g + e.g), (this.b = t.b + e.b), this + } + addScalar(t) { + return (this.r += t), (this.g += t), (this.b += t), this + } + sub(t) { + return ( + (this.r = Math.max(0, this.r - t.r)), + (this.g = Math.max(0, this.g - t.g)), + (this.b = Math.max(0, this.b - t.b)), + this + ) + } + multiply(t) { + return (this.r *= t.r), (this.g *= t.g), (this.b *= t.b), this + } + multiplyScalar(t) { + return (this.r *= t), (this.g *= t), (this.b *= t), this + } + lerp(t, e) { + return ( + (this.r += (t.r - this.r) * e), + (this.g += (t.g - this.g) * e), + (this.b += (t.b - this.b) * e), + this + ) + } + lerpColors(t, e, n) { + return ( + (this.r = t.r + (e.r - t.r) * n), + (this.g = t.g + (e.g - t.g) * n), + (this.b = t.b + (e.b - t.b) * n), + this + ) + } + lerpHSL(t, e) { + this.getHSL(Ae), t.getHSL(Re) + const n = Q(Ae.h, Re.h, e), + i = Q(Ae.s, Re.s, e), + r = Q(Ae.l, Re.l, e) + return this.setHSL(n, i, r), this + } + equals(t) { + return t.r === this.r && t.g === this.g && t.b === this.b + } + fromArray(t, e = 0) { + return (this.r = t[e]), (this.g = t[e + 1]), (this.b = t[e + 2]), this + } + toArray(t = [], e = 0) { + return (t[e] = this.r), (t[e + 1] = this.g), (t[e + 2] = this.b), t + } + fromBufferAttribute(t, e) { + return ( + (this.r = t.getX(e)), + (this.g = t.getY(e)), + (this.b = t.getZ(e)), + !0 === t.normalized && ((this.r /= 255), (this.g /= 255), (this.b /= 255)), + this + ) + } + toJSON() { + return this.getHex() + } + } + ;(Ie.NAMES = Le), + (Ie.prototype.isColor = !0), + (Ie.prototype.r = 1), + (Ie.prototype.g = 1), + (Ie.prototype.b = 1) + class Ne extends Ee { + constructor(t) { + super(), + (this.type = 'MeshBasicMaterial'), + (this.color = new Ie(16777215)), + (this.map = null), + (this.lightMap = null), + (this.lightMapIntensity = 1), + (this.aoMap = null), + (this.aoMapIntensity = 1), + (this.specularMap = null), + (this.alphaMap = null), + (this.envMap = null), + (this.combine = 0), + (this.reflectivity = 1), + (this.refractionRatio = 0.98), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.wireframeLinecap = 'round'), + (this.wireframeLinejoin = 'round'), + (this.morphTargets = !1), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.map = t.map), + (this.lightMap = t.lightMap), + (this.lightMapIntensity = t.lightMapIntensity), + (this.aoMap = t.aoMap), + (this.aoMapIntensity = t.aoMapIntensity), + (this.specularMap = t.specularMap), + (this.alphaMap = t.alphaMap), + (this.envMap = t.envMap), + (this.combine = t.combine), + (this.reflectivity = t.reflectivity), + (this.refractionRatio = t.refractionRatio), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.wireframeLinecap = t.wireframeLinecap), + (this.wireframeLinejoin = t.wireframeLinejoin), + (this.morphTargets = t.morphTargets), + this + ) + } + } + Ne.prototype.isMeshBasicMaterial = !0 + const ze = new ut(), + Oe = new tt() + class Be { + constructor(t, e, n) { + if (Array.isArray(t)) + throw new TypeError('THREE.BufferAttribute: array should be a Typed Array.') + ;(this.name = ''), + (this.array = t), + (this.itemSize = e), + (this.count = void 0 !== t ? t.length / e : 0), + (this.normalized = !0 === n), + (this.usage = G), + (this.updateRange = { offset: 0, count: -1 }), + (this.version = 0) + } + onUploadCallback() {} + set needsUpdate(t) { + !0 === t && this.version++ + } + setUsage(t) { + return (this.usage = t), this + } + copy(t) { + return ( + (this.name = t.name), + (this.array = new t.array.constructor(t.array)), + (this.itemSize = t.itemSize), + (this.count = t.count), + (this.normalized = t.normalized), + (this.usage = t.usage), + this + ) + } + copyAt(t, e, n) { + ;(t *= this.itemSize), (n *= e.itemSize) + for (let i = 0, r = this.itemSize; i < r; i++) this.array[t + i] = e.array[n + i] + return this + } + copyArray(t) { + return this.array.set(t), this + } + copyColorsArray(t) { + const e = this.array + let n = 0 + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i] + void 0 === r && + (console.warn('THREE.BufferAttribute.copyColorsArray(): color is undefined', i), + (r = new Ie())), + (e[n++] = r.r), + (e[n++] = r.g), + (e[n++] = r.b) + } + return this + } + copyVector2sArray(t) { + const e = this.array + let n = 0 + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i] + void 0 === r && + (console.warn('THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i), + (r = new tt())), + (e[n++] = r.x), + (e[n++] = r.y) + } + return this + } + copyVector3sArray(t) { + const e = this.array + let n = 0 + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i] + void 0 === r && + (console.warn('THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i), + (r = new ut())), + (e[n++] = r.x), + (e[n++] = r.y), + (e[n++] = r.z) + } + return this + } + copyVector4sArray(t) { + const e = this.array + let n = 0 + for (let i = 0, r = t.length; i < r; i++) { + let r = t[i] + void 0 === r && + (console.warn('THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i), + (r = new ot())), + (e[n++] = r.x), + (e[n++] = r.y), + (e[n++] = r.z), + (e[n++] = r.w) + } + return this + } + applyMatrix3(t) { + if (2 === this.itemSize) + for (let e = 0, n = this.count; e < n; e++) + Oe.fromBufferAttribute(this, e), Oe.applyMatrix3(t), this.setXY(e, Oe.x, Oe.y) + else if (3 === this.itemSize) + for (let e = 0, n = this.count; e < n; e++) + ze.fromBufferAttribute(this, e), ze.applyMatrix3(t), this.setXYZ(e, ze.x, ze.y, ze.z) + return this + } + applyMatrix4(t) { + for (let e = 0, n = this.count; e < n; e++) + (ze.x = this.getX(e)), + (ze.y = this.getY(e)), + (ze.z = this.getZ(e)), + ze.applyMatrix4(t), + this.setXYZ(e, ze.x, ze.y, ze.z) + return this + } + applyNormalMatrix(t) { + for (let e = 0, n = this.count; e < n; e++) + (ze.x = this.getX(e)), + (ze.y = this.getY(e)), + (ze.z = this.getZ(e)), + ze.applyNormalMatrix(t), + this.setXYZ(e, ze.x, ze.y, ze.z) + return this + } + transformDirection(t) { + for (let e = 0, n = this.count; e < n; e++) + (ze.x = this.getX(e)), + (ze.y = this.getY(e)), + (ze.z = this.getZ(e)), + ze.transformDirection(t), + this.setXYZ(e, ze.x, ze.y, ze.z) + return this + } + set(t, e = 0) { + return this.array.set(t, e), this + } + getX(t) { + return this.array[t * this.itemSize] + } + setX(t, e) { + return (this.array[t * this.itemSize] = e), this + } + getY(t) { + return this.array[t * this.itemSize + 1] + } + setY(t, e) { + return (this.array[t * this.itemSize + 1] = e), this + } + getZ(t) { + return this.array[t * this.itemSize + 2] + } + setZ(t, e) { + return (this.array[t * this.itemSize + 2] = e), this + } + getW(t) { + return this.array[t * this.itemSize + 3] + } + setW(t, e) { + return (this.array[t * this.itemSize + 3] = e), this + } + setXY(t, e, n) { + return (t *= this.itemSize), (this.array[t + 0] = e), (this.array[t + 1] = n), this + } + setXYZ(t, e, n, i) { + return ( + (t *= this.itemSize), + (this.array[t + 0] = e), + (this.array[t + 1] = n), + (this.array[t + 2] = i), + this + ) + } + setXYZW(t, e, n, i, r) { + return ( + (t *= this.itemSize), + (this.array[t + 0] = e), + (this.array[t + 1] = n), + (this.array[t + 2] = i), + (this.array[t + 3] = r), + this + ) + } + onUpload(t) { + return (this.onUploadCallback = t), this + } + clone() { + return new this.constructor(this.array, this.itemSize).copy(this) + } + toJSON() { + const t = { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: Array.prototype.slice.call(this.array), + normalized: this.normalized, + } + return ( + '' !== this.name && (t.name = this.name), + this.usage !== G && (t.usage = this.usage), + (0 === this.updateRange.offset && -1 === this.updateRange.count) || + (t.updateRange = this.updateRange), + t + ) + } + } + Be.prototype.isBufferAttribute = !0 + class Fe extends Be { + constructor(t, e, n) { + super(new Uint16Array(t), e, n) + } + } + class Ue extends Be { + constructor(t, e, n) { + super(new Uint32Array(t), e, n) + } + } + ;(class extends Be { + constructor(t, e, n) { + super(new Uint16Array(t), e, n) + } + }.prototype.isFloat16BufferAttribute = !0) + class He extends Be { + constructor(t, e, n) { + super(new Float32Array(t), e, n) + } + } + function Ge(t) { + if (0 === t.length) return -1 / 0 + let e = t[0] + for (let n = 1, i = t.length; n < i; ++n) t[n] > e && (e = t[n]) + return e + } + Int8Array, + Uint8Array, + Uint8ClampedArray, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Float32Array, + Float64Array + let Ve = 0 + const ke = new Vt(), + We = new pe(), + je = new ut(), + qe = new mt(), + Xe = new mt(), + Ye = new ut() + class Je extends W { + constructor() { + super(), + Object.defineProperty(this, 'id', { value: Ve++ }), + (this.uuid = Y()), + (this.name = ''), + (this.type = 'BufferGeometry'), + (this.index = null), + (this.attributes = {}), + (this.morphAttributes = {}), + (this.morphTargetsRelative = !1), + (this.groups = []), + (this.boundingBox = null), + (this.boundingSphere = null), + (this.drawRange = { start: 0, count: 1 / 0 }), + (this.userData = {}) + } + getIndex() { + return this.index + } + setIndex(t) { + return ( + Array.isArray(t) + ? (this.index = new (Ge(t) > 65535 ? Ue : Fe)(t, 1)) + : (this.index = t), + this + ) + } + getAttribute(t) { + return this.attributes[t] + } + setAttribute(t, e) { + return (this.attributes[t] = e), this + } + deleteAttribute(t) { + return delete this.attributes[t], this + } + hasAttribute(t) { + return void 0 !== this.attributes[t] + } + addGroup(t, e, n = 0) { + this.groups.push({ start: t, count: e, materialIndex: n }) + } + clearGroups() { + this.groups = [] + } + setDrawRange(t, e) { + ;(this.drawRange.start = t), (this.drawRange.count = e) + } + applyMatrix4(t) { + const e = this.attributes.position + void 0 !== e && (e.applyMatrix4(t), (e.needsUpdate = !0)) + const n = this.attributes.normal + if (void 0 !== n) { + const e = new et().getNormalMatrix(t) + n.applyNormalMatrix(e), (n.needsUpdate = !0) + } + const i = this.attributes.tangent + return ( + void 0 !== i && (i.transformDirection(t), (i.needsUpdate = !0)), + null !== this.boundingBox && this.computeBoundingBox(), + null !== this.boundingSphere && this.computeBoundingSphere(), + this + ) + } + applyQuaternion(t) { + return ke.makeRotationFromQuaternion(t), this.applyMatrix4(ke), this + } + rotateX(t) { + return ke.makeRotationX(t), this.applyMatrix4(ke), this + } + rotateY(t) { + return ke.makeRotationY(t), this.applyMatrix4(ke), this + } + rotateZ(t) { + return ke.makeRotationZ(t), this.applyMatrix4(ke), this + } + translate(t, e, n) { + return ke.makeTranslation(t, e, n), this.applyMatrix4(ke), this + } + scale(t, e, n) { + return ke.makeScale(t, e, n), this.applyMatrix4(ke), this + } + lookAt(t) { + return We.lookAt(t), We.updateMatrix(), this.applyMatrix4(We.matrix), this + } + center() { + return ( + this.computeBoundingBox(), + this.boundingBox.getCenter(je).negate(), + this.translate(je.x, je.y, je.z), + this + ) + } + setFromPoints(t) { + const e = [] + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n] + e.push(i.x, i.y, i.z || 0) + } + return this.setAttribute('position', new He(e, 3)), this + } + computeBoundingBox() { + null === this.boundingBox && (this.boundingBox = new mt()) + const t = this.attributes.position, + e = this.morphAttributes.position + if (t && t.isGLBufferAttribute) + return ( + console.error( + 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', + this, + ), + void this.boundingBox.set(new ut(-1 / 0, -1 / 0, -1 / 0), new ut(1 / 0, 1 / 0, 1 / 0)) + ) + if (void 0 !== t) { + if ((this.boundingBox.setFromBufferAttribute(t), e)) + for (let n = 0, i = e.length; n < i; n++) { + const t = e[n] + qe.setFromBufferAttribute(t), + this.morphTargetsRelative + ? (Ye.addVectors(this.boundingBox.min, qe.min), + this.boundingBox.expandByPoint(Ye), + Ye.addVectors(this.boundingBox.max, qe.max), + this.boundingBox.expandByPoint(Ye)) + : (this.boundingBox.expandByPoint(qe.min), + this.boundingBox.expandByPoint(qe.max)) + } + } else this.boundingBox.makeEmpty() + ;(isNaN(this.boundingBox.min.x) || + isNaN(this.boundingBox.min.y) || + isNaN(this.boundingBox.min.z)) && + console.error( + 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', + this, + ) + } + computeBoundingSphere() { + null === this.boundingSphere && (this.boundingSphere = new It()) + const t = this.attributes.position, + e = this.morphAttributes.position + if (t && t.isGLBufferAttribute) + return ( + console.error( + 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', + this, + ), + void this.boundingSphere.set(new ut(), 1 / 0) + ) + if (t) { + const n = this.boundingSphere.center + if ((qe.setFromBufferAttribute(t), e)) + for (let t = 0, r = e.length; t < r; t++) { + const n = e[t] + Xe.setFromBufferAttribute(n), + this.morphTargetsRelative + ? (Ye.addVectors(qe.min, Xe.min), + qe.expandByPoint(Ye), + Ye.addVectors(qe.max, Xe.max), + qe.expandByPoint(Ye)) + : (qe.expandByPoint(Xe.min), qe.expandByPoint(Xe.max)) + } + qe.getCenter(n) + let i = 0 + for (let e = 0, r = t.count; e < r; e++) + Ye.fromBufferAttribute(t, e), (i = Math.max(i, n.distanceToSquared(Ye))) + if (e) + for (let r = 0, s = e.length; r < s; r++) { + const s = e[r], + a = this.morphTargetsRelative + for (let e = 0, r = s.count; e < r; e++) + Ye.fromBufferAttribute(s, e), + a && (je.fromBufferAttribute(t, e), Ye.add(je)), + (i = Math.max(i, n.distanceToSquared(Ye))) + } + ;(this.boundingSphere.radius = Math.sqrt(i)), + isNaN(this.boundingSphere.radius) && + console.error( + 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', + this, + ) + } + } + computeFaceNormals() {} + computeTangents() { + const t = this.index, + e = this.attributes + if (null === t || void 0 === e.position || void 0 === e.normal || void 0 === e.uv) + return void console.error( + 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)', + ) + const n = t.array, + i = e.position.array, + r = e.normal.array, + s = e.uv.array, + a = i.length / 3 + void 0 === e.tangent && this.setAttribute('tangent', new Be(new Float32Array(4 * a), 4)) + const o = e.tangent.array, + l = [], + c = [] + for (let T = 0; T < a; T++) (l[T] = new ut()), (c[T] = new ut()) + const h = new ut(), + u = new ut(), + d = new ut(), + p = new tt(), + m = new tt(), + f = new tt(), + g = new ut(), + v = new ut() + function y(t, e, n) { + h.fromArray(i, 3 * t), + u.fromArray(i, 3 * e), + d.fromArray(i, 3 * n), + p.fromArray(s, 2 * t), + m.fromArray(s, 2 * e), + f.fromArray(s, 2 * n), + u.sub(h), + d.sub(h), + m.sub(p), + f.sub(p) + const r = 1 / (m.x * f.y - f.x * m.y) + isFinite(r) && + (g.copy(u).multiplyScalar(f.y).addScaledVector(d, -m.y).multiplyScalar(r), + v.copy(d).multiplyScalar(m.x).addScaledVector(u, -f.x).multiplyScalar(r), + l[t].add(g), + l[e].add(g), + l[n].add(g), + c[t].add(v), + c[e].add(v), + c[n].add(v)) + } + let x = this.groups + 0 === x.length && (x = [{ start: 0, count: n.length }]) + for (let T = 0, E = x.length; T < E; ++T) { + const t = x[T], + e = t.start + for (let i = e, r = e + t.count; i < r; i += 3) y(n[i + 0], n[i + 1], n[i + 2]) + } + const _ = new ut(), + b = new ut(), + M = new ut(), + w = new ut() + function S(t) { + M.fromArray(r, 3 * t), w.copy(M) + const e = l[t] + _.copy(e), _.sub(M.multiplyScalar(M.dot(e))).normalize(), b.crossVectors(w, e) + const n = b.dot(c[t]) < 0 ? -1 : 1 + ;(o[4 * t] = _.x), (o[4 * t + 1] = _.y), (o[4 * t + 2] = _.z), (o[4 * t + 3] = n) + } + for (let T = 0, E = x.length; T < E; ++T) { + const t = x[T], + e = t.start + for (let i = e, r = e + t.count; i < r; i += 3) S(n[i + 0]), S(n[i + 1]), S(n[i + 2]) + } + } + computeVertexNormals() { + const t = this.index, + e = this.getAttribute('position') + if (void 0 !== e) { + let n = this.getAttribute('normal') + if (void 0 === n) + (n = new Be(new Float32Array(3 * e.count), 3)), this.setAttribute('normal', n) + else for (let t = 0, e = n.count; t < e; t++) n.setXYZ(t, 0, 0, 0) + const i = new ut(), + r = new ut(), + s = new ut(), + a = new ut(), + o = new ut(), + l = new ut(), + c = new ut(), + h = new ut() + if (t) + for (let u = 0, d = t.count; u < d; u += 3) { + const d = t.getX(u + 0), + p = t.getX(u + 1), + m = t.getX(u + 2) + i.fromBufferAttribute(e, d), + r.fromBufferAttribute(e, p), + s.fromBufferAttribute(e, m), + c.subVectors(s, r), + h.subVectors(i, r), + c.cross(h), + a.fromBufferAttribute(n, d), + o.fromBufferAttribute(n, p), + l.fromBufferAttribute(n, m), + a.add(c), + o.add(c), + l.add(c), + n.setXYZ(d, a.x, a.y, a.z), + n.setXYZ(p, o.x, o.y, o.z), + n.setXYZ(m, l.x, l.y, l.z) + } + else + for (let t = 0, u = e.count; t < u; t += 3) + i.fromBufferAttribute(e, t + 0), + r.fromBufferAttribute(e, t + 1), + s.fromBufferAttribute(e, t + 2), + c.subVectors(s, r), + h.subVectors(i, r), + c.cross(h), + n.setXYZ(t + 0, c.x, c.y, c.z), + n.setXYZ(t + 1, c.x, c.y, c.z), + n.setXYZ(t + 2, c.x, c.y, c.z) + this.normalizeNormals(), (n.needsUpdate = !0) + } + } + merge(t, e) { + if (!t || !t.isBufferGeometry) + return void console.error( + 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', + t, + ) + void 0 === e && + ((e = 0), + console.warn( + 'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.', + )) + const n = this.attributes + for (const i in n) { + if (void 0 === t.attributes[i]) continue + const r = n[i].array, + s = t.attributes[i], + a = s.array, + o = s.itemSize * e, + l = Math.min(a.length, r.length - o) + for (let t = 0, e = o; t < l; t++, e++) r[e] = a[t] + } + return this + } + normalizeNormals() { + const t = this.attributes.normal + for (let e = 0, n = t.count; e < n; e++) + Ye.fromBufferAttribute(t, e), Ye.normalize(), t.setXYZ(e, Ye.x, Ye.y, Ye.z) + } + toNonIndexed() { + function t(t, e) { + const n = t.array, + i = t.itemSize, + r = t.normalized, + s = new n.constructor(e.length * i) + let a = 0, + o = 0 + for (let l = 0, c = e.length; l < c; l++) { + a = t.isInterleavedBufferAttribute ? e[l] * t.data.stride + t.offset : e[l] * i + for (let t = 0; t < i; t++) s[o++] = n[a++] + } + return new Be(s, i, r) + } + if (null === this.index) + return ( + console.warn( + 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.', + ), + this + ) + const e = new Je(), + n = this.index.array, + i = this.attributes + for (const a in i) { + const r = t(i[a], n) + e.setAttribute(a, r) + } + const r = this.morphAttributes + for (const a in r) { + const i = [], + s = r[a] + for (let e = 0, r = s.length; e < r; e++) { + const r = t(s[e], n) + i.push(r) + } + e.morphAttributes[a] = i + } + e.morphTargetsRelative = this.morphTargetsRelative + const s = this.groups + for (let a = 0, o = s.length; a < o; a++) { + const t = s[a] + e.addGroup(t.start, t.count, t.materialIndex) + } + return e + } + toJSON() { + const t = { + metadata: { version: 4.5, type: 'BufferGeometry', generator: 'BufferGeometry.toJSON' }, + } + if ( + ((t.uuid = this.uuid), + (t.type = this.type), + '' !== this.name && (t.name = this.name), + Object.keys(this.userData).length > 0 && (t.userData = this.userData), + void 0 !== this.parameters) + ) { + const e = this.parameters + for (const n in e) void 0 !== e[n] && (t[n] = e[n]) + return t + } + t.data = { attributes: {} } + const e = this.index + null !== e && + (t.data.index = { + type: e.array.constructor.name, + array: Array.prototype.slice.call(e.array), + }) + const n = this.attributes + for (const o in n) { + const e = n[o] + t.data.attributes[o] = e.toJSON(t.data) + } + const i = {} + let r = !1 + for (const o in this.morphAttributes) { + const e = this.morphAttributes[o], + n = [] + for (let i = 0, r = e.length; i < r; i++) { + const r = e[i] + n.push(r.toJSON(t.data)) + } + n.length > 0 && ((i[o] = n), (r = !0)) + } + r && + ((t.data.morphAttributes = i), + (t.data.morphTargetsRelative = this.morphTargetsRelative)) + const s = this.groups + s.length > 0 && (t.data.groups = JSON.parse(JSON.stringify(s))) + const a = this.boundingSphere + return ( + null !== a && + (t.data.boundingSphere = { center: a.center.toArray(), radius: a.radius }), + t + ) + } + clone() { + return new Je().copy(this) + } + copy(t) { + ;(this.index = null), + (this.attributes = {}), + (this.morphAttributes = {}), + (this.groups = []), + (this.boundingBox = null), + (this.boundingSphere = null) + const e = {} + this.name = t.name + const n = t.index + null !== n && this.setIndex(n.clone(e)) + const i = t.attributes + for (const l in i) { + const t = i[l] + this.setAttribute(l, t.clone(e)) + } + const r = t.morphAttributes + for (const l in r) { + const t = [], + n = r[l] + for (let i = 0, r = n.length; i < r; i++) t.push(n[i].clone(e)) + this.morphAttributes[l] = t + } + this.morphTargetsRelative = t.morphTargetsRelative + const s = t.groups + for (let l = 0, c = s.length; l < c; l++) { + const t = s[l] + this.addGroup(t.start, t.count, t.materialIndex) + } + const a = t.boundingBox + null !== a && (this.boundingBox = a.clone()) + const o = t.boundingSphere + return ( + null !== o && (this.boundingSphere = o.clone()), + (this.drawRange.start = t.drawRange.start), + (this.drawRange.count = t.drawRange.count), + (this.userData = t.userData), + this + ) + } + dispose() { + this.dispatchEvent({ type: 'dispose' }) + } + } + Je.prototype.isBufferGeometry = !0 + const Ze = new Vt(), + Qe = new Gt(), + Ke = new It(), + $e = new ut(), + tn = new ut(), + en = new ut(), + nn = new ut(), + rn = new ut(), + sn = new ut(), + an = new ut(), + on = new ut(), + ln = new ut(), + cn = new tt(), + hn = new tt(), + un = new tt(), + dn = new ut(), + pn = new ut() + class mn extends pe { + constructor(t = new Je(), e = new Ne()) { + super(), + (this.type = 'Mesh'), + (this.geometry = t), + (this.material = e), + this.updateMorphTargets() + } + copy(t) { + return ( + super.copy(t), + void 0 !== t.morphTargetInfluences && + (this.morphTargetInfluences = t.morphTargetInfluences.slice()), + void 0 !== t.morphTargetDictionary && + (this.morphTargetDictionary = Object.assign({}, t.morphTargetDictionary)), + (this.material = t.material), + (this.geometry = t.geometry), + this + ) + } + updateMorphTargets() { + const t = this.geometry + if (t.isBufferGeometry) { + const e = t.morphAttributes, + n = Object.keys(e) + if (n.length > 0) { + const t = e[n[0]] + if (void 0 !== t) { + ;(this.morphTargetInfluences = []), (this.morphTargetDictionary = {}) + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e].name || String(e) + this.morphTargetInfluences.push(0), (this.morphTargetDictionary[n] = e) + } + } + } + } else { + const e = t.morphTargets + void 0 !== e && + e.length > 0 && + console.error( + 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.', + ) + } + } + raycast(t, e) { + const n = this.geometry, + i = this.material, + r = this.matrixWorld + if (void 0 === i) return + if ( + (null === n.boundingSphere && n.computeBoundingSphere(), + Ke.copy(n.boundingSphere), + Ke.applyMatrix4(r), + !1 === t.ray.intersectsSphere(Ke)) + ) + return + if ( + (Ze.copy(r).invert(), + Qe.copy(t.ray).applyMatrix4(Ze), + null !== n.boundingBox && !1 === Qe.intersectsBox(n.boundingBox)) + ) + return + let s + if (n.isBufferGeometry) { + const r = n.index, + a = n.attributes.position, + o = n.morphAttributes.position, + l = n.morphTargetsRelative, + c = n.attributes.uv, + h = n.attributes.uv2, + u = n.groups, + d = n.drawRange + if (null !== r) + if (Array.isArray(i)) + for (let n = 0, p = u.length; n < p; n++) { + const p = u[n], + m = i[p.materialIndex] + for ( + let n = Math.max(p.start, d.start), + i = Math.min(p.start + p.count, d.start + d.count); + n < i; + n += 3 + ) { + const i = r.getX(n), + u = r.getX(n + 1), + d = r.getX(n + 2) + ;(s = fn(this, m, t, Qe, a, o, l, c, h, i, u, d)), + s && + ((s.faceIndex = Math.floor(n / 3)), + (s.face.materialIndex = p.materialIndex), + e.push(s)) + } + } + else { + for ( + let n = Math.max(0, d.start), u = Math.min(r.count, d.start + d.count); + n < u; + n += 3 + ) { + const u = r.getX(n), + d = r.getX(n + 1), + p = r.getX(n + 2) + ;(s = fn(this, i, t, Qe, a, o, l, c, h, u, d, p)), + s && ((s.faceIndex = Math.floor(n / 3)), e.push(s)) + } + } + else if (void 0 !== a) + if (Array.isArray(i)) + for (let n = 0, p = u.length; n < p; n++) { + const r = u[n], + p = i[r.materialIndex] + for ( + let n = Math.max(r.start, d.start), + i = Math.min(r.start + r.count, d.start + d.count); + n < i; + n += 3 + ) { + ;(s = fn(this, p, t, Qe, a, o, l, c, h, n, n + 1, n + 2)), + s && + ((s.faceIndex = Math.floor(n / 3)), + (s.face.materialIndex = r.materialIndex), + e.push(s)) + } + } + else { + for ( + let n = Math.max(0, d.start), r = Math.min(a.count, d.start + d.count); + n < r; + n += 3 + ) { + ;(s = fn(this, i, t, Qe, a, o, l, c, h, n, n + 1, n + 2)), + s && ((s.faceIndex = Math.floor(n / 3)), e.push(s)) + } + } + } else + n.isGeometry && + console.error( + 'THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.', + ) + } + } + function fn(t, e, n, i, r, a, o, l, c, h, u, d) { + $e.fromBufferAttribute(r, h), tn.fromBufferAttribute(r, u), en.fromBufferAttribute(r, d) + const p = t.morphTargetInfluences + if (e.morphTargets && a && p) { + an.set(0, 0, 0), on.set(0, 0, 0), ln.set(0, 0, 0) + for (let t = 0, e = a.length; t < e; t++) { + const e = p[t], + n = a[t] + 0 !== e && + (nn.fromBufferAttribute(n, h), + rn.fromBufferAttribute(n, u), + sn.fromBufferAttribute(n, d), + o + ? (an.addScaledVector(nn, e), on.addScaledVector(rn, e), ln.addScaledVector(sn, e)) + : (an.addScaledVector(nn.sub($e), e), + on.addScaledVector(rn.sub(tn), e), + ln.addScaledVector(sn.sub(en), e))) + } + $e.add(an), tn.add(on), en.add(ln) + } + t.isSkinnedMesh && (t.boneTransform(h, $e), t.boneTransform(u, tn), t.boneTransform(d, en)) + const m = (function (t, e, n, i, r, a, o, l) { + let c + if ( + ((c = + e.side === s + ? i.intersectTriangle(o, a, r, !0, l) + : i.intersectTriangle(r, a, o, 2 !== e.side, l)), + null === c) + ) + return null + pn.copy(l), pn.applyMatrix4(t.matrixWorld) + const h = n.ray.origin.distanceTo(pn) + return h < n.near || h > n.far ? null : { distance: h, point: pn.clone(), object: t } + })(t, e, n, i, $e, tn, en, dn) + if (m) { + l && + (cn.fromBufferAttribute(l, h), + hn.fromBufferAttribute(l, u), + un.fromBufferAttribute(l, d), + (m.uv = Se.getUV(dn, $e, tn, en, cn, hn, un, new tt()))), + c && + (cn.fromBufferAttribute(c, h), + hn.fromBufferAttribute(c, u), + un.fromBufferAttribute(c, d), + (m.uv2 = Se.getUV(dn, $e, tn, en, cn, hn, un, new tt()))) + const t = { a: h, b: u, c: d, normal: new ut(), materialIndex: 0 } + Se.getNormal($e, tn, en, t.normal), (m.face = t) + } + return m + } + mn.prototype.isMesh = !0 + class gn extends Je { + constructor(t = 1, e = 1, n = 1, i = 1, r = 1, s = 1) { + super(), + (this.type = 'BoxGeometry'), + (this.parameters = { + width: t, + height: e, + depth: n, + widthSegments: i, + heightSegments: r, + depthSegments: s, + }) + const a = this + ;(i = Math.floor(i)), (r = Math.floor(r)), (s = Math.floor(s)) + const o = [], + l = [], + c = [], + h = [] + let u = 0, + d = 0 + function p(t, e, n, i, r, s, p, m, f, g, v) { + const y = s / f, + x = p / g, + _ = s / 2, + b = p / 2, + M = m / 2, + w = f + 1, + S = g + 1 + let T = 0, + E = 0 + const L = new ut() + for (let a = 0; a < S; a++) { + const s = a * x - b + for (let o = 0; o < w; o++) { + const u = o * y - _ + ;(L[t] = u * i), + (L[e] = s * r), + (L[n] = M), + l.push(L.x, L.y, L.z), + (L[t] = 0), + (L[e] = 0), + (L[n] = m > 0 ? 1 : -1), + c.push(L.x, L.y, L.z), + h.push(o / f), + h.push(1 - a / g), + (T += 1) + } + } + for (let a = 0; a < g; a++) + for (let t = 0; t < f; t++) { + const e = u + t + w * a, + n = u + t + w * (a + 1), + i = u + (t + 1) + w * (a + 1), + r = u + (t + 1) + w * a + o.push(e, n, r), o.push(n, i, r), (E += 6) + } + a.addGroup(d, E, v), (d += E), (u += T) + } + p('z', 'y', 'x', -1, -1, n, e, t, s, r, 0), + p('z', 'y', 'x', 1, -1, n, e, -t, s, r, 1), + p('x', 'z', 'y', 1, 1, t, n, e, i, s, 2), + p('x', 'z', 'y', 1, -1, t, n, -e, i, s, 3), + p('x', 'y', 'z', 1, -1, t, e, n, i, r, 4), + p('x', 'y', 'z', -1, -1, t, e, -n, i, r, 5), + this.setIndex(o), + this.setAttribute('position', new He(l, 3)), + this.setAttribute('normal', new He(c, 3)), + this.setAttribute('uv', new He(h, 2)) + } + static fromJSON(t) { + return new gn( + t.width, + t.height, + t.depth, + t.widthSegments, + t.heightSegments, + t.depthSegments, + ) + } + } + function vn(t) { + const e = {} + for (const n in t) { + e[n] = {} + for (const i in t[n]) { + const r = t[n][i] + r && + (r.isColor || + r.isMatrix3 || + r.isMatrix4 || + r.isVector2 || + r.isVector3 || + r.isVector4 || + r.isTexture || + r.isQuaternion) + ? (e[n][i] = r.clone()) + : Array.isArray(r) + ? (e[n][i] = r.slice()) + : (e[n][i] = r) + } + } + return e + } + function yn(t) { + const e = {} + for (let n = 0; n < t.length; n++) { + const i = vn(t[n]) + for (const t in i) e[t] = i[t] + } + return e + } + const xn = { clone: vn, merge: yn } + class _n extends Ee { + constructor(t) { + super(), + (this.type = 'ShaderMaterial'), + (this.defines = {}), + (this.uniforms = {}), + (this.vertexShader = + 'void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}'), + (this.fragmentShader = + 'void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}'), + (this.linewidth = 1), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.fog = !1), + (this.lights = !1), + (this.clipping = !1), + (this.morphTargets = !1), + (this.morphNormals = !1), + (this.extensions = { + derivatives: !1, + fragDepth: !1, + drawBuffers: !1, + shaderTextureLOD: !1, + }), + (this.defaultAttributeValues = { color: [1, 1, 1], uv: [0, 0], uv2: [0, 0] }), + (this.index0AttributeName = void 0), + (this.uniformsNeedUpdate = !1), + (this.glslVersion = null), + void 0 !== t && + (void 0 !== t.attributes && + console.error( + 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.', + ), + this.setValues(t)) + } + copy(t) { + return ( + super.copy(t), + (this.fragmentShader = t.fragmentShader), + (this.vertexShader = t.vertexShader), + (this.uniforms = vn(t.uniforms)), + (this.defines = Object.assign({}, t.defines)), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.lights = t.lights), + (this.clipping = t.clipping), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + (this.extensions = Object.assign({}, t.extensions)), + (this.glslVersion = t.glslVersion), + this + ) + } + toJSON(t) { + const e = super.toJSON(t) + ;(e.glslVersion = this.glslVersion), (e.uniforms = {}) + for (const i in this.uniforms) { + const n = this.uniforms[i].value + n && n.isTexture + ? (e.uniforms[i] = { type: 't', value: n.toJSON(t).uuid }) + : n && n.isColor + ? (e.uniforms[i] = { type: 'c', value: n.getHex() }) + : n && n.isVector2 + ? (e.uniforms[i] = { type: 'v2', value: n.toArray() }) + : n && n.isVector3 + ? (e.uniforms[i] = { type: 'v3', value: n.toArray() }) + : n && n.isVector4 + ? (e.uniforms[i] = { type: 'v4', value: n.toArray() }) + : n && n.isMatrix3 + ? (e.uniforms[i] = { type: 'm3', value: n.toArray() }) + : n && n.isMatrix4 + ? (e.uniforms[i] = { type: 'm4', value: n.toArray() }) + : (e.uniforms[i] = { value: n }) + } + Object.keys(this.defines).length > 0 && (e.defines = this.defines), + (e.vertexShader = this.vertexShader), + (e.fragmentShader = this.fragmentShader) + const n = {} + for (const i in this.extensions) !0 === this.extensions[i] && (n[i] = !0) + return Object.keys(n).length > 0 && (e.extensions = n), e + } + } + _n.prototype.isShaderMaterial = !0 + class bn extends pe { + constructor() { + super(), + (this.type = 'Camera'), + (this.matrixWorldInverse = new Vt()), + (this.projectionMatrix = new Vt()), + (this.projectionMatrixInverse = new Vt()) + } + copy(t, e) { + return ( + super.copy(t, e), + this.matrixWorldInverse.copy(t.matrixWorldInverse), + this.projectionMatrix.copy(t.projectionMatrix), + this.projectionMatrixInverse.copy(t.projectionMatrixInverse), + this + ) + } + getWorldDirection(t) { + this.updateWorldMatrix(!0, !1) + const e = this.matrixWorld.elements + return t.set(-e[8], -e[9], -e[10]).normalize() + } + updateMatrixWorld(t) { + super.updateMatrixWorld(t), this.matrixWorldInverse.copy(this.matrixWorld).invert() + } + updateWorldMatrix(t, e) { + super.updateWorldMatrix(t, e), this.matrixWorldInverse.copy(this.matrixWorld).invert() + } + clone() { + return new this.constructor().copy(this) + } + } + bn.prototype.isCamera = !0 + class Mn extends bn { + constructor(t = 50, e = 1, n = 0.1, i = 2e3) { + super(), + (this.type = 'PerspectiveCamera'), + (this.fov = t), + (this.zoom = 1), + (this.near = n), + (this.far = i), + (this.focus = 10), + (this.aspect = e), + (this.view = null), + (this.filmGauge = 35), + (this.filmOffset = 0), + this.updateProjectionMatrix() + } + copy(t, e) { + return ( + super.copy(t, e), + (this.fov = t.fov), + (this.zoom = t.zoom), + (this.near = t.near), + (this.far = t.far), + (this.focus = t.focus), + (this.aspect = t.aspect), + (this.view = null === t.view ? null : Object.assign({}, t.view)), + (this.filmGauge = t.filmGauge), + (this.filmOffset = t.filmOffset), + this + ) + } + setFocalLength(t) { + const e = (0.5 * this.getFilmHeight()) / t + ;(this.fov = 2 * X * Math.atan(e)), this.updateProjectionMatrix() + } + getFocalLength() { + const t = Math.tan(0.5 * q * this.fov) + return (0.5 * this.getFilmHeight()) / t + } + getEffectiveFOV() { + return 2 * X * Math.atan(Math.tan(0.5 * q * this.fov) / this.zoom) + } + getFilmWidth() { + return this.filmGauge * Math.min(this.aspect, 1) + } + getFilmHeight() { + return this.filmGauge / Math.max(this.aspect, 1) + } + setViewOffset(t, e, n, i, r, s) { + ;(this.aspect = t / e), + null === this.view && + (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1, + }), + (this.view.enabled = !0), + (this.view.fullWidth = t), + (this.view.fullHeight = e), + (this.view.offsetX = n), + (this.view.offsetY = i), + (this.view.width = r), + (this.view.height = s), + this.updateProjectionMatrix() + } + clearViewOffset() { + null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() + } + updateProjectionMatrix() { + const t = this.near + let e = (t * Math.tan(0.5 * q * this.fov)) / this.zoom, + n = 2 * e, + i = this.aspect * n, + r = -0.5 * i + const s = this.view + if (null !== this.view && this.view.enabled) { + const t = s.fullWidth, + a = s.fullHeight + ;(r += (s.offsetX * i) / t), + (e -= (s.offsetY * n) / a), + (i *= s.width / t), + (n *= s.height / a) + } + const a = this.filmOffset + 0 !== a && (r += (t * a) / this.getFilmWidth()), + this.projectionMatrix.makePerspective(r, r + i, e, e - n, t, this.far), + this.projectionMatrixInverse.copy(this.projectionMatrix).invert() + } + toJSON(t) { + const e = super.toJSON(t) + return ( + (e.object.fov = this.fov), + (e.object.zoom = this.zoom), + (e.object.near = this.near), + (e.object.far = this.far), + (e.object.focus = this.focus), + (e.object.aspect = this.aspect), + null !== this.view && (e.object.view = Object.assign({}, this.view)), + (e.object.filmGauge = this.filmGauge), + (e.object.filmOffset = this.filmOffset), + e + ) + } + } + Mn.prototype.isPerspectiveCamera = !0 + const wn = 90 + class Sn extends pe { + constructor(t, e, n) { + if ((super(), (this.type = 'CubeCamera'), !0 !== n.isWebGLCubeRenderTarget)) + return void console.error( + 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.', + ) + this.renderTarget = n + const i = new Mn(wn, 1, t, e) + ;(i.layers = this.layers), i.up.set(0, -1, 0), i.lookAt(new ut(1, 0, 0)), this.add(i) + const r = new Mn(wn, 1, t, e) + ;(r.layers = this.layers), r.up.set(0, -1, 0), r.lookAt(new ut(-1, 0, 0)), this.add(r) + const s = new Mn(wn, 1, t, e) + ;(s.layers = this.layers), s.up.set(0, 0, 1), s.lookAt(new ut(0, 1, 0)), this.add(s) + const a = new Mn(wn, 1, t, e) + ;(a.layers = this.layers), a.up.set(0, 0, -1), a.lookAt(new ut(0, -1, 0)), this.add(a) + const o = new Mn(wn, 1, t, e) + ;(o.layers = this.layers), o.up.set(0, -1, 0), o.lookAt(new ut(0, 0, 1)), this.add(o) + const l = new Mn(wn, 1, t, e) + ;(l.layers = this.layers), l.up.set(0, -1, 0), l.lookAt(new ut(0, 0, -1)), this.add(l) + } + update(t, e) { + null === this.parent && this.updateMatrixWorld() + const n = this.renderTarget, + [i, r, s, a, o, l] = this.children, + c = t.xr.enabled, + h = t.getRenderTarget() + t.xr.enabled = !1 + const u = n.texture.generateMipmaps + ;(n.texture.generateMipmaps = !1), + t.setRenderTarget(n, 0), + t.render(e, i), + t.setRenderTarget(n, 1), + t.render(e, r), + t.setRenderTarget(n, 2), + t.render(e, s), + t.setRenderTarget(n, 3), + t.render(e, a), + t.setRenderTarget(n, 4), + t.render(e, o), + (n.texture.generateMipmaps = u), + t.setRenderTarget(n, 5), + t.render(e, l), + t.setRenderTarget(h), + (t.xr.enabled = c) + } + } + class Tn extends st { + constructor(t, e, n, i, r, s, a, l, c, h) { + super( + (t = void 0 !== t ? t : []), + (e = void 0 !== e ? e : o), + n, + i, + r, + s, + (a = void 0 !== a ? a : T), + l, + c, + h, + ), + (this._needsFlipEnvMap = !0), + (this.flipY = !1) + } + get images() { + return this.image + } + set images(t) { + this.image = t + } + } + Tn.prototype.isCubeTexture = !0 + class En extends lt { + constructor(t, e, n) { + Number.isInteger(e) && + (console.warn( + 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )', + ), + (e = n)), + super(t, t, e), + (e = e || {}), + (this.texture = new Tn( + void 0, + e.mapping, + e.wrapS, + e.wrapT, + e.magFilter, + e.minFilter, + e.format, + e.type, + e.anisotropy, + e.encoding, + )), + (this.texture.generateMipmaps = void 0 !== e.generateMipmaps && e.generateMipmaps), + (this.texture.minFilter = void 0 !== e.minFilter ? e.minFilter : v), + (this.texture._needsFlipEnvMap = !1) + } + fromEquirectangularTexture(t, e) { + ;(this.texture.type = e.type), + (this.texture.format = E), + (this.texture.encoding = e.encoding), + (this.texture.generateMipmaps = e.generateMipmaps), + (this.texture.minFilter = e.minFilter), + (this.texture.magFilter = e.magFilter) + const n = { + uniforms: { tEquirect: { value: null } }, + vertexShader: + '\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 <begin_vertex>\n\t\t\t\t\t#include <project_vertex>\n\n\t\t\t\t}\n\t\t\t', + fragmentShader: + '\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include <common>\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', + }, + i = new gn(5, 5, 5), + r = new _n({ + name: 'CubemapFromEquirect', + uniforms: vn(n.uniforms), + vertexShader: n.vertexShader, + fragmentShader: n.fragmentShader, + side: s, + blending: 0, + }) + r.uniforms.tEquirect.value = e + const a = new mn(i, r), + o = e.minFilter + e.minFilter === y && (e.minFilter = v) + return ( + new Sn(1, 10, this).update(t, a), + (e.minFilter = o), + a.geometry.dispose(), + a.material.dispose(), + this + ) + } + clear(t, e, n, i) { + const r = t.getRenderTarget() + for (let s = 0; s < 6; s++) t.setRenderTarget(this, s), t.clear(e, n, i) + t.setRenderTarget(r) + } + } + En.prototype.isWebGLCubeRenderTarget = !0 + const Ln = new ut(), + An = new ut(), + Rn = new et() + class Cn { + constructor(t = new ut(1, 0, 0), e = 0) { + ;(this.normal = t), (this.constant = e) + } + set(t, e) { + return this.normal.copy(t), (this.constant = e), this + } + setComponents(t, e, n, i) { + return this.normal.set(t, e, n), (this.constant = i), this + } + setFromNormalAndCoplanarPoint(t, e) { + return this.normal.copy(t), (this.constant = -e.dot(this.normal)), this + } + setFromCoplanarPoints(t, e, n) { + const i = Ln.subVectors(n, e).cross(An.subVectors(t, e)).normalize() + return this.setFromNormalAndCoplanarPoint(i, t), this + } + copy(t) { + return this.normal.copy(t.normal), (this.constant = t.constant), this + } + normalize() { + const t = 1 / this.normal.length() + return this.normal.multiplyScalar(t), (this.constant *= t), this + } + negate() { + return (this.constant *= -1), this.normal.negate(), this + } + distanceToPoint(t) { + return this.normal.dot(t) + this.constant + } + distanceToSphere(t) { + return this.distanceToPoint(t.center) - t.radius + } + projectPoint(t, e) { + return e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t) + } + intersectLine(t, e) { + const n = t.delta(Ln), + i = this.normal.dot(n) + if (0 === i) return 0 === this.distanceToPoint(t.start) ? e.copy(t.start) : null + const r = -(t.start.dot(this.normal) + this.constant) / i + return r < 0 || r > 1 ? null : e.copy(n).multiplyScalar(r).add(t.start) + } + intersectsLine(t) { + const e = this.distanceToPoint(t.start), + n = this.distanceToPoint(t.end) + return (e < 0 && n > 0) || (n < 0 && e > 0) + } + intersectsBox(t) { + return t.intersectsPlane(this) + } + intersectsSphere(t) { + return t.intersectsPlane(this) + } + coplanarPoint(t) { + return t.copy(this.normal).multiplyScalar(-this.constant) + } + applyMatrix4(t, e) { + const n = e || Rn.getNormalMatrix(t), + i = this.coplanarPoint(Ln).applyMatrix4(t), + r = this.normal.applyMatrix3(n).normalize() + return (this.constant = -i.dot(r)), this + } + translate(t) { + return (this.constant -= t.dot(this.normal)), this + } + equals(t) { + return t.normal.equals(this.normal) && t.constant === this.constant + } + clone() { + return new this.constructor().copy(this) + } + } + Cn.prototype.isPlane = !0 + const Pn = new It(), + Dn = new ut() + class In { + constructor( + t = new Cn(), + e = new Cn(), + n = new Cn(), + i = new Cn(), + r = new Cn(), + s = new Cn(), + ) { + this.planes = [t, e, n, i, r, s] + } + set(t, e, n, i, r, s) { + const a = this.planes + return ( + a[0].copy(t), a[1].copy(e), a[2].copy(n), a[3].copy(i), a[4].copy(r), a[5].copy(s), this + ) + } + copy(t) { + const e = this.planes + for (let n = 0; n < 6; n++) e[n].copy(t.planes[n]) + return this + } + setFromProjectionMatrix(t) { + const e = this.planes, + n = t.elements, + i = n[0], + r = n[1], + s = n[2], + a = n[3], + o = n[4], + l = n[5], + c = n[6], + h = n[7], + u = n[8], + d = n[9], + p = n[10], + m = n[11], + f = n[12], + g = n[13], + v = n[14], + y = n[15] + return ( + e[0].setComponents(a - i, h - o, m - u, y - f).normalize(), + e[1].setComponents(a + i, h + o, m + u, y + f).normalize(), + e[2].setComponents(a + r, h + l, m + d, y + g).normalize(), + e[3].setComponents(a - r, h - l, m - d, y - g).normalize(), + e[4].setComponents(a - s, h - c, m - p, y - v).normalize(), + e[5].setComponents(a + s, h + c, m + p, y + v).normalize(), + this + ) + } + intersectsObject(t) { + const e = t.geometry + return ( + null === e.boundingSphere && e.computeBoundingSphere(), + Pn.copy(e.boundingSphere).applyMatrix4(t.matrixWorld), + this.intersectsSphere(Pn) + ) + } + intersectsSprite(t) { + return ( + Pn.center.set(0, 0, 0), + (Pn.radius = 0.7071067811865476), + Pn.applyMatrix4(t.matrixWorld), + this.intersectsSphere(Pn) + ) + } + intersectsSphere(t) { + const e = this.planes, + n = t.center, + i = -t.radius + for (let r = 0; r < 6; r++) { + if (e[r].distanceToPoint(n) < i) return !1 + } + return !0 + } + intersectsBox(t) { + const e = this.planes + for (let n = 0; n < 6; n++) { + const i = e[n] + if ( + ((Dn.x = i.normal.x > 0 ? t.max.x : t.min.x), + (Dn.y = i.normal.y > 0 ? t.max.y : t.min.y), + (Dn.z = i.normal.z > 0 ? t.max.z : t.min.z), + i.distanceToPoint(Dn) < 0) + ) + return !1 + } + return !0 + } + containsPoint(t) { + const e = this.planes + for (let n = 0; n < 6; n++) if (e[n].distanceToPoint(t) < 0) return !1 + return !0 + } + clone() { + return new this.constructor().copy(this) + } + } + function Nn() { + let t = null, + e = !1, + n = null, + i = null + function r(e, s) { + n(e, s), (i = t.requestAnimationFrame(r)) + } + return { + start: function () { + !0 !== e && null !== n && ((i = t.requestAnimationFrame(r)), (e = !0)) + }, + stop: function () { + t.cancelAnimationFrame(i), (e = !1) + }, + setAnimationLoop: function (t) { + n = t + }, + setContext: function (e) { + t = e + }, + } + } + function zn(t, e) { + const n = e.isWebGL2, + i = new WeakMap() + return { + get: function (t) { + return t.isInterleavedBufferAttribute && (t = t.data), i.get(t) + }, + remove: function (e) { + e.isInterleavedBufferAttribute && (e = e.data) + const n = i.get(e) + n && (t.deleteBuffer(n.buffer), i.delete(e)) + }, + update: function (e, r) { + if (e.isGLBufferAttribute) { + const t = i.get(e) + return void ( + (!t || t.version < e.version) && + i.set(e, { + buffer: e.buffer, + type: e.type, + bytesPerElement: e.elementSize, + version: e.version, + }) + ) + } + e.isInterleavedBufferAttribute && (e = e.data) + const s = i.get(e) + void 0 === s + ? i.set( + e, + (function (e, i) { + const r = e.array, + s = e.usage, + a = t.createBuffer() + t.bindBuffer(i, a), t.bufferData(i, r, s), e.onUploadCallback() + let o = 5126 + return ( + r instanceof Float32Array + ? (o = 5126) + : r instanceof Float64Array + ? console.warn( + 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.', + ) + : r instanceof Uint16Array + ? e.isFloat16BufferAttribute + ? n + ? (o = 5131) + : console.warn( + 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.', + ) + : (o = 5123) + : r instanceof Int16Array + ? (o = 5122) + : r instanceof Uint32Array + ? (o = 5125) + : r instanceof Int32Array + ? (o = 5124) + : r instanceof Int8Array + ? (o = 5120) + : (r instanceof Uint8Array || r instanceof Uint8ClampedArray) && (o = 5121), + { + buffer: a, + type: o, + bytesPerElement: r.BYTES_PER_ELEMENT, + version: e.version, + } + ) + })(e, r), + ) + : s.version < e.version && + (!(function (e, i, r) { + const s = i.array, + a = i.updateRange + t.bindBuffer(r, e), + -1 === a.count + ? t.bufferSubData(r, 0, s) + : (n + ? t.bufferSubData(r, a.offset * s.BYTES_PER_ELEMENT, s, a.offset, a.count) + : t.bufferSubData( + r, + a.offset * s.BYTES_PER_ELEMENT, + s.subarray(a.offset, a.offset + a.count), + ), + (a.count = -1)) + })(s.buffer, e, r), + (s.version = e.version)) + }, + } + } + class On extends Je { + constructor(t = 1, e = 1, n = 1, i = 1) { + super(), + (this.type = 'PlaneGeometry'), + (this.parameters = { width: t, height: e, widthSegments: n, heightSegments: i }) + const r = t / 2, + s = e / 2, + a = Math.floor(n), + o = Math.floor(i), + l = a + 1, + c = o + 1, + h = t / a, + u = e / o, + d = [], + p = [], + m = [], + f = [] + for (let g = 0; g < c; g++) { + const t = g * u - s + for (let e = 0; e < l; e++) { + const n = e * h - r + p.push(n, -t, 0), m.push(0, 0, 1), f.push(e / a), f.push(1 - g / o) + } + } + for (let g = 0; g < o; g++) + for (let t = 0; t < a; t++) { + const e = t + l * g, + n = t + l * (g + 1), + i = t + 1 + l * (g + 1), + r = t + 1 + l * g + d.push(e, n, r), d.push(n, i, r) + } + this.setIndex(d), + this.setAttribute('position', new He(p, 3)), + this.setAttribute('normal', new He(m, 3)), + this.setAttribute('uv', new He(f, 2)) + } + static fromJSON(t) { + return new On(t.width, t.height, t.widthSegments, t.heightSegments) + } + } + const Bn = { + alphamap_fragment: + '#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif', + alphamap_pars_fragment: '#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif', + alphatest_fragment: + '#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif', + aomap_fragment: + '#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif', + aomap_pars_fragment: + '#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif', + begin_vertex: 'vec3 transformed = vec3( position );', + beginnormal_vertex: + 'vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif', + bsdfs: + 'vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\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\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\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#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotVH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_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}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * 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}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat 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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif', + bumpmap_pars_fragment: + '#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + 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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\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', + clipping_planes_fragment: + '#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif', + clipping_planes_pars_fragment: + '#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif', + clipping_planes_pars_vertex: + '#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif', + clipping_planes_vertex: + '#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif', + color_fragment: + '#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif', + color_pars_fragment: + '#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif', + color_pars_vertex: + '#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif', + color_vertex: + '#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_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', + 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; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\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};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\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}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\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}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\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}', + cube_uv_reflection_fragment: + '#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.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\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\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\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\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', + defaultnormal_vertex: + 'vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif', + displacementmap_pars_vertex: + '#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif', + displacementmap_vertex: + '#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif', + emissivemap_fragment: + '#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif', + emissivemap_pars_fragment: + '#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif', + encodings_fragment: 'gl_FragColor = linearToOutputTexel( gl_FragColor );', + encodings_pars_fragment: + '\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( 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}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}', + 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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\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', + envmap_common_pars_fragment: + '#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\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', + envmap_pars_fragment: + '#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\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', + envmap_pars_vertex: + '#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\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', + envmap_physical_pars_fragment: + '#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif', + 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', + fog_vertex: '#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif', + fog_pars_vertex: '#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif', + fog_fragment: + '#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif', + fog_pars_fragment: + '#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\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', + 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 texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}', + lightmap_fragment: + '#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif', + lightmap_pars_fragment: + '#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif', + lights_lambert_vertex: + 'vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif', + lights_pars_begin: + 'uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\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 GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\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 getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.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 GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif', + lights_toon_fragment: 'ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;', + lights_toon_pars_fragment: + 'varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)', + lights_phong_fragment: + 'BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;', + lights_phong_pars_fragment: + 'varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)', + lights_physical_fragment: + 'PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif', + lights_physical_pars_fragment: + 'struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\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.specularRoughness;\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * 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}', + lights_fragment_begin: + '\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\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\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, 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\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\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, 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\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, 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, geometry, 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\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\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 ], geometry );\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', + lights_fragment_maps: + '#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif', + lights_fragment_end: + '#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif', + logdepthbuf_fragment: + '#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif', + logdepthbuf_pars_fragment: + '#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif', + logdepthbuf_pars_vertex: + '#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif', + logdepthbuf_vertex: + '#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif', + map_fragment: + '#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif', + map_pars_fragment: '#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif', + map_particle_fragment: + '#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif', + map_particle_pars_fragment: + '#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif', + metalnessmap_fragment: + 'float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif', + metalnessmap_pars_fragment: + '#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif', + morphnormal_vertex: + '#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif', + morphtarget_pars_vertex: + '#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif', + morphtarget_vertex: + '#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif', + normal_fragment_begin: + 'float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;', + normal_fragment_maps: + '#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).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( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif', + normalmap_pars_fragment: + '#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.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 : faceDirection * inversesqrt( det );\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\t}\n#endif', + clearcoat_normal_fragment_begin: + '#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif', + clearcoat_normal_fragment_maps: + '#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\t#endif\n#endif', + clearcoat_pars_fragment: + '#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif', + 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.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( 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( 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 linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}', + premultiplied_alpha_fragment: + '#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif', + project_vertex: + 'vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;', + dithering_fragment: + '#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif', + 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', + roughnessmap_fragment: + 'float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif', + roughnessmap_pars_fragment: + '#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif', + shadowmap_pars_fragment: + '#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 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\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\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 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 shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\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 shadow;\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 shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif', + shadowmap_pars_vertex: + '#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 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 mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\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 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', + shadowmap_vertex: + '#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif', + 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.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.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ 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.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}', + 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', + skinning_pars_vertex: + '#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif', + 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', + 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', + specularmap_fragment: + 'float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif', + specularmap_pars_fragment: + '#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif', + tonemapping_fragment: + '#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif', + 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 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}\nvec3 CustomToneMapping( vec3 color ) { return color; }', + transmission_fragment: + '#ifdef USE_TRANSMISSION\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSNMAP\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition.xyz / vWorldPosition.w;\n\tvec3 v = normalize( cameraPosition - pos );\n\tfloat ior = ( 1.0 + 0.4 * reflectivity ) / ( 1.0 - 0.4 * reflectivity );\n\tvec3 transmission = transmissionFactor * getIBLVolumeRefraction(\n\t\tnormal, v, roughnessFactor, material.diffuseColor, totalSpecular,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationColor, attenuationDistance );\n\ttotalDiffuse = mix( totalDiffuse, transmission, transmissionFactor );\n#endif', + transmission_pars_fragment: + '#ifdef USE_TRANSMISSION\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 vec4 vWorldPosition;\n\tvec3 getVolumeTransmissionRay(vec3 n, vec3 v, float thickness, float ior, 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(float roughness, float ior) {\n\t\treturn roughness * clamp(ior * 2.0 - 2.0, 0.0, 1.0);\n\t}\n\tvec3 getTransmissionSample(vec2 fragCoord, float roughness, float ior) {\n\t\tfloat framebufferLod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness, ior);\n\t\treturn texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod).rgb;\n\t}\n\tvec3 applyVolumeAttenuation(vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance) {\n\t\tif (attenuationDistance == 0.0) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log(attenuationColor) / attenuationDistance;\n\t\t\tvec3 transmittance = exp(-attenuationCoefficient * transmissionDistance);\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec3 getIBLVolumeRefraction(vec3 n, vec3 v, float perceptualRoughness, vec3 baseColor, vec3 specularColor,\n\t\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\n\t\tvec3 attenuationColor, float attenuationDistance) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay(n, v, thickness, ior, modelMatrix);\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4(refractedRayExit, 1.0);\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec3 transmittedLight = getTransmissionSample(refractionCoords, perceptualRoughness, ior);\n\t\tvec3 attenuatedColor = applyVolumeAttenuation(transmittedLight, length(transmissionRay), attenuationColor, attenuationDistance);\n\t\treturn (1.0 - specularColor) * attenuatedColor * baseColor;\n\t}\n#endif', + uv_pars_fragment: + '#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif', + uv_pars_vertex: + '#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif', + uv_vertex: '#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif', + uv2_pars_fragment: + '#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif', + uv2_pars_vertex: + '#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif', + uv2_vertex: + '#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif', + worldpos_vertex: + '#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif', + background_frag: + 'uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}', + background_vert: + '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}', + cube_frag: + '#include <envmap_common_pars_fragment>\nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include <cube_uv_reflection_fragment>\nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include <envmap_fragment>\n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}', + cube_vert: + 'varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}', + depth_frag: + '#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <logdepthbuf_fragment>\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#endif\n}', + depth_vert: + '#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}', + distanceRGBA_frag: + '#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}', + distanceRGBA_vert: + '#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}', + equirect_frag: + 'uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}', + equirect_vert: + 'varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}', + linedashed_frag: + 'uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}', + linedashed_vert: + 'uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include <color_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}', + meshbasic_frag: + 'uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <cube_uv_reflection_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include <aomap_fragment>\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}', + meshbasic_vert: + '#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_ENVMAP\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <envmap_vertex>\n\t#include <fog_vertex>\n}', + meshlambert_frag: + 'uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <cube_uv_reflection_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <emissivemap_fragment>\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include <lightmap_fragment>\n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}', + meshlambert_vert: + '#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <lights_lambert_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}', + meshmatcap_frag: + '#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\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\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}', + meshmatcap_vert: + '#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <color_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n\tvViewPosition = - mvPosition.xyz;\n}', + meshtoon_frag: + '#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <lights_toon_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_toon_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}', + meshtoon_vert: + '#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}', + meshphong_frag: + '#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <cube_uv_reflection_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}', + meshphong_vert: + '#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}', + meshphysical_frag: + '#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform vec3 attenuationColor;\n\tuniform float attenuationDistance;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#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#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <bsdfs>\n#include <transmission_pars_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <lights_physical_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}', + meshphysical_vert: + '#define STANDARD\nvarying vec3 vViewPosition;\n#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#ifdef USE_TRANSMISSION\n\tvarying vec4 vWorldPosition;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#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\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition;\n#endif\n}', + normal_frag: + '#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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#include <packing>\n#include <uv_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\t#include <logdepthbuf_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}', + normal_vert: + '#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#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#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#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\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}', + points_frag: + 'uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}', + points_vert: + 'uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\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 <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <fog_vertex>\n}', + shadow_frag: + 'uniform vec3 color;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}', + shadow_vert: + '#include <common>\n#include <fog_pars_vertex>\n#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}', + sprite_frag: + 'uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}', + sprite_vert: + 'uniform float rotation;\nuniform vec2 center;\n#include <common>\n#include <uv_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\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 <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}', + }, + Fn = { + common: { + diffuse: { value: new Ie(16777215) }, + opacity: { value: 1 }, + map: { value: null }, + uvTransform: { value: new et() }, + uv2Transform: { value: new et() }, + alphaMap: { value: null }, + }, + specularmap: { specularMap: { value: null } }, + envmap: { + envMap: { value: null }, + flipEnvMap: { value: -1 }, + reflectivity: { value: 1 }, + refractionRatio: { value: 0.98 }, + maxMipLevel: { value: 0 }, + }, + aomap: { aoMap: { value: null }, aoMapIntensity: { value: 1 } }, + lightmap: { lightMap: { value: null }, lightMapIntensity: { value: 1 } }, + emissivemap: { emissiveMap: { value: null } }, + bumpmap: { bumpMap: { value: null }, bumpScale: { value: 1 } }, + normalmap: { normalMap: { value: null }, normalScale: { value: new tt(1, 1) } }, + displacementmap: { + displacementMap: { value: null }, + displacementScale: { value: 1 }, + displacementBias: { value: 0 }, + }, + roughnessmap: { roughnessMap: { value: null } }, + metalnessmap: { metalnessMap: { value: null } }, + gradientmap: { gradientMap: { value: null } }, + fog: { + fogDensity: { value: 25e-5 }, + fogNear: { value: 1 }, + fogFar: { value: 2e3 }, + fogColor: { value: new Ie(16777215) }, + }, + lights: { + ambientLightColor: { value: [] }, + lightProbe: { value: [] }, + directionalLights: { value: [], properties: { direction: {}, color: {} } }, + directionalLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + }, + }, + directionalShadowMap: { value: [] }, + directionalShadowMatrix: { value: [] }, + spotLights: { + value: [], + properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {}, + }, + }, + spotLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + }, + }, + spotShadowMap: { value: [] }, + spotShadowMatrix: { value: [] }, + pointLights: { + value: [], + properties: { color: {}, position: {}, decay: {}, distance: {} }, + }, + pointLightShadows: { + value: [], + properties: { + shadowBias: {}, + shadowNormalBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {}, + }, + }, + pointShadowMap: { value: [] }, + pointShadowMatrix: { value: [] }, + hemisphereLights: { + value: [], + properties: { direction: {}, skyColor: {}, groundColor: {} }, + }, + rectAreaLights: { + value: [], + properties: { color: {}, position: {}, width: {}, height: {} }, + }, + ltc_1: { value: null }, + ltc_2: { value: null }, + }, + points: { + diffuse: { value: new Ie(16777215) }, + opacity: { value: 1 }, + size: { value: 1 }, + scale: { value: 1 }, + map: { value: null }, + alphaMap: { value: null }, + uvTransform: { value: new et() }, + }, + sprite: { + diffuse: { value: new Ie(16777215) }, + opacity: { value: 1 }, + center: { value: new tt(0.5, 0.5) }, + rotation: { value: 0 }, + map: { value: null }, + alphaMap: { value: null }, + uvTransform: { value: new et() }, + }, + }, + Un = { + basic: { + uniforms: yn([Fn.common, Fn.specularmap, Fn.envmap, Fn.aomap, Fn.lightmap, Fn.fog]), + vertexShader: Bn.meshbasic_vert, + fragmentShader: Bn.meshbasic_frag, + }, + lambert: { + uniforms: yn([ + Fn.common, + Fn.specularmap, + Fn.envmap, + Fn.aomap, + Fn.lightmap, + Fn.emissivemap, + Fn.fog, + Fn.lights, + { emissive: { value: new Ie(0) } }, + ]), + vertexShader: Bn.meshlambert_vert, + fragmentShader: Bn.meshlambert_frag, + }, + phong: { + uniforms: yn([ + Fn.common, + Fn.specularmap, + Fn.envmap, + Fn.aomap, + Fn.lightmap, + Fn.emissivemap, + Fn.bumpmap, + Fn.normalmap, + Fn.displacementmap, + Fn.fog, + Fn.lights, + { + emissive: { value: new Ie(0) }, + specular: { value: new Ie(1118481) }, + shininess: { value: 30 }, + }, + ]), + vertexShader: Bn.meshphong_vert, + fragmentShader: Bn.meshphong_frag, + }, + standard: { + uniforms: yn([ + Fn.common, + Fn.envmap, + Fn.aomap, + Fn.lightmap, + Fn.emissivemap, + Fn.bumpmap, + Fn.normalmap, + Fn.displacementmap, + Fn.roughnessmap, + Fn.metalnessmap, + Fn.fog, + Fn.lights, + { + emissive: { value: new Ie(0) }, + roughness: { value: 1 }, + metalness: { value: 0 }, + envMapIntensity: { value: 1 }, + }, + ]), + vertexShader: Bn.meshphysical_vert, + fragmentShader: Bn.meshphysical_frag, + }, + toon: { + uniforms: yn([ + Fn.common, + Fn.aomap, + Fn.lightmap, + Fn.emissivemap, + Fn.bumpmap, + Fn.normalmap, + Fn.displacementmap, + Fn.gradientmap, + Fn.fog, + Fn.lights, + { emissive: { value: new Ie(0) } }, + ]), + vertexShader: Bn.meshtoon_vert, + fragmentShader: Bn.meshtoon_frag, + }, + matcap: { + uniforms: yn([ + Fn.common, + Fn.bumpmap, + Fn.normalmap, + Fn.displacementmap, + Fn.fog, + { matcap: { value: null } }, + ]), + vertexShader: Bn.meshmatcap_vert, + fragmentShader: Bn.meshmatcap_frag, + }, + points: { + uniforms: yn([Fn.points, Fn.fog]), + vertexShader: Bn.points_vert, + fragmentShader: Bn.points_frag, + }, + dashed: { + uniforms: yn([ + Fn.common, + Fn.fog, + { scale: { value: 1 }, dashSize: { value: 1 }, totalSize: { value: 2 } }, + ]), + vertexShader: Bn.linedashed_vert, + fragmentShader: Bn.linedashed_frag, + }, + depth: { + uniforms: yn([Fn.common, Fn.displacementmap]), + vertexShader: Bn.depth_vert, + fragmentShader: Bn.depth_frag, + }, + normal: { + uniforms: yn([ + Fn.common, + Fn.bumpmap, + Fn.normalmap, + Fn.displacementmap, + { opacity: { value: 1 } }, + ]), + vertexShader: Bn.normal_vert, + fragmentShader: Bn.normal_frag, + }, + sprite: { + uniforms: yn([Fn.sprite, Fn.fog]), + vertexShader: Bn.sprite_vert, + fragmentShader: Bn.sprite_frag, + }, + background: { + uniforms: { uvTransform: { value: new et() }, t2D: { value: null } }, + vertexShader: Bn.background_vert, + fragmentShader: Bn.background_frag, + }, + cube: { + uniforms: yn([Fn.envmap, { opacity: { value: 1 } }]), + vertexShader: Bn.cube_vert, + fragmentShader: Bn.cube_frag, + }, + equirect: { + uniforms: { tEquirect: { value: null } }, + vertexShader: Bn.equirect_vert, + fragmentShader: Bn.equirect_frag, + }, + distanceRGBA: { + uniforms: yn([ + Fn.common, + Fn.displacementmap, + { + referencePosition: { value: new ut() }, + nearDistance: { value: 1 }, + farDistance: { value: 1e3 }, + }, + ]), + vertexShader: Bn.distanceRGBA_vert, + fragmentShader: Bn.distanceRGBA_frag, + }, + shadow: { + uniforms: yn([ + Fn.lights, + Fn.fog, + { color: { value: new Ie(0) }, opacity: { value: 1 } }, + ]), + vertexShader: Bn.shadow_vert, + fragmentShader: Bn.shadow_frag, + }, + } + function Hn(t, e, n, i, r) { + const a = new Ie(0) + let o, + l, + h = 0, + u = null, + d = 0, + p = null + function m(t, e) { + n.buffers.color.setClear(t.r, t.g, t.b, e, r) + } + return { + getClearColor: function () { + return a + }, + setClearColor: function (t, e = 1) { + a.set(t), (h = e), m(a, h) + }, + getClearAlpha: function () { + return h + }, + setClearAlpha: function (t) { + ;(h = t), m(a, h) + }, + render: function (n, r) { + let f = !1, + g = !0 === r.isScene ? r.background : null + g && g.isTexture && (g = e.get(g)) + const v = t.xr, + y = v.getSession && v.getSession() + y && 'additive' === y.environmentBlendMode && (g = null), + null === g ? m(a, h) : g && g.isColor && (m(g, 1), (f = !0)), + (t.autoClear || f) && t.clear(t.autoClearColor, t.autoClearDepth, t.autoClearStencil), + g && (g.isCubeTexture || g.mapping === c) + ? (void 0 === l && + ((l = new mn( + new gn(1, 1, 1), + new _n({ + name: 'BackgroundCubeMaterial', + uniforms: vn(Un.cube.uniforms), + vertexShader: Un.cube.vertexShader, + fragmentShader: Un.cube.fragmentShader, + side: s, + depthTest: !1, + depthWrite: !1, + fog: !1, + }), + )), + l.geometry.deleteAttribute('normal'), + l.geometry.deleteAttribute('uv'), + (l.onBeforeRender = function (t, e, n) { + this.matrixWorld.copyPosition(n.matrixWorld) + }), + Object.defineProperty(l.material, 'envMap', { + get: function () { + return this.uniforms.envMap.value + }, + }), + i.update(l)), + (l.material.uniforms.envMap.value = g), + (l.material.uniforms.flipEnvMap.value = + g.isCubeTexture && g._needsFlipEnvMap ? -1 : 1), + (u === g && d === g.version && p === t.toneMapping) || + ((l.material.needsUpdate = !0), (u = g), (d = g.version), (p = t.toneMapping)), + n.unshift(l, l.geometry, l.material, 0, 0, null)) + : g && + g.isTexture && + (void 0 === o && + ((o = new mn( + new On(2, 2), + new _n({ + name: 'BackgroundMaterial', + uniforms: vn(Un.background.uniforms), + vertexShader: Un.background.vertexShader, + fragmentShader: Un.background.fragmentShader, + side: 0, + depthTest: !1, + depthWrite: !1, + fog: !1, + }), + )), + o.geometry.deleteAttribute('normal'), + Object.defineProperty(o.material, 'map', { + get: function () { + return this.uniforms.t2D.value + }, + }), + i.update(o)), + (o.material.uniforms.t2D.value = g), + !0 === g.matrixAutoUpdate && g.updateMatrix(), + o.material.uniforms.uvTransform.value.copy(g.matrix), + (u === g && d === g.version && p === t.toneMapping) || + ((o.material.needsUpdate = !0), (u = g), (d = g.version), (p = t.toneMapping)), + n.unshift(o, o.geometry, o.material, 0, 0, null)) + }, + } + } + function Gn(t, e, n, i) { + const r = t.getParameter(34921), + s = i.isWebGL2 ? null : e.get('OES_vertex_array_object'), + a = i.isWebGL2 || null !== s, + o = {}, + l = d(null) + let c = l + function h(e) { + return i.isWebGL2 ? t.bindVertexArray(e) : s.bindVertexArrayOES(e) + } + function u(e) { + return i.isWebGL2 ? t.deleteVertexArray(e) : s.deleteVertexArrayOES(e) + } + function d(t) { + const e = [], + n = [], + i = [] + for (let s = 0; s < r; s++) (e[s] = 0), (n[s] = 0), (i[s] = 0) + return { + geometry: null, + program: null, + wireframe: !1, + newAttributes: e, + enabledAttributes: n, + attributeDivisors: i, + object: t, + attributes: {}, + index: null, + } + } + function p() { + const t = c.newAttributes + for (let e = 0, n = t.length; e < n; e++) t[e] = 0 + } + function m(t) { + f(t, 0) + } + function f(n, r) { + const s = c.newAttributes, + a = c.enabledAttributes, + o = c.attributeDivisors + if (((s[n] = 1), 0 === a[n] && (t.enableVertexAttribArray(n), (a[n] = 1)), o[n] !== r)) { + ;(i.isWebGL2 ? t : e.get('ANGLE_instanced_arrays'))[ + i.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' + ](n, r), + (o[n] = r) + } + } + function g() { + const e = c.newAttributes, + n = c.enabledAttributes + for (let i = 0, r = n.length; i < r; i++) + n[i] !== e[i] && (t.disableVertexAttribArray(i), (n[i] = 0)) + } + function v(e, n, r, s, a, o) { + !0 !== i.isWebGL2 || (5124 !== r && 5125 !== r) + ? t.vertexAttribPointer(e, n, r, s, a, o) + : t.vertexAttribIPointer(e, n, r, a, o) + } + function y() { + x(), c !== l && ((c = l), h(c.object)) + } + function x() { + ;(l.geometry = null), (l.program = null), (l.wireframe = !1) + } + return { + setup: function (r, l, u, y, x) { + let _ = !1 + if (a) { + const e = (function (e, n, r) { + const a = !0 === r.wireframe + let l = o[e.id] + void 0 === l && ((l = {}), (o[e.id] = l)) + let c = l[n.id] + void 0 === c && ((c = {}), (l[n.id] = c)) + let h = c[a] + void 0 === h && + ((h = d(i.isWebGL2 ? t.createVertexArray() : s.createVertexArrayOES())), + (c[a] = h)) + return h + })(y, u, l) + c !== e && ((c = e), h(c.object)), + (_ = (function (t, e) { + const n = c.attributes, + i = t.attributes + let r = 0 + for (const s in i) { + const t = n[s], + e = i[s] + if (void 0 === t) return !0 + if (t.attribute !== e) return !0 + if (t.data !== e.data) return !0 + r++ + } + return c.attributesNum !== r || c.index !== e + })(y, x)), + _ && + (function (t, e) { + const n = {}, + i = t.attributes + let r = 0 + for (const s in i) { + const t = i[s], + e = {} + ;(e.attribute = t), t.data && (e.data = t.data), (n[s] = e), r++ + } + ;(c.attributes = n), (c.attributesNum = r), (c.index = e) + })(y, x) + } else { + const t = !0 === l.wireframe + ;(c.geometry === y.id && c.program === u.id && c.wireframe === t) || + ((c.geometry = y.id), (c.program = u.id), (c.wireframe = t), (_ = !0)) + } + !0 === r.isInstancedMesh && (_ = !0), + null !== x && n.update(x, 34963), + _ && + (!(function (r, s, a, o) { + if ( + !1 === i.isWebGL2 && + (r.isInstancedMesh || o.isInstancedBufferGeometry) && + null === e.get('ANGLE_instanced_arrays') + ) + return + p() + const l = o.attributes, + c = a.getAttributes(), + h = s.defaultAttributeValues + for (const e in c) { + const i = c[e] + if (i >= 0) { + const s = l[e] + if (void 0 !== s) { + const e = s.normalized, + r = s.itemSize, + a = n.get(s) + if (void 0 === a) continue + const l = a.buffer, + c = a.type, + h = a.bytesPerElement + if (s.isInterleavedBufferAttribute) { + const n = s.data, + a = n.stride, + u = s.offset + n && n.isInstancedInterleavedBuffer + ? (f(i, n.meshPerAttribute), + void 0 === o._maxInstanceCount && + (o._maxInstanceCount = n.meshPerAttribute * n.count)) + : m(i), + t.bindBuffer(34962, l), + v(i, r, c, e, a * h, u * h) + } else + s.isInstancedBufferAttribute + ? (f(i, s.meshPerAttribute), + void 0 === o._maxInstanceCount && + (o._maxInstanceCount = s.meshPerAttribute * s.count)) + : m(i), + t.bindBuffer(34962, l), + v(i, r, c, e, 0, 0) + } else if ('instanceMatrix' === e) { + const e = n.get(r.instanceMatrix) + if (void 0 === e) continue + const s = e.buffer, + a = e.type + f(i + 0, 1), + f(i + 1, 1), + f(i + 2, 1), + f(i + 3, 1), + t.bindBuffer(34962, s), + t.vertexAttribPointer(i + 0, 4, a, !1, 64, 0), + t.vertexAttribPointer(i + 1, 4, a, !1, 64, 16), + t.vertexAttribPointer(i + 2, 4, a, !1, 64, 32), + t.vertexAttribPointer(i + 3, 4, a, !1, 64, 48) + } else if ('instanceColor' === e) { + const e = n.get(r.instanceColor) + if (void 0 === e) continue + const s = e.buffer, + a = e.type + f(i, 1), t.bindBuffer(34962, s), t.vertexAttribPointer(i, 3, a, !1, 12, 0) + } else if (void 0 !== h) { + const n = h[e] + if (void 0 !== n) + switch (n.length) { + case 2: + t.vertexAttrib2fv(i, n) + break + case 3: + t.vertexAttrib3fv(i, n) + break + case 4: + t.vertexAttrib4fv(i, n) + break + default: + t.vertexAttrib1fv(i, n) + } + } + } + } + g() + })(r, l, u, y), + null !== x && t.bindBuffer(34963, n.get(x).buffer)) + }, + reset: y, + resetDefaultState: x, + dispose: function () { + y() + for (const t in o) { + const e = o[t] + for (const t in e) { + const n = e[t] + for (const t in n) u(n[t].object), delete n[t] + delete e[t] + } + delete o[t] + } + }, + releaseStatesOfGeometry: function (t) { + if (void 0 === o[t.id]) return + const e = o[t.id] + for (const n in e) { + const t = e[n] + for (const e in t) u(t[e].object), delete t[e] + delete e[n] + } + delete o[t.id] + }, + releaseStatesOfProgram: function (t) { + for (const e in o) { + const n = o[e] + if (void 0 === n[t.id]) continue + const i = n[t.id] + for (const t in i) u(i[t].object), delete i[t] + delete n[t.id] + } + }, + initAttributes: p, + enableAttribute: m, + disableUnusedAttributes: g, + } + } + function Vn(t, e, n, i) { + const r = i.isWebGL2 + let s + ;(this.setMode = function (t) { + s = t + }), + (this.render = function (e, i) { + t.drawArrays(s, e, i), n.update(i, s, 1) + }), + (this.renderInstances = function (i, a, o) { + if (0 === o) return + let l, c + if (r) (l = t), (c = 'drawArraysInstanced') + else if ( + ((l = e.get('ANGLE_instanced_arrays')), (c = 'drawArraysInstancedANGLE'), null === l) + ) + return void console.error( + 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.', + ) + l[c](s, i, a, o), n.update(a, s, o) + }) + } + function kn(t, e, n) { + let i + function r(e) { + if ('highp' === e) { + if ( + t.getShaderPrecisionFormat(35633, 36338).precision > 0 && + t.getShaderPrecisionFormat(35632, 36338).precision > 0 + ) + return 'highp' + e = 'mediump' + } + return 'mediump' === e && + t.getShaderPrecisionFormat(35633, 36337).precision > 0 && + t.getShaderPrecisionFormat(35632, 36337).precision > 0 + ? 'mediump' + : 'lowp' + } + const s = + ('undefined' !== typeof WebGL2RenderingContext && t instanceof WebGL2RenderingContext) || + ('undefined' !== typeof WebGL2ComputeRenderingContext && + t instanceof WebGL2ComputeRenderingContext) + let a = void 0 !== n.precision ? n.precision : 'highp' + const o = r(a) + o !== a && + (console.warn('THREE.WebGLRenderer:', a, 'not supported, using', o, 'instead.'), (a = o)) + const l = s || e.has('WEBGL_draw_buffers'), + c = !0 === n.logarithmicDepthBuffer, + h = t.getParameter(34930), + u = t.getParameter(35660), + d = t.getParameter(3379), + p = t.getParameter(34076), + m = t.getParameter(34921), + f = t.getParameter(36347), + g = t.getParameter(36348), + v = t.getParameter(36349), + y = u > 0, + x = s || e.has('OES_texture_float') + return { + isWebGL2: s, + drawBuffers: l, + getMaxAnisotropy: function () { + if (void 0 !== i) return i + if (!0 === e.has('EXT_texture_filter_anisotropic')) { + const n = e.get('EXT_texture_filter_anisotropic') + i = t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT) + } else i = 0 + return i + }, + getMaxPrecision: r, + precision: a, + logarithmicDepthBuffer: c, + maxTextures: h, + maxVertexTextures: u, + maxTextureSize: d, + maxCubemapSize: p, + maxAttributes: m, + maxVertexUniforms: f, + maxVaryings: g, + maxFragmentUniforms: v, + vertexTextures: y, + floatFragmentTextures: x, + floatVertexTextures: y && x, + maxSamples: s ? t.getParameter(36183) : 0, + } + } + function Wn(t) { + const e = this + let n = null, + i = 0, + r = !1, + s = !1 + const a = new Cn(), + o = new et(), + l = { value: null, needsUpdate: !1 } + function c() { + l.value !== n && ((l.value = n), (l.needsUpdate = i > 0)), + (e.numPlanes = i), + (e.numIntersection = 0) + } + function h(t, n, i, r) { + const s = null !== t ? t.length : 0 + let c = null + if (0 !== s) { + if (((c = l.value), !0 !== r || null === c)) { + const e = i + 4 * s, + r = n.matrixWorldInverse + o.getNormalMatrix(r), (null === c || c.length < e) && (c = new Float32Array(e)) + for (let n = 0, l = i; n !== s; ++n, l += 4) + a.copy(t[n]).applyMatrix4(r, o), a.normal.toArray(c, l), (c[l + 3] = a.constant) + } + ;(l.value = c), (l.needsUpdate = !0) + } + return (e.numPlanes = s), (e.numIntersection = 0), c + } + ;(this.uniform = l), + (this.numPlanes = 0), + (this.numIntersection = 0), + (this.init = function (t, e, s) { + const a = 0 !== t.length || e || 0 !== i || r + return (r = e), (n = h(t, s, 0)), (i = t.length), a + }), + (this.beginShadows = function () { + ;(s = !0), h(null) + }), + (this.endShadows = function () { + ;(s = !1), c() + }), + (this.setState = function (e, a, o) { + const u = e.clippingPlanes, + d = e.clipIntersection, + p = e.clipShadows, + m = t.get(e) + if (!r || null === u || 0 === u.length || (s && !p)) s ? h(null) : c() + else { + const t = s ? 0 : i, + e = 4 * t + let r = m.clippingState || null + ;(l.value = r), (r = h(u, a, e, o)) + for (let i = 0; i !== e; ++i) r[i] = n[i] + ;(m.clippingState = r), + (this.numIntersection = d ? this.numPlanes : 0), + (this.numPlanes += t) + } + }) + } + function jn(t) { + let e = new WeakMap() + function n(t, e) { + return 303 === e ? (t.mapping = o) : 304 === e && (t.mapping = l), t + } + function i(t) { + const n = t.target + n.removeEventListener('dispose', i) + const r = e.get(n) + void 0 !== r && (e.delete(n), r.dispose()) + } + return { + get: function (r) { + if (r && r.isTexture) { + const s = r.mapping + if (303 === s || 304 === s) { + if (e.has(r)) { + return n(e.get(r).texture, r.mapping) + } + { + const s = r.image + if (s && s.height > 0) { + const a = t.getRenderTarget(), + o = new En(s.height / 2) + return ( + o.fromEquirectangularTexture(t, r), + e.set(r, o), + t.setRenderTarget(a), + r.addEventListener('dispose', i), + n(o.texture, r.mapping) + ) + } + return null + } + } + } + return r + }, + dispose: function () { + e = new WeakMap() + }, + } + } + function qn(t) { + const e = {} + function n(n) { + if (void 0 !== e[n]) return e[n] + let i + switch (n) { + case 'WEBGL_depth_texture': + i = + t.getExtension('WEBGL_depth_texture') || + t.getExtension('MOZ_WEBGL_depth_texture') || + t.getExtension('WEBKIT_WEBGL_depth_texture') + break + case 'EXT_texture_filter_anisotropic': + i = + t.getExtension('EXT_texture_filter_anisotropic') || + t.getExtension('MOZ_EXT_texture_filter_anisotropic') || + t.getExtension('WEBKIT_EXT_texture_filter_anisotropic') + break + case 'WEBGL_compressed_texture_s3tc': + i = + t.getExtension('WEBGL_compressed_texture_s3tc') || + t.getExtension('MOZ_WEBGL_compressed_texture_s3tc') || + t.getExtension('WEBKIT_WEBGL_compressed_texture_s3tc') + break + case 'WEBGL_compressed_texture_pvrtc': + i = + t.getExtension('WEBGL_compressed_texture_pvrtc') || + t.getExtension('WEBKIT_WEBGL_compressed_texture_pvrtc') + break + default: + i = t.getExtension(n) + } + return (e[n] = i), i + } + return { + has: function (t) { + return null !== n(t) + }, + init: function (t) { + t.isWebGL2 + ? n('EXT_color_buffer_float') + : (n('WEBGL_depth_texture'), + n('OES_texture_float'), + n('OES_texture_half_float'), + n('OES_texture_half_float_linear'), + n('OES_standard_derivatives'), + n('OES_element_index_uint'), + n('OES_vertex_array_object'), + n('ANGLE_instanced_arrays')), + n('OES_texture_float_linear'), + n('EXT_color_buffer_half_float') + }, + get: function (t) { + const e = n(t) + return ( + null === e && console.warn('THREE.WebGLRenderer: ' + t + ' extension not supported.'), + e + ) + }, + } + } + function Xn(t, e, n, i) { + const r = {}, + s = new WeakMap() + function a(t) { + const o = t.target + null !== o.index && e.remove(o.index) + for (const n in o.attributes) e.remove(o.attributes[n]) + o.removeEventListener('dispose', a), delete r[o.id] + const l = s.get(o) + l && (e.remove(l), s.delete(o)), + i.releaseStatesOfGeometry(o), + !0 === o.isInstancedBufferGeometry && delete o._maxInstanceCount, + n.memory.geometries-- + } + function o(t) { + const n = [], + i = t.index, + r = t.attributes.position + let a = 0 + if (null !== i) { + const t = i.array + a = i.version + for (let e = 0, i = t.length; e < i; e += 3) { + const i = t[e + 0], + r = t[e + 1], + s = t[e + 2] + n.push(i, r, r, s, s, i) + } + } else { + const t = r.array + a = r.version + for (let e = 0, i = t.length / 3 - 1; e < i; e += 3) { + const t = e + 0, + i = e + 1, + r = e + 2 + n.push(t, i, i, r, r, t) + } + } + const o = new (Ge(n) > 65535 ? Ue : Fe)(n, 1) + o.version = a + const l = s.get(t) + l && e.remove(l), s.set(t, o) + } + return { + get: function (t, e) { + return ( + !0 === r[e.id] || + (e.addEventListener('dispose', a), (r[e.id] = !0), n.memory.geometries++), + e + ) + }, + update: function (t) { + const n = t.attributes + for (const r in n) e.update(n[r], 34962) + const i = t.morphAttributes + for (const r in i) { + const t = i[r] + for (let n = 0, i = t.length; n < i; n++) e.update(t[n], 34962) + } + }, + getWireframeAttribute: function (t) { + const e = s.get(t) + if (e) { + const n = t.index + null !== n && e.version < n.version && o(t) + } else o(t) + return s.get(t) + }, + } + } + function Yn(t, e, n, i) { + const r = i.isWebGL2 + let s, a, o + ;(this.setMode = function (t) { + s = t + }), + (this.setIndex = function (t) { + ;(a = t.type), (o = t.bytesPerElement) + }), + (this.render = function (e, i) { + t.drawElements(s, i, a, e * o), n.update(i, s, 1) + }), + (this.renderInstances = function (i, l, c) { + if (0 === c) return + let h, u + if (r) (h = t), (u = 'drawElementsInstanced') + else if ( + ((h = e.get('ANGLE_instanced_arrays')), + (u = 'drawElementsInstancedANGLE'), + null === h) + ) + return void console.error( + 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.', + ) + h[u](s, l, a, i * o, c), n.update(l, s, c) + }) + } + function Jn(t) { + const e = { frame: 0, calls: 0, triangles: 0, points: 0, lines: 0 } + return { + memory: { geometries: 0, textures: 0 }, + render: e, + programs: null, + autoReset: !0, + reset: function () { + e.frame++, (e.calls = 0), (e.triangles = 0), (e.points = 0), (e.lines = 0) + }, + update: function (t, n, i) { + switch ((e.calls++, n)) { + case 4: + e.triangles += i * (t / 3) + break + case 1: + e.lines += i * (t / 2) + break + case 3: + e.lines += i * (t - 1) + break + case 2: + e.lines += i * t + break + case 0: + e.points += i * t + break + default: + console.error('THREE.WebGLInfo: Unknown draw mode:', n) + } + }, + } + } + function Zn(t, e) { + return t[0] - e[0] + } + function Qn(t, e) { + return Math.abs(e[1]) - Math.abs(t[1]) + } + function Kn(t) { + const e = {}, + n = new Float32Array(8), + i = [] + for (let r = 0; r < 8; r++) i[r] = [r, 0] + return { + update: function (r, s, a, o) { + const l = r.morphTargetInfluences, + c = void 0 === l ? 0 : l.length + let h = e[s.id] + if (void 0 === h || h.length !== c) { + h = [] + for (let t = 0; t < c; t++) h[t] = [t, 0] + e[s.id] = h + } + for (let t = 0; t < c; t++) { + const e = h[t] + ;(e[0] = t), (e[1] = l[t]) + } + h.sort(Qn) + for (let t = 0; t < 8; t++) + t < c && h[t][1] + ? ((i[t][0] = h[t][0]), (i[t][1] = h[t][1])) + : ((i[t][0] = Number.MAX_SAFE_INTEGER), (i[t][1] = 0)) + i.sort(Zn) + const u = a.morphTargets && s.morphAttributes.position, + d = a.morphNormals && s.morphAttributes.normal + let p = 0 + for (let t = 0; t < 8; t++) { + const e = i[t], + r = e[0], + a = e[1] + r !== Number.MAX_SAFE_INTEGER && a + ? (u && + s.getAttribute('morphTarget' + t) !== u[r] && + s.setAttribute('morphTarget' + t, u[r]), + d && + s.getAttribute('morphNormal' + t) !== d[r] && + s.setAttribute('morphNormal' + t, d[r]), + (n[t] = a), + (p += a)) + : (u && + !0 === s.hasAttribute('morphTarget' + t) && + s.deleteAttribute('morphTarget' + t), + d && + !0 === s.hasAttribute('morphNormal' + t) && + s.deleteAttribute('morphNormal' + t), + (n[t] = 0)) + } + const m = s.morphTargetsRelative ? 1 : 1 - p + o.getUniforms().setValue(t, 'morphTargetBaseInfluence', m), + o.getUniforms().setValue(t, 'morphTargetInfluences', n) + }, + } + } + function $n(t, e, n, i) { + let r = new WeakMap() + function s(t) { + const e = t.target + e.removeEventListener('dispose', s), + n.remove(e.instanceMatrix), + null !== e.instanceColor && n.remove(e.instanceColor) + } + return { + update: function (t) { + const a = i.render.frame, + o = t.geometry, + l = e.get(t, o) + return ( + r.get(l) !== a && (e.update(l), r.set(l, a)), + t.isInstancedMesh && + (!1 === t.hasEventListener('dispose', s) && t.addEventListener('dispose', s), + n.update(t.instanceMatrix, 34962), + null !== t.instanceColor && n.update(t.instanceColor, 34962)), + l + ) + }, + dispose: function () { + r = new WeakMap() + }, + } + } + Un.physical = { + uniforms: yn([ + Un.standard.uniforms, + { + clearcoat: { value: 0 }, + clearcoatMap: { value: null }, + clearcoatRoughness: { value: 0 }, + clearcoatRoughnessMap: { value: null }, + clearcoatNormalScale: { value: new tt(1, 1) }, + clearcoatNormalMap: { value: null }, + sheen: { value: new Ie(0) }, + transmission: { value: 0 }, + transmissionMap: { value: null }, + transmissionSamplerSize: { value: new tt() }, + transmissionSamplerMap: { value: null }, + thickness: { value: 0 }, + thicknessMap: { value: null }, + attenuationDistance: { value: 0 }, + attenuationColor: { value: new Ie(0) }, + }, + ]), + vertexShader: Bn.meshphysical_vert, + fragmentShader: Bn.meshphysical_frag, + } + class ti extends st { + constructor(t = null, e = 1, n = 1, i = 1) { + super(null), + (this.image = { data: t, width: e, height: n, depth: i }), + (this.magFilter = m), + (this.minFilter = m), + (this.wrapR = d), + (this.generateMipmaps = !1), + (this.flipY = !1), + (this.unpackAlignment = 1), + (this.needsUpdate = !0) + } + } + ti.prototype.isDataTexture2DArray = !0 + class ei extends st { + constructor(t = null, e = 1, n = 1, i = 1) { + super(null), + (this.image = { data: t, width: e, height: n, depth: i }), + (this.magFilter = m), + (this.minFilter = m), + (this.wrapR = d), + (this.generateMipmaps = !1), + (this.flipY = !1), + (this.unpackAlignment = 1), + (this.needsUpdate = !0) + } + } + ei.prototype.isDataTexture3D = !0 + const ni = new st(), + ii = new ti(), + ri = new ei(), + si = new Tn(), + ai = [], + oi = [], + li = new Float32Array(16), + ci = new Float32Array(9), + hi = new Float32Array(4) + function ui(t, e, n) { + const i = t[0] + if (i <= 0 || i > 0) return t + const r = e * n + let s = ai[r] + if ((void 0 === s && ((s = new Float32Array(r)), (ai[r] = s)), 0 !== e)) { + i.toArray(s, 0) + for (let i = 1, r = 0; i !== e; ++i) (r += n), t[i].toArray(s, r) + } + return s + } + function di(t, e) { + if (t.length !== e.length) return !1 + for (let n = 0, i = t.length; n < i; n++) if (t[n] !== e[n]) return !1 + return !0 + } + function pi(t, e) { + for (let n = 0, i = e.length; n < i; n++) t[n] = e[n] + } + function mi(t, e) { + let n = oi[e] + void 0 === n && ((n = new Int32Array(e)), (oi[e] = n)) + for (let i = 0; i !== e; ++i) n[i] = t.allocateTextureUnit() + return n + } + function fi(t, e) { + const n = this.cache + n[0] !== e && (t.uniform1f(this.addr, e), (n[0] = e)) + } + function gi(t, e) { + const n = this.cache + if (void 0 !== e.x) + (n[0] === e.x && n[1] === e.y) || + (t.uniform2f(this.addr, e.x, e.y), (n[0] = e.x), (n[1] = e.y)) + else { + if (di(n, e)) return + t.uniform2fv(this.addr, e), pi(n, e) + } + } + function vi(t, e) { + const n = this.cache + if (void 0 !== e.x) + (n[0] === e.x && n[1] === e.y && n[2] === e.z) || + (t.uniform3f(this.addr, e.x, e.y, e.z), (n[0] = e.x), (n[1] = e.y), (n[2] = e.z)) + else if (void 0 !== e.r) + (n[0] === e.r && n[1] === e.g && n[2] === e.b) || + (t.uniform3f(this.addr, e.r, e.g, e.b), (n[0] = e.r), (n[1] = e.g), (n[2] = e.b)) + else { + if (di(n, e)) return + t.uniform3fv(this.addr, e), pi(n, e) + } + } + function yi(t, e) { + const n = this.cache + if (void 0 !== e.x) + (n[0] === e.x && n[1] === e.y && n[2] === e.z && n[3] === e.w) || + (t.uniform4f(this.addr, e.x, e.y, e.z, e.w), + (n[0] = e.x), + (n[1] = e.y), + (n[2] = e.z), + (n[3] = e.w)) + else { + if (di(n, e)) return + t.uniform4fv(this.addr, e), pi(n, e) + } + } + function xi(t, e) { + const n = this.cache, + i = e.elements + if (void 0 === i) { + if (di(n, e)) return + t.uniformMatrix2fv(this.addr, !1, e), pi(n, e) + } else { + if (di(n, i)) return + hi.set(i), t.uniformMatrix2fv(this.addr, !1, hi), pi(n, i) + } + } + function _i(t, e) { + const n = this.cache, + i = e.elements + if (void 0 === i) { + if (di(n, e)) return + t.uniformMatrix3fv(this.addr, !1, e), pi(n, e) + } else { + if (di(n, i)) return + ci.set(i), t.uniformMatrix3fv(this.addr, !1, ci), pi(n, i) + } + } + function bi(t, e) { + const n = this.cache, + i = e.elements + if (void 0 === i) { + if (di(n, e)) return + t.uniformMatrix4fv(this.addr, !1, e), pi(n, e) + } else { + if (di(n, i)) return + li.set(i), t.uniformMatrix4fv(this.addr, !1, li), pi(n, i) + } + } + function Mi(t, e) { + const n = this.cache + n[0] !== e && (t.uniform1i(this.addr, e), (n[0] = e)) + } + function wi(t, e) { + const n = this.cache + di(n, e) || (t.uniform2iv(this.addr, e), pi(n, e)) + } + function Si(t, e) { + const n = this.cache + di(n, e) || (t.uniform3iv(this.addr, e), pi(n, e)) + } + function Ti(t, e) { + const n = this.cache + di(n, e) || (t.uniform4iv(this.addr, e), pi(n, e)) + } + function Ei(t, e) { + const n = this.cache + n[0] !== e && (t.uniform1ui(this.addr, e), (n[0] = e)) + } + function Li(t, e) { + const n = this.cache + di(n, e) || (t.uniform2uiv(this.addr, e), pi(n, e)) + } + function Ai(t, e) { + const n = this.cache + di(n, e) || (t.uniform3uiv(this.addr, e), pi(n, e)) + } + function Ri(t, e) { + const n = this.cache + di(n, e) || (t.uniform4uiv(this.addr, e), pi(n, e)) + } + function Ci(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit() + i[0] !== r && (t.uniform1i(this.addr, r), (i[0] = r)), n.safeSetTexture2D(e || ni, r) + } + function Pi(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit() + i[0] !== r && (t.uniform1i(this.addr, r), (i[0] = r)), n.setTexture3D(e || ri, r) + } + function Di(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit() + i[0] !== r && (t.uniform1i(this.addr, r), (i[0] = r)), n.safeSetTextureCube(e || si, r) + } + function Ii(t, e, n) { + const i = this.cache, + r = n.allocateTextureUnit() + i[0] !== r && (t.uniform1i(this.addr, r), (i[0] = r)), n.setTexture2DArray(e || ii, r) + } + function Ni(t, e) { + t.uniform1fv(this.addr, e) + } + function zi(t, e) { + const n = ui(e, this.size, 2) + t.uniform2fv(this.addr, n) + } + function Oi(t, e) { + const n = ui(e, this.size, 3) + t.uniform3fv(this.addr, n) + } + function Bi(t, e) { + const n = ui(e, this.size, 4) + t.uniform4fv(this.addr, n) + } + function Fi(t, e) { + const n = ui(e, this.size, 4) + t.uniformMatrix2fv(this.addr, !1, n) + } + function Ui(t, e) { + const n = ui(e, this.size, 9) + t.uniformMatrix3fv(this.addr, !1, n) + } + function Hi(t, e) { + const n = ui(e, this.size, 16) + t.uniformMatrix4fv(this.addr, !1, n) + } + function Gi(t, e) { + t.uniform1iv(this.addr, e) + } + function Vi(t, e) { + t.uniform2iv(this.addr, e) + } + function ki(t, e) { + t.uniform3iv(this.addr, e) + } + function Wi(t, e) { + t.uniform4iv(this.addr, e) + } + function ji(t, e) { + t.uniform1uiv(this.addr, e) + } + function qi(t, e) { + t.uniform2uiv(this.addr, e) + } + function Xi(t, e) { + t.uniform3uiv(this.addr, e) + } + function Yi(t, e) { + t.uniform4uiv(this.addr, e) + } + function Ji(t, e, n) { + const i = e.length, + r = mi(n, i) + t.uniform1iv(this.addr, r) + for (let s = 0; s !== i; ++s) n.safeSetTexture2D(e[s] || ni, r[s]) + } + function Zi(t, e, n) { + const i = e.length, + r = mi(n, i) + t.uniform1iv(this.addr, r) + for (let s = 0; s !== i; ++s) n.safeSetTextureCube(e[s] || si, r[s]) + } + function Qi(t, e, n) { + ;(this.id = t), + (this.addr = n), + (this.cache = []), + (this.setValue = (function (t) { + switch (t) { + case 5126: + return fi + case 35664: + return gi + case 35665: + return vi + case 35666: + return yi + case 35674: + return xi + case 35675: + return _i + case 35676: + return bi + case 5124: + case 35670: + return Mi + case 35667: + case 35671: + return wi + case 35668: + case 35672: + return Si + case 35669: + case 35673: + return Ti + case 5125: + return Ei + case 36294: + return Li + case 36295: + return Ai + case 36296: + return Ri + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return Ci + case 35679: + case 36299: + case 36307: + return Pi + case 35680: + case 36300: + case 36308: + case 36293: + return Di + case 36289: + case 36303: + case 36311: + case 36292: + return Ii + } + })(e.type)) + } + function Ki(t, e, n) { + ;(this.id = t), + (this.addr = n), + (this.cache = []), + (this.size = e.size), + (this.setValue = (function (t) { + switch (t) { + case 5126: + return Ni + case 35664: + return zi + case 35665: + return Oi + case 35666: + return Bi + case 35674: + return Fi + case 35675: + return Ui + case 35676: + return Hi + case 5124: + case 35670: + return Gi + case 35667: + case 35671: + return Vi + case 35668: + case 35672: + return ki + case 35669: + case 35673: + return Wi + case 5125: + return ji + case 36294: + return qi + case 36295: + return Xi + case 36296: + return Yi + case 35678: + case 36198: + case 36298: + case 36306: + case 35682: + return Ji + case 35680: + case 36300: + case 36308: + case 36293: + return Zi + } + })(e.type)) + } + function $i(t) { + ;(this.id = t), (this.seq = []), (this.map = {}) + } + ;(Ki.prototype.updateCache = function (t) { + const e = this.cache + t instanceof Float32Array && + e.length !== t.length && + (this.cache = new Float32Array(t.length)), + pi(e, t) + }), + ($i.prototype.setValue = function (t, e, n) { + const i = this.seq + for (let r = 0, s = i.length; r !== s; ++r) { + const s = i[r] + s.setValue(t, e[s.id], n) + } + }) + const tr = /(\w+)(\])?(\[|\.)?/g + function er(t, e) { + t.seq.push(e), (t.map[e.id] = e) + } + function nr(t, e, n) { + const i = t.name, + r = i.length + for (tr.lastIndex = 0; ; ) { + const s = tr.exec(i), + a = tr.lastIndex + let o = s[1] + const l = ']' === s[2], + c = s[3] + if ((l && (o |= 0), void 0 === c || ('[' === c && a + 2 === r))) { + er(n, void 0 === c ? new Qi(o, t, e) : new Ki(o, t, e)) + break + } + { + let t = n.map[o] + void 0 === t && ((t = new $i(o)), er(n, t)), (n = t) + } + } + } + function ir(t, e) { + ;(this.seq = []), (this.map = {}) + const n = t.getProgramParameter(e, 35718) + for (let i = 0; i < n; ++i) { + const n = t.getActiveUniform(e, i) + nr(n, t.getUniformLocation(e, n.name), this) + } + } + function rr(t, e, n) { + const i = t.createShader(e) + return t.shaderSource(i, n), t.compileShader(i), i + } + ;(ir.prototype.setValue = function (t, e, n, i) { + const r = this.map[e] + void 0 !== r && r.setValue(t, n, i) + }), + (ir.prototype.setOptional = function (t, e, n) { + const i = e[n] + void 0 !== i && this.setValue(t, n, i) + }), + (ir.upload = function (t, e, n, i) { + for (let r = 0, s = e.length; r !== s; ++r) { + const s = e[r], + a = n[s.id] + !1 !== a.needsUpdate && s.setValue(t, a.value, i) + } + }), + (ir.seqWithValue = function (t, e) { + const n = [] + for (let i = 0, r = t.length; i !== r; ++i) { + const r = t[i] + r.id in e && n.push(r) + } + return n + }) + let sr = 0 + function ar(t) { + switch (t) { + case O: + return ['Linear', '( value )'] + case B: + return ['sRGB', '( value )'] + case U: + return ['RGBE', '( value )'] + case 3004: + return ['RGBM', '( value, 7.0 )'] + case 3005: + return ['RGBM', '( value, 16.0 )'] + case 3006: + return ['RGBD', '( value, 256.0 )'] + case F: + return ['Gamma', '( value, float( GAMMA_FACTOR ) )'] + case 3003: + return ['LogLuv', '( value )'] + default: + return ( + console.warn('THREE.WebGLProgram: Unsupported encoding:', t), ['Linear', '( value )'] + ) + } + } + function or(t, e, n) { + const i = t.getShaderParameter(e, 35713), + r = t.getShaderInfoLog(e).trim() + if (i && '' === r) return '' + return ( + 'THREE.WebGLShader: gl.getShaderInfoLog() ' + + n + + '\n' + + r + + (function (t) { + const e = t.split('\n') + for (let n = 0; n < e.length; n++) e[n] = n + 1 + ': ' + e[n] + return e.join('\n') + })(t.getShaderSource(e)) + ) + } + function lr(t, e) { + const n = ar(e) + return 'vec4 ' + t + '( vec4 value ) { return ' + n[0] + 'ToLinear' + n[1] + '; }' + } + function cr(t, e) { + const n = ar(e) + return 'vec4 ' + t + '( vec4 value ) { return LinearTo' + n[0] + n[1] + '; }' + } + function hr(t, e) { + let n + switch (e) { + case 1: + n = 'Linear' + break + case 2: + n = 'Reinhard' + break + case 3: + n = 'OptimizedCineon' + break + case 4: + n = 'ACESFilmic' + break + case 5: + n = 'Custom' + break + default: + console.warn('THREE.WebGLProgram: Unsupported toneMapping:', e), (n = 'Linear') + } + return 'vec3 ' + t + '( vec3 color ) { return ' + n + 'ToneMapping( color ); }' + } + function ur(t) { + return '' !== t + } + function dr(t, e) { + return t + .replace(/NUM_DIR_LIGHTS/g, e.numDirLights) + .replace(/NUM_SPOT_LIGHTS/g, e.numSpotLights) + .replace(/NUM_RECT_AREA_LIGHTS/g, e.numRectAreaLights) + .replace(/NUM_POINT_LIGHTS/g, e.numPointLights) + .replace(/NUM_HEMI_LIGHTS/g, e.numHemiLights) + .replace(/NUM_DIR_LIGHT_SHADOWS/g, e.numDirLightShadows) + .replace(/NUM_SPOT_LIGHT_SHADOWS/g, e.numSpotLightShadows) + .replace(/NUM_POINT_LIGHT_SHADOWS/g, e.numPointLightShadows) + } + function pr(t, e) { + return t + .replace(/NUM_CLIPPING_PLANES/g, e.numClippingPlanes) + .replace(/UNION_CLIPPING_PLANES/g, e.numClippingPlanes - e.numClipIntersection) + } + const mr = /^[ \t]*#include +<([\w\d./]+)>/gm + function fr(t) { + return t.replace(mr, gr) + } + function gr(t, e) { + const n = Bn[e] + if (void 0 === n) throw new Error('Can not resolve #include <' + e + '>') + return fr(n) + } + const vr = + /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g, + yr = + /#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 + function xr(t) { + return t.replace(yr, br).replace(vr, _r) + } + function _r(t, e, n, i) { + return ( + console.warn( + 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.', + ), + br(t, e, n, i) + ) + } + function br(t, e, n, i) { + let r = '' + for (let s = parseInt(e); s < parseInt(n); s++) + r += i.replace(/\[\s*i\s*\]/g, '[ ' + s + ' ]').replace(/UNROLLED_LOOP_INDEX/g, s) + return r + } + function Mr(t) { + let e = 'precision ' + t.precision + ' float;\nprecision ' + t.precision + ' int;' + return ( + 'highp' === t.precision + ? (e += '\n#define HIGH_PRECISION') + : 'mediump' === t.precision + ? (e += '\n#define MEDIUM_PRECISION') + : 'lowp' === t.precision && (e += '\n#define LOW_PRECISION'), + e + ) + } + function wr(t, e, n, i) { + const r = t.getContext(), + s = n.defines + let a = n.vertexShader, + u = n.fragmentShader + const d = (function (t) { + let e = 'SHADOWMAP_TYPE_BASIC' + return ( + 1 === t.shadowMapType + ? (e = 'SHADOWMAP_TYPE_PCF') + : 2 === t.shadowMapType + ? (e = 'SHADOWMAP_TYPE_PCF_SOFT') + : 3 === t.shadowMapType && (e = 'SHADOWMAP_TYPE_VSM'), + e + ) + })(n), + p = (function (t) { + let e = 'ENVMAP_TYPE_CUBE' + if (t.envMap) + switch (t.envMapMode) { + case o: + case l: + e = 'ENVMAP_TYPE_CUBE' + break + case c: + case h: + e = 'ENVMAP_TYPE_CUBE_UV' + } + return e + })(n), + m = (function (t) { + let e = 'ENVMAP_MODE_REFLECTION' + if (t.envMap) + switch (t.envMapMode) { + case l: + case h: + e = 'ENVMAP_MODE_REFRACTION' + } + return e + })(n), + f = (function (t) { + let e = 'ENVMAP_BLENDING_NONE' + if (t.envMap) + switch (t.combine) { + case 0: + e = 'ENVMAP_BLENDING_MULTIPLY' + break + case 1: + e = 'ENVMAP_BLENDING_MIX' + break + case 2: + e = 'ENVMAP_BLENDING_ADD' + } + return e + })(n), + g = t.gammaFactor > 0 ? t.gammaFactor : 1, + v = n.isWebGL2 + ? '' + : (function (t) { + return [ + t.extensionDerivatives || + t.envMapCubeUV || + t.bumpMap || + t.tangentSpaceNormalMap || + t.clearcoatNormalMap || + t.flatShading || + 'physical' === t.shaderID + ? '#extension GL_OES_standard_derivatives : enable' + : '', + (t.extensionFragDepth || t.logarithmicDepthBuffer) && t.rendererExtensionFragDepth + ? '#extension GL_EXT_frag_depth : enable' + : '', + t.extensionDrawBuffers && t.rendererExtensionDrawBuffers + ? '#extension GL_EXT_draw_buffers : require' + : '', + (t.extensionShaderTextureLOD || t.envMap || t.transmission > 0) && + t.rendererExtensionShaderTextureLod + ? '#extension GL_EXT_shader_texture_lod : enable' + : '', + ] + .filter(ur) + .join('\n') + })(n), + y = (function (t) { + const e = [] + for (const n in t) { + const i = t[n] + !1 !== i && e.push('#define ' + n + ' ' + i) + } + return e.join('\n') + })(s), + x = r.createProgram() + let _, + b, + M = n.glslVersion ? '#version ' + n.glslVersion + '\n' : '' + n.isRawShaderMaterial + ? ((_ = [y].filter(ur).join('\n')), + _.length > 0 && (_ += '\n'), + (b = [v, y].filter(ur).join('\n')), + b.length > 0 && (b += '\n')) + : ((_ = [ + Mr(n), + '#define SHADER_NAME ' + n.shaderName, + y, + n.instancing ? '#define USE_INSTANCING' : '', + n.instancingColor ? '#define USE_INSTANCING_COLOR' : '', + n.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', + '#define GAMMA_FACTOR ' + g, + '#define MAX_BONES ' + n.maxBones, + n.useFog && n.fog ? '#define USE_FOG' : '', + n.useFog && n.fogExp2 ? '#define FOG_EXP2' : '', + n.map ? '#define USE_MAP' : '', + n.envMap ? '#define USE_ENVMAP' : '', + n.envMap ? '#define ' + m : '', + n.lightMap ? '#define USE_LIGHTMAP' : '', + n.aoMap ? '#define USE_AOMAP' : '', + n.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + n.bumpMap ? '#define USE_BUMPMAP' : '', + n.normalMap ? '#define USE_NORMALMAP' : '', + n.normalMap && n.objectSpaceNormalMap ? '#define OBJECTSPACE_NORMALMAP' : '', + n.normalMap && n.tangentSpaceNormalMap ? '#define TANGENTSPACE_NORMALMAP' : '', + n.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', + n.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', + n.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', + n.displacementMap && n.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', + n.specularMap ? '#define USE_SPECULARMAP' : '', + n.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + n.metalnessMap ? '#define USE_METALNESSMAP' : '', + n.alphaMap ? '#define USE_ALPHAMAP' : '', + n.transmission ? '#define USE_TRANSMISSION' : '', + n.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', + n.thicknessMap ? '#define USE_THICKNESSMAP' : '', + n.vertexTangents ? '#define USE_TANGENT' : '', + n.vertexColors ? '#define USE_COLOR' : '', + n.vertexAlphas ? '#define USE_COLOR_ALPHA' : '', + n.vertexUvs ? '#define USE_UV' : '', + n.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', + n.flatShading ? '#define FLAT_SHADED' : '', + n.skinning ? '#define USE_SKINNING' : '', + n.useVertexTexture ? '#define BONE_TEXTURE' : '', + n.morphTargets ? '#define USE_MORPHTARGETS' : '', + n.morphNormals && !1 === n.flatShading ? '#define USE_MORPHNORMALS' : '', + n.doubleSided ? '#define DOUBLE_SIDED' : '', + n.flipSided ? '#define FLIP_SIDED' : '', + n.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + n.shadowMapEnabled ? '#define ' + d : '', + n.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', + n.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + n.logarithmicDepthBuffer && n.rendererExtensionFragDepth + ? '#define USE_LOGDEPTHBUF_EXT' + : '', + 'uniform mat4 modelMatrix;', + 'uniform mat4 modelViewMatrix;', + 'uniform mat4 projectionMatrix;', + 'uniform mat4 viewMatrix;', + 'uniform mat3 normalMatrix;', + 'uniform vec3 cameraPosition;', + 'uniform bool isOrthographic;', + '#ifdef USE_INSTANCING', + '\tattribute mat4 instanceMatrix;', + '#endif', + '#ifdef USE_INSTANCING_COLOR', + '\tattribute vec3 instanceColor;', + '#endif', + 'attribute vec3 position;', + 'attribute vec3 normal;', + 'attribute vec2 uv;', + '#ifdef USE_TANGENT', + '\tattribute vec4 tangent;', + '#endif', + '#if defined( USE_COLOR_ALPHA )', + '\tattribute vec4 color;', + '#elif defined( USE_COLOR )', + '\tattribute vec3 color;', + '#endif', + '#ifdef USE_MORPHTARGETS', + '\tattribute vec3 morphTarget0;', + '\tattribute vec3 morphTarget1;', + '\tattribute vec3 morphTarget2;', + '\tattribute vec3 morphTarget3;', + '\t#ifdef USE_MORPHNORMALS', + '\t\tattribute vec3 morphNormal0;', + '\t\tattribute vec3 morphNormal1;', + '\t\tattribute vec3 morphNormal2;', + '\t\tattribute vec3 morphNormal3;', + '\t#else', + '\t\tattribute vec3 morphTarget4;', + '\t\tattribute vec3 morphTarget5;', + '\t\tattribute vec3 morphTarget6;', + '\t\tattribute vec3 morphTarget7;', + '\t#endif', + '#endif', + '#ifdef USE_SKINNING', + '\tattribute vec4 skinIndex;', + '\tattribute vec4 skinWeight;', + '#endif', + '\n', + ] + .filter(ur) + .join('\n')), + (b = [ + v, + Mr(n), + '#define SHADER_NAME ' + n.shaderName, + y, + n.alphaTest ? '#define ALPHATEST ' + n.alphaTest + (n.alphaTest % 1 ? '' : '.0') : '', + '#define GAMMA_FACTOR ' + g, + n.useFog && n.fog ? '#define USE_FOG' : '', + n.useFog && n.fogExp2 ? '#define FOG_EXP2' : '', + n.map ? '#define USE_MAP' : '', + n.matcap ? '#define USE_MATCAP' : '', + n.envMap ? '#define USE_ENVMAP' : '', + n.envMap ? '#define ' + p : '', + n.envMap ? '#define ' + m : '', + n.envMap ? '#define ' + f : '', + n.lightMap ? '#define USE_LIGHTMAP' : '', + n.aoMap ? '#define USE_AOMAP' : '', + n.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + n.bumpMap ? '#define USE_BUMPMAP' : '', + n.normalMap ? '#define USE_NORMALMAP' : '', + n.normalMap && n.objectSpaceNormalMap ? '#define OBJECTSPACE_NORMALMAP' : '', + n.normalMap && n.tangentSpaceNormalMap ? '#define TANGENTSPACE_NORMALMAP' : '', + n.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', + n.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', + n.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', + n.specularMap ? '#define USE_SPECULARMAP' : '', + n.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + n.metalnessMap ? '#define USE_METALNESSMAP' : '', + n.alphaMap ? '#define USE_ALPHAMAP' : '', + n.sheen ? '#define USE_SHEEN' : '', + n.transmission ? '#define USE_TRANSMISSION' : '', + n.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', + n.thicknessMap ? '#define USE_THICKNESSMAP' : '', + n.vertexTangents ? '#define USE_TANGENT' : '', + n.vertexColors || n.instancingColor ? '#define USE_COLOR' : '', + n.vertexAlphas ? '#define USE_COLOR_ALPHA' : '', + n.vertexUvs ? '#define USE_UV' : '', + n.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', + n.gradientMap ? '#define USE_GRADIENTMAP' : '', + n.flatShading ? '#define FLAT_SHADED' : '', + n.doubleSided ? '#define DOUBLE_SIDED' : '', + n.flipSided ? '#define FLIP_SIDED' : '', + n.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + n.shadowMapEnabled ? '#define ' + d : '', + n.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '', + n.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '', + n.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + n.logarithmicDepthBuffer && n.rendererExtensionFragDepth + ? '#define USE_LOGDEPTHBUF_EXT' + : '', + (n.extensionShaderTextureLOD || n.envMap) && n.rendererExtensionShaderTextureLod + ? '#define TEXTURE_LOD_EXT' + : '', + 'uniform mat4 viewMatrix;', + 'uniform vec3 cameraPosition;', + 'uniform bool isOrthographic;', + 0 !== n.toneMapping ? '#define TONE_MAPPING' : '', + 0 !== n.toneMapping ? Bn.tonemapping_pars_fragment : '', + 0 !== n.toneMapping ? hr('toneMapping', n.toneMapping) : '', + n.dithering ? '#define DITHERING' : '', + Bn.encodings_pars_fragment, + n.map ? lr('mapTexelToLinear', n.mapEncoding) : '', + n.matcap ? lr('matcapTexelToLinear', n.matcapEncoding) : '', + n.envMap ? lr('envMapTexelToLinear', n.envMapEncoding) : '', + n.emissiveMap ? lr('emissiveMapTexelToLinear', n.emissiveMapEncoding) : '', + n.lightMap ? lr('lightMapTexelToLinear', n.lightMapEncoding) : '', + cr('linearToOutputTexel', n.outputEncoding), + n.depthPacking ? '#define DEPTH_PACKING ' + n.depthPacking : '', + '\n', + ] + .filter(ur) + .join('\n'))), + (a = fr(a)), + (a = dr(a, n)), + (a = pr(a, n)), + (u = fr(u)), + (u = dr(u, n)), + (u = pr(u, n)), + (a = xr(a)), + (u = xr(u)), + n.isWebGL2 && + !0 !== n.isRawShaderMaterial && + ((M = '#version 300 es\n'), + (_ = + ['#define attribute in', '#define varying out', '#define texture2D texture'].join( + '\n', + ) + + '\n' + + _), + (b = + [ + '#define varying in', + n.glslVersion === k ? '' : 'out highp vec4 pc_fragColor;', + n.glslVersion === k ? '' : '#define gl_FragColor pc_fragColor', + '#define gl_FragDepthEXT gl_FragDepth', + '#define texture2D texture', + '#define textureCube texture', + '#define texture2DProj textureProj', + '#define texture2DLodEXT textureLod', + '#define texture2DProjLodEXT textureProjLod', + '#define textureCubeLodEXT textureLod', + '#define texture2DGradEXT textureGrad', + '#define texture2DProjGradEXT textureProjGrad', + '#define textureCubeGradEXT textureGrad', + ].join('\n') + + '\n' + + b)) + const w = M + b + u, + S = rr(r, 35633, M + _ + a), + T = rr(r, 35632, w) + if ( + (r.attachShader(x, S), + r.attachShader(x, T), + void 0 !== n.index0AttributeName + ? r.bindAttribLocation(x, 0, n.index0AttributeName) + : !0 === n.morphTargets && r.bindAttribLocation(x, 0, 'position'), + r.linkProgram(x), + t.debug.checkShaderErrors) + ) { + const t = r.getProgramInfoLog(x).trim(), + e = r.getShaderInfoLog(S).trim(), + n = r.getShaderInfoLog(T).trim() + let i = !0, + s = !0 + if (!1 === r.getProgramParameter(x, 35714)) { + i = !1 + const e = or(r, S, 'vertex'), + n = or(r, T, 'fragment') + console.error( + 'THREE.WebGLProgram: shader error: ', + r.getError(), + '35715', + r.getProgramParameter(x, 35715), + 'gl.getProgramInfoLog', + t, + e, + n, + ) + } else + '' !== t + ? console.warn('THREE.WebGLProgram: gl.getProgramInfoLog()', t) + : ('' !== e && '' !== n) || (s = !1) + s && + (this.diagnostics = { + runnable: i, + programLog: t, + vertexShader: { log: e, prefix: _ }, + fragmentShader: { log: n, prefix: b }, + }) + } + let E, L + return ( + r.deleteShader(S), + r.deleteShader(T), + (this.getUniforms = function () { + return void 0 === E && (E = new ir(r, x)), E + }), + (this.getAttributes = function () { + return ( + void 0 === L && + (L = (function (t, e) { + const n = {}, + i = t.getProgramParameter(e, 35721) + for (let r = 0; r < i; r++) { + const i = t.getActiveAttrib(e, r).name + n[i] = t.getAttribLocation(e, i) + } + return n + })(r, x)), + L + ) + }), + (this.destroy = function () { + i.releaseStatesOfProgram(this), r.deleteProgram(x), (this.program = void 0) + }), + (this.name = n.shaderName), + (this.id = sr++), + (this.cacheKey = e), + (this.usedTimes = 1), + (this.program = x), + (this.vertexShader = S), + (this.fragmentShader = T), + this + ) + } + function Sr(t, e, n, i, r, a) { + const o = [], + l = i.isWebGL2, + u = i.logarithmicDepthBuffer, + d = i.floatVertexTextures, + p = i.maxVertexUniforms, + m = i.vertexTextures + let f = i.precision + const g = { + MeshDepthMaterial: 'depth', + MeshDistanceMaterial: 'distanceRGBA', + MeshNormalMaterial: 'normal', + MeshBasicMaterial: 'basic', + MeshLambertMaterial: 'lambert', + MeshPhongMaterial: 'phong', + MeshToonMaterial: 'toon', + MeshStandardMaterial: 'physical', + MeshPhysicalMaterial: 'physical', + MeshMatcapMaterial: 'matcap', + LineBasicMaterial: 'basic', + LineDashedMaterial: 'dashed', + PointsMaterial: 'points', + ShadowMaterial: 'shadow', + SpriteMaterial: 'sprite', + }, + v = [ + 'precision', + 'isWebGL2', + 'supportsVertexTextures', + 'outputEncoding', + 'instancing', + 'instancingColor', + 'map', + 'mapEncoding', + 'matcap', + 'matcapEncoding', + 'envMap', + 'envMapMode', + 'envMapEncoding', + 'envMapCubeUV', + 'lightMap', + 'lightMapEncoding', + 'aoMap', + 'emissiveMap', + 'emissiveMapEncoding', + 'bumpMap', + 'normalMap', + 'objectSpaceNormalMap', + 'tangentSpaceNormalMap', + 'clearcoatMap', + 'clearcoatRoughnessMap', + 'clearcoatNormalMap', + 'displacementMap', + 'specularMap', + 'roughnessMap', + 'metalnessMap', + 'gradientMap', + 'alphaMap', + 'combine', + 'vertexColors', + 'vertexAlphas', + 'vertexTangents', + 'vertexUvs', + 'uvsVertexOnly', + 'fog', + 'useFog', + 'fogExp2', + 'flatShading', + 'sizeAttenuation', + 'logarithmicDepthBuffer', + 'skinning', + 'maxBones', + 'useVertexTexture', + 'morphTargets', + 'morphNormals', + 'premultipliedAlpha', + 'numDirLights', + 'numPointLights', + 'numSpotLights', + 'numHemiLights', + 'numRectAreaLights', + 'numDirLightShadows', + 'numPointLightShadows', + 'numSpotLightShadows', + 'shadowMapEnabled', + 'shadowMapType', + 'toneMapping', + 'physicallyCorrectLights', + 'alphaTest', + 'doubleSided', + 'flipSided', + 'numClippingPlanes', + 'numClipIntersection', + 'depthPacking', + 'dithering', + 'sheen', + 'transmission', + 'transmissionMap', + 'thicknessMap', + ] + function y(t) { + let e + return ( + t && t.isTexture + ? (e = t.encoding) + : t && t.isWebGLRenderTarget + ? (console.warn( + "THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.", + ), + (e = t.texture.encoding)) + : (e = O), + e + ) + } + return { + getParameters: function (r, o, v, x, _) { + const b = x.fog, + M = r.isMeshStandardMaterial ? x.environment : null, + w = e.get(r.envMap || M), + S = g[r.type], + T = _.isSkinnedMesh + ? (function (t) { + const e = t.skeleton.bones + if (d) return 1024 + { + const t = p, + n = Math.floor((t - 20) / 4), + i = Math.min(n, e.length) + return i < e.length + ? (console.warn( + 'THREE.WebGLRenderer: Skeleton has ' + + e.length + + ' bones. This GPU supports ' + + i + + '.', + ), + 0) + : i + } + })(_) + : 0 + let E, L + if ( + (null !== r.precision && + ((f = i.getMaxPrecision(r.precision)), + f !== r.precision && + console.warn( + 'THREE.WebGLProgram.getParameters:', + r.precision, + 'not supported, using', + f, + 'instead.', + )), + S) + ) { + const t = Un[S] + ;(E = t.vertexShader), (L = t.fragmentShader) + } else (E = r.vertexShader), (L = r.fragmentShader) + const A = t.getRenderTarget() + return { + isWebGL2: l, + shaderID: S, + shaderName: r.type, + vertexShader: E, + fragmentShader: L, + defines: r.defines, + isRawShaderMaterial: !0 === r.isRawShaderMaterial, + glslVersion: r.glslVersion, + precision: f, + instancing: !0 === _.isInstancedMesh, + instancingColor: !0 === _.isInstancedMesh && null !== _.instanceColor, + supportsVertexTextures: m, + outputEncoding: null !== A ? y(A.texture) : t.outputEncoding, + map: !!r.map, + mapEncoding: y(r.map), + matcap: !!r.matcap, + matcapEncoding: y(r.matcap), + envMap: !!w, + envMapMode: w && w.mapping, + envMapEncoding: y(w), + envMapCubeUV: !!w && (w.mapping === c || w.mapping === h), + lightMap: !!r.lightMap, + lightMapEncoding: y(r.lightMap), + aoMap: !!r.aoMap, + emissiveMap: !!r.emissiveMap, + emissiveMapEncoding: y(r.emissiveMap), + bumpMap: !!r.bumpMap, + normalMap: !!r.normalMap, + objectSpaceNormalMap: 1 === r.normalMapType, + tangentSpaceNormalMap: 0 === r.normalMapType, + clearcoatMap: !!r.clearcoatMap, + clearcoatRoughnessMap: !!r.clearcoatRoughnessMap, + clearcoatNormalMap: !!r.clearcoatNormalMap, + displacementMap: !!r.displacementMap, + roughnessMap: !!r.roughnessMap, + metalnessMap: !!r.metalnessMap, + specularMap: !!r.specularMap, + alphaMap: !!r.alphaMap, + gradientMap: !!r.gradientMap, + sheen: !!r.sheen, + transmission: !!r.transmission, + transmissionMap: !!r.transmissionMap, + thicknessMap: !!r.thicknessMap, + combine: r.combine, + vertexTangents: r.normalMap && r.vertexTangents, + vertexColors: r.vertexColors, + vertexAlphas: + !0 === r.vertexColors && + _.geometry && + _.geometry.attributes.color && + 4 === _.geometry.attributes.color.itemSize, + vertexUvs: + !!r.map || + !!r.bumpMap || + !!r.normalMap || + !!r.specularMap || + !!r.alphaMap || + !!r.emissiveMap || + !!r.roughnessMap || + !!r.metalnessMap || + !!r.clearcoatMap || + !!r.clearcoatRoughnessMap || + !!r.clearcoatNormalMap || + !!r.displacementMap || + !!r.transmissionMap || + !!r.thicknessMap, + uvsVertexOnly: + !( + r.map || + r.bumpMap || + r.normalMap || + r.specularMap || + r.alphaMap || + r.emissiveMap || + r.roughnessMap || + r.metalnessMap || + r.clearcoatNormalMap || + r.transmission || + r.transmissionMap || + r.thicknessMap + ) && !!r.displacementMap, + fog: !!b, + useFog: r.fog, + fogExp2: b && b.isFogExp2, + flatShading: !!r.flatShading, + sizeAttenuation: r.sizeAttenuation, + logarithmicDepthBuffer: u, + skinning: !0 === _.isSkinnedMesh && T > 0, + maxBones: T, + useVertexTexture: d, + morphTargets: r.morphTargets, + morphNormals: r.morphNormals, + numDirLights: o.directional.length, + numPointLights: o.point.length, + numSpotLights: o.spot.length, + numRectAreaLights: o.rectArea.length, + numHemiLights: o.hemi.length, + numDirLightShadows: o.directionalShadowMap.length, + numPointLightShadows: o.pointShadowMap.length, + numSpotLightShadows: o.spotShadowMap.length, + numClippingPlanes: a.numPlanes, + numClipIntersection: a.numIntersection, + dithering: r.dithering, + shadowMapEnabled: t.shadowMap.enabled && v.length > 0, + shadowMapType: t.shadowMap.type, + toneMapping: r.toneMapped ? t.toneMapping : 0, + physicallyCorrectLights: t.physicallyCorrectLights, + premultipliedAlpha: r.premultipliedAlpha, + alphaTest: r.alphaTest, + doubleSided: 2 === r.side, + flipSided: r.side === s, + depthPacking: void 0 !== r.depthPacking && r.depthPacking, + index0AttributeName: r.index0AttributeName, + extensionDerivatives: r.extensions && r.extensions.derivatives, + extensionFragDepth: r.extensions && r.extensions.fragDepth, + extensionDrawBuffers: r.extensions && r.extensions.drawBuffers, + extensionShaderTextureLOD: r.extensions && r.extensions.shaderTextureLOD, + rendererExtensionFragDepth: l || n.has('EXT_frag_depth'), + rendererExtensionDrawBuffers: l || n.has('WEBGL_draw_buffers'), + rendererExtensionShaderTextureLod: l || n.has('EXT_shader_texture_lod'), + customProgramCacheKey: r.customProgramCacheKey(), + } + }, + getProgramCacheKey: function (e) { + const n = [] + if ( + (e.shaderID ? n.push(e.shaderID) : (n.push(e.fragmentShader), n.push(e.vertexShader)), + void 0 !== e.defines) + ) + for (const t in e.defines) n.push(t), n.push(e.defines[t]) + if (!1 === e.isRawShaderMaterial) { + for (let t = 0; t < v.length; t++) n.push(e[v[t]]) + n.push(t.outputEncoding), n.push(t.gammaFactor) + } + return n.push(e.customProgramCacheKey), n.join() + }, + getUniforms: function (t) { + const e = g[t.type] + let n + if (e) { + const t = Un[e] + n = xn.clone(t.uniforms) + } else n = t.uniforms + return n + }, + acquireProgram: function (e, n) { + let i + for (let t = 0, r = o.length; t < r; t++) { + const e = o[t] + if (e.cacheKey === n) { + ;(i = e), ++i.usedTimes + break + } + } + return void 0 === i && ((i = new wr(t, n, e, r)), o.push(i)), i + }, + releaseProgram: function (t) { + if (0 === --t.usedTimes) { + const e = o.indexOf(t) + ;(o[e] = o[o.length - 1]), o.pop(), t.destroy() + } + }, + programs: o, + } + } + function Tr() { + let t = new WeakMap() + return { + get: function (e) { + let n = t.get(e) + return void 0 === n && ((n = {}), t.set(e, n)), n + }, + remove: function (e) { + t.delete(e) + }, + update: function (e, n, i) { + t.get(e)[n] = i + }, + dispose: function () { + t = new WeakMap() + }, + } + } + function Er(t, e) { + return t.groupOrder !== e.groupOrder + ? t.groupOrder - e.groupOrder + : t.renderOrder !== e.renderOrder + ? t.renderOrder - e.renderOrder + : t.program !== e.program + ? t.program.id - e.program.id + : t.material.id !== e.material.id + ? t.material.id - e.material.id + : t.z !== e.z + ? t.z - e.z + : t.id - e.id + } + function Lr(t, e) { + return t.groupOrder !== e.groupOrder + ? t.groupOrder - e.groupOrder + : t.renderOrder !== e.renderOrder + ? t.renderOrder - e.renderOrder + : t.z !== e.z + ? e.z - t.z + : t.id - e.id + } + function Ar(t) { + const e = [] + let n = 0 + const i = [], + r = [], + s = [], + a = { id: -1 } + function o(i, r, s, o, l, c) { + let h = e[n] + const u = t.get(s) + return ( + void 0 === h + ? ((h = { + id: i.id, + object: i, + geometry: r, + material: s, + program: u.program || a, + groupOrder: o, + renderOrder: i.renderOrder, + z: l, + group: c, + }), + (e[n] = h)) + : ((h.id = i.id), + (h.object = i), + (h.geometry = r), + (h.material = s), + (h.program = u.program || a), + (h.groupOrder = o), + (h.renderOrder = i.renderOrder), + (h.z = l), + (h.group = c)), + n++, + h + ) + } + return { + opaque: i, + transmissive: r, + transparent: s, + init: function () { + ;(n = 0), (i.length = 0), (r.length = 0), (s.length = 0) + }, + push: function (t, e, n, a, l, c) { + const h = o(t, e, n, a, l, c) + n.transmission > 0 ? r.push(h) : !0 === n.transparent ? s.push(h) : i.push(h) + }, + unshift: function (t, e, n, a, l, c) { + const h = o(t, e, n, a, l, c) + n.transmission > 0 ? r.unshift(h) : !0 === n.transparent ? s.unshift(h) : i.unshift(h) + }, + finish: function () { + for (let t = n, i = e.length; t < i; t++) { + const n = e[t] + if (null === n.id) break + ;(n.id = null), + (n.object = null), + (n.geometry = null), + (n.material = null), + (n.program = null), + (n.group = null) + } + }, + sort: function (t, e) { + i.length > 1 && i.sort(t || Er), + r.length > 1 && r.sort(e || Lr), + s.length > 1 && s.sort(e || Lr) + }, + } + } + function Rr(t) { + let e = new WeakMap() + return { + get: function (n, i) { + let r + return ( + !1 === e.has(n) + ? ((r = new Ar(t)), e.set(n, [r])) + : i >= e.get(n).length + ? ((r = new Ar(t)), e.get(n).push(r)) + : (r = e.get(n)[i]), + r + ) + }, + dispose: function () { + e = new WeakMap() + }, + } + } + function Cr() { + const t = {} + return { + get: function (e) { + if (void 0 !== t[e.id]) return t[e.id] + let n + switch (e.type) { + case 'DirectionalLight': + n = { direction: new ut(), color: new Ie() } + break + case 'SpotLight': + n = { + position: new ut(), + direction: new ut(), + color: new Ie(), + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0, + } + break + case 'PointLight': + n = { position: new ut(), color: new Ie(), distance: 0, decay: 0 } + break + case 'HemisphereLight': + n = { direction: new ut(), skyColor: new Ie(), groundColor: new Ie() } + break + case 'RectAreaLight': + n = { + color: new Ie(), + position: new ut(), + halfWidth: new ut(), + halfHeight: new ut(), + } + } + return (t[e.id] = n), n + }, + } + } + let Pr = 0 + function Dr(t, e) { + return (e.castShadow ? 1 : 0) - (t.castShadow ? 1 : 0) + } + function Ir(t, e) { + const n = new Cr(), + i = (function () { + const t = {} + return { + get: function (e) { + if (void 0 !== t[e.id]) return t[e.id] + let n + switch (e.type) { + case 'DirectionalLight': + case 'SpotLight': + n = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new tt(), + } + break + case 'PointLight': + n = { + shadowBias: 0, + shadowNormalBias: 0, + shadowRadius: 1, + shadowMapSize: new tt(), + shadowCameraNear: 1, + shadowCameraFar: 1e3, + } + } + return (t[e.id] = n), n + }, + } + })(), + r = { + version: 0, + hash: { + directionalLength: -1, + pointLength: -1, + spotLength: -1, + rectAreaLength: -1, + hemiLength: -1, + numDirectionalShadows: -1, + numPointShadows: -1, + numSpotShadows: -1, + }, + ambient: [0, 0, 0], + probe: [], + directional: [], + directionalShadow: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadow: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + rectAreaLTC1: null, + rectAreaLTC2: null, + point: [], + pointShadow: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [], + } + for (let l = 0; l < 9; l++) r.probe.push(new ut()) + const s = new ut(), + a = new Vt(), + o = new Vt() + return { + setup: function (s) { + let a = 0, + o = 0, + l = 0 + for (let t = 0; t < 9; t++) r.probe[t].set(0, 0, 0) + let c = 0, + h = 0, + u = 0, + d = 0, + p = 0, + m = 0, + f = 0, + g = 0 + s.sort(Dr) + for (let t = 0, e = s.length; t < e; t++) { + const e = s[t], + v = e.color, + y = e.intensity, + x = e.distance, + _ = e.shadow && e.shadow.map ? e.shadow.map.texture : null + if (e.isAmbientLight) (a += v.r * y), (o += v.g * y), (l += v.b * y) + else if (e.isLightProbe) + for (let t = 0; t < 9; t++) r.probe[t].addScaledVector(e.sh.coefficients[t], y) + else if (e.isDirectionalLight) { + const t = n.get(e) + if ((t.color.copy(e.color).multiplyScalar(e.intensity), e.castShadow)) { + const t = e.shadow, + n = i.get(e) + ;(n.shadowBias = t.bias), + (n.shadowNormalBias = t.normalBias), + (n.shadowRadius = t.radius), + (n.shadowMapSize = t.mapSize), + (r.directionalShadow[c] = n), + (r.directionalShadowMap[c] = _), + (r.directionalShadowMatrix[c] = e.shadow.matrix), + m++ + } + ;(r.directional[c] = t), c++ + } else if (e.isSpotLight) { + const t = n.get(e) + if ( + (t.position.setFromMatrixPosition(e.matrixWorld), + t.color.copy(v).multiplyScalar(y), + (t.distance = x), + (t.coneCos = Math.cos(e.angle)), + (t.penumbraCos = Math.cos(e.angle * (1 - e.penumbra))), + (t.decay = e.decay), + e.castShadow) + ) { + const t = e.shadow, + n = i.get(e) + ;(n.shadowBias = t.bias), + (n.shadowNormalBias = t.normalBias), + (n.shadowRadius = t.radius), + (n.shadowMapSize = t.mapSize), + (r.spotShadow[u] = n), + (r.spotShadowMap[u] = _), + (r.spotShadowMatrix[u] = e.shadow.matrix), + g++ + } + ;(r.spot[u] = t), u++ + } else if (e.isRectAreaLight) { + const t = n.get(e) + t.color.copy(v).multiplyScalar(y), + t.halfWidth.set(0.5 * e.width, 0, 0), + t.halfHeight.set(0, 0.5 * e.height, 0), + (r.rectArea[d] = t), + d++ + } else if (e.isPointLight) { + const t = n.get(e) + if ( + (t.color.copy(e.color).multiplyScalar(e.intensity), + (t.distance = e.distance), + (t.decay = e.decay), + e.castShadow) + ) { + const t = e.shadow, + n = i.get(e) + ;(n.shadowBias = t.bias), + (n.shadowNormalBias = t.normalBias), + (n.shadowRadius = t.radius), + (n.shadowMapSize = t.mapSize), + (n.shadowCameraNear = t.camera.near), + (n.shadowCameraFar = t.camera.far), + (r.pointShadow[h] = n), + (r.pointShadowMap[h] = _), + (r.pointShadowMatrix[h] = e.shadow.matrix), + f++ + } + ;(r.point[h] = t), h++ + } else if (e.isHemisphereLight) { + const t = n.get(e) + t.skyColor.copy(e.color).multiplyScalar(y), + t.groundColor.copy(e.groundColor).multiplyScalar(y), + (r.hemi[p] = t), + p++ + } + } + d > 0 && + (e.isWebGL2 || !0 === t.has('OES_texture_float_linear') + ? ((r.rectAreaLTC1 = Fn.LTC_FLOAT_1), (r.rectAreaLTC2 = Fn.LTC_FLOAT_2)) + : !0 === t.has('OES_texture_half_float_linear') + ? ((r.rectAreaLTC1 = Fn.LTC_HALF_1), (r.rectAreaLTC2 = Fn.LTC_HALF_2)) + : console.error( + 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.', + )), + (r.ambient[0] = a), + (r.ambient[1] = o), + (r.ambient[2] = l) + const v = r.hash + ;(v.directionalLength === c && + v.pointLength === h && + v.spotLength === u && + v.rectAreaLength === d && + v.hemiLength === p && + v.numDirectionalShadows === m && + v.numPointShadows === f && + v.numSpotShadows === g) || + ((r.directional.length = c), + (r.spot.length = u), + (r.rectArea.length = d), + (r.point.length = h), + (r.hemi.length = p), + (r.directionalShadow.length = m), + (r.directionalShadowMap.length = m), + (r.pointShadow.length = f), + (r.pointShadowMap.length = f), + (r.spotShadow.length = g), + (r.spotShadowMap.length = g), + (r.directionalShadowMatrix.length = m), + (r.pointShadowMatrix.length = f), + (r.spotShadowMatrix.length = g), + (v.directionalLength = c), + (v.pointLength = h), + (v.spotLength = u), + (v.rectAreaLength = d), + (v.hemiLength = p), + (v.numDirectionalShadows = m), + (v.numPointShadows = f), + (v.numSpotShadows = g), + (r.version = Pr++)) + }, + setupView: function (t, e) { + let n = 0, + i = 0, + l = 0, + c = 0, + h = 0 + const u = e.matrixWorldInverse + for (let d = 0, p = t.length; d < p; d++) { + const e = t[d] + if (e.isDirectionalLight) { + const t = r.directional[n] + t.direction.setFromMatrixPosition(e.matrixWorld), + s.setFromMatrixPosition(e.target.matrixWorld), + t.direction.sub(s), + t.direction.transformDirection(u), + n++ + } else if (e.isSpotLight) { + const t = r.spot[l] + t.position.setFromMatrixPosition(e.matrixWorld), + t.position.applyMatrix4(u), + t.direction.setFromMatrixPosition(e.matrixWorld), + s.setFromMatrixPosition(e.target.matrixWorld), + t.direction.sub(s), + t.direction.transformDirection(u), + l++ + } else if (e.isRectAreaLight) { + const t = r.rectArea[c] + t.position.setFromMatrixPosition(e.matrixWorld), + t.position.applyMatrix4(u), + o.identity(), + a.copy(e.matrixWorld), + a.premultiply(u), + o.extractRotation(a), + t.halfWidth.set(0.5 * e.width, 0, 0), + t.halfHeight.set(0, 0.5 * e.height, 0), + t.halfWidth.applyMatrix4(o), + t.halfHeight.applyMatrix4(o), + c++ + } else if (e.isPointLight) { + const t = r.point[i] + t.position.setFromMatrixPosition(e.matrixWorld), t.position.applyMatrix4(u), i++ + } else if (e.isHemisphereLight) { + const t = r.hemi[h] + t.direction.setFromMatrixPosition(e.matrixWorld), + t.direction.transformDirection(u), + t.direction.normalize(), + h++ + } + } + }, + state: r, + } + } + function Nr(t, e) { + const n = new Ir(t, e), + i = [], + r = [] + return { + init: function () { + ;(i.length = 0), (r.length = 0) + }, + state: { lightsArray: i, shadowsArray: r, lights: n }, + setupLights: function () { + n.setup(i) + }, + setupLightsView: function (t) { + n.setupView(i, t) + }, + pushLight: function (t) { + i.push(t) + }, + pushShadow: function (t) { + r.push(t) + }, + } + } + function zr(t, e) { + let n = new WeakMap() + return { + get: function (i, r = 0) { + let s + return ( + !1 === n.has(i) + ? ((s = new Nr(t, e)), n.set(i, [s])) + : r >= n.get(i).length + ? ((s = new Nr(t, e)), n.get(i).push(s)) + : (s = n.get(i)[r]), + s + ) + }, + dispose: function () { + n = new WeakMap() + }, + } + } + class Or extends Ee { + constructor(t) { + super(), + (this.type = 'MeshDepthMaterial'), + (this.depthPacking = 3200), + (this.morphTargets = !1), + (this.map = null), + (this.alphaMap = null), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.fog = !1), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + (this.depthPacking = t.depthPacking), + (this.morphTargets = t.morphTargets), + (this.map = t.map), + (this.alphaMap = t.alphaMap), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + this + ) + } + } + Or.prototype.isMeshDepthMaterial = !0 + class Br extends Ee { + constructor(t) { + super(), + (this.type = 'MeshDistanceMaterial'), + (this.referencePosition = new ut()), + (this.nearDistance = 1), + (this.farDistance = 1e3), + (this.morphTargets = !1), + (this.map = null), + (this.alphaMap = null), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.fog = !1), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + this.referencePosition.copy(t.referencePosition), + (this.nearDistance = t.nearDistance), + (this.farDistance = t.farDistance), + (this.morphTargets = t.morphTargets), + (this.map = t.map), + (this.alphaMap = t.alphaMap), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + this + ) + } + } + Br.prototype.isMeshDistanceMaterial = !0 + function Fr(t, e, n) { + let i = new In() + const r = new tt(), + a = new tt(), + o = new ot(), + l = [], + c = [], + h = {}, + u = n.maxTextureSize, + d = { 0: s, 1: 0, 2: 2 }, + p = new _n({ + defines: { SAMPLE_RATE: 2 / 8, HALF_SAMPLE_RATE: 1 / 8 }, + uniforms: { + shadow_pass: { value: null }, + resolution: { value: new tt() }, + radius: { value: 4 }, + }, + vertexShader: 'void main() {\n\tgl_Position = vec4( position, 1.0 );\n}', + fragmentShader: + 'uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include <packing>\nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 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, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}', + }), + f = p.clone() + f.defines.HORIZONTAL_PASS = 1 + const g = new Je() + g.setAttribute( + 'position', + new Be(new Float32Array([-1, -1, 0.5, 3, -1, 0.5, -1, 3, 0.5]), 3), + ) + const y = new mn(g, p), + x = this + function _(n, i) { + const r = e.update(y) + ;(p.uniforms.shadow_pass.value = n.map.texture), + (p.uniforms.resolution.value = n.mapSize), + (p.uniforms.radius.value = n.radius), + t.setRenderTarget(n.mapPass), + t.clear(), + t.renderBufferDirect(i, null, r, p, y, null), + (f.uniforms.shadow_pass.value = n.mapPass.texture), + (f.uniforms.resolution.value = n.mapSize), + (f.uniforms.radius.value = n.radius), + t.setRenderTarget(n.map), + t.clear(), + t.renderBufferDirect(i, null, r, f, y, null) + } + function b(t) { + const e = t << 0 + let n = l[e] + return ( + void 0 === n && ((n = new Or({ depthPacking: 3201, morphTargets: t })), (l[e] = n)), n + ) + } + function M(t) { + const e = t << 0 + let n = c[e] + return void 0 === n && ((n = new Br({ morphTargets: t })), (c[e] = n)), n + } + function w(e, n, i, r, s, a, o) { + let l = null, + c = b, + u = e.customDepthMaterial + if ((!0 === r.isPointLight && ((c = M), (u = e.customDistanceMaterial)), void 0 === u)) { + let t = !1 + !0 === i.morphTargets && + (t = + n.morphAttributes && + n.morphAttributes.position && + n.morphAttributes.position.length > 0), + (l = c(t)) + } else l = u + if (t.localClippingEnabled && !0 === i.clipShadows && 0 !== i.clippingPlanes.length) { + const t = l.uuid, + e = i.uuid + let n = h[t] + void 0 === n && ((n = {}), (h[t] = n)) + let r = n[e] + void 0 === r && ((r = l.clone()), (n[e] = r)), (l = r) + } + return ( + (l.visible = i.visible), + (l.wireframe = i.wireframe), + (l.side = + 3 === o + ? null !== i.shadowSide + ? i.shadowSide + : i.side + : null !== i.shadowSide + ? i.shadowSide + : d[i.side]), + (l.clipShadows = i.clipShadows), + (l.clippingPlanes = i.clippingPlanes), + (l.clipIntersection = i.clipIntersection), + (l.wireframeLinewidth = i.wireframeLinewidth), + (l.linewidth = i.linewidth), + !0 === r.isPointLight && + !0 === l.isMeshDistanceMaterial && + (l.referencePosition.setFromMatrixPosition(r.matrixWorld), + (l.nearDistance = s), + (l.farDistance = a)), + l + ) + } + function S(n, r, s, a, o) { + if (!1 === n.visible) return + if ( + n.layers.test(r.layers) && + (n.isMesh || n.isLine || n.isPoints) && + (n.castShadow || (n.receiveShadow && 3 === o)) && + (!n.frustumCulled || i.intersectsObject(n)) + ) { + n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse, n.matrixWorld) + const i = e.update(n), + r = n.material + if (Array.isArray(r)) { + const e = i.groups + for (let l = 0, c = e.length; l < c; l++) { + const c = e[l], + h = r[c.materialIndex] + if (h && h.visible) { + const e = w(n, i, h, a, s.near, s.far, o) + t.renderBufferDirect(s, null, i, e, n, c) + } + } + } else if (r.visible) { + const e = w(n, i, r, a, s.near, s.far, o) + t.renderBufferDirect(s, null, i, e, n, null) + } + } + const l = n.children + for (let t = 0, e = l.length; t < e; t++) S(l[t], r, s, a, o) + } + ;(this.enabled = !1), + (this.autoUpdate = !0), + (this.needsUpdate = !1), + (this.type = 1), + (this.render = function (e, n, s) { + if (!1 === x.enabled) return + if (!1 === x.autoUpdate && !1 === x.needsUpdate) return + if (0 === e.length) return + const l = t.getRenderTarget(), + c = t.getActiveCubeFace(), + h = t.getActiveMipmapLevel(), + d = t.state + d.setBlending(0), + d.buffers.color.setClear(1, 1, 1, 1), + d.buffers.depth.setTest(!0), + d.setScissorTest(!1) + for (let p = 0, f = e.length; p < f; p++) { + const l = e[p], + c = l.shadow + if (void 0 === c) { + console.warn('THREE.WebGLShadowMap:', l, 'has no shadow.') + continue + } + if (!1 === c.autoUpdate && !1 === c.needsUpdate) continue + r.copy(c.mapSize) + const h = c.getFrameExtents() + if ( + (r.multiply(h), + a.copy(c.mapSize), + (r.x > u || r.y > u) && + (r.x > u && ((a.x = Math.floor(u / h.x)), (r.x = a.x * h.x), (c.mapSize.x = a.x)), + r.y > u && ((a.y = Math.floor(u / h.y)), (r.y = a.y * h.y), (c.mapSize.y = a.y))), + null === c.map && !c.isPointLightShadow && 3 === this.type) + ) { + const t = { minFilter: v, magFilter: v, format: E } + ;(c.map = new lt(r.x, r.y, t)), + (c.map.texture.name = l.name + '.shadowMap'), + (c.mapPass = new lt(r.x, r.y, t)), + c.camera.updateProjectionMatrix() + } + if (null === c.map) { + const t = { minFilter: m, magFilter: m, format: E } + ;(c.map = new lt(r.x, r.y, t)), + (c.map.texture.name = l.name + '.shadowMap'), + c.camera.updateProjectionMatrix() + } + t.setRenderTarget(c.map), t.clear() + const f = c.getViewportCount() + for (let t = 0; t < f; t++) { + const e = c.getViewport(t) + o.set(a.x * e.x, a.y * e.y, a.x * e.z, a.y * e.w), + d.viewport(o), + c.updateMatrices(l, t), + (i = c.getFrustum()), + S(n, s, c.camera, l, this.type) + } + c.isPointLightShadow || 3 !== this.type || _(c, s), (c.needsUpdate = !1) + } + ;(x.needsUpdate = !1), t.setRenderTarget(l, c, h) + }) + } + function Ur(t, e, n) { + const i = n.isWebGL2 + const r = new (function () { + let e = !1 + const n = new ot() + let i = null + const r = new ot(0, 0, 0, 0) + return { + setMask: function (n) { + i === n || e || (t.colorMask(n, n, n, n), (i = n)) + }, + setLocked: function (t) { + e = t + }, + setClear: function (e, i, s, a, o) { + !0 === o && ((e *= a), (i *= a), (s *= a)), + n.set(e, i, s, a), + !1 === r.equals(n) && (t.clearColor(e, i, s, a), r.copy(n)) + }, + reset: function () { + ;(e = !1), (i = null), r.set(-1, 0, 0, 0) + }, + } + })(), + o = new (function () { + let e = !1, + n = null, + i = null, + r = null + return { + setTest: function (t) { + t ? U(2929) : H(2929) + }, + setMask: function (i) { + n === i || e || (t.depthMask(i), (n = i)) + }, + setFunc: function (e) { + if (i !== e) { + if (e) + switch (e) { + case 0: + t.depthFunc(512) + break + case 1: + t.depthFunc(519) + break + case 2: + t.depthFunc(513) + break + case 3: + t.depthFunc(515) + break + case 4: + t.depthFunc(514) + break + case 5: + t.depthFunc(518) + break + case 6: + t.depthFunc(516) + break + case 7: + t.depthFunc(517) + break + default: + t.depthFunc(515) + } + else t.depthFunc(515) + i = e + } + }, + setLocked: function (t) { + e = t + }, + setClear: function (e) { + r !== e && (t.clearDepth(e), (r = e)) + }, + reset: function () { + ;(e = !1), (n = null), (i = null), (r = null) + }, + } + })(), + l = new (function () { + let e = !1, + n = null, + i = null, + r = null, + s = null, + a = null, + o = null, + l = null, + c = null + return { + setTest: function (t) { + e || (t ? U(2960) : H(2960)) + }, + setMask: function (i) { + n === i || e || (t.stencilMask(i), (n = i)) + }, + setFunc: function (e, n, a) { + ;(i === e && r === n && s === a) || + (t.stencilFunc(e, n, a), (i = e), (r = n), (s = a)) + }, + setOp: function (e, n, i) { + ;(a === e && o === n && l === i) || + (t.stencilOp(e, n, i), (a = e), (o = n), (l = i)) + }, + setLocked: function (t) { + e = t + }, + setClear: function (e) { + c !== e && (t.clearStencil(e), (c = e)) + }, + reset: function () { + ;(e = !1), + (n = null), + (i = null), + (r = null), + (s = null), + (a = null), + (o = null), + (l = null), + (c = null) + }, + } + })() + let c = {}, + h = null, + u = {}, + d = null, + p = !1, + m = null, + f = null, + g = null, + v = null, + y = null, + x = null, + _ = null, + b = !1, + M = null, + w = null, + S = null, + T = null, + E = null + const L = t.getParameter(35661) + let A = !1, + R = 0 + const C = t.getParameter(7938) + ;-1 !== C.indexOf('WebGL') + ? ((R = parseFloat(/^WebGL (\d)/.exec(C)[1])), (A = R >= 1)) + : -1 !== C.indexOf('OpenGL ES') && + ((R = parseFloat(/^OpenGL ES (\d)/.exec(C)[1])), (A = R >= 2)) + let P = null, + D = {} + const I = t.getParameter(3088), + N = t.getParameter(2978), + z = new ot().fromArray(I), + O = new ot().fromArray(N) + function B(e, n, i) { + const r = new Uint8Array(4), + s = t.createTexture() + t.bindTexture(e, s), t.texParameteri(e, 10241, 9728), t.texParameteri(e, 10240, 9728) + for (let a = 0; a < i; a++) t.texImage2D(n + a, 0, 6408, 1, 1, 0, 6408, 5121, r) + return s + } + const F = {} + function U(e) { + !0 !== c[e] && (t.enable(e), (c[e] = !0)) + } + function H(e) { + !1 !== c[e] && (t.disable(e), (c[e] = !1)) + } + ;(F[3553] = B(3553, 3553, 1)), + (F[34067] = B(34067, 34069, 6)), + r.setClear(0, 0, 0, 1), + o.setClear(1), + l.setClear(0), + U(2929), + o.setFunc(3), + W(!1), + j(1), + U(2884), + k(0) + const G = { [a]: 32774, 101: 32778, 102: 32779 } + if (i) (G[103] = 32775), (G[104] = 32776) + else { + const t = e.get('EXT_blend_minmax') + null !== t && ((G[103] = t.MIN_EXT), (G[104] = t.MAX_EXT)) + } + const V = { + 200: 0, + 201: 1, + 202: 768, + 204: 770, + 210: 776, + 208: 774, + 206: 772, + 203: 769, + 205: 771, + 209: 775, + 207: 773, + } + function k(e, n, i, r, s, o, l, c) { + if (0 !== e) { + if ((!1 === p && (U(3042), (p = !0)), 5 === e)) + (s = s || n), + (o = o || i), + (l = l || r), + (n === f && s === y) || (t.blendEquationSeparate(G[n], G[s]), (f = n), (y = s)), + (i === g && r === v && o === x && l === _) || + (t.blendFuncSeparate(V[i], V[r], V[o], V[l]), (g = i), (v = r), (x = o), (_ = l)), + (m = e), + (b = null) + else if (e !== m || c !== b) { + if (((f === a && y === a) || (t.blendEquation(32774), (f = a), (y = a)), c)) + switch (e) { + case 1: + t.blendFuncSeparate(1, 771, 1, 771) + break + case 2: + t.blendFunc(1, 1) + break + case 3: + t.blendFuncSeparate(0, 0, 769, 771) + break + case 4: + t.blendFuncSeparate(0, 768, 0, 770) + break + default: + console.error('THREE.WebGLState: Invalid blending: ', e) + } + else + switch (e) { + case 1: + t.blendFuncSeparate(770, 771, 1, 771) + break + case 2: + t.blendFunc(770, 1) + break + case 3: + t.blendFunc(0, 769) + break + case 4: + t.blendFunc(0, 768) + break + default: + console.error('THREE.WebGLState: Invalid blending: ', e) + } + ;(g = null), (v = null), (x = null), (_ = null), (m = e), (b = c) + } + } else !0 === p && (H(3042), (p = !1)) + } + function W(e) { + M !== e && (e ? t.frontFace(2304) : t.frontFace(2305), (M = e)) + } + function j(e) { + 0 !== e + ? (U(2884), + e !== w && + (1 === e ? t.cullFace(1029) : 2 === e ? t.cullFace(1028) : t.cullFace(1032))) + : H(2884), + (w = e) + } + function q(e, n, i) { + e + ? (U(32823), (T === n && E === i) || (t.polygonOffset(n, i), (T = n), (E = i))) + : H(32823) + } + function X(e) { + void 0 === e && (e = 33984 + L - 1), P !== e && (t.activeTexture(e), (P = e)) + } + return { + buffers: { color: r, depth: o, stencil: l }, + enable: U, + disable: H, + bindFramebuffer: function (e, n) { + return ( + null === n && null !== h && (n = h), + u[e] !== n && + (t.bindFramebuffer(e, n), + (u[e] = n), + i && (36009 === e && (u[36160] = n), 36160 === e && (u[36009] = n)), + !0) + ) + }, + bindXRFramebuffer: function (e) { + e !== h && (t.bindFramebuffer(36160, e), (h = e)) + }, + useProgram: function (e) { + return d !== e && (t.useProgram(e), (d = e), !0) + }, + setBlending: k, + setMaterial: function (t, e) { + 2 === t.side ? H(2884) : U(2884) + let n = t.side === s + e && (n = !n), + W(n), + 1 === t.blending && !1 === t.transparent + ? k(0) + : k( + t.blending, + t.blendEquation, + t.blendSrc, + t.blendDst, + t.blendEquationAlpha, + t.blendSrcAlpha, + t.blendDstAlpha, + t.premultipliedAlpha, + ), + o.setFunc(t.depthFunc), + o.setTest(t.depthTest), + o.setMask(t.depthWrite), + r.setMask(t.colorWrite) + const i = t.stencilWrite + l.setTest(i), + i && + (l.setMask(t.stencilWriteMask), + l.setFunc(t.stencilFunc, t.stencilRef, t.stencilFuncMask), + l.setOp(t.stencilFail, t.stencilZFail, t.stencilZPass)), + q(t.polygonOffset, t.polygonOffsetFactor, t.polygonOffsetUnits), + !0 === t.alphaToCoverage ? U(32926) : H(32926) + }, + setFlipSided: W, + setCullFace: j, + setLineWidth: function (e) { + e !== S && (A && t.lineWidth(e), (S = e)) + }, + setPolygonOffset: q, + setScissorTest: function (t) { + t ? U(3089) : H(3089) + }, + activeTexture: X, + bindTexture: function (e, n) { + null === P && X() + let i = D[P] + void 0 === i && ((i = { type: void 0, texture: void 0 }), (D[P] = i)), + (i.type === e && i.texture === n) || + (t.bindTexture(e, n || F[e]), (i.type = e), (i.texture = n)) + }, + unbindTexture: function () { + const e = D[P] + void 0 !== e && + void 0 !== e.type && + (t.bindTexture(e.type, null), (e.type = void 0), (e.texture = void 0)) + }, + compressedTexImage2D: function () { + try { + t.compressedTexImage2D.apply(t, arguments) + } catch (e) { + console.error('THREE.WebGLState:', e) + } + }, + texImage2D: function () { + try { + t.texImage2D.apply(t, arguments) + } catch (e) { + console.error('THREE.WebGLState:', e) + } + }, + texImage3D: function () { + try { + t.texImage3D.apply(t, arguments) + } catch (e) { + console.error('THREE.WebGLState:', e) + } + }, + scissor: function (e) { + !1 === z.equals(e) && (t.scissor(e.x, e.y, e.z, e.w), z.copy(e)) + }, + viewport: function (e) { + !1 === O.equals(e) && (t.viewport(e.x, e.y, e.z, e.w), O.copy(e)) + }, + reset: function () { + t.disable(3042), + t.disable(2884), + t.disable(2929), + t.disable(32823), + t.disable(3089), + t.disable(2960), + t.disable(32926), + t.blendEquation(32774), + t.blendFunc(1, 0), + t.blendFuncSeparate(1, 0, 1, 0), + t.colorMask(!0, !0, !0, !0), + t.clearColor(0, 0, 0, 0), + t.depthMask(!0), + t.depthFunc(513), + t.clearDepth(1), + t.stencilMask(4294967295), + t.stencilFunc(519, 0, 4294967295), + t.stencilOp(7680, 7680, 7680), + t.clearStencil(0), + t.cullFace(1029), + t.frontFace(2305), + t.polygonOffset(0, 0), + t.activeTexture(33984), + t.bindFramebuffer(36160, null), + !0 === i && (t.bindFramebuffer(36009, null), t.bindFramebuffer(36008, null)), + t.useProgram(null), + t.lineWidth(1), + t.scissor(0, 0, t.canvas.width, t.canvas.height), + t.viewport(0, 0, t.canvas.width, t.canvas.height), + (c = {}), + (P = null), + (D = {}), + (h = null), + (u = {}), + (d = null), + (p = !1), + (m = null), + (f = null), + (g = null), + (v = null), + (y = null), + (x = null), + (_ = null), + (b = !1), + (M = null), + (w = null), + (S = null), + (T = null), + (E = null), + z.set(0, 0, t.canvas.width, t.canvas.height), + O.set(0, 0, t.canvas.width, t.canvas.height), + r.reset(), + o.reset(), + l.reset() + }, + } + } + function Hr(t, e, n, i, r, s, a) { + const o = r.isWebGL2, + l = r.maxTextures, + c = r.maxCubemapSize, + h = r.maxTextureSize, + x = r.maxSamples, + R = new WeakMap() + let C, + P = !1 + try { + P = + 'undefined' !== typeof OffscreenCanvas && + null !== new OffscreenCanvas(1, 1).getContext('2d') + } catch (it) {} + function D(t, e) { + return P + ? new OffscreenCanvas(t, e) + : document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas') + } + function I(t, e, n, i) { + let r = 1 + if ( + ((t.width > i || t.height > i) && (r = i / Math.max(t.width, t.height)), + r < 1 || !0 === e) + ) { + if ( + ('undefined' !== typeof HTMLImageElement && t instanceof HTMLImageElement) || + ('undefined' !== typeof HTMLCanvasElement && t instanceof HTMLCanvasElement) || + ('undefined' !== typeof ImageBitmap && t instanceof ImageBitmap) + ) { + const i = e ? $ : Math.floor, + s = i(r * t.width), + a = i(r * t.height) + void 0 === C && (C = D(s, a)) + const o = n ? D(s, a) : C + ;(o.width = s), (o.height = a) + return ( + o.getContext('2d').drawImage(t, 0, 0, s, a), + console.warn( + 'THREE.WebGLRenderer: Texture has been resized from (' + + t.width + + 'x' + + t.height + + ') to (' + + s + + 'x' + + a + + ').', + ), + o + ) + } + return ( + 'data' in t && + console.warn( + 'THREE.WebGLRenderer: Image in DataTexture is too big (' + + t.width + + 'x' + + t.height + + ').', + ), + t + ) + } + return t + } + function N(t) { + return K(t.width) && K(t.height) + } + function z(t, e) { + return t.generateMipmaps && e && t.minFilter !== m && t.minFilter !== v + } + function O(e, n, r, s, a = 1) { + t.generateMipmap(e) + i.get(n).__maxMipLevel = Math.log2(Math.max(r, s, a)) + } + function B(n, i, r) { + if (!1 === o) return i + if (null !== n) { + if (void 0 !== t[n]) return t[n] + console.warn( + "THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '" + n + "'", + ) + } + let s = i + return ( + 6403 === i && + (5126 === r && (s = 33326), 5131 === r && (s = 33325), 5121 === r && (s = 33321)), + 6407 === i && + (5126 === r && (s = 34837), 5131 === r && (s = 34843), 5121 === r && (s = 32849)), + 6408 === i && + (5126 === r && (s = 34836), 5131 === r && (s = 34842), 5121 === r && (s = 32856)), + (33325 !== s && 33326 !== s && 34842 !== s && 34836 !== s) || + e.get('EXT_color_buffer_float'), + s + ) + } + function F(t) { + return t === m || t === f || t === g ? 9728 : 9729 + } + function U(e) { + const n = e.target + n.removeEventListener('dispose', U), + (function (e) { + const n = i.get(e) + if (void 0 === n.__webglInit) return + t.deleteTexture(n.__webglTexture), i.remove(e) + })(n), + n.isVideoTexture && R.delete(n), + a.memory.textures-- + } + function H(e) { + const n = e.target + n.removeEventListener('dispose', H), + (function (e) { + const n = e.texture, + r = i.get(e), + s = i.get(n) + if (!e) return + void 0 !== s.__webglTexture && + (t.deleteTexture(s.__webglTexture), a.memory.textures--) + e.depthTexture && e.depthTexture.dispose() + if (e.isWebGLCubeRenderTarget) + for (let i = 0; i < 6; i++) + t.deleteFramebuffer(r.__webglFramebuffer[i]), + r.__webglDepthbuffer && t.deleteRenderbuffer(r.__webglDepthbuffer[i]) + else + t.deleteFramebuffer(r.__webglFramebuffer), + r.__webglDepthbuffer && t.deleteRenderbuffer(r.__webglDepthbuffer), + r.__webglMultisampledFramebuffer && + t.deleteFramebuffer(r.__webglMultisampledFramebuffer), + r.__webglColorRenderbuffer && t.deleteRenderbuffer(r.__webglColorRenderbuffer), + r.__webglDepthRenderbuffer && t.deleteRenderbuffer(r.__webglDepthRenderbuffer) + if (e.isWebGLMultipleRenderTargets) + for (let o = 0, l = n.length; o < l; o++) { + const e = i.get(n[o]) + e.__webglTexture && (t.deleteTexture(e.__webglTexture), a.memory.textures--), + i.remove(n[o]) + } + i.remove(n), i.remove(e) + })(n) + } + let G = 0 + function V(t, e) { + const r = i.get(t) + if ( + (t.isVideoTexture && + (function (t) { + const e = a.render.frame + R.get(t) !== e && (R.set(t, e), t.update()) + })(t), + t.version > 0 && r.__version !== t.version) + ) { + const n = t.image + if (void 0 === n) + console.warn('THREE.WebGLRenderer: Texture marked for update but image is undefined') + else { + if (!1 !== n.complete) return void Y(r, t, e) + console.warn('THREE.WebGLRenderer: Texture marked for update but image is incomplete') + } + } + n.activeTexture(33984 + e), n.bindTexture(3553, r.__webglTexture) + } + function k(e, r) { + const a = i.get(e) + e.version > 0 && a.__version !== e.version + ? (function (e, i, r) { + if (6 !== i.image.length) return + X(e, i), + n.activeTexture(33984 + r), + n.bindTexture(34067, e.__webglTexture), + t.pixelStorei(37440, i.flipY), + t.pixelStorei(37441, i.premultiplyAlpha), + t.pixelStorei(3317, i.unpackAlignment), + t.pixelStorei(37443, 0) + const a = i && (i.isCompressedTexture || i.image[0].isCompressedTexture), + l = i.image[0] && i.image[0].isDataTexture, + h = [] + for (let t = 0; t < 6; t++) + h[t] = a || l ? (l ? i.image[t].image : i.image[t]) : I(i.image[t], !1, !0, c) + const u = h[0], + d = N(u) || o, + p = s.convert(i.format), + m = s.convert(i.type), + f = B(i.internalFormat, p, m) + let g + if ((q(34067, i, d), a)) { + for (let t = 0; t < 6; t++) { + g = h[t].mipmaps + for (let e = 0; e < g.length; e++) { + const r = g[e] + i.format !== E && i.format !== T + ? null !== p + ? n.compressedTexImage2D(34069 + t, e, f, r.width, r.height, 0, r.data) + : console.warn( + 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()', + ) + : n.texImage2D(34069 + t, e, f, r.width, r.height, 0, p, m, r.data) + } + } + e.__maxMipLevel = g.length - 1 + } else { + g = i.mipmaps + for (let t = 0; t < 6; t++) + if (l) { + n.texImage2D(34069 + t, 0, f, h[t].width, h[t].height, 0, p, m, h[t].data) + for (let e = 0; e < g.length; e++) { + const i = g[e].image[t].image + n.texImage2D(34069 + t, e + 1, f, i.width, i.height, 0, p, m, i.data) + } + } else { + n.texImage2D(34069 + t, 0, f, p, m, h[t]) + for (let e = 0; e < g.length; e++) { + const i = g[e] + n.texImage2D(34069 + t, e + 1, f, p, m, i.image[t]) + } + } + e.__maxMipLevel = g.length + } + z(i, d) && O(34067, i, u.width, u.height) + ;(e.__version = i.version), i.onUpdate && i.onUpdate(i) + })(a, e, r) + : (n.activeTexture(33984 + r), n.bindTexture(34067, a.__webglTexture)) + } + const W = { [u]: 10497, [d]: 33071, [p]: 33648 }, + j = { [m]: 9728, [f]: 9984, [g]: 9986, [v]: 9729, 1007: 9985, [y]: 9987 } + function q(n, s, a) { + if ( + (a + ? (t.texParameteri(n, 10242, W[s.wrapS]), + t.texParameteri(n, 10243, W[s.wrapT]), + (32879 !== n && 35866 !== n) || t.texParameteri(n, 32882, W[s.wrapR]), + t.texParameteri(n, 10240, j[s.magFilter]), + t.texParameteri(n, 10241, j[s.minFilter])) + : (t.texParameteri(n, 10242, 33071), + t.texParameteri(n, 10243, 33071), + (32879 !== n && 35866 !== n) || t.texParameteri(n, 32882, 33071), + (s.wrapS === d && s.wrapT === d) || + console.warn( + 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.', + ), + t.texParameteri(n, 10240, F(s.magFilter)), + t.texParameteri(n, 10241, F(s.minFilter)), + s.minFilter !== m && + s.minFilter !== v && + console.warn( + 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.', + )), + !0 === e.has('EXT_texture_filter_anisotropic')) + ) { + const a = e.get('EXT_texture_filter_anisotropic') + if (s.type === M && !1 === e.has('OES_texture_float_linear')) return + if (!1 === o && s.type === w && !1 === e.has('OES_texture_half_float_linear')) return + ;(s.anisotropy > 1 || i.get(s).__currentAnisotropy) && + (t.texParameterf( + n, + a.TEXTURE_MAX_ANISOTROPY_EXT, + Math.min(s.anisotropy, r.getMaxAnisotropy()), + ), + (i.get(s).__currentAnisotropy = s.anisotropy)) + } + } + function X(e, n) { + void 0 === e.__webglInit && + ((e.__webglInit = !0), + n.addEventListener('dispose', U), + (e.__webglTexture = t.createTexture()), + a.memory.textures++) + } + function Y(e, i, r) { + let a = 3553 + i.isDataTexture2DArray && (a = 35866), + i.isDataTexture3D && (a = 32879), + X(e, i), + n.activeTexture(33984 + r), + n.bindTexture(a, e.__webglTexture), + t.pixelStorei(37440, i.flipY), + t.pixelStorei(37441, i.premultiplyAlpha), + t.pixelStorei(3317, i.unpackAlignment), + t.pixelStorei(37443, 0) + const l = + (function (t) { + return ( + !o && (t.wrapS !== d || t.wrapT !== d || (t.minFilter !== m && t.minFilter !== v)) + ) + })(i) && !1 === N(i.image), + c = I(i.image, l, !1, h), + u = N(c) || o, + p = s.convert(i.format) + let f, + g = s.convert(i.type), + y = B(i.internalFormat, p, g) + q(a, i, u) + const x = i.mipmaps + if (i.isDepthTexture) + (y = 6402), + o + ? (y = i.type === M ? 36012 : i.type === b ? 33190 : i.type === S ? 35056 : 33189) + : i.type === M && + console.error('WebGLRenderer: Floating point depth texture requires WebGL2.'), + i.format === L && + 6402 === y && + i.type !== _ && + i.type !== b && + (console.warn( + 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.', + ), + (i.type = _), + (g = s.convert(i.type))), + i.format === A && + 6402 === y && + ((y = 34041), + i.type !== S && + (console.warn( + 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.', + ), + (i.type = S), + (g = s.convert(i.type)))), + n.texImage2D(3553, 0, y, c.width, c.height, 0, p, g, null) + else if (i.isDataTexture) + if (x.length > 0 && u) { + for (let t = 0, e = x.length; t < e; t++) + (f = x[t]), n.texImage2D(3553, t, y, f.width, f.height, 0, p, g, f.data) + ;(i.generateMipmaps = !1), (e.__maxMipLevel = x.length - 1) + } else + n.texImage2D(3553, 0, y, c.width, c.height, 0, p, g, c.data), (e.__maxMipLevel = 0) + else if (i.isCompressedTexture) { + for (let t = 0, e = x.length; t < e; t++) + (f = x[t]), + i.format !== E && i.format !== T + ? null !== p + ? n.compressedTexImage2D(3553, t, y, f.width, f.height, 0, f.data) + : console.warn( + 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()', + ) + : n.texImage2D(3553, t, y, f.width, f.height, 0, p, g, f.data) + e.__maxMipLevel = x.length - 1 + } else if (i.isDataTexture2DArray) + n.texImage3D(35866, 0, y, c.width, c.height, c.depth, 0, p, g, c.data), + (e.__maxMipLevel = 0) + else if (i.isDataTexture3D) + n.texImage3D(32879, 0, y, c.width, c.height, c.depth, 0, p, g, c.data), + (e.__maxMipLevel = 0) + else if (x.length > 0 && u) { + for (let t = 0, e = x.length; t < e; t++) (f = x[t]), n.texImage2D(3553, t, y, p, g, f) + ;(i.generateMipmaps = !1), (e.__maxMipLevel = x.length - 1) + } else n.texImage2D(3553, 0, y, p, g, c), (e.__maxMipLevel = 0) + z(i, u) && O(a, i, c.width, c.height), + (e.__version = i.version), + i.onUpdate && i.onUpdate(i) + } + function J(e, r, a, o, l) { + const c = s.convert(a.format), + h = s.convert(a.type), + u = B(a.internalFormat, c, h) + 32879 === l || 35866 === l + ? n.texImage3D(l, 0, u, r.width, r.height, r.depth, 0, c, h, null) + : n.texImage2D(l, 0, u, r.width, r.height, 0, c, h, null), + n.bindFramebuffer(36160, e), + t.framebufferTexture2D(36160, o, l, i.get(a).__webglTexture, 0), + n.bindFramebuffer(36160, null) + } + function Z(e, n, i) { + if ((t.bindRenderbuffer(36161, e), n.depthBuffer && !n.stencilBuffer)) { + let r = 33189 + if (i) { + const e = n.depthTexture + e && e.isDepthTexture && (e.type === M ? (r = 36012) : e.type === b && (r = 33190)) + const i = tt(n) + t.renderbufferStorageMultisample(36161, i, r, n.width, n.height) + } else t.renderbufferStorage(36161, r, n.width, n.height) + t.framebufferRenderbuffer(36160, 36096, 36161, e) + } else if (n.depthBuffer && n.stencilBuffer) { + if (i) { + const e = tt(n) + t.renderbufferStorageMultisample(36161, e, 35056, n.width, n.height) + } else t.renderbufferStorage(36161, 34041, n.width, n.height) + t.framebufferRenderbuffer(36160, 33306, 36161, e) + } else { + const e = !0 === n.isWebGLMultipleRenderTargets ? n.texture[0] : n.texture, + r = s.convert(e.format), + a = s.convert(e.type), + o = B(e.internalFormat, r, a) + if (i) { + const e = tt(n) + t.renderbufferStorageMultisample(36161, e, o, n.width, n.height) + } else t.renderbufferStorage(36161, o, n.width, n.height) + } + t.bindRenderbuffer(36161, null) + } + function Q(e) { + const r = i.get(e), + s = !0 === e.isWebGLCubeRenderTarget + if (e.depthTexture) { + if (s) throw new Error('target.depthTexture not supported in Cube render targets') + !(function (e, r) { + if (r && r.isWebGLCubeRenderTarget) + throw new Error('Depth Texture with cube render targets is not supported') + if ((n.bindFramebuffer(36160, e), !r.depthTexture || !r.depthTexture.isDepthTexture)) + throw new Error( + 'renderTarget.depthTexture must be an instance of THREE.DepthTexture', + ) + ;(i.get(r.depthTexture).__webglTexture && + r.depthTexture.image.width === r.width && + r.depthTexture.image.height === r.height) || + ((r.depthTexture.image.width = r.width), + (r.depthTexture.image.height = r.height), + (r.depthTexture.needsUpdate = !0)), + V(r.depthTexture, 0) + const s = i.get(r.depthTexture).__webglTexture + if (r.depthTexture.format === L) t.framebufferTexture2D(36160, 36096, 3553, s, 0) + else { + if (r.depthTexture.format !== A) throw new Error('Unknown depthTexture format') + t.framebufferTexture2D(36160, 33306, 3553, s, 0) + } + })(r.__webglFramebuffer, e) + } else if (s) { + r.__webglDepthbuffer = [] + for (let i = 0; i < 6; i++) + n.bindFramebuffer(36160, r.__webglFramebuffer[i]), + (r.__webglDepthbuffer[i] = t.createRenderbuffer()), + Z(r.__webglDepthbuffer[i], e, !1) + } else + n.bindFramebuffer(36160, r.__webglFramebuffer), + (r.__webglDepthbuffer = t.createRenderbuffer()), + Z(r.__webglDepthbuffer, e, !1) + n.bindFramebuffer(36160, null) + } + function tt(t) { + return o && t.isWebGLMultisampleRenderTarget ? Math.min(x, t.samples) : 0 + } + let et = !1, + nt = !1 + ;(this.allocateTextureUnit = function () { + const t = G + return ( + t >= l && + console.warn( + 'THREE.WebGLTextures: Trying to use ' + + t + + ' texture units while this GPU supports only ' + + l, + ), + (G += 1), + t + ) + }), + (this.resetTextureUnits = function () { + G = 0 + }), + (this.setTexture2D = V), + (this.setTexture2DArray = function (t, e) { + const r = i.get(t) + t.version > 0 && r.__version !== t.version + ? Y(r, t, e) + : (n.activeTexture(33984 + e), n.bindTexture(35866, r.__webglTexture)) + }), + (this.setTexture3D = function (t, e) { + const r = i.get(t) + t.version > 0 && r.__version !== t.version + ? Y(r, t, e) + : (n.activeTexture(33984 + e), n.bindTexture(32879, r.__webglTexture)) + }), + (this.setTextureCube = k), + (this.setupRenderTarget = function (e) { + const l = e.texture, + c = i.get(e), + h = i.get(l) + e.addEventListener('dispose', H), + !0 !== e.isWebGLMultipleRenderTargets && + ((h.__webglTexture = t.createTexture()), + (h.__version = l.version), + a.memory.textures++) + const u = !0 === e.isWebGLCubeRenderTarget, + d = !0 === e.isWebGLMultipleRenderTargets, + p = !0 === e.isWebGLMultisampleRenderTarget, + m = l.isDataTexture3D || l.isDataTexture2DArray, + f = N(e) || o + if ( + (!o || + l.format !== T || + (l.type !== M && l.type !== w) || + ((l.format = E), + console.warn( + 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.', + )), + u) + ) { + c.__webglFramebuffer = [] + for (let e = 0; e < 6; e++) c.__webglFramebuffer[e] = t.createFramebuffer() + } else if (((c.__webglFramebuffer = t.createFramebuffer()), d)) + if (r.drawBuffers) { + const n = e.texture + for (let e = 0, r = n.length; e < r; e++) { + const r = i.get(n[e]) + void 0 === r.__webglTexture && + ((r.__webglTexture = t.createTexture()), a.memory.textures++) + } + } else + console.warn( + 'THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.', + ) + else if (p) + if (o) { + ;(c.__webglMultisampledFramebuffer = t.createFramebuffer()), + (c.__webglColorRenderbuffer = t.createRenderbuffer()), + t.bindRenderbuffer(36161, c.__webglColorRenderbuffer) + const i = s.convert(l.format), + r = s.convert(l.type), + a = B(l.internalFormat, i, r), + o = tt(e) + t.renderbufferStorageMultisample(36161, o, a, e.width, e.height), + n.bindFramebuffer(36160, c.__webglMultisampledFramebuffer), + t.framebufferRenderbuffer(36160, 36064, 36161, c.__webglColorRenderbuffer), + t.bindRenderbuffer(36161, null), + e.depthBuffer && + ((c.__webglDepthRenderbuffer = t.createRenderbuffer()), + Z(c.__webglDepthRenderbuffer, e, !0)), + n.bindFramebuffer(36160, null) + } else + console.warn( + 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.', + ) + if (u) { + n.bindTexture(34067, h.__webglTexture), q(34067, l, f) + for (let t = 0; t < 6; t++) J(c.__webglFramebuffer[t], e, l, 36064, 34069 + t) + z(l, f) && O(34067, l, e.width, e.height), n.bindTexture(34067, null) + } else if (d) { + const t = e.texture + for (let r = 0, s = t.length; r < s; r++) { + const s = t[r], + a = i.get(s) + n.bindTexture(3553, a.__webglTexture), + q(3553, s, f), + J(c.__webglFramebuffer, e, s, 36064 + r, 3553), + z(s, f) && O(3553, s, e.width, e.height) + } + n.bindTexture(3553, null) + } else { + let t = 3553 + if (m) + if (o) { + t = l.isDataTexture3D ? 32879 : 35866 + } else + console.warn( + 'THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.', + ) + n.bindTexture(t, h.__webglTexture), + q(t, l, f), + J(c.__webglFramebuffer, e, l, 36064, t), + z(l, f) && O(t, l, e.width, e.height, e.depth), + n.bindTexture(t, null) + } + e.depthBuffer && Q(e) + }), + (this.updateRenderTargetMipmap = function (t) { + const e = N(t) || o, + r = !0 === t.isWebGLMultipleRenderTargets ? t.texture : [t.texture] + for (let s = 0, a = r.length; s < a; s++) { + const a = r[s] + if (z(a, e)) { + const e = t.isWebGLCubeRenderTarget ? 34067 : 3553, + r = i.get(a).__webglTexture + n.bindTexture(e, r), O(e, a, t.width, t.height), n.bindTexture(e, null) + } + } + }), + (this.updateMultisampleRenderTarget = function (e) { + if (e.isWebGLMultisampleRenderTarget) + if (o) { + const r = e.width, + s = e.height + let a = 16384 + e.depthBuffer && (a |= 256), e.stencilBuffer && (a |= 1024) + const o = i.get(e) + n.bindFramebuffer(36008, o.__webglMultisampledFramebuffer), + n.bindFramebuffer(36009, o.__webglFramebuffer), + t.blitFramebuffer(0, 0, r, s, 0, 0, r, s, a, 9728), + n.bindFramebuffer(36008, null), + n.bindFramebuffer(36009, o.__webglMultisampledFramebuffer) + } else + console.warn( + 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.', + ) + }), + (this.safeSetTexture2D = function (t, e) { + t && + t.isWebGLRenderTarget && + (!1 === et && + (console.warn( + "THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.", + ), + (et = !0)), + (t = t.texture)), + V(t, e) + }), + (this.safeSetTextureCube = function (t, e) { + t && + t.isWebGLCubeRenderTarget && + (!1 === nt && + (console.warn( + "THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.", + ), + (nt = !0)), + (t = t.texture)), + k(t, e) + }) + } + function Gr(t, e, n) { + const i = n.isWebGL2 + return { + convert: function (t) { + let n + if (t === x) return 5121 + if (1017 === t) return 32819 + if (1018 === t) return 32820 + if (1019 === t) return 33635 + if (1010 === t) return 5120 + if (1011 === t) return 5122 + if (t === _) return 5123 + if (1013 === t) return 5124 + if (t === b) return 5125 + if (t === M) return 5126 + if (t === w) + return i + ? 5131 + : ((n = e.get('OES_texture_half_float')), null !== n ? n.HALF_FLOAT_OES : null) + if (1021 === t) return 6406 + if (t === T) return 6407 + if (t === E) return 6408 + if (1024 === t) return 6409 + if (1025 === t) return 6410 + if (t === L) return 6402 + if (t === A) return 34041 + if (1028 === t) return 6403 + if (1029 === t) return 36244 + if (1030 === t) return 33319 + if (1031 === t) return 33320 + if (1032 === t) return 36248 + if (1033 === t) return 36249 + if (33776 === t || 33777 === t || 33778 === t || 33779 === t) { + if (((n = e.get('WEBGL_compressed_texture_s3tc')), null === n)) return null + if (33776 === t) return n.COMPRESSED_RGB_S3TC_DXT1_EXT + if (33777 === t) return n.COMPRESSED_RGBA_S3TC_DXT1_EXT + if (33778 === t) return n.COMPRESSED_RGBA_S3TC_DXT3_EXT + if (33779 === t) return n.COMPRESSED_RGBA_S3TC_DXT5_EXT + } + if (35840 === t || 35841 === t || 35842 === t || 35843 === t) { + if (((n = e.get('WEBGL_compressed_texture_pvrtc')), null === n)) return null + if (35840 === t) return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG + if (35841 === t) return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG + if (35842 === t) return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG + if (35843 === t) return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG + } + if (36196 === t) + return ( + (n = e.get('WEBGL_compressed_texture_etc1')), + null !== n ? n.COMPRESSED_RGB_ETC1_WEBGL : null + ) + if ( + (37492 === t || 37496 === t) && + ((n = e.get('WEBGL_compressed_texture_etc')), null !== n) + ) { + if (37492 === t) return n.COMPRESSED_RGB8_ETC2 + if (37496 === t) return n.COMPRESSED_RGBA8_ETC2_EAC + } + return 37808 === t || + 37809 === t || + 37810 === t || + 37811 === t || + 37812 === t || + 37813 === t || + 37814 === t || + 37815 === t || + 37816 === t || + 37817 === t || + 37818 === t || + 37819 === t || + 37820 === t || + 37821 === t || + 37840 === t || + 37841 === t || + 37842 === t || + 37843 === t || + 37844 === t || + 37845 === t || + 37846 === t || + 37847 === t || + 37848 === t || + 37849 === t || + 37850 === t || + 37851 === t || + 37852 === t || + 37853 === t + ? ((n = e.get('WEBGL_compressed_texture_astc')), null !== n ? t : null) + : 36492 === t + ? ((n = e.get('EXT_texture_compression_bptc')), null !== n ? t : null) + : t === S + ? i + ? 34042 + : ((n = e.get('WEBGL_depth_texture')), + null !== n ? n.UNSIGNED_INT_24_8_WEBGL : null) + : void 0 + }, + } + } + class Vr extends Mn { + constructor(t = []) { + super(), (this.cameras = t) + } + } + Vr.prototype.isArrayCamera = !0 + class kr extends pe { + constructor() { + super(), (this.type = 'Group') + } + } + kr.prototype.isGroup = !0 + const Wr = { type: 'move' } + class jr { + constructor() { + ;(this._targetRay = null), (this._grip = null), (this._hand = null) + } + getHandSpace() { + return ( + null === this._hand && + ((this._hand = new kr()), + (this._hand.matrixAutoUpdate = !1), + (this._hand.visible = !1), + (this._hand.joints = {}), + (this._hand.inputState = { pinching: !1 })), + this._hand + ) + } + getTargetRaySpace() { + return ( + null === this._targetRay && + ((this._targetRay = new kr()), + (this._targetRay.matrixAutoUpdate = !1), + (this._targetRay.visible = !1), + (this._targetRay.hasLinearVelocity = !1), + (this._targetRay.linearVelocity = new ut()), + (this._targetRay.hasAngularVelocity = !1), + (this._targetRay.angularVelocity = new ut())), + this._targetRay + ) + } + getGripSpace() { + return ( + null === this._grip && + ((this._grip = new kr()), + (this._grip.matrixAutoUpdate = !1), + (this._grip.visible = !1), + (this._grip.hasLinearVelocity = !1), + (this._grip.linearVelocity = new ut()), + (this._grip.hasAngularVelocity = !1), + (this._grip.angularVelocity = new ut())), + this._grip + ) + } + dispatchEvent(t) { + return ( + null !== this._targetRay && this._targetRay.dispatchEvent(t), + null !== this._grip && this._grip.dispatchEvent(t), + null !== this._hand && this._hand.dispatchEvent(t), + this + ) + } + disconnect(t) { + return ( + this.dispatchEvent({ type: 'disconnected', data: t }), + null !== this._targetRay && (this._targetRay.visible = !1), + null !== this._grip && (this._grip.visible = !1), + null !== this._hand && (this._hand.visible = !1), + this + ) + } + update(t, e, n) { + let i = null, + r = null, + s = null + const a = this._targetRay, + o = this._grip, + l = this._hand + if (t && 'visible-blurred' !== e.session.visibilityState) + if ( + (null !== a && + ((i = e.getPose(t.targetRaySpace, n)), + null !== i && + (a.matrix.fromArray(i.transform.matrix), + a.matrix.decompose(a.position, a.rotation, a.scale), + i.linearVelocity + ? ((a.hasLinearVelocity = !0), a.linearVelocity.copy(i.linearVelocity)) + : (a.hasLinearVelocity = !1), + i.angularVelocity + ? ((a.hasAngularVelocity = !0), a.angularVelocity.copy(i.angularVelocity)) + : (a.hasAngularVelocity = !1), + this.dispatchEvent(Wr))), + l && t.hand) + ) { + s = !0 + for (const s of t.hand.values()) { + const t = e.getJointPose(s, n) + if (void 0 === l.joints[s.jointName]) { + const t = new kr() + ;(t.matrixAutoUpdate = !1), + (t.visible = !1), + (l.joints[s.jointName] = t), + l.add(t) + } + const i = l.joints[s.jointName] + null !== t && + (i.matrix.fromArray(t.transform.matrix), + i.matrix.decompose(i.position, i.rotation, i.scale), + (i.jointRadius = t.radius)), + (i.visible = null !== t) + } + const i = l.joints['index-finger-tip'], + r = l.joints['thumb-tip'], + a = i.position.distanceTo(r.position), + o = 0.02, + c = 0.005 + l.inputState.pinching && a > o + c + ? ((l.inputState.pinching = !1), + this.dispatchEvent({ type: 'pinchend', handedness: t.handedness, target: this })) + : !l.inputState.pinching && + a <= o - c && + ((l.inputState.pinching = !0), + this.dispatchEvent({ + type: 'pinchstart', + handedness: t.handedness, + target: this, + })) + } else + null !== o && + t.gripSpace && + ((r = e.getPose(t.gripSpace, n)), + null !== r && + (o.matrix.fromArray(r.transform.matrix), + o.matrix.decompose(o.position, o.rotation, o.scale), + r.linearVelocity + ? ((o.hasLinearVelocity = !0), o.linearVelocity.copy(r.linearVelocity)) + : (o.hasLinearVelocity = !1), + r.angularVelocity + ? ((o.hasAngularVelocity = !0), o.angularVelocity.copy(r.angularVelocity)) + : (o.hasAngularVelocity = !1))) + return ( + null !== a && (a.visible = null !== i), + null !== o && (o.visible = null !== r), + null !== l && (l.visible = null !== s), + this + ) + } + } + class qr extends W { + constructor(t, e) { + super() + const n = this, + i = t.state + let r = null, + s = 1, + a = null, + o = 'local-floor', + l = null, + c = null, + h = null, + u = null + const d = [], + p = new Map(), + m = new Mn() + m.layers.enable(1), (m.viewport = new ot()) + const f = new Mn() + f.layers.enable(2), (f.viewport = new ot()) + const g = [m, f], + v = new Vr() + v.layers.enable(1), v.layers.enable(2) + let y = null, + x = null + function _(t) { + const e = p.get(t.inputSource) + e && e.dispatchEvent({ type: t.type, data: t.inputSource }) + } + function b() { + p.forEach(function (t, e) { + t.disconnect(e) + }), + p.clear(), + (y = null), + (x = null), + i.bindXRFramebuffer(null), + t.setRenderTarget(t.getRenderTarget()), + L.stop(), + (n.isPresenting = !1), + n.dispatchEvent({ type: 'sessionend' }) + } + function M(t) { + const e = r.inputSources + for (let n = 0; n < d.length; n++) p.set(e[n], d[n]) + for (let n = 0; n < t.removed.length; n++) { + const e = t.removed[n], + i = p.get(e) + i && (i.dispatchEvent({ type: 'disconnected', data: e }), p.delete(e)) + } + for (let n = 0; n < t.added.length; n++) { + const e = t.added[n], + i = p.get(e) + i && i.dispatchEvent({ type: 'connected', data: e }) + } + } + ;(this.cameraAutoUpdate = !0), + (this.enabled = !1), + (this.isPresenting = !1), + (this.getController = function (t) { + let e = d[t] + return void 0 === e && ((e = new jr()), (d[t] = e)), e.getTargetRaySpace() + }), + (this.getControllerGrip = function (t) { + let e = d[t] + return void 0 === e && ((e = new jr()), (d[t] = e)), e.getGripSpace() + }), + (this.getHand = function (t) { + let e = d[t] + return void 0 === e && ((e = new jr()), (d[t] = e)), e.getHandSpace() + }), + (this.setFramebufferScaleFactor = function (t) { + ;(s = t), + !0 === n.isPresenting && + console.warn( + 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.', + ) + }), + (this.setReferenceSpaceType = function (t) { + ;(o = t), + !0 === n.isPresenting && + console.warn( + 'THREE.WebXRManager: Cannot change reference space type while presenting.', + ) + }), + (this.getReferenceSpace = function () { + return a + }), + (this.getSession = function () { + return r + }), + (this.setSession = async function (t) { + if (((r = t), null !== r)) { + r.addEventListener('select', _), + r.addEventListener('selectstart', _), + r.addEventListener('selectend', _), + r.addEventListener('squeeze', _), + r.addEventListener('squeezestart', _), + r.addEventListener('squeezeend', _), + r.addEventListener('end', b), + r.addEventListener('inputsourceschange', M) + const t = e.getContextAttributes() + if ( + (!0 !== t.xrCompatible && (await e.makeXRCompatible()), + void 0 === r.renderState.layers) + ) { + const n = { + antialias: t.antialias, + alpha: t.alpha, + depth: t.depth, + stencil: t.stencil, + framebufferScaleFactor: s, + }, + i = new XRWebGLLayer(r, e, n) + r.updateRenderState({ baseLayer: i }) + } else { + let n = 0 + t.depth && (n = t.stencil ? 34041 : 6402) + const i = { colorFormat: t.alpha ? 6408 : 6407, depthFormat: n, scaleFactor: s } + ;(c = new XRWebGLBinding(r, e)), + (u = c.createProjectionLayer(i)), + (h = e.createFramebuffer()), + r.updateRenderState({ layers: [u] }) + } + ;(a = await r.requestReferenceSpace(o)), + L.setContext(r), + L.start(), + (n.isPresenting = !0), + n.dispatchEvent({ type: 'sessionstart' }) + } + }) + const w = new ut(), + S = new ut() + function T(t, e) { + null === e + ? t.matrixWorld.copy(t.matrix) + : t.matrixWorld.multiplyMatrices(e.matrixWorld, t.matrix), + t.matrixWorldInverse.copy(t.matrixWorld).invert() + } + ;(this.updateCamera = function (t) { + if (null === r) return + ;(v.near = f.near = m.near = t.near), + (v.far = f.far = m.far = t.far), + (y === v.near && x === v.far) || + (r.updateRenderState({ depthNear: v.near, depthFar: v.far }), + (y = v.near), + (x = v.far)) + const e = t.parent, + n = v.cameras + T(v, e) + for (let r = 0; r < n.length; r++) T(n[r], e) + v.matrixWorld.decompose(v.position, v.quaternion, v.scale), + t.position.copy(v.position), + t.quaternion.copy(v.quaternion), + t.scale.copy(v.scale), + t.matrix.copy(v.matrix), + t.matrixWorld.copy(v.matrixWorld) + const i = t.children + for (let r = 0, s = i.length; r < s; r++) i[r].updateMatrixWorld(!0) + 2 === n.length + ? (function (t, e, n) { + w.setFromMatrixPosition(e.matrixWorld), S.setFromMatrixPosition(n.matrixWorld) + const i = w.distanceTo(S), + r = e.projectionMatrix.elements, + s = n.projectionMatrix.elements, + a = r[14] / (r[10] - 1), + o = r[14] / (r[10] + 1), + l = (r[9] + 1) / r[5], + c = (r[9] - 1) / r[5], + h = (r[8] - 1) / r[0], + u = (s[8] + 1) / s[0], + d = a * h, + p = a * u, + m = i / (-h + u), + f = m * -h + e.matrixWorld.decompose(t.position, t.quaternion, t.scale), + t.translateX(f), + t.translateZ(m), + t.matrixWorld.compose(t.position, t.quaternion, t.scale), + t.matrixWorldInverse.copy(t.matrixWorld).invert() + const g = a + m, + v = o + m, + y = d - f, + x = p + (i - f), + _ = ((l * o) / v) * g, + b = ((c * o) / v) * g + t.projectionMatrix.makePerspective(y, x, _, b, g, v) + })(v, m, f) + : v.projectionMatrix.copy(m.projectionMatrix) + }), + (this.getCamera = function () { + return v + }) + let E = null + const L = new Nn() + L.setAnimationLoop(function (t, n) { + if (((l = n.getViewerPose(a)), null !== l)) { + const t = l.views, + n = r.renderState.baseLayer + void 0 === r.renderState.layers && i.bindXRFramebuffer(n.framebuffer) + let s = !1 + t.length !== v.cameras.length && ((v.cameras.length = 0), (s = !0)) + for (let a = 0; a < t.length; a++) { + const o = t[a] + let l = null + if (void 0 === r.renderState.layers) l = n.getViewport(o) + else { + const t = c.getViewSubImage(u, o) + i.bindXRFramebuffer(h), + e.framebufferTexture2D(36160, 36064, 3553, t.colorTexture, 0), + void 0 !== t.depthStencilTexture && + e.framebufferTexture2D(36160, 36096, 3553, t.depthStencilTexture, 0), + (l = t.viewport) + } + const d = g[a] + d.matrix.fromArray(o.transform.matrix), + d.projectionMatrix.fromArray(o.projectionMatrix), + d.viewport.set(l.x, l.y, l.width, l.height), + 0 === a && v.matrix.copy(d.matrix), + !0 === s && v.cameras.push(d) + } + } + const s = r.inputSources + for (let e = 0; e < d.length; e++) { + const t = d[e], + i = s[e] + t.update(i, n, a) + } + E && E(t, n) + }), + (this.setAnimationLoop = function (t) { + E = t + }), + (this.dispose = function () {}) + } + } + function Xr(t) { + function e(e, n) { + ;(e.opacity.value = n.opacity), + n.color && e.diffuse.value.copy(n.color), + n.emissive && e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity), + n.map && (e.map.value = n.map), + n.alphaMap && (e.alphaMap.value = n.alphaMap), + n.specularMap && (e.specularMap.value = n.specularMap) + const i = t.get(n).envMap + if (i) { + ;(e.envMap.value = i), + (e.flipEnvMap.value = i.isCubeTexture && i._needsFlipEnvMap ? -1 : 1), + (e.reflectivity.value = n.reflectivity), + (e.refractionRatio.value = n.refractionRatio) + const r = t.get(i).__maxMipLevel + void 0 !== r && (e.maxMipLevel.value = r) + } + let r, s + n.lightMap && + ((e.lightMap.value = n.lightMap), (e.lightMapIntensity.value = n.lightMapIntensity)), + n.aoMap && ((e.aoMap.value = n.aoMap), (e.aoMapIntensity.value = n.aoMapIntensity)), + n.map + ? (r = n.map) + : n.specularMap + ? (r = n.specularMap) + : n.displacementMap + ? (r = n.displacementMap) + : n.normalMap + ? (r = n.normalMap) + : n.bumpMap + ? (r = n.bumpMap) + : n.roughnessMap + ? (r = n.roughnessMap) + : n.metalnessMap + ? (r = n.metalnessMap) + : n.alphaMap + ? (r = n.alphaMap) + : n.emissiveMap + ? (r = n.emissiveMap) + : n.clearcoatMap + ? (r = n.clearcoatMap) + : n.clearcoatNormalMap + ? (r = n.clearcoatNormalMap) + : n.clearcoatRoughnessMap && (r = n.clearcoatRoughnessMap), + void 0 !== r && + (r.isWebGLRenderTarget && (r = r.texture), + !0 === r.matrixAutoUpdate && r.updateMatrix(), + e.uvTransform.value.copy(r.matrix)), + n.aoMap ? (s = n.aoMap) : n.lightMap && (s = n.lightMap), + void 0 !== s && + (s.isWebGLRenderTarget && (s = s.texture), + !0 === s.matrixAutoUpdate && s.updateMatrix(), + e.uv2Transform.value.copy(s.matrix)) + } + function n(e, n) { + ;(e.roughness.value = n.roughness), + (e.metalness.value = n.metalness), + n.roughnessMap && (e.roughnessMap.value = n.roughnessMap), + n.metalnessMap && (e.metalnessMap.value = n.metalnessMap), + n.emissiveMap && (e.emissiveMap.value = n.emissiveMap), + n.bumpMap && + ((e.bumpMap.value = n.bumpMap), + (e.bumpScale.value = n.bumpScale), + n.side === s && (e.bumpScale.value *= -1)), + n.normalMap && + ((e.normalMap.value = n.normalMap), + e.normalScale.value.copy(n.normalScale), + n.side === s && e.normalScale.value.negate()), + n.displacementMap && + ((e.displacementMap.value = n.displacementMap), + (e.displacementScale.value = n.displacementScale), + (e.displacementBias.value = n.displacementBias)) + t.get(n).envMap && (e.envMapIntensity.value = n.envMapIntensity) + } + return { + refreshFogUniforms: function (t, e) { + t.fogColor.value.copy(e.color), + e.isFog + ? ((t.fogNear.value = e.near), (t.fogFar.value = e.far)) + : e.isFogExp2 && (t.fogDensity.value = e.density) + }, + refreshMaterialUniforms: function (t, i, r, a, o) { + i.isMeshBasicMaterial + ? e(t, i) + : i.isMeshLambertMaterial + ? (e(t, i), + (function (t, e) { + e.emissiveMap && (t.emissiveMap.value = e.emissiveMap) + })(t, i)) + : i.isMeshToonMaterial + ? (e(t, i), + (function (t, e) { + e.gradientMap && (t.gradientMap.value = e.gradientMap) + e.emissiveMap && (t.emissiveMap.value = e.emissiveMap) + e.bumpMap && + ((t.bumpMap.value = e.bumpMap), + (t.bumpScale.value = e.bumpScale), + e.side === s && (t.bumpScale.value *= -1)) + e.normalMap && + ((t.normalMap.value = e.normalMap), + t.normalScale.value.copy(e.normalScale), + e.side === s && t.normalScale.value.negate()) + e.displacementMap && + ((t.displacementMap.value = e.displacementMap), + (t.displacementScale.value = e.displacementScale), + (t.displacementBias.value = e.displacementBias)) + })(t, i)) + : i.isMeshPhongMaterial + ? (e(t, i), + (function (t, e) { + t.specular.value.copy(e.specular), + (t.shininess.value = Math.max(e.shininess, 1e-4)), + e.emissiveMap && (t.emissiveMap.value = e.emissiveMap) + e.bumpMap && + ((t.bumpMap.value = e.bumpMap), + (t.bumpScale.value = e.bumpScale), + e.side === s && (t.bumpScale.value *= -1)) + e.normalMap && + ((t.normalMap.value = e.normalMap), + t.normalScale.value.copy(e.normalScale), + e.side === s && t.normalScale.value.negate()) + e.displacementMap && + ((t.displacementMap.value = e.displacementMap), + (t.displacementScale.value = e.displacementScale), + (t.displacementBias.value = e.displacementBias)) + })(t, i)) + : i.isMeshStandardMaterial + ? (e(t, i), + i.isMeshPhysicalMaterial + ? (function (t, e, i) { + n(t, e), + (t.reflectivity.value = e.reflectivity), + (t.clearcoat.value = e.clearcoat), + (t.clearcoatRoughness.value = e.clearcoatRoughness), + e.sheen && t.sheen.value.copy(e.sheen) + e.clearcoatMap && (t.clearcoatMap.value = e.clearcoatMap) + e.clearcoatRoughnessMap && + (t.clearcoatRoughnessMap.value = e.clearcoatRoughnessMap) + e.clearcoatNormalMap && + (t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale), + (t.clearcoatNormalMap.value = e.clearcoatNormalMap), + e.side === s && t.clearcoatNormalScale.value.negate()) + ;(t.transmission.value = e.transmission), + e.transmissionMap && (t.transmissionMap.value = e.transmissionMap) + e.transmission > 0 && + ((t.transmissionSamplerMap.value = i.texture), + t.transmissionSamplerSize.value.set(i.width, i.height)) + ;(t.thickness.value = e.thickness), + e.thicknessMap && (t.thicknessMap.value = e.thicknessMap) + ;(t.attenuationDistance.value = e.attenuationDistance), + t.attenuationColor.value.copy(e.attenuationColor) + })(t, i, o) + : n(t, i)) + : i.isMeshMatcapMaterial + ? (e(t, i), + (function (t, e) { + e.matcap && (t.matcap.value = e.matcap) + e.bumpMap && + ((t.bumpMap.value = e.bumpMap), + (t.bumpScale.value = e.bumpScale), + e.side === s && (t.bumpScale.value *= -1)) + e.normalMap && + ((t.normalMap.value = e.normalMap), + t.normalScale.value.copy(e.normalScale), + e.side === s && t.normalScale.value.negate()) + e.displacementMap && + ((t.displacementMap.value = e.displacementMap), + (t.displacementScale.value = e.displacementScale), + (t.displacementBias.value = e.displacementBias)) + })(t, i)) + : i.isMeshDepthMaterial + ? (e(t, i), + (function (t, e) { + e.displacementMap && + ((t.displacementMap.value = e.displacementMap), + (t.displacementScale.value = e.displacementScale), + (t.displacementBias.value = e.displacementBias)) + })(t, i)) + : i.isMeshDistanceMaterial + ? (e(t, i), + (function (t, e) { + e.displacementMap && + ((t.displacementMap.value = e.displacementMap), + (t.displacementScale.value = e.displacementScale), + (t.displacementBias.value = e.displacementBias)) + t.referencePosition.value.copy(e.referencePosition), + (t.nearDistance.value = e.nearDistance), + (t.farDistance.value = e.farDistance) + })(t, i)) + : i.isMeshNormalMaterial + ? (e(t, i), + (function (t, e) { + e.bumpMap && + ((t.bumpMap.value = e.bumpMap), + (t.bumpScale.value = e.bumpScale), + e.side === s && (t.bumpScale.value *= -1)) + e.normalMap && + ((t.normalMap.value = e.normalMap), + t.normalScale.value.copy(e.normalScale), + e.side === s && t.normalScale.value.negate()) + e.displacementMap && + ((t.displacementMap.value = e.displacementMap), + (t.displacementScale.value = e.displacementScale), + (t.displacementBias.value = e.displacementBias)) + })(t, i)) + : i.isLineBasicMaterial + ? ((function (t, e) { + t.diffuse.value.copy(e.color), (t.opacity.value = e.opacity) + })(t, i), + i.isLineDashedMaterial && + (function (t, e) { + ;(t.dashSize.value = e.dashSize), + (t.totalSize.value = e.dashSize + e.gapSize), + (t.scale.value = e.scale) + })(t, i)) + : i.isPointsMaterial + ? (function (t, e, n, i) { + t.diffuse.value.copy(e.color), + (t.opacity.value = e.opacity), + (t.size.value = e.size * n), + (t.scale.value = 0.5 * i), + e.map && (t.map.value = e.map) + e.alphaMap && (t.alphaMap.value = e.alphaMap) + let r + e.map ? (r = e.map) : e.alphaMap && (r = e.alphaMap) + void 0 !== r && + (!0 === r.matrixAutoUpdate && r.updateMatrix(), + t.uvTransform.value.copy(r.matrix)) + })(t, i, r, a) + : i.isSpriteMaterial + ? (function (t, e) { + t.diffuse.value.copy(e.color), + (t.opacity.value = e.opacity), + (t.rotation.value = e.rotation), + e.map && (t.map.value = e.map) + e.alphaMap && (t.alphaMap.value = e.alphaMap) + let n + e.map ? (n = e.map) : e.alphaMap && (n = e.alphaMap) + void 0 !== n && + (!0 === n.matrixAutoUpdate && n.updateMatrix(), + t.uvTransform.value.copy(n.matrix)) + })(t, i) + : i.isShadowMaterial + ? (t.color.value.copy(i.color), (t.opacity.value = i.opacity)) + : i.isShaderMaterial && (i.uniformsNeedUpdate = !1) + }, + } + } + function Yr(t = {}) { + const e = + void 0 !== t.canvas + ? t.canvas + : (function () { + const t = document.createElementNS('http://www.w3.org/1999/xhtml', 'canvas') + return (t.style.display = 'block'), t + })(), + n = void 0 !== t.context ? t.context : null, + i = void 0 !== t.alpha && t.alpha, + r = void 0 === t.depth || t.depth, + a = void 0 === t.stencil || t.stencil, + o = void 0 !== t.antialias && t.antialias, + l = void 0 === t.premultipliedAlpha || t.premultipliedAlpha, + c = void 0 !== t.preserveDrawingBuffer && t.preserveDrawingBuffer, + h = void 0 !== t.powerPreference ? t.powerPreference : 'default', + u = void 0 !== t.failIfMajorPerformanceCaveat && t.failIfMajorPerformanceCaveat + let p = null, + f = null + const g = [], + v = [] + ;(this.domElement = e), + (this.debug = { checkShaderErrors: !0 }), + (this.autoClear = !0), + (this.autoClearColor = !0), + (this.autoClearDepth = !0), + (this.autoClearStencil = !0), + (this.sortObjects = !0), + (this.clippingPlanes = []), + (this.localClippingEnabled = !1), + (this.gammaFactor = 2), + (this.outputEncoding = O), + (this.physicallyCorrectLights = !1), + (this.toneMapping = 0), + (this.toneMappingExposure = 1) + const _ = this + let b = !1, + S = 0, + T = 0, + L = null, + A = -1, + R = null + const C = new ot(), + P = new ot() + let D = null, + I = e.width, + N = e.height, + z = 1, + B = null, + F = null + const U = new ot(0, 0, I, N), + H = new ot(0, 0, I, N) + let G = !1 + const V = [], + k = new In() + let W = !1, + j = !1, + q = null + const X = new Vt(), + Y = new ut(), + J = { + background: null, + fog: null, + environment: null, + overrideMaterial: null, + isScene: !0, + } + function Z() { + return null === L ? z : 1 + } + let Q, + K, + $, + tt, + et, + nt, + it, + rt, + st, + at, + ht, + dt, + pt, + mt, + ft, + gt, + vt, + yt, + xt, + _t, + bt, + Mt, + wt = n + function St(t, n) { + for (let i = 0; i < t.length; i++) { + const r = t[i], + s = e.getContext(r, n) + if (null !== s) return s + } + return null + } + try { + const t = { + alpha: i, + depth: r, + stencil: a, + antialias: o, + premultipliedAlpha: l, + preserveDrawingBuffer: c, + powerPreference: h, + failIfMajorPerformanceCaveat: u, + } + if ( + (e.addEventListener('webglcontextlost', Lt, !1), + e.addEventListener('webglcontextrestored', At, !1), + null === wt) + ) { + const e = ['webgl2', 'webgl', 'experimental-webgl'] + if ((!0 === _.isWebGL1Renderer && e.shift(), (wt = St(e, t)), null === wt)) + throw St(e) + ? new Error('Error creating WebGL context with your selected attributes.') + : new Error('Error creating WebGL context.') + } + void 0 === wt.getShaderPrecisionFormat && + (wt.getShaderPrecisionFormat = function () { + return { rangeMin: 1, rangeMax: 1, precision: 1 } + }) + } catch (Ht) { + throw (console.error('THREE.WebGLRenderer: ' + Ht.message), Ht) + } + function Tt() { + ;(Q = new qn(wt)), + (K = new kn(wt, Q, t)), + Q.init(K), + (bt = new Gr(wt, Q, K)), + ($ = new Ur(wt, Q, K)), + (V[0] = 1029), + (tt = new Jn(wt)), + (et = new Tr()), + (nt = new Hr(wt, Q, $, et, K, bt, tt)), + (it = new jn(_)), + (rt = new zn(wt, K)), + (Mt = new Gn(wt, Q, rt, K)), + (st = new Xn(wt, rt, tt, Mt)), + (at = new $n(wt, st, rt, tt)), + (yt = new Kn(wt)), + (ft = new Wn(et)), + (ht = new Sr(_, it, Q, K, Mt, ft)), + (dt = new Xr(et)), + (pt = new Rr(et)), + (mt = new zr(Q, K)), + (vt = new Hn(_, it, $, at, l)), + (gt = new Fr(_, at, K)), + (xt = new Vn(wt, Q, tt, K)), + (_t = new Yn(wt, Q, tt, K)), + (tt.programs = ht.programs), + (_.capabilities = K), + (_.extensions = Q), + (_.properties = et), + (_.renderLists = pt), + (_.shadowMap = gt), + (_.state = $), + (_.info = tt) + } + Tt() + const Et = new qr(_, wt) + function Lt(t) { + t.preventDefault(), console.log('THREE.WebGLRenderer: Context Lost.'), (b = !0) + } + function At() { + console.log('THREE.WebGLRenderer: Context Restored.'), (b = !1) + const t = tt.autoReset, + e = gt.enabled, + n = gt.autoUpdate, + i = gt.needsUpdate, + r = gt.type + Tt(), + (tt.autoReset = t), + (gt.enabled = e), + (gt.autoUpdate = n), + (gt.needsUpdate = i), + (gt.type = r) + } + function Rt(t) { + const e = t.target + e.removeEventListener('dispose', Rt), + (function (t) { + ;(function (t) { + const e = et.get(t).programs + void 0 !== e && + e.forEach(function (t) { + ht.releaseProgram(t) + }) + })(t), + et.remove(t) + })(e) + } + ;(this.xr = Et), + (this.getContext = function () { + return wt + }), + (this.getContextAttributes = function () { + return wt.getContextAttributes() + }), + (this.forceContextLoss = function () { + const t = Q.get('WEBGL_lose_context') + t && t.loseContext() + }), + (this.forceContextRestore = function () { + const t = Q.get('WEBGL_lose_context') + t && t.restoreContext() + }), + (this.getPixelRatio = function () { + return z + }), + (this.setPixelRatio = function (t) { + void 0 !== t && ((z = t), this.setSize(I, N, !1)) + }), + (this.getSize = function (t) { + return t.set(I, N) + }), + (this.setSize = function (t, n, i) { + Et.isPresenting + ? console.warn( + "THREE.WebGLRenderer: Can't change size while VR device is presenting.", + ) + : ((I = t), + (N = n), + (e.width = Math.floor(t * z)), + (e.height = Math.floor(n * z)), + !1 !== i && ((e.style.width = t + 'px'), (e.style.height = n + 'px')), + this.setViewport(0, 0, t, n)) + }), + (this.getDrawingBufferSize = function (t) { + return t.set(I * z, N * z).floor() + }), + (this.setDrawingBufferSize = function (t, n, i) { + ;(I = t), + (N = n), + (z = i), + (e.width = Math.floor(t * i)), + (e.height = Math.floor(n * i)), + this.setViewport(0, 0, t, n) + }), + (this.getCurrentViewport = function (t) { + return t.copy(C) + }), + (this.getViewport = function (t) { + return t.copy(U) + }), + (this.setViewport = function (t, e, n, i) { + t.isVector4 ? U.set(t.x, t.y, t.z, t.w) : U.set(t, e, n, i), + $.viewport(C.copy(U).multiplyScalar(z).floor()) + }), + (this.getScissor = function (t) { + return t.copy(H) + }), + (this.setScissor = function (t, e, n, i) { + t.isVector4 ? H.set(t.x, t.y, t.z, t.w) : H.set(t, e, n, i), + $.scissor(P.copy(H).multiplyScalar(z).floor()) + }), + (this.getScissorTest = function () { + return G + }), + (this.setScissorTest = function (t) { + $.setScissorTest((G = t)) + }), + (this.setOpaqueSort = function (t) { + B = t + }), + (this.setTransparentSort = function (t) { + F = t + }), + (this.getClearColor = function (t) { + return t.copy(vt.getClearColor()) + }), + (this.setClearColor = function () { + vt.setClearColor.apply(vt, arguments) + }), + (this.getClearAlpha = function () { + return vt.getClearAlpha() + }), + (this.setClearAlpha = function () { + vt.setClearAlpha.apply(vt, arguments) + }), + (this.clear = function (t, e, n) { + let i = 0 + ;(void 0 === t || t) && (i |= 16384), + (void 0 === e || e) && (i |= 256), + (void 0 === n || n) && (i |= 1024), + wt.clear(i) + }), + (this.clearColor = function () { + this.clear(!0, !1, !1) + }), + (this.clearDepth = function () { + this.clear(!1, !0, !1) + }), + (this.clearStencil = function () { + this.clear(!1, !1, !0) + }), + (this.dispose = function () { + e.removeEventListener('webglcontextlost', Lt, !1), + e.removeEventListener('webglcontextrestored', At, !1), + pt.dispose(), + mt.dispose(), + et.dispose(), + it.dispose(), + at.dispose(), + Mt.dispose(), + Et.dispose(), + Et.removeEventListener('sessionstart', Pt), + Et.removeEventListener('sessionend', Dt), + q && (q.dispose(), (q = null)), + It.stop() + }), + (this.renderBufferImmediate = function (t, e) { + Mt.initAttributes() + const n = et.get(t) + t.hasPositions && !n.position && (n.position = wt.createBuffer()), + t.hasNormals && !n.normal && (n.normal = wt.createBuffer()), + t.hasUvs && !n.uv && (n.uv = wt.createBuffer()), + t.hasColors && !n.color && (n.color = wt.createBuffer()) + const i = e.getAttributes() + t.hasPositions && + (wt.bindBuffer(34962, n.position), + wt.bufferData(34962, t.positionArray, 35048), + Mt.enableAttribute(i.position), + wt.vertexAttribPointer(i.position, 3, 5126, !1, 0, 0)), + t.hasNormals && + (wt.bindBuffer(34962, n.normal), + wt.bufferData(34962, t.normalArray, 35048), + Mt.enableAttribute(i.normal), + wt.vertexAttribPointer(i.normal, 3, 5126, !1, 0, 0)), + t.hasUvs && + (wt.bindBuffer(34962, n.uv), + wt.bufferData(34962, t.uvArray, 35048), + Mt.enableAttribute(i.uv), + wt.vertexAttribPointer(i.uv, 2, 5126, !1, 0, 0)), + t.hasColors && + (wt.bindBuffer(34962, n.color), + wt.bufferData(34962, t.colorArray, 35048), + Mt.enableAttribute(i.color), + wt.vertexAttribPointer(i.color, 3, 5126, !1, 0, 0)), + Mt.disableUnusedAttributes(), + wt.drawArrays(4, 0, t.count), + (t.count = 0) + }), + (this.renderBufferDirect = function (t, e, n, i, r, s) { + null === e && (e = J) + const a = r.isMesh && r.matrixWorld.determinant() < 0, + o = Ut(t, e, i, r) + $.setMaterial(i, a) + let l = n.index + const c = n.attributes.position + if (null === l) { + if (void 0 === c || 0 === c.count) return + } else if (0 === l.count) return + let h, + u = 1 + !0 === i.wireframe && ((l = st.getWireframeAttribute(n)), (u = 2)), + (i.morphTargets || i.morphNormals) && yt.update(r, n, i, o), + Mt.setup(r, i, o, n, l) + let d = xt + null !== l && ((h = rt.get(l)), (d = _t), d.setIndex(h)) + const p = null !== l ? l.count : c.count, + m = n.drawRange.start * u, + f = n.drawRange.count * u, + g = null !== s ? s.start * u : 0, + v = null !== s ? s.count * u : 1 / 0, + y = Math.max(m, g), + x = Math.min(p, m + f, g + v) - 1, + _ = Math.max(0, x - y + 1) + if (0 !== _) { + if (r.isMesh) + !0 === i.wireframe + ? ($.setLineWidth(i.wireframeLinewidth * Z()), d.setMode(1)) + : d.setMode(4) + else if (r.isLine) { + let t = i.linewidth + void 0 === t && (t = 1), + $.setLineWidth(t * Z()), + r.isLineSegments ? d.setMode(1) : r.isLineLoop ? d.setMode(2) : d.setMode(3) + } else r.isPoints ? d.setMode(0) : r.isSprite && d.setMode(4) + if (r.isInstancedMesh) d.renderInstances(y, _, r.count) + else if (n.isInstancedBufferGeometry) { + const t = Math.min(n.instanceCount, n._maxInstanceCount) + d.renderInstances(y, _, t) + } else d.render(y, _) + } + }), + (this.compile = function (t, e) { + ;(f = mt.get(t)), + f.init(), + t.traverseVisible(function (t) { + t.isLight && + t.layers.test(e.layers) && + (f.pushLight(t), t.castShadow && f.pushShadow(t)) + }), + f.setupLights(), + t.traverse(function (e) { + const n = e.material + if (n) + if (Array.isArray(n)) + for (let i = 0; i < n.length; i++) { + Bt(n[i], t, e) + } + else Bt(n, t, e) + }) + }) + let Ct = null + function Pt() { + It.stop() + } + function Dt() { + It.start() + } + const It = new Nn() + function Nt(t, e, n, i) { + if (!1 === t.visible) return + if (t.layers.test(e.layers)) + if (t.isGroup) n = t.renderOrder + else if (t.isLOD) !0 === t.autoUpdate && t.update(e) + else if (t.isLight) f.pushLight(t), t.castShadow && f.pushShadow(t) + else if (t.isSprite) { + if (!t.frustumCulled || k.intersectsSprite(t)) { + i && Y.setFromMatrixPosition(t.matrixWorld).applyMatrix4(X) + const e = at.update(t), + r = t.material + r.visible && p.push(t, e, r, n, Y.z, null) + } + } else if (t.isImmediateRenderObject) + i && Y.setFromMatrixPosition(t.matrixWorld).applyMatrix4(X), + p.push(t, null, t.material, n, Y.z, null) + else if ( + (t.isMesh || t.isLine || t.isPoints) && + (t.isSkinnedMesh && + t.skeleton.frame !== tt.render.frame && + (t.skeleton.update(), (t.skeleton.frame = tt.render.frame)), + !t.frustumCulled || k.intersectsObject(t)) + ) { + i && Y.setFromMatrixPosition(t.matrixWorld).applyMatrix4(X) + const e = at.update(t), + r = t.material + if (Array.isArray(r)) { + const i = e.groups + for (let s = 0, a = i.length; s < a; s++) { + const a = i[s], + o = r[a.materialIndex] + o && o.visible && p.push(t, e, o, n, Y.z, a) + } + } else r.visible && p.push(t, e, r, n, Y.z, null) + } + const r = t.children + for (let s = 0, a = r.length; s < a; s++) Nt(r[s], e, n, i) + } + function zt(t, e, n) { + const i = !0 === e.isScene ? e.overrideMaterial : null + for (let r = 0, s = t.length; r < s; r++) { + const s = t[r], + a = s.object, + o = s.geometry, + l = null === i ? s.material : i, + c = s.group + if (n.isArrayCamera) { + const t = n.cameras + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n] + a.layers.test(i.layers) && + ($.viewport(C.copy(i.viewport)), f.setupLightsView(i), Ot(a, e, i, o, l, c)) + } + } else Ot(a, e, n, o, l, c) + } + } + function Ot(t, e, n, i, r, a) { + if ( + (t.onBeforeRender(_, e, n, i, r, a), + t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse, t.matrixWorld), + t.normalMatrix.getNormalMatrix(t.modelViewMatrix), + t.isImmediateRenderObject) + ) { + const i = Ut(n, e, r, t) + $.setMaterial(r), + Mt.reset(), + (function (t, e) { + t.render(function (t) { + _.renderBufferImmediate(t, e) + }) + })(t, i) + } else + !0 === r.transparent && 2 === r.side + ? ((r.side = s), + (r.needsUpdate = !0), + _.renderBufferDirect(n, e, i, r, t, a), + (r.side = 0), + (r.needsUpdate = !0), + _.renderBufferDirect(n, e, i, r, t, a), + (r.side = 2)) + : _.renderBufferDirect(n, e, i, r, t, a) + t.onAfterRender(_, e, n, i, r, a) + } + function Bt(t, e, n) { + !0 !== e.isScene && (e = J) + const i = et.get(t), + r = f.state.lights, + s = f.state.shadowsArray, + a = r.state.version, + o = ht.getParameters(t, r.state, s, e, n), + l = ht.getProgramCacheKey(o) + let c = i.programs + ;(i.environment = t.isMeshStandardMaterial ? e.environment : null), + (i.fog = e.fog), + (i.envMap = it.get(t.envMap || i.environment)), + void 0 === c && (t.addEventListener('dispose', Rt), (c = new Map()), (i.programs = c)) + let h = c.get(l) + if (void 0 !== h) { + if (i.currentProgram === h && i.lightsStateVersion === a) return Ft(t, o), h + } else + (o.uniforms = ht.getUniforms(t)), + t.onBuild(o, _), + t.onBeforeCompile(o, _), + (h = ht.acquireProgram(o, l)), + c.set(l, h), + (i.uniforms = o.uniforms) + const u = i.uniforms + ;((t.isShaderMaterial || t.isRawShaderMaterial) && !0 !== t.clipping) || + (u.clippingPlanes = ft.uniform), + Ft(t, o), + (i.needsLights = (function (t) { + return ( + t.isMeshLambertMaterial || + t.isMeshToonMaterial || + t.isMeshPhongMaterial || + t.isMeshStandardMaterial || + t.isShadowMaterial || + (t.isShaderMaterial && !0 === t.lights) + ) + })(t)), + (i.lightsStateVersion = a), + i.needsLights && + ((u.ambientLightColor.value = r.state.ambient), + (u.lightProbe.value = r.state.probe), + (u.directionalLights.value = r.state.directional), + (u.directionalLightShadows.value = r.state.directionalShadow), + (u.spotLights.value = r.state.spot), + (u.spotLightShadows.value = r.state.spotShadow), + (u.rectAreaLights.value = r.state.rectArea), + (u.ltc_1.value = r.state.rectAreaLTC1), + (u.ltc_2.value = r.state.rectAreaLTC2), + (u.pointLights.value = r.state.point), + (u.pointLightShadows.value = r.state.pointShadow), + (u.hemisphereLights.value = r.state.hemi), + (u.directionalShadowMap.value = r.state.directionalShadowMap), + (u.directionalShadowMatrix.value = r.state.directionalShadowMatrix), + (u.spotShadowMap.value = r.state.spotShadowMap), + (u.spotShadowMatrix.value = r.state.spotShadowMatrix), + (u.pointShadowMap.value = r.state.pointShadowMap), + (u.pointShadowMatrix.value = r.state.pointShadowMatrix)) + const d = h.getUniforms(), + p = ir.seqWithValue(d.seq, u) + return (i.currentProgram = h), (i.uniformsList = p), h + } + function Ft(t, e) { + const n = et.get(t) + ;(n.outputEncoding = e.outputEncoding), + (n.instancing = e.instancing), + (n.skinning = e.skinning), + (n.numClippingPlanes = e.numClippingPlanes), + (n.numIntersection = e.numClipIntersection), + (n.vertexAlphas = e.vertexAlphas) + } + function Ut(t, e, n, i) { + !0 !== e.isScene && (e = J), nt.resetTextureUnits() + const r = e.fog, + s = n.isMeshStandardMaterial ? e.environment : null, + a = null === L ? _.outputEncoding : L.texture.encoding, + o = it.get(n.envMap || s), + l = + !0 === n.vertexColors && + i.geometry && + i.geometry.attributes.color && + 4 === i.geometry.attributes.color.itemSize, + c = et.get(n), + h = f.state.lights + if (!0 === W && (!0 === j || t !== R)) { + const e = t === R && n.id === A + ft.setState(n, t, e) + } + let u = !1 + n.version === c.__version + ? (c.needsLights && c.lightsStateVersion !== h.state.version) || + c.outputEncoding !== a || + (i.isInstancedMesh && !1 === c.instancing) + ? (u = !0) + : i.isInstancedMesh || !0 !== c.instancing + ? i.isSkinnedMesh && !1 === c.skinning + ? (u = !0) + : i.isSkinnedMesh || !0 !== c.skinning + ? c.envMap !== o || (n.fog && c.fog !== r) + ? (u = !0) + : void 0 === c.numClippingPlanes || + (c.numClippingPlanes === ft.numPlanes && + c.numIntersection === ft.numIntersection) + ? c.vertexAlphas !== l && (u = !0) + : (u = !0) + : (u = !0) + : (u = !0) + : ((u = !0), (c.__version = n.version)) + let d = c.currentProgram + !0 === u && (d = Bt(n, e, i)) + let p = !1, + m = !1, + g = !1 + const v = d.getUniforms(), + y = c.uniforms + if ( + ($.useProgram(d.program) && ((p = !0), (m = !0), (g = !0)), + n.id !== A && ((A = n.id), (m = !0)), + p || R !== t) + ) { + if ( + (v.setValue(wt, 'projectionMatrix', t.projectionMatrix), + K.logarithmicDepthBuffer && + v.setValue(wt, 'logDepthBufFC', 2 / (Math.log(t.far + 1) / Math.LN2)), + R !== t && ((R = t), (m = !0), (g = !0)), + n.isShaderMaterial || + n.isMeshPhongMaterial || + n.isMeshToonMaterial || + n.isMeshStandardMaterial || + n.envMap) + ) { + const e = v.map.cameraPosition + void 0 !== e && e.setValue(wt, Y.setFromMatrixPosition(t.matrixWorld)) + } + ;(n.isMeshPhongMaterial || + n.isMeshToonMaterial || + n.isMeshLambertMaterial || + n.isMeshBasicMaterial || + n.isMeshStandardMaterial || + n.isShaderMaterial) && + v.setValue(wt, 'isOrthographic', !0 === t.isOrthographicCamera), + (n.isMeshPhongMaterial || + n.isMeshToonMaterial || + n.isMeshLambertMaterial || + n.isMeshBasicMaterial || + n.isMeshStandardMaterial || + n.isShaderMaterial || + n.isShadowMaterial || + i.isSkinnedMesh) && + v.setValue(wt, 'viewMatrix', t.matrixWorldInverse) + } + if (i.isSkinnedMesh) { + v.setOptional(wt, i, 'bindMatrix'), v.setOptional(wt, i, 'bindMatrixInverse') + const t = i.skeleton + t && + (K.floatVertexTextures + ? (null === t.boneTexture && t.computeBoneTexture(), + v.setValue(wt, 'boneTexture', t.boneTexture, nt), + v.setValue(wt, 'boneTextureSize', t.boneTextureSize)) + : v.setOptional(wt, t, 'boneMatrices')) + } + var x, b + return ( + (m || c.receiveShadow !== i.receiveShadow) && + ((c.receiveShadow = i.receiveShadow), + v.setValue(wt, 'receiveShadow', i.receiveShadow)), + m && + (v.setValue(wt, 'toneMappingExposure', _.toneMappingExposure), + c.needsLights && + ((b = g), + ((x = y).ambientLightColor.needsUpdate = b), + (x.lightProbe.needsUpdate = b), + (x.directionalLights.needsUpdate = b), + (x.directionalLightShadows.needsUpdate = b), + (x.pointLights.needsUpdate = b), + (x.pointLightShadows.needsUpdate = b), + (x.spotLights.needsUpdate = b), + (x.spotLightShadows.needsUpdate = b), + (x.rectAreaLights.needsUpdate = b), + (x.hemisphereLights.needsUpdate = b)), + r && n.fog && dt.refreshFogUniforms(y, r), + dt.refreshMaterialUniforms(y, n, z, N, q), + ir.upload(wt, c.uniformsList, y, nt)), + n.isShaderMaterial && + !0 === n.uniformsNeedUpdate && + (ir.upload(wt, c.uniformsList, y, nt), (n.uniformsNeedUpdate = !1)), + n.isSpriteMaterial && v.setValue(wt, 'center', i.center), + v.setValue(wt, 'modelViewMatrix', i.modelViewMatrix), + v.setValue(wt, 'normalMatrix', i.normalMatrix), + v.setValue(wt, 'modelMatrix', i.matrixWorld), + d + ) + } + It.setAnimationLoop(function (t) { + Ct && Ct(t) + }), + 'undefined' !== typeof window && It.setContext(window), + (this.setAnimationLoop = function (t) { + ;(Ct = t), Et.setAnimationLoop(t), null === t ? It.stop() : It.start() + }), + Et.addEventListener('sessionstart', Pt), + Et.addEventListener('sessionend', Dt), + (this.render = function (t, e) { + if (void 0 !== e && !0 !== e.isCamera) + return void console.error( + 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.', + ) + if (!0 === b) return + !0 === t.autoUpdate && t.updateMatrixWorld(), + null === e.parent && e.updateMatrixWorld(), + !0 === Et.enabled && + !0 === Et.isPresenting && + (!0 === Et.cameraAutoUpdate && Et.updateCamera(e), (e = Et.getCamera())), + !0 === t.isScene && t.onBeforeRender(_, t, e, L), + (f = mt.get(t, v.length)), + f.init(), + v.push(f), + X.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), + k.setFromProjectionMatrix(X), + (j = this.localClippingEnabled), + (W = ft.init(this.clippingPlanes, j, e)), + (p = pt.get(t, g.length)), + p.init(), + g.push(p), + Nt(t, e, 0, _.sortObjects), + p.finish(), + !0 === _.sortObjects && p.sort(B, F), + !0 === W && ft.beginShadows() + const n = f.state.shadowsArray + gt.render(n, t, e), + f.setupLights(), + f.setupLightsView(e), + !0 === W && ft.endShadows(), + !0 === this.info.autoReset && this.info.reset(), + vt.render(p, t) + const i = p.opaque, + r = p.transmissive, + s = p.transparent + i.length > 0 && zt(i, t, e), + r.length > 0 && + (function (t, e, n, i) { + if (null === q) { + const t = !0 === o && !0 === K.isWebGL2 + q = new (t ? ct : lt)(1024, 1024, { + generateMipmaps: !0, + type: null !== bt.convert(w) ? w : x, + minFilter: y, + magFilter: m, + wrapS: d, + wrapT: d, + }) + } + const r = _.getRenderTarget() + _.setRenderTarget(q), _.clear() + const s = _.toneMapping + ;(_.toneMapping = 0), + zt(t, n, i), + (_.toneMapping = s), + nt.updateMultisampleRenderTarget(q), + nt.updateRenderTargetMipmap(q), + _.setRenderTarget(r), + zt(e, n, i) + })(i, r, t, e), + s.length > 0 && zt(s, t, e), + null !== L && (nt.updateMultisampleRenderTarget(L), nt.updateRenderTargetMipmap(L)), + !0 === t.isScene && t.onAfterRender(_, t, e), + $.buffers.depth.setTest(!0), + $.buffers.depth.setMask(!0), + $.buffers.color.setMask(!0), + $.setPolygonOffset(!1), + Mt.resetDefaultState(), + (A = -1), + (R = null), + v.pop(), + (f = v.length > 0 ? v[v.length - 1] : null), + g.pop(), + (p = g.length > 0 ? g[g.length - 1] : null) + }), + (this.getActiveCubeFace = function () { + return S + }), + (this.getActiveMipmapLevel = function () { + return T + }), + (this.getRenderTarget = function () { + return L + }), + (this.setRenderTarget = function (t, e = 0, n = 0) { + ;(L = t), + (S = e), + (T = n), + t && void 0 === et.get(t).__webglFramebuffer && nt.setupRenderTarget(t) + let i = null, + r = !1, + s = !1 + if (t) { + const n = t.texture + ;(n.isDataTexture3D || n.isDataTexture2DArray) && (s = !0) + const a = et.get(t).__webglFramebuffer + t.isWebGLCubeRenderTarget + ? ((i = a[e]), (r = !0)) + : (i = t.isWebGLMultisampleRenderTarget + ? et.get(t).__webglMultisampledFramebuffer + : a), + C.copy(t.viewport), + P.copy(t.scissor), + (D = t.scissorTest) + } else C.copy(U).multiplyScalar(z).floor(), P.copy(H).multiplyScalar(z).floor(), (D = G) + if ($.bindFramebuffer(36160, i) && K.drawBuffers) { + let e = !1 + if (t) + if (t.isWebGLMultipleRenderTargets) { + const n = t.texture + if (V.length !== n.length || 36064 !== V[0]) { + for (let t = 0, e = n.length; t < e; t++) V[t] = 36064 + t + ;(V.length = n.length), (e = !0) + } + } else + (1 === V.length && 36064 === V[0]) || ((V[0] = 36064), (V.length = 1), (e = !0)) + else (1 === V.length && 1029 === V[0]) || ((V[0] = 1029), (V.length = 1), (e = !0)) + e && + (K.isWebGL2 ? wt.drawBuffers(V) : Q.get('WEBGL_draw_buffers').drawBuffersWEBGL(V)) + } + if (($.viewport(C), $.scissor(P), $.setScissorTest(D), r)) { + const i = et.get(t.texture) + wt.framebufferTexture2D(36160, 36064, 34069 + e, i.__webglTexture, n) + } else if (s) { + const i = et.get(t.texture), + r = e || 0 + wt.framebufferTextureLayer(36160, 36064, i.__webglTexture, n || 0, r) + } + }), + (this.readRenderTargetPixels = function (t, e, n, i, r, s, a) { + if (!t || !t.isWebGLRenderTarget) + return void console.error( + 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.', + ) + let o = et.get(t).__webglFramebuffer + if ((t.isWebGLCubeRenderTarget && void 0 !== a && (o = o[a]), o)) { + $.bindFramebuffer(36160, o) + try { + const a = t.texture, + o = a.format, + l = a.type + if (o !== E && bt.convert(o) !== wt.getParameter(35739)) + return void console.error( + 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.', + ) + const c = + l === w && + (Q.has('EXT_color_buffer_half_float') || + (K.isWebGL2 && Q.has('EXT_color_buffer_float'))) + if ( + l !== x && + bt.convert(l) !== wt.getParameter(35738) && + (l !== M || + !( + K.isWebGL2 || + Q.has('OES_texture_float') || + Q.has('WEBGL_color_buffer_float') + )) && + !c + ) + return void console.error( + 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.', + ) + 36053 === wt.checkFramebufferStatus(36160) + ? e >= 0 && + e <= t.width - i && + n >= 0 && + n <= t.height - r && + wt.readPixels(e, n, i, r, bt.convert(o), bt.convert(l), s) + : console.error( + 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.', + ) + } finally { + const t = null !== L ? et.get(L).__webglFramebuffer : null + $.bindFramebuffer(36160, t) + } + } + }), + (this.copyFramebufferToTexture = function (t, e, n = 0) { + const i = Math.pow(2, -n), + r = Math.floor(e.image.width * i), + s = Math.floor(e.image.height * i) + let a = bt.convert(e.format) + K.isWebGL2 && (6407 === a && (a = 32849), 6408 === a && (a = 32856)), + nt.setTexture2D(e, 0), + wt.copyTexImage2D(3553, n, a, t.x, t.y, r, s, 0), + $.unbindTexture() + }), + (this.copyTextureToTexture = function (t, e, n, i = 0) { + const r = e.image.width, + s = e.image.height, + a = bt.convert(n.format), + o = bt.convert(n.type) + nt.setTexture2D(n, 0), + wt.pixelStorei(37440, n.flipY), + wt.pixelStorei(37441, n.premultiplyAlpha), + wt.pixelStorei(3317, n.unpackAlignment), + e.isDataTexture + ? wt.texSubImage2D(3553, i, t.x, t.y, r, s, a, o, e.image.data) + : e.isCompressedTexture + ? wt.compressedTexSubImage2D( + 3553, + i, + t.x, + t.y, + e.mipmaps[0].width, + e.mipmaps[0].height, + a, + e.mipmaps[0].data, + ) + : wt.texSubImage2D(3553, i, t.x, t.y, a, o, e.image), + 0 === i && n.generateMipmaps && wt.generateMipmap(3553), + $.unbindTexture() + }), + (this.copyTextureToTexture3D = function (t, e, n, i, r = 0) { + if (_.isWebGL1Renderer) + return void console.warn( + 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.', + ) + const s = t.max.x - t.min.x + 1, + a = t.max.y - t.min.y + 1, + o = t.max.z - t.min.z + 1, + l = bt.convert(i.format), + c = bt.convert(i.type) + let h + if (i.isDataTexture3D) nt.setTexture3D(i, 0), (h = 32879) + else { + if (!i.isDataTexture2DArray) + return void console.warn( + 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.', + ) + nt.setTexture2DArray(i, 0), (h = 35866) + } + wt.pixelStorei(37440, i.flipY), + wt.pixelStorei(37441, i.premultiplyAlpha), + wt.pixelStorei(3317, i.unpackAlignment) + const u = wt.getParameter(3314), + d = wt.getParameter(32878), + p = wt.getParameter(3316), + m = wt.getParameter(3315), + f = wt.getParameter(32877), + g = n.isCompressedTexture ? n.mipmaps[0] : n.image + wt.pixelStorei(3314, g.width), + wt.pixelStorei(32878, g.height), + wt.pixelStorei(3316, t.min.x), + wt.pixelStorei(3315, t.min.y), + wt.pixelStorei(32877, t.min.z), + n.isDataTexture || n.isDataTexture3D + ? wt.texSubImage3D(h, r, e.x, e.y, e.z, s, a, o, l, c, g.data) + : n.isCompressedTexture + ? (console.warn( + 'THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.', + ), + wt.compressedTexSubImage3D(h, r, e.x, e.y, e.z, s, a, o, l, g.data)) + : wt.texSubImage3D(h, r, e.x, e.y, e.z, s, a, o, l, c, g), + wt.pixelStorei(3314, u), + wt.pixelStorei(32878, d), + wt.pixelStorei(3316, p), + wt.pixelStorei(3315, m), + wt.pixelStorei(32877, f), + 0 === r && i.generateMipmaps && wt.generateMipmap(h), + $.unbindTexture() + }), + (this.initTexture = function (t) { + nt.setTexture2D(t, 0), $.unbindTexture() + }), + (this.resetState = function () { + ;(S = 0), (T = 0), (L = null), $.reset(), Mt.reset() + }), + 'undefined' !== typeof __THREE_DEVTOOLS__ && + __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('observe', { detail: this })) + } + ;(class extends Yr {}.prototype.isWebGL1Renderer = !0) + class Jr { + constructor(t, e = 25e-5) { + ;(this.name = ''), (this.color = new Ie(t)), (this.density = e) + } + clone() { + return new Jr(this.color, this.density) + } + toJSON() { + return { type: 'FogExp2', color: this.color.getHex(), density: this.density } + } + } + Jr.prototype.isFogExp2 = !0 + class Zr { + constructor(t, e = 1, n = 1e3) { + ;(this.name = ''), (this.color = new Ie(t)), (this.near = e), (this.far = n) + } + clone() { + return new Zr(this.color, this.near, this.far) + } + toJSON() { + return { type: 'Fog', color: this.color.getHex(), near: this.near, far: this.far } + } + } + Zr.prototype.isFog = !0 + class Qr extends pe { + constructor() { + super(), + (this.type = 'Scene'), + (this.background = null), + (this.environment = null), + (this.fog = null), + (this.overrideMaterial = null), + (this.autoUpdate = !0), + 'undefined' !== typeof __THREE_DEVTOOLS__ && + __THREE_DEVTOOLS__.dispatchEvent(new CustomEvent('observe', { detail: this })) + } + copy(t, e) { + return ( + super.copy(t, e), + null !== t.background && (this.background = t.background.clone()), + null !== t.environment && (this.environment = t.environment.clone()), + null !== t.fog && (this.fog = t.fog.clone()), + null !== t.overrideMaterial && (this.overrideMaterial = t.overrideMaterial.clone()), + (this.autoUpdate = t.autoUpdate), + (this.matrixAutoUpdate = t.matrixAutoUpdate), + this + ) + } + toJSON(t) { + const e = super.toJSON(t) + return null !== this.fog && (e.object.fog = this.fog.toJSON()), e + } + } + Qr.prototype.isScene = !0 + class Kr { + constructor(t, e) { + ;(this.array = t), + (this.stride = e), + (this.count = void 0 !== t ? t.length / e : 0), + (this.usage = G), + (this.updateRange = { offset: 0, count: -1 }), + (this.version = 0), + (this.uuid = Y()) + } + onUploadCallback() {} + set needsUpdate(t) { + !0 === t && this.version++ + } + setUsage(t) { + return (this.usage = t), this + } + copy(t) { + return ( + (this.array = new t.array.constructor(t.array)), + (this.count = t.count), + (this.stride = t.stride), + (this.usage = t.usage), + this + ) + } + copyAt(t, e, n) { + ;(t *= this.stride), (n *= e.stride) + for (let i = 0, r = this.stride; i < r; i++) this.array[t + i] = e.array[n + i] + return this + } + set(t, e = 0) { + return this.array.set(t, e), this + } + clone(t) { + void 0 === t.arrayBuffers && (t.arrayBuffers = {}), + void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = Y()), + void 0 === t.arrayBuffers[this.array.buffer._uuid] && + (t.arrayBuffers[this.array.buffer._uuid] = this.array.slice(0).buffer) + const e = new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]), + n = new this.constructor(e, this.stride) + return n.setUsage(this.usage), n + } + onUpload(t) { + return (this.onUploadCallback = t), this + } + toJSON(t) { + return ( + void 0 === t.arrayBuffers && (t.arrayBuffers = {}), + void 0 === this.array.buffer._uuid && (this.array.buffer._uuid = Y()), + void 0 === t.arrayBuffers[this.array.buffer._uuid] && + (t.arrayBuffers[this.array.buffer._uuid] = Array.prototype.slice.call( + new Uint32Array(this.array.buffer), + )), + { + uuid: this.uuid, + buffer: this.array.buffer._uuid, + type: this.array.constructor.name, + stride: this.stride, + } + ) + } + } + Kr.prototype.isInterleavedBuffer = !0 + const $r = new ut() + class ts { + constructor(t, e, n, i = !1) { + ;(this.name = ''), + (this.data = t), + (this.itemSize = e), + (this.offset = n), + (this.normalized = !0 === i) + } + get count() { + return this.data.count + } + get array() { + return this.data.array + } + set needsUpdate(t) { + this.data.needsUpdate = t + } + applyMatrix4(t) { + for (let e = 0, n = this.data.count; e < n; e++) + ($r.x = this.getX(e)), + ($r.y = this.getY(e)), + ($r.z = this.getZ(e)), + $r.applyMatrix4(t), + this.setXYZ(e, $r.x, $r.y, $r.z) + return this + } + applyNormalMatrix(t) { + for (let e = 0, n = this.count; e < n; e++) + ($r.x = this.getX(e)), + ($r.y = this.getY(e)), + ($r.z = this.getZ(e)), + $r.applyNormalMatrix(t), + this.setXYZ(e, $r.x, $r.y, $r.z) + return this + } + transformDirection(t) { + for (let e = 0, n = this.count; e < n; e++) + ($r.x = this.getX(e)), + ($r.y = this.getY(e)), + ($r.z = this.getZ(e)), + $r.transformDirection(t), + this.setXYZ(e, $r.x, $r.y, $r.z) + return this + } + setX(t, e) { + return (this.data.array[t * this.data.stride + this.offset] = e), this + } + setY(t, e) { + return (this.data.array[t * this.data.stride + this.offset + 1] = e), this + } + setZ(t, e) { + return (this.data.array[t * this.data.stride + this.offset + 2] = e), this + } + setW(t, e) { + return (this.data.array[t * this.data.stride + this.offset + 3] = e), this + } + getX(t) { + return this.data.array[t * this.data.stride + this.offset] + } + getY(t) { + return this.data.array[t * this.data.stride + this.offset + 1] + } + getZ(t) { + return this.data.array[t * this.data.stride + this.offset + 2] + } + getW(t) { + return this.data.array[t * this.data.stride + this.offset + 3] + } + setXY(t, e, n) { + return ( + (t = t * this.data.stride + this.offset), + (this.data.array[t + 0] = e), + (this.data.array[t + 1] = n), + this + ) + } + setXYZ(t, e, n, i) { + return ( + (t = t * this.data.stride + this.offset), + (this.data.array[t + 0] = e), + (this.data.array[t + 1] = n), + (this.data.array[t + 2] = i), + this + ) + } + setXYZW(t, e, n, i, r) { + return ( + (t = t * this.data.stride + this.offset), + (this.data.array[t + 0] = e), + (this.data.array[t + 1] = n), + (this.data.array[t + 2] = i), + (this.data.array[t + 3] = r), + this + ) + } + clone(t) { + if (void 0 === t) { + console.log( + 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.', + ) + const t = [] + for (let e = 0; e < this.count; e++) { + const n = e * this.data.stride + this.offset + for (let e = 0; e < this.itemSize; e++) t.push(this.data.array[n + e]) + } + return new Be(new this.array.constructor(t), this.itemSize, this.normalized) + } + return ( + void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), + void 0 === t.interleavedBuffers[this.data.uuid] && + (t.interleavedBuffers[this.data.uuid] = this.data.clone(t)), + new ts( + t.interleavedBuffers[this.data.uuid], + this.itemSize, + this.offset, + this.normalized, + ) + ) + } + toJSON(t) { + if (void 0 === t) { + console.log( + 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.', + ) + const t = [] + for (let e = 0; e < this.count; e++) { + const n = e * this.data.stride + this.offset + for (let e = 0; e < this.itemSize; e++) t.push(this.data.array[n + e]) + } + return { + itemSize: this.itemSize, + type: this.array.constructor.name, + array: t, + normalized: this.normalized, + } + } + return ( + void 0 === t.interleavedBuffers && (t.interleavedBuffers = {}), + void 0 === t.interleavedBuffers[this.data.uuid] && + (t.interleavedBuffers[this.data.uuid] = this.data.toJSON(t)), + { + isInterleavedBufferAttribute: !0, + itemSize: this.itemSize, + data: this.data.uuid, + offset: this.offset, + normalized: this.normalized, + } + ) + } + } + ts.prototype.isInterleavedBufferAttribute = !0 + class es extends Ee { + constructor(t) { + super(), + (this.type = 'SpriteMaterial'), + (this.color = new Ie(16777215)), + (this.map = null), + (this.alphaMap = null), + (this.rotation = 0), + (this.sizeAttenuation = !0), + (this.transparent = !0), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.map = t.map), + (this.alphaMap = t.alphaMap), + (this.rotation = t.rotation), + (this.sizeAttenuation = t.sizeAttenuation), + this + ) + } + } + let ns + es.prototype.isSpriteMaterial = !0 + const is = new ut(), + rs = new ut(), + ss = new ut(), + as = new tt(), + os = new tt(), + ls = new Vt(), + cs = new ut(), + hs = new ut(), + us = new ut(), + ds = new tt(), + ps = new tt(), + ms = new tt() + class fs extends pe { + constructor(t) { + if ((super(), (this.type = 'Sprite'), void 0 === ns)) { + ns = new Je() + const t = new Float32Array([ + -0.5, -0.5, 0, 0, 0, 0.5, -0.5, 0, 1, 0, 0.5, 0.5, 0, 1, 1, -0.5, 0.5, 0, 0, 1, + ]), + e = new Kr(t, 5) + ns.setIndex([0, 1, 2, 0, 2, 3]), + ns.setAttribute('position', new ts(e, 3, 0, !1)), + ns.setAttribute('uv', new ts(e, 2, 3, !1)) + } + ;(this.geometry = ns), + (this.material = void 0 !== t ? t : new es()), + (this.center = new tt(0.5, 0.5)) + } + raycast(t, e) { + null === t.camera && + console.error( + 'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.', + ), + rs.setFromMatrixScale(this.matrixWorld), + ls.copy(t.camera.matrixWorld), + this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse, this.matrixWorld), + ss.setFromMatrixPosition(this.modelViewMatrix), + t.camera.isPerspectiveCamera && + !1 === this.material.sizeAttenuation && + rs.multiplyScalar(-ss.z) + const n = this.material.rotation + let i, r + 0 !== n && ((r = Math.cos(n)), (i = Math.sin(n))) + const s = this.center + gs(cs.set(-0.5, -0.5, 0), ss, s, rs, i, r), + gs(hs.set(0.5, -0.5, 0), ss, s, rs, i, r), + gs(us.set(0.5, 0.5, 0), ss, s, rs, i, r), + ds.set(0, 0), + ps.set(1, 0), + ms.set(1, 1) + let a = t.ray.intersectTriangle(cs, hs, us, !1, is) + if ( + null === a && + (gs(hs.set(-0.5, 0.5, 0), ss, s, rs, i, r), + ps.set(0, 1), + (a = t.ray.intersectTriangle(cs, us, hs, !1, is)), + null === a) + ) + return + const o = t.ray.origin.distanceTo(is) + o < t.near || + o > t.far || + e.push({ + distance: o, + point: is.clone(), + uv: Se.getUV(is, cs, hs, us, ds, ps, ms, new tt()), + face: null, + object: this, + }) + } + copy(t) { + return ( + super.copy(t), + void 0 !== t.center && this.center.copy(t.center), + (this.material = t.material), + this + ) + } + } + function gs(t, e, n, i, r, s) { + as.subVectors(t, n).addScalar(0.5).multiply(i), + void 0 !== r ? ((os.x = s * as.x - r * as.y), (os.y = r * as.x + s * as.y)) : os.copy(as), + t.copy(e), + (t.x += os.x), + (t.y += os.y), + t.applyMatrix4(ls) + } + fs.prototype.isSprite = !0 + const vs = new ut(), + ys = new ot(), + xs = new ot(), + _s = new ut(), + bs = new Vt() + class Ms extends mn { + constructor(t, e) { + super(t, e), + (this.type = 'SkinnedMesh'), + (this.bindMode = 'attached'), + (this.bindMatrix = new Vt()), + (this.bindMatrixInverse = new Vt()) + } + copy(t) { + return ( + super.copy(t), + (this.bindMode = t.bindMode), + this.bindMatrix.copy(t.bindMatrix), + this.bindMatrixInverse.copy(t.bindMatrixInverse), + (this.skeleton = t.skeleton), + this + ) + } + bind(t, e) { + ;(this.skeleton = t), + void 0 === e && + (this.updateMatrixWorld(!0), + this.skeleton.calculateInverses(), + (e = this.matrixWorld)), + this.bindMatrix.copy(e), + this.bindMatrixInverse.copy(e).invert() + } + pose() { + this.skeleton.pose() + } + normalizeSkinWeights() { + const t = new ot(), + e = this.geometry.attributes.skinWeight + for (let n = 0, i = e.count; n < i; n++) { + ;(t.x = e.getX(n)), (t.y = e.getY(n)), (t.z = e.getZ(n)), (t.w = e.getW(n)) + const i = 1 / t.manhattanLength() + i !== 1 / 0 ? t.multiplyScalar(i) : t.set(1, 0, 0, 0), e.setXYZW(n, t.x, t.y, t.z, t.w) + } + } + updateMatrixWorld(t) { + super.updateMatrixWorld(t), + 'attached' === this.bindMode + ? this.bindMatrixInverse.copy(this.matrixWorld).invert() + : 'detached' === this.bindMode + ? this.bindMatrixInverse.copy(this.bindMatrix).invert() + : console.warn('THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode) + } + boneTransform(t, e) { + const n = this.skeleton, + i = this.geometry + ys.fromBufferAttribute(i.attributes.skinIndex, t), + xs.fromBufferAttribute(i.attributes.skinWeight, t), + vs.fromBufferAttribute(i.attributes.position, t).applyMatrix4(this.bindMatrix), + e.set(0, 0, 0) + for (let r = 0; r < 4; r++) { + const t = xs.getComponent(r) + if (0 !== t) { + const i = ys.getComponent(r) + bs.multiplyMatrices(n.bones[i].matrixWorld, n.boneInverses[i]), + e.addScaledVector(_s.copy(vs).applyMatrix4(bs), t) + } + } + return e.applyMatrix4(this.bindMatrixInverse) + } + } + Ms.prototype.isSkinnedMesh = !0 + class ws extends pe { + constructor() { + super(), (this.type = 'Bone') + } + } + ws.prototype.isBone = !0 + class Ss extends st { + constructor(t = null, e = 1, n = 1, i, r, s, a, o, l = 1003, c = 1003, h, u) { + super(null, s, a, o, l, c, i, r, h, u), + (this.image = { data: t, width: e, height: n }), + (this.magFilter = l), + (this.minFilter = c), + (this.generateMipmaps = !1), + (this.flipY = !1), + (this.unpackAlignment = 1), + (this.needsUpdate = !0) + } + } + Ss.prototype.isDataTexture = !0 + const Ts = new Vt(), + Es = new Vt(), + Ls = [], + As = new mn() + class Rs extends mn { + constructor(t, e, n) { + super(t, e), + (this.instanceMatrix = new Be(new Float32Array(16 * n), 16)), + (this.instanceColor = null), + (this.count = n), + (this.frustumCulled = !1) + } + copy(t) { + return ( + super.copy(t), + this.instanceMatrix.copy(t.instanceMatrix), + null !== t.instanceColor && (this.instanceColor = t.instanceColor.clone()), + (this.count = t.count), + this + ) + } + getColorAt(t, e) { + e.fromArray(this.instanceColor.array, 3 * t) + } + getMatrixAt(t, e) { + e.fromArray(this.instanceMatrix.array, 16 * t) + } + raycast(t, e) { + const n = this.matrixWorld, + i = this.count + if ( + ((As.geometry = this.geometry), (As.material = this.material), void 0 !== As.material) + ) + for (let r = 0; r < i; r++) { + this.getMatrixAt(r, Ts), + Es.multiplyMatrices(n, Ts), + (As.matrixWorld = Es), + As.raycast(t, Ls) + for (let t = 0, n = Ls.length; t < n; t++) { + const n = Ls[t] + ;(n.instanceId = r), (n.object = this), e.push(n) + } + Ls.length = 0 + } + } + setColorAt(t, e) { + null === this.instanceColor && + (this.instanceColor = new Be(new Float32Array(3 * this.count), 3)), + e.toArray(this.instanceColor.array, 3 * t) + } + setMatrixAt(t, e) { + e.toArray(this.instanceMatrix.array, 16 * t) + } + updateMorphTargets() {} + dispose() { + this.dispatchEvent({ type: 'dispose' }) + } + } + Rs.prototype.isInstancedMesh = !0 + class Cs extends Ee { + constructor(t) { + super(), + (this.type = 'LineBasicMaterial'), + (this.color = new Ie(16777215)), + (this.linewidth = 1), + (this.linecap = 'round'), + (this.linejoin = 'round'), + (this.morphTargets = !1), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.linewidth = t.linewidth), + (this.linecap = t.linecap), + (this.linejoin = t.linejoin), + (this.morphTargets = t.morphTargets), + this + ) + } + } + Cs.prototype.isLineBasicMaterial = !0 + const Ps = new ut(), + Ds = new ut(), + Is = new Vt(), + Ns = new Gt(), + zs = new It() + class Os extends pe { + constructor(t = new Je(), e = new Cs()) { + super(), + (this.type = 'Line'), + (this.geometry = t), + (this.material = e), + this.updateMorphTargets() + } + copy(t) { + return super.copy(t), (this.material = t.material), (this.geometry = t.geometry), this + } + computeLineDistances() { + const t = this.geometry + if (t.isBufferGeometry) + if (null === t.index) { + const e = t.attributes.position, + n = [0] + for (let t = 1, i = e.count; t < i; t++) + Ps.fromBufferAttribute(e, t - 1), + Ds.fromBufferAttribute(e, t), + (n[t] = n[t - 1]), + (n[t] += Ps.distanceTo(Ds)) + t.setAttribute('lineDistance', new He(n, 1)) + } else + console.warn( + 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.', + ) + else + t.isGeometry && + console.error( + 'THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.', + ) + return this + } + raycast(t, e) { + const n = this.geometry, + i = this.matrixWorld, + r = t.params.Line.threshold, + s = n.drawRange + if ( + (null === n.boundingSphere && n.computeBoundingSphere(), + zs.copy(n.boundingSphere), + zs.applyMatrix4(i), + (zs.radius += r), + !1 === t.ray.intersectsSphere(zs)) + ) + return + Is.copy(i).invert(), Ns.copy(t.ray).applyMatrix4(Is) + const a = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), + o = a * a, + l = new ut(), + c = new ut(), + h = new ut(), + u = new ut(), + d = this.isLineSegments ? 2 : 1 + if (n.isBufferGeometry) { + const i = n.index, + r = n.attributes.position + if (null !== i) { + for ( + let n = Math.max(0, s.start), a = Math.min(i.count, s.start + s.count) - 1; + n < a; + n += d + ) { + const s = i.getX(n), + a = i.getX(n + 1) + l.fromBufferAttribute(r, s), c.fromBufferAttribute(r, a) + if (Ns.distanceSqToSegment(l, c, u, h) > o) continue + u.applyMatrix4(this.matrixWorld) + const d = t.ray.origin.distanceTo(u) + d < t.near || + d > t.far || + e.push({ + distance: d, + point: h.clone().applyMatrix4(this.matrixWorld), + index: n, + face: null, + faceIndex: null, + object: this, + }) + } + } else { + for ( + let n = Math.max(0, s.start), i = Math.min(r.count, s.start + s.count) - 1; + n < i; + n += d + ) { + l.fromBufferAttribute(r, n), c.fromBufferAttribute(r, n + 1) + if (Ns.distanceSqToSegment(l, c, u, h) > o) continue + u.applyMatrix4(this.matrixWorld) + const i = t.ray.origin.distanceTo(u) + i < t.near || + i > t.far || + e.push({ + distance: i, + point: h.clone().applyMatrix4(this.matrixWorld), + index: n, + face: null, + faceIndex: null, + object: this, + }) + } + } + } else + n.isGeometry && + console.error( + 'THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.', + ) + } + updateMorphTargets() { + const t = this.geometry + if (t.isBufferGeometry) { + const e = t.morphAttributes, + n = Object.keys(e) + if (n.length > 0) { + const t = e[n[0]] + if (void 0 !== t) { + ;(this.morphTargetInfluences = []), (this.morphTargetDictionary = {}) + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e].name || String(e) + this.morphTargetInfluences.push(0), (this.morphTargetDictionary[n] = e) + } + } + } + } else { + const e = t.morphTargets + void 0 !== e && + e.length > 0 && + console.error( + 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.', + ) + } + } + } + Os.prototype.isLine = !0 + const Bs = new ut(), + Fs = new ut() + class Us extends Os { + constructor(t, e) { + super(t, e), (this.type = 'LineSegments') + } + computeLineDistances() { + const t = this.geometry + if (t.isBufferGeometry) + if (null === t.index) { + const e = t.attributes.position, + n = [] + for (let t = 0, i = e.count; t < i; t += 2) + Bs.fromBufferAttribute(e, t), + Fs.fromBufferAttribute(e, t + 1), + (n[t] = 0 === t ? 0 : n[t - 1]), + (n[t + 1] = n[t] + Bs.distanceTo(Fs)) + t.setAttribute('lineDistance', new He(n, 1)) + } else + console.warn( + 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.', + ) + else + t.isGeometry && + console.error( + 'THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.', + ) + return this + } + } + Us.prototype.isLineSegments = !0 + class Hs extends Os { + constructor(t, e) { + super(t, e), (this.type = 'LineLoop') + } + } + Hs.prototype.isLineLoop = !0 + class Gs extends Ee { + constructor(t) { + super(), + (this.type = 'PointsMaterial'), + (this.color = new Ie(16777215)), + (this.map = null), + (this.alphaMap = null), + (this.size = 1), + (this.sizeAttenuation = !0), + (this.morphTargets = !1), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.map = t.map), + (this.alphaMap = t.alphaMap), + (this.size = t.size), + (this.sizeAttenuation = t.sizeAttenuation), + (this.morphTargets = t.morphTargets), + this + ) + } + } + Gs.prototype.isPointsMaterial = !0 + const Vs = new Vt(), + ks = new Gt(), + Ws = new It(), + js = new ut() + class qs extends pe { + constructor(t = new Je(), e = new Gs()) { + super(), + (this.type = 'Points'), + (this.geometry = t), + (this.material = e), + this.updateMorphTargets() + } + copy(t) { + return super.copy(t), (this.material = t.material), (this.geometry = t.geometry), this + } + raycast(t, e) { + const n = this.geometry, + i = this.matrixWorld, + r = t.params.Points.threshold, + s = n.drawRange + if ( + (null === n.boundingSphere && n.computeBoundingSphere(), + Ws.copy(n.boundingSphere), + Ws.applyMatrix4(i), + (Ws.radius += r), + !1 === t.ray.intersectsSphere(Ws)) + ) + return + Vs.copy(i).invert(), ks.copy(t.ray).applyMatrix4(Vs) + const a = r / ((this.scale.x + this.scale.y + this.scale.z) / 3), + o = a * a + if (n.isBufferGeometry) { + const r = n.index, + a = n.attributes.position + if (null !== r) { + for ( + let n = Math.max(0, s.start), l = Math.min(r.count, s.start + s.count); + n < l; + n++ + ) { + const s = r.getX(n) + js.fromBufferAttribute(a, s), Xs(js, s, o, i, t, e, this) + } + } else { + for ( + let n = Math.max(0, s.start), r = Math.min(a.count, s.start + s.count); + n < r; + n++ + ) + js.fromBufferAttribute(a, n), Xs(js, n, o, i, t, e, this) + } + } else + console.error( + 'THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.', + ) + } + updateMorphTargets() { + const t = this.geometry + if (t.isBufferGeometry) { + const e = t.morphAttributes, + n = Object.keys(e) + if (n.length > 0) { + const t = e[n[0]] + if (void 0 !== t) { + ;(this.morphTargetInfluences = []), (this.morphTargetDictionary = {}) + for (let e = 0, n = t.length; e < n; e++) { + const n = t[e].name || String(e) + this.morphTargetInfluences.push(0), (this.morphTargetDictionary[n] = e) + } + } + } + } else { + const e = t.morphTargets + void 0 !== e && + e.length > 0 && + console.error( + 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.', + ) + } + } + } + function Xs(t, e, n, i, r, s, a) { + const o = ks.distanceSqToPoint(t) + if (o < n) { + const n = new ut() + ks.closestPointToPoint(t, n), n.applyMatrix4(i) + const l = r.ray.origin.distanceTo(n) + if (l < r.near || l > r.far) return + s.push({ + distance: l, + distanceToRay: Math.sqrt(o), + point: n, + index: e, + face: null, + object: a, + }) + } + } + qs.prototype.isPoints = !0 + ;(class extends st { + constructor(t, e, n, i, r, s, a, o, l) { + super(t, e, n, i, r, s, a, o, l), + (this.format = void 0 !== a ? a : T), + (this.minFilter = void 0 !== s ? s : v), + (this.magFilter = void 0 !== r ? r : v), + (this.generateMipmaps = !1) + const c = this + 'requestVideoFrameCallback' in t && + t.requestVideoFrameCallback(function e() { + ;(c.needsUpdate = !0), t.requestVideoFrameCallback(e) + }) + } + clone() { + return new this.constructor(this.image).copy(this) + } + update() { + const t = this.image + !1 === 'requestVideoFrameCallback' in t && + t.readyState >= t.HAVE_CURRENT_DATA && + (this.needsUpdate = !0) + } + }.prototype.isVideoTexture = !0) + class Ys extends st { + constructor(t, e, n, i, r, s, a, o, l, c, h, u) { + super(null, s, a, o, l, c, i, r, h, u), + (this.image = { width: e, height: n }), + (this.mipmaps = t), + (this.flipY = !1), + (this.generateMipmaps = !1) + } + } + Ys.prototype.isCompressedTexture = !0 + ;(class extends st { + constructor(t, e, n, i, r, s, a, o, l) { + super(t, e, n, i, r, s, a, o, l), (this.needsUpdate = !0) + } + }.prototype.isCanvasTexture = !0) + ;(class extends st { + constructor(t, e, n, i, r, s, a, o, l, c) { + if ((c = void 0 !== c ? c : L) !== L && c !== A) + throw new Error( + 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat', + ) + void 0 === n && c === L && (n = _), + void 0 === n && c === A && (n = S), + super(null, i, r, s, a, o, c, n, l), + (this.image = { width: t, height: e }), + (this.magFilter = void 0 !== a ? a : m), + (this.minFilter = void 0 !== o ? o : m), + (this.flipY = !1), + (this.generateMipmaps = !1) + } + }.prototype.isDepthTexture = !0) + class Js extends Je { + constructor(t = 1, e = 1, n = 1, i = 8, r = 1, s = !1, a = 0, o = 2 * Math.PI) { + super(), + (this.type = 'CylinderGeometry'), + (this.parameters = { + radiusTop: t, + radiusBottom: e, + height: n, + radialSegments: i, + heightSegments: r, + openEnded: s, + thetaStart: a, + thetaLength: o, + }) + const l = this + ;(i = Math.floor(i)), (r = Math.floor(r)) + const c = [], + h = [], + u = [], + d = [] + let p = 0 + const m = [], + f = n / 2 + let g = 0 + function v(n) { + const r = p, + s = new tt(), + m = new ut() + let v = 0 + const y = !0 === n ? t : e, + x = !0 === n ? 1 : -1 + for (let t = 1; t <= i; t++) h.push(0, f * x, 0), u.push(0, x, 0), d.push(0.5, 0.5), p++ + const _ = p + for (let t = 0; t <= i; t++) { + const e = (t / i) * o + a, + n = Math.cos(e), + r = Math.sin(e) + ;(m.x = y * r), + (m.y = f * x), + (m.z = y * n), + h.push(m.x, m.y, m.z), + u.push(0, x, 0), + (s.x = 0.5 * n + 0.5), + (s.y = 0.5 * r * x + 0.5), + d.push(s.x, s.y), + p++ + } + for (let t = 0; t < i; t++) { + const e = r + t, + i = _ + t + !0 === n ? c.push(i, i + 1, e) : c.push(i + 1, i, e), (v += 3) + } + l.addGroup(g, v, !0 === n ? 1 : 2), (g += v) + } + !(function () { + const s = new ut(), + v = new ut() + let y = 0 + const x = (e - t) / n + for (let l = 0; l <= r; l++) { + const c = [], + g = l / r, + y = g * (e - t) + t + for (let t = 0; t <= i; t++) { + const e = t / i, + r = e * o + a, + l = Math.sin(r), + m = Math.cos(r) + ;(v.x = y * l), + (v.y = -g * n + f), + (v.z = y * m), + h.push(v.x, v.y, v.z), + s.set(l, x, m).normalize(), + u.push(s.x, s.y, s.z), + d.push(e, 1 - g), + c.push(p++) + } + m.push(c) + } + for (let t = 0; t < i; t++) + for (let e = 0; e < r; e++) { + const n = m[e][t], + i = m[e + 1][t], + r = m[e + 1][t + 1], + s = m[e][t + 1] + c.push(n, i, s), c.push(i, r, s), (y += 6) + } + l.addGroup(g, y, 0), (g += y) + })(), + !1 === s && (t > 0 && v(!0), e > 0 && v(!1)), + this.setIndex(c), + this.setAttribute('position', new He(h, 3)), + this.setAttribute('normal', new He(u, 3)), + this.setAttribute('uv', new He(d, 2)) + } + static fromJSON(t) { + return new Js( + t.radiusTop, + t.radiusBottom, + t.height, + t.radialSegments, + t.heightSegments, + t.openEnded, + t.thetaStart, + t.thetaLength, + ) + } + } + class Zs extends Js { + constructor(t = 1, e = 1, n = 8, i = 1, r = !1, s = 0, a = 2 * Math.PI) { + super(0, t, e, n, i, r, s, a), + (this.type = 'ConeGeometry'), + (this.parameters = { + radius: t, + height: e, + radialSegments: n, + heightSegments: i, + openEnded: r, + thetaStart: s, + thetaLength: a, + }) + } + static fromJSON(t) { + return new Zs( + t.radius, + t.height, + t.radialSegments, + t.heightSegments, + t.openEnded, + t.thetaStart, + t.thetaLength, + ) + } + } + new ut(), new ut(), new ut(), new Se() + class Qs { + constructor() { + ;(this.type = 'Curve'), (this.arcLengthDivisions = 200) + } + getPoint() { + return console.warn('THREE.Curve: .getPoint() not implemented.'), null + } + getPointAt(t, e) { + const n = this.getUtoTmapping(t) + return this.getPoint(n, e) + } + getPoints(t = 5) { + const e = [] + for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t)) + return e + } + getSpacedPoints(t = 5) { + const e = [] + for (let n = 0; n <= t; n++) e.push(this.getPointAt(n / t)) + return e + } + getLength() { + const t = this.getLengths() + return t[t.length - 1] + } + getLengths(t = this.arcLengthDivisions) { + if (this.cacheArcLengths && this.cacheArcLengths.length === t + 1 && !this.needsUpdate) + return this.cacheArcLengths + this.needsUpdate = !1 + const e = [] + let n, + i = this.getPoint(0), + r = 0 + e.push(0) + for (let s = 1; s <= t; s++) + (n = this.getPoint(s / t)), (r += n.distanceTo(i)), e.push(r), (i = n) + return (this.cacheArcLengths = e), e + } + updateArcLengths() { + ;(this.needsUpdate = !0), this.getLengths() + } + getUtoTmapping(t, e) { + const n = this.getLengths() + let i = 0 + const r = n.length + let s + s = e || t * n[r - 1] + let a, + o = 0, + l = r - 1 + for (; o <= l; ) + if (((i = Math.floor(o + (l - o) / 2)), (a = n[i] - s), a < 0)) o = i + 1 + else { + if (!(a > 0)) { + l = i + break + } + l = i - 1 + } + if (((i = l), n[i] === s)) return i / (r - 1) + const c = n[i] + return (i + (s - c) / (n[i + 1] - c)) / (r - 1) + } + getTangent(t, e) { + const n = 1e-4 + let i = t - n, + r = t + n + i < 0 && (i = 0), r > 1 && (r = 1) + const s = this.getPoint(i), + a = this.getPoint(r), + o = e || (s.isVector2 ? new tt() : new ut()) + return o.copy(a).sub(s).normalize(), o + } + getTangentAt(t, e) { + const n = this.getUtoTmapping(t) + return this.getTangent(n, e) + } + computeFrenetFrames(t, e) { + const n = new ut(), + i = [], + r = [], + s = [], + a = new ut(), + o = new Vt() + for (let d = 0; d <= t; d++) { + const e = d / t + ;(i[d] = this.getTangentAt(e, new ut())), i[d].normalize() + } + ;(r[0] = new ut()), (s[0] = new ut()) + let l = Number.MAX_VALUE + const c = Math.abs(i[0].x), + h = Math.abs(i[0].y), + u = Math.abs(i[0].z) + c <= l && ((l = c), n.set(1, 0, 0)), + h <= l && ((l = h), n.set(0, 1, 0)), + u <= l && n.set(0, 0, 1), + a.crossVectors(i[0], n).normalize(), + r[0].crossVectors(i[0], a), + s[0].crossVectors(i[0], r[0]) + for (let d = 1; d <= t; d++) { + if ( + ((r[d] = r[d - 1].clone()), + (s[d] = s[d - 1].clone()), + a.crossVectors(i[d - 1], i[d]), + a.length() > Number.EPSILON) + ) { + a.normalize() + const t = Math.acos(J(i[d - 1].dot(i[d]), -1, 1)) + r[d].applyMatrix4(o.makeRotationAxis(a, t)) + } + s[d].crossVectors(i[d], r[d]) + } + if (!0 === e) { + let e = Math.acos(J(r[0].dot(r[t]), -1, 1)) + ;(e /= t), i[0].dot(a.crossVectors(r[0], r[t])) > 0 && (e = -e) + for (let n = 1; n <= t; n++) + r[n].applyMatrix4(o.makeRotationAxis(i[n], e * n)), s[n].crossVectors(i[n], r[n]) + } + return { tangents: i, normals: r, binormals: s } + } + clone() { + return new this.constructor().copy(this) + } + copy(t) { + return (this.arcLengthDivisions = t.arcLengthDivisions), this + } + toJSON() { + const t = { metadata: { version: 4.5, type: 'Curve', generator: 'Curve.toJSON' } } + return (t.arcLengthDivisions = this.arcLengthDivisions), (t.type = this.type), t + } + fromJSON(t) { + return (this.arcLengthDivisions = t.arcLengthDivisions), this + } + } + class Ks extends Qs { + constructor(t = 0, e = 0, n = 1, i = 1, r = 0, s = 2 * Math.PI, a = !1, o = 0) { + super(), + (this.type = 'EllipseCurve'), + (this.aX = t), + (this.aY = e), + (this.xRadius = n), + (this.yRadius = i), + (this.aStartAngle = r), + (this.aEndAngle = s), + (this.aClockwise = a), + (this.aRotation = o) + } + getPoint(t, e) { + const n = e || new tt(), + i = 2 * Math.PI + let r = this.aEndAngle - this.aStartAngle + const s = Math.abs(r) < Number.EPSILON + for (; r < 0; ) r += i + for (; r > i; ) r -= i + r < Number.EPSILON && (r = s ? 0 : i), + !0 !== this.aClockwise || s || (r === i ? (r = -i) : (r -= i)) + const a = this.aStartAngle + t * r + let o = this.aX + this.xRadius * Math.cos(a), + l = this.aY + this.yRadius * Math.sin(a) + if (0 !== this.aRotation) { + const t = Math.cos(this.aRotation), + e = Math.sin(this.aRotation), + n = o - this.aX, + i = l - this.aY + ;(o = n * t - i * e + this.aX), (l = n * e + i * t + this.aY) + } + return n.set(o, l) + } + copy(t) { + return ( + super.copy(t), + (this.aX = t.aX), + (this.aY = t.aY), + (this.xRadius = t.xRadius), + (this.yRadius = t.yRadius), + (this.aStartAngle = t.aStartAngle), + (this.aEndAngle = t.aEndAngle), + (this.aClockwise = t.aClockwise), + (this.aRotation = t.aRotation), + this + ) + } + toJSON() { + const t = super.toJSON() + return ( + (t.aX = this.aX), + (t.aY = this.aY), + (t.xRadius = this.xRadius), + (t.yRadius = this.yRadius), + (t.aStartAngle = this.aStartAngle), + (t.aEndAngle = this.aEndAngle), + (t.aClockwise = this.aClockwise), + (t.aRotation = this.aRotation), + t + ) + } + fromJSON(t) { + return ( + super.fromJSON(t), + (this.aX = t.aX), + (this.aY = t.aY), + (this.xRadius = t.xRadius), + (this.yRadius = t.yRadius), + (this.aStartAngle = t.aStartAngle), + (this.aEndAngle = t.aEndAngle), + (this.aClockwise = t.aClockwise), + (this.aRotation = t.aRotation), + this + ) + } + } + Ks.prototype.isEllipseCurve = !0 + class $s extends Ks { + constructor(t, e, n, i, r, s) { + super(t, e, n, n, i, r, s), (this.type = 'ArcCurve') + } + } + function ta() { + let t = 0, + e = 0, + n = 0, + i = 0 + function r(r, s, a, o) { + ;(t = r), (e = a), (n = -3 * r + 3 * s - 2 * a - o), (i = 2 * r - 2 * s + a + o) + } + return { + initCatmullRom: function (t, e, n, i, s) { + r(e, n, s * (n - t), s * (i - e)) + }, + initNonuniformCatmullRom: function (t, e, n, i, s, a, o) { + let l = (e - t) / s - (n - t) / (s + a) + (n - e) / a, + c = (n - e) / a - (i - e) / (a + o) + (i - n) / o + ;(l *= a), (c *= a), r(e, n, l, c) + }, + calc: function (r) { + const s = r * r + return t + e * r + n * s + i * (s * r) + }, + } + } + $s.prototype.isArcCurve = !0 + const ea = new ut(), + na = new ta(), + ia = new ta(), + ra = new ta() + class sa extends Qs { + constructor(t = [], e = !1, n = 'centripetal', i = 0.5) { + super(), + (this.type = 'CatmullRomCurve3'), + (this.points = t), + (this.closed = e), + (this.curveType = n), + (this.tension = i) + } + getPoint(t, e = new ut()) { + const n = e, + i = this.points, + r = i.length, + s = (r - (this.closed ? 0 : 1)) * t + let a, + o, + l = Math.floor(s), + c = s - l + this.closed + ? (l += l > 0 ? 0 : (Math.floor(Math.abs(l) / r) + 1) * r) + : 0 === c && l === r - 1 && ((l = r - 2), (c = 1)), + this.closed || l > 0 + ? (a = i[(l - 1) % r]) + : (ea.subVectors(i[0], i[1]).add(i[0]), (a = ea)) + const h = i[l % r], + u = i[(l + 1) % r] + if ( + (this.closed || l + 2 < r + ? (o = i[(l + 2) % r]) + : (ea.subVectors(i[r - 1], i[r - 2]).add(i[r - 1]), (o = ea)), + 'centripetal' === this.curveType || 'chordal' === this.curveType) + ) { + const t = 'chordal' === this.curveType ? 0.5 : 0.25 + let e = Math.pow(a.distanceToSquared(h), t), + n = Math.pow(h.distanceToSquared(u), t), + i = Math.pow(u.distanceToSquared(o), t) + n < 1e-4 && (n = 1), + e < 1e-4 && (e = n), + i < 1e-4 && (i = n), + na.initNonuniformCatmullRom(a.x, h.x, u.x, o.x, e, n, i), + ia.initNonuniformCatmullRom(a.y, h.y, u.y, o.y, e, n, i), + ra.initNonuniformCatmullRom(a.z, h.z, u.z, o.z, e, n, i) + } else + 'catmullrom' === this.curveType && + (na.initCatmullRom(a.x, h.x, u.x, o.x, this.tension), + ia.initCatmullRom(a.y, h.y, u.y, o.y, this.tension), + ra.initCatmullRom(a.z, h.z, u.z, o.z, this.tension)) + return n.set(na.calc(c), ia.calc(c), ra.calc(c)), n + } + copy(t) { + super.copy(t), (this.points = []) + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e] + this.points.push(n.clone()) + } + return ( + (this.closed = t.closed), + (this.curveType = t.curveType), + (this.tension = t.tension), + this + ) + } + toJSON() { + const t = super.toJSON() + t.points = [] + for (let e = 0, n = this.points.length; e < n; e++) { + const n = this.points[e] + t.points.push(n.toArray()) + } + return ( + (t.closed = this.closed), (t.curveType = this.curveType), (t.tension = this.tension), t + ) + } + fromJSON(t) { + super.fromJSON(t), (this.points = []) + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e] + this.points.push(new ut().fromArray(n)) + } + return ( + (this.closed = t.closed), + (this.curveType = t.curveType), + (this.tension = t.tension), + this + ) + } + } + function aa(t, e, n, i, r) { + const s = 0.5 * (i - e), + a = 0.5 * (r - n), + o = t * t + return (2 * n - 2 * i + s + a) * (t * o) + (-3 * n + 3 * i - 2 * s - a) * o + s * t + n + } + function oa(t, e, n, i) { + return ( + (function (t, e) { + const n = 1 - t + return n * n * e + })(t, e) + + (function (t, e) { + return 2 * (1 - t) * t * e + })(t, n) + + (function (t, e) { + return t * t * e + })(t, i) + ) + } + function la(t, e, n, i, r) { + return ( + (function (t, e) { + const n = 1 - t + return n * n * n * e + })(t, e) + + (function (t, e) { + const n = 1 - t + return 3 * n * n * t * e + })(t, n) + + (function (t, e) { + return 3 * (1 - t) * t * t * e + })(t, i) + + (function (t, e) { + return t * t * t * e + })(t, r) + ) + } + sa.prototype.isCatmullRomCurve3 = !0 + class ca extends Qs { + constructor(t = new tt(), e = new tt(), n = new tt(), i = new tt()) { + super(), + (this.type = 'CubicBezierCurve'), + (this.v0 = t), + (this.v1 = e), + (this.v2 = n), + (this.v3 = i) + } + getPoint(t, e = new tt()) { + const n = e, + i = this.v0, + r = this.v1, + s = this.v2, + a = this.v3 + return n.set(la(t, i.x, r.x, s.x, a.x), la(t, i.y, r.y, s.y, a.y)), n + } + copy(t) { + return ( + super.copy(t), + this.v0.copy(t.v0), + this.v1.copy(t.v1), + this.v2.copy(t.v2), + this.v3.copy(t.v3), + this + ) + } + toJSON() { + const t = super.toJSON() + return ( + (t.v0 = this.v0.toArray()), + (t.v1 = this.v1.toArray()), + (t.v2 = this.v2.toArray()), + (t.v3 = this.v3.toArray()), + t + ) + } + fromJSON(t) { + return ( + super.fromJSON(t), + this.v0.fromArray(t.v0), + this.v1.fromArray(t.v1), + this.v2.fromArray(t.v2), + this.v3.fromArray(t.v3), + this + ) + } + } + ca.prototype.isCubicBezierCurve = !0 + class ha extends Qs { + constructor(t = new ut(), e = new ut(), n = new ut(), i = new ut()) { + super(), + (this.type = 'CubicBezierCurve3'), + (this.v0 = t), + (this.v1 = e), + (this.v2 = n), + (this.v3 = i) + } + getPoint(t, e = new ut()) { + const n = e, + i = this.v0, + r = this.v1, + s = this.v2, + a = this.v3 + return ( + n.set(la(t, i.x, r.x, s.x, a.x), la(t, i.y, r.y, s.y, a.y), la(t, i.z, r.z, s.z, a.z)), + n + ) + } + copy(t) { + return ( + super.copy(t), + this.v0.copy(t.v0), + this.v1.copy(t.v1), + this.v2.copy(t.v2), + this.v3.copy(t.v3), + this + ) + } + toJSON() { + const t = super.toJSON() + return ( + (t.v0 = this.v0.toArray()), + (t.v1 = this.v1.toArray()), + (t.v2 = this.v2.toArray()), + (t.v3 = this.v3.toArray()), + t + ) + } + fromJSON(t) { + return ( + super.fromJSON(t), + this.v0.fromArray(t.v0), + this.v1.fromArray(t.v1), + this.v2.fromArray(t.v2), + this.v3.fromArray(t.v3), + this + ) + } + } + ha.prototype.isCubicBezierCurve3 = !0 + class ua extends Qs { + constructor(t = new tt(), e = new tt()) { + super(), (this.type = 'LineCurve'), (this.v1 = t), (this.v2 = e) + } + getPoint(t, e = new tt()) { + const n = e + return ( + 1 === t + ? n.copy(this.v2) + : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), + n + ) + } + getPointAt(t, e) { + return this.getPoint(t, e) + } + getTangent(t, e) { + const n = e || new tt() + return n.copy(this.v2).sub(this.v1).normalize(), n + } + copy(t) { + return super.copy(t), this.v1.copy(t.v1), this.v2.copy(t.v2), this + } + toJSON() { + const t = super.toJSON() + return (t.v1 = this.v1.toArray()), (t.v2 = this.v2.toArray()), t + } + fromJSON(t) { + return super.fromJSON(t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + } + } + ua.prototype.isLineCurve = !0 + class da extends Qs { + constructor(t = new tt(), e = new tt(), n = new tt()) { + super(), (this.type = 'QuadraticBezierCurve'), (this.v0 = t), (this.v1 = e), (this.v2 = n) + } + getPoint(t, e = new tt()) { + const n = e, + i = this.v0, + r = this.v1, + s = this.v2 + return n.set(oa(t, i.x, r.x, s.x), oa(t, i.y, r.y, s.y)), n + } + copy(t) { + return super.copy(t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this + } + toJSON() { + const t = super.toJSON() + return ( + (t.v0 = this.v0.toArray()), (t.v1 = this.v1.toArray()), (t.v2 = this.v2.toArray()), t + ) + } + fromJSON(t) { + return ( + super.fromJSON(t), + this.v0.fromArray(t.v0), + this.v1.fromArray(t.v1), + this.v2.fromArray(t.v2), + this + ) + } + } + da.prototype.isQuadraticBezierCurve = !0 + class pa extends Qs { + constructor(t = new ut(), e = new ut(), n = new ut()) { + super(), + (this.type = 'QuadraticBezierCurve3'), + (this.v0 = t), + (this.v1 = e), + (this.v2 = n) + } + getPoint(t, e = new ut()) { + const n = e, + i = this.v0, + r = this.v1, + s = this.v2 + return n.set(oa(t, i.x, r.x, s.x), oa(t, i.y, r.y, s.y), oa(t, i.z, r.z, s.z)), n + } + copy(t) { + return super.copy(t), this.v0.copy(t.v0), this.v1.copy(t.v1), this.v2.copy(t.v2), this + } + toJSON() { + const t = super.toJSON() + return ( + (t.v0 = this.v0.toArray()), (t.v1 = this.v1.toArray()), (t.v2 = this.v2.toArray()), t + ) + } + fromJSON(t) { + return ( + super.fromJSON(t), + this.v0.fromArray(t.v0), + this.v1.fromArray(t.v1), + this.v2.fromArray(t.v2), + this + ) + } + } + pa.prototype.isQuadraticBezierCurve3 = !0 + class ma extends Qs { + constructor(t = []) { + super(), (this.type = 'SplineCurve'), (this.points = t) + } + getPoint(t, e = new tt()) { + const n = e, + i = this.points, + r = (i.length - 1) * t, + s = Math.floor(r), + a = r - s, + o = i[0 === s ? s : s - 1], + l = i[s], + c = i[s > i.length - 2 ? i.length - 1 : s + 1], + h = i[s > i.length - 3 ? i.length - 1 : s + 2] + return n.set(aa(a, o.x, l.x, c.x, h.x), aa(a, o.y, l.y, c.y, h.y)), n + } + copy(t) { + super.copy(t), (this.points = []) + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e] + this.points.push(n.clone()) + } + return this + } + toJSON() { + const t = super.toJSON() + t.points = [] + for (let e = 0, n = this.points.length; e < n; e++) { + const n = this.points[e] + t.points.push(n.toArray()) + } + return t + } + fromJSON(t) { + super.fromJSON(t), (this.points = []) + for (let e = 0, n = t.points.length; e < n; e++) { + const n = t.points[e] + this.points.push(new tt().fromArray(n)) + } + return this + } + } + ma.prototype.isSplineCurve = !0 + var fa = Object.freeze({ + __proto__: null, + ArcCurve: $s, + CatmullRomCurve3: sa, + CubicBezierCurve: ca, + CubicBezierCurve3: ha, + EllipseCurve: Ks, + LineCurve: ua, + LineCurve3: class extends Qs { + constructor(t = new ut(), e = new ut()) { + super(), + (this.type = 'LineCurve3'), + (this.isLineCurve3 = !0), + (this.v1 = t), + (this.v2 = e) + } + getPoint(t, e = new ut()) { + const n = e + return ( + 1 === t + ? n.copy(this.v2) + : (n.copy(this.v2).sub(this.v1), n.multiplyScalar(t).add(this.v1)), + n + ) + } + getPointAt(t, e) { + return this.getPoint(t, e) + } + copy(t) { + return super.copy(t), this.v1.copy(t.v1), this.v2.copy(t.v2), this + } + toJSON() { + const t = super.toJSON() + return (t.v1 = this.v1.toArray()), (t.v2 = this.v2.toArray()), t + } + fromJSON(t) { + return super.fromJSON(t), this.v1.fromArray(t.v1), this.v2.fromArray(t.v2), this + } + }, + QuadraticBezierCurve: da, + QuadraticBezierCurve3: pa, + SplineCurve: ma, + }) + const ga = function (t, e, n = 2) { + const i = e && e.length, + r = i ? e[0] * n : t.length + let s = va(t, 0, r, n, !0) + const a = [] + if (!s || s.next === s.prev) return a + let o, l, c, h, u, d, p + if ( + (i && + (s = (function (t, e, n, i) { + const r = [] + let s, a, o, l, c + for (s = 0, a = e.length; s < a; s++) + (o = e[s] * i), + (l = s < a - 1 ? e[s + 1] * i : t.length), + (c = va(t, o, l, i, !1)), + c === c.next && (c.steiner = !0), + r.push(Aa(c)) + for (r.sort(Sa), s = 0; s < r.length; s++) Ta(r[s], n), (n = ya(n, n.next)) + return n + })(t, e, s, n)), + t.length > 80 * n) + ) { + ;(o = c = t[0]), (l = h = t[1]) + for (let e = n; e < r; e += n) + (u = t[e]), + (d = t[e + 1]), + u < o && (o = u), + d < l && (l = d), + u > c && (c = u), + d > h && (h = d) + ;(p = Math.max(c - o, h - l)), (p = 0 !== p ? 1 / p : 0) + } + return xa(s, a, n, o, l, p), a + } + function va(t, e, n, i, r) { + let s, a + if ( + r === + (function (t, e, n, i) { + let r = 0 + for (let s = e, a = n - i; s < n; s += i) + (r += (t[a] - t[s]) * (t[s + 1] + t[a + 1])), (a = s) + return r + })(t, e, n, i) > + 0 + ) + for (s = e; s < n; s += i) a = Fa(s, t[s], t[s + 1], a) + else for (s = n - i; s >= e; s -= i) a = Fa(s, t[s], t[s + 1], a) + return a && Da(a, a.next) && (Ua(a), (a = a.next)), a + } + function ya(t, e) { + if (!t) return t + e || (e = t) + let n, + i = t + do { + if (((n = !1), i.steiner || (!Da(i, i.next) && 0 !== Pa(i.prev, i, i.next)))) i = i.next + else { + if ((Ua(i), (i = e = i.prev), i === i.next)) break + n = !0 + } + } while (n || i !== e) + return e + } + function xa(t, e, n, i, r, s, a) { + if (!t) return + !a && + s && + (function (t, e, n, i) { + let r = t + do { + null === r.z && (r.z = La(r.x, r.y, e, n, i)), + (r.prevZ = r.prev), + (r.nextZ = r.next), + (r = r.next) + } while (r !== t) + ;(r.prevZ.nextZ = null), + (r.prevZ = null), + (function (t) { + let e, + n, + i, + r, + s, + a, + o, + l, + c = 1 + do { + for (n = t, t = null, s = null, a = 0; n; ) { + for (a++, i = n, o = 0, e = 0; e < c && (o++, (i = i.nextZ), i); e++); + for (l = c; o > 0 || (l > 0 && i); ) + 0 !== o && (0 === l || !i || n.z <= i.z) + ? ((r = n), (n = n.nextZ), o--) + : ((r = i), (i = i.nextZ), l--), + s ? (s.nextZ = r) : (t = r), + (r.prevZ = s), + (s = r) + n = i + } + ;(s.nextZ = null), (c *= 2) + } while (a > 1) + })(r) + })(t, i, r, s) + let o, + l, + c = t + for (; t.prev !== t.next; ) + if (((o = t.prev), (l = t.next), s ? ba(t, i, r, s) : _a(t))) + e.push(o.i / n), e.push(t.i / n), e.push(l.i / n), Ua(t), (t = l.next), (c = l.next) + else if ((t = l) === c) { + a + ? 1 === a + ? xa((t = Ma(ya(t), e, n)), e, n, i, r, s, 2) + : 2 === a && wa(t, e, n, i, r, s) + : xa(ya(t), e, n, i, r, s, 1) + break + } + } + function _a(t) { + const e = t.prev, + n = t, + i = t.next + if (Pa(e, n, i) >= 0) return !1 + let r = t.next.next + for (; r !== t.prev; ) { + if (Ra(e.x, e.y, n.x, n.y, i.x, i.y, r.x, r.y) && Pa(r.prev, r, r.next) >= 0) return !1 + r = r.next + } + return !0 + } + function ba(t, e, n, i) { + const r = t.prev, + s = t, + a = t.next + if (Pa(r, s, a) >= 0) return !1 + const o = r.x < s.x ? (r.x < a.x ? r.x : a.x) : s.x < a.x ? s.x : a.x, + l = r.y < s.y ? (r.y < a.y ? r.y : a.y) : s.y < a.y ? s.y : a.y, + c = r.x > s.x ? (r.x > a.x ? r.x : a.x) : s.x > a.x ? s.x : a.x, + h = r.y > s.y ? (r.y > a.y ? r.y : a.y) : s.y > a.y ? s.y : a.y, + u = La(o, l, e, n, i), + d = La(c, h, e, n, i) + let p = t.prevZ, + m = t.nextZ + for (; p && p.z >= u && m && m.z <= d; ) { + if ( + p !== t.prev && + p !== t.next && + Ra(r.x, r.y, s.x, s.y, a.x, a.y, p.x, p.y) && + Pa(p.prev, p, p.next) >= 0 + ) + return !1 + if ( + ((p = p.prevZ), + m !== t.prev && + m !== t.next && + Ra(r.x, r.y, s.x, s.y, a.x, a.y, m.x, m.y) && + Pa(m.prev, m, m.next) >= 0) + ) + return !1 + m = m.nextZ + } + for (; p && p.z >= u; ) { + if ( + p !== t.prev && + p !== t.next && + Ra(r.x, r.y, s.x, s.y, a.x, a.y, p.x, p.y) && + Pa(p.prev, p, p.next) >= 0 + ) + return !1 + p = p.prevZ + } + for (; m && m.z <= d; ) { + if ( + m !== t.prev && + m !== t.next && + Ra(r.x, r.y, s.x, s.y, a.x, a.y, m.x, m.y) && + Pa(m.prev, m, m.next) >= 0 + ) + return !1 + m = m.nextZ + } + return !0 + } + function Ma(t, e, n) { + let i = t + do { + const r = i.prev, + s = i.next.next + !Da(r, s) && + Ia(r, i, i.next, s) && + Oa(r, s) && + Oa(s, r) && + (e.push(r.i / n), e.push(i.i / n), e.push(s.i / n), Ua(i), Ua(i.next), (i = t = s)), + (i = i.next) + } while (i !== t) + return ya(i) + } + function wa(t, e, n, i, r, s) { + let a = t + do { + let t = a.next.next + for (; t !== a.prev; ) { + if (a.i !== t.i && Ca(a, t)) { + let o = Ba(a, t) + return ( + (a = ya(a, a.next)), + (o = ya(o, o.next)), + xa(a, e, n, i, r, s), + void xa(o, e, n, i, r, s) + ) + } + t = t.next + } + a = a.next + } while (a !== t) + } + function Sa(t, e) { + return t.x - e.x + } + function Ta(t, e) { + if ( + (e = (function (t, e) { + let n = e + const i = t.x, + r = t.y + let s, + a = -1 / 0 + do { + if (r <= n.y && r >= n.next.y && n.next.y !== n.y) { + const t = n.x + ((r - n.y) * (n.next.x - n.x)) / (n.next.y - n.y) + if (t <= i && t > a) { + if (((a = t), t === i)) { + if (r === n.y) return n + if (r === n.next.y) return n.next + } + s = n.x < n.next.x ? n : n.next + } + } + n = n.next + } while (n !== e) + if (!s) return null + if (i === a) return s + const o = s, + l = s.x, + c = s.y + let h, + u = 1 / 0 + n = s + do { + i >= n.x && + n.x >= l && + i !== n.x && + Ra(r < c ? i : a, r, l, c, r < c ? a : i, r, n.x, n.y) && + ((h = Math.abs(r - n.y) / (i - n.x)), + Oa(n, t) && + (h < u || (h === u && (n.x > s.x || (n.x === s.x && Ea(s, n))))) && + ((s = n), (u = h))), + (n = n.next) + } while (n !== o) + return s + })(t, e)) + ) { + const n = Ba(e, t) + ya(e, e.next), ya(n, n.next) + } + } + function Ea(t, e) { + return Pa(t.prev, t, e.prev) < 0 && Pa(e.next, t, t.next) < 0 + } + function La(t, e, n, i, r) { + return ( + (t = + 1431655765 & + ((t = + 858993459 & + ((t = + 252645135 & ((t = 16711935 & ((t = 32767 * (t - n) * r) | (t << 8))) | (t << 4))) | + (t << 2))) | + (t << 1))) | + ((e = + 1431655765 & + ((e = + 858993459 & + ((e = + 252645135 & ((e = 16711935 & ((e = 32767 * (e - i) * r) | (e << 8))) | (e << 4))) | + (e << 2))) | + (e << 1))) << + 1) + ) + } + function Aa(t) { + let e = t, + n = t + do { + ;(e.x < n.x || (e.x === n.x && e.y < n.y)) && (n = e), (e = e.next) + } while (e !== t) + return n + } + function Ra(t, e, n, i, r, s, a, o) { + return ( + (r - a) * (e - o) - (t - a) * (s - o) >= 0 && + (t - a) * (i - o) - (n - a) * (e - o) >= 0 && + (n - a) * (s - o) - (r - a) * (i - o) >= 0 + ) + } + function Ca(t, e) { + return ( + t.next.i !== e.i && + t.prev.i !== e.i && + !(function (t, e) { + let n = t + do { + if ( + n.i !== t.i && + n.next.i !== t.i && + n.i !== e.i && + n.next.i !== e.i && + Ia(n, n.next, t, e) + ) + return !0 + n = n.next + } while (n !== t) + return !1 + })(t, e) && + ((Oa(t, e) && + Oa(e, t) && + (function (t, e) { + let n = t, + i = !1 + const r = (t.x + e.x) / 2, + s = (t.y + e.y) / 2 + do { + n.y > s !== n.next.y > s && + n.next.y !== n.y && + r < ((n.next.x - n.x) * (s - n.y)) / (n.next.y - n.y) + n.x && + (i = !i), + (n = n.next) + } while (n !== t) + return i + })(t, e) && + (Pa(t.prev, t, e.prev) || Pa(t, e.prev, e))) || + (Da(t, e) && Pa(t.prev, t, t.next) > 0 && Pa(e.prev, e, e.next) > 0)) + ) + } + function Pa(t, e, n) { + return (e.y - t.y) * (n.x - e.x) - (e.x - t.x) * (n.y - e.y) + } + function Da(t, e) { + return t.x === e.x && t.y === e.y + } + function Ia(t, e, n, i) { + const r = za(Pa(t, e, n)), + s = za(Pa(t, e, i)), + a = za(Pa(n, i, t)), + o = za(Pa(n, i, e)) + return ( + (r !== s && a !== o) || + !(0 !== r || !Na(t, n, e)) || + !(0 !== s || !Na(t, i, e)) || + !(0 !== a || !Na(n, t, i)) || + !(0 !== o || !Na(n, e, i)) + ) + } + function Na(t, e, n) { + return ( + e.x <= Math.max(t.x, n.x) && + e.x >= Math.min(t.x, n.x) && + e.y <= Math.max(t.y, n.y) && + e.y >= Math.min(t.y, n.y) + ) + } + function za(t) { + return t > 0 ? 1 : t < 0 ? -1 : 0 + } + function Oa(t, e) { + return Pa(t.prev, t, t.next) < 0 + ? Pa(t, e, t.next) >= 0 && Pa(t, t.prev, e) >= 0 + : Pa(t, e, t.prev) < 0 || Pa(t, t.next, e) < 0 + } + function Ba(t, e) { + const n = new Ha(t.i, t.x, t.y), + i = new Ha(e.i, e.x, e.y), + r = t.next, + s = e.prev + return ( + (t.next = e), + (e.prev = t), + (n.next = r), + (r.prev = n), + (i.next = n), + (n.prev = i), + (s.next = i), + (i.prev = s), + i + ) + } + function Fa(t, e, n, i) { + const r = new Ha(t, e, n) + return ( + i + ? ((r.next = i.next), (r.prev = i), (i.next.prev = r), (i.next = r)) + : ((r.prev = r), (r.next = r)), + r + ) + } + function Ua(t) { + ;(t.next.prev = t.prev), + (t.prev.next = t.next), + t.prevZ && (t.prevZ.nextZ = t.nextZ), + t.nextZ && (t.nextZ.prevZ = t.prevZ) + } + function Ha(t, e, n) { + ;(this.i = t), + (this.x = e), + (this.y = n), + (this.prev = null), + (this.next = null), + (this.z = null), + (this.prevZ = null), + (this.nextZ = null), + (this.steiner = !1) + } + class Ga { + static area(t) { + const e = t.length + let n = 0 + for (let i = e - 1, r = 0; r < e; i = r++) n += t[i].x * t[r].y - t[r].x * t[i].y + return 0.5 * n + } + static isClockWise(t) { + return Ga.area(t) < 0 + } + static triangulateShape(t, e) { + const n = [], + i = [], + r = [] + Va(t), ka(n, t) + let s = t.length + e.forEach(Va) + for (let o = 0; o < e.length; o++) i.push(s), (s += e[o].length), ka(n, e[o]) + const a = ga(n, i) + for (let o = 0; o < a.length; o += 3) r.push(a.slice(o, o + 3)) + return r + } + } + function Va(t) { + const e = t.length + e > 2 && t[e - 1].equals(t[0]) && t.pop() + } + function ka(t, e) { + for (let n = 0; n < e.length; n++) t.push(e[n].x), t.push(e[n].y) + } + class Wa extends Je { + constructor(t, e) { + super(), + (this.type = 'ExtrudeGeometry'), + (this.parameters = { shapes: t, options: e }), + (t = Array.isArray(t) ? t : [t]) + const n = this, + i = [], + r = [] + for (let a = 0, o = t.length; a < o; a++) { + s(t[a]) + } + function s(t) { + const s = [], + a = void 0 !== e.curveSegments ? e.curveSegments : 12, + o = void 0 !== e.steps ? e.steps : 1 + let l = void 0 !== e.depth ? e.depth : 100, + c = void 0 === e.bevelEnabled || e.bevelEnabled, + h = void 0 !== e.bevelThickness ? e.bevelThickness : 6, + u = void 0 !== e.bevelSize ? e.bevelSize : h - 2, + d = void 0 !== e.bevelOffset ? e.bevelOffset : 0, + p = void 0 !== e.bevelSegments ? e.bevelSegments : 3 + const m = e.extrudePath, + f = void 0 !== e.UVGenerator ? e.UVGenerator : ja + void 0 !== e.amount && + (console.warn('THREE.ExtrudeBufferGeometry: amount has been renamed to depth.'), + (l = e.amount)) + let g, + v, + y, + x, + _, + b = !1 + m && + ((g = m.getSpacedPoints(o)), + (b = !0), + (c = !1), + (v = m.computeFrenetFrames(o, !1)), + (y = new ut()), + (x = new ut()), + (_ = new ut())), + c || ((p = 0), (h = 0), (u = 0), (d = 0)) + const M = t.extractPoints(a) + let w = M.shape + const S = M.holes + if (!Ga.isClockWise(w)) { + w = w.reverse() + for (let t = 0, e = S.length; t < e; t++) { + const e = S[t] + Ga.isClockWise(e) && (S[t] = e.reverse()) + } + } + const T = Ga.triangulateShape(w, S), + E = w + for (let e = 0, n = S.length; e < n; e++) { + const t = S[e] + w = w.concat(t) + } + function L(t, e, n) { + return ( + e || console.error('THREE.ExtrudeGeometry: vec does not exist'), + e.clone().multiplyScalar(n).add(t) + ) + } + const A = w.length, + R = T.length + function C(t, e, n) { + let i, r, s + const a = t.x - e.x, + o = t.y - e.y, + l = n.x - t.x, + c = n.y - t.y, + h = a * a + o * o, + u = a * c - o * l + if (Math.abs(u) > Number.EPSILON) { + const u = Math.sqrt(h), + d = Math.sqrt(l * l + c * c), + p = e.x - o / u, + m = e.y + a / u, + f = ((n.x - c / d - p) * c - (n.y + l / d - m) * l) / (a * c - o * l) + ;(i = p + a * f - t.x), (r = m + o * f - t.y) + const g = i * i + r * r + if (g <= 2) return new tt(i, r) + s = Math.sqrt(g / 2) + } else { + let t = !1 + a > Number.EPSILON + ? l > Number.EPSILON && (t = !0) + : a < -Number.EPSILON + ? l < -Number.EPSILON && (t = !0) + : Math.sign(o) === Math.sign(c) && (t = !0), + t + ? ((i = -o), (r = a), (s = Math.sqrt(h))) + : ((i = a), (r = o), (s = Math.sqrt(h / 2))) + } + return new tt(i / s, r / s) + } + const P = [] + for (let e = 0, n = E.length, i = n - 1, r = e + 1; e < n; e++, i++, r++) + i === n && (i = 0), r === n && (r = 0), (P[e] = C(E[e], E[i], E[r])) + const D = [] + let I, + N = P.concat() + for (let e = 0, n = S.length; e < n; e++) { + const t = S[e] + I = [] + for (let e = 0, n = t.length, i = n - 1, r = e + 1; e < n; e++, i++, r++) + i === n && (i = 0), r === n && (r = 0), (I[e] = C(t[e], t[i], t[r])) + D.push(I), (N = N.concat(I)) + } + for (let e = 0; e < p; e++) { + const t = e / p, + n = h * Math.cos((t * Math.PI) / 2), + i = u * Math.sin((t * Math.PI) / 2) + d + for (let e = 0, r = E.length; e < r; e++) { + const t = L(E[e], P[e], i) + B(t.x, t.y, -n) + } + for (let e = 0, r = S.length; e < r; e++) { + const t = S[e] + I = D[e] + for (let e = 0, r = t.length; e < r; e++) { + const r = L(t[e], I[e], i) + B(r.x, r.y, -n) + } + } + } + const z = u + d + for (let e = 0; e < A; e++) { + const t = c ? L(w[e], N[e], z) : w[e] + b + ? (x.copy(v.normals[0]).multiplyScalar(t.x), + y.copy(v.binormals[0]).multiplyScalar(t.y), + _.copy(g[0]).add(x).add(y), + B(_.x, _.y, _.z)) + : B(t.x, t.y, 0) + } + for (let e = 1; e <= o; e++) + for (let t = 0; t < A; t++) { + const n = c ? L(w[t], N[t], z) : w[t] + b + ? (x.copy(v.normals[e]).multiplyScalar(n.x), + y.copy(v.binormals[e]).multiplyScalar(n.y), + _.copy(g[e]).add(x).add(y), + B(_.x, _.y, _.z)) + : B(n.x, n.y, (l / o) * e) + } + for (let e = p - 1; e >= 0; e--) { + const t = e / p, + n = h * Math.cos((t * Math.PI) / 2), + i = u * Math.sin((t * Math.PI) / 2) + d + for (let e = 0, r = E.length; e < r; e++) { + const t = L(E[e], P[e], i) + B(t.x, t.y, l + n) + } + for (let e = 0, r = S.length; e < r; e++) { + const t = S[e] + I = D[e] + for (let e = 0, r = t.length; e < r; e++) { + const r = L(t[e], I[e], i) + b ? B(r.x, r.y + g[o - 1].y, g[o - 1].x + n) : B(r.x, r.y, l + n) + } + } + } + function O(t, e) { + let n = t.length + for (; --n >= 0; ) { + const i = n + let r = n - 1 + r < 0 && (r = t.length - 1) + for (let t = 0, n = o + 2 * p; t < n; t++) { + const n = A * t, + s = A * (t + 1) + U(e + i + n, e + r + n, e + r + s, e + i + s) + } + } + } + function B(t, e, n) { + s.push(t), s.push(e), s.push(n) + } + function F(t, e, r) { + H(t), H(e), H(r) + const s = i.length / 3, + a = f.generateTopUV(n, i, s - 3, s - 2, s - 1) + G(a[0]), G(a[1]), G(a[2]) + } + function U(t, e, r, s) { + H(t), H(e), H(s), H(e), H(r), H(s) + const a = i.length / 3, + o = f.generateSideWallUV(n, i, a - 6, a - 3, a - 2, a - 1) + G(o[0]), G(o[1]), G(o[3]), G(o[1]), G(o[2]), G(o[3]) + } + function H(t) { + i.push(s[3 * t + 0]), i.push(s[3 * t + 1]), i.push(s[3 * t + 2]) + } + function G(t) { + r.push(t.x), r.push(t.y) + } + !(function () { + const t = i.length / 3 + if (c) { + let t = 0, + e = A * t + for (let n = 0; n < R; n++) { + const t = T[n] + F(t[2] + e, t[1] + e, t[0] + e) + } + ;(t = o + 2 * p), (e = A * t) + for (let n = 0; n < R; n++) { + const t = T[n] + F(t[0] + e, t[1] + e, t[2] + e) + } + } else { + for (let t = 0; t < R; t++) { + const e = T[t] + F(e[2], e[1], e[0]) + } + for (let t = 0; t < R; t++) { + const e = T[t] + F(e[0] + A * o, e[1] + A * o, e[2] + A * o) + } + } + n.addGroup(t, i.length / 3 - t, 0) + })(), + (function () { + const t = i.length / 3 + let e = 0 + O(E, e), (e += E.length) + for (let n = 0, i = S.length; n < i; n++) { + const t = S[n] + O(t, e), (e += t.length) + } + n.addGroup(t, i.length / 3 - t, 1) + })() + } + this.setAttribute('position', new He(i, 3)), + this.setAttribute('uv', new He(r, 2)), + this.computeVertexNormals() + } + toJSON() { + const t = super.toJSON() + return (function (t, e, n) { + if (((n.shapes = []), Array.isArray(t))) + for (let i = 0, r = t.length; i < r; i++) { + const e = t[i] + n.shapes.push(e.uuid) + } + else n.shapes.push(t.uuid) + void 0 !== e.extrudePath && (n.options.extrudePath = e.extrudePath.toJSON()) + return n + })(this.parameters.shapes, this.parameters.options, t) + } + static fromJSON(t, e) { + const n = [] + for (let r = 0, s = t.shapes.length; r < s; r++) { + const i = e[t.shapes[r]] + n.push(i) + } + const i = t.options.extrudePath + return ( + void 0 !== i && (t.options.extrudePath = new fa[i.type]().fromJSON(i)), + new Wa(n, t.options) + ) + } + } + const ja = { + generateTopUV: function (t, e, n, i, r) { + const s = e[3 * n], + a = e[3 * n + 1], + o = e[3 * i], + l = e[3 * i + 1], + c = e[3 * r], + h = e[3 * r + 1] + return [new tt(s, a), new tt(o, l), new tt(c, h)] + }, + generateSideWallUV: function (t, e, n, i, r, s) { + const a = e[3 * n], + o = e[3 * n + 1], + l = e[3 * n + 2], + c = e[3 * i], + h = e[3 * i + 1], + u = e[3 * i + 2], + d = e[3 * r], + p = e[3 * r + 1], + m = e[3 * r + 2], + f = e[3 * s], + g = e[3 * s + 1], + v = e[3 * s + 2] + return Math.abs(o - h) < Math.abs(a - c) + ? [new tt(a, 1 - l), new tt(c, 1 - u), new tt(d, 1 - m), new tt(f, 1 - v)] + : [new tt(o, 1 - l), new tt(h, 1 - u), new tt(p, 1 - m), new tt(g, 1 - v)] + }, + } + class qa extends Je { + constructor(t, e = 12) { + super(), + (this.type = 'ShapeGeometry'), + (this.parameters = { shapes: t, curveSegments: e }) + const n = [], + i = [], + r = [], + s = [] + let a = 0, + o = 0 + if (!1 === Array.isArray(t)) l(t) + else for (let c = 0; c < t.length; c++) l(t[c]), this.addGroup(a, o, c), (a += o), (o = 0) + function l(t) { + const a = i.length / 3, + l = t.extractPoints(e) + let c = l.shape + const h = l.holes + !1 === Ga.isClockWise(c) && (c = c.reverse()) + for (let e = 0, n = h.length; e < n; e++) { + const t = h[e] + !0 === Ga.isClockWise(t) && (h[e] = t.reverse()) + } + const u = Ga.triangulateShape(c, h) + for (let e = 0, n = h.length; e < n; e++) { + const t = h[e] + c = c.concat(t) + } + for (let e = 0, n = c.length; e < n; e++) { + const t = c[e] + i.push(t.x, t.y, 0), r.push(0, 0, 1), s.push(t.x, t.y) + } + for (let e = 0, i = u.length; e < i; e++) { + const t = u[e], + i = t[0] + a, + r = t[1] + a, + s = t[2] + a + n.push(i, r, s), (o += 3) + } + } + this.setIndex(n), + this.setAttribute('position', new He(i, 3)), + this.setAttribute('normal', new He(r, 3)), + this.setAttribute('uv', new He(s, 2)) + } + toJSON() { + const t = super.toJSON() + return (function (t, e) { + if (((e.shapes = []), Array.isArray(t))) + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n] + e.shapes.push(i.uuid) + } + else e.shapes.push(t.uuid) + return e + })(this.parameters.shapes, t) + } + static fromJSON(t, e) { + const n = [] + for (let i = 0, r = t.shapes.length; i < r; i++) { + const r = e[t.shapes[i]] + n.push(r) + } + return new qa(n, t.curveSegments) + } + } + class Xa extends Je { + constructor(t = 1, e = 8, n = 6, i = 0, r = 2 * Math.PI, s = 0, a = Math.PI) { + super(), + (this.type = 'SphereGeometry'), + (this.parameters = { + radius: t, + widthSegments: e, + heightSegments: n, + phiStart: i, + phiLength: r, + thetaStart: s, + thetaLength: a, + }), + (e = Math.max(3, Math.floor(e))), + (n = Math.max(2, Math.floor(n))) + const o = Math.min(s + a, Math.PI) + let l = 0 + const c = [], + h = new ut(), + u = new ut(), + d = [], + p = [], + m = [], + f = [] + for (let g = 0; g <= n; g++) { + const d = [], + v = g / n + let y = 0 + 0 == g && 0 == s ? (y = 0.5 / e) : g == n && o == Math.PI && (y = -0.5 / e) + for (let n = 0; n <= e; n++) { + const o = n / e + ;(h.x = -t * Math.cos(i + o * r) * Math.sin(s + v * a)), + (h.y = t * Math.cos(s + v * a)), + (h.z = t * Math.sin(i + o * r) * Math.sin(s + v * a)), + p.push(h.x, h.y, h.z), + u.copy(h).normalize(), + m.push(u.x, u.y, u.z), + f.push(o + y, 1 - v), + d.push(l++) + } + c.push(d) + } + for (let g = 0; g < n; g++) + for (let t = 0; t < e; t++) { + const e = c[g][t + 1], + i = c[g][t], + r = c[g + 1][t], + a = c[g + 1][t + 1] + ;(0 !== g || s > 0) && d.push(e, i, a), + (g !== n - 1 || o < Math.PI) && d.push(i, r, a) + } + this.setIndex(d), + this.setAttribute('position', new He(p, 3)), + this.setAttribute('normal', new He(m, 3)), + this.setAttribute('uv', new He(f, 2)) + } + static fromJSON(t) { + return new Xa( + t.radius, + t.widthSegments, + t.heightSegments, + t.phiStart, + t.phiLength, + t.thetaStart, + t.thetaLength, + ) + } + } + class Ya extends Je { + constructor(t, e = 64, n = 1, i = 8, r = !1) { + super(), + (this.type = 'TubeGeometry'), + (this.parameters = { + path: t, + tubularSegments: e, + radius: n, + radialSegments: i, + closed: r, + }) + const s = t.computeFrenetFrames(e, r) + ;(this.tangents = s.tangents), (this.normals = s.normals), (this.binormals = s.binormals) + const a = new ut(), + o = new ut(), + l = new tt() + let c = new ut() + const h = [], + u = [], + d = [], + p = [] + function m(r) { + c = t.getPointAt(r / e, c) + const l = s.normals[r], + d = s.binormals[r] + for (let t = 0; t <= i; t++) { + const e = (t / i) * Math.PI * 2, + r = Math.sin(e), + s = -Math.cos(e) + ;(o.x = s * l.x + r * d.x), + (o.y = s * l.y + r * d.y), + (o.z = s * l.z + r * d.z), + o.normalize(), + u.push(o.x, o.y, o.z), + (a.x = c.x + n * o.x), + (a.y = c.y + n * o.y), + (a.z = c.z + n * o.z), + h.push(a.x, a.y, a.z) + } + } + !(function () { + for (let t = 0; t < e; t++) m(t) + m(!1 === r ? e : 0), + (function () { + for (let t = 0; t <= e; t++) + for (let n = 0; n <= i; n++) (l.x = t / e), (l.y = n / i), d.push(l.x, l.y) + })(), + (function () { + for (let t = 1; t <= e; t++) + for (let e = 1; e <= i; e++) { + const n = (i + 1) * (t - 1) + (e - 1), + r = (i + 1) * t + (e - 1), + s = (i + 1) * t + e, + a = (i + 1) * (t - 1) + e + p.push(n, r, a), p.push(r, s, a) + } + })() + })(), + this.setIndex(p), + this.setAttribute('position', new He(h, 3)), + this.setAttribute('normal', new He(u, 3)), + this.setAttribute('uv', new He(d, 2)) + } + toJSON() { + const t = super.toJSON() + return (t.path = this.parameters.path.toJSON()), t + } + static fromJSON(t) { + return new Ya( + new fa[t.path.type]().fromJSON(t.path), + t.tubularSegments, + t.radius, + t.radialSegments, + t.closed, + ) + } + } + class Ja extends Ee { + constructor(t) { + super(), + (this.type = 'ShadowMaterial'), + (this.color = new Ie(0)), + (this.transparent = !0), + this.setValues(t) + } + copy(t) { + return super.copy(t), this.color.copy(t.color), this + } + } + Ja.prototype.isShadowMaterial = !0 + class Za extends _n { + constructor(t) { + super(t), (this.type = 'RawShaderMaterial') + } + } + Za.prototype.isRawShaderMaterial = !0 + class Qa extends Ee { + constructor(t) { + super(), + (this.defines = { STANDARD: '' }), + (this.type = 'MeshStandardMaterial'), + (this.color = new Ie(16777215)), + (this.roughness = 1), + (this.metalness = 0), + (this.map = null), + (this.lightMap = null), + (this.lightMapIntensity = 1), + (this.aoMap = null), + (this.aoMapIntensity = 1), + (this.emissive = new Ie(0)), + (this.emissiveIntensity = 1), + (this.emissiveMap = null), + (this.bumpMap = null), + (this.bumpScale = 1), + (this.normalMap = null), + (this.normalMapType = 0), + (this.normalScale = new tt(1, 1)), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.roughnessMap = null), + (this.metalnessMap = null), + (this.alphaMap = null), + (this.envMap = null), + (this.envMapIntensity = 1), + (this.refractionRatio = 0.98), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.wireframeLinecap = 'round'), + (this.wireframeLinejoin = 'round'), + (this.morphTargets = !1), + (this.morphNormals = !1), + (this.flatShading = !1), + (this.vertexTangents = !1), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + (this.defines = { STANDARD: '' }), + this.color.copy(t.color), + (this.roughness = t.roughness), + (this.metalness = t.metalness), + (this.map = t.map), + (this.lightMap = t.lightMap), + (this.lightMapIntensity = t.lightMapIntensity), + (this.aoMap = t.aoMap), + (this.aoMapIntensity = t.aoMapIntensity), + this.emissive.copy(t.emissive), + (this.emissiveMap = t.emissiveMap), + (this.emissiveIntensity = t.emissiveIntensity), + (this.bumpMap = t.bumpMap), + (this.bumpScale = t.bumpScale), + (this.normalMap = t.normalMap), + (this.normalMapType = t.normalMapType), + this.normalScale.copy(t.normalScale), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + (this.roughnessMap = t.roughnessMap), + (this.metalnessMap = t.metalnessMap), + (this.alphaMap = t.alphaMap), + (this.envMap = t.envMap), + (this.envMapIntensity = t.envMapIntensity), + (this.refractionRatio = t.refractionRatio), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.wireframeLinecap = t.wireframeLinecap), + (this.wireframeLinejoin = t.wireframeLinejoin), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + (this.flatShading = t.flatShading), + (this.vertexTangents = t.vertexTangents), + this + ) + } + } + Qa.prototype.isMeshStandardMaterial = !0 + class Ka extends Qa { + constructor(t) { + super(), + (this.defines = { STANDARD: '', PHYSICAL: '' }), + (this.type = 'MeshPhysicalMaterial'), + (this.clearcoat = 0), + (this.clearcoatMap = null), + (this.clearcoatRoughness = 0), + (this.clearcoatRoughnessMap = null), + (this.clearcoatNormalScale = new tt(1, 1)), + (this.clearcoatNormalMap = null), + (this.reflectivity = 0.5), + Object.defineProperty(this, 'ior', { + get: function () { + return (1 + 0.4 * this.reflectivity) / (1 - 0.4 * this.reflectivity) + }, + set: function (t) { + this.reflectivity = J((2.5 * (t - 1)) / (t + 1), 0, 1) + }, + }), + (this.sheen = null), + (this.transmission = 0), + (this.transmissionMap = null), + (this.thickness = 0.01), + (this.thicknessMap = null), + (this.attenuationDistance = 0), + (this.attenuationColor = new Ie(1, 1, 1)), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + (this.defines = { STANDARD: '', PHYSICAL: '' }), + (this.clearcoat = t.clearcoat), + (this.clearcoatMap = t.clearcoatMap), + (this.clearcoatRoughness = t.clearcoatRoughness), + (this.clearcoatRoughnessMap = t.clearcoatRoughnessMap), + (this.clearcoatNormalMap = t.clearcoatNormalMap), + this.clearcoatNormalScale.copy(t.clearcoatNormalScale), + (this.reflectivity = t.reflectivity), + t.sheen ? (this.sheen = (this.sheen || new Ie()).copy(t.sheen)) : (this.sheen = null), + (this.transmission = t.transmission), + (this.transmissionMap = t.transmissionMap), + (this.thickness = t.thickness), + (this.thicknessMap = t.thicknessMap), + (this.attenuationDistance = t.attenuationDistance), + this.attenuationColor.copy(t.attenuationColor), + this + ) + } + } + Ka.prototype.isMeshPhysicalMaterial = !0 + class $a extends Ee { + constructor(t) { + super(), + (this.type = 'MeshPhongMaterial'), + (this.color = new Ie(16777215)), + (this.specular = new Ie(1118481)), + (this.shininess = 30), + (this.map = null), + (this.lightMap = null), + (this.lightMapIntensity = 1), + (this.aoMap = null), + (this.aoMapIntensity = 1), + (this.emissive = new Ie(0)), + (this.emissiveIntensity = 1), + (this.emissiveMap = null), + (this.bumpMap = null), + (this.bumpScale = 1), + (this.normalMap = null), + (this.normalMapType = 0), + (this.normalScale = new tt(1, 1)), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.specularMap = null), + (this.alphaMap = null), + (this.envMap = null), + (this.combine = 0), + (this.reflectivity = 1), + (this.refractionRatio = 0.98), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.wireframeLinecap = 'round'), + (this.wireframeLinejoin = 'round'), + (this.morphTargets = !1), + (this.morphNormals = !1), + (this.flatShading = !1), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + this.specular.copy(t.specular), + (this.shininess = t.shininess), + (this.map = t.map), + (this.lightMap = t.lightMap), + (this.lightMapIntensity = t.lightMapIntensity), + (this.aoMap = t.aoMap), + (this.aoMapIntensity = t.aoMapIntensity), + this.emissive.copy(t.emissive), + (this.emissiveMap = t.emissiveMap), + (this.emissiveIntensity = t.emissiveIntensity), + (this.bumpMap = t.bumpMap), + (this.bumpScale = t.bumpScale), + (this.normalMap = t.normalMap), + (this.normalMapType = t.normalMapType), + this.normalScale.copy(t.normalScale), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + (this.specularMap = t.specularMap), + (this.alphaMap = t.alphaMap), + (this.envMap = t.envMap), + (this.combine = t.combine), + (this.reflectivity = t.reflectivity), + (this.refractionRatio = t.refractionRatio), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.wireframeLinecap = t.wireframeLinecap), + (this.wireframeLinejoin = t.wireframeLinejoin), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + (this.flatShading = t.flatShading), + this + ) + } + } + $a.prototype.isMeshPhongMaterial = !0 + class to extends Ee { + constructor(t) { + super(), + (this.defines = { TOON: '' }), + (this.type = 'MeshToonMaterial'), + (this.color = new Ie(16777215)), + (this.map = null), + (this.gradientMap = null), + (this.lightMap = null), + (this.lightMapIntensity = 1), + (this.aoMap = null), + (this.aoMapIntensity = 1), + (this.emissive = new Ie(0)), + (this.emissiveIntensity = 1), + (this.emissiveMap = null), + (this.bumpMap = null), + (this.bumpScale = 1), + (this.normalMap = null), + (this.normalMapType = 0), + (this.normalScale = new tt(1, 1)), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.alphaMap = null), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.wireframeLinecap = 'round'), + (this.wireframeLinejoin = 'round'), + (this.morphTargets = !1), + (this.morphNormals = !1), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.map = t.map), + (this.gradientMap = t.gradientMap), + (this.lightMap = t.lightMap), + (this.lightMapIntensity = t.lightMapIntensity), + (this.aoMap = t.aoMap), + (this.aoMapIntensity = t.aoMapIntensity), + this.emissive.copy(t.emissive), + (this.emissiveMap = t.emissiveMap), + (this.emissiveIntensity = t.emissiveIntensity), + (this.bumpMap = t.bumpMap), + (this.bumpScale = t.bumpScale), + (this.normalMap = t.normalMap), + (this.normalMapType = t.normalMapType), + this.normalScale.copy(t.normalScale), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + (this.alphaMap = t.alphaMap), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.wireframeLinecap = t.wireframeLinecap), + (this.wireframeLinejoin = t.wireframeLinejoin), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + this + ) + } + } + to.prototype.isMeshToonMaterial = !0 + class eo extends Ee { + constructor(t) { + super(), + (this.type = 'MeshNormalMaterial'), + (this.bumpMap = null), + (this.bumpScale = 1), + (this.normalMap = null), + (this.normalMapType = 0), + (this.normalScale = new tt(1, 1)), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.fog = !1), + (this.morphTargets = !1), + (this.morphNormals = !1), + (this.flatShading = !1), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + (this.bumpMap = t.bumpMap), + (this.bumpScale = t.bumpScale), + (this.normalMap = t.normalMap), + (this.normalMapType = t.normalMapType), + this.normalScale.copy(t.normalScale), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + (this.flatShading = t.flatShading), + this + ) + } + } + eo.prototype.isMeshNormalMaterial = !0 + class no extends Ee { + constructor(t) { + super(), + (this.type = 'MeshLambertMaterial'), + (this.color = new Ie(16777215)), + (this.map = null), + (this.lightMap = null), + (this.lightMapIntensity = 1), + (this.aoMap = null), + (this.aoMapIntensity = 1), + (this.emissive = new Ie(0)), + (this.emissiveIntensity = 1), + (this.emissiveMap = null), + (this.specularMap = null), + (this.alphaMap = null), + (this.envMap = null), + (this.combine = 0), + (this.reflectivity = 1), + (this.refractionRatio = 0.98), + (this.wireframe = !1), + (this.wireframeLinewidth = 1), + (this.wireframeLinecap = 'round'), + (this.wireframeLinejoin = 'round'), + (this.morphTargets = !1), + (this.morphNormals = !1), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + this.color.copy(t.color), + (this.map = t.map), + (this.lightMap = t.lightMap), + (this.lightMapIntensity = t.lightMapIntensity), + (this.aoMap = t.aoMap), + (this.aoMapIntensity = t.aoMapIntensity), + this.emissive.copy(t.emissive), + (this.emissiveMap = t.emissiveMap), + (this.emissiveIntensity = t.emissiveIntensity), + (this.specularMap = t.specularMap), + (this.alphaMap = t.alphaMap), + (this.envMap = t.envMap), + (this.combine = t.combine), + (this.reflectivity = t.reflectivity), + (this.refractionRatio = t.refractionRatio), + (this.wireframe = t.wireframe), + (this.wireframeLinewidth = t.wireframeLinewidth), + (this.wireframeLinecap = t.wireframeLinecap), + (this.wireframeLinejoin = t.wireframeLinejoin), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + this + ) + } + } + no.prototype.isMeshLambertMaterial = !0 + class io extends Ee { + constructor(t) { + super(), + (this.defines = { MATCAP: '' }), + (this.type = 'MeshMatcapMaterial'), + (this.color = new Ie(16777215)), + (this.matcap = null), + (this.map = null), + (this.bumpMap = null), + (this.bumpScale = 1), + (this.normalMap = null), + (this.normalMapType = 0), + (this.normalScale = new tt(1, 1)), + (this.displacementMap = null), + (this.displacementScale = 1), + (this.displacementBias = 0), + (this.alphaMap = null), + (this.morphTargets = !1), + (this.morphNormals = !1), + (this.flatShading = !1), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + (this.defines = { MATCAP: '' }), + this.color.copy(t.color), + (this.matcap = t.matcap), + (this.map = t.map), + (this.bumpMap = t.bumpMap), + (this.bumpScale = t.bumpScale), + (this.normalMap = t.normalMap), + (this.normalMapType = t.normalMapType), + this.normalScale.copy(t.normalScale), + (this.displacementMap = t.displacementMap), + (this.displacementScale = t.displacementScale), + (this.displacementBias = t.displacementBias), + (this.alphaMap = t.alphaMap), + (this.morphTargets = t.morphTargets), + (this.morphNormals = t.morphNormals), + (this.flatShading = t.flatShading), + this + ) + } + } + io.prototype.isMeshMatcapMaterial = !0 + class ro extends Cs { + constructor(t) { + super(), + (this.type = 'LineDashedMaterial'), + (this.scale = 1), + (this.dashSize = 3), + (this.gapSize = 1), + this.setValues(t) + } + copy(t) { + return ( + super.copy(t), + (this.scale = t.scale), + (this.dashSize = t.dashSize), + (this.gapSize = t.gapSize), + this + ) + } + } + ro.prototype.isLineDashedMaterial = !0 + const so = { + arraySlice: function (t, e, n) { + return so.isTypedArray(t) + ? new t.constructor(t.subarray(e, void 0 !== n ? n : t.length)) + : t.slice(e, n) + }, + convertArray: function (t, e, n) { + return !t || (!n && t.constructor === e) + ? t + : 'number' === typeof e.BYTES_PER_ELEMENT + ? new e(t) + : Array.prototype.slice.call(t) + }, + isTypedArray: function (t) { + return ArrayBuffer.isView(t) && !(t instanceof DataView) + }, + getKeyframeOrder: function (t) { + const e = t.length, + n = new Array(e) + for (let i = 0; i !== e; ++i) n[i] = i + return ( + n.sort(function (e, n) { + return t[e] - t[n] + }), + n + ) + }, + sortedArray: function (t, e, n) { + const i = t.length, + r = new t.constructor(i) + for (let s = 0, a = 0; a !== i; ++s) { + const i = n[s] * e + for (let n = 0; n !== e; ++n) r[a++] = t[i + n] + } + return r + }, + flattenJSON: function (t, e, n, i) { + let r = 1, + s = t[0] + for (; void 0 !== s && void 0 === s[i]; ) s = t[r++] + if (void 0 === s) return + let a = s[i] + if (void 0 !== a) + if (Array.isArray(a)) + do { + ;(a = s[i]), void 0 !== a && (e.push(s.time), n.push.apply(n, a)), (s = t[r++]) + } while (void 0 !== s) + else if (void 0 !== a.toArray) + do { + ;(a = s[i]), void 0 !== a && (e.push(s.time), a.toArray(n, n.length)), (s = t[r++]) + } while (void 0 !== s) + else + do { + ;(a = s[i]), void 0 !== a && (e.push(s.time), n.push(a)), (s = t[r++]) + } while (void 0 !== s) + }, + subclip: function (t, e, n, i, r = 30) { + const s = t.clone() + s.name = e + const a = [] + for (let l = 0; l < s.tracks.length; ++l) { + const t = s.tracks[l], + e = t.getValueSize(), + o = [], + c = [] + for (let s = 0; s < t.times.length; ++s) { + const a = t.times[s] * r + if (!(a < n || a >= i)) { + o.push(t.times[s]) + for (let n = 0; n < e; ++n) c.push(t.values[s * e + n]) + } + } + 0 !== o.length && + ((t.times = so.convertArray(o, t.times.constructor)), + (t.values = so.convertArray(c, t.values.constructor)), + a.push(t)) + } + s.tracks = a + let o = 1 / 0 + for (let l = 0; l < s.tracks.length; ++l) + o > s.tracks[l].times[0] && (o = s.tracks[l].times[0]) + for (let l = 0; l < s.tracks.length; ++l) s.tracks[l].shift(-1 * o) + return s.resetDuration(), s + }, + makeClipAdditive: function (t, e = 0, n = t, i = 30) { + i <= 0 && (i = 30) + const r = n.tracks.length, + s = e / i + for (let a = 0; a < r; ++a) { + const e = n.tracks[a], + i = e.ValueTypeName + if ('bool' === i || 'string' === i) continue + const r = t.tracks.find(function (t) { + return t.name === e.name && t.ValueTypeName === i + }) + if (void 0 === r) continue + let o = 0 + const l = e.getValueSize() + e.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (o = l / 3) + let c = 0 + const h = r.getValueSize() + r.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline && (c = h / 3) + const u = e.times.length - 1 + let d + if (s <= e.times[0]) { + const t = o, + n = l - o + d = so.arraySlice(e.values, t, n) + } else if (s >= e.times[u]) { + const t = u * l + o, + n = t + l - o + d = so.arraySlice(e.values, t, n) + } else { + const t = e.createInterpolant(), + n = o, + i = l - o + t.evaluate(s), (d = so.arraySlice(t.resultBuffer, n, i)) + } + if ('quaternion' === i) { + new ht().fromArray(d).normalize().conjugate().toArray(d) + } + const p = r.times.length + for (let t = 0; t < p; ++t) { + const e = t * h + c + if ('quaternion' === i) ht.multiplyQuaternionsFlat(r.values, e, d, 0, r.values, e) + else { + const t = h - 2 * c + for (let n = 0; n < t; ++n) r.values[e + n] -= d[n] + } + } + } + return (t.blendMode = 2501), t + }, + } + class ao { + constructor(t, e, n, i) { + ;(this.parameterPositions = t), + (this._cachedIndex = 0), + (this.resultBuffer = void 0 !== i ? i : new e.constructor(n)), + (this.sampleValues = e), + (this.valueSize = n), + (this.settings = null), + (this.DefaultSettings_ = {}) + } + evaluate(t) { + const e = this.parameterPositions + let n = this._cachedIndex, + i = e[n], + r = e[n - 1] + t: { + e: { + let s + n: { + i: if (!(t < i)) { + for (let s = n + 2; ; ) { + if (void 0 === i) { + if (t < r) break i + return (n = e.length), (this._cachedIndex = n), this.afterEnd_(n - 1, t, r) + } + if (n === s) break + if (((r = i), (i = e[++n]), t < i)) break e + } + s = e.length + break n + } + if (t >= r) break t + { + const a = e[1] + t < a && ((n = 2), (r = a)) + for (let s = n - 2; ; ) { + if (void 0 === r) return (this._cachedIndex = 0), this.beforeStart_(0, t, i) + if (n === s) break + if (((i = r), (r = e[--n - 1]), t >= r)) break e + } + ;(s = n), (n = 0) + } + } + for (; n < s; ) { + const i = (n + s) >>> 1 + t < e[i] ? (s = i) : (n = i + 1) + } + if (((i = e[n]), (r = e[n - 1]), void 0 === r)) + return (this._cachedIndex = 0), this.beforeStart_(0, t, i) + if (void 0 === i) + return (n = e.length), (this._cachedIndex = n), this.afterEnd_(n - 1, r, t) + } + ;(this._cachedIndex = n), this.intervalChanged_(n, r, i) + } + return this.interpolate_(n, r, t, i) + } + getSettings_() { + return this.settings || this.DefaultSettings_ + } + copySampleValue_(t) { + const e = this.resultBuffer, + n = this.sampleValues, + i = this.valueSize, + r = t * i + for (let s = 0; s !== i; ++s) e[s] = n[r + s] + return e + } + interpolate_() { + throw new Error('call to abstract method') + } + intervalChanged_() {} + } + ;(ao.prototype.beforeStart_ = ao.prototype.copySampleValue_), + (ao.prototype.afterEnd_ = ao.prototype.copySampleValue_) + class oo extends ao { + constructor(t, e, n, i) { + super(t, e, n, i), + (this._weightPrev = -0), + (this._offsetPrev = -0), + (this._weightNext = -0), + (this._offsetNext = -0), + (this.DefaultSettings_ = { endingStart: D, endingEnd: D }) + } + intervalChanged_(t, e, n) { + const i = this.parameterPositions + let r = t - 2, + s = t + 1, + a = i[r], + o = i[s] + if (void 0 === a) + switch (this.getSettings_().endingStart) { + case I: + ;(r = t), (a = 2 * e - n) + break + case N: + ;(r = i.length - 2), (a = e + i[r] - i[r + 1]) + break + default: + ;(r = t), (a = n) + } + if (void 0 === o) + switch (this.getSettings_().endingEnd) { + case I: + ;(s = t), (o = 2 * n - e) + break + case N: + ;(s = 1), (o = n + i[1] - i[0]) + break + default: + ;(s = t - 1), (o = e) + } + const l = 0.5 * (n - e), + c = this.valueSize + ;(this._weightPrev = l / (e - a)), + (this._weightNext = l / (o - n)), + (this._offsetPrev = r * c), + (this._offsetNext = s * c) + } + interpolate_(t, e, n, i) { + const r = this.resultBuffer, + s = this.sampleValues, + a = this.valueSize, + o = t * a, + l = o - a, + c = this._offsetPrev, + h = this._offsetNext, + u = this._weightPrev, + d = this._weightNext, + p = (n - e) / (i - e), + m = p * p, + f = m * p, + g = -u * f + 2 * u * m - u * p, + v = (1 + u) * f + (-1.5 - 2 * u) * m + (-0.5 + u) * p + 1, + y = (-1 - d) * f + (1.5 + d) * m + 0.5 * p, + x = d * f - d * m + for (let _ = 0; _ !== a; ++_) + r[_] = g * s[c + _] + v * s[l + _] + y * s[o + _] + x * s[h + _] + return r + } + } + class lo extends ao { + constructor(t, e, n, i) { + super(t, e, n, i) + } + interpolate_(t, e, n, i) { + const r = this.resultBuffer, + s = this.sampleValues, + a = this.valueSize, + o = t * a, + l = o - a, + c = (n - e) / (i - e), + h = 1 - c + for (let u = 0; u !== a; ++u) r[u] = s[l + u] * h + s[o + u] * c + return r + } + } + class co extends ao { + constructor(t, e, n, i) { + super(t, e, n, i) + } + interpolate_(t) { + return this.copySampleValue_(t - 1) + } + } + class ho { + constructor(t, e, n, i) { + if (void 0 === t) throw new Error('THREE.KeyframeTrack: track name is undefined') + if (void 0 === e || 0 === e.length) + throw new Error('THREE.KeyframeTrack: no keyframes in track named ' + t) + ;(this.name = t), + (this.times = so.convertArray(e, this.TimeBufferType)), + (this.values = so.convertArray(n, this.ValueBufferType)), + this.setInterpolation(i || this.DefaultInterpolation) + } + static toJSON(t) { + const e = t.constructor + let n + if (e.toJSON !== this.toJSON) n = e.toJSON(t) + else { + n = { + name: t.name, + times: so.convertArray(t.times, Array), + values: so.convertArray(t.values, Array), + } + const e = t.getInterpolation() + e !== t.DefaultInterpolation && (n.interpolation = e) + } + return (n.type = t.ValueTypeName), n + } + InterpolantFactoryMethodDiscrete(t) { + return new co(this.times, this.values, this.getValueSize(), t) + } + InterpolantFactoryMethodLinear(t) { + return new lo(this.times, this.values, this.getValueSize(), t) + } + InterpolantFactoryMethodSmooth(t) { + return new oo(this.times, this.values, this.getValueSize(), t) + } + setInterpolation(t) { + let e + switch (t) { + case R: + e = this.InterpolantFactoryMethodDiscrete + break + case C: + e = this.InterpolantFactoryMethodLinear + break + case P: + e = this.InterpolantFactoryMethodSmooth + } + if (void 0 === e) { + const e = + 'unsupported interpolation for ' + + this.ValueTypeName + + ' keyframe track named ' + + this.name + if (void 0 === this.createInterpolant) { + if (t === this.DefaultInterpolation) throw new Error(e) + this.setInterpolation(this.DefaultInterpolation) + } + return console.warn('THREE.KeyframeTrack:', e), this + } + return (this.createInterpolant = e), this + } + getInterpolation() { + switch (this.createInterpolant) { + case this.InterpolantFactoryMethodDiscrete: + return R + case this.InterpolantFactoryMethodLinear: + return C + case this.InterpolantFactoryMethodSmooth: + return P + } + } + getValueSize() { + return this.values.length / this.times.length + } + shift(t) { + if (0 !== t) { + const e = this.times + for (let n = 0, i = e.length; n !== i; ++n) e[n] += t + } + return this + } + scale(t) { + if (1 !== t) { + const e = this.times + for (let n = 0, i = e.length; n !== i; ++n) e[n] *= t + } + return this + } + trim(t, e) { + const n = this.times, + i = n.length + let r = 0, + s = i - 1 + for (; r !== i && n[r] < t; ) ++r + for (; -1 !== s && n[s] > e; ) --s + if ((++s, 0 !== r || s !== i)) { + r >= s && ((s = Math.max(s, 1)), (r = s - 1)) + const t = this.getValueSize() + ;(this.times = so.arraySlice(n, r, s)), + (this.values = so.arraySlice(this.values, r * t, s * t)) + } + return this + } + validate() { + let t = !0 + const e = this.getValueSize() + e - Math.floor(e) !== 0 && + (console.error('THREE.KeyframeTrack: Invalid value size in track.', this), (t = !1)) + const n = this.times, + i = this.values, + r = n.length + 0 === r && (console.error('THREE.KeyframeTrack: Track is empty.', this), (t = !1)) + let s = null + for (let a = 0; a !== r; a++) { + const e = n[a] + if ('number' === typeof e && isNaN(e)) { + console.error('THREE.KeyframeTrack: Time is not a valid number.', this, a, e), + (t = !1) + break + } + if (null !== s && s > e) { + console.error('THREE.KeyframeTrack: Out of order keys.', this, a, e, s), (t = !1) + break + } + s = e + } + if (void 0 !== i && so.isTypedArray(i)) + for (let a = 0, o = i.length; a !== o; ++a) { + const e = i[a] + if (isNaN(e)) { + console.error('THREE.KeyframeTrack: Value is not a valid number.', this, a, e), + (t = !1) + break + } + } + return t + } + optimize() { + const t = so.arraySlice(this.times), + e = so.arraySlice(this.values), + n = this.getValueSize(), + i = this.getInterpolation() === P, + r = t.length - 1 + let s = 1 + for (let a = 1; a < r; ++a) { + let r = !1 + const o = t[a] + if (o !== t[a + 1] && (1 !== a || o !== t[0])) + if (i) r = !0 + else { + const t = a * n, + i = t - n, + s = t + n + for (let a = 0; a !== n; ++a) { + const n = e[t + a] + if (n !== e[i + a] || n !== e[s + a]) { + r = !0 + break + } + } + } + if (r) { + if (a !== s) { + t[s] = t[a] + const i = a * n, + r = s * n + for (let t = 0; t !== n; ++t) e[r + t] = e[i + t] + } + ++s + } + } + if (r > 0) { + t[s] = t[r] + for (let t = r * n, i = s * n, a = 0; a !== n; ++a) e[i + a] = e[t + a] + ++s + } + return ( + s !== t.length + ? ((this.times = so.arraySlice(t, 0, s)), (this.values = so.arraySlice(e, 0, s * n))) + : ((this.times = t), (this.values = e)), + this + ) + } + clone() { + const t = so.arraySlice(this.times, 0), + e = so.arraySlice(this.values, 0), + n = new (0, this.constructor)(this.name, t, e) + return (n.createInterpolant = this.createInterpolant), n + } + } + ;(ho.prototype.TimeBufferType = Float32Array), + (ho.prototype.ValueBufferType = Float32Array), + (ho.prototype.DefaultInterpolation = C) + class uo extends ho {} + ;(uo.prototype.ValueTypeName = 'bool'), + (uo.prototype.ValueBufferType = Array), + (uo.prototype.DefaultInterpolation = R), + (uo.prototype.InterpolantFactoryMethodLinear = void 0), + (uo.prototype.InterpolantFactoryMethodSmooth = void 0) + class po extends ho {} + po.prototype.ValueTypeName = 'color' + class mo extends ho {} + mo.prototype.ValueTypeName = 'number' + class fo extends ao { + constructor(t, e, n, i) { + super(t, e, n, i) + } + interpolate_(t, e, n, i) { + const r = this.resultBuffer, + s = this.sampleValues, + a = this.valueSize, + o = (n - e) / (i - e) + let l = t * a + for (let c = l + a; l !== c; l += 4) ht.slerpFlat(r, 0, s, l - a, s, l, o) + return r + } + } + class go extends ho { + InterpolantFactoryMethodLinear(t) { + return new fo(this.times, this.values, this.getValueSize(), t) + } + } + ;(go.prototype.ValueTypeName = 'quaternion'), + (go.prototype.DefaultInterpolation = C), + (go.prototype.InterpolantFactoryMethodSmooth = void 0) + class vo extends ho {} + ;(vo.prototype.ValueTypeName = 'string'), + (vo.prototype.ValueBufferType = Array), + (vo.prototype.DefaultInterpolation = R), + (vo.prototype.InterpolantFactoryMethodLinear = void 0), + (vo.prototype.InterpolantFactoryMethodSmooth = void 0) + class yo extends ho {} + yo.prototype.ValueTypeName = 'vector' + class xo { + constructor(t, e = -1, n, i = 2500) { + ;(this.name = t), + (this.tracks = n), + (this.duration = e), + (this.blendMode = i), + (this.uuid = Y()), + this.duration < 0 && this.resetDuration() + } + static parse(t) { + const e = [], + n = t.tracks, + i = 1 / (t.fps || 1) + for (let s = 0, a = n.length; s !== a; ++s) e.push(_o(n[s]).scale(i)) + const r = new this(t.name, t.duration, e, t.blendMode) + return (r.uuid = t.uuid), r + } + static toJSON(t) { + const e = [], + n = t.tracks, + i = { + name: t.name, + duration: t.duration, + tracks: e, + uuid: t.uuid, + blendMode: t.blendMode, + } + for (let r = 0, s = n.length; r !== s; ++r) e.push(ho.toJSON(n[r])) + return i + } + static CreateFromMorphTargetSequence(t, e, n, i) { + const r = e.length, + s = [] + for (let a = 0; a < r; a++) { + let t = [], + o = [] + t.push((a + r - 1) % r, a, (a + 1) % r), o.push(0, 1, 0) + const l = so.getKeyframeOrder(t) + ;(t = so.sortedArray(t, 1, l)), + (o = so.sortedArray(o, 1, l)), + i || 0 !== t[0] || (t.push(r), o.push(o[0])), + s.push(new mo('.morphTargetInfluences[' + e[a].name + ']', t, o).scale(1 / n)) + } + return new this(t, -1, s) + } + static findByName(t, e) { + let n = t + if (!Array.isArray(t)) { + const e = t + n = (e.geometry && e.geometry.animations) || e.animations + } + for (let i = 0; i < n.length; i++) if (n[i].name === e) return n[i] + return null + } + static CreateClipsFromMorphTargetSequences(t, e, n) { + const i = {}, + r = /^([\w-]*?)([\d]+)$/ + for (let a = 0, o = t.length; a < o; a++) { + const e = t[a], + n = e.name.match(r) + if (n && n.length > 1) { + const t = n[1] + let r = i[t] + r || (i[t] = r = []), r.push(e) + } + } + const s = [] + for (const a in i) s.push(this.CreateFromMorphTargetSequence(a, i[a], e, n)) + return s + } + static parseAnimation(t, e) { + if (!t) + return console.error('THREE.AnimationClip: No animation in JSONLoader data.'), null + const n = function (t, e, n, i, r) { + if (0 !== n.length) { + const s = [], + a = [] + so.flattenJSON(n, s, a, i), 0 !== s.length && r.push(new t(e, s, a)) + } + }, + i = [], + r = t.name || 'default', + s = t.fps || 30, + a = t.blendMode + let o = t.length || -1 + const l = t.hierarchy || [] + for (let c = 0; c < l.length; c++) { + const t = l[c].keys + if (t && 0 !== t.length) + if (t[0].morphTargets) { + const e = {} + let n + for (n = 0; n < t.length; n++) + if (t[n].morphTargets) + for (let i = 0; i < t[n].morphTargets.length; i++) e[t[n].morphTargets[i]] = -1 + for (const r in e) { + const e = [], + s = [] + for (let i = 0; i !== t[n].morphTargets.length; ++i) { + const i = t[n] + e.push(i.time), s.push(i.morphTarget === r ? 1 : 0) + } + i.push(new mo('.morphTargetInfluence[' + r + ']', e, s)) + } + o = e.length * (s || 1) + } else { + const r = '.bones[' + e[c].name + ']' + n(yo, r + '.position', t, 'pos', i), + n(go, r + '.quaternion', t, 'rot', i), + n(yo, r + '.scale', t, 'scl', i) + } + } + if (0 === i.length) return null + return new this(r, o, i, a) + } + resetDuration() { + let t = 0 + for (let e = 0, n = this.tracks.length; e !== n; ++e) { + const n = this.tracks[e] + t = Math.max(t, n.times[n.times.length - 1]) + } + return (this.duration = t), this + } + trim() { + for (let t = 0; t < this.tracks.length; t++) this.tracks[t].trim(0, this.duration) + return this + } + validate() { + let t = !0 + for (let e = 0; e < this.tracks.length; e++) t = t && this.tracks[e].validate() + return t + } + optimize() { + for (let t = 0; t < this.tracks.length; t++) this.tracks[t].optimize() + return this + } + clone() { + const t = [] + for (let e = 0; e < this.tracks.length; e++) t.push(this.tracks[e].clone()) + return new this.constructor(this.name, this.duration, t, this.blendMode) + } + toJSON() { + return this.constructor.toJSON(this) + } + } + function _o(t) { + if (void 0 === t.type) + throw new Error('THREE.KeyframeTrack: track type undefined, can not parse') + const e = (function (t) { + switch (t.toLowerCase()) { + case 'scalar': + case 'double': + case 'float': + case 'number': + case 'integer': + return mo + case 'vector': + case 'vector2': + case 'vector3': + case 'vector4': + return yo + case 'color': + return po + case 'quaternion': + return go + case 'bool': + case 'boolean': + return uo + case 'string': + return vo + } + throw new Error('THREE.KeyframeTrack: Unsupported typeName: ' + t) + })(t.type) + if (void 0 === t.times) { + const e = [], + n = [] + so.flattenJSON(t.keys, e, n, 'value'), (t.times = e), (t.values = n) + } + return void 0 !== e.parse ? e.parse(t) : new e(t.name, t.times, t.values, t.interpolation) + } + const bo = { + enabled: !1, + files: {}, + add: function (t, e) { + !1 !== this.enabled && (this.files[t] = e) + }, + get: function (t) { + if (!1 !== this.enabled) return this.files[t] + }, + remove: function (t) { + delete this.files[t] + }, + clear: function () { + this.files = {} + }, + } + class Mo { + constructor(t, e, n) { + const i = this + let r, + s = !1, + a = 0, + o = 0 + const l = [] + ;(this.onStart = void 0), + (this.onLoad = t), + (this.onProgress = e), + (this.onError = n), + (this.itemStart = function (t) { + o++, !1 === s && void 0 !== i.onStart && i.onStart(t, a, o), (s = !0) + }), + (this.itemEnd = function (t) { + a++, + void 0 !== i.onProgress && i.onProgress(t, a, o), + a === o && ((s = !1), void 0 !== i.onLoad && i.onLoad()) + }), + (this.itemError = function (t) { + void 0 !== i.onError && i.onError(t) + }), + (this.resolveURL = function (t) { + return r ? r(t) : t + }), + (this.setURLModifier = function (t) { + return (r = t), this + }), + (this.addHandler = function (t, e) { + return l.push(t, e), this + }), + (this.removeHandler = function (t) { + const e = l.indexOf(t) + return -1 !== e && l.splice(e, 2), this + }), + (this.getHandler = function (t) { + for (let e = 0, n = l.length; e < n; e += 2) { + const n = l[e], + i = l[e + 1] + if ((n.global && (n.lastIndex = 0), n.test(t))) return i + } + return null + }) + } + } + const wo = new Mo() + class So { + constructor(t) { + ;(this.manager = void 0 !== t ? t : wo), + (this.crossOrigin = 'anonymous'), + (this.withCredentials = !1), + (this.path = ''), + (this.resourcePath = ''), + (this.requestHeader = {}) + } + load() {} + loadAsync(t, e) { + const n = this + return new Promise(function (i, r) { + n.load(t, i, e, r) + }) + } + parse() {} + setCrossOrigin(t) { + return (this.crossOrigin = t), this + } + setWithCredentials(t) { + return (this.withCredentials = t), this + } + setPath(t) { + return (this.path = t), this + } + setResourcePath(t) { + return (this.resourcePath = t), this + } + setRequestHeader(t) { + return (this.requestHeader = t), this + } + } + const To = {} + class Eo extends So { + constructor(t) { + super(t) + } + load(t, e, n, i) { + void 0 === t && (t = ''), + void 0 !== this.path && (t = this.path + t), + (t = this.manager.resolveURL(t)) + const r = this, + s = bo.get(t) + if (void 0 !== s) + return ( + r.manager.itemStart(t), + setTimeout(function () { + e && e(s), r.manager.itemEnd(t) + }, 0), + s + ) + if (void 0 !== To[t]) return void To[t].push({ onLoad: e, onProgress: n, onError: i }) + const a = t.match(/^data:(.*?)(;base64)?,(.*)$/) + let o + if (a) { + const n = a[1], + s = !!a[2] + let o = a[3] + ;(o = decodeURIComponent(o)), s && (o = atob(o)) + try { + let i + const s = (this.responseType || '').toLowerCase() + switch (s) { + case 'arraybuffer': + case 'blob': + const t = new Uint8Array(o.length) + for (let n = 0; n < o.length; n++) t[n] = o.charCodeAt(n) + i = 'blob' === s ? new Blob([t.buffer], { type: n }) : t.buffer + break + case 'document': + const e = new DOMParser() + i = e.parseFromString(o, n) + break + case 'json': + i = JSON.parse(o) + break + default: + i = o + } + setTimeout(function () { + e && e(i), r.manager.itemEnd(t) + }, 0) + } catch (l) { + setTimeout(function () { + i && i(l), r.manager.itemError(t), r.manager.itemEnd(t) + }, 0) + } + } else { + ;(To[t] = []), + To[t].push({ onLoad: e, onProgress: n, onError: i }), + (o = new XMLHttpRequest()), + o.open('GET', t, !0), + o.addEventListener( + 'load', + function (e) { + const n = this.response, + i = To[t] + if ((delete To[t], 200 === this.status || 0 === this.status)) { + 0 === this.status && console.warn('THREE.FileLoader: HTTP Status 0 received.'), + bo.add(t, n) + for (let t = 0, e = i.length; t < e; t++) { + const e = i[t] + e.onLoad && e.onLoad(n) + } + r.manager.itemEnd(t) + } else { + for (let t = 0, n = i.length; t < n; t++) { + const n = i[t] + n.onError && n.onError(e) + } + r.manager.itemError(t), r.manager.itemEnd(t) + } + }, + !1, + ), + o.addEventListener( + 'progress', + function (e) { + const n = To[t] + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t] + i.onProgress && i.onProgress(e) + } + }, + !1, + ), + o.addEventListener( + 'error', + function (e) { + const n = To[t] + delete To[t] + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t] + i.onError && i.onError(e) + } + r.manager.itemError(t), r.manager.itemEnd(t) + }, + !1, + ), + o.addEventListener( + 'abort', + function (e) { + const n = To[t] + delete To[t] + for (let t = 0, i = n.length; t < i; t++) { + const i = n[t] + i.onError && i.onError(e) + } + r.manager.itemError(t), r.manager.itemEnd(t) + }, + !1, + ), + void 0 !== this.responseType && (o.responseType = this.responseType), + void 0 !== this.withCredentials && (o.withCredentials = this.withCredentials), + o.overrideMimeType && + o.overrideMimeType(void 0 !== this.mimeType ? this.mimeType : 'text/plain') + for (const t in this.requestHeader) o.setRequestHeader(t, this.requestHeader[t]) + o.send(null) + } + return r.manager.itemStart(t), o + } + setResponseType(t) { + return (this.responseType = t), this + } + setMimeType(t) { + return (this.mimeType = t), this + } + } + class Lo extends So { + constructor(t) { + super(t) + } + load(t, e, n, i) { + void 0 !== this.path && (t = this.path + t), (t = this.manager.resolveURL(t)) + const r = this, + s = bo.get(t) + if (void 0 !== s) + return ( + r.manager.itemStart(t), + setTimeout(function () { + e && e(s), r.manager.itemEnd(t) + }, 0), + s + ) + const a = document.createElementNS('http://www.w3.org/1999/xhtml', 'img') + function o() { + a.removeEventListener('load', o, !1), + a.removeEventListener('error', l, !1), + bo.add(t, this), + e && e(this), + r.manager.itemEnd(t) + } + function l(e) { + a.removeEventListener('load', o, !1), + a.removeEventListener('error', l, !1), + i && i(e), + r.manager.itemError(t), + r.manager.itemEnd(t) + } + return ( + a.addEventListener('load', o, !1), + a.addEventListener('error', l, !1), + 'data:' !== t.substr(0, 5) && + void 0 !== this.crossOrigin && + (a.crossOrigin = this.crossOrigin), + r.manager.itemStart(t), + (a.src = t), + a + ) + } + } + class Ao extends So { + constructor(t) { + super(t) + } + load(t, e, n, i) { + const r = new Tn(), + s = new Lo(this.manager) + s.setCrossOrigin(this.crossOrigin), s.setPath(this.path) + let a = 0 + function o(n) { + s.load( + t[n], + function (t) { + ;(r.images[n] = t), a++, 6 === a && ((r.needsUpdate = !0), e && e(r)) + }, + void 0, + i, + ) + } + for (let l = 0; l < t.length; ++l) o(l) + return r + } + } + class Ro extends So { + constructor(t) { + super(t) + } + load(t, e, n, i) { + const r = new st(), + s = new Lo(this.manager) + return ( + s.setCrossOrigin(this.crossOrigin), + s.setPath(this.path), + s.load( + t, + function (n) { + r.image = n + const i = t.search(/\.jpe?g($|\?)/i) > 0 || 0 === t.search(/^data\:image\/jpeg/) + ;(r.format = i ? T : E), (r.needsUpdate = !0), void 0 !== e && e(r) + }, + n, + i, + ), + r + ) + } + } + class Co extends Qs { + constructor() { + super(), (this.type = 'CurvePath'), (this.curves = []), (this.autoClose = !1) + } + add(t) { + this.curves.push(t) + } + closePath() { + const t = this.curves[0].getPoint(0), + e = this.curves[this.curves.length - 1].getPoint(1) + t.equals(e) || this.curves.push(new ua(e, t)) + } + getPoint(t) { + const e = t * this.getLength(), + n = this.getCurveLengths() + let i = 0 + for (; i < n.length; ) { + if (n[i] >= e) { + const t = n[i] - e, + r = this.curves[i], + s = r.getLength(), + a = 0 === s ? 0 : 1 - t / s + return r.getPointAt(a) + } + i++ + } + return null + } + getLength() { + const t = this.getCurveLengths() + return t[t.length - 1] + } + updateArcLengths() { + ;(this.needsUpdate = !0), (this.cacheLengths = null), this.getCurveLengths() + } + getCurveLengths() { + if (this.cacheLengths && this.cacheLengths.length === this.curves.length) + return this.cacheLengths + const t = [] + let e = 0 + for (let n = 0, i = this.curves.length; n < i; n++) + (e += this.curves[n].getLength()), t.push(e) + return (this.cacheLengths = t), t + } + getSpacedPoints(t = 40) { + const e = [] + for (let n = 0; n <= t; n++) e.push(this.getPoint(n / t)) + return this.autoClose && e.push(e[0]), e + } + getPoints(t = 12) { + const e = [] + let n + for (let i = 0, r = this.curves; i < r.length; i++) { + const s = r[i], + a = + s && s.isEllipseCurve + ? 2 * t + : s && (s.isLineCurve || s.isLineCurve3) + ? 1 + : s && s.isSplineCurve + ? t * s.points.length + : t, + o = s.getPoints(a) + for (let t = 0; t < o.length; t++) { + const i = o[t] + ;(n && n.equals(i)) || (e.push(i), (n = i)) + } + } + return this.autoClose && e.length > 1 && !e[e.length - 1].equals(e[0]) && e.push(e[0]), e + } + copy(t) { + super.copy(t), (this.curves = []) + for (let e = 0, n = t.curves.length; e < n; e++) { + const n = t.curves[e] + this.curves.push(n.clone()) + } + return (this.autoClose = t.autoClose), this + } + toJSON() { + const t = super.toJSON() + ;(t.autoClose = this.autoClose), (t.curves = []) + for (let e = 0, n = this.curves.length; e < n; e++) { + const n = this.curves[e] + t.curves.push(n.toJSON()) + } + return t + } + fromJSON(t) { + super.fromJSON(t), (this.autoClose = t.autoClose), (this.curves = []) + for (let e = 0, n = t.curves.length; e < n; e++) { + const n = t.curves[e] + this.curves.push(new fa[n.type]().fromJSON(n)) + } + return this + } + } + class Po extends Co { + constructor(t) { + super(), (this.type = 'Path'), (this.currentPoint = new tt()), t && this.setFromPoints(t) + } + setFromPoints(t) { + this.moveTo(t[0].x, t[0].y) + for (let e = 1, n = t.length; e < n; e++) this.lineTo(t[e].x, t[e].y) + return this + } + moveTo(t, e) { + return this.currentPoint.set(t, e), this + } + lineTo(t, e) { + const n = new ua(this.currentPoint.clone(), new tt(t, e)) + return this.curves.push(n), this.currentPoint.set(t, e), this + } + quadraticCurveTo(t, e, n, i) { + const r = new da(this.currentPoint.clone(), new tt(t, e), new tt(n, i)) + return this.curves.push(r), this.currentPoint.set(n, i), this + } + bezierCurveTo(t, e, n, i, r, s) { + const a = new ca(this.currentPoint.clone(), new tt(t, e), new tt(n, i), new tt(r, s)) + return this.curves.push(a), this.currentPoint.set(r, s), this + } + splineThru(t) { + const e = [this.currentPoint.clone()].concat(t), + n = new ma(e) + return this.curves.push(n), this.currentPoint.copy(t[t.length - 1]), this + } + arc(t, e, n, i, r, s) { + const a = this.currentPoint.x, + o = this.currentPoint.y + return this.absarc(t + a, e + o, n, i, r, s), this + } + absarc(t, e, n, i, r, s) { + return this.absellipse(t, e, n, n, i, r, s), this + } + ellipse(t, e, n, i, r, s, a, o) { + const l = this.currentPoint.x, + c = this.currentPoint.y + return this.absellipse(t + l, e + c, n, i, r, s, a, o), this + } + absellipse(t, e, n, i, r, s, a, o) { + const l = new Ks(t, e, n, i, r, s, a, o) + if (this.curves.length > 0) { + const t = l.getPoint(0) + t.equals(this.currentPoint) || this.lineTo(t.x, t.y) + } + this.curves.push(l) + const c = l.getPoint(1) + return this.currentPoint.copy(c), this + } + copy(t) { + return super.copy(t), this.currentPoint.copy(t.currentPoint), this + } + toJSON() { + const t = super.toJSON() + return (t.currentPoint = this.currentPoint.toArray()), t + } + fromJSON(t) { + return super.fromJSON(t), this.currentPoint.fromArray(t.currentPoint), this + } + } + class Do extends Po { + constructor(t) { + super(t), (this.uuid = Y()), (this.type = 'Shape'), (this.holes = []) + } + getPointsHoles(t) { + const e = [] + for (let n = 0, i = this.holes.length; n < i; n++) e[n] = this.holes[n].getPoints(t) + return e + } + extractPoints(t) { + return { shape: this.getPoints(t), holes: this.getPointsHoles(t) } + } + copy(t) { + super.copy(t), (this.holes = []) + for (let e = 0, n = t.holes.length; e < n; e++) { + const n = t.holes[e] + this.holes.push(n.clone()) + } + return this + } + toJSON() { + const t = super.toJSON() + ;(t.uuid = this.uuid), (t.holes = []) + for (let e = 0, n = this.holes.length; e < n; e++) { + const n = this.holes[e] + t.holes.push(n.toJSON()) + } + return t + } + fromJSON(t) { + super.fromJSON(t), (this.uuid = t.uuid), (this.holes = []) + for (let e = 0, n = t.holes.length; e < n; e++) { + const n = t.holes[e] + this.holes.push(new Po().fromJSON(n)) + } + return this + } + } + class Io extends pe { + constructor(t, e = 1) { + super(), (this.type = 'Light'), (this.color = new Ie(t)), (this.intensity = e) + } + dispose() {} + copy(t) { + return super.copy(t), this.color.copy(t.color), (this.intensity = t.intensity), this + } + toJSON(t) { + const e = super.toJSON(t) + return ( + (e.object.color = this.color.getHex()), + (e.object.intensity = this.intensity), + void 0 !== this.groundColor && (e.object.groundColor = this.groundColor.getHex()), + void 0 !== this.distance && (e.object.distance = this.distance), + void 0 !== this.angle && (e.object.angle = this.angle), + void 0 !== this.decay && (e.object.decay = this.decay), + void 0 !== this.penumbra && (e.object.penumbra = this.penumbra), + void 0 !== this.shadow && (e.object.shadow = this.shadow.toJSON()), + e + ) + } + } + Io.prototype.isLight = !0 + class No extends Io { + constructor(t, e, n) { + super(t, n), + (this.type = 'HemisphereLight'), + this.position.copy(pe.DefaultUp), + this.updateMatrix(), + (this.groundColor = new Ie(e)) + } + copy(t) { + return Io.prototype.copy.call(this, t), this.groundColor.copy(t.groundColor), this + } + } + No.prototype.isHemisphereLight = !0 + const zo = new Vt(), + Oo = new ut(), + Bo = new ut() + class Fo { + constructor(t) { + ;(this.camera = t), + (this.bias = 0), + (this.normalBias = 0), + (this.radius = 1), + (this.mapSize = new tt(512, 512)), + (this.map = null), + (this.mapPass = null), + (this.matrix = new Vt()), + (this.autoUpdate = !0), + (this.needsUpdate = !1), + (this._frustum = new In()), + (this._frameExtents = new tt(1, 1)), + (this._viewportCount = 1), + (this._viewports = [new ot(0, 0, 1, 1)]) + } + getViewportCount() { + return this._viewportCount + } + getFrustum() { + return this._frustum + } + updateMatrices(t) { + const e = this.camera, + n = this.matrix + Oo.setFromMatrixPosition(t.matrixWorld), + e.position.copy(Oo), + Bo.setFromMatrixPosition(t.target.matrixWorld), + e.lookAt(Bo), + e.updateMatrixWorld(), + zo.multiplyMatrices(e.projectionMatrix, e.matrixWorldInverse), + this._frustum.setFromProjectionMatrix(zo), + n.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1), + n.multiply(e.projectionMatrix), + n.multiply(e.matrixWorldInverse) + } + getViewport(t) { + return this._viewports[t] + } + getFrameExtents() { + return this._frameExtents + } + dispose() { + this.map && this.map.dispose(), this.mapPass && this.mapPass.dispose() + } + copy(t) { + return ( + (this.camera = t.camera.clone()), + (this.bias = t.bias), + (this.radius = t.radius), + this.mapSize.copy(t.mapSize), + this + ) + } + clone() { + return new this.constructor().copy(this) + } + toJSON() { + const t = {} + return ( + 0 !== this.bias && (t.bias = this.bias), + 0 !== this.normalBias && (t.normalBias = this.normalBias), + 1 !== this.radius && (t.radius = this.radius), + (512 === this.mapSize.x && 512 === this.mapSize.y) || + (t.mapSize = this.mapSize.toArray()), + (t.camera = this.camera.toJSON(!1).object), + delete t.camera.matrix, + t + ) + } + } + class Uo extends Fo { + constructor() { + super(new Mn(50, 1, 0.5, 500)), (this.focus = 1) + } + updateMatrices(t) { + const e = this.camera, + n = 2 * X * t.angle * this.focus, + i = this.mapSize.width / this.mapSize.height, + r = t.distance || e.far + ;(n === e.fov && i === e.aspect && r === e.far) || + ((e.fov = n), (e.aspect = i), (e.far = r), e.updateProjectionMatrix()), + super.updateMatrices(t) + } + copy(t) { + return super.copy(t), (this.focus = t.focus), this + } + } + Uo.prototype.isSpotLightShadow = !0 + class Ho extends Io { + constructor(t, e, n = 0, i = Math.PI / 3, r = 0, s = 1) { + super(t, e), + (this.type = 'SpotLight'), + this.position.copy(pe.DefaultUp), + this.updateMatrix(), + (this.target = new pe()), + (this.distance = n), + (this.angle = i), + (this.penumbra = r), + (this.decay = s), + (this.shadow = new Uo()) + } + get power() { + return this.intensity * Math.PI + } + set power(t) { + this.intensity = t / Math.PI + } + dispose() { + this.shadow.dispose() + } + copy(t) { + return ( + super.copy(t), + (this.distance = t.distance), + (this.angle = t.angle), + (this.penumbra = t.penumbra), + (this.decay = t.decay), + (this.target = t.target.clone()), + (this.shadow = t.shadow.clone()), + this + ) + } + } + Ho.prototype.isSpotLight = !0 + const Go = new Vt(), + Vo = new ut(), + ko = new ut() + class Wo extends Fo { + constructor() { + super(new Mn(90, 1, 0.5, 500)), + (this._frameExtents = new tt(4, 2)), + (this._viewportCount = 6), + (this._viewports = [ + new ot(2, 1, 1, 1), + new ot(0, 1, 1, 1), + new ot(3, 1, 1, 1), + new ot(1, 1, 1, 1), + new ot(3, 0, 1, 1), + new ot(1, 0, 1, 1), + ]), + (this._cubeDirections = [ + new ut(1, 0, 0), + new ut(-1, 0, 0), + new ut(0, 0, 1), + new ut(0, 0, -1), + new ut(0, 1, 0), + new ut(0, -1, 0), + ]), + (this._cubeUps = [ + new ut(0, 1, 0), + new ut(0, 1, 0), + new ut(0, 1, 0), + new ut(0, 1, 0), + new ut(0, 0, 1), + new ut(0, 0, -1), + ]) + } + updateMatrices(t, e = 0) { + const n = this.camera, + i = this.matrix, + r = t.distance || n.far + r !== n.far && ((n.far = r), n.updateProjectionMatrix()), + Vo.setFromMatrixPosition(t.matrixWorld), + n.position.copy(Vo), + ko.copy(n.position), + ko.add(this._cubeDirections[e]), + n.up.copy(this._cubeUps[e]), + n.lookAt(ko), + n.updateMatrixWorld(), + i.makeTranslation(-Vo.x, -Vo.y, -Vo.z), + Go.multiplyMatrices(n.projectionMatrix, n.matrixWorldInverse), + this._frustum.setFromProjectionMatrix(Go) + } + } + Wo.prototype.isPointLightShadow = !0 + class jo extends Io { + constructor(t, e, n = 0, i = 1) { + super(t, e), + (this.type = 'PointLight'), + (this.distance = n), + (this.decay = i), + (this.shadow = new Wo()) + } + get power() { + return 4 * this.intensity * Math.PI + } + set power(t) { + this.intensity = t / (4 * Math.PI) + } + dispose() { + this.shadow.dispose() + } + copy(t) { + return ( + super.copy(t), + (this.distance = t.distance), + (this.decay = t.decay), + (this.shadow = t.shadow.clone()), + this + ) + } + } + jo.prototype.isPointLight = !0 + class qo extends bn { + constructor(t = -1, e = 1, n = 1, i = -1, r = 0.1, s = 2e3) { + super(), + (this.type = 'OrthographicCamera'), + (this.zoom = 1), + (this.view = null), + (this.left = t), + (this.right = e), + (this.top = n), + (this.bottom = i), + (this.near = r), + (this.far = s), + this.updateProjectionMatrix() + } + copy(t, e) { + return ( + super.copy(t, e), + (this.left = t.left), + (this.right = t.right), + (this.top = t.top), + (this.bottom = t.bottom), + (this.near = t.near), + (this.far = t.far), + (this.zoom = t.zoom), + (this.view = null === t.view ? null : Object.assign({}, t.view)), + this + ) + } + setViewOffset(t, e, n, i, r, s) { + null === this.view && + (this.view = { + enabled: !0, + fullWidth: 1, + fullHeight: 1, + offsetX: 0, + offsetY: 0, + width: 1, + height: 1, + }), + (this.view.enabled = !0), + (this.view.fullWidth = t), + (this.view.fullHeight = e), + (this.view.offsetX = n), + (this.view.offsetY = i), + (this.view.width = r), + (this.view.height = s), + this.updateProjectionMatrix() + } + clearViewOffset() { + null !== this.view && (this.view.enabled = !1), this.updateProjectionMatrix() + } + updateProjectionMatrix() { + const t = (this.right - this.left) / (2 * this.zoom), + e = (this.top - this.bottom) / (2 * this.zoom), + n = (this.right + this.left) / 2, + i = (this.top + this.bottom) / 2 + let r = n - t, + s = n + t, + a = i + e, + o = i - e + if (null !== this.view && this.view.enabled) { + const t = (this.right - this.left) / this.view.fullWidth / this.zoom, + e = (this.top - this.bottom) / this.view.fullHeight / this.zoom + ;(r += t * this.view.offsetX), + (s = r + t * this.view.width), + (a -= e * this.view.offsetY), + (o = a - e * this.view.height) + } + this.projectionMatrix.makeOrthographic(r, s, a, o, this.near, this.far), + this.projectionMatrixInverse.copy(this.projectionMatrix).invert() + } + toJSON(t) { + const e = super.toJSON(t) + return ( + (e.object.zoom = this.zoom), + (e.object.left = this.left), + (e.object.right = this.right), + (e.object.top = this.top), + (e.object.bottom = this.bottom), + (e.object.near = this.near), + (e.object.far = this.far), + null !== this.view && (e.object.view = Object.assign({}, this.view)), + e + ) + } + } + qo.prototype.isOrthographicCamera = !0 + class Xo extends Fo { + constructor() { + super(new qo(-5, 5, 5, -5, 0.5, 500)) + } + } + Xo.prototype.isDirectionalLightShadow = !0 + class Yo extends Io { + constructor(t, e) { + super(t, e), + (this.type = 'DirectionalLight'), + this.position.copy(pe.DefaultUp), + this.updateMatrix(), + (this.target = new pe()), + (this.shadow = new Xo()) + } + dispose() { + this.shadow.dispose() + } + copy(t) { + return ( + super.copy(t), (this.target = t.target.clone()), (this.shadow = t.shadow.clone()), this + ) + } + } + Yo.prototype.isDirectionalLight = !0 + class Jo extends Io { + constructor(t, e) { + super(t, e), (this.type = 'AmbientLight') + } + } + Jo.prototype.isAmbientLight = !0 + class Zo extends Io { + constructor(t, e, n = 10, i = 10) { + super(t, e), (this.type = 'RectAreaLight'), (this.width = n), (this.height = i) + } + copy(t) { + return super.copy(t), (this.width = t.width), (this.height = t.height), this + } + toJSON(t) { + const e = super.toJSON(t) + return (e.object.width = this.width), (e.object.height = this.height), e + } + } + Zo.prototype.isRectAreaLight = !0 + class Qo { + constructor() { + this.coefficients = [] + for (let t = 0; t < 9; t++) this.coefficients.push(new ut()) + } + set(t) { + for (let e = 0; e < 9; e++) this.coefficients[e].copy(t[e]) + return this + } + zero() { + for (let t = 0; t < 9; t++) this.coefficients[t].set(0, 0, 0) + return this + } + getAt(t, e) { + const n = t.x, + i = t.y, + r = t.z, + s = this.coefficients + return ( + e.copy(s[0]).multiplyScalar(0.282095), + e.addScaledVector(s[1], 0.488603 * i), + e.addScaledVector(s[2], 0.488603 * r), + e.addScaledVector(s[3], 0.488603 * n), + e.addScaledVector(s[4], n * i * 1.092548), + e.addScaledVector(s[5], i * r * 1.092548), + e.addScaledVector(s[6], 0.315392 * (3 * r * r - 1)), + e.addScaledVector(s[7], n * r * 1.092548), + e.addScaledVector(s[8], 0.546274 * (n * n - i * i)), + e + ) + } + getIrradianceAt(t, e) { + const n = t.x, + i = t.y, + r = t.z, + s = this.coefficients + return ( + e.copy(s[0]).multiplyScalar(0.886227), + e.addScaledVector(s[1], 1.023328 * i), + e.addScaledVector(s[2], 1.023328 * r), + e.addScaledVector(s[3], 1.023328 * n), + e.addScaledVector(s[4], 0.858086 * n * i), + e.addScaledVector(s[5], 0.858086 * i * r), + e.addScaledVector(s[6], 0.743125 * r * r - 0.247708), + e.addScaledVector(s[7], 0.858086 * n * r), + e.addScaledVector(s[8], 0.429043 * (n * n - i * i)), + e + ) + } + add(t) { + for (let e = 0; e < 9; e++) this.coefficients[e].add(t.coefficients[e]) + return this + } + addScaledSH(t, e) { + for (let n = 0; n < 9; n++) this.coefficients[n].addScaledVector(t.coefficients[n], e) + return this + } + scale(t) { + for (let e = 0; e < 9; e++) this.coefficients[e].multiplyScalar(t) + return this + } + lerp(t, e) { + for (let n = 0; n < 9; n++) this.coefficients[n].lerp(t.coefficients[n], e) + return this + } + equals(t) { + for (let e = 0; e < 9; e++) if (!this.coefficients[e].equals(t.coefficients[e])) return !1 + return !0 + } + copy(t) { + return this.set(t.coefficients) + } + clone() { + return new this.constructor().copy(this) + } + fromArray(t, e = 0) { + const n = this.coefficients + for (let i = 0; i < 9; i++) n[i].fromArray(t, e + 3 * i) + return this + } + toArray(t = [], e = 0) { + const n = this.coefficients + for (let i = 0; i < 9; i++) n[i].toArray(t, e + 3 * i) + return t + } + static getBasisAt(t, e) { + const n = t.x, + i = t.y, + r = t.z + ;(e[0] = 0.282095), + (e[1] = 0.488603 * i), + (e[2] = 0.488603 * r), + (e[3] = 0.488603 * n), + (e[4] = 1.092548 * n * i), + (e[5] = 1.092548 * i * r), + (e[6] = 0.315392 * (3 * r * r - 1)), + (e[7] = 1.092548 * n * r), + (e[8] = 0.546274 * (n * n - i * i)) + } + } + Qo.prototype.isSphericalHarmonics3 = !0 + class Ko extends Io { + constructor(t = new Qo(), e = 1) { + super(void 0, e), (this.sh = t) + } + copy(t) { + return super.copy(t), this.sh.copy(t.sh), this + } + fromJSON(t) { + return (this.intensity = t.intensity), this.sh.fromArray(t.sh), this + } + toJSON(t) { + const e = super.toJSON(t) + return (e.object.sh = this.sh.toArray()), e + } + } + Ko.prototype.isLightProbe = !0 + class $o { + static decodeText(t) { + if ('undefined' !== typeof TextDecoder) return new TextDecoder().decode(t) + let e = '' + for (let i = 0, r = t.length; i < r; i++) e += String.fromCharCode(t[i]) + try { + return decodeURIComponent(escape(e)) + } catch (n) { + return e + } + } + static extractUrlBase(t) { + const e = t.lastIndexOf('/') + return -1 === e ? './' : t.substr(0, e + 1) + } + } + class tl extends Je { + constructor() { + super(), (this.type = 'InstancedBufferGeometry'), (this.instanceCount = 1 / 0) + } + copy(t) { + return super.copy(t), (this.instanceCount = t.instanceCount), this + } + clone() { + return new this.constructor().copy(this) + } + toJSON() { + const t = super.toJSON(this) + return (t.instanceCount = this.instanceCount), (t.isInstancedBufferGeometry = !0), t + } + } + tl.prototype.isInstancedBufferGeometry = !0 + class el extends Be { + constructor(t, e, n, i = 1) { + 'number' === typeof n && + ((i = n), + (n = !1), + console.error( + 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.', + )), + super(t, e, n), + (this.meshPerAttribute = i) + } + copy(t) { + return super.copy(t), (this.meshPerAttribute = t.meshPerAttribute), this + } + toJSON() { + const t = super.toJSON() + return ( + (t.meshPerAttribute = this.meshPerAttribute), (t.isInstancedBufferAttribute = !0), t + ) + } + } + el.prototype.isInstancedBufferAttribute = !0 + ;(class extends So { + constructor(t) { + super(t), + 'undefined' === typeof createImageBitmap && + console.warn('THREE.ImageBitmapLoader: createImageBitmap() not supported.'), + 'undefined' === typeof fetch && + console.warn('THREE.ImageBitmapLoader: fetch() not supported.'), + (this.options = { premultiplyAlpha: 'none' }) + } + setOptions(t) { + return (this.options = t), this + } + load(t, e, n, i) { + void 0 === t && (t = ''), + void 0 !== this.path && (t = this.path + t), + (t = this.manager.resolveURL(t)) + const r = this, + s = bo.get(t) + if (void 0 !== s) + return ( + r.manager.itemStart(t), + setTimeout(function () { + e && e(s), r.manager.itemEnd(t) + }, 0), + s + ) + const a = {} + ;(a.credentials = 'anonymous' === this.crossOrigin ? 'same-origin' : 'include'), + (a.headers = this.requestHeader), + fetch(t, a) + .then(function (t) { + return t.blob() + }) + .then(function (t) { + return createImageBitmap( + t, + Object.assign(r.options, { colorSpaceConversion: 'none' }), + ) + }) + .then(function (n) { + bo.add(t, n), e && e(n), r.manager.itemEnd(t) + }) + .catch(function (e) { + i && i(e), r.manager.itemError(t), r.manager.itemEnd(t) + }), + r.manager.itemStart(t) + } + }.prototype.isImageBitmapLoader = !0) + class nl { + constructor() { + ;(this.type = 'ShapePath'), + (this.color = new Ie()), + (this.subPaths = []), + (this.currentPath = null) + } + moveTo(t, e) { + return ( + (this.currentPath = new Po()), + this.subPaths.push(this.currentPath), + this.currentPath.moveTo(t, e), + this + ) + } + lineTo(t, e) { + return this.currentPath.lineTo(t, e), this + } + quadraticCurveTo(t, e, n, i) { + return this.currentPath.quadraticCurveTo(t, e, n, i), this + } + bezierCurveTo(t, e, n, i, r, s) { + return this.currentPath.bezierCurveTo(t, e, n, i, r, s), this + } + splineThru(t) { + return this.currentPath.splineThru(t), this + } + toShapes(t, e) { + function n(t) { + const e = [] + for (let n = 0, i = t.length; n < i; n++) { + const i = t[n], + r = new Do() + ;(r.curves = i.curves), e.push(r) + } + return e + } + function i(t, e) { + const n = e.length + let i = !1 + for (let r = n - 1, s = 0; s < n; r = s++) { + let n = e[r], + a = e[s], + o = a.x - n.x, + l = a.y - n.y + if (Math.abs(l) > Number.EPSILON) { + if ((l < 0 && ((n = e[s]), (o = -o), (a = e[r]), (l = -l)), t.y < n.y || t.y > a.y)) + continue + if (t.y === n.y) { + if (t.x === n.x) return !0 + } else { + const e = l * (t.x - n.x) - o * (t.y - n.y) + if (0 === e) return !0 + if (e < 0) continue + i = !i + } + } else { + if (t.y !== n.y) continue + if ((a.x <= t.x && t.x <= n.x) || (n.x <= t.x && t.x <= a.x)) return !0 + } + } + return i + } + const r = Ga.isClockWise, + s = this.subPaths + if (0 === s.length) return [] + if (!0 === e) return n(s) + let a, o, l + const c = [] + if (1 === s.length) return (o = s[0]), (l = new Do()), (l.curves = o.curves), c.push(l), c + let h = !r(s[0].getPoints()) + h = t ? !h : h + const u = [], + d = [] + let p, + m, + f = [], + g = 0 + ;(d[g] = void 0), (f[g] = []) + for (let v = 0, y = s.length; v < y; v++) + (o = s[v]), + (p = o.getPoints()), + (a = r(p)), + (a = t ? !a : a), + a + ? (!h && d[g] && g++, + (d[g] = { s: new Do(), p: p }), + (d[g].s.curves = o.curves), + h && g++, + (f[g] = [])) + : f[g].push({ h: o, p: p[0] }) + if (!d[0]) return n(s) + if (d.length > 1) { + let t = !1 + const e = [] + for (let n = 0, i = d.length; n < i; n++) u[n] = [] + for (let n = 0, r = d.length; n < r; n++) { + const r = f[n] + for (let s = 0; s < r.length; s++) { + const a = r[s] + let o = !0 + for (let r = 0; r < d.length; r++) + i(a.p, d[r].p) && + (n !== r && e.push({ froms: n, tos: r, hole: s }), + o ? ((o = !1), u[r].push(a)) : (t = !0)) + o && u[n].push(a) + } + } + e.length > 0 && (t || (f = u)) + } + for (let v = 0, y = d.length; v < y; v++) { + ;(l = d[v].s), c.push(l), (m = f[v]) + for (let t = 0, e = m.length; t < e; t++) l.holes.push(m[t].h) + } + return c + } + } + class il { + constructor(t) { + ;(this.type = 'Font'), (this.data = t) + } + generateShapes(t, e = 100) { + const n = [], + i = (function (t, e, n) { + const i = Array.from(t), + r = e / n.resolution, + s = (n.boundingBox.yMax - n.boundingBox.yMin + n.underlineThickness) * r, + a = [] + let o = 0, + l = 0 + for (let c = 0; c < i.length; c++) { + const t = i[c] + if ('\n' === t) (o = 0), (l -= s) + else { + const e = rl(t, r, o, l, n) + ;(o += e.offsetX), a.push(e.path) + } + } + return a + })(t, e, this.data) + for (let r = 0, s = i.length; r < s; r++) Array.prototype.push.apply(n, i[r].toShapes()) + return n + } + } + function rl(t, e, n, i, r) { + const s = r.glyphs[t] || r.glyphs['?'] + if (!s) + return void console.error( + 'THREE.Font: character "' + + t + + '" does not exists in font family ' + + r.familyName + + '.', + ) + const a = new nl() + let o, l, c, h, u, d, p, m + if (s.o) { + const t = s._cachedOutline || (s._cachedOutline = s.o.split(' ')) + for (let r = 0, s = t.length; r < s; ) { + switch (t[r++]) { + case 'm': + ;(o = t[r++] * e + n), (l = t[r++] * e + i), a.moveTo(o, l) + break + case 'l': + ;(o = t[r++] * e + n), (l = t[r++] * e + i), a.lineTo(o, l) + break + case 'q': + ;(c = t[r++] * e + n), + (h = t[r++] * e + i), + (u = t[r++] * e + n), + (d = t[r++] * e + i), + a.quadraticCurveTo(u, d, c, h) + break + case 'b': + ;(c = t[r++] * e + n), + (h = t[r++] * e + i), + (u = t[r++] * e + n), + (d = t[r++] * e + i), + (p = t[r++] * e + n), + (m = t[r++] * e + i), + a.bezierCurveTo(u, d, p, m, c, h) + } + } + } + return { offsetX: s.ha * e, path: a } + } + il.prototype.isFont = !0 + let sl + const al = function () { + return void 0 === sl && (sl = new (window.AudioContext || window.webkitAudioContext)()), sl + } + class ol extends So { + constructor(t) { + super(t) + } + load(t, e, n, i) { + const r = this, + s = new Eo(this.manager) + s.setResponseType('arraybuffer'), + s.setPath(this.path), + s.setRequestHeader(this.requestHeader), + s.setWithCredentials(this.withCredentials), + s.load( + t, + function (n) { + try { + const t = n.slice(0) + al().decodeAudioData(t, function (t) { + e(t) + }) + } catch (s) { + i ? i(s) : console.error(s), r.manager.itemError(t) + } + }, + n, + i, + ) + } + } + ;(class extends Ko { + constructor(t, e, n = 1) { + super(void 0, n) + const i = new Ie().set(t), + r = new Ie().set(e), + s = new ut(i.r, i.g, i.b), + a = new ut(r.r, r.g, r.b), + o = Math.sqrt(Math.PI), + l = o * Math.sqrt(0.75) + this.sh.coefficients[0].copy(s).add(a).multiplyScalar(o), + this.sh.coefficients[1].copy(s).sub(a).multiplyScalar(l) + } + }.prototype.isHemisphereLightProbe = !0) + ;(class extends Ko { + constructor(t, e = 1) { + super(void 0, e) + const n = new Ie().set(t) + this.sh.coefficients[0].set(n.r, n.g, n.b).multiplyScalar(2 * Math.sqrt(Math.PI)) + } + }.prototype.isAmbientLightProbe = !0) + class ll { + constructor(t = !0) { + ;(this.autoStart = t), + (this.startTime = 0), + (this.oldTime = 0), + (this.elapsedTime = 0), + (this.running = !1) + } + start() { + ;(this.startTime = cl()), + (this.oldTime = this.startTime), + (this.elapsedTime = 0), + (this.running = !0) + } + stop() { + this.getElapsedTime(), (this.running = !1), (this.autoStart = !1) + } + getElapsedTime() { + return this.getDelta(), this.elapsedTime + } + getDelta() { + let t = 0 + if (this.autoStart && !this.running) return this.start(), 0 + if (this.running) { + const e = cl() + ;(t = (e - this.oldTime) / 1e3), (this.oldTime = e), (this.elapsedTime += t) + } + return t + } + } + function cl() { + return ('undefined' === typeof performance ? Date : performance).now() + } + class hl extends pe { + constructor(t) { + super(), + (this.type = 'Audio'), + (this.listener = t), + (this.context = t.context), + (this.gain = this.context.createGain()), + this.gain.connect(t.getInput()), + (this.autoplay = !1), + (this.buffer = null), + (this.detune = 0), + (this.loop = !1), + (this.loopStart = 0), + (this.loopEnd = 0), + (this.offset = 0), + (this.duration = void 0), + (this.playbackRate = 1), + (this.isPlaying = !1), + (this.hasPlaybackControl = !0), + (this.source = null), + (this.sourceType = 'empty'), + (this._startedAt = 0), + (this._progress = 0), + (this._connected = !1), + (this.filters = []) + } + getOutput() { + return this.gain + } + setNodeSource(t) { + return ( + (this.hasPlaybackControl = !1), + (this.sourceType = 'audioNode'), + (this.source = t), + this.connect(), + this + ) + } + setMediaElementSource(t) { + return ( + (this.hasPlaybackControl = !1), + (this.sourceType = 'mediaNode'), + (this.source = this.context.createMediaElementSource(t)), + this.connect(), + this + ) + } + setMediaStreamSource(t) { + return ( + (this.hasPlaybackControl = !1), + (this.sourceType = 'mediaStreamNode'), + (this.source = this.context.createMediaStreamSource(t)), + this.connect(), + this + ) + } + setBuffer(t) { + return (this.buffer = t), (this.sourceType = 'buffer'), this.autoplay && this.play(), this + } + play(t = 0) { + if (!0 === this.isPlaying) + return void console.warn('THREE.Audio: Audio is already playing.') + if (!1 === this.hasPlaybackControl) + return void console.warn('THREE.Audio: this Audio has no playback control.') + this._startedAt = this.context.currentTime + t + const e = this.context.createBufferSource() + return ( + (e.buffer = this.buffer), + (e.loop = this.loop), + (e.loopStart = this.loopStart), + (e.loopEnd = this.loopEnd), + (e.onended = this.onEnded.bind(this)), + e.start(this._startedAt, this._progress + this.offset, this.duration), + (this.isPlaying = !0), + (this.source = e), + this.setDetune(this.detune), + this.setPlaybackRate(this.playbackRate), + this.connect() + ) + } + pause() { + if (!1 !== this.hasPlaybackControl) + return ( + !0 === this.isPlaying && + ((this._progress += + Math.max(this.context.currentTime - this._startedAt, 0) * this.playbackRate), + !0 === this.loop && + (this._progress = this._progress % (this.duration || this.buffer.duration)), + this.source.stop(), + (this.source.onended = null), + (this.isPlaying = !1)), + this + ) + console.warn('THREE.Audio: this Audio has no playback control.') + } + stop() { + if (!1 !== this.hasPlaybackControl) + return ( + (this._progress = 0), + this.source.stop(), + (this.source.onended = null), + (this.isPlaying = !1), + this + ) + console.warn('THREE.Audio: this Audio has no playback control.') + } + connect() { + if (this.filters.length > 0) { + this.source.connect(this.filters[0]) + for (let t = 1, e = this.filters.length; t < e; t++) + this.filters[t - 1].connect(this.filters[t]) + this.filters[this.filters.length - 1].connect(this.getOutput()) + } else this.source.connect(this.getOutput()) + return (this._connected = !0), this + } + disconnect() { + if (this.filters.length > 0) { + this.source.disconnect(this.filters[0]) + for (let t = 1, e = this.filters.length; t < e; t++) + this.filters[t - 1].disconnect(this.filters[t]) + this.filters[this.filters.length - 1].disconnect(this.getOutput()) + } else this.source.disconnect(this.getOutput()) + return (this._connected = !1), this + } + getFilters() { + return this.filters + } + setFilters(t) { + return ( + t || (t = []), + !0 === this._connected + ? (this.disconnect(), (this.filters = t.slice()), this.connect()) + : (this.filters = t.slice()), + this + ) + } + setDetune(t) { + if (((this.detune = t), void 0 !== this.source.detune)) + return ( + !0 === this.isPlaying && + this.source.detune.setTargetAtTime(this.detune, this.context.currentTime, 0.01), + this + ) + } + getDetune() { + return this.detune + } + getFilter() { + return this.getFilters()[0] + } + setFilter(t) { + return this.setFilters(t ? [t] : []) + } + setPlaybackRate(t) { + if (!1 !== this.hasPlaybackControl) + return ( + (this.playbackRate = t), + !0 === this.isPlaying && + this.source.playbackRate.setTargetAtTime( + this.playbackRate, + this.context.currentTime, + 0.01, + ), + this + ) + console.warn('THREE.Audio: this Audio has no playback control.') + } + getPlaybackRate() { + return this.playbackRate + } + onEnded() { + this.isPlaying = !1 + } + getLoop() { + return !1 === this.hasPlaybackControl + ? (console.warn('THREE.Audio: this Audio has no playback control.'), !1) + : this.loop + } + setLoop(t) { + if (!1 !== this.hasPlaybackControl) + return (this.loop = t), !0 === this.isPlaying && (this.source.loop = this.loop), this + console.warn('THREE.Audio: this Audio has no playback control.') + } + setLoopStart(t) { + return (this.loopStart = t), this + } + setLoopEnd(t) { + return (this.loopEnd = t), this + } + getVolume() { + return this.gain.gain.value + } + setVolume(t) { + return this.gain.gain.setTargetAtTime(t, this.context.currentTime, 0.01), this + } + } + class ul { + constructor(t, e, n) { + let i, r, s + switch (((this.binding = t), (this.valueSize = n), e)) { + case 'quaternion': + ;(i = this._slerp), + (r = this._slerpAdditive), + (s = this._setAdditiveIdentityQuaternion), + (this.buffer = new Float64Array(6 * n)), + (this._workIndex = 5) + break + case 'string': + case 'bool': + ;(i = this._select), + (r = this._select), + (s = this._setAdditiveIdentityOther), + (this.buffer = new Array(5 * n)) + break + default: + ;(i = this._lerp), + (r = this._lerpAdditive), + (s = this._setAdditiveIdentityNumeric), + (this.buffer = new Float64Array(5 * n)) + } + ;(this._mixBufferRegion = i), + (this._mixBufferRegionAdditive = r), + (this._setIdentity = s), + (this._origIndex = 3), + (this._addIndex = 4), + (this.cumulativeWeight = 0), + (this.cumulativeWeightAdditive = 0), + (this.useCount = 0), + (this.referenceCount = 0) + } + accumulate(t, e) { + const n = this.buffer, + i = this.valueSize, + r = t * i + i + let s = this.cumulativeWeight + if (0 === s) { + for (let t = 0; t !== i; ++t) n[r + t] = n[t] + s = e + } else { + s += e + const t = e / s + this._mixBufferRegion(n, r, 0, t, i) + } + this.cumulativeWeight = s + } + accumulateAdditive(t) { + const e = this.buffer, + n = this.valueSize, + i = n * this._addIndex + 0 === this.cumulativeWeightAdditive && this._setIdentity(), + this._mixBufferRegionAdditive(e, i, 0, t, n), + (this.cumulativeWeightAdditive += t) + } + apply(t) { + const e = this.valueSize, + n = this.buffer, + i = t * e + e, + r = this.cumulativeWeight, + s = this.cumulativeWeightAdditive, + a = this.binding + if (((this.cumulativeWeight = 0), (this.cumulativeWeightAdditive = 0), r < 1)) { + const t = e * this._origIndex + this._mixBufferRegion(n, i, t, 1 - r, e) + } + s > 0 && this._mixBufferRegionAdditive(n, i, this._addIndex * e, 1, e) + for (let o = e, l = e + e; o !== l; ++o) + if (n[o] !== n[o + e]) { + a.setValue(n, i) + break + } + } + saveOriginalState() { + const t = this.binding, + e = this.buffer, + n = this.valueSize, + i = n * this._origIndex + t.getValue(e, i) + for (let r = n, s = i; r !== s; ++r) e[r] = e[i + (r % n)] + this._setIdentity(), (this.cumulativeWeight = 0), (this.cumulativeWeightAdditive = 0) + } + restoreOriginalState() { + const t = 3 * this.valueSize + this.binding.setValue(this.buffer, t) + } + _setAdditiveIdentityNumeric() { + const t = this._addIndex * this.valueSize, + e = t + this.valueSize + for (let n = t; n < e; n++) this.buffer[n] = 0 + } + _setAdditiveIdentityQuaternion() { + this._setAdditiveIdentityNumeric(), (this.buffer[this._addIndex * this.valueSize + 3] = 1) + } + _setAdditiveIdentityOther() { + const t = this._origIndex * this.valueSize, + e = this._addIndex * this.valueSize + for (let n = 0; n < this.valueSize; n++) this.buffer[e + n] = this.buffer[t + n] + } + _select(t, e, n, i, r) { + if (i >= 0.5) for (let s = 0; s !== r; ++s) t[e + s] = t[n + s] + } + _slerp(t, e, n, i) { + ht.slerpFlat(t, e, t, e, t, n, i) + } + _slerpAdditive(t, e, n, i, r) { + const s = this._workIndex * r + ht.multiplyQuaternionsFlat(t, s, t, e, t, n), ht.slerpFlat(t, e, t, e, t, s, i) + } + _lerp(t, e, n, i, r) { + const s = 1 - i + for (let a = 0; a !== r; ++a) { + const r = e + a + t[r] = t[r] * s + t[n + a] * i + } + } + _lerpAdditive(t, e, n, i, r) { + for (let s = 0; s !== r; ++s) { + const r = e + s + t[r] = t[r] + t[n + s] * i + } + } + } + const dl = '\\[\\]\\.:\\/', + pl = new RegExp('[\\[\\]\\.:\\/]', 'g'), + ml = '[^\\[\\]\\.:\\/]', + fl = '[^' + dl.replace('\\.', '') + ']', + gl = /((?:WC+[\/:])*)/.source.replace('WC', ml), + vl = /(WCOD+)?/.source.replace('WCOD', fl), + yl = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace('WC', ml), + xl = /\.(WC+)(?:\[(.+)\])?/.source.replace('WC', ml), + _l = new RegExp('^' + gl + vl + yl + xl + '$'), + bl = ['material', 'materials', 'bones'] + class Ml { + constructor(t, e, n) { + ;(this.path = e), + (this.parsedPath = n || Ml.parseTrackName(e)), + (this.node = Ml.findNode(t, this.parsedPath.nodeName) || t), + (this.rootNode = t), + (this.getValue = this._getValue_unbound), + (this.setValue = this._setValue_unbound) + } + static create(t, e, n) { + return t && t.isAnimationObjectGroup ? new Ml.Composite(t, e, n) : new Ml(t, e, n) + } + static sanitizeNodeName(t) { + return t.replace(/\s/g, '_').replace(pl, '') + } + static parseTrackName(t) { + const e = _l.exec(t) + if (!e) throw new Error('PropertyBinding: Cannot parse trackName: ' + t) + const n = { + nodeName: e[2], + objectName: e[3], + objectIndex: e[4], + propertyName: e[5], + propertyIndex: e[6], + }, + i = n.nodeName && n.nodeName.lastIndexOf('.') + if (void 0 !== i && -1 !== i) { + const t = n.nodeName.substring(i + 1) + ;-1 !== bl.indexOf(t) && ((n.nodeName = n.nodeName.substring(0, i)), (n.objectName = t)) + } + if (null === n.propertyName || 0 === n.propertyName.length) + throw new Error('PropertyBinding: can not parse propertyName from trackName: ' + t) + return n + } + static findNode(t, e) { + if (!e || '' === e || '.' === e || -1 === e || e === t.name || e === t.uuid) return t + if (t.skeleton) { + const n = t.skeleton.getBoneByName(e) + if (void 0 !== n) return n + } + if (t.children) { + const n = function (t) { + for (let i = 0; i < t.length; i++) { + const r = t[i] + if (r.name === e || r.uuid === e) return r + const s = n(r.children) + if (s) return s + } + return null + }, + i = n(t.children) + if (i) return i + } + return null + } + _getValue_unavailable() {} + _setValue_unavailable() {} + _getValue_direct(t, e) { + t[e] = this.node[this.propertyName] + } + _getValue_array(t, e) { + const n = this.resolvedProperty + for (let i = 0, r = n.length; i !== r; ++i) t[e++] = n[i] + } + _getValue_arrayElement(t, e) { + t[e] = this.resolvedProperty[this.propertyIndex] + } + _getValue_toArray(t, e) { + this.resolvedProperty.toArray(t, e) + } + _setValue_direct(t, e) { + this.targetObject[this.propertyName] = t[e] + } + _setValue_direct_setNeedsUpdate(t, e) { + ;(this.targetObject[this.propertyName] = t[e]), (this.targetObject.needsUpdate = !0) + } + _setValue_direct_setMatrixWorldNeedsUpdate(t, e) { + ;(this.targetObject[this.propertyName] = t[e]), + (this.targetObject.matrixWorldNeedsUpdate = !0) + } + _setValue_array(t, e) { + const n = this.resolvedProperty + for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++] + } + _setValue_array_setNeedsUpdate(t, e) { + const n = this.resolvedProperty + for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++] + this.targetObject.needsUpdate = !0 + } + _setValue_array_setMatrixWorldNeedsUpdate(t, e) { + const n = this.resolvedProperty + for (let i = 0, r = n.length; i !== r; ++i) n[i] = t[e++] + this.targetObject.matrixWorldNeedsUpdate = !0 + } + _setValue_arrayElement(t, e) { + this.resolvedProperty[this.propertyIndex] = t[e] + } + _setValue_arrayElement_setNeedsUpdate(t, e) { + ;(this.resolvedProperty[this.propertyIndex] = t[e]), (this.targetObject.needsUpdate = !0) + } + _setValue_arrayElement_setMatrixWorldNeedsUpdate(t, e) { + ;(this.resolvedProperty[this.propertyIndex] = t[e]), + (this.targetObject.matrixWorldNeedsUpdate = !0) + } + _setValue_fromArray(t, e) { + this.resolvedProperty.fromArray(t, e) + } + _setValue_fromArray_setNeedsUpdate(t, e) { + this.resolvedProperty.fromArray(t, e), (this.targetObject.needsUpdate = !0) + } + _setValue_fromArray_setMatrixWorldNeedsUpdate(t, e) { + this.resolvedProperty.fromArray(t, e), (this.targetObject.matrixWorldNeedsUpdate = !0) + } + _getValue_unbound(t, e) { + this.bind(), this.getValue(t, e) + } + _setValue_unbound(t, e) { + this.bind(), this.setValue(t, e) + } + bind() { + let t = this.node + const e = this.parsedPath, + n = e.objectName, + i = e.propertyName + let r = e.propertyIndex + if ( + (t || ((t = Ml.findNode(this.rootNode, e.nodeName) || this.rootNode), (this.node = t)), + (this.getValue = this._getValue_unavailable), + (this.setValue = this._setValue_unavailable), + !t) + ) + return void console.error( + 'THREE.PropertyBinding: Trying to update node for track: ' + + this.path + + " but it wasn't found.", + ) + if (n) { + let i = e.objectIndex + switch (n) { + case 'materials': + if (!t.material) + return void console.error( + 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', + this, + ) + if (!t.material.materials) + return void console.error( + 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', + this, + ) + t = t.material.materials + break + case 'bones': + if (!t.skeleton) + return void console.error( + 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', + this, + ) + t = t.skeleton.bones + for (let e = 0; e < t.length; e++) + if (t[e].name === i) { + i = e + break + } + break + default: + if (void 0 === t[n]) + return void console.error( + 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', + this, + ) + t = t[n] + } + if (void 0 !== i) { + if (void 0 === t[i]) + return void console.error( + 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', + this, + t, + ) + t = t[i] + } + } + const s = t[i] + if (void 0 === s) { + const n = e.nodeName + return void console.error( + 'THREE.PropertyBinding: Trying to update property for track: ' + + n + + '.' + + i + + " but it wasn't found.", + t, + ) + } + let a = this.Versioning.None + ;(this.targetObject = t), + void 0 !== t.needsUpdate + ? (a = this.Versioning.NeedsUpdate) + : void 0 !== t.matrixWorldNeedsUpdate && (a = this.Versioning.MatrixWorldNeedsUpdate) + let o = this.BindingType.Direct + if (void 0 !== r) { + if ('morphTargetInfluences' === i) { + if (!t.geometry) + return void console.error( + 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', + this, + ) + if (!t.geometry.isBufferGeometry) + return void console.error( + 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', + this, + ) + if (!t.geometry.morphAttributes) + return void console.error( + 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', + this, + ) + void 0 !== t.morphTargetDictionary[r] && (r = t.morphTargetDictionary[r]) + } + ;(o = this.BindingType.ArrayElement), + (this.resolvedProperty = s), + (this.propertyIndex = r) + } else + void 0 !== s.fromArray && void 0 !== s.toArray + ? ((o = this.BindingType.HasFromToArray), (this.resolvedProperty = s)) + : Array.isArray(s) + ? ((o = this.BindingType.EntireArray), (this.resolvedProperty = s)) + : (this.propertyName = i) + ;(this.getValue = this.GetterByBindingType[o]), + (this.setValue = this.SetterByBindingTypeAndVersioning[o][a]) + } + unbind() { + ;(this.node = null), + (this.getValue = this._getValue_unbound), + (this.setValue = this._setValue_unbound) + } + } + ;(Ml.Composite = class { + constructor(t, e, n) { + const i = n || Ml.parseTrackName(e) + ;(this._targetGroup = t), (this._bindings = t.subscribe_(e, i)) + } + getValue(t, e) { + this.bind() + const n = this._targetGroup.nCachedObjects_, + i = this._bindings[n] + void 0 !== i && i.getValue(t, e) + } + setValue(t, e) { + const n = this._bindings + for (let i = this._targetGroup.nCachedObjects_, r = n.length; i !== r; ++i) + n[i].setValue(t, e) + } + bind() { + const t = this._bindings + for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e) t[e].bind() + } + unbind() { + const t = this._bindings + for (let e = this._targetGroup.nCachedObjects_, n = t.length; e !== n; ++e) t[e].unbind() + } + }), + (Ml.prototype.BindingType = { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3, + }), + (Ml.prototype.Versioning = { None: 0, NeedsUpdate: 1, MatrixWorldNeedsUpdate: 2 }), + (Ml.prototype.GetterByBindingType = [ + Ml.prototype._getValue_direct, + Ml.prototype._getValue_array, + Ml.prototype._getValue_arrayElement, + Ml.prototype._getValue_toArray, + ]), + (Ml.prototype.SetterByBindingTypeAndVersioning = [ + [ + Ml.prototype._setValue_direct, + Ml.prototype._setValue_direct_setNeedsUpdate, + Ml.prototype._setValue_direct_setMatrixWorldNeedsUpdate, + ], + [ + Ml.prototype._setValue_array, + Ml.prototype._setValue_array_setNeedsUpdate, + Ml.prototype._setValue_array_setMatrixWorldNeedsUpdate, + ], + [ + Ml.prototype._setValue_arrayElement, + Ml.prototype._setValue_arrayElement_setNeedsUpdate, + Ml.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate, + ], + [ + Ml.prototype._setValue_fromArray, + Ml.prototype._setValue_fromArray_setNeedsUpdate, + Ml.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate, + ], + ]) + ;(class { + constructor() { + ;(this.uuid = Y()), + (this._objects = Array.prototype.slice.call(arguments)), + (this.nCachedObjects_ = 0) + const t = {} + this._indicesByUUID = t + for (let n = 0, i = arguments.length; n !== i; ++n) t[arguments[n].uuid] = n + ;(this._paths = []), + (this._parsedPaths = []), + (this._bindings = []), + (this._bindingsIndicesByPath = {}) + const e = this + this.stats = { + objects: { + get total() { + return e._objects.length + }, + get inUse() { + return this.total - e.nCachedObjects_ + }, + }, + get bindingsPerObject() { + return e._bindings.length + }, + } + } + add() { + const t = this._objects, + e = this._indicesByUUID, + n = this._paths, + i = this._parsedPaths, + r = this._bindings, + s = r.length + let a, + o = t.length, + l = this.nCachedObjects_ + for (let c = 0, h = arguments.length; c !== h; ++c) { + const h = arguments[c], + u = h.uuid + let d = e[u] + if (void 0 === d) { + ;(d = o++), (e[u] = d), t.push(h) + for (let t = 0, e = s; t !== e; ++t) r[t].push(new Ml(h, n[t], i[t])) + } else if (d < l) { + a = t[d] + const o = --l, + c = t[o] + ;(e[c.uuid] = d), (t[d] = c), (e[u] = o), (t[o] = h) + for (let t = 0, e = s; t !== e; ++t) { + const e = r[t], + s = e[o] + let a = e[d] + ;(e[d] = s), void 0 === a && (a = new Ml(h, n[t], i[t])), (e[o] = a) + } + } else + t[d] !== a && + console.error( + 'THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.', + ) + } + this.nCachedObjects_ = l + } + remove() { + const t = this._objects, + e = this._indicesByUUID, + n = this._bindings, + i = n.length + let r = this.nCachedObjects_ + for (let s = 0, a = arguments.length; s !== a; ++s) { + const a = arguments[s], + o = a.uuid, + l = e[o] + if (void 0 !== l && l >= r) { + const s = r++, + c = t[s] + ;(e[c.uuid] = l), (t[l] = c), (e[o] = s), (t[s] = a) + for (let t = 0, e = i; t !== e; ++t) { + const e = n[t], + i = e[s], + r = e[l] + ;(e[l] = i), (e[s] = r) + } + } + } + this.nCachedObjects_ = r + } + uncache() { + const t = this._objects, + e = this._indicesByUUID, + n = this._bindings, + i = n.length + let r = this.nCachedObjects_, + s = t.length + for (let a = 0, o = arguments.length; a !== o; ++a) { + const o = arguments[a].uuid, + l = e[o] + if (void 0 !== l) + if ((delete e[o], l < r)) { + const a = --r, + o = t[a], + c = --s, + h = t[c] + ;(e[o.uuid] = l), (t[l] = o), (e[h.uuid] = a), (t[a] = h), t.pop() + for (let t = 0, e = i; t !== e; ++t) { + const e = n[t], + i = e[a], + r = e[c] + ;(e[l] = i), (e[a] = r), e.pop() + } + } else { + const r = --s, + a = t[r] + r > 0 && (e[a.uuid] = l), (t[l] = a), t.pop() + for (let t = 0, e = i; t !== e; ++t) { + const e = n[t] + ;(e[l] = e[r]), e.pop() + } + } + } + this.nCachedObjects_ = r + } + subscribe_(t, e) { + const n = this._bindingsIndicesByPath + let i = n[t] + const r = this._bindings + if (void 0 !== i) return r[i] + const s = this._paths, + a = this._parsedPaths, + o = this._objects, + l = o.length, + c = this.nCachedObjects_, + h = new Array(l) + ;(i = r.length), (n[t] = i), s.push(t), a.push(e), r.push(h) + for (let u = c, d = o.length; u !== d; ++u) { + const n = o[u] + h[u] = new Ml(n, t, e) + } + return h + } + unsubscribe_(t) { + const e = this._bindingsIndicesByPath, + n = e[t] + if (void 0 !== n) { + const i = this._paths, + r = this._parsedPaths, + s = this._bindings, + a = s.length - 1, + o = s[a] + ;(e[t[a]] = n), (s[n] = o), s.pop(), (r[n] = r[a]), r.pop(), (i[n] = i[a]), i.pop() + } + } + }.prototype.isAnimationObjectGroup = !0) + class wl { + constructor(t, e, n = null, i = e.blendMode) { + ;(this._mixer = t), (this._clip = e), (this._localRoot = n), (this.blendMode = i) + const r = e.tracks, + s = r.length, + a = new Array(s), + o = { endingStart: D, endingEnd: D } + for (let l = 0; l !== s; ++l) { + const t = r[l].createInterpolant(null) + ;(a[l] = t), (t.settings = o) + } + ;(this._interpolantSettings = o), + (this._interpolants = a), + (this._propertyBindings = new Array(s)), + (this._cacheIndex = null), + (this._byClipCacheIndex = null), + (this._timeScaleInterpolant = null), + (this._weightInterpolant = null), + (this.loop = 2201), + (this._loopCount = -1), + (this._startTime = null), + (this.time = 0), + (this.timeScale = 1), + (this._effectiveTimeScale = 1), + (this.weight = 1), + (this._effectiveWeight = 1), + (this.repetitions = 1 / 0), + (this.paused = !1), + (this.enabled = !0), + (this.clampWhenFinished = !1), + (this.zeroSlopeAtStart = !0), + (this.zeroSlopeAtEnd = !0) + } + play() { + return this._mixer._activateAction(this), this + } + stop() { + return this._mixer._deactivateAction(this), this.reset() + } + reset() { + return ( + (this.paused = !1), + (this.enabled = !0), + (this.time = 0), + (this._loopCount = -1), + (this._startTime = null), + this.stopFading().stopWarping() + ) + } + isRunning() { + return ( + this.enabled && + !this.paused && + 0 !== this.timeScale && + null === this._startTime && + this._mixer._isActiveAction(this) + ) + } + isScheduled() { + return this._mixer._isActiveAction(this) + } + startAt(t) { + return (this._startTime = t), this + } + setLoop(t, e) { + return (this.loop = t), (this.repetitions = e), this + } + setEffectiveWeight(t) { + return ( + (this.weight = t), (this._effectiveWeight = this.enabled ? t : 0), this.stopFading() + ) + } + getEffectiveWeight() { + return this._effectiveWeight + } + fadeIn(t) { + return this._scheduleFading(t, 0, 1) + } + fadeOut(t) { + return this._scheduleFading(t, 1, 0) + } + crossFadeFrom(t, e, n) { + if ((t.fadeOut(e), this.fadeIn(e), n)) { + const n = this._clip.duration, + i = t._clip.duration, + r = i / n, + s = n / i + t.warp(1, r, e), this.warp(s, 1, e) + } + return this + } + crossFadeTo(t, e, n) { + return t.crossFadeFrom(this, e, n) + } + stopFading() { + const t = this._weightInterpolant + return ( + null !== t && + ((this._weightInterpolant = null), this._mixer._takeBackControlInterpolant(t)), + this + ) + } + setEffectiveTimeScale(t) { + return ( + (this.timeScale = t), + (this._effectiveTimeScale = this.paused ? 0 : t), + this.stopWarping() + ) + } + getEffectiveTimeScale() { + return this._effectiveTimeScale + } + setDuration(t) { + return (this.timeScale = this._clip.duration / t), this.stopWarping() + } + syncWith(t) { + return (this.time = t.time), (this.timeScale = t.timeScale), this.stopWarping() + } + halt(t) { + return this.warp(this._effectiveTimeScale, 0, t) + } + warp(t, e, n) { + const i = this._mixer, + r = i.time, + s = this.timeScale + let a = this._timeScaleInterpolant + null === a && ((a = i._lendControlInterpolant()), (this._timeScaleInterpolant = a)) + const o = a.parameterPositions, + l = a.sampleValues + return (o[0] = r), (o[1] = r + n), (l[0] = t / s), (l[1] = e / s), this + } + stopWarping() { + const t = this._timeScaleInterpolant + return ( + null !== t && + ((this._timeScaleInterpolant = null), this._mixer._takeBackControlInterpolant(t)), + this + ) + } + getMixer() { + return this._mixer + } + getClip() { + return this._clip + } + getRoot() { + return this._localRoot || this._mixer._root + } + _update(t, e, n, i) { + if (!this.enabled) return void this._updateWeight(t) + const r = this._startTime + if (null !== r) { + const i = (t - r) * n + if (i < 0 || 0 === n) return + ;(this._startTime = null), (e = n * i) + } + e *= this._updateTimeScale(t) + const s = this._updateTime(e), + a = this._updateWeight(t) + if (a > 0) { + const t = this._interpolants, + e = this._propertyBindings + switch (this.blendMode) { + case 2501: + for (let n = 0, i = t.length; n !== i; ++n) + t[n].evaluate(s), e[n].accumulateAdditive(a) + break + case z: + default: + for (let n = 0, r = t.length; n !== r; ++n) t[n].evaluate(s), e[n].accumulate(i, a) + } + } + } + _updateWeight(t) { + let e = 0 + if (this.enabled) { + e = this.weight + const n = this._weightInterpolant + if (null !== n) { + const i = n.evaluate(t)[0] + ;(e *= i), + t > n.parameterPositions[1] && (this.stopFading(), 0 === i && (this.enabled = !1)) + } + } + return (this._effectiveWeight = e), e + } + _updateTimeScale(t) { + let e = 0 + if (!this.paused) { + e = this.timeScale + const n = this._timeScaleInterpolant + if (null !== n) { + ;(e *= n.evaluate(t)[0]), + t > n.parameterPositions[1] && + (this.stopWarping(), 0 === e ? (this.paused = !0) : (this.timeScale = e)) + } + } + return (this._effectiveTimeScale = e), e + } + _updateTime(t) { + const e = this._clip.duration, + n = this.loop + let i = this.time + t, + r = this._loopCount + const s = 2202 === n + if (0 === t) return -1 === r ? i : s && 1 === (1 & r) ? e - i : i + if (2200 === n) { + ;-1 === r && ((this._loopCount = 0), this._setEndings(!0, !0, !1)) + t: { + if (i >= e) i = e + else { + if (!(i < 0)) { + this.time = i + break t + } + i = 0 + } + this.clampWhenFinished ? (this.paused = !0) : (this.enabled = !1), + (this.time = i), + this._mixer.dispatchEvent({ + type: 'finished', + action: this, + direction: t < 0 ? -1 : 1, + }) + } + } else { + if ( + (-1 === r && + (t >= 0 + ? ((r = 0), this._setEndings(!0, 0 === this.repetitions, s)) + : this._setEndings(0 === this.repetitions, !0, s)), + i >= e || i < 0) + ) { + const n = Math.floor(i / e) + ;(i -= e * n), (r += Math.abs(n)) + const a = this.repetitions - r + if (a <= 0) + this.clampWhenFinished ? (this.paused = !0) : (this.enabled = !1), + (i = t > 0 ? e : 0), + (this.time = i), + this._mixer.dispatchEvent({ + type: 'finished', + action: this, + direction: t > 0 ? 1 : -1, + }) + else { + if (1 === a) { + const e = t < 0 + this._setEndings(e, !e, s) + } else this._setEndings(!1, !1, s) + ;(this._loopCount = r), + (this.time = i), + this._mixer.dispatchEvent({ type: 'loop', action: this, loopDelta: n }) + } + } else this.time = i + if (s && 1 === (1 & r)) return e - i + } + return i + } + _setEndings(t, e, n) { + const i = this._interpolantSettings + n + ? ((i.endingStart = I), (i.endingEnd = I)) + : ((i.endingStart = t ? (this.zeroSlopeAtStart ? I : D) : N), + (i.endingEnd = e ? (this.zeroSlopeAtEnd ? I : D) : N)) + } + _scheduleFading(t, e, n) { + const i = this._mixer, + r = i.time + let s = this._weightInterpolant + null === s && ((s = i._lendControlInterpolant()), (this._weightInterpolant = s)) + const a = s.parameterPositions, + o = s.sampleValues + return (a[0] = r), (o[0] = e), (a[1] = r + t), (o[1] = n), this + } + } + ;(class extends W { + constructor(t) { + super(), + (this._root = t), + this._initMemoryManager(), + (this._accuIndex = 0), + (this.time = 0), + (this.timeScale = 1) + } + _bindAction(t, e) { + const n = t._localRoot || this._root, + i = t._clip.tracks, + r = i.length, + s = t._propertyBindings, + a = t._interpolants, + o = n.uuid, + l = this._bindingsByRootAndName + let c = l[o] + void 0 === c && ((c = {}), (l[o] = c)) + for (let h = 0; h !== r; ++h) { + const t = i[h], + r = t.name + let l = c[r] + if (void 0 !== l) s[h] = l + else { + if (((l = s[h]), void 0 !== l)) { + null === l._cacheIndex && (++l.referenceCount, this._addInactiveBinding(l, o, r)) + continue + } + const i = e && e._propertyBindings[h].binding.parsedPath + ;(l = new ul(Ml.create(n, r, i), t.ValueTypeName, t.getValueSize())), + ++l.referenceCount, + this._addInactiveBinding(l, o, r), + (s[h] = l) + } + a[h].resultBuffer = l.buffer + } + } + _activateAction(t) { + if (!this._isActiveAction(t)) { + if (null === t._cacheIndex) { + const e = (t._localRoot || this._root).uuid, + n = t._clip.uuid, + i = this._actionsByClip[n] + this._bindAction(t, i && i.knownActions[0]), this._addInactiveAction(t, n, e) + } + const e = t._propertyBindings + for (let t = 0, n = e.length; t !== n; ++t) { + const n = e[t] + 0 === n.useCount++ && (this._lendBinding(n), n.saveOriginalState()) + } + this._lendAction(t) + } + } + _deactivateAction(t) { + if (this._isActiveAction(t)) { + const e = t._propertyBindings + for (let t = 0, n = e.length; t !== n; ++t) { + const n = e[t] + 0 === --n.useCount && (n.restoreOriginalState(), this._takeBackBinding(n)) + } + this._takeBackAction(t) + } + } + _initMemoryManager() { + ;(this._actions = []), + (this._nActiveActions = 0), + (this._actionsByClip = {}), + (this._bindings = []), + (this._nActiveBindings = 0), + (this._bindingsByRootAndName = {}), + (this._controlInterpolants = []), + (this._nActiveControlInterpolants = 0) + const t = this + this.stats = { + actions: { + get total() { + return t._actions.length + }, + get inUse() { + return t._nActiveActions + }, + }, + bindings: { + get total() { + return t._bindings.length + }, + get inUse() { + return t._nActiveBindings + }, + }, + controlInterpolants: { + get total() { + return t._controlInterpolants.length + }, + get inUse() { + return t._nActiveControlInterpolants + }, + }, + } + } + _isActiveAction(t) { + const e = t._cacheIndex + return null !== e && e < this._nActiveActions + } + _addInactiveAction(t, e, n) { + const i = this._actions, + r = this._actionsByClip + let s = r[e] + if (void 0 === s) + (s = { knownActions: [t], actionByRoot: {} }), (t._byClipCacheIndex = 0), (r[e] = s) + else { + const e = s.knownActions + ;(t._byClipCacheIndex = e.length), e.push(t) + } + ;(t._cacheIndex = i.length), i.push(t), (s.actionByRoot[n] = t) + } + _removeInactiveAction(t) { + const e = this._actions, + n = e[e.length - 1], + i = t._cacheIndex + ;(n._cacheIndex = i), (e[i] = n), e.pop(), (t._cacheIndex = null) + const r = t._clip.uuid, + s = this._actionsByClip, + a = s[r], + o = a.knownActions, + l = o[o.length - 1], + c = t._byClipCacheIndex + ;(l._byClipCacheIndex = c), (o[c] = l), o.pop(), (t._byClipCacheIndex = null) + delete a.actionByRoot[(t._localRoot || this._root).uuid], + 0 === o.length && delete s[r], + this._removeInactiveBindingsForAction(t) + } + _removeInactiveBindingsForAction(t) { + const e = t._propertyBindings + for (let n = 0, i = e.length; n !== i; ++n) { + const t = e[n] + 0 === --t.referenceCount && this._removeInactiveBinding(t) + } + } + _lendAction(t) { + const e = this._actions, + n = t._cacheIndex, + i = this._nActiveActions++, + r = e[i] + ;(t._cacheIndex = i), (e[i] = t), (r._cacheIndex = n), (e[n] = r) + } + _takeBackAction(t) { + const e = this._actions, + n = t._cacheIndex, + i = --this._nActiveActions, + r = e[i] + ;(t._cacheIndex = i), (e[i] = t), (r._cacheIndex = n), (e[n] = r) + } + _addInactiveBinding(t, e, n) { + const i = this._bindingsByRootAndName, + r = this._bindings + let s = i[e] + void 0 === s && ((s = {}), (i[e] = s)), (s[n] = t), (t._cacheIndex = r.length), r.push(t) + } + _removeInactiveBinding(t) { + const e = this._bindings, + n = t.binding, + i = n.rootNode.uuid, + r = n.path, + s = this._bindingsByRootAndName, + a = s[i], + o = e[e.length - 1], + l = t._cacheIndex + ;(o._cacheIndex = l), + (e[l] = o), + e.pop(), + delete a[r], + 0 === Object.keys(a).length && delete s[i] + } + _lendBinding(t) { + const e = this._bindings, + n = t._cacheIndex, + i = this._nActiveBindings++, + r = e[i] + ;(t._cacheIndex = i), (e[i] = t), (r._cacheIndex = n), (e[n] = r) + } + _takeBackBinding(t) { + const e = this._bindings, + n = t._cacheIndex, + i = --this._nActiveBindings, + r = e[i] + ;(t._cacheIndex = i), (e[i] = t), (r._cacheIndex = n), (e[n] = r) + } + _lendControlInterpolant() { + const t = this._controlInterpolants, + e = this._nActiveControlInterpolants++ + let n = t[e] + return ( + void 0 === n && + ((n = new lo( + new Float32Array(2), + new Float32Array(2), + 1, + this._controlInterpolantsResultBuffer, + )), + (n.__cacheIndex = e), + (t[e] = n)), + n + ) + } + _takeBackControlInterpolant(t) { + const e = this._controlInterpolants, + n = t.__cacheIndex, + i = --this._nActiveControlInterpolants, + r = e[i] + ;(t.__cacheIndex = i), (e[i] = t), (r.__cacheIndex = n), (e[n] = r) + } + clipAction(t, e, n) { + const i = e || this._root, + r = i.uuid + let s = 'string' === typeof t ? xo.findByName(i, t) : t + const a = null !== s ? s.uuid : t, + o = this._actionsByClip[a] + let l = null + if ((void 0 === n && (n = null !== s ? s.blendMode : z), void 0 !== o)) { + const t = o.actionByRoot[r] + if (void 0 !== t && t.blendMode === n) return t + ;(l = o.knownActions[0]), null === s && (s = l._clip) + } + if (null === s) return null + const c = new wl(this, s, e, n) + return this._bindAction(c, l), this._addInactiveAction(c, a, r), c + } + existingAction(t, e) { + const n = e || this._root, + i = n.uuid, + r = 'string' === typeof t ? xo.findByName(n, t) : t, + s = r ? r.uuid : t, + a = this._actionsByClip[s] + return (void 0 !== a && a.actionByRoot[i]) || null + } + stopAllAction() { + const t = this._actions + for (let e = this._nActiveActions - 1; e >= 0; --e) t[e].stop() + return this + } + update(t) { + t *= this.timeScale + const e = this._actions, + n = this._nActiveActions, + i = (this.time += t), + r = Math.sign(t), + s = (this._accuIndex ^= 1) + for (let l = 0; l !== n; ++l) { + e[l]._update(i, t, r, s) + } + const a = this._bindings, + o = this._nActiveBindings + for (let l = 0; l !== o; ++l) a[l].apply(s) + return this + } + setTime(t) { + this.time = 0 + for (let e = 0; e < this._actions.length; e++) this._actions[e].time = 0 + return this.update(t) + } + getRoot() { + return this._root + } + uncacheClip(t) { + const e = this._actions, + n = t.uuid, + i = this._actionsByClip, + r = i[n] + if (void 0 !== r) { + const t = r.knownActions + for (let n = 0, i = t.length; n !== i; ++n) { + const i = t[n] + this._deactivateAction(i) + const r = i._cacheIndex, + s = e[e.length - 1] + ;(i._cacheIndex = null), + (i._byClipCacheIndex = null), + (s._cacheIndex = r), + (e[r] = s), + e.pop(), + this._removeInactiveBindingsForAction(i) + } + delete i[n] + } + } + uncacheRoot(t) { + const e = t.uuid, + n = this._actionsByClip + for (const r in n) { + const t = n[r].actionByRoot[e] + void 0 !== t && (this._deactivateAction(t), this._removeInactiveAction(t)) + } + const i = this._bindingsByRootAndName[e] + if (void 0 !== i) + for (const r in i) { + const t = i[r] + t.restoreOriginalState(), this._removeInactiveBinding(t) + } + } + uncacheAction(t, e) { + const n = this.existingAction(t, e) + null !== n && (this._deactivateAction(n), this._removeInactiveAction(n)) + } + }.prototype._controlInterpolantsResultBuffer = new Float32Array(1)) + class Sl { + constructor(t) { + 'string' === typeof t && + (console.warn('THREE.Uniform: Type parameter is no longer needed.'), + (t = arguments[1])), + (this.value = t) + } + clone() { + return new Sl(void 0 === this.value.clone ? this.value : this.value.clone()) + } + } + ;(class extends Kr { + constructor(t, e, n = 1) { + super(t, e), (this.meshPerAttribute = n) + } + copy(t) { + return super.copy(t), (this.meshPerAttribute = t.meshPerAttribute), this + } + clone(t) { + const e = super.clone(t) + return (e.meshPerAttribute = this.meshPerAttribute), e + } + toJSON(t) { + const e = super.toJSON(t) + return ( + (e.isInstancedInterleavedBuffer = !0), (e.meshPerAttribute = this.meshPerAttribute), e + ) + } + }.prototype.isInstancedInterleavedBuffer = !0) + ;(class { + constructor(t, e, n, i, r) { + ;(this.buffer = t), + (this.type = e), + (this.itemSize = n), + (this.elementSize = i), + (this.count = r), + (this.version = 0) + } + set needsUpdate(t) { + !0 === t && this.version++ + } + setBuffer(t) { + return (this.buffer = t), this + } + setType(t, e) { + return (this.type = t), (this.elementSize = e), this + } + setItemSize(t) { + return (this.itemSize = t), this + } + setCount(t) { + return (this.count = t), this + } + }.prototype.isGLBufferAttribute = !0) + class Tl { + constructor(t, e, n = 0, i = 1 / 0) { + ;(this.ray = new Gt(t, e)), + (this.near = n), + (this.far = i), + (this.camera = null), + (this.layers = new $t()), + (this.params = { + Mesh: {}, + Line: { threshold: 1 }, + LOD: {}, + Points: { threshold: 1 }, + Sprite: {}, + }) + } + set(t, e) { + this.ray.set(t, e) + } + setFromCamera(t, e) { + e && e.isPerspectiveCamera + ? (this.ray.origin.setFromMatrixPosition(e.matrixWorld), + this.ray.direction.set(t.x, t.y, 0.5).unproject(e).sub(this.ray.origin).normalize(), + (this.camera = e)) + : e && e.isOrthographicCamera + ? (this.ray.origin.set(t.x, t.y, (e.near + e.far) / (e.near - e.far)).unproject(e), + this.ray.direction.set(0, 0, -1).transformDirection(e.matrixWorld), + (this.camera = e)) + : console.error('THREE.Raycaster: Unsupported camera type: ' + e.type) + } + intersectObject(t, e = !1, n = []) { + return Ll(t, this, n, e), n.sort(El), n + } + intersectObjects(t, e = !1, n = []) { + for (let i = 0, r = t.length; i < r; i++) Ll(t[i], this, n, e) + return n.sort(El), n + } + } + function El(t, e) { + return t.distance - e.distance + } + function Ll(t, e, n, i) { + if ((t.layers.test(e.layers) && t.raycast(e, n), !0 === i)) { + const i = t.children + for (let t = 0, r = i.length; t < r; t++) Ll(i[t], e, n, !0) + } + } + class Al { + constructor(t = 1, e = 0, n = 0) { + return (this.radius = t), (this.phi = e), (this.theta = n), this + } + set(t, e, n) { + return (this.radius = t), (this.phi = e), (this.theta = n), this + } + copy(t) { + return (this.radius = t.radius), (this.phi = t.phi), (this.theta = t.theta), this + } + makeSafe() { + const t = 1e-6 + return (this.phi = Math.max(t, Math.min(Math.PI - t, this.phi))), this + } + setFromVector3(t) { + return this.setFromCartesianCoords(t.x, t.y, t.z) + } + setFromCartesianCoords(t, e, n) { + return ( + (this.radius = Math.sqrt(t * t + e * e + n * n)), + 0 === this.radius + ? ((this.theta = 0), (this.phi = 0)) + : ((this.theta = Math.atan2(t, n)), + (this.phi = Math.acos(J(e / this.radius, -1, 1)))), + this + ) + } + clone() { + return new this.constructor().copy(this) + } + } + const Rl = new tt() + class Cl { + constructor(t = new tt(1 / 0, 1 / 0), e = new tt(-1 / 0, -1 / 0)) { + ;(this.min = t), (this.max = e) + } + set(t, e) { + return this.min.copy(t), this.max.copy(e), this + } + setFromPoints(t) { + this.makeEmpty() + for (let e = 0, n = t.length; e < n; e++) this.expandByPoint(t[e]) + return this + } + setFromCenterAndSize(t, e) { + const n = Rl.copy(e).multiplyScalar(0.5) + return this.min.copy(t).sub(n), this.max.copy(t).add(n), this + } + clone() { + return new this.constructor().copy(this) + } + copy(t) { + return this.min.copy(t.min), this.max.copy(t.max), this + } + makeEmpty() { + return (this.min.x = this.min.y = 1 / 0), (this.max.x = this.max.y = -1 / 0), this + } + isEmpty() { + return this.max.x < this.min.x || this.max.y < this.min.y + } + getCenter(t) { + return this.isEmpty() ? t.set(0, 0) : t.addVectors(this.min, this.max).multiplyScalar(0.5) + } + getSize(t) { + return this.isEmpty() ? t.set(0, 0) : t.subVectors(this.max, this.min) + } + expandByPoint(t) { + return this.min.min(t), this.max.max(t), this + } + expandByVector(t) { + return this.min.sub(t), this.max.add(t), this + } + expandByScalar(t) { + return this.min.addScalar(-t), this.max.addScalar(t), this + } + containsPoint(t) { + return !(t.x < this.min.x || t.x > this.max.x || t.y < this.min.y || t.y > this.max.y) + } + containsBox(t) { + return ( + this.min.x <= t.min.x && + t.max.x <= this.max.x && + this.min.y <= t.min.y && + t.max.y <= this.max.y + ) + } + getParameter(t, e) { + return e.set( + (t.x - this.min.x) / (this.max.x - this.min.x), + (t.y - this.min.y) / (this.max.y - this.min.y), + ) + } + intersectsBox(t) { + return !( + t.max.x < this.min.x || + t.min.x > this.max.x || + t.max.y < this.min.y || + t.min.y > this.max.y + ) + } + clampPoint(t, e) { + return e.copy(t).clamp(this.min, this.max) + } + distanceToPoint(t) { + return Rl.copy(t).clamp(this.min, this.max).sub(t).length() + } + intersect(t) { + return this.min.max(t.min), this.max.min(t.max), this + } + union(t) { + return this.min.min(t.min), this.max.max(t.max), this + } + translate(t) { + return this.min.add(t), this.max.add(t), this + } + equals(t) { + return t.min.equals(this.min) && t.max.equals(this.max) + } + } + Cl.prototype.isBox2 = !0 + const Pl = new ut(), + Dl = new ut() + ;(class extends pe { + constructor(t) { + super(), + (this.material = t), + (this.render = function () {}), + (this.hasPositions = !1), + (this.hasNormals = !1), + (this.hasColors = !1), + (this.hasUvs = !1), + (this.positionArray = null), + (this.normalArray = null), + (this.colorArray = null), + (this.uvArray = null), + (this.count = 0) + } + }.prototype.isImmediateRenderObject = !0) + const Il = new ut(), + Nl = new Vt(), + zl = new Vt() + function Ol(t) { + const e = [] + t && t.isBone && e.push(t) + for (let n = 0; n < t.children.length; n++) e.push.apply(e, Ol(t.children[n])) + return e + } + const Bl = new Float32Array(1) + new Int32Array(Bl.buffer) + Math.pow(2, 8) + const Fl = [0.125, 0.215, 0.35, 0.446, 0.526, 0.582], + Ul = 5 + Fl.length, + Hl = new Ne({ side: s, depthWrite: !1, depthTest: !1 }), + { _lodPlanes: Gl, _sizeLods: Vl, _sigmas: kl } = (new mn(new gn(), Hl), Wl()) + Math.sqrt(5) + function Wl() { + const t = [], + e = [], + n = [] + let i = 8 + for (let r = 0; r < Ul; r++) { + const s = Math.pow(2, i) + e.push(s) + let a = 1 / s + r > 4 ? (a = Fl[r - 8 + 4 - 1]) : 0 == r && (a = 0), n.push(a) + const o = 1 / (s - 1), + l = -o / 2, + c = 1 + o / 2, + h = [l, l, c, l, c, c, l, l, c, c, l, c], + u = 6, + d = 6, + p = 3, + m = 2, + f = 1, + g = new Float32Array(p * d * u), + v = new Float32Array(m * d * u), + y = new Float32Array(f * d * u) + for (let t = 0; t < u; t++) { + const e = ((t % 3) * 2) / 3 - 1, + n = t > 2 ? 0 : -1, + i = [ + e, + n, + 0, + e + 2 / 3, + n, + 0, + e + 2 / 3, + n + 1, + 0, + e, + n, + 0, + e + 2 / 3, + n + 1, + 0, + e, + n + 1, + 0, + ] + g.set(i, p * d * t), v.set(h, m * d * t) + const r = [t, t, t, t, t, t] + y.set(r, f * d * t) + } + const x = new Je() + x.setAttribute('position', new Be(g, p)), + x.setAttribute('uv', new Be(v, m)), + x.setAttribute('faceIndex', new Be(y, f)), + t.push(x), + i > 4 && i-- + } + return { _lodPlanes: t, _sizeLods: e, _sigmas: n } + } + ;(Qs.create = function (t, e) { + return ( + console.log('THREE.Curve.create() has been deprecated'), + (t.prototype = Object.create(Qs.prototype)), + (t.prototype.constructor = t), + (t.prototype.getPoint = e), + t + ) + }), + (Po.prototype.fromPoints = function (t) { + return ( + console.warn('THREE.Path: .fromPoints() has been renamed to .setFromPoints().'), + this.setFromPoints(t) + ) + }), + (class extends Us { + constructor(t = 10, e = 10, n = 4473924, i = 8947848) { + ;(n = new Ie(n)), (i = new Ie(i)) + const r = e / 2, + s = t / e, + a = t / 2, + o = [], + l = [] + for (let h = 0, u = 0, d = -a; h <= e; h++, d += s) { + o.push(-a, 0, d, a, 0, d), o.push(d, 0, -a, d, 0, a) + const t = h === r ? n : i + t.toArray(l, u), + (u += 3), + t.toArray(l, u), + (u += 3), + t.toArray(l, u), + (u += 3), + t.toArray(l, u), + (u += 3) + } + const c = new Je() + c.setAttribute('position', new He(o, 3)), c.setAttribute('color', new He(l, 3)) + super(c, new Cs({ vertexColors: !0, toneMapped: !1 })), (this.type = 'GridHelper') + } + }.prototype.setColors = function () { + console.error( + 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.', + ) + }), + (class extends Us { + constructor(t) { + const e = Ol(t), + n = new Je(), + i = [], + r = [], + s = new Ie(0, 0, 1), + a = new Ie(0, 1, 0) + for (let o = 0; o < e.length; o++) { + const t = e[o] + t.parent && + t.parent.isBone && + (i.push(0, 0, 0), i.push(0, 0, 0), r.push(s.r, s.g, s.b), r.push(a.r, a.g, a.b)) + } + n.setAttribute('position', new He(i, 3)), n.setAttribute('color', new He(r, 3)) + super( + n, + new Cs({ + vertexColors: !0, + depthTest: !1, + depthWrite: !1, + toneMapped: !1, + transparent: !0, + }), + ), + (this.type = 'SkeletonHelper'), + (this.isSkeletonHelper = !0), + (this.root = t), + (this.bones = e), + (this.matrix = t.matrixWorld), + (this.matrixAutoUpdate = !1) + } + updateMatrixWorld(t) { + const e = this.bones, + n = this.geometry, + i = n.getAttribute('position') + zl.copy(this.root.matrixWorld).invert() + for (let r = 0, s = 0; r < e.length; r++) { + const t = e[r] + t.parent && + t.parent.isBone && + (Nl.multiplyMatrices(zl, t.matrixWorld), + Il.setFromMatrixPosition(Nl), + i.setXYZ(s, Il.x, Il.y, Il.z), + Nl.multiplyMatrices(zl, t.parent.matrixWorld), + Il.setFromMatrixPosition(Nl), + i.setXYZ(s + 1, Il.x, Il.y, Il.z), + (s += 2)) + } + ;(n.getAttribute('position').needsUpdate = !0), super.updateMatrixWorld(t) + } + }.prototype.update = function () { + console.error('THREE.SkeletonHelper: update() no longer needs to be called.') + }), + (So.prototype.extractUrlBase = function (t) { + return ( + console.warn( + 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.', + ), + $o.extractUrlBase(t) + ) + }), + (So.Handlers = { + add: function () { + console.error( + 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.', + ) + }, + get: function () { + console.error( + 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.', + ) + }, + }), + (Cl.prototype.center = function (t) { + return ( + console.warn('THREE.Box2: .center() has been renamed to .getCenter().'), + this.getCenter(t) + ) + }), + (Cl.prototype.empty = function () { + return ( + console.warn('THREE.Box2: .empty() has been renamed to .isEmpty().'), this.isEmpty() + ) + }), + (Cl.prototype.isIntersectionBox = function (t) { + return ( + console.warn('THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().'), + this.intersectsBox(t) + ) + }), + (Cl.prototype.size = function (t) { + return ( + console.warn('THREE.Box2: .size() has been renamed to .getSize().'), this.getSize(t) + ) + }), + (mt.prototype.center = function (t) { + return ( + console.warn('THREE.Box3: .center() has been renamed to .getCenter().'), + this.getCenter(t) + ) + }), + (mt.prototype.empty = function () { + return ( + console.warn('THREE.Box3: .empty() has been renamed to .isEmpty().'), this.isEmpty() + ) + }), + (mt.prototype.isIntersectionBox = function (t) { + return ( + console.warn('THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().'), + this.intersectsBox(t) + ) + }), + (mt.prototype.isIntersectionSphere = function (t) { + return ( + console.warn( + 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().', + ), + this.intersectsSphere(t) + ) + }), + (mt.prototype.size = function (t) { + return ( + console.warn('THREE.Box3: .size() has been renamed to .getSize().'), this.getSize(t) + ) + }), + (It.prototype.empty = function () { + return ( + console.warn('THREE.Sphere: .empty() has been renamed to .isEmpty().'), this.isEmpty() + ) + }), + (In.prototype.setFromMatrix = function (t) { + return ( + console.warn( + 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().', + ), + this.setFromProjectionMatrix(t) + ) + }), + (class { + constructor(t = new ut(), e = new ut()) { + ;(this.start = t), (this.end = e) + } + set(t, e) { + return this.start.copy(t), this.end.copy(e), this + } + copy(t) { + return this.start.copy(t.start), this.end.copy(t.end), this + } + getCenter(t) { + return t.addVectors(this.start, this.end).multiplyScalar(0.5) + } + delta(t) { + return t.subVectors(this.end, this.start) + } + distanceSq() { + return this.start.distanceToSquared(this.end) + } + distance() { + return this.start.distanceTo(this.end) + } + at(t, e) { + return this.delta(e).multiplyScalar(t).add(this.start) + } + closestPointToPointParameter(t, e) { + Pl.subVectors(t, this.start), Dl.subVectors(this.end, this.start) + const n = Dl.dot(Dl) + let i = Dl.dot(Pl) / n + return e && (i = J(i, 0, 1)), i + } + closestPointToPoint(t, e, n) { + const i = this.closestPointToPointParameter(t, e) + return this.delta(n).multiplyScalar(i).add(this.start) + } + applyMatrix4(t) { + return this.start.applyMatrix4(t), this.end.applyMatrix4(t), this + } + equals(t) { + return t.start.equals(this.start) && t.end.equals(this.end) + } + clone() { + return new this.constructor().copy(this) + } + }.prototype.center = function (t) { + return ( + console.warn('THREE.Line3: .center() has been renamed to .getCenter().'), + this.getCenter(t) + ) + }), + (et.prototype.flattenToArrayOffset = function (t, e) { + return ( + console.warn( + 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.', + ), + this.toArray(t, e) + ) + }), + (et.prototype.multiplyVector3 = function (t) { + return ( + console.warn( + 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.', + ), + t.applyMatrix3(this) + ) + }), + (et.prototype.multiplyVector3Array = function () { + console.error('THREE.Matrix3: .multiplyVector3Array() has been removed.') + }), + (et.prototype.applyToBufferAttribute = function (t) { + return ( + console.warn( + 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.', + ), + t.applyMatrix3(this) + ) + }), + (et.prototype.applyToVector3Array = function () { + console.error('THREE.Matrix3: .applyToVector3Array() has been removed.') + }), + (et.prototype.getInverse = function (t) { + return ( + console.warn( + 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.', + ), + this.copy(t).invert() + ) + }), + (Vt.prototype.extractPosition = function (t) { + return ( + console.warn('THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().'), + this.copyPosition(t) + ) + }), + (Vt.prototype.flattenToArrayOffset = function (t, e) { + return ( + console.warn( + 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.', + ), + this.toArray(t, e) + ) + }), + (Vt.prototype.getPosition = function () { + return ( + console.warn( + 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.', + ), + new ut().setFromMatrixColumn(this, 3) + ) + }), + (Vt.prototype.setRotationFromQuaternion = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().', + ), + this.makeRotationFromQuaternion(t) + ) + }), + (Vt.prototype.multiplyToArray = function () { + console.warn('THREE.Matrix4: .multiplyToArray() has been removed.') + }), + (Vt.prototype.multiplyVector3 = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.', + ), + t.applyMatrix4(this) + ) + }), + (Vt.prototype.multiplyVector4 = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.', + ), + t.applyMatrix4(this) + ) + }), + (Vt.prototype.multiplyVector3Array = function () { + console.error('THREE.Matrix4: .multiplyVector3Array() has been removed.') + }), + (Vt.prototype.rotateAxis = function (t) { + console.warn( + 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.', + ), + t.transformDirection(this) + }), + (Vt.prototype.crossVector = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.', + ), + t.applyMatrix4(this) + ) + }), + (Vt.prototype.translate = function () { + console.error('THREE.Matrix4: .translate() has been removed.') + }), + (Vt.prototype.rotateX = function () { + console.error('THREE.Matrix4: .rotateX() has been removed.') + }), + (Vt.prototype.rotateY = function () { + console.error('THREE.Matrix4: .rotateY() has been removed.') + }), + (Vt.prototype.rotateZ = function () { + console.error('THREE.Matrix4: .rotateZ() has been removed.') + }), + (Vt.prototype.rotateByAxis = function () { + console.error('THREE.Matrix4: .rotateByAxis() has been removed.') + }), + (Vt.prototype.applyToBufferAttribute = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.', + ), + t.applyMatrix4(this) + ) + }), + (Vt.prototype.applyToVector3Array = function () { + console.error('THREE.Matrix4: .applyToVector3Array() has been removed.') + }), + (Vt.prototype.makeFrustum = function (t, e, n, i, r, s) { + return ( + console.warn( + 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.', + ), + this.makePerspective(t, e, i, n, r, s) + ) + }), + (Vt.prototype.getInverse = function (t) { + return ( + console.warn( + 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.', + ), + this.copy(t).invert() + ) + }), + (Cn.prototype.isIntersectionLine = function (t) { + return ( + console.warn( + 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().', + ), + this.intersectsLine(t) + ) + }), + (ht.prototype.multiplyVector3 = function (t) { + return ( + console.warn( + 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.', + ), + t.applyQuaternion(this) + ) + }), + (ht.prototype.inverse = function () { + return ( + console.warn('THREE.Quaternion: .inverse() has been renamed to invert().'), + this.invert() + ) + }), + (Gt.prototype.isIntersectionBox = function (t) { + return ( + console.warn('THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().'), + this.intersectsBox(t) + ) + }), + (Gt.prototype.isIntersectionPlane = function (t) { + return ( + console.warn( + 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().', + ), + this.intersectsPlane(t) + ) + }), + (Gt.prototype.isIntersectionSphere = function (t) { + return ( + console.warn( + 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().', + ), + this.intersectsSphere(t) + ) + }), + (Se.prototype.area = function () { + return ( + console.warn('THREE.Triangle: .area() has been renamed to .getArea().'), this.getArea() + ) + }), + (Se.prototype.barycoordFromPoint = function (t, e) { + return ( + console.warn( + 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().', + ), + this.getBarycoord(t, e) + ) + }), + (Se.prototype.midpoint = function (t) { + return ( + console.warn('THREE.Triangle: .midpoint() has been renamed to .getMidpoint().'), + this.getMidpoint(t) + ) + }), + (Se.prototypenormal = function (t) { + return ( + console.warn('THREE.Triangle: .normal() has been renamed to .getNormal().'), + this.getNormal(t) + ) + }), + (Se.prototype.plane = function (t) { + return ( + console.warn('THREE.Triangle: .plane() has been renamed to .getPlane().'), + this.getPlane(t) + ) + }), + (Se.barycoordFromPoint = function (t, e, n, i, r) { + return ( + console.warn( + 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().', + ), + Se.getBarycoord(t, e, n, i, r) + ) + }), + (Se.normal = function (t, e, n, i) { + return ( + console.warn('THREE.Triangle: .normal() has been renamed to .getNormal().'), + Se.getNormal(t, e, n, i) + ) + }), + (Do.prototype.extractAllPoints = function (t) { + return ( + console.warn( + 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.', + ), + this.extractPoints(t) + ) + }), + (Do.prototype.extrude = function (t) { + return ( + console.warn( + 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.', + ), + new Wa(this, t) + ) + }), + (Do.prototype.makeGeometry = function (t) { + return ( + console.warn( + 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.', + ), + new qa(this, t) + ) + }), + (tt.prototype.fromAttribute = function (t, e, n) { + return ( + console.warn( + 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().', + ), + this.fromBufferAttribute(t, e, n) + ) + }), + (tt.prototype.distanceToManhattan = function (t) { + return ( + console.warn( + 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().', + ), + this.manhattanDistanceTo(t) + ) + }), + (tt.prototype.lengthManhattan = function () { + return ( + console.warn( + 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().', + ), + this.manhattanLength() + ) + }), + (ut.prototype.setEulerFromRotationMatrix = function () { + console.error( + 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.', + ) + }), + (ut.prototype.setEulerFromQuaternion = function () { + console.error( + 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.', + ) + }), + (ut.prototype.getPositionFromMatrix = function (t) { + return ( + console.warn( + 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().', + ), + this.setFromMatrixPosition(t) + ) + }), + (ut.prototype.getScaleFromMatrix = function (t) { + return ( + console.warn( + 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().', + ), + this.setFromMatrixScale(t) + ) + }), + (ut.prototype.getColumnFromMatrix = function (t, e) { + return ( + console.warn( + 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().', + ), + this.setFromMatrixColumn(e, t) + ) + }), + (ut.prototype.applyProjection = function (t) { + return ( + console.warn( + 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.', + ), + this.applyMatrix4(t) + ) + }), + (ut.prototype.fromAttribute = function (t, e, n) { + return ( + console.warn( + 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().', + ), + this.fromBufferAttribute(t, e, n) + ) + }), + (ut.prototype.distanceToManhattan = function (t) { + return ( + console.warn( + 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().', + ), + this.manhattanDistanceTo(t) + ) + }), + (ut.prototype.lengthManhattan = function () { + return ( + console.warn( + 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().', + ), + this.manhattanLength() + ) + }), + (ot.prototype.fromAttribute = function (t, e, n) { + return ( + console.warn( + 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().', + ), + this.fromBufferAttribute(t, e, n) + ) + }), + (ot.prototype.lengthManhattan = function () { + return ( + console.warn( + 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().', + ), + this.manhattanLength() + ) + }), + (pe.prototype.getChildByName = function (t) { + return ( + console.warn( + 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().', + ), + this.getObjectByName(t) + ) + }), + (pe.prototype.renderDepth = function () { + console.warn('THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.') + }), + (pe.prototype.translate = function (t, e) { + return ( + console.warn( + 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.', + ), + this.translateOnAxis(e, t) + ) + }), + (pe.prototype.getWorldRotation = function () { + console.error( + 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.', + ) + }), + (pe.prototype.applyMatrix = function (t) { + return ( + console.warn('THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().'), + this.applyMatrix4(t) + ) + }), + Object.defineProperties(pe.prototype, { + eulerOrder: { + get: function () { + return ( + console.warn('THREE.Object3D: .eulerOrder is now .rotation.order.'), + this.rotation.order + ) + }, + set: function (t) { + console.warn('THREE.Object3D: .eulerOrder is now .rotation.order.'), + (this.rotation.order = t) + }, + }, + useQuaternion: { + get: function () { + console.warn( + 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.', + ) + }, + set: function () { + console.warn( + 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.', + ) + }, + }, + }), + (mn.prototype.setDrawMode = function () { + console.error( + 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.', + ) + }), + Object.defineProperties(mn.prototype, { + drawMode: { + get: function () { + return ( + console.error( + 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.', + ), + 0 + ) + }, + set: function () { + console.error( + 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.', + ) + }, + }, + }), + (Ms.prototype.initBones = function () { + console.error('THREE.SkinnedMesh: initBones() has been removed.') + }), + (Mn.prototype.setLens = function (t, e) { + console.warn( + 'THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.', + ), + void 0 !== e && (this.filmGauge = e), + this.setFocalLength(t) + }), + Object.defineProperties(Io.prototype, { + onlyShadow: { + set: function () { + console.warn('THREE.Light: .onlyShadow has been removed.') + }, + }, + shadowCameraFov: { + set: function (t) { + console.warn('THREE.Light: .shadowCameraFov is now .shadow.camera.fov.'), + (this.shadow.camera.fov = t) + }, + }, + shadowCameraLeft: { + set: function (t) { + console.warn('THREE.Light: .shadowCameraLeft is now .shadow.camera.left.'), + (this.shadow.camera.left = t) + }, + }, + shadowCameraRight: { + set: function (t) { + console.warn('THREE.Light: .shadowCameraRight is now .shadow.camera.right.'), + (this.shadow.camera.right = t) + }, + }, + shadowCameraTop: { + set: function (t) { + console.warn('THREE.Light: .shadowCameraTop is now .shadow.camera.top.'), + (this.shadow.camera.top = t) + }, + }, + shadowCameraBottom: { + set: function (t) { + console.warn('THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.'), + (this.shadow.camera.bottom = t) + }, + }, + shadowCameraNear: { + set: function (t) { + console.warn('THREE.Light: .shadowCameraNear is now .shadow.camera.near.'), + (this.shadow.camera.near = t) + }, + }, + shadowCameraFar: { + set: function (t) { + console.warn('THREE.Light: .shadowCameraFar is now .shadow.camera.far.'), + (this.shadow.camera.far = t) + }, + }, + shadowCameraVisible: { + set: function () { + console.warn( + 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.', + ) + }, + }, + shadowBias: { + set: function (t) { + console.warn('THREE.Light: .shadowBias is now .shadow.bias.'), (this.shadow.bias = t) + }, + }, + shadowDarkness: { + set: function () { + console.warn('THREE.Light: .shadowDarkness has been removed.') + }, + }, + shadowMapWidth: { + set: function (t) { + console.warn('THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.'), + (this.shadow.mapSize.width = t) + }, + }, + shadowMapHeight: { + set: function (t) { + console.warn('THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.'), + (this.shadow.mapSize.height = t) + }, + }, + }), + Object.defineProperties(Be.prototype, { + length: { + get: function () { + return ( + console.warn( + 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.', + ), + this.array.length + ) + }, + }, + dynamic: { + get: function () { + return ( + console.warn( + 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.', + ), + this.usage === V + ) + }, + set: function () { + console.warn( + 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.', + ), + this.setUsage(V) + }, + }, + }), + (Be.prototype.setDynamic = function (t) { + return ( + console.warn( + 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.', + ), + this.setUsage(!0 === t ? V : G), + this + ) + }), + (Be.prototype.copyIndicesArray = function () { + console.error('THREE.BufferAttribute: .copyIndicesArray() has been removed.') + }), + (Be.prototype.setArray = function () { + console.error( + 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers', + ) + }), + (Je.prototype.addIndex = function (t) { + console.warn('THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().'), + this.setIndex(t) + }), + (Je.prototype.addAttribute = function (t, e) { + return ( + console.warn( + 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().', + ), + (e && e.isBufferAttribute) || (e && e.isInterleavedBufferAttribute) + ? 'index' === t + ? (console.warn( + 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.', + ), + this.setIndex(e), + this) + : this.setAttribute(t, e) + : (console.warn( + 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).', + ), + this.setAttribute(t, new Be(arguments[1], arguments[2]))) + ) + }), + (Je.prototype.addDrawCall = function (t, e, n) { + void 0 !== n && + console.warn('THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.'), + console.warn('THREE.BufferGeometry: .addDrawCall() is now .addGroup().'), + this.addGroup(t, e) + }), + (Je.prototype.clearDrawCalls = function () { + console.warn('THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().'), + this.clearGroups() + }), + (Je.prototype.computeOffsets = function () { + console.warn('THREE.BufferGeometry: .computeOffsets() has been removed.') + }), + (Je.prototype.removeAttribute = function (t) { + return ( + console.warn( + 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().', + ), + this.deleteAttribute(t) + ) + }), + (Je.prototype.applyMatrix = function (t) { + return ( + console.warn( + 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().', + ), + this.applyMatrix4(t) + ) + }), + Object.defineProperties(Je.prototype, { + drawcalls: { + get: function () { + return ( + console.error('THREE.BufferGeometry: .drawcalls has been renamed to .groups.'), + this.groups + ) + }, + }, + offsets: { + get: function () { + return ( + console.warn('THREE.BufferGeometry: .offsets has been renamed to .groups.'), + this.groups + ) + }, + }, + }), + (Kr.prototype.setDynamic = function (t) { + return ( + console.warn( + 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.', + ), + this.setUsage(!0 === t ? V : G), + this + ) + }), + (Kr.prototype.setArray = function () { + console.error( + 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers', + ) + }), + (Wa.prototype.getArrays = function () { + console.error('THREE.ExtrudeGeometry: .getArrays() has been removed.') + }), + (Wa.prototype.addShapeList = function () { + console.error('THREE.ExtrudeGeometry: .addShapeList() has been removed.') + }), + (Wa.prototype.addShape = function () { + console.error('THREE.ExtrudeGeometry: .addShape() has been removed.') + }), + (Qr.prototype.dispose = function () { + console.error('THREE.Scene: .dispose() has been removed.') + }), + (Sl.prototype.onUpdate = function () { + return ( + console.warn( + 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.', + ), + this + ) + }), + Object.defineProperties(Ee.prototype, { + wrapAround: { + get: function () { + console.warn('THREE.Material: .wrapAround has been removed.') + }, + set: function () { + console.warn('THREE.Material: .wrapAround has been removed.') + }, + }, + overdraw: { + get: function () { + console.warn('THREE.Material: .overdraw has been removed.') + }, + set: function () { + console.warn('THREE.Material: .overdraw has been removed.') + }, + }, + wrapRGB: { + get: function () { + return console.warn('THREE.Material: .wrapRGB has been removed.'), new Ie() + }, + }, + shading: { + get: function () { + console.error( + 'THREE.' + + this.type + + ': .shading has been removed. Use the boolean .flatShading instead.', + ) + }, + set: function (t) { + console.warn( + 'THREE.' + + this.type + + ': .shading has been removed. Use the boolean .flatShading instead.', + ), + (this.flatShading = 1 === t) + }, + }, + stencilMask: { + get: function () { + return ( + console.warn( + 'THREE.' + + this.type + + ': .stencilMask has been removed. Use .stencilFuncMask instead.', + ), + this.stencilFuncMask + ) + }, + set: function (t) { + console.warn( + 'THREE.' + + this.type + + ': .stencilMask has been removed. Use .stencilFuncMask instead.', + ), + (this.stencilFuncMask = t) + }, + }, + }), + Object.defineProperties(_n.prototype, { + derivatives: { + get: function () { + return ( + console.warn( + 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.', + ), + this.extensions.derivatives + ) + }, + set: function (t) { + console.warn( + 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.', + ), + (this.extensions.derivatives = t) + }, + }, + }), + (Yr.prototype.clearTarget = function (t, e, n, i) { + console.warn( + 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.', + ), + this.setRenderTarget(t), + this.clear(e, n, i) + }), + (Yr.prototype.animate = function (t) { + console.warn('THREE.WebGLRenderer: .animate() is now .setAnimationLoop().'), + this.setAnimationLoop(t) + }), + (Yr.prototype.getCurrentRenderTarget = function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().', + ), + this.getRenderTarget() + ) + }), + (Yr.prototype.getMaxAnisotropy = function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().', + ), + this.capabilities.getMaxAnisotropy() + ) + }), + (Yr.prototype.getPrecision = function () { + return ( + console.warn('THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.'), + this.capabilities.precision + ) + }), + (Yr.prototype.resetGLState = function () { + return ( + console.warn('THREE.WebGLRenderer: .resetGLState() is now .state.reset().'), + this.state.reset() + ) + }), + (Yr.prototype.supportsFloatTextures = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).", + ), + this.extensions.get('OES_texture_float') + ) + }), + (Yr.prototype.supportsHalfFloatTextures = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).", + ), + this.extensions.get('OES_texture_half_float') + ) + }), + (Yr.prototype.supportsStandardDerivatives = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).", + ), + this.extensions.get('OES_standard_derivatives') + ) + }), + (Yr.prototype.supportsCompressedTextureS3TC = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).", + ), + this.extensions.get('WEBGL_compressed_texture_s3tc') + ) + }), + (Yr.prototype.supportsCompressedTexturePVRTC = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).", + ), + this.extensions.get('WEBGL_compressed_texture_pvrtc') + ) + }), + (Yr.prototype.supportsBlendMinMax = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).", + ), + this.extensions.get('EXT_blend_minmax') + ) + }), + (Yr.prototype.supportsVertexTextures = function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.', + ), + this.capabilities.vertexTextures + ) + }), + (Yr.prototype.supportsInstancedArrays = function () { + return ( + console.warn( + "THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).", + ), + this.extensions.get('ANGLE_instanced_arrays') + ) + }), + (Yr.prototype.enableScissorTest = function (t) { + console.warn('THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().'), + this.setScissorTest(t) + }), + (Yr.prototype.initMaterial = function () { + console.warn('THREE.WebGLRenderer: .initMaterial() has been removed.') + }), + (Yr.prototype.addPrePlugin = function () { + console.warn('THREE.WebGLRenderer: .addPrePlugin() has been removed.') + }), + (Yr.prototype.addPostPlugin = function () { + console.warn('THREE.WebGLRenderer: .addPostPlugin() has been removed.') + }), + (Yr.prototype.updateShadowMap = function () { + console.warn('THREE.WebGLRenderer: .updateShadowMap() has been removed.') + }), + (Yr.prototype.setFaceCulling = function () { + console.warn('THREE.WebGLRenderer: .setFaceCulling() has been removed.') + }), + (Yr.prototype.allocTextureUnit = function () { + console.warn('THREE.WebGLRenderer: .allocTextureUnit() has been removed.') + }), + (Yr.prototype.setTexture = function () { + console.warn('THREE.WebGLRenderer: .setTexture() has been removed.') + }), + (Yr.prototype.setTexture2D = function () { + console.warn('THREE.WebGLRenderer: .setTexture2D() has been removed.') + }), + (Yr.prototype.setTextureCube = function () { + console.warn('THREE.WebGLRenderer: .setTextureCube() has been removed.') + }), + (Yr.prototype.getActiveMipMapLevel = function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().', + ), + this.getActiveMipmapLevel() + ) + }), + Object.defineProperties(Yr.prototype, { + shadowMapEnabled: { + get: function () { + return this.shadowMap.enabled + }, + set: function (t) { + console.warn('THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.'), + (this.shadowMap.enabled = t) + }, + }, + shadowMapType: { + get: function () { + return this.shadowMap.type + }, + set: function (t) { + console.warn('THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.'), + (this.shadowMap.type = t) + }, + }, + shadowMapCullFace: { + get: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.', + ) + }, + set: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.', + ) + }, + }, + context: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.', + ), + this.getContext() + ) + }, + }, + vr: { + get: function () { + return console.warn('THREE.WebGLRenderer: .vr has been renamed to .xr'), this.xr + }, + }, + gammaInput: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.', + ), + !1 + ) + }, + set: function () { + console.warn( + 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.', + ) + }, + }, + gammaOutput: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.', + ), + !1 + ) + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.', + ), + (this.outputEncoding = !0 === t ? B : O) + }, + }, + toneMappingWhitePoint: { + get: function () { + return ( + console.warn('THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.'), 1 + ) + }, + set: function () { + console.warn('THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.') + }, + }, + }), + Object.defineProperties(Fr.prototype, { + cullFace: { + get: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.', + ) + }, + set: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.', + ) + }, + }, + renderReverseSided: { + get: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.', + ) + }, + set: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.', + ) + }, + }, + renderSingleSided: { + get: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.', + ) + }, + set: function () { + console.warn( + 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.', + ) + }, + }, + }), + Object.defineProperties(lt.prototype, { + wrapS: { + get: function () { + return ( + console.warn('THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.'), + this.texture.wrapS + ) + }, + set: function (t) { + console.warn('THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.'), + (this.texture.wrapS = t) + }, + }, + wrapT: { + get: function () { + return ( + console.warn('THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.'), + this.texture.wrapT + ) + }, + set: function (t) { + console.warn('THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.'), + (this.texture.wrapT = t) + }, + }, + magFilter: { + get: function () { + return ( + console.warn('THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.'), + this.texture.magFilter + ) + }, + set: function (t) { + console.warn('THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.'), + (this.texture.magFilter = t) + }, + }, + minFilter: { + get: function () { + return ( + console.warn('THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.'), + this.texture.minFilter + ) + }, + set: function (t) { + console.warn('THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.'), + (this.texture.minFilter = t) + }, + }, + anisotropy: { + get: function () { + return ( + console.warn('THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.'), + this.texture.anisotropy + ) + }, + set: function (t) { + console.warn('THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.'), + (this.texture.anisotropy = t) + }, + }, + offset: { + get: function () { + return ( + console.warn('THREE.WebGLRenderTarget: .offset is now .texture.offset.'), + this.texture.offset + ) + }, + set: function (t) { + console.warn('THREE.WebGLRenderTarget: .offset is now .texture.offset.'), + (this.texture.offset = t) + }, + }, + repeat: { + get: function () { + return ( + console.warn('THREE.WebGLRenderTarget: .repeat is now .texture.repeat.'), + this.texture.repeat + ) + }, + set: function (t) { + console.warn('THREE.WebGLRenderTarget: .repeat is now .texture.repeat.'), + (this.texture.repeat = t) + }, + }, + format: { + get: function () { + return ( + console.warn('THREE.WebGLRenderTarget: .format is now .texture.format.'), + this.texture.format + ) + }, + set: function (t) { + console.warn('THREE.WebGLRenderTarget: .format is now .texture.format.'), + (this.texture.format = t) + }, + }, + type: { + get: function () { + return ( + console.warn('THREE.WebGLRenderTarget: .type is now .texture.type.'), + this.texture.type + ) + }, + set: function (t) { + console.warn('THREE.WebGLRenderTarget: .type is now .texture.type.'), + (this.texture.type = t) + }, + }, + generateMipmaps: { + get: function () { + return ( + console.warn( + 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.', + ), + this.texture.generateMipmaps + ) + }, + set: function (t) { + console.warn( + 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.', + ), + (this.texture.generateMipmaps = t) + }, + }, + }), + (hl.prototype.load = function (t) { + console.warn('THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.') + const e = this + return ( + new ol().load(t, function (t) { + e.setBuffer(t) + }), + this + ) + }), + (class { + constructor(t, e = 2048) { + ;(this.analyser = t.context.createAnalyser()), + (this.analyser.fftSize = e), + (this.data = new Uint8Array(this.analyser.frequencyBinCount)), + t.getOutput().connect(this.analyser) + } + getFrequencyData() { + return this.analyser.getByteFrequencyData(this.data), this.data + } + getAverageFrequency() { + let t = 0 + const e = this.getFrequencyData() + for (let n = 0; n < e.length; n++) t += e[n] + return t / e.length + } + }.prototype.getData = function () { + return ( + console.warn('THREE.AudioAnalyser: .getData() is now .getFrequencyData().'), + this.getFrequencyData() + ) + }), + (Sn.prototype.updateCubeMap = function (t, e) { + return ( + console.warn('THREE.CubeCamera: .updateCubeMap() is now .update().'), this.update(t, e) + ) + }), + (Sn.prototype.clear = function (t, e, n, i) { + return ( + console.warn('THREE.CubeCamera: .clear() is now .renderTarget.clear().'), + this.renderTarget.clear(t, e, n, i) + ) + }), + (it.crossOrigin = void 0), + (it.loadTexture = function (t, e, n, i) { + console.warn( + 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.', + ) + const r = new Ro() + r.setCrossOrigin(this.crossOrigin) + const s = r.load(t, n, void 0, i) + return e && (s.mapping = e), s + }), + (it.loadTextureCube = function (t, e, n, i) { + console.warn( + 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.', + ) + const r = new Ao() + r.setCrossOrigin(this.crossOrigin) + const s = r.load(t, n, void 0, i) + return e && (s.mapping = e), s + }), + (it.loadCompressedTexture = function () { + console.error( + 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.', + ) + }), + (it.loadCompressedTextureCube = function () { + console.error( + 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.', + ) + }) + 'undefined' !== typeof __THREE_DEVTOOLS__ && + __THREE_DEVTOOLS__.dispatchEvent( + new CustomEvent('register', { detail: { revision: '130' } }), + ), + 'undefined' !== typeof window && + (window.__THREE__ + ? console.warn('WARNING: Multiple instances of Three.js being imported.') + : (window.__THREE__ = '130')) + }, + }, +]) |