summaryrefslogtreecommitdiff
path: root/out/_next/static/chunks/fb7d5399-0d6001c72a29ebec41eb.js
diff options
context:
space:
mode:
authorBrian Lester <[email protected]>2021-08-05 21:48:26 -0400
committerGitHub <[email protected]>2021-08-05 21:48:26 -0400
commitfa8f4c45a3dcd5e90c3af45334077414d1ef22c2 (patch)
tree50532d6e54eb25fe110729ddb54fea3fd70f982e /out/_next/static/chunks/fb7d5399-0d6001c72a29ebec41eb.js
parent346f847fa2cb386e2ff20c55d2f4d80b22ce109f (diff)
parent87ac58c08aa71d6b4bb3fe5c0d5079018c476da6 (diff)
Merge branch 'main' into main
Diffstat (limited to 'out/_next/static/chunks/fb7d5399-0d6001c72a29ebec41eb.js')
-rw-r--r--out/_next/static/chunks/fb7d5399-0d6001c72a29ebec41eb.js21147
1 files changed, 1 insertions, 21146 deletions
diff --git a/out/_next/static/chunks/fb7d5399-0d6001c72a29ebec41eb.js b/out/_next/static/chunks/fb7d5399-0d6001c72a29ebec41eb.js
index aca620d..53399d4 100644
--- a/out/_next/static/chunks/fb7d5399-0d6001c72a29ebec41eb.js
+++ b/out/_next/static/chunks/fb7d5399-0d6001c72a29ebec41eb.js
@@ -1,21146 +1 @@
-;(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
- },
- jyi: function () {
- return fs
- },
- xeV: function () {
- return es
- },
- QmN: function () {
- return r
- },
- xEZ: function () {
- return st
- },
- 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'))
- },
- },
-])
+(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},jyi:function(){return fs},xeV:function(){return es},QmN:function(){return r},xEZ:function(){return st},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",.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=.01,a=.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=.707106781,r=.707106781):(n=Math.sqrt(t),i=y/n,r=x/n):o>v?o<s?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(o),n=y/i,r=_/i):v<s?(n=.707106781,i=.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)<.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=.5/Math.sqrt(u+1);this._w=.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=.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=.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=.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(.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(.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=.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=.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(.5),Ot.copy(e).sub(t).normalize(),Bt.copy(this.origin).sub(zt);const r=.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)<.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)<.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)<.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)<.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)<.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)<.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),.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<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function Pe(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function De(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.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<=.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<=.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=.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=.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=.5*this.getFilmHeight()/t;this.fov=2*X*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*q*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*X*Math.atan(Math.tan(.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(.5*q*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.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=.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:.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(.5,.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(.5*e.width,0,0),t.halfHeight.set(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(.5*e.width,0,0),t.halfHeight.set(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,.5,3,-1,.5,-1,3,.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=.02,c=.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=.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([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.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(.5,.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(-.5,-.5,0),ss,s,rs,i,r),gs(hs.set(.5,-.5,0),ss,s,rs,i,r),gs(us.set(.5,.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(-.5,.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(.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(.5,.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=.5*n+.5,s.y=.5*r*x+.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=.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?.5:.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=.5*(i-e),a=.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.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=.5/e:g==n&&o==Math.PI&&(y=-.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=.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=.5,Object.defineProperty(this,"ior",{get:function(){return(1+.4*this.reflectivity)/(1-.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=.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=.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=.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=.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+(-.5+u)*p+1,y=(-1-d)*f+(1.5+d)*m+.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(.5,0,0,.5,0,.5,0,.5,0,0,.5,.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,.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,.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=.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,.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(.282095),e.addScaledVector(s[1],.488603*i),e.addScaledVector(s[2],.488603*r),e.addScaledVector(s[3],.488603*n),e.addScaledVector(s[4],n*i*1.092548),e.addScaledVector(s[5],i*r*1.092548),e.addScaledVector(s[6],.315392*(3*r*r-1)),e.addScaledVector(s[7],n*r*1.092548),e.addScaledVector(s[8],.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(.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],.858086*n*i),e.addScaledVector(s[5],.858086*i*r),e.addScaledVector(s[6],.743125*r*r-.247708),e.addScaledVector(s[7],.858086*n*r),e.addScaledVector(s[8],.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]=.282095,e[1]=.488603*i,e[2]=.488603*r,e[3]=.488603*n,e[4]=1.092548*n*i,e[5]=1.092548*i*r,e[6]=.315392*(3*r*r-1),e[7]=1.092548*n*r,e[8]=.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(.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,.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,.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,.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>=.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,.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(.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(.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=[.125,.215,.35,.446,.526,.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(.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")}}]); \ No newline at end of file