summaryrefslogtreecommitdiff
path: root/out/_next/static/chunks/fb7d5399-a8c606efbc9e7c0edf90.js
diff options
context:
space:
mode:
authorThomas F. K. Jorna <[email protected]>2021-07-23 16:03:49 +0200
committerThomas F. K. Jorna <[email protected]>2021-07-23 16:03:49 +0200
commit7f8afb99e24d546973662ef2d59cf85db9d019dd (patch)
tree115620ac372a2ca2eeae8c24bcdf4c6207699075 /out/_next/static/chunks/fb7d5399-a8c606efbc9e7c0edf90.js
parent10cda32757e4940845c5c1479af09fe0b323222c (diff)
parent57b2ae80a4e6e496526f815f1e3fd1af56e0aa8c (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.js21137
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'))
+ },
+ },
+])