@playcanvas/splat-transform 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/ply.ts","../src/readPly.ts","../src/splat.ts","../node_modules/playcanvas/build/playcanvas/src/core/math/math.js","../node_modules/playcanvas/build/playcanvas/src/core/math/vec3.js","../node_modules/playcanvas/build/playcanvas/src/core/math/quat.js","../src/writeCompressedPly.ts","../src/index.ts"],"sourcesContent":["type PlyProperty = {\n name: string; // 'x', f_dc_0', etc\n type: string; // 'float', 'char', etc\n};\n\ntype PlyElement = {\n name: string; // 'vertex', etc\n count: number;\n properties: PlyProperty[];\n};\n\ntype PlyHeader = {\n strings: string[];\n elements: PlyElement[];\n};\n\ntype PlyFile = {\n header: PlyHeader;\n data: Buffer;\n};\n\nconst getDataType = (type: string) => {\n switch (type) {\n case 'char': return Int8Array;\n case 'uchar': return Uint8Array;\n case 'short': return Int16Array;\n case 'ushort': return Uint16Array;\n case 'int': return Int32Array;\n case 'uint': return Uint32Array;\n case 'float': return Float32Array;\n case 'double': return Float64Array;\n default: return null;\n };\n};\n\nconst calcDataSize = (plyFile: PlyHeader) => {\n let result = 0;\n for (const element of plyFile.elements) {\n for (const property of element.properties) {\n result += getDataType(property.type).BYTES_PER_ELEMENT * element.count;\n }\n }\n return result;\n};\n\nconst shNames = new Array(45).fill('').map((_, i) => `f_rest_${i}`);\n\nexport { PlyProperty, PlyElement, PlyHeader, PlyFile, getDataType, calcDataSize, shNames };\n","import { FileHandle } from 'node:fs/promises';\nimport { Buffer } from 'node:buffer';\nimport { calcDataSize, PlyElement, PlyHeader, PlyFile, getDataType } from './ply';\n\n// parse the ply header text and return an array of Element structures and a\n// string containing the ply format\nconst parsePlyHeader = (data: Buffer): PlyHeader => {\n // decode header and split into lines\n const strings = new TextDecoder('ascii')\n .decode(data)\n .split('\\n')\n .filter(line => line);\n\n const elements: PlyElement[] = [];\n let element;\n for (let i = 1; i < strings.length; ++i) {\n const words = strings[i].split(' ');\n\n switch (words[0]) {\n case 'ply':\n case 'format':\n case 'comment':\n case 'end_header':\n // skip\n break;\n case 'element': {\n if (words.length !== 3) {\n throw new Error('invalid ply header');\n }\n element = {\n name: words[1],\n count: parseInt(words[2], 10),\n properties: []\n };\n elements.push(element);\n break;\n }\n case 'property': {\n if (!element || words.length !== 3 || !getDataType(words[1])) {\n throw new Error('invalid ply header');\n }\n element.properties.push({\n name: words[2],\n type: words[1]\n });\n break;\n }\n default: {\n throw new Error(`unrecognized header value '${words[0]}' in ply header`);\n }\n }\n }\n\n return { strings, elements };\n}\n\nconst cmp = (a: Uint8Array, b: Uint8Array, aOffset = 0) => {\n for (let i = 0; i < b.length; ++i) {\n if (a[aOffset + i] !== b[i]) {\n return false;\n }\n }\n return true;\n};\n\nconst magicBytes = new Uint8Array([112, 108, 121, 10]); // ply\\n\nconst endHeaderBytes = new Uint8Array([10, 101, 110, 100, 95, 104, 101, 97, 100, 101, 114, 10]); // \\nend_header\\n\n\nconst readPly = async (fileHandle: FileHandle): Promise<PlyFile> => {\n\n // we don't support ply text header larger than 128k\n const headerBuf = Buffer.alloc(128 * 1024);\n\n // smallest possible header size\n let headerSize = magicBytes.length + endHeaderBytes.length;\n\n if ((await fileHandle.read(headerBuf, 0, headerSize)).bytesRead !== headerSize) {\n throw new Error('failed to read file header');\n }\n\n if (!cmp(headerBuf, magicBytes)) {\n throw new Error('invalid file header');\n }\n\n // read the rest of the header till we find end header byte pattern\n while (true) {\n // read the next character\n if ((await fileHandle.read(headerBuf, headerSize++, 1)).bytesRead !== 1) {\n throw new Error('failed to read file header');\n }\n\n // check if we've reached the end of the header\n if (cmp(headerBuf, endHeaderBytes, headerSize - endHeaderBytes.length)) {\n break;\n }\n }\n\n // parse the header\n const header = parsePlyHeader(headerBuf.subarray(0, headerSize));\n\n const dataSize = calcDataSize(header);\n\n const data = Buffer.alloc(dataSize);\n if ((await fileHandle.read(data, 0, dataSize)).bytesRead !== dataSize) {\n throw new Error('failed reading ply data');\n };\n\n return { header, data };\n};\n\nexport { readPly };\n","import { PlyElement, PlyFile, getDataType, shNames } from './ply';\n\n// wraps ply file data and adds helpers accessors\nclass Splat {\n plyFile: PlyFile;\n vertex: PlyElement;\n properties: { [key: string]: { type: string, offset: number } } = {};\n\n constructor(plyFile: PlyFile) {\n this.plyFile = plyFile;\n\n // find vertex element and populate property offsets\n let offset = 0;\n for (let i = 0; i < plyFile.header.elements.length; ++i) {\n const element = plyFile.header.elements[i];\n if (element.name === 'vertex') {\n this.vertex = element;\n }\n\n for (let j = 0; j < element.properties.length; ++j) {\n const property = element.properties[j];\n if (element === this.vertex) {\n this.properties[property.name] = {\n type: property.type,\n offset\n };\n }\n offset += getDataType(property.type).BYTES_PER_ELEMENT;\n }\n }\n }\n\n // return the total number of splats\n get numSplats() {\n return this.vertex?.count;\n }\n\n // return the number of spherical harmonic bands present in the data\n get numSHBands() {\n return { '9': 1, '24': 2, '-1': 3 }[shNames.findIndex(v => !this.properties.hasOwnProperty(v))] ?? 0;\n }\n\n // simple iterator that assumes input data is float32\n createIterator(fields: string[], result: number[]) {\n const offsets = fields.map(f => this.properties[f].offset / 4);\n const float32 = new Float32Array(this.plyFile.data.buffer);\n return (index: number) => {\n const base = index * this.vertex.properties.length;\n for (let i = 0; i < fields.length; ++i) {\n result[i] = float32[base + offsets[i]];\n }\n };\n }\n}\n\nexport { Splat };\n","const math = {\n\tDEG_TO_RAD: Math.PI / 180,\n\tRAD_TO_DEG: 180 / Math.PI,\n\tclamp(value, min, max) {\n\t\tif (value >= max) return max;\n\t\tif (value <= min) return min;\n\t\treturn value;\n\t},\n\tintToBytes24(i) {\n\t\tconst r = i >> 16 & 0xff;\n\t\tconst g = i >> 8 & 0xff;\n\t\tconst b = i & 0xff;\n\t\treturn [r, g, b];\n\t},\n\tintToBytes32(i) {\n\t\tconst r = i >> 24 & 0xff;\n\t\tconst g = i >> 16 & 0xff;\n\t\tconst b = i >> 8 & 0xff;\n\t\tconst a = i & 0xff;\n\t\treturn [r, g, b, a];\n\t},\n\tbytesToInt24(r, g, b) {\n\t\tif (r.length) {\n\t\t\tb = r[2];\n\t\t\tg = r[1];\n\t\t\tr = r[0];\n\t\t}\n\t\treturn r << 16 | g << 8 | b;\n\t},\n\tbytesToInt32(r, g, b, a) {\n\t\tif (r.length) {\n\t\t\ta = r[3];\n\t\t\tb = r[2];\n\t\t\tg = r[1];\n\t\t\tr = r[0];\n\t\t}\n\t\treturn (r << 24 | g << 16 | b << 8 | a) >>> 0;\n\t},\n\tlerp(a, b, alpha) {\n\t\treturn a + (b - a) * math.clamp(alpha, 0, 1);\n\t},\n\tlerpAngle(a, b, alpha) {\n\t\tif (b - a > 180) {\n\t\t\tb -= 360;\n\t\t}\n\t\tif (b - a < -180) {\n\t\t\tb += 360;\n\t\t}\n\t\treturn math.lerp(a, b, math.clamp(alpha, 0, 1));\n\t},\n\tpowerOfTwo(x) {\n\t\treturn x !== 0 && !(x & x - 1);\n\t},\n\tnextPowerOfTwo(val) {\n\t\tval--;\n\t\tval |= val >> 1;\n\t\tval |= val >> 2;\n\t\tval |= val >> 4;\n\t\tval |= val >> 8;\n\t\tval |= val >> 16;\n\t\tval++;\n\t\treturn val;\n\t},\n\tnearestPowerOfTwo(val) {\n\t\treturn Math.pow(2, Math.round(Math.log(val) / Math.log(2)));\n\t},\n\trandom(min, max) {\n\t\tconst diff = max - min;\n\t\treturn Math.random() * diff + min;\n\t},\n\tsmoothstep(min, max, x) {\n\t\tif (x <= min) return 0;\n\t\tif (x >= max) return 1;\n\t\tx = (x - min) / (max - min);\n\t\treturn x * x * (3 - 2 * x);\n\t},\n\tsmootherstep(min, max, x) {\n\t\tif (x <= min) return 0;\n\t\tif (x >= max) return 1;\n\t\tx = (x - min) / (max - min);\n\t\treturn x * x * x * (x * (x * 6 - 15) + 10);\n\t},\n\troundUp(numToRound, multiple) {\n\t\tif (multiple === 0) {\n\t\t\treturn numToRound;\n\t\t}\n\t\treturn Math.ceil(numToRound / multiple) * multiple;\n\t},\n\tbetween(num, a, b, inclusive) {\n\t\tconst min = Math.min(a, b);\n\t\tconst max = Math.max(a, b);\n\t\treturn inclusive ? num >= min && num <= max : num > min && num < max;\n\t}\n};\n\nexport { math };\n","var _Vec;\nclass Vec3 {\n\tconstructor(x = 0, y = 0, z = 0) {\n\t\tthis.x = void 0;\n\t\tthis.y = void 0;\n\t\tthis.z = void 0;\n\t\tif (x.length === 3) {\n\t\t\tthis.x = x[0];\n\t\t\tthis.y = x[1];\n\t\t\tthis.z = x[2];\n\t\t} else {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\t\t}\n\t}\n\tadd(rhs) {\n\t\tthis.x += rhs.x;\n\t\tthis.y += rhs.y;\n\t\tthis.z += rhs.z;\n\t\treturn this;\n\t}\n\tadd2(lhs, rhs) {\n\t\tthis.x = lhs.x + rhs.x;\n\t\tthis.y = lhs.y + rhs.y;\n\t\tthis.z = lhs.z + rhs.z;\n\t\treturn this;\n\t}\n\taddScalar(scalar) {\n\t\tthis.x += scalar;\n\t\tthis.y += scalar;\n\t\tthis.z += scalar;\n\t\treturn this;\n\t}\n\taddScaled(rhs, scalar) {\n\t\tthis.x += rhs.x * scalar;\n\t\tthis.y += rhs.y * scalar;\n\t\tthis.z += rhs.z * scalar;\n\t\treturn this;\n\t}\n\tclone() {\n\t\tconst cstr = this.constructor;\n\t\treturn new cstr(this.x, this.y, this.z);\n\t}\n\tcopy(rhs) {\n\t\tthis.x = rhs.x;\n\t\tthis.y = rhs.y;\n\t\tthis.z = rhs.z;\n\t\treturn this;\n\t}\n\tcross(lhs, rhs) {\n\t\tconst lx = lhs.x;\n\t\tconst ly = lhs.y;\n\t\tconst lz = lhs.z;\n\t\tconst rx = rhs.x;\n\t\tconst ry = rhs.y;\n\t\tconst rz = rhs.z;\n\t\tthis.x = ly * rz - ry * lz;\n\t\tthis.y = lz * rx - rz * lx;\n\t\tthis.z = lx * ry - rx * ly;\n\t\treturn this;\n\t}\n\tdistance(rhs) {\n\t\tconst x = this.x - rhs.x;\n\t\tconst y = this.y - rhs.y;\n\t\tconst z = this.z - rhs.z;\n\t\treturn Math.sqrt(x * x + y * y + z * z);\n\t}\n\tdiv(rhs) {\n\t\tthis.x /= rhs.x;\n\t\tthis.y /= rhs.y;\n\t\tthis.z /= rhs.z;\n\t\treturn this;\n\t}\n\tdiv2(lhs, rhs) {\n\t\tthis.x = lhs.x / rhs.x;\n\t\tthis.y = lhs.y / rhs.y;\n\t\tthis.z = lhs.z / rhs.z;\n\t\treturn this;\n\t}\n\tdivScalar(scalar) {\n\t\tthis.x /= scalar;\n\t\tthis.y /= scalar;\n\t\tthis.z /= scalar;\n\t\treturn this;\n\t}\n\tdot(rhs) {\n\t\treturn this.x * rhs.x + this.y * rhs.y + this.z * rhs.z;\n\t}\n\tequals(rhs) {\n\t\treturn this.x === rhs.x && this.y === rhs.y && this.z === rhs.z;\n\t}\n\tequalsApprox(rhs, epsilon = 1e-6) {\n\t\treturn Math.abs(this.x - rhs.x) < epsilon && Math.abs(this.y - rhs.y) < epsilon && Math.abs(this.z - rhs.z) < epsilon;\n\t}\n\tlength() {\n\t\treturn Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n\t}\n\tlengthSq() {\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\t}\n\tlerp(lhs, rhs, alpha) {\n\t\tthis.x = lhs.x + alpha * (rhs.x - lhs.x);\n\t\tthis.y = lhs.y + alpha * (rhs.y - lhs.y);\n\t\tthis.z = lhs.z + alpha * (rhs.z - lhs.z);\n\t\treturn this;\n\t}\n\tmul(rhs) {\n\t\tthis.x *= rhs.x;\n\t\tthis.y *= rhs.y;\n\t\tthis.z *= rhs.z;\n\t\treturn this;\n\t}\n\tmul2(lhs, rhs) {\n\t\tthis.x = lhs.x * rhs.x;\n\t\tthis.y = lhs.y * rhs.y;\n\t\tthis.z = lhs.z * rhs.z;\n\t\treturn this;\n\t}\n\tmulScalar(scalar) {\n\t\tthis.x *= scalar;\n\t\tthis.y *= scalar;\n\t\tthis.z *= scalar;\n\t\treturn this;\n\t}\n\tnormalize(src = this) {\n\t\tconst lengthSq = src.x * src.x + src.y * src.y + src.z * src.z;\n\t\tif (lengthSq > 0) {\n\t\t\tconst invLength = 1 / Math.sqrt(lengthSq);\n\t\t\tthis.x = src.x * invLength;\n\t\t\tthis.y = src.y * invLength;\n\t\t\tthis.z = src.z * invLength;\n\t\t}\n\t\treturn this;\n\t}\n\tfloor(src = this) {\n\t\tthis.x = Math.floor(src.x);\n\t\tthis.y = Math.floor(src.y);\n\t\tthis.z = Math.floor(src.z);\n\t\treturn this;\n\t}\n\tceil(src = this) {\n\t\tthis.x = Math.ceil(src.x);\n\t\tthis.y = Math.ceil(src.y);\n\t\tthis.z = Math.ceil(src.z);\n\t\treturn this;\n\t}\n\tround(src = this) {\n\t\tthis.x = Math.round(src.x);\n\t\tthis.y = Math.round(src.y);\n\t\tthis.z = Math.round(src.z);\n\t\treturn this;\n\t}\n\tmin(rhs) {\n\t\tif (rhs.x < this.x) this.x = rhs.x;\n\t\tif (rhs.y < this.y) this.y = rhs.y;\n\t\tif (rhs.z < this.z) this.z = rhs.z;\n\t\treturn this;\n\t}\n\tmax(rhs) {\n\t\tif (rhs.x > this.x) this.x = rhs.x;\n\t\tif (rhs.y > this.y) this.y = rhs.y;\n\t\tif (rhs.z > this.z) this.z = rhs.z;\n\t\treturn this;\n\t}\n\tproject(rhs) {\n\t\tconst a_dot_b = this.x * rhs.x + this.y * rhs.y + this.z * rhs.z;\n\t\tconst b_dot_b = rhs.x * rhs.x + rhs.y * rhs.y + rhs.z * rhs.z;\n\t\tconst s = a_dot_b / b_dot_b;\n\t\tthis.x = rhs.x * s;\n\t\tthis.y = rhs.y * s;\n\t\tthis.z = rhs.z * s;\n\t\treturn this;\n\t}\n\tset(x, y, z) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\treturn this;\n\t}\n\tsub(rhs) {\n\t\tthis.x -= rhs.x;\n\t\tthis.y -= rhs.y;\n\t\tthis.z -= rhs.z;\n\t\treturn this;\n\t}\n\tsub2(lhs, rhs) {\n\t\tthis.x = lhs.x - rhs.x;\n\t\tthis.y = lhs.y - rhs.y;\n\t\tthis.z = lhs.z - rhs.z;\n\t\treturn this;\n\t}\n\tsubScalar(scalar) {\n\t\tthis.x -= scalar;\n\t\tthis.y -= scalar;\n\t\tthis.z -= scalar;\n\t\treturn this;\n\t}\n\ttoString() {\n\t\treturn `[${this.x}, ${this.y}, ${this.z}]`;\n\t}\n}\n_Vec = Vec3;\nVec3.ZERO = Object.freeze(new _Vec(0, 0, 0));\nVec3.HALF = Object.freeze(new _Vec(0.5, 0.5, 0.5));\nVec3.ONE = Object.freeze(new _Vec(1, 1, 1));\nVec3.UP = Object.freeze(new _Vec(0, 1, 0));\nVec3.DOWN = Object.freeze(new _Vec(0, -1, 0));\nVec3.RIGHT = Object.freeze(new _Vec(1, 0, 0));\nVec3.LEFT = Object.freeze(new _Vec(-1, 0, 0));\nVec3.FORWARD = Object.freeze(new _Vec(0, 0, -1));\nVec3.BACK = Object.freeze(new _Vec(0, 0, 1));\n\nexport { Vec3 };\n","import { math } from './math.js';\nimport { Vec3 } from './vec3.js';\n\nvar _Quat;\nclass Quat {\n\tconstructor(x = 0, y = 0, z = 0, w = 1) {\n\t\tthis.x = void 0;\n\t\tthis.y = void 0;\n\t\tthis.z = void 0;\n\t\tthis.w = void 0;\n\t\tif (x.length === 4) {\n\t\t\tthis.x = x[0];\n\t\t\tthis.y = x[1];\n\t\t\tthis.z = x[2];\n\t\t\tthis.w = x[3];\n\t\t} else {\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\t\t\tthis.w = w;\n\t\t}\n\t}\n\tclone() {\n\t\tconst cstr = this.constructor;\n\t\treturn new cstr(this.x, this.y, this.z, this.w);\n\t}\n\tconjugate(src = this) {\n\t\tthis.x = src.x * -1;\n\t\tthis.y = src.y * -1;\n\t\tthis.z = src.z * -1;\n\t\tthis.w = src.w;\n\t\treturn this;\n\t}\n\tcopy(rhs) {\n\t\tthis.x = rhs.x;\n\t\tthis.y = rhs.y;\n\t\tthis.z = rhs.z;\n\t\tthis.w = rhs.w;\n\t\treturn this;\n\t}\n\tequals(rhs) {\n\t\treturn this.x === rhs.x && this.y === rhs.y && this.z === rhs.z && this.w === rhs.w;\n\t}\n\tequalsApprox(rhs, epsilon = 1e-6) {\n\t\treturn Math.abs(this.x - rhs.x) < epsilon && Math.abs(this.y - rhs.y) < epsilon && Math.abs(this.z - rhs.z) < epsilon && Math.abs(this.w - rhs.w) < epsilon;\n\t}\n\tgetAxisAngle(axis) {\n\t\tlet rad = Math.acos(this.w) * 2;\n\t\tconst s = Math.sin(rad / 2);\n\t\tif (s !== 0) {\n\t\t\taxis.x = this.x / s;\n\t\t\taxis.y = this.y / s;\n\t\t\taxis.z = this.z / s;\n\t\t\tif (axis.x < 0 || axis.y < 0 || axis.z < 0) {\n\t\t\t\taxis.x *= -1;\n\t\t\t\taxis.y *= -1;\n\t\t\t\taxis.z *= -1;\n\t\t\t\trad *= -1;\n\t\t\t}\n\t\t} else {\n\t\t\taxis.x = 1;\n\t\t\taxis.y = 0;\n\t\t\taxis.z = 0;\n\t\t}\n\t\treturn rad * math.RAD_TO_DEG;\n\t}\n\tgetEulerAngles(eulers = new Vec3()) {\n\t\tlet x, y, z;\n\t\tconst qx = this.x;\n\t\tconst qy = this.y;\n\t\tconst qz = this.z;\n\t\tconst qw = this.w;\n\t\tconst a2 = 2 * (qw * qy - qx * qz);\n\t\tif (a2 <= -0.99999) {\n\t\t\tx = 2 * Math.atan2(qx, qw);\n\t\t\ty = -Math.PI / 2;\n\t\t\tz = 0;\n\t\t} else if (a2 >= 0.99999) {\n\t\t\tx = 2 * Math.atan2(qx, qw);\n\t\t\ty = Math.PI / 2;\n\t\t\tz = 0;\n\t\t} else {\n\t\t\tx = Math.atan2(2 * (qw * qx + qy * qz), 1 - 2 * (qx * qx + qy * qy));\n\t\t\ty = Math.asin(a2);\n\t\t\tz = Math.atan2(2 * (qw * qz + qx * qy), 1 - 2 * (qy * qy + qz * qz));\n\t\t}\n\t\treturn eulers.set(x, y, z).mulScalar(math.RAD_TO_DEG);\n\t}\n\tinvert(src = this) {\n\t\treturn this.conjugate(src).normalize();\n\t}\n\tlength() {\n\t\treturn Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n\t}\n\tlengthSq() {\n\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\t}\n\tmul(rhs) {\n\t\tconst q1x = this.x;\n\t\tconst q1y = this.y;\n\t\tconst q1z = this.z;\n\t\tconst q1w = this.w;\n\t\tconst q2x = rhs.x;\n\t\tconst q2y = rhs.y;\n\t\tconst q2z = rhs.z;\n\t\tconst q2w = rhs.w;\n\t\tthis.x = q1w * q2x + q1x * q2w + q1y * q2z - q1z * q2y;\n\t\tthis.y = q1w * q2y + q1y * q2w + q1z * q2x - q1x * q2z;\n\t\tthis.z = q1w * q2z + q1z * q2w + q1x * q2y - q1y * q2x;\n\t\tthis.w = q1w * q2w - q1x * q2x - q1y * q2y - q1z * q2z;\n\t\treturn this;\n\t}\n\tmulScalar(scalar, src = this) {\n\t\tthis.x = src.x * scalar;\n\t\tthis.y = src.y * scalar;\n\t\tthis.z = src.z * scalar;\n\t\tthis.w = src.w * scalar;\n\t\treturn this;\n\t}\n\tmul2(lhs, rhs) {\n\t\tconst q1x = lhs.x;\n\t\tconst q1y = lhs.y;\n\t\tconst q1z = lhs.z;\n\t\tconst q1w = lhs.w;\n\t\tconst q2x = rhs.x;\n\t\tconst q2y = rhs.y;\n\t\tconst q2z = rhs.z;\n\t\tconst q2w = rhs.w;\n\t\tthis.x = q1w * q2x + q1x * q2w + q1y * q2z - q1z * q2y;\n\t\tthis.y = q1w * q2y + q1y * q2w + q1z * q2x - q1x * q2z;\n\t\tthis.z = q1w * q2z + q1z * q2w + q1x * q2y - q1y * q2x;\n\t\tthis.w = q1w * q2w - q1x * q2x - q1y * q2y - q1z * q2z;\n\t\treturn this;\n\t}\n\tnormalize(src = this) {\n\t\tlet len = src.length();\n\t\tif (len === 0) {\n\t\t\tthis.x = this.y = this.z = 0;\n\t\t\tthis.w = 1;\n\t\t} else {\n\t\t\tlen = 1 / len;\n\t\t\tthis.x = src.x * len;\n\t\t\tthis.y = src.y * len;\n\t\t\tthis.z = src.z * len;\n\t\t\tthis.w = src.w * len;\n\t\t}\n\t\treturn this;\n\t}\n\tset(x, y, z, w) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\tthis.w = w;\n\t\treturn this;\n\t}\n\tsetFromAxisAngle(axis, angle) {\n\t\tangle *= 0.5 * math.DEG_TO_RAD;\n\t\tconst sa = Math.sin(angle);\n\t\tconst ca = Math.cos(angle);\n\t\tthis.x = sa * axis.x;\n\t\tthis.y = sa * axis.y;\n\t\tthis.z = sa * axis.z;\n\t\tthis.w = ca;\n\t\treturn this;\n\t}\n\tsetFromEulerAngles(ex, ey, ez) {\n\t\tif (ex instanceof Vec3) {\n\t\t\tconst vec = ex;\n\t\t\tex = vec.x;\n\t\t\tey = vec.y;\n\t\t\tez = vec.z;\n\t\t}\n\t\tconst halfToRad = 0.5 * math.DEG_TO_RAD;\n\t\tex *= halfToRad;\n\t\tey *= halfToRad;\n\t\tez *= halfToRad;\n\t\tconst sx = Math.sin(ex);\n\t\tconst cx = Math.cos(ex);\n\t\tconst sy = Math.sin(ey);\n\t\tconst cy = Math.cos(ey);\n\t\tconst sz = Math.sin(ez);\n\t\tconst cz = Math.cos(ez);\n\t\tthis.x = sx * cy * cz - cx * sy * sz;\n\t\tthis.y = cx * sy * cz + sx * cy * sz;\n\t\tthis.z = cx * cy * sz - sx * sy * cz;\n\t\tthis.w = cx * cy * cz + sx * sy * sz;\n\t\treturn this;\n\t}\n\tsetFromMat4(m) {\n\t\tconst d = m.data;\n\t\tlet m00 = d[0];\n\t\tlet m01 = d[1];\n\t\tlet m02 = d[2];\n\t\tlet m10 = d[4];\n\t\tlet m11 = d[5];\n\t\tlet m12 = d[6];\n\t\tlet m20 = d[8];\n\t\tlet m21 = d[9];\n\t\tlet m22 = d[10];\n\t\tlet l;\n\t\tl = m00 * m00 + m01 * m01 + m02 * m02;\n\t\tif (l === 0) return this.set(0, 0, 0, 1);\n\t\tl = 1 / Math.sqrt(l);\n\t\tm00 *= l;\n\t\tm01 *= l;\n\t\tm02 *= l;\n\t\tl = m10 * m10 + m11 * m11 + m12 * m12;\n\t\tif (l === 0) return this.set(0, 0, 0, 1);\n\t\tl = 1 / Math.sqrt(l);\n\t\tm10 *= l;\n\t\tm11 *= l;\n\t\tm12 *= l;\n\t\tl = m20 * m20 + m21 * m21 + m22 * m22;\n\t\tif (l === 0) return this.set(0, 0, 0, 1);\n\t\tl = 1 / Math.sqrt(l);\n\t\tm20 *= l;\n\t\tm21 *= l;\n\t\tm22 *= l;\n\t\tif (m22 < 0) {\n\t\t\tif (m00 > m11) {\n\t\t\t\tthis.set(1 + m00 - m11 - m22, m01 + m10, m20 + m02, m12 - m21);\n\t\t\t} else {\n\t\t\t\tthis.set(m01 + m10, 1 - m00 + m11 - m22, m12 + m21, m20 - m02);\n\t\t\t}\n\t\t} else {\n\t\t\tif (m00 < -m11) {\n\t\t\t\tthis.set(m20 + m02, m12 + m21, 1 - m00 - m11 + m22, m01 - m10);\n\t\t\t} else {\n\t\t\t\tthis.set(m12 - m21, m20 - m02, m01 - m10, 1 + m00 + m11 + m22);\n\t\t\t}\n\t\t}\n\t\treturn this.mulScalar(1.0 / this.length());\n\t}\n\tsetFromDirections(from, to) {\n\t\tconst dotProduct = 1 + from.dot(to);\n\t\tif (dotProduct < Number.EPSILON) {\n\t\t\tif (Math.abs(from.x) > Math.abs(from.y)) {\n\t\t\t\tthis.x = -from.z;\n\t\t\t\tthis.y = 0;\n\t\t\t\tthis.z = from.x;\n\t\t\t\tthis.w = 0;\n\t\t\t} else {\n\t\t\t\tthis.x = 0;\n\t\t\t\tthis.y = -from.z;\n\t\t\t\tthis.z = from.y;\n\t\t\t\tthis.w = 0;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.x = from.y * to.z - from.z * to.y;\n\t\t\tthis.y = from.z * to.x - from.x * to.z;\n\t\t\tthis.z = from.x * to.y - from.y * to.x;\n\t\t\tthis.w = dotProduct;\n\t\t}\n\t\treturn this.normalize();\n\t}\n\tslerp(lhs, rhs, alpha) {\n\t\tconst lx = lhs.x;\n\t\tconst ly = lhs.y;\n\t\tconst lz = lhs.z;\n\t\tconst lw = lhs.w;\n\t\tlet rx = rhs.x;\n\t\tlet ry = rhs.y;\n\t\tlet rz = rhs.z;\n\t\tlet rw = rhs.w;\n\t\tlet cosHalfTheta = lw * rw + lx * rx + ly * ry + lz * rz;\n\t\tif (cosHalfTheta < 0) {\n\t\t\trw = -rw;\n\t\t\trx = -rx;\n\t\t\try = -ry;\n\t\t\trz = -rz;\n\t\t\tcosHalfTheta = -cosHalfTheta;\n\t\t}\n\t\tif (Math.abs(cosHalfTheta) >= 1) {\n\t\t\tthis.w = lw;\n\t\t\tthis.x = lx;\n\t\t\tthis.y = ly;\n\t\t\tthis.z = lz;\n\t\t\treturn this;\n\t\t}\n\t\tconst halfTheta = Math.acos(cosHalfTheta);\n\t\tconst sinHalfTheta = Math.sqrt(1 - cosHalfTheta * cosHalfTheta);\n\t\tif (Math.abs(sinHalfTheta) < 0.001) {\n\t\t\tthis.w = lw * 0.5 + rw * 0.5;\n\t\t\tthis.x = lx * 0.5 + rx * 0.5;\n\t\t\tthis.y = ly * 0.5 + ry * 0.5;\n\t\t\tthis.z = lz * 0.5 + rz * 0.5;\n\t\t\treturn this;\n\t\t}\n\t\tconst ratioA = Math.sin((1 - alpha) * halfTheta) / sinHalfTheta;\n\t\tconst ratioB = Math.sin(alpha * halfTheta) / sinHalfTheta;\n\t\tthis.w = lw * ratioA + rw * ratioB;\n\t\tthis.x = lx * ratioA + rx * ratioB;\n\t\tthis.y = ly * ratioA + ry * ratioB;\n\t\tthis.z = lz * ratioA + rz * ratioB;\n\t\treturn this;\n\t}\n\ttransformVector(vec, res = new Vec3()) {\n\t\tconst x = vec.x,\n\t\t\ty = vec.y,\n\t\t\tz = vec.z;\n\t\tconst qx = this.x,\n\t\t\tqy = this.y,\n\t\t\tqz = this.z,\n\t\t\tqw = this.w;\n\t\tconst ix = qw * x + qy * z - qz * y;\n\t\tconst iy = qw * y + qz * x - qx * z;\n\t\tconst iz = qw * z + qx * y - qy * x;\n\t\tconst iw = -qx * x - qy * y - qz * z;\n\t\tres.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n\t\tres.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n\t\tres.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\t\treturn res;\n\t}\n\ttoString() {\n\t\treturn `[${this.x}, ${this.y}, ${this.z}, ${this.w}]`;\n\t}\n}\n_Quat = Quat;\nQuat.IDENTITY = Object.freeze(new _Quat(0, 0, 0, 1));\nQuat.ZERO = Object.freeze(new _Quat(0, 0, 0, 0));\n\nexport { Quat };\n","import { version } from '../package.json';\nimport { FileHandle } from 'node:fs/promises';\nimport { Splat } from './splat';\nimport { Quat } from 'playcanvas';\nimport { shNames } from './ply';\n\nconst generatedByString = `Generated by splat-transform ${version}`;\nconst shBandCoeffs = [0, 3, 8, 15];\n\nconst q = new Quat();\n\ntype CompressedIndex = {\n splatIndex: number;\n i: number;\n globalIndex: number;\n}\n\n// process and compress a chunk of 256 splats\nclass Chunk {\n static members = [\n 'x', 'y', 'z',\n 'scale_0', 'scale_1', 'scale_2',\n 'f_dc_0', 'f_dc_1', 'f_dc_2', 'opacity',\n 'rot_0', 'rot_1', 'rot_2', 'rot_3'\n ];\n\n size: number;\n data: any = {};\n\n // compressed data\n chunkData: Float32Array;\n position: Uint32Array;\n rotation: Uint32Array;\n scale: Uint32Array;\n color: Uint32Array;\n\n constructor(size = 256) {\n this.size = size;\n Chunk.members.forEach((m) => {\n this.data[m] = new Float32Array(size);\n });\n this.chunkData = new Float32Array(18);\n this.position = new Uint32Array(size);\n this.rotation = new Uint32Array(size);\n this.scale = new Uint32Array(size);\n this.color = new Uint32Array(size);\n }\n\n set(index: number, singleSplat: number[]) {\n for (let i = 0; i < Chunk.members.length; ++i) {\n this.data[Chunk.members[i]][index] = singleSplat[i];\n }\n }\n\n pack() {\n const calcMinMax = (data: Float32Array) => {\n let min;\n let max;\n min = max = data[0];\n for (let i = 1; i < data.length; ++i) {\n const v = data[i];\n min = Math.min(min, v);\n max = Math.max(max, v);\n }\n return { min, max };\n };\n\n const normalize = (x: number, min: number, max: number) => {\n if (x <= min) return 0;\n if (x >= max) return 1;\n return (max - min < 0.00001) ? 0 : (x - min) / (max - min);\n };\n\n const data = this.data;\n\n const x = data.x;\n const y = data.y;\n const z = data.z;\n const scale_0 = data.scale_0;\n const scale_1 = data.scale_1;\n const scale_2 = data.scale_2;\n const rot_0 = data.rot_0;\n const rot_1 = data.rot_1;\n const rot_2 = data.rot_2;\n const rot_3 = data.rot_3;\n const f_dc_0 = data.f_dc_0;\n const f_dc_1 = data.f_dc_1;\n const f_dc_2 = data.f_dc_2;\n const opacity = data.opacity;\n\n const px = calcMinMax(x);\n const py = calcMinMax(y);\n const pz = calcMinMax(z);\n\n const sx = calcMinMax(scale_0);\n const sy = calcMinMax(scale_1);\n const sz = calcMinMax(scale_2);\n\n // clamp scale because sometimes values are at infinity\n const clamp = (v: number, min: number, max: number) => Math.max(min, Math.min(max, v));\n sx.min = clamp(sx.min, -20, 20);\n sx.max = clamp(sx.max, -20, 20);\n sy.min = clamp(sy.min, -20, 20);\n sy.max = clamp(sy.max, -20, 20);\n sz.min = clamp(sz.min, -20, 20);\n sz.max = clamp(sz.max, -20, 20);\n\n // convert f_dc_ to colors before calculating min/max and packaging\n const SH_C0 = 0.28209479177387814;\n for (let i = 0; i < f_dc_0.length; ++i) {\n f_dc_0[i] = f_dc_0[i] * SH_C0 + 0.5;\n f_dc_1[i] = f_dc_1[i] * SH_C0 + 0.5;\n f_dc_2[i] = f_dc_2[i] * SH_C0 + 0.5;\n }\n\n const cr = calcMinMax(f_dc_0);\n const cg = calcMinMax(f_dc_1);\n const cb = calcMinMax(f_dc_2);\n\n const packUnorm = (value: number, bits: number) => {\n const t = (1 << bits) - 1;\n return Math.max(0, Math.min(t, Math.floor(value * t + 0.5)));\n };\n\n const pack111011 = (x: number, y: number, z: number) => {\n return packUnorm(x, 11) << 21 |\n packUnorm(y, 10) << 11 |\n packUnorm(z, 11);\n };\n\n const pack8888 = (x: number, y: number, z: number, w: number) => {\n return packUnorm(x, 8) << 24 |\n packUnorm(y, 8) << 16 |\n packUnorm(z, 8) << 8 |\n packUnorm(w, 8);\n };\n\n // pack quaternion into 2,10,10,10\n const packRot = (x: number, y: number, z: number, w: number) => {\n q.set(x, y, z, w).normalize();\n const a = [q.x, q.y, q.z, q.w];\n const largest = a.reduce((curr, v, i) => (Math.abs(v) > Math.abs(a[curr]) ? i : curr), 0);\n\n if (a[largest] < 0) {\n a[0] = -a[0];\n a[1] = -a[1];\n a[2] = -a[2];\n a[3] = -a[3];\n }\n\n const norm = Math.sqrt(2) * 0.5;\n let result = largest;\n for (let i = 0; i < 4; ++i) {\n if (i !== largest) {\n result = (result << 10) | packUnorm(a[i] * norm + 0.5, 10);\n }\n }\n\n return result;\n };\n\n // pack\n for (let i = 0; i < this.size; ++i) {\n this.position[i] = pack111011(\n normalize(x[i], px.min, px.max),\n normalize(y[i], py.min, py.max),\n normalize(z[i], pz.min, pz.max)\n );\n\n this.rotation[i] = packRot(rot_0[i], rot_1[i], rot_2[i], rot_3[i]);\n\n this.scale[i] = pack111011(\n normalize(scale_0[i], sx.min, sx.max),\n normalize(scale_1[i], sy.min, sy.max),\n normalize(scale_2[i], sz.min, sz.max)\n );\n\n this.color[i] = pack8888(\n normalize(f_dc_0[i], cr.min, cr.max),\n normalize(f_dc_1[i], cg.min, cg.max),\n normalize(f_dc_2[i], cb.min, cb.max),\n 1 / (1 + Math.exp(-opacity[i]))\n );\n }\n\n this.chunkData.set([\n px.min, py.min, pz.min, px.max, py.max, pz.max,\n sx.min, sy.min, sz.min, sx.max, sy.max, sz.max,\n cr.min, cg.min, cb.min, cr.max, cg.max, cb.max\n ], 0);\n }\n}\n\n// sort the compressed indices into morton order\nconst sortSplats = (splat: Splat, indices: CompressedIndex[]) => {\n // https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/\n const encodeMorton3 = (x: number, y: number, z: number) : number => {\n const Part1By2 = (x: number) => {\n x &= 0x000003ff;\n x = (x ^ (x << 16)) & 0xff0000ff;\n x = (x ^ (x << 8)) & 0x0300f00f;\n x = (x ^ (x << 4)) & 0x030c30c3;\n x = (x ^ (x << 2)) & 0x09249249;\n return x;\n };\n\n return (Part1By2(z) << 2) + (Part1By2(y) << 1) + Part1By2(x);\n };\n\n let minx: number;\n let miny: number;\n let minz: number;\n let maxx: number;\n let maxy: number;\n let maxz: number;\n\n const vertex = [0, 0, 0];\n const it = splat.createIterator(['x', 'y', 'z'], vertex);\n\n // calculate scene extents across all splats (using sort centers, because they're in world space)\n for (let i = 0; i < splat.numSplats; ++i) {\n it(i);\n\n const x = vertex[0];\n const y = vertex[1];\n const z = vertex[2];\n\n if (minx === undefined) {\n minx = maxx = x;\n miny = maxy = y;\n minz = maxz = z;\n } else {\n if (x < minx) minx = x; else if (x > maxx) maxx = x;\n if (y < miny) miny = y; else if (y > maxy) maxy = y;\n if (z < minz) minz = z; else if (z > maxz) maxz = z;\n }\n }\n\n const xlen = maxx - minx;\n const ylen = maxy - miny;\n const zlen = maxz - minz;\n\n const morton = new Uint32Array(indices.length);\n let idx = 0;\n for (let i = 0; i < splat.numSplats; ++i) {\n it(i);\n\n const x = vertex[0];\n const y = vertex[1];\n const z = vertex[2];\n\n const ix = Math.floor(1024 * (x - minx) / xlen);\n const iy = Math.floor(1024 * (y - miny) / ylen);\n const iz = Math.floor(1024 * (z - minz) / zlen);\n\n morton[idx++] = encodeMorton3(ix, iy, iz);\n }\n\n // order splats by morton code\n indices.sort((a, b) => morton[a.globalIndex] - morton[b.globalIndex]);\n};\n\nconst chunkProps = [\n 'min_x', 'min_y', 'min_z',\n 'max_x', 'max_y', 'max_z',\n 'min_scale_x', 'min_scale_y', 'min_scale_z',\n 'max_scale_x', 'max_scale_y', 'max_scale_z',\n 'min_r', 'min_g', 'min_b',\n 'max_r', 'max_g', 'max_b'\n];\n\nconst vertexProps = [\n 'packed_position',\n 'packed_rotation',\n 'packed_scale',\n 'packed_color'\n];\n\nconst writeCompressedPly = async (fileHandle: FileHandle, splat: Splat) => {\n // make a list of indices spanning all splats (so we can sort them together)\n const indices: CompressedIndex[] = [];\n for (let i = 0; i < splat.numSplats; ++i) {\n indices.push({ splatIndex: 0, i, globalIndex: indices.length });\n }\n\n if (indices.length === 0) {\n throw new Error('no splats to write');\n }\n\n const numSplats = indices.length;\n const numChunks = Math.ceil(numSplats / 256);\n const outputSHBands = splat.numSHBands;\n const outputSHCoeffs = shBandCoeffs[outputSHBands];\n\n const shHeader = outputSHBands ? [\n `element sh ${numSplats}`,\n new Array(outputSHCoeffs * 3).fill('').map((_, i) => `property uchar f_rest_${i}`)\n ].flat() : [];\n\n const headerText = [\n 'ply',\n 'format binary_little_endian 1.0',\n `comment ${generatedByString}`,\n `element chunk ${numChunks}`,\n chunkProps.map(p => `property float ${p}`),\n `element vertex ${numSplats}`,\n vertexProps.map(p => `property uint ${p}`),\n shHeader,\n 'end_header\\n'\n ].flat().join('\\n');\n\n const header = (new TextEncoder()).encode(headerText);\n const chunkData = new Float32Array(numChunks * chunkProps.length);\n const splatData = new Uint32Array(numSplats * vertexProps.length);\n const shData = new Uint8Array(numSplats * outputSHCoeffs * 3);\n\n // sort splats into some kind of order (morton order rn)\n sortSplats(splat, indices);\n\n const singleSplat = Chunk.members.map(_ => 0);\n const it = splat.createIterator(Chunk.members, singleSplat);\n\n const shMembers = shNames.slice(0, outputSHCoeffs * 3);\n const singleSH = shMembers.map(_ => 0);\n const shIt = splat.createIterator(shMembers, singleSH);\n\n const chunk = new Chunk();\n\n for (let i = 0; i < numChunks; ++i) {\n const num = Math.min(numSplats, (i + 1) * 256) - i * 256;\n for (let j = 0; j < num; ++j) {\n const index = indices[i * 256 + j];\n\n // read splat data\n it(index.i);\n\n // update chunk\n chunk.set(j, singleSplat);\n\n shIt(index.i);\n\n // quantize and write sh data\n let off = (i * 256 + j) * outputSHCoeffs * 3;\n for (let k = 0; k < outputSHCoeffs * 3; ++k) {\n const nvalue = singleSH[k] / 8 + 0.5;\n shData[off++] = Math.max(0, Math.min(255, Math.trunc(nvalue * 256)));\n }\n }\n\n // pack the chunk\n chunk.pack();\n\n // store the float data\n chunkData.set(chunk.chunkData, i * 18);\n\n // write packed bits\n const offset = i * 256 * 4;\n for (let j = 0; j < num; ++j) {\n splatData[offset + j * 4 + 0] = chunk.position[j];\n splatData[offset + j * 4 + 1] = chunk.rotation[j];\n splatData[offset + j * 4 + 2] = chunk.scale[j];\n splatData[offset + j * 4 + 3] = chunk.color[j];\n }\n }\n\n await fileHandle.write(header);\n await fileHandle.write(new Uint8Array(chunkData.buffer));\n await fileHandle.write(new Uint8Array(splatData.buffer));\n await fileHandle.write(shData);\n};\n\nexport { writeCompressedPly };\n","import { version } from '../package.json';\nimport { open } from 'node:fs/promises';\nimport { readPly } from './readPly';\nimport { PlyFile } from './ply';\nimport { Splat } from './splat';\nimport { writeCompressedPly } from './writeCompressedPly';\n\nconst readData = async (filename: string) => {\n // open input\n console.log(`loading '${filename}'...`);\n const inputFile = await open(filename, 'r');\n\n // read contents\n console.log(`reading contents...`);\n const plyFile = await readPly(inputFile);\n\n // close file\n await inputFile.close();\n\n return plyFile;\n};\n\nconst processData = (plyFile: PlyFile) => {\n // check we have the necessary elements for processing\n};\n\nconst writeData = async (filename: string, plyFile: PlyFile) => {\n const outputFile = await open(filename, 'w');\n await writeCompressedPly(outputFile, new Splat(plyFile));\n await outputFile.close();\n};\n\nconst main = async () => {\n console.log(`splat-transform v${version}`);\n\n if (process.argv.length < 3) {\n console.error('Usage: splat-transform <input-file> <output-file>');\n process.exit(1);\n }\n\n const inputFilename = process.argv[2];\n const outputFilename = process.argv[3];\n\n try {\n // open input\n const plyFile = await readData(inputFilename);\n\n // process\n processData(plyFile);\n\n // write\n await writeData(outputFilename, plyFile);\n } catch (err) {\n // handle errors\n console.error(`error: ${err.message}`);\n process.exit(1);\n }\n\n console.log('done');\n};\n\nexport { main };\n"],"names":[],"mappings":"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","x_google_ignoreList":[3,4,5]}
1
+ {"version":3,"file":"index.mjs","sources":["../node_modules/playcanvas/build/playcanvas/src/core/math/math.js","../node_modules/playcanvas/build/playcanvas/src/core/math/vec3.js","../node_modules/playcanvas/build/playcanvas/src/core/math/mat3.js","../node_modules/playcanvas/build/playcanvas/src/core/math/vec2.js","../node_modules/playcanvas/build/playcanvas/src/core/math/vec4.js","../node_modules/playcanvas/build/playcanvas/src/core/math/mat4.js","../node_modules/playcanvas/build/playcanvas/src/core/math/quat.js","../src/data-table.ts","../src/utils/rotate-sh.ts","../src/transform.ts","../src/process.ts","../src/readers/read-ply.ts","../src/utils/math.ts","../src/compressed-chunk.ts","../src/ordering.ts","../src/writers/write-compressed-ply.ts","../src/writers/write-ply.ts","../src/writers/write-sogs.ts","../src/index.ts"],"sourcesContent":["const math = {\n\t\tDEG_TO_RAD: Math.PI / 180,\n\t\tRAD_TO_DEG: 180 / Math.PI,\n\t\tclamp (value, min, max) {\n\t\t\t\tif (value >= max) return max;\n\t\t\t\tif (value <= min) return min;\n\t\t\t\treturn value;\n\t\t},\n\t\tintToBytes24 (i) {\n\t\t\t\tconst r = i >> 16 & 0xff;\n\t\t\t\tconst g = i >> 8 & 0xff;\n\t\t\t\tconst b = i & 0xff;\n\t\t\t\treturn [\n\t\t\t\t\t\tr,\n\t\t\t\t\t\tg,\n\t\t\t\t\t\tb\n\t\t\t\t];\n\t\t},\n\t\tintToBytes32 (i) {\n\t\t\t\tconst r = i >> 24 & 0xff;\n\t\t\t\tconst g = i >> 16 & 0xff;\n\t\t\t\tconst b = i >> 8 & 0xff;\n\t\t\t\tconst a = i & 0xff;\n\t\t\t\treturn [\n\t\t\t\t\t\tr,\n\t\t\t\t\t\tg,\n\t\t\t\t\t\tb,\n\t\t\t\t\t\ta\n\t\t\t\t];\n\t\t},\n\t\tbytesToInt24 (r, g, b) {\n\t\t\t\tif (r.length) {\n\t\t\t\t\t\tb = r[2];\n\t\t\t\t\t\tg = r[1];\n\t\t\t\t\t\tr = r[0];\n\t\t\t\t}\n\t\t\t\treturn r << 16 | g << 8 | b;\n\t\t},\n\t\tbytesToInt32 (r, g, b, a) {\n\t\t\t\tif (r.length) {\n\t\t\t\t\t\ta = r[3];\n\t\t\t\t\t\tb = r[2];\n\t\t\t\t\t\tg = r[1];\n\t\t\t\t\t\tr = r[0];\n\t\t\t\t}\n\t\t\t\treturn (r << 24 | g << 16 | b << 8 | a) >>> 0;\n\t\t},\n\t\tlerp (a, b, alpha) {\n\t\t\t\treturn a + (b - a) * math.clamp(alpha, 0, 1);\n\t\t},\n\t\tlerpAngle (a, b, alpha) {\n\t\t\t\tif (b - a > 180) {\n\t\t\t\t\t\tb -= 360;\n\t\t\t\t}\n\t\t\t\tif (b - a < -180) {\n\t\t\t\t\t\tb += 360;\n\t\t\t\t}\n\t\t\t\treturn math.lerp(a, b, math.clamp(alpha, 0, 1));\n\t\t},\n\t\tpowerOfTwo (x) {\n\t\t\t\treturn x !== 0 && !(x & x - 1);\n\t\t},\n\t\tnextPowerOfTwo (val) {\n\t\t\t\tval--;\n\t\t\t\tval |= val >> 1;\n\t\t\t\tval |= val >> 2;\n\t\t\t\tval |= val >> 4;\n\t\t\t\tval |= val >> 8;\n\t\t\t\tval |= val >> 16;\n\t\t\t\tval++;\n\t\t\t\treturn val;\n\t\t},\n\t\tnearestPowerOfTwo (val) {\n\t\t\t\treturn Math.pow(2, Math.round(Math.log2(val)));\n\t\t},\n\t\trandom (min, max) {\n\t\t\t\tconst diff = max - min;\n\t\t\t\treturn Math.random() * diff + min;\n\t\t},\n\t\tsmoothstep (min, max, x) {\n\t\t\t\tif (x <= min) return 0;\n\t\t\t\tif (x >= max) return 1;\n\t\t\t\tx = (x - min) / (max - min);\n\t\t\t\treturn x * x * (3 - 2 * x);\n\t\t},\n\t\tsmootherstep (min, max, x) {\n\t\t\t\tif (x <= min) return 0;\n\t\t\t\tif (x >= max) return 1;\n\t\t\t\tx = (x - min) / (max - min);\n\t\t\t\treturn x * x * x * (x * (x * 6 - 15) + 10);\n\t\t},\n\t\troundUp (numToRound, multiple) {\n\t\t\t\tif (multiple === 0) {\n\t\t\t\t\t\treturn numToRound;\n\t\t\t\t}\n\t\t\t\treturn Math.ceil(numToRound / multiple) * multiple;\n\t\t},\n\t\tbetween (num, a, b, inclusive) {\n\t\t\t\tconst min = Math.min(a, b);\n\t\t\t\tconst max = Math.max(a, b);\n\t\t\t\treturn inclusive ? num >= min && num <= max : num > min && num < max;\n\t\t}\n};\n\nexport { math };\n","class Vec3 {\n\t\tconstructor(x = 0, y = 0, z = 0){\n\t\t\t\tif (x.length === 3) {\n\t\t\t\t\t\tthis.x = x[0];\n\t\t\t\t\t\tthis.y = x[1];\n\t\t\t\t\t\tthis.z = x[2];\n\t\t\t\t} else {\n\t\t\t\t\t\tthis.x = x;\n\t\t\t\t\t\tthis.y = y;\n\t\t\t\t\t\tthis.z = z;\n\t\t\t\t}\n\t\t}\n\t\tadd(rhs) {\n\t\t\t\tthis.x += rhs.x;\n\t\t\t\tthis.y += rhs.y;\n\t\t\t\tthis.z += rhs.z;\n\t\t\t\treturn this;\n\t\t}\n\t\tadd2(lhs, rhs) {\n\t\t\t\tthis.x = lhs.x + rhs.x;\n\t\t\t\tthis.y = lhs.y + rhs.y;\n\t\t\t\tthis.z = lhs.z + rhs.z;\n\t\t\t\treturn this;\n\t\t}\n\t\taddScalar(scalar) {\n\t\t\t\tthis.x += scalar;\n\t\t\t\tthis.y += scalar;\n\t\t\t\tthis.z += scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\taddScaled(rhs, scalar) {\n\t\t\t\tthis.x += rhs.x * scalar;\n\t\t\t\tthis.y += rhs.y * scalar;\n\t\t\t\tthis.z += rhs.z * scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tclone() {\n\t\t\t\tconst cstr = this.constructor;\n\t\t\t\treturn new cstr(this.x, this.y, this.z);\n\t\t}\n\t\tcopy(rhs) {\n\t\t\t\tthis.x = rhs.x;\n\t\t\t\tthis.y = rhs.y;\n\t\t\t\tthis.z = rhs.z;\n\t\t\t\treturn this;\n\t\t}\n\t\tcross(lhs, rhs) {\n\t\t\t\tconst lx = lhs.x;\n\t\t\t\tconst ly = lhs.y;\n\t\t\t\tconst lz = lhs.z;\n\t\t\t\tconst rx = rhs.x;\n\t\t\t\tconst ry = rhs.y;\n\t\t\t\tconst rz = rhs.z;\n\t\t\t\tthis.x = ly * rz - ry * lz;\n\t\t\t\tthis.y = lz * rx - rz * lx;\n\t\t\t\tthis.z = lx * ry - rx * ly;\n\t\t\t\treturn this;\n\t\t}\n\t\tdistance(rhs) {\n\t\t\t\tconst x = this.x - rhs.x;\n\t\t\t\tconst y = this.y - rhs.y;\n\t\t\t\tconst z = this.z - rhs.z;\n\t\t\t\treturn Math.sqrt(x * x + y * y + z * z);\n\t\t}\n\t\tdiv(rhs) {\n\t\t\t\tthis.x /= rhs.x;\n\t\t\t\tthis.y /= rhs.y;\n\t\t\t\tthis.z /= rhs.z;\n\t\t\t\treturn this;\n\t\t}\n\t\tdiv2(lhs, rhs) {\n\t\t\t\tthis.x = lhs.x / rhs.x;\n\t\t\t\tthis.y = lhs.y / rhs.y;\n\t\t\t\tthis.z = lhs.z / rhs.z;\n\t\t\t\treturn this;\n\t\t}\n\t\tdivScalar(scalar) {\n\t\t\t\tthis.x /= scalar;\n\t\t\t\tthis.y /= scalar;\n\t\t\t\tthis.z /= scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tdot(rhs) {\n\t\t\t\treturn this.x * rhs.x + this.y * rhs.y + this.z * rhs.z;\n\t\t}\n\t\tequals(rhs) {\n\t\t\t\treturn this.x === rhs.x && this.y === rhs.y && this.z === rhs.z;\n\t\t}\n\t\tequalsApprox(rhs, epsilon = 1e-6) {\n\t\t\t\treturn Math.abs(this.x - rhs.x) < epsilon && Math.abs(this.y - rhs.y) < epsilon && Math.abs(this.z - rhs.z) < epsilon;\n\t\t}\n\t\tlength() {\n\t\t\t\treturn Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n\t\t}\n\t\tlengthSq() {\n\t\t\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\t\t}\n\t\tlerp(lhs, rhs, alpha) {\n\t\t\t\tthis.x = lhs.x + alpha * (rhs.x - lhs.x);\n\t\t\t\tthis.y = lhs.y + alpha * (rhs.y - lhs.y);\n\t\t\t\tthis.z = lhs.z + alpha * (rhs.z - lhs.z);\n\t\t\t\treturn this;\n\t\t}\n\t\tmul(rhs) {\n\t\t\t\tthis.x *= rhs.x;\n\t\t\t\tthis.y *= rhs.y;\n\t\t\t\tthis.z *= rhs.z;\n\t\t\t\treturn this;\n\t\t}\n\t\tmul2(lhs, rhs) {\n\t\t\t\tthis.x = lhs.x * rhs.x;\n\t\t\t\tthis.y = lhs.y * rhs.y;\n\t\t\t\tthis.z = lhs.z * rhs.z;\n\t\t\t\treturn this;\n\t\t}\n\t\tmulScalar(scalar) {\n\t\t\t\tthis.x *= scalar;\n\t\t\t\tthis.y *= scalar;\n\t\t\t\tthis.z *= scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tnormalize(src = this) {\n\t\t\t\tconst lengthSq = src.x * src.x + src.y * src.y + src.z * src.z;\n\t\t\t\tif (lengthSq > 0) {\n\t\t\t\t\t\tconst invLength = 1 / Math.sqrt(lengthSq);\n\t\t\t\t\t\tthis.x = src.x * invLength;\n\t\t\t\t\t\tthis.y = src.y * invLength;\n\t\t\t\t\t\tthis.z = src.z * invLength;\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t}\n\t\tfloor(src = this) {\n\t\t\t\tthis.x = Math.floor(src.x);\n\t\t\t\tthis.y = Math.floor(src.y);\n\t\t\t\tthis.z = Math.floor(src.z);\n\t\t\t\treturn this;\n\t\t}\n\t\tceil(src = this) {\n\t\t\t\tthis.x = Math.ceil(src.x);\n\t\t\t\tthis.y = Math.ceil(src.y);\n\t\t\t\tthis.z = Math.ceil(src.z);\n\t\t\t\treturn this;\n\t\t}\n\t\tround(src = this) {\n\t\t\t\tthis.x = Math.round(src.x);\n\t\t\t\tthis.y = Math.round(src.y);\n\t\t\t\tthis.z = Math.round(src.z);\n\t\t\t\treturn this;\n\t\t}\n\t\tmin(rhs) {\n\t\t\t\tif (rhs.x < this.x) this.x = rhs.x;\n\t\t\t\tif (rhs.y < this.y) this.y = rhs.y;\n\t\t\t\tif (rhs.z < this.z) this.z = rhs.z;\n\t\t\t\treturn this;\n\t\t}\n\t\tmax(rhs) {\n\t\t\t\tif (rhs.x > this.x) this.x = rhs.x;\n\t\t\t\tif (rhs.y > this.y) this.y = rhs.y;\n\t\t\t\tif (rhs.z > this.z) this.z = rhs.z;\n\t\t\t\treturn this;\n\t\t}\n\t\tproject(rhs) {\n\t\t\t\tconst a_dot_b = this.x * rhs.x + this.y * rhs.y + this.z * rhs.z;\n\t\t\t\tconst b_dot_b = rhs.x * rhs.x + rhs.y * rhs.y + rhs.z * rhs.z;\n\t\t\t\tconst s = a_dot_b / b_dot_b;\n\t\t\t\tthis.x = rhs.x * s;\n\t\t\t\tthis.y = rhs.y * s;\n\t\t\t\tthis.z = rhs.z * s;\n\t\t\t\treturn this;\n\t\t}\n\t\tset(x, y, z) {\n\t\t\t\tthis.x = x;\n\t\t\t\tthis.y = y;\n\t\t\t\tthis.z = z;\n\t\t\t\treturn this;\n\t\t}\n\t\tsub(rhs) {\n\t\t\t\tthis.x -= rhs.x;\n\t\t\t\tthis.y -= rhs.y;\n\t\t\t\tthis.z -= rhs.z;\n\t\t\t\treturn this;\n\t\t}\n\t\tsub2(lhs, rhs) {\n\t\t\t\tthis.x = lhs.x - rhs.x;\n\t\t\t\tthis.y = lhs.y - rhs.y;\n\t\t\t\tthis.z = lhs.z - rhs.z;\n\t\t\t\treturn this;\n\t\t}\n\t\tsubScalar(scalar) {\n\t\t\t\tthis.x -= scalar;\n\t\t\t\tthis.y -= scalar;\n\t\t\t\tthis.z -= scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tfromArray(arr, offset = 0) {\n\t\t\t\tthis.x = arr[offset] ?? this.x;\n\t\t\t\tthis.y = arr[offset + 1] ?? this.y;\n\t\t\t\tthis.z = arr[offset + 2] ?? this.z;\n\t\t\t\treturn this;\n\t\t}\n\t\ttoString() {\n\t\t\t\treturn `[${this.x}, ${this.y}, ${this.z}]`;\n\t\t}\n\t\ttoArray(arr = [], offset = 0) {\n\t\t\t\tarr[offset] = this.x;\n\t\t\t\tarr[offset + 1] = this.y;\n\t\t\t\tarr[offset + 2] = this.z;\n\t\t\t\treturn arr;\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.ZERO = Object.freeze(new Vec3(0, 0, 0));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.HALF = Object.freeze(new Vec3(0.5, 0.5, 0.5));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.ONE = Object.freeze(new Vec3(1, 1, 1));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.UP = Object.freeze(new Vec3(0, 1, 0));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.DOWN = Object.freeze(new Vec3(0, -1, 0));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.RIGHT = Object.freeze(new Vec3(1, 0, 0));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.LEFT = Object.freeze(new Vec3(-1, 0, 0));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.FORWARD = Object.freeze(new Vec3(0, 0, -1));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.BACK = Object.freeze(new Vec3(0, 0, 1));\n\t\t}\n}\n\nexport { Vec3 };\n","import { Vec3 } from './vec3.js';\n\nclass Mat3 {\n\t\tconstructor(){\n\t\t\t\tthis.data = new Float32Array(9);\n\t\t\t\tthis.data[0] = this.data[4] = this.data[8] = 1;\n\t\t}\n\t\tclone() {\n\t\t\t\tconst cstr = this.constructor;\n\t\t\t\treturn new cstr().copy(this);\n\t\t}\n\t\tcopy(rhs) {\n\t\t\t\tconst src = rhs.data;\n\t\t\t\tconst dst = this.data;\n\t\t\t\tdst[0] = src[0];\n\t\t\t\tdst[1] = src[1];\n\t\t\t\tdst[2] = src[2];\n\t\t\t\tdst[3] = src[3];\n\t\t\t\tdst[4] = src[4];\n\t\t\t\tdst[5] = src[5];\n\t\t\t\tdst[6] = src[6];\n\t\t\t\tdst[7] = src[7];\n\t\t\t\tdst[8] = src[8];\n\t\t\t\treturn this;\n\t\t}\n\t\tset(src) {\n\t\t\t\tconst dst = this.data;\n\t\t\t\tdst[0] = src[0];\n\t\t\t\tdst[1] = src[1];\n\t\t\t\tdst[2] = src[2];\n\t\t\t\tdst[3] = src[3];\n\t\t\t\tdst[4] = src[4];\n\t\t\t\tdst[5] = src[5];\n\t\t\t\tdst[6] = src[6];\n\t\t\t\tdst[7] = src[7];\n\t\t\t\tdst[8] = src[8];\n\t\t\t\treturn this;\n\t\t}\n\t\tgetX(x = new Vec3()) {\n\t\t\t\treturn x.set(this.data[0], this.data[1], this.data[2]);\n\t\t}\n\t\tgetY(y = new Vec3()) {\n\t\t\t\treturn y.set(this.data[3], this.data[4], this.data[5]);\n\t\t}\n\t\tgetZ(z = new Vec3()) {\n\t\t\t\treturn z.set(this.data[6], this.data[7], this.data[8]);\n\t\t}\n\t\tequals(rhs) {\n\t\t\t\tconst l = this.data;\n\t\t\t\tconst r = rhs.data;\n\t\t\t\treturn l[0] === r[0] && l[1] === r[1] && l[2] === r[2] && l[3] === r[3] && l[4] === r[4] && l[5] === r[5] && l[6] === r[6] && l[7] === r[7] && l[8] === r[8];\n\t\t}\n\t\tisIdentity() {\n\t\t\t\tconst m = this.data;\n\t\t\t\treturn m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 0 && m[4] === 1 && m[5] === 0 && m[6] === 0 && m[7] === 0 && m[8] === 1;\n\t\t}\n\t\tsetIdentity() {\n\t\t\t\tconst m = this.data;\n\t\t\t\tm[0] = 1;\n\t\t\t\tm[1] = 0;\n\t\t\t\tm[2] = 0;\n\t\t\t\tm[3] = 0;\n\t\t\t\tm[4] = 1;\n\t\t\t\tm[5] = 0;\n\t\t\t\tm[6] = 0;\n\t\t\t\tm[7] = 0;\n\t\t\t\tm[8] = 1;\n\t\t\t\treturn this;\n\t\t}\n\t\ttoString() {\n\t\t\t\treturn `[${this.data.join(', ')}]`;\n\t\t}\n\t\ttranspose(src = this) {\n\t\t\t\tconst s = src.data;\n\t\t\t\tconst t = this.data;\n\t\t\t\tif (s === t) {\n\t\t\t\t\t\tlet tmp;\n\t\t\t\t\t\ttmp = s[1];\n\t\t\t\t\t\tt[1] = s[3];\n\t\t\t\t\t\tt[3] = tmp;\n\t\t\t\t\t\ttmp = s[2];\n\t\t\t\t\t\tt[2] = s[6];\n\t\t\t\t\t\tt[6] = tmp;\n\t\t\t\t\t\ttmp = s[5];\n\t\t\t\t\t\tt[5] = s[7];\n\t\t\t\t\t\tt[7] = tmp;\n\t\t\t\t} else {\n\t\t\t\t\t\tt[0] = s[0];\n\t\t\t\t\t\tt[1] = s[3];\n\t\t\t\t\t\tt[2] = s[6];\n\t\t\t\t\t\tt[3] = s[1];\n\t\t\t\t\t\tt[4] = s[4];\n\t\t\t\t\t\tt[5] = s[7];\n\t\t\t\t\t\tt[6] = s[2];\n\t\t\t\t\t\tt[7] = s[5];\n\t\t\t\t\t\tt[8] = s[8];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t}\n\t\tsetFromMat4(m) {\n\t\t\t\tconst src = m.data;\n\t\t\t\tconst dst = this.data;\n\t\t\t\tdst[0] = src[0];\n\t\t\t\tdst[1] = src[1];\n\t\t\t\tdst[2] = src[2];\n\t\t\t\tdst[3] = src[4];\n\t\t\t\tdst[4] = src[5];\n\t\t\t\tdst[5] = src[6];\n\t\t\t\tdst[6] = src[8];\n\t\t\t\tdst[7] = src[9];\n\t\t\t\tdst[8] = src[10];\n\t\t\t\treturn this;\n\t\t}\n\t\tsetFromQuat(r) {\n\t\t\t\tconst qx = r.x;\n\t\t\t\tconst qy = r.y;\n\t\t\t\tconst qz = r.z;\n\t\t\t\tconst qw = r.w;\n\t\t\t\tconst x2 = qx + qx;\n\t\t\t\tconst y2 = qy + qy;\n\t\t\t\tconst z2 = qz + qz;\n\t\t\t\tconst xx = qx * x2;\n\t\t\t\tconst xy = qx * y2;\n\t\t\t\tconst xz = qx * z2;\n\t\t\t\tconst yy = qy * y2;\n\t\t\t\tconst yz = qy * z2;\n\t\t\t\tconst zz = qz * z2;\n\t\t\t\tconst wx = qw * x2;\n\t\t\t\tconst wy = qw * y2;\n\t\t\t\tconst wz = qw * z2;\n\t\t\t\tconst m = this.data;\n\t\t\t\tm[0] = 1 - (yy + zz);\n\t\t\t\tm[1] = xy + wz;\n\t\t\t\tm[2] = xz - wy;\n\t\t\t\tm[3] = xy - wz;\n\t\t\t\tm[4] = 1 - (xx + zz);\n\t\t\t\tm[5] = yz + wx;\n\t\t\t\tm[6] = xz + wy;\n\t\t\t\tm[7] = yz - wx;\n\t\t\t\tm[8] = 1 - (xx + yy);\n\t\t\t\treturn this;\n\t\t}\n\t\tinvertMat4(src) {\n\t\t\t\tconst s = src.data;\n\t\t\t\tconst a0 = s[0];\n\t\t\t\tconst a1 = s[1];\n\t\t\t\tconst a2 = s[2];\n\t\t\t\tconst a4 = s[4];\n\t\t\t\tconst a5 = s[5];\n\t\t\t\tconst a6 = s[6];\n\t\t\t\tconst a8 = s[8];\n\t\t\t\tconst a9 = s[9];\n\t\t\t\tconst a10 = s[10];\n\t\t\t\tconst b11 = a10 * a5 - a6 * a9;\n\t\t\t\tconst b21 = -a10 * a1 + a2 * a9;\n\t\t\t\tconst b31 = a6 * a1 - a2 * a5;\n\t\t\t\tconst b12 = -a10 * a4 + a6 * a8;\n\t\t\t\tconst b22 = a10 * a0 - a2 * a8;\n\t\t\t\tconst b32 = -a6 * a0 + a2 * a4;\n\t\t\t\tconst b13 = a9 * a4 - a5 * a8;\n\t\t\t\tconst b23 = -a9 * a0 + a1 * a8;\n\t\t\t\tconst b33 = a5 * a0 - a1 * a4;\n\t\t\t\tconst det = a0 * b11 + a1 * b12 + a2 * b13;\n\t\t\t\tif (det === 0) {\n\t\t\t\t\t\tthis.setIdentity();\n\t\t\t\t} else {\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\tconst t = this.data;\n\t\t\t\t\t\tt[0] = b11 * invDet;\n\t\t\t\t\t\tt[1] = b21 * invDet;\n\t\t\t\t\t\tt[2] = b31 * invDet;\n\t\t\t\t\t\tt[3] = b12 * invDet;\n\t\t\t\t\t\tt[4] = b22 * invDet;\n\t\t\t\t\t\tt[5] = b32 * invDet;\n\t\t\t\t\t\tt[6] = b13 * invDet;\n\t\t\t\t\t\tt[7] = b23 * invDet;\n\t\t\t\t\t\tt[8] = b33 * invDet;\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t}\n\t\ttransformVector(vec, res = new Vec3()) {\n\t\t\t\tconst m = this.data;\n\t\t\t\tconst { x, y, z } = vec;\n\t\t\t\tres.x = x * m[0] + y * m[3] + z * m[6];\n\t\t\t\tres.y = x * m[1] + y * m[4] + z * m[7];\n\t\t\t\tres.z = x * m[2] + y * m[5] + z * m[8];\n\t\t\t\treturn res;\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.IDENTITY = Object.freeze(new Mat3());\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.ZERO = Object.freeze(new Mat3().set([\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0\n\t\t\t\t]));\n\t\t}\n}\n\nexport { Mat3 };\n","import { math } from './math.js';\n\nclass Vec2 {\n\t\tconstructor(x = 0, y = 0){\n\t\t\t\tif (x.length === 2) {\n\t\t\t\t\t\tthis.x = x[0];\n\t\t\t\t\t\tthis.y = x[1];\n\t\t\t\t} else {\n\t\t\t\t\t\tthis.x = x;\n\t\t\t\t\t\tthis.y = y;\n\t\t\t\t}\n\t\t}\n\t\tadd(rhs) {\n\t\t\t\tthis.x += rhs.x;\n\t\t\t\tthis.y += rhs.y;\n\t\t\t\treturn this;\n\t\t}\n\t\tadd2(lhs, rhs) {\n\t\t\t\tthis.x = lhs.x + rhs.x;\n\t\t\t\tthis.y = lhs.y + rhs.y;\n\t\t\t\treturn this;\n\t\t}\n\t\taddScalar(scalar) {\n\t\t\t\tthis.x += scalar;\n\t\t\t\tthis.y += scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\taddScaled(rhs, scalar) {\n\t\t\t\tthis.x += rhs.x * scalar;\n\t\t\t\tthis.y += rhs.y * scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tclone() {\n\t\t\t\tconst cstr = this.constructor;\n\t\t\t\treturn new cstr(this.x, this.y);\n\t\t}\n\t\tcopy(rhs) {\n\t\t\t\tthis.x = rhs.x;\n\t\t\t\tthis.y = rhs.y;\n\t\t\t\treturn this;\n\t\t}\n\t\tcross(rhs) {\n\t\t\t\treturn this.x * rhs.y - this.y * rhs.x;\n\t\t}\n\t\tdistance(rhs) {\n\t\t\t\tconst x = this.x - rhs.x;\n\t\t\t\tconst y = this.y - rhs.y;\n\t\t\t\treturn Math.sqrt(x * x + y * y);\n\t\t}\n\t\tdiv(rhs) {\n\t\t\t\tthis.x /= rhs.x;\n\t\t\t\tthis.y /= rhs.y;\n\t\t\t\treturn this;\n\t\t}\n\t\tdiv2(lhs, rhs) {\n\t\t\t\tthis.x = lhs.x / rhs.x;\n\t\t\t\tthis.y = lhs.y / rhs.y;\n\t\t\t\treturn this;\n\t\t}\n\t\tdivScalar(scalar) {\n\t\t\t\tthis.x /= scalar;\n\t\t\t\tthis.y /= scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tdot(rhs) {\n\t\t\t\treturn this.x * rhs.x + this.y * rhs.y;\n\t\t}\n\t\tequals(rhs) {\n\t\t\t\treturn this.x === rhs.x && this.y === rhs.y;\n\t\t}\n\t\tequalsApprox(rhs, epsilon = 1e-6) {\n\t\t\t\treturn Math.abs(this.x - rhs.x) < epsilon && Math.abs(this.y - rhs.y) < epsilon;\n\t\t}\n\t\tlength() {\n\t\t\t\treturn Math.sqrt(this.x * this.x + this.y * this.y);\n\t\t}\n\t\tlengthSq() {\n\t\t\t\treturn this.x * this.x + this.y * this.y;\n\t\t}\n\t\tlerp(lhs, rhs, alpha) {\n\t\t\t\tthis.x = lhs.x + alpha * (rhs.x - lhs.x);\n\t\t\t\tthis.y = lhs.y + alpha * (rhs.y - lhs.y);\n\t\t\t\treturn this;\n\t\t}\n\t\tmul(rhs) {\n\t\t\t\tthis.x *= rhs.x;\n\t\t\t\tthis.y *= rhs.y;\n\t\t\t\treturn this;\n\t\t}\n\t\tmul2(lhs, rhs) {\n\t\t\t\tthis.x = lhs.x * rhs.x;\n\t\t\t\tthis.y = lhs.y * rhs.y;\n\t\t\t\treturn this;\n\t\t}\n\t\tmulScalar(scalar) {\n\t\t\t\tthis.x *= scalar;\n\t\t\t\tthis.y *= scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tnormalize(src = this) {\n\t\t\t\tconst lengthSq = src.x * src.x + src.y * src.y;\n\t\t\t\tif (lengthSq > 0) {\n\t\t\t\t\t\tconst invLength = 1 / Math.sqrt(lengthSq);\n\t\t\t\t\t\tthis.x = src.x * invLength;\n\t\t\t\t\t\tthis.y = src.y * invLength;\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t}\n\t\trotate(degrees) {\n\t\t\t\tconst angle = Math.atan2(this.x, this.y) + degrees * math.DEG_TO_RAD;\n\t\t\t\tconst len = Math.sqrt(this.x * this.x + this.y * this.y);\n\t\t\t\tthis.x = Math.sin(angle) * len;\n\t\t\t\tthis.y = Math.cos(angle) * len;\n\t\t\t\treturn this;\n\t\t}\n\t\tangle() {\n\t\t\t\treturn Math.atan2(this.x, this.y) * math.RAD_TO_DEG;\n\t\t}\n\t\tangleTo(rhs) {\n\t\t\t\treturn Math.atan2(this.x * rhs.y + this.y * rhs.x, this.x * rhs.x + this.y * rhs.y) * math.RAD_TO_DEG;\n\t\t}\n\t\tfloor(src = this) {\n\t\t\t\tthis.x = Math.floor(src.x);\n\t\t\t\tthis.y = Math.floor(src.y);\n\t\t\t\treturn this;\n\t\t}\n\t\tceil(src = this) {\n\t\t\t\tthis.x = Math.ceil(src.x);\n\t\t\t\tthis.y = Math.ceil(src.y);\n\t\t\t\treturn this;\n\t\t}\n\t\tround(src = this) {\n\t\t\t\tthis.x = Math.round(src.x);\n\t\t\t\tthis.y = Math.round(src.y);\n\t\t\t\treturn this;\n\t\t}\n\t\tmin(rhs) {\n\t\t\t\tif (rhs.x < this.x) this.x = rhs.x;\n\t\t\t\tif (rhs.y < this.y) this.y = rhs.y;\n\t\t\t\treturn this;\n\t\t}\n\t\tmax(rhs) {\n\t\t\t\tif (rhs.x > this.x) this.x = rhs.x;\n\t\t\t\tif (rhs.y > this.y) this.y = rhs.y;\n\t\t\t\treturn this;\n\t\t}\n\t\tset(x, y) {\n\t\t\t\tthis.x = x;\n\t\t\t\tthis.y = y;\n\t\t\t\treturn this;\n\t\t}\n\t\tsub(rhs) {\n\t\t\t\tthis.x -= rhs.x;\n\t\t\t\tthis.y -= rhs.y;\n\t\t\t\treturn this;\n\t\t}\n\t\tsub2(lhs, rhs) {\n\t\t\t\tthis.x = lhs.x - rhs.x;\n\t\t\t\tthis.y = lhs.y - rhs.y;\n\t\t\t\treturn this;\n\t\t}\n\t\tsubScalar(scalar) {\n\t\t\t\tthis.x -= scalar;\n\t\t\t\tthis.y -= scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tfromArray(arr, offset = 0) {\n\t\t\t\tthis.x = arr[offset] ?? this.x;\n\t\t\t\tthis.y = arr[offset + 1] ?? this.y;\n\t\t\t\treturn this;\n\t\t}\n\t\ttoString() {\n\t\t\t\treturn `[${this.x}, ${this.y}]`;\n\t\t}\n\t\ttoArray(arr = [], offset = 0) {\n\t\t\t\tarr[offset] = this.x;\n\t\t\t\tarr[offset + 1] = this.y;\n\t\t\t\treturn arr;\n\t\t}\n\t\tstatic angleRad(lhs, rhs) {\n\t\t\t\treturn Math.atan2(lhs.x * rhs.y - lhs.y * rhs.x, lhs.x * rhs.x + lhs.y * rhs.y);\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.ZERO = Object.freeze(new Vec2(0, 0));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.HALF = Object.freeze(new Vec2(0.5, 0.5));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.ONE = Object.freeze(new Vec2(1, 1));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.UP = Object.freeze(new Vec2(0, 1));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.DOWN = Object.freeze(new Vec2(0, -1));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.RIGHT = Object.freeze(new Vec2(1, 0));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.LEFT = Object.freeze(new Vec2(-1, 0));\n\t\t}\n}\n\nexport { Vec2 };\n","class Vec4 {\n\t\tconstructor(x = 0, y = 0, z = 0, w = 0){\n\t\t\t\tif (x.length === 4) {\n\t\t\t\t\t\tthis.x = x[0];\n\t\t\t\t\t\tthis.y = x[1];\n\t\t\t\t\t\tthis.z = x[2];\n\t\t\t\t\t\tthis.w = x[3];\n\t\t\t\t} else {\n\t\t\t\t\t\tthis.x = x;\n\t\t\t\t\t\tthis.y = y;\n\t\t\t\t\t\tthis.z = z;\n\t\t\t\t\t\tthis.w = w;\n\t\t\t\t}\n\t\t}\n\t\tadd(rhs) {\n\t\t\t\tthis.x += rhs.x;\n\t\t\t\tthis.y += rhs.y;\n\t\t\t\tthis.z += rhs.z;\n\t\t\t\tthis.w += rhs.w;\n\t\t\t\treturn this;\n\t\t}\n\t\tadd2(lhs, rhs) {\n\t\t\t\tthis.x = lhs.x + rhs.x;\n\t\t\t\tthis.y = lhs.y + rhs.y;\n\t\t\t\tthis.z = lhs.z + rhs.z;\n\t\t\t\tthis.w = lhs.w + rhs.w;\n\t\t\t\treturn this;\n\t\t}\n\t\taddScalar(scalar) {\n\t\t\t\tthis.x += scalar;\n\t\t\t\tthis.y += scalar;\n\t\t\t\tthis.z += scalar;\n\t\t\t\tthis.w += scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\taddScaled(rhs, scalar) {\n\t\t\t\tthis.x += rhs.x * scalar;\n\t\t\t\tthis.y += rhs.y * scalar;\n\t\t\t\tthis.z += rhs.z * scalar;\n\t\t\t\tthis.w += rhs.w * scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tclone() {\n\t\t\t\tconst cstr = this.constructor;\n\t\t\t\treturn new cstr(this.x, this.y, this.z, this.w);\n\t\t}\n\t\tcopy(rhs) {\n\t\t\t\tthis.x = rhs.x;\n\t\t\t\tthis.y = rhs.y;\n\t\t\t\tthis.z = rhs.z;\n\t\t\t\tthis.w = rhs.w;\n\t\t\t\treturn this;\n\t\t}\n\t\tdiv(rhs) {\n\t\t\t\tthis.x /= rhs.x;\n\t\t\t\tthis.y /= rhs.y;\n\t\t\t\tthis.z /= rhs.z;\n\t\t\t\tthis.w /= rhs.w;\n\t\t\t\treturn this;\n\t\t}\n\t\tdiv2(lhs, rhs) {\n\t\t\t\tthis.x = lhs.x / rhs.x;\n\t\t\t\tthis.y = lhs.y / rhs.y;\n\t\t\t\tthis.z = lhs.z / rhs.z;\n\t\t\t\tthis.w = lhs.w / rhs.w;\n\t\t\t\treturn this;\n\t\t}\n\t\tdivScalar(scalar) {\n\t\t\t\tthis.x /= scalar;\n\t\t\t\tthis.y /= scalar;\n\t\t\t\tthis.z /= scalar;\n\t\t\t\tthis.w /= scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tdot(rhs) {\n\t\t\t\treturn this.x * rhs.x + this.y * rhs.y + this.z * rhs.z + this.w * rhs.w;\n\t\t}\n\t\tequals(rhs) {\n\t\t\t\treturn this.x === rhs.x && this.y === rhs.y && this.z === rhs.z && this.w === rhs.w;\n\t\t}\n\t\tequalsApprox(rhs, epsilon = 1e-6) {\n\t\t\t\treturn Math.abs(this.x - rhs.x) < epsilon && Math.abs(this.y - rhs.y) < epsilon && Math.abs(this.z - rhs.z) < epsilon && Math.abs(this.w - rhs.w) < epsilon;\n\t\t}\n\t\tlength() {\n\t\t\t\treturn Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n\t\t}\n\t\tlengthSq() {\n\t\t\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\t\t}\n\t\tlerp(lhs, rhs, alpha) {\n\t\t\t\tthis.x = lhs.x + alpha * (rhs.x - lhs.x);\n\t\t\t\tthis.y = lhs.y + alpha * (rhs.y - lhs.y);\n\t\t\t\tthis.z = lhs.z + alpha * (rhs.z - lhs.z);\n\t\t\t\tthis.w = lhs.w + alpha * (rhs.w - lhs.w);\n\t\t\t\treturn this;\n\t\t}\n\t\tmul(rhs) {\n\t\t\t\tthis.x *= rhs.x;\n\t\t\t\tthis.y *= rhs.y;\n\t\t\t\tthis.z *= rhs.z;\n\t\t\t\tthis.w *= rhs.w;\n\t\t\t\treturn this;\n\t\t}\n\t\tmul2(lhs, rhs) {\n\t\t\t\tthis.x = lhs.x * rhs.x;\n\t\t\t\tthis.y = lhs.y * rhs.y;\n\t\t\t\tthis.z = lhs.z * rhs.z;\n\t\t\t\tthis.w = lhs.w * rhs.w;\n\t\t\t\treturn this;\n\t\t}\n\t\tmulScalar(scalar) {\n\t\t\t\tthis.x *= scalar;\n\t\t\t\tthis.y *= scalar;\n\t\t\t\tthis.z *= scalar;\n\t\t\t\tthis.w *= scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tnormalize(src = this) {\n\t\t\t\tconst lengthSq = src.x * src.x + src.y * src.y + src.z * src.z + src.w * src.w;\n\t\t\t\tif (lengthSq > 0) {\n\t\t\t\t\t\tconst invLength = 1 / Math.sqrt(lengthSq);\n\t\t\t\t\t\tthis.x = src.x * invLength;\n\t\t\t\t\t\tthis.y = src.y * invLength;\n\t\t\t\t\t\tthis.z = src.z * invLength;\n\t\t\t\t\t\tthis.w = src.w * invLength;\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t}\n\t\tfloor(src = this) {\n\t\t\t\tthis.x = Math.floor(src.x);\n\t\t\t\tthis.y = Math.floor(src.y);\n\t\t\t\tthis.z = Math.floor(src.z);\n\t\t\t\tthis.w = Math.floor(src.w);\n\t\t\t\treturn this;\n\t\t}\n\t\tceil(src = this) {\n\t\t\t\tthis.x = Math.ceil(src.x);\n\t\t\t\tthis.y = Math.ceil(src.y);\n\t\t\t\tthis.z = Math.ceil(src.z);\n\t\t\t\tthis.w = Math.ceil(src.w);\n\t\t\t\treturn this;\n\t\t}\n\t\tround(src = this) {\n\t\t\t\tthis.x = Math.round(src.x);\n\t\t\t\tthis.y = Math.round(src.y);\n\t\t\t\tthis.z = Math.round(src.z);\n\t\t\t\tthis.w = Math.round(src.w);\n\t\t\t\treturn this;\n\t\t}\n\t\tmin(rhs) {\n\t\t\t\tif (rhs.x < this.x) this.x = rhs.x;\n\t\t\t\tif (rhs.y < this.y) this.y = rhs.y;\n\t\t\t\tif (rhs.z < this.z) this.z = rhs.z;\n\t\t\t\tif (rhs.w < this.w) this.w = rhs.w;\n\t\t\t\treturn this;\n\t\t}\n\t\tmax(rhs) {\n\t\t\t\tif (rhs.x > this.x) this.x = rhs.x;\n\t\t\t\tif (rhs.y > this.y) this.y = rhs.y;\n\t\t\t\tif (rhs.z > this.z) this.z = rhs.z;\n\t\t\t\tif (rhs.w > this.w) this.w = rhs.w;\n\t\t\t\treturn this;\n\t\t}\n\t\tset(x, y, z, w) {\n\t\t\t\tthis.x = x;\n\t\t\t\tthis.y = y;\n\t\t\t\tthis.z = z;\n\t\t\t\tthis.w = w;\n\t\t\t\treturn this;\n\t\t}\n\t\tsub(rhs) {\n\t\t\t\tthis.x -= rhs.x;\n\t\t\t\tthis.y -= rhs.y;\n\t\t\t\tthis.z -= rhs.z;\n\t\t\t\tthis.w -= rhs.w;\n\t\t\t\treturn this;\n\t\t}\n\t\tsub2(lhs, rhs) {\n\t\t\t\tthis.x = lhs.x - rhs.x;\n\t\t\t\tthis.y = lhs.y - rhs.y;\n\t\t\t\tthis.z = lhs.z - rhs.z;\n\t\t\t\tthis.w = lhs.w - rhs.w;\n\t\t\t\treturn this;\n\t\t}\n\t\tsubScalar(scalar) {\n\t\t\t\tthis.x -= scalar;\n\t\t\t\tthis.y -= scalar;\n\t\t\t\tthis.z -= scalar;\n\t\t\t\tthis.w -= scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tfromArray(arr, offset = 0) {\n\t\t\t\tthis.x = arr[offset] ?? this.x;\n\t\t\t\tthis.y = arr[offset + 1] ?? this.y;\n\t\t\t\tthis.z = arr[offset + 2] ?? this.z;\n\t\t\t\tthis.w = arr[offset + 3] ?? this.w;\n\t\t\t\treturn this;\n\t\t}\n\t\ttoString() {\n\t\t\t\treturn `[${this.x}, ${this.y}, ${this.z}, ${this.w}]`;\n\t\t}\n\t\ttoArray(arr = [], offset = 0) {\n\t\t\t\tarr[offset] = this.x;\n\t\t\t\tarr[offset + 1] = this.y;\n\t\t\t\tarr[offset + 2] = this.z;\n\t\t\t\tarr[offset + 3] = this.w;\n\t\t\t\treturn arr;\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.ZERO = Object.freeze(new Vec4(0, 0, 0, 0));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.HALF = Object.freeze(new Vec4(0.5, 0.5, 0.5, 0.5));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.ONE = Object.freeze(new Vec4(1, 1, 1, 1));\n\t\t}\n}\n\nexport { Vec4 };\n","import { math } from './math.js';\nimport { Vec2 } from './vec2.js';\nimport { Vec3 } from './vec3.js';\nimport { Vec4 } from './vec4.js';\n\nconst _halfSize = new Vec2();\nconst x = new Vec3();\nconst y = new Vec3();\nconst z = new Vec3();\nconst scale = new Vec3();\nclass Mat4 {\n\t\tconstructor(){\n\t\t\t\tthis.data = new Float32Array(16);\n\t\t\t\tthis.data[0] = this.data[5] = this.data[10] = this.data[15] = 1;\n\t\t}\n\t\tstatic _getPerspectiveHalfSize(halfSize, fov, aspect, znear, fovIsHorizontal) {\n\t\t\t\tif (fovIsHorizontal) {\n\t\t\t\t\t\thalfSize.x = znear * Math.tan(fov * Math.PI / 360);\n\t\t\t\t\t\thalfSize.y = halfSize.x / aspect;\n\t\t\t\t} else {\n\t\t\t\t\t\thalfSize.y = znear * Math.tan(fov * Math.PI / 360);\n\t\t\t\t\t\thalfSize.x = halfSize.y * aspect;\n\t\t\t\t}\n\t\t}\n\t\tadd2(lhs, rhs) {\n\t\t\t\tconst a = lhs.data, b = rhs.data, r = this.data;\n\t\t\t\tr[0] = a[0] + b[0];\n\t\t\t\tr[1] = a[1] + b[1];\n\t\t\t\tr[2] = a[2] + b[2];\n\t\t\t\tr[3] = a[3] + b[3];\n\t\t\t\tr[4] = a[4] + b[4];\n\t\t\t\tr[5] = a[5] + b[5];\n\t\t\t\tr[6] = a[6] + b[6];\n\t\t\t\tr[7] = a[7] + b[7];\n\t\t\t\tr[8] = a[8] + b[8];\n\t\t\t\tr[9] = a[9] + b[9];\n\t\t\t\tr[10] = a[10] + b[10];\n\t\t\t\tr[11] = a[11] + b[11];\n\t\t\t\tr[12] = a[12] + b[12];\n\t\t\t\tr[13] = a[13] + b[13];\n\t\t\t\tr[14] = a[14] + b[14];\n\t\t\t\tr[15] = a[15] + b[15];\n\t\t\t\treturn this;\n\t\t}\n\t\tadd(rhs) {\n\t\t\t\treturn this.add2(this, rhs);\n\t\t}\n\t\tclone() {\n\t\t\t\tconst cstr = this.constructor;\n\t\t\t\treturn new cstr().copy(this);\n\t\t}\n\t\tcopy(rhs) {\n\t\t\t\tconst src = rhs.data, dst = this.data;\n\t\t\t\tdst[0] = src[0];\n\t\t\t\tdst[1] = src[1];\n\t\t\t\tdst[2] = src[2];\n\t\t\t\tdst[3] = src[3];\n\t\t\t\tdst[4] = src[4];\n\t\t\t\tdst[5] = src[5];\n\t\t\t\tdst[6] = src[6];\n\t\t\t\tdst[7] = src[7];\n\t\t\t\tdst[8] = src[8];\n\t\t\t\tdst[9] = src[9];\n\t\t\t\tdst[10] = src[10];\n\t\t\t\tdst[11] = src[11];\n\t\t\t\tdst[12] = src[12];\n\t\t\t\tdst[13] = src[13];\n\t\t\t\tdst[14] = src[14];\n\t\t\t\tdst[15] = src[15];\n\t\t\t\treturn this;\n\t\t}\n\t\tequals(rhs) {\n\t\t\t\tconst l = this.data, r = rhs.data;\n\t\t\t\treturn l[0] === r[0] && l[1] === r[1] && l[2] === r[2] && l[3] === r[3] && l[4] === r[4] && l[5] === r[5] && l[6] === r[6] && l[7] === r[7] && l[8] === r[8] && l[9] === r[9] && l[10] === r[10] && l[11] === r[11] && l[12] === r[12] && l[13] === r[13] && l[14] === r[14] && l[15] === r[15];\n\t\t}\n\t\tisIdentity() {\n\t\t\t\tconst m = this.data;\n\t\t\t\treturn m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 0 && m[4] === 0 && m[5] === 1 && m[6] === 0 && m[7] === 0 && m[8] === 0 && m[9] === 0 && m[10] === 1 && m[11] === 0 && m[12] === 0 && m[13] === 0 && m[14] === 0 && m[15] === 1;\n\t\t}\n\t\tmul2(lhs, rhs) {\n\t\t\t\tconst a = lhs.data;\n\t\t\t\tconst b = rhs.data;\n\t\t\t\tconst r = this.data;\n\t\t\t\tconst a00 = a[0];\n\t\t\t\tconst a01 = a[1];\n\t\t\t\tconst a02 = a[2];\n\t\t\t\tconst a03 = a[3];\n\t\t\t\tconst a10 = a[4];\n\t\t\t\tconst a11 = a[5];\n\t\t\t\tconst a12 = a[6];\n\t\t\t\tconst a13 = a[7];\n\t\t\t\tconst a20 = a[8];\n\t\t\t\tconst a21 = a[9];\n\t\t\t\tconst a22 = a[10];\n\t\t\t\tconst a23 = a[11];\n\t\t\t\tconst a30 = a[12];\n\t\t\t\tconst a31 = a[13];\n\t\t\t\tconst a32 = a[14];\n\t\t\t\tconst a33 = a[15];\n\t\t\t\tlet b0, b1, b2, b3;\n\t\t\t\tb0 = b[0];\n\t\t\t\tb1 = b[1];\n\t\t\t\tb2 = b[2];\n\t\t\t\tb3 = b[3];\n\t\t\t\tr[0] = a00 * b0 + a10 * b1 + a20 * b2 + a30 * b3;\n\t\t\t\tr[1] = a01 * b0 + a11 * b1 + a21 * b2 + a31 * b3;\n\t\t\t\tr[2] = a02 * b0 + a12 * b1 + a22 * b2 + a32 * b3;\n\t\t\t\tr[3] = a03 * b0 + a13 * b1 + a23 * b2 + a33 * b3;\n\t\t\t\tb0 = b[4];\n\t\t\t\tb1 = b[5];\n\t\t\t\tb2 = b[6];\n\t\t\t\tb3 = b[7];\n\t\t\t\tr[4] = a00 * b0 + a10 * b1 + a20 * b2 + a30 * b3;\n\t\t\t\tr[5] = a01 * b0 + a11 * b1 + a21 * b2 + a31 * b3;\n\t\t\t\tr[6] = a02 * b0 + a12 * b1 + a22 * b2 + a32 * b3;\n\t\t\t\tr[7] = a03 * b0 + a13 * b1 + a23 * b2 + a33 * b3;\n\t\t\t\tb0 = b[8];\n\t\t\t\tb1 = b[9];\n\t\t\t\tb2 = b[10];\n\t\t\t\tb3 = b[11];\n\t\t\t\tr[8] = a00 * b0 + a10 * b1 + a20 * b2 + a30 * b3;\n\t\t\t\tr[9] = a01 * b0 + a11 * b1 + a21 * b2 + a31 * b3;\n\t\t\t\tr[10] = a02 * b0 + a12 * b1 + a22 * b2 + a32 * b3;\n\t\t\t\tr[11] = a03 * b0 + a13 * b1 + a23 * b2 + a33 * b3;\n\t\t\t\tb0 = b[12];\n\t\t\t\tb1 = b[13];\n\t\t\t\tb2 = b[14];\n\t\t\t\tb3 = b[15];\n\t\t\t\tr[12] = a00 * b0 + a10 * b1 + a20 * b2 + a30 * b3;\n\t\t\t\tr[13] = a01 * b0 + a11 * b1 + a21 * b2 + a31 * b3;\n\t\t\t\tr[14] = a02 * b0 + a12 * b1 + a22 * b2 + a32 * b3;\n\t\t\t\tr[15] = a03 * b0 + a13 * b1 + a23 * b2 + a33 * b3;\n\t\t\t\treturn this;\n\t\t}\n\t\tmulAffine2(lhs, rhs) {\n\t\t\t\tconst a = lhs.data;\n\t\t\t\tconst b = rhs.data;\n\t\t\t\tconst r = this.data;\n\t\t\t\tconst a00 = a[0];\n\t\t\t\tconst a01 = a[1];\n\t\t\t\tconst a02 = a[2];\n\t\t\t\tconst a10 = a[4];\n\t\t\t\tconst a11 = a[5];\n\t\t\t\tconst a12 = a[6];\n\t\t\t\tconst a20 = a[8];\n\t\t\t\tconst a21 = a[9];\n\t\t\t\tconst a22 = a[10];\n\t\t\t\tconst a30 = a[12];\n\t\t\t\tconst a31 = a[13];\n\t\t\t\tconst a32 = a[14];\n\t\t\t\tlet b0, b1, b2;\n\t\t\t\tb0 = b[0];\n\t\t\t\tb1 = b[1];\n\t\t\t\tb2 = b[2];\n\t\t\t\tr[0] = a00 * b0 + a10 * b1 + a20 * b2;\n\t\t\t\tr[1] = a01 * b0 + a11 * b1 + a21 * b2;\n\t\t\t\tr[2] = a02 * b0 + a12 * b1 + a22 * b2;\n\t\t\t\tr[3] = 0;\n\t\t\t\tb0 = b[4];\n\t\t\t\tb1 = b[5];\n\t\t\t\tb2 = b[6];\n\t\t\t\tr[4] = a00 * b0 + a10 * b1 + a20 * b2;\n\t\t\t\tr[5] = a01 * b0 + a11 * b1 + a21 * b2;\n\t\t\t\tr[6] = a02 * b0 + a12 * b1 + a22 * b2;\n\t\t\t\tr[7] = 0;\n\t\t\t\tb0 = b[8];\n\t\t\t\tb1 = b[9];\n\t\t\t\tb2 = b[10];\n\t\t\t\tr[8] = a00 * b0 + a10 * b1 + a20 * b2;\n\t\t\t\tr[9] = a01 * b0 + a11 * b1 + a21 * b2;\n\t\t\t\tr[10] = a02 * b0 + a12 * b1 + a22 * b2;\n\t\t\t\tr[11] = 0;\n\t\t\t\tb0 = b[12];\n\t\t\t\tb1 = b[13];\n\t\t\t\tb2 = b[14];\n\t\t\t\tr[12] = a00 * b0 + a10 * b1 + a20 * b2 + a30;\n\t\t\t\tr[13] = a01 * b0 + a11 * b1 + a21 * b2 + a31;\n\t\t\t\tr[14] = a02 * b0 + a12 * b1 + a22 * b2 + a32;\n\t\t\t\tr[15] = 1;\n\t\t\t\treturn this;\n\t\t}\n\t\tmul(rhs) {\n\t\t\t\treturn this.mul2(this, rhs);\n\t\t}\n\t\ttransformPoint(vec, res = new Vec3()) {\n\t\t\t\tconst m = this.data;\n\t\t\t\tconst { x, y, z } = vec;\n\t\t\t\tres.x = x * m[0] + y * m[4] + z * m[8] + m[12];\n\t\t\t\tres.y = x * m[1] + y * m[5] + z * m[9] + m[13];\n\t\t\t\tres.z = x * m[2] + y * m[6] + z * m[10] + m[14];\n\t\t\t\treturn res;\n\t\t}\n\t\ttransformVector(vec, res = new Vec3()) {\n\t\t\t\tconst m = this.data;\n\t\t\t\tconst { x, y, z } = vec;\n\t\t\t\tres.x = x * m[0] + y * m[4] + z * m[8];\n\t\t\t\tres.y = x * m[1] + y * m[5] + z * m[9];\n\t\t\t\tres.z = x * m[2] + y * m[6] + z * m[10];\n\t\t\t\treturn res;\n\t\t}\n\t\ttransformVec4(vec, res = new Vec4()) {\n\t\t\t\tconst m = this.data;\n\t\t\t\tconst { x, y, z, w } = vec;\n\t\t\t\tres.x = x * m[0] + y * m[4] + z * m[8] + w * m[12];\n\t\t\t\tres.y = x * m[1] + y * m[5] + z * m[9] + w * m[13];\n\t\t\t\tres.z = x * m[2] + y * m[6] + z * m[10] + w * m[14];\n\t\t\t\tres.w = x * m[3] + y * m[7] + z * m[11] + w * m[15];\n\t\t\t\treturn res;\n\t\t}\n\t\tsetLookAt(position, target, up) {\n\t\t\t\tz.sub2(position, target).normalize();\n\t\t\t\ty.copy(up).normalize();\n\t\t\t\tx.cross(y, z).normalize();\n\t\t\t\ty.cross(z, x);\n\t\t\t\tconst r = this.data;\n\t\t\t\tr[0] = x.x;\n\t\t\t\tr[1] = x.y;\n\t\t\t\tr[2] = x.z;\n\t\t\t\tr[3] = 0;\n\t\t\t\tr[4] = y.x;\n\t\t\t\tr[5] = y.y;\n\t\t\t\tr[6] = y.z;\n\t\t\t\tr[7] = 0;\n\t\t\t\tr[8] = z.x;\n\t\t\t\tr[9] = z.y;\n\t\t\t\tr[10] = z.z;\n\t\t\t\tr[11] = 0;\n\t\t\t\tr[12] = position.x;\n\t\t\t\tr[13] = position.y;\n\t\t\t\tr[14] = position.z;\n\t\t\t\tr[15] = 1;\n\t\t\t\treturn this;\n\t\t}\n\t\tsetFrustum(left, right, bottom, top, znear, zfar) {\n\t\t\t\tconst temp1 = 2 * znear;\n\t\t\t\tconst temp2 = right - left;\n\t\t\t\tconst temp3 = top - bottom;\n\t\t\t\tconst temp4 = zfar - znear;\n\t\t\t\tconst r = this.data;\n\t\t\t\tr[0] = temp1 / temp2;\n\t\t\t\tr[1] = 0;\n\t\t\t\tr[2] = 0;\n\t\t\t\tr[3] = 0;\n\t\t\t\tr[4] = 0;\n\t\t\t\tr[5] = temp1 / temp3;\n\t\t\t\tr[6] = 0;\n\t\t\t\tr[7] = 0;\n\t\t\t\tr[8] = (right + left) / temp2;\n\t\t\t\tr[9] = (top + bottom) / temp3;\n\t\t\t\tr[10] = (-zfar - znear) / temp4;\n\t\t\t\tr[11] = -1;\n\t\t\t\tr[12] = 0;\n\t\t\t\tr[13] = 0;\n\t\t\t\tr[14] = -temp1 * zfar / temp4;\n\t\t\t\tr[15] = 0;\n\t\t\t\treturn this;\n\t\t}\n\t\tsetPerspective(fov, aspect, znear, zfar, fovIsHorizontal) {\n\t\t\t\tMat4._getPerspectiveHalfSize(_halfSize, fov, aspect, znear, fovIsHorizontal);\n\t\t\t\treturn this.setFrustum(-_halfSize.x, _halfSize.x, -_halfSize.y, _halfSize.y, znear, zfar);\n\t\t}\n\t\tsetOrtho(left, right, bottom, top, near, far) {\n\t\t\t\tconst r = this.data;\n\t\t\t\tr[0] = 2 / (right - left);\n\t\t\t\tr[1] = 0;\n\t\t\t\tr[2] = 0;\n\t\t\t\tr[3] = 0;\n\t\t\t\tr[4] = 0;\n\t\t\t\tr[5] = 2 / (top - bottom);\n\t\t\t\tr[6] = 0;\n\t\t\t\tr[7] = 0;\n\t\t\t\tr[8] = 0;\n\t\t\t\tr[9] = 0;\n\t\t\t\tr[10] = -2 / (far - near);\n\t\t\t\tr[11] = 0;\n\t\t\t\tr[12] = -(right + left) / (right - left);\n\t\t\t\tr[13] = -(top + bottom) / (top - bottom);\n\t\t\t\tr[14] = -(far + near) / (far - near);\n\t\t\t\tr[15] = 1;\n\t\t\t\treturn this;\n\t\t}\n\t\tsetFromAxisAngle(axis, angle) {\n\t\t\t\tangle *= math.DEG_TO_RAD;\n\t\t\t\tconst { x, y, z } = axis;\n\t\t\t\tconst c = Math.cos(angle);\n\t\t\t\tconst s = Math.sin(angle);\n\t\t\t\tconst t = 1 - c;\n\t\t\t\tconst tx = t * x;\n\t\t\t\tconst ty = t * y;\n\t\t\t\tconst m = this.data;\n\t\t\t\tm[0] = tx * x + c;\n\t\t\t\tm[1] = tx * y + s * z;\n\t\t\t\tm[2] = tx * z - s * y;\n\t\t\t\tm[3] = 0;\n\t\t\t\tm[4] = tx * y - s * z;\n\t\t\t\tm[5] = ty * y + c;\n\t\t\t\tm[6] = ty * z + s * x;\n\t\t\t\tm[7] = 0;\n\t\t\t\tm[8] = tx * z + s * y;\n\t\t\t\tm[9] = ty * z - x * s;\n\t\t\t\tm[10] = t * z * z + c;\n\t\t\t\tm[11] = 0;\n\t\t\t\tm[12] = 0;\n\t\t\t\tm[13] = 0;\n\t\t\t\tm[14] = 0;\n\t\t\t\tm[15] = 1;\n\t\t\t\treturn this;\n\t\t}\n\t\tsetTranslate(x, y, z) {\n\t\t\t\tconst m = this.data;\n\t\t\t\tm[0] = 1;\n\t\t\t\tm[1] = 0;\n\t\t\t\tm[2] = 0;\n\t\t\t\tm[3] = 0;\n\t\t\t\tm[4] = 0;\n\t\t\t\tm[5] = 1;\n\t\t\t\tm[6] = 0;\n\t\t\t\tm[7] = 0;\n\t\t\t\tm[8] = 0;\n\t\t\t\tm[9] = 0;\n\t\t\t\tm[10] = 1;\n\t\t\t\tm[11] = 0;\n\t\t\t\tm[12] = x;\n\t\t\t\tm[13] = y;\n\t\t\t\tm[14] = z;\n\t\t\t\tm[15] = 1;\n\t\t\t\treturn this;\n\t\t}\n\t\tsetScale(x, y, z) {\n\t\t\t\tconst m = this.data;\n\t\t\t\tm[0] = x;\n\t\t\t\tm[1] = 0;\n\t\t\t\tm[2] = 0;\n\t\t\t\tm[3] = 0;\n\t\t\t\tm[4] = 0;\n\t\t\t\tm[5] = y;\n\t\t\t\tm[6] = 0;\n\t\t\t\tm[7] = 0;\n\t\t\t\tm[8] = 0;\n\t\t\t\tm[9] = 0;\n\t\t\t\tm[10] = z;\n\t\t\t\tm[11] = 0;\n\t\t\t\tm[12] = 0;\n\t\t\t\tm[13] = 0;\n\t\t\t\tm[14] = 0;\n\t\t\t\tm[15] = 1;\n\t\t\t\treturn this;\n\t\t}\n\t\tsetViewport(x, y, width, height) {\n\t\t\t\tconst m = this.data;\n\t\t\t\tm[0] = width * 0.5;\n\t\t\t\tm[1] = 0;\n\t\t\t\tm[2] = 0;\n\t\t\t\tm[3] = 0;\n\t\t\t\tm[4] = 0;\n\t\t\t\tm[5] = height * 0.5;\n\t\t\t\tm[6] = 0;\n\t\t\t\tm[7] = 0;\n\t\t\t\tm[8] = 0;\n\t\t\t\tm[9] = 0;\n\t\t\t\tm[10] = 0.5;\n\t\t\t\tm[11] = 0;\n\t\t\t\tm[12] = x + width * 0.5;\n\t\t\t\tm[13] = y + height * 0.5;\n\t\t\t\tm[14] = 0.5;\n\t\t\t\tm[15] = 1;\n\t\t\t\treturn this;\n\t\t}\n\t\tsetReflection(normal, distance) {\n\t\t\t\tconst a = normal.x;\n\t\t\t\tconst b = normal.y;\n\t\t\t\tconst c = normal.z;\n\t\t\t\tconst data = this.data;\n\t\t\t\tdata[0] = 1.0 - 2 * a * a;\n\t\t\t\tdata[1] = -2 * a * b;\n\t\t\t\tdata[2] = -2 * a * c;\n\t\t\t\tdata[3] = 0;\n\t\t\t\tdata[4] = -2 * a * b;\n\t\t\t\tdata[5] = 1.0 - 2 * b * b;\n\t\t\t\tdata[6] = -2 * b * c;\n\t\t\t\tdata[7] = 0;\n\t\t\t\tdata[8] = -2 * a * c;\n\t\t\t\tdata[9] = -2 * b * c;\n\t\t\t\tdata[10] = 1.0 - 2 * c * c;\n\t\t\t\tdata[11] = 0;\n\t\t\t\tdata[12] = -2 * a * distance;\n\t\t\t\tdata[13] = -2 * b * distance;\n\t\t\t\tdata[14] = -2 * c * distance;\n\t\t\t\tdata[15] = 1;\n\t\t\t\treturn this;\n\t\t}\n\t\tinvert(src = this) {\n\t\t\t\tconst s = src.data;\n\t\t\t\tconst a00 = s[0];\n\t\t\t\tconst a01 = s[1];\n\t\t\t\tconst a02 = s[2];\n\t\t\t\tconst a03 = s[3];\n\t\t\t\tconst a10 = s[4];\n\t\t\t\tconst a11 = s[5];\n\t\t\t\tconst a12 = s[6];\n\t\t\t\tconst a13 = s[7];\n\t\t\t\tconst a20 = s[8];\n\t\t\t\tconst a21 = s[9];\n\t\t\t\tconst a22 = s[10];\n\t\t\t\tconst a23 = s[11];\n\t\t\t\tconst a30 = s[12];\n\t\t\t\tconst a31 = s[13];\n\t\t\t\tconst a32 = s[14];\n\t\t\t\tconst a33 = s[15];\n\t\t\t\tconst b00 = a00 * a11 - a01 * a10;\n\t\t\t\tconst b01 = a00 * a12 - a02 * a10;\n\t\t\t\tconst b02 = a00 * a13 - a03 * a10;\n\t\t\t\tconst b03 = a01 * a12 - a02 * a11;\n\t\t\t\tconst b04 = a01 * a13 - a03 * a11;\n\t\t\t\tconst b05 = a02 * a13 - a03 * a12;\n\t\t\t\tconst b06 = a20 * a31 - a21 * a30;\n\t\t\t\tconst b07 = a20 * a32 - a22 * a30;\n\t\t\t\tconst b08 = a20 * a33 - a23 * a30;\n\t\t\t\tconst b09 = a21 * a32 - a22 * a31;\n\t\t\t\tconst b10 = a21 * a33 - a23 * a31;\n\t\t\t\tconst b11 = a22 * a33 - a23 * a32;\n\t\t\t\tconst det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\t\t\t\tif (det === 0) {\n\t\t\t\t\t\tthis.setIdentity();\n\t\t\t\t} else {\n\t\t\t\t\t\tconst invDet = 1 / det;\n\t\t\t\t\t\tconst t = this.data;\n\t\t\t\t\t\tt[0] = (a11 * b11 - a12 * b10 + a13 * b09) * invDet;\n\t\t\t\t\t\tt[1] = (-a01 * b11 + a02 * b10 - a03 * b09) * invDet;\n\t\t\t\t\t\tt[2] = (a31 * b05 - a32 * b04 + a33 * b03) * invDet;\n\t\t\t\t\t\tt[3] = (-a21 * b05 + a22 * b04 - a23 * b03) * invDet;\n\t\t\t\t\t\tt[4] = (-a10 * b11 + a12 * b08 - a13 * b07) * invDet;\n\t\t\t\t\t\tt[5] = (a00 * b11 - a02 * b08 + a03 * b07) * invDet;\n\t\t\t\t\t\tt[6] = (-a30 * b05 + a32 * b02 - a33 * b01) * invDet;\n\t\t\t\t\t\tt[7] = (a20 * b05 - a22 * b02 + a23 * b01) * invDet;\n\t\t\t\t\t\tt[8] = (a10 * b10 - a11 * b08 + a13 * b06) * invDet;\n\t\t\t\t\t\tt[9] = (-a00 * b10 + a01 * b08 - a03 * b06) * invDet;\n\t\t\t\t\t\tt[10] = (a30 * b04 - a31 * b02 + a33 * b00) * invDet;\n\t\t\t\t\t\tt[11] = (-a20 * b04 + a21 * b02 - a23 * b00) * invDet;\n\t\t\t\t\t\tt[12] = (-a10 * b09 + a11 * b07 - a12 * b06) * invDet;\n\t\t\t\t\t\tt[13] = (a00 * b09 - a01 * b07 + a02 * b06) * invDet;\n\t\t\t\t\t\tt[14] = (-a30 * b03 + a31 * b01 - a32 * b00) * invDet;\n\t\t\t\t\t\tt[15] = (a20 * b03 - a21 * b01 + a22 * b00) * invDet;\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t}\n\t\tset(src) {\n\t\t\t\tconst dst = this.data;\n\t\t\t\tdst[0] = src[0];\n\t\t\t\tdst[1] = src[1];\n\t\t\t\tdst[2] = src[2];\n\t\t\t\tdst[3] = src[3];\n\t\t\t\tdst[4] = src[4];\n\t\t\t\tdst[5] = src[5];\n\t\t\t\tdst[6] = src[6];\n\t\t\t\tdst[7] = src[7];\n\t\t\t\tdst[8] = src[8];\n\t\t\t\tdst[9] = src[9];\n\t\t\t\tdst[10] = src[10];\n\t\t\t\tdst[11] = src[11];\n\t\t\t\tdst[12] = src[12];\n\t\t\t\tdst[13] = src[13];\n\t\t\t\tdst[14] = src[14];\n\t\t\t\tdst[15] = src[15];\n\t\t\t\treturn this;\n\t\t}\n\t\tsetIdentity() {\n\t\t\t\tconst m = this.data;\n\t\t\t\tm[0] = 1;\n\t\t\t\tm[1] = 0;\n\t\t\t\tm[2] = 0;\n\t\t\t\tm[3] = 0;\n\t\t\t\tm[4] = 0;\n\t\t\t\tm[5] = 1;\n\t\t\t\tm[6] = 0;\n\t\t\t\tm[7] = 0;\n\t\t\t\tm[8] = 0;\n\t\t\t\tm[9] = 0;\n\t\t\t\tm[10] = 1;\n\t\t\t\tm[11] = 0;\n\t\t\t\tm[12] = 0;\n\t\t\t\tm[13] = 0;\n\t\t\t\tm[14] = 0;\n\t\t\t\tm[15] = 1;\n\t\t\t\treturn this;\n\t\t}\n\t\tsetTRS(t, r, s) {\n\t\t\t\tconst qx = r.x;\n\t\t\t\tconst qy = r.y;\n\t\t\t\tconst qz = r.z;\n\t\t\t\tconst qw = r.w;\n\t\t\t\tconst sx = s.x;\n\t\t\t\tconst sy = s.y;\n\t\t\t\tconst sz = s.z;\n\t\t\t\tconst x2 = qx + qx;\n\t\t\t\tconst y2 = qy + qy;\n\t\t\t\tconst z2 = qz + qz;\n\t\t\t\tconst xx = qx * x2;\n\t\t\t\tconst xy = qx * y2;\n\t\t\t\tconst xz = qx * z2;\n\t\t\t\tconst yy = qy * y2;\n\t\t\t\tconst yz = qy * z2;\n\t\t\t\tconst zz = qz * z2;\n\t\t\t\tconst wx = qw * x2;\n\t\t\t\tconst wy = qw * y2;\n\t\t\t\tconst wz = qw * z2;\n\t\t\t\tconst m = this.data;\n\t\t\t\tm[0] = (1 - (yy + zz)) * sx;\n\t\t\t\tm[1] = (xy + wz) * sx;\n\t\t\t\tm[2] = (xz - wy) * sx;\n\t\t\t\tm[3] = 0;\n\t\t\t\tm[4] = (xy - wz) * sy;\n\t\t\t\tm[5] = (1 - (xx + zz)) * sy;\n\t\t\t\tm[6] = (yz + wx) * sy;\n\t\t\t\tm[7] = 0;\n\t\t\t\tm[8] = (xz + wy) * sz;\n\t\t\t\tm[9] = (yz - wx) * sz;\n\t\t\t\tm[10] = (1 - (xx + yy)) * sz;\n\t\t\t\tm[11] = 0;\n\t\t\t\tm[12] = t.x;\n\t\t\t\tm[13] = t.y;\n\t\t\t\tm[14] = t.z;\n\t\t\t\tm[15] = 1;\n\t\t\t\treturn this;\n\t\t}\n\t\ttranspose(src = this) {\n\t\t\t\tconst s = src.data;\n\t\t\t\tconst t = this.data;\n\t\t\t\tif (s === t) {\n\t\t\t\t\t\tlet tmp;\n\t\t\t\t\t\ttmp = s[1];\n\t\t\t\t\t\tt[1] = s[4];\n\t\t\t\t\t\tt[4] = tmp;\n\t\t\t\t\t\ttmp = s[2];\n\t\t\t\t\t\tt[2] = s[8];\n\t\t\t\t\t\tt[8] = tmp;\n\t\t\t\t\t\ttmp = s[3];\n\t\t\t\t\t\tt[3] = s[12];\n\t\t\t\t\t\tt[12] = tmp;\n\t\t\t\t\t\ttmp = s[6];\n\t\t\t\t\t\tt[6] = s[9];\n\t\t\t\t\t\tt[9] = tmp;\n\t\t\t\t\t\ttmp = s[7];\n\t\t\t\t\t\tt[7] = s[13];\n\t\t\t\t\t\tt[13] = tmp;\n\t\t\t\t\t\ttmp = s[11];\n\t\t\t\t\t\tt[11] = s[14];\n\t\t\t\t\t\tt[14] = tmp;\n\t\t\t\t} else {\n\t\t\t\t\t\tt[0] = s[0];\n\t\t\t\t\t\tt[1] = s[4];\n\t\t\t\t\t\tt[2] = s[8];\n\t\t\t\t\t\tt[3] = s[12];\n\t\t\t\t\t\tt[4] = s[1];\n\t\t\t\t\t\tt[5] = s[5];\n\t\t\t\t\t\tt[6] = s[9];\n\t\t\t\t\t\tt[7] = s[13];\n\t\t\t\t\t\tt[8] = s[2];\n\t\t\t\t\t\tt[9] = s[6];\n\t\t\t\t\t\tt[10] = s[10];\n\t\t\t\t\t\tt[11] = s[14];\n\t\t\t\t\t\tt[12] = s[3];\n\t\t\t\t\t\tt[13] = s[7];\n\t\t\t\t\t\tt[14] = s[11];\n\t\t\t\t\t\tt[15] = s[15];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t}\n\t\tgetTranslation(t = new Vec3()) {\n\t\t\t\treturn t.set(this.data[12], this.data[13], this.data[14]);\n\t\t}\n\t\tgetX(x = new Vec3()) {\n\t\t\t\treturn x.set(this.data[0], this.data[1], this.data[2]);\n\t\t}\n\t\tgetY(y = new Vec3()) {\n\t\t\t\treturn y.set(this.data[4], this.data[5], this.data[6]);\n\t\t}\n\t\tgetZ(z = new Vec3()) {\n\t\t\t\treturn z.set(this.data[8], this.data[9], this.data[10]);\n\t\t}\n\t\tgetScale(scale = new Vec3()) {\n\t\t\t\tthis.getX(x);\n\t\t\t\tthis.getY(y);\n\t\t\t\tthis.getZ(z);\n\t\t\t\tscale.set(x.length(), y.length(), z.length());\n\t\t\t\treturn scale;\n\t\t}\n\t\tget scaleSign() {\n\t\t\t\tthis.getX(x);\n\t\t\t\tthis.getY(y);\n\t\t\t\tthis.getZ(z);\n\t\t\t\tx.cross(x, y);\n\t\t\t\treturn x.dot(z) < 0 ? -1 : 1;\n\t\t}\n\t\tsetFromEulerAngles(ex, ey, ez) {\n\t\t\t\tex *= math.DEG_TO_RAD;\n\t\t\t\tey *= math.DEG_TO_RAD;\n\t\t\t\tez *= math.DEG_TO_RAD;\n\t\t\t\tconst s1 = Math.sin(-ex);\n\t\t\t\tconst c1 = Math.cos(-ex);\n\t\t\t\tconst s2 = Math.sin(-ey);\n\t\t\t\tconst c2 = Math.cos(-ey);\n\t\t\t\tconst s3 = Math.sin(-ez);\n\t\t\t\tconst c3 = Math.cos(-ez);\n\t\t\t\tconst m = this.data;\n\t\t\t\tm[0] = c2 * c3;\n\t\t\t\tm[1] = -c2 * s3;\n\t\t\t\tm[2] = s2;\n\t\t\t\tm[3] = 0;\n\t\t\t\tm[4] = c1 * s3 + c3 * s1 * s2;\n\t\t\t\tm[5] = c1 * c3 - s1 * s2 * s3;\n\t\t\t\tm[6] = -c2 * s1;\n\t\t\t\tm[7] = 0;\n\t\t\t\tm[8] = s1 * s3 - c1 * c3 * s2;\n\t\t\t\tm[9] = c3 * s1 + c1 * s2 * s3;\n\t\t\t\tm[10] = c1 * c2;\n\t\t\t\tm[11] = 0;\n\t\t\t\tm[12] = 0;\n\t\t\t\tm[13] = 0;\n\t\t\t\tm[14] = 0;\n\t\t\t\tm[15] = 1;\n\t\t\t\treturn this;\n\t\t}\n\t\tgetEulerAngles(eulers = new Vec3()) {\n\t\t\t\tthis.getScale(scale);\n\t\t\t\tconst sx = scale.x;\n\t\t\t\tconst sy = scale.y;\n\t\t\t\tconst sz = scale.z;\n\t\t\t\tif (sx === 0 || sy === 0 || sz === 0) {\n\t\t\t\t\t\treturn eulers.set(0, 0, 0);\n\t\t\t\t}\n\t\t\t\tconst m = this.data;\n\t\t\t\tconst y = Math.asin(-m[2] / sx);\n\t\t\t\tconst halfPi = Math.PI * 0.5;\n\t\t\t\tlet x, z;\n\t\t\t\tif (y < halfPi) {\n\t\t\t\t\t\tif (y > -halfPi) {\n\t\t\t\t\t\t\t\tx = Math.atan2(m[6] / sy, m[10] / sz);\n\t\t\t\t\t\t\t\tz = Math.atan2(m[1] / sx, m[0] / sx);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tz = 0;\n\t\t\t\t\t\t\t\tx = -Math.atan2(m[4] / sy, m[5] / sy);\n\t\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\tz = 0;\n\t\t\t\t\t\tx = Math.atan2(m[4] / sy, m[5] / sy);\n\t\t\t\t}\n\t\t\t\treturn eulers.set(x, y, z).mulScalar(math.RAD_TO_DEG);\n\t\t}\n\t\ttoString() {\n\t\t\t\treturn `[${this.data.join(', ')}]`;\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.IDENTITY = Object.freeze(new Mat4());\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.ZERO = Object.freeze(new Mat4().set([\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t0\n\t\t\t\t]));\n\t\t}\n}\n\nexport { Mat4 };\n","import { math } from './math.js';\nimport { Vec3 } from './vec3.js';\n\nclass Quat {\n\t\tconstructor(x = 0, y = 0, z = 0, w = 1){\n\t\t\t\tif (x.length === 4) {\n\t\t\t\t\t\tthis.x = x[0];\n\t\t\t\t\t\tthis.y = x[1];\n\t\t\t\t\t\tthis.z = x[2];\n\t\t\t\t\t\tthis.w = x[3];\n\t\t\t\t} else {\n\t\t\t\t\t\tthis.x = x;\n\t\t\t\t\t\tthis.y = y;\n\t\t\t\t\t\tthis.z = z;\n\t\t\t\t\t\tthis.w = w;\n\t\t\t\t}\n\t\t}\n\t\tclone() {\n\t\t\t\tconst cstr = this.constructor;\n\t\t\t\treturn new cstr(this.x, this.y, this.z, this.w);\n\t\t}\n\t\tconjugate(src = this) {\n\t\t\t\tthis.x = src.x * -1;\n\t\t\t\tthis.y = src.y * -1;\n\t\t\t\tthis.z = src.z * -1;\n\t\t\t\tthis.w = src.w;\n\t\t\t\treturn this;\n\t\t}\n\t\tcopy(rhs) {\n\t\t\t\tthis.x = rhs.x;\n\t\t\t\tthis.y = rhs.y;\n\t\t\t\tthis.z = rhs.z;\n\t\t\t\tthis.w = rhs.w;\n\t\t\t\treturn this;\n\t\t}\n\t\tdot(other) {\n\t\t\t\treturn this.x * other.x + this.y * other.y + this.z * other.z + this.w * other.w;\n\t\t}\n\t\tequals(rhs) {\n\t\t\t\treturn this.x === rhs.x && this.y === rhs.y && this.z === rhs.z && this.w === rhs.w;\n\t\t}\n\t\tequalsApprox(rhs, epsilon = 1e-6) {\n\t\t\t\treturn Math.abs(this.x - rhs.x) < epsilon && Math.abs(this.y - rhs.y) < epsilon && Math.abs(this.z - rhs.z) < epsilon && Math.abs(this.w - rhs.w) < epsilon;\n\t\t}\n\t\tgetAxisAngle(axis) {\n\t\t\t\tlet rad = Math.acos(this.w) * 2;\n\t\t\t\tconst s = Math.sin(rad / 2);\n\t\t\t\tif (s !== 0) {\n\t\t\t\t\t\taxis.x = this.x / s;\n\t\t\t\t\t\taxis.y = this.y / s;\n\t\t\t\t\t\taxis.z = this.z / s;\n\t\t\t\t\t\tif (axis.x < 0 || axis.y < 0 || axis.z < 0) {\n\t\t\t\t\t\t\t\taxis.x *= -1;\n\t\t\t\t\t\t\t\taxis.y *= -1;\n\t\t\t\t\t\t\t\taxis.z *= -1;\n\t\t\t\t\t\t\t\trad *= -1;\n\t\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\taxis.x = 1;\n\t\t\t\t\t\taxis.y = 0;\n\t\t\t\t\t\taxis.z = 0;\n\t\t\t\t}\n\t\t\t\treturn rad * math.RAD_TO_DEG;\n\t\t}\n\t\tgetEulerAngles(eulers = new Vec3()) {\n\t\t\t\tlet x, y, z;\n\t\t\t\tconst qx = this.x;\n\t\t\t\tconst qy = this.y;\n\t\t\t\tconst qz = this.z;\n\t\t\t\tconst qw = this.w;\n\t\t\t\tconst a2 = 2 * (qw * qy - qx * qz);\n\t\t\t\tif (a2 <= -0.99999) {\n\t\t\t\t\t\tx = 2 * Math.atan2(qx, qw);\n\t\t\t\t\t\ty = -Math.PI / 2;\n\t\t\t\t\t\tz = 0;\n\t\t\t\t} else if (a2 >= 0.99999) {\n\t\t\t\t\t\tx = 2 * Math.atan2(qx, qw);\n\t\t\t\t\t\ty = Math.PI / 2;\n\t\t\t\t\t\tz = 0;\n\t\t\t\t} else {\n\t\t\t\t\t\tx = Math.atan2(2 * (qw * qx + qy * qz), 1 - 2 * (qx * qx + qy * qy));\n\t\t\t\t\t\ty = Math.asin(a2);\n\t\t\t\t\t\tz = Math.atan2(2 * (qw * qz + qx * qy), 1 - 2 * (qy * qy + qz * qz));\n\t\t\t\t}\n\t\t\t\treturn eulers.set(x, y, z).mulScalar(math.RAD_TO_DEG);\n\t\t}\n\t\tinvert(src = this) {\n\t\t\t\treturn this.conjugate(src).normalize();\n\t\t}\n\t\tlength() {\n\t\t\t\treturn Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);\n\t\t}\n\t\tlengthSq() {\n\t\t\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\t\t}\n\t\tlerp(lhs, rhs, alpha) {\n\t\t\t\tconst omt = (1 - alpha) * (lhs.dot(rhs) < 0 ? -1 : 1);\n\t\t\t\tthis.x = lhs.x * omt + rhs.x * alpha;\n\t\t\t\tthis.y = lhs.y * omt + rhs.y * alpha;\n\t\t\t\tthis.z = lhs.z * omt + rhs.z * alpha;\n\t\t\t\tthis.w = lhs.w * omt + rhs.w * alpha;\n\t\t\t\treturn this.normalize();\n\t\t}\n\t\tmul(rhs) {\n\t\t\t\tconst q1x = this.x;\n\t\t\t\tconst q1y = this.y;\n\t\t\t\tconst q1z = this.z;\n\t\t\t\tconst q1w = this.w;\n\t\t\t\tconst q2x = rhs.x;\n\t\t\t\tconst q2y = rhs.y;\n\t\t\t\tconst q2z = rhs.z;\n\t\t\t\tconst q2w = rhs.w;\n\t\t\t\tthis.x = q1w * q2x + q1x * q2w + q1y * q2z - q1z * q2y;\n\t\t\t\tthis.y = q1w * q2y + q1y * q2w + q1z * q2x - q1x * q2z;\n\t\t\t\tthis.z = q1w * q2z + q1z * q2w + q1x * q2y - q1y * q2x;\n\t\t\t\tthis.w = q1w * q2w - q1x * q2x - q1y * q2y - q1z * q2z;\n\t\t\t\treturn this;\n\t\t}\n\t\tmulScalar(scalar, src = this) {\n\t\t\t\tthis.x = src.x * scalar;\n\t\t\t\tthis.y = src.y * scalar;\n\t\t\t\tthis.z = src.z * scalar;\n\t\t\t\tthis.w = src.w * scalar;\n\t\t\t\treturn this;\n\t\t}\n\t\tmul2(lhs, rhs) {\n\t\t\t\tconst q1x = lhs.x;\n\t\t\t\tconst q1y = lhs.y;\n\t\t\t\tconst q1z = lhs.z;\n\t\t\t\tconst q1w = lhs.w;\n\t\t\t\tconst q2x = rhs.x;\n\t\t\t\tconst q2y = rhs.y;\n\t\t\t\tconst q2z = rhs.z;\n\t\t\t\tconst q2w = rhs.w;\n\t\t\t\tthis.x = q1w * q2x + q1x * q2w + q1y * q2z - q1z * q2y;\n\t\t\t\tthis.y = q1w * q2y + q1y * q2w + q1z * q2x - q1x * q2z;\n\t\t\t\tthis.z = q1w * q2z + q1z * q2w + q1x * q2y - q1y * q2x;\n\t\t\t\tthis.w = q1w * q2w - q1x * q2x - q1y * q2y - q1z * q2z;\n\t\t\t\treturn this;\n\t\t}\n\t\tnormalize(src = this) {\n\t\t\t\tlet len = src.length();\n\t\t\t\tif (len === 0) {\n\t\t\t\t\t\tthis.x = this.y = this.z = 0;\n\t\t\t\t\t\tthis.w = 1;\n\t\t\t\t} else {\n\t\t\t\t\t\tlen = 1 / len;\n\t\t\t\t\t\tthis.x = src.x * len;\n\t\t\t\t\t\tthis.y = src.y * len;\n\t\t\t\t\t\tthis.z = src.z * len;\n\t\t\t\t\t\tthis.w = src.w * len;\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t}\n\t\tset(x, y, z, w) {\n\t\t\t\tthis.x = x;\n\t\t\t\tthis.y = y;\n\t\t\t\tthis.z = z;\n\t\t\t\tthis.w = w;\n\t\t\t\treturn this;\n\t\t}\n\t\tsetFromAxisAngle(axis, angle) {\n\t\t\t\tangle *= 0.5 * math.DEG_TO_RAD;\n\t\t\t\tconst sa = Math.sin(angle);\n\t\t\t\tconst ca = Math.cos(angle);\n\t\t\t\tthis.x = sa * axis.x;\n\t\t\t\tthis.y = sa * axis.y;\n\t\t\t\tthis.z = sa * axis.z;\n\t\t\t\tthis.w = ca;\n\t\t\t\treturn this;\n\t\t}\n\t\tsetFromEulerAngles(ex, ey, ez) {\n\t\t\t\tif (ex instanceof Vec3) {\n\t\t\t\t\t\tconst vec = ex;\n\t\t\t\t\t\tex = vec.x;\n\t\t\t\t\t\tey = vec.y;\n\t\t\t\t\t\tez = vec.z;\n\t\t\t\t}\n\t\t\t\tconst halfToRad = 0.5 * math.DEG_TO_RAD;\n\t\t\t\tex *= halfToRad;\n\t\t\t\tey *= halfToRad;\n\t\t\t\tez *= halfToRad;\n\t\t\t\tconst sx = Math.sin(ex);\n\t\t\t\tconst cx = Math.cos(ex);\n\t\t\t\tconst sy = Math.sin(ey);\n\t\t\t\tconst cy = Math.cos(ey);\n\t\t\t\tconst sz = Math.sin(ez);\n\t\t\t\tconst cz = Math.cos(ez);\n\t\t\t\tthis.x = sx * cy * cz - cx * sy * sz;\n\t\t\t\tthis.y = cx * sy * cz + sx * cy * sz;\n\t\t\t\tthis.z = cx * cy * sz - sx * sy * cz;\n\t\t\t\tthis.w = cx * cy * cz + sx * sy * sz;\n\t\t\t\treturn this;\n\t\t}\n\t\tsetFromMat4(m) {\n\t\t\t\tconst d = m.data;\n\t\t\t\tlet m00 = d[0];\n\t\t\t\tlet m01 = d[1];\n\t\t\t\tlet m02 = d[2];\n\t\t\t\tlet m10 = d[4];\n\t\t\t\tlet m11 = d[5];\n\t\t\t\tlet m12 = d[6];\n\t\t\t\tlet m20 = d[8];\n\t\t\t\tlet m21 = d[9];\n\t\t\t\tlet m22 = d[10];\n\t\t\t\tlet l;\n\t\t\t\tl = m00 * m00 + m01 * m01 + m02 * m02;\n\t\t\t\tif (l === 0) return this.set(0, 0, 0, 1);\n\t\t\t\tl = 1 / Math.sqrt(l);\n\t\t\t\tm00 *= l;\n\t\t\t\tm01 *= l;\n\t\t\t\tm02 *= l;\n\t\t\t\tl = m10 * m10 + m11 * m11 + m12 * m12;\n\t\t\t\tif (l === 0) return this.set(0, 0, 0, 1);\n\t\t\t\tl = 1 / Math.sqrt(l);\n\t\t\t\tm10 *= l;\n\t\t\t\tm11 *= l;\n\t\t\t\tm12 *= l;\n\t\t\t\tl = m20 * m20 + m21 * m21 + m22 * m22;\n\t\t\t\tif (l === 0) return this.set(0, 0, 0, 1);\n\t\t\t\tl = 1 / Math.sqrt(l);\n\t\t\t\tm20 *= l;\n\t\t\t\tm21 *= l;\n\t\t\t\tm22 *= l;\n\t\t\t\tif (m22 < 0) {\n\t\t\t\t\t\tif (m00 > m11) {\n\t\t\t\t\t\t\t\tthis.set(1 + m00 - m11 - m22, m01 + m10, m20 + m02, m12 - m21);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.set(m01 + m10, 1 - m00 + m11 - m22, m12 + m21, m20 - m02);\n\t\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\tif (m00 < -m11) {\n\t\t\t\t\t\t\t\tthis.set(m20 + m02, m12 + m21, 1 - m00 - m11 + m22, m01 - m10);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.set(m12 - m21, m20 - m02, m01 - m10, 1 + m00 + m11 + m22);\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this.mulScalar(1.0 / this.length());\n\t\t}\n\t\tsetFromDirections(from, to) {\n\t\t\t\tconst dotProduct = 1 + from.dot(to);\n\t\t\t\tif (dotProduct < Number.EPSILON) {\n\t\t\t\t\t\tif (Math.abs(from.x) > Math.abs(from.y)) {\n\t\t\t\t\t\t\t\tthis.x = -from.z;\n\t\t\t\t\t\t\t\tthis.y = 0;\n\t\t\t\t\t\t\t\tthis.z = from.x;\n\t\t\t\t\t\t\t\tthis.w = 0;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.x = 0;\n\t\t\t\t\t\t\t\tthis.y = -from.z;\n\t\t\t\t\t\t\t\tthis.z = from.y;\n\t\t\t\t\t\t\t\tthis.w = 0;\n\t\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t\tthis.x = from.y * to.z - from.z * to.y;\n\t\t\t\t\t\tthis.y = from.z * to.x - from.x * to.z;\n\t\t\t\t\t\tthis.z = from.x * to.y - from.y * to.x;\n\t\t\t\t\t\tthis.w = dotProduct;\n\t\t\t\t}\n\t\t\t\treturn this.normalize();\n\t\t}\n\t\tslerp(lhs, rhs, alpha) {\n\t\t\t\tconst lx = lhs.x;\n\t\t\t\tconst ly = lhs.y;\n\t\t\t\tconst lz = lhs.z;\n\t\t\t\tconst lw = lhs.w;\n\t\t\t\tlet rx = rhs.x;\n\t\t\t\tlet ry = rhs.y;\n\t\t\t\tlet rz = rhs.z;\n\t\t\t\tlet rw = rhs.w;\n\t\t\t\tlet cosHalfTheta = lw * rw + lx * rx + ly * ry + lz * rz;\n\t\t\t\tif (cosHalfTheta < 0) {\n\t\t\t\t\t\trw = -rw;\n\t\t\t\t\t\trx = -rx;\n\t\t\t\t\t\try = -ry;\n\t\t\t\t\t\trz = -rz;\n\t\t\t\t\t\tcosHalfTheta = -cosHalfTheta;\n\t\t\t\t}\n\t\t\t\tif (Math.abs(cosHalfTheta) >= 1) {\n\t\t\t\t\t\tthis.w = lw;\n\t\t\t\t\t\tthis.x = lx;\n\t\t\t\t\t\tthis.y = ly;\n\t\t\t\t\t\tthis.z = lz;\n\t\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tconst halfTheta = Math.acos(cosHalfTheta);\n\t\t\t\tconst sinHalfTheta = Math.sqrt(1 - cosHalfTheta * cosHalfTheta);\n\t\t\t\tif (Math.abs(sinHalfTheta) < 0.001) {\n\t\t\t\t\t\tthis.w = lw * 0.5 + rw * 0.5;\n\t\t\t\t\t\tthis.x = lx * 0.5 + rx * 0.5;\n\t\t\t\t\t\tthis.y = ly * 0.5 + ry * 0.5;\n\t\t\t\t\t\tthis.z = lz * 0.5 + rz * 0.5;\n\t\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tconst ratioA = Math.sin((1 - alpha) * halfTheta) / sinHalfTheta;\n\t\t\t\tconst ratioB = Math.sin(alpha * halfTheta) / sinHalfTheta;\n\t\t\t\tthis.w = lw * ratioA + rw * ratioB;\n\t\t\t\tthis.x = lx * ratioA + rx * ratioB;\n\t\t\t\tthis.y = ly * ratioA + ry * ratioB;\n\t\t\t\tthis.z = lz * ratioA + rz * ratioB;\n\t\t\t\treturn this;\n\t\t}\n\t\ttransformVector(vec, res = new Vec3()) {\n\t\t\t\tconst x = vec.x, y = vec.y, z = vec.z;\n\t\t\t\tconst qx = this.x, qy = this.y, qz = this.z, qw = this.w;\n\t\t\t\tconst ix = qw * x + qy * z - qz * y;\n\t\t\t\tconst iy = qw * y + qz * x - qx * z;\n\t\t\t\tconst iz = qw * z + qx * y - qy * x;\n\t\t\t\tconst iw = -qx * x - qy * y - qz * z;\n\t\t\t\tres.x = ix * qw + iw * -qx + iy * -qz - iz * -qy;\n\t\t\t\tres.y = iy * qw + iw * -qy + iz * -qx - ix * -qz;\n\t\t\t\tres.z = iz * qw + iw * -qz + ix * -qy - iy * -qx;\n\t\t\t\treturn res;\n\t\t}\n\t\tfromArray(arr, offset = 0) {\n\t\t\t\tthis.x = arr[offset] ?? this.x;\n\t\t\t\tthis.y = arr[offset + 1] ?? this.y;\n\t\t\t\tthis.z = arr[offset + 2] ?? this.z;\n\t\t\t\tthis.w = arr[offset + 3] ?? this.w;\n\t\t\t\treturn this;\n\t\t}\n\t\ttoString() {\n\t\t\t\treturn `[${this.x}, ${this.y}, ${this.z}, ${this.w}]`;\n\t\t}\n\t\ttoArray(arr = [], offset = 0) {\n\t\t\t\tarr[offset] = this.x;\n\t\t\t\tarr[offset + 1] = this.y;\n\t\t\t\tarr[offset + 2] = this.z;\n\t\t\t\tarr[offset + 3] = this.w;\n\t\t\t\treturn arr;\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.IDENTITY = Object.freeze(new Quat(0, 0, 0, 1));\n\t\t}\n\t\tstatic{\n\t\t\t\tthis.ZERO = Object.freeze(new Quat(0, 0, 0, 0));\n\t\t}\n}\n\nexport { Quat };\n","type TypedArray = Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array;\n\ntype ColumnType = 'int8' | 'uint8' | 'int16' | 'uint16' | 'int32' | 'uint32' | 'float32' | 'float64';\n\nclass Column {\n name: string;\n data: TypedArray;\n\n constructor(name: string, data: TypedArray) {\n this.name = name;\n this.data = data;\n }\n\n get dataType(): ColumnType | null {\n switch (this.data.constructor) {\n case Int8Array: return 'int8';\n case Uint8Array: return 'uint8';\n case Int16Array: return 'int16';\n case Uint16Array: return 'uint16';\n case Int32Array: return 'int32';\n case Uint32Array: return 'uint32';\n case Float32Array: return 'float32';\n case Float64Array: return 'float64';\n }\n return null;\n }\n\n clone(): Column {\n return new Column(this.name, this.data.slice());\n }\n\n filter(length: number, filter: Uint8Array): Column {\n const constructor = this.data.constructor as new (length: number) => TypedArray;\n const data = new constructor(length);\n let j = 0;\n for (let i = 0; i < this.data.length; i++) {\n if (filter[i]) {\n data[j++] = this.data[i];\n }\n }\n return new Column(this.name, data);\n }\n}\n\ntype Row = {\n [colName: string]: number;\n};\n\ntype RowPredicate = (rowIndex: number, row: Row) => boolean;\n\nclass DataTable {\n columns: Column[];\n\n constructor(columns: Column[]) {\n if (columns.length === 0) {\n throw new Error('DataTable must have at least one column');\n }\n\n // check all columns have the same lengths\n for (let i = 1; i < columns.length; i++) {\n if (columns[i].data.length !== columns[0].data.length) {\n throw new Error(`Column '${columns[i].name}' has inconsistent number of rows: expected ${columns[0].data.length}, got ${columns[i].data.length}`);\n }\n }\n\n this.columns = columns;\n }\n\n // rows\n\n get numRows() {\n return this.columns[0].data.length;\n }\n\n getRow(index: number, row: Row = {}, columns = this.columns): Row {\n for (const column of columns) {\n row[column.name] = column.data[index];\n }\n return row;\n }\n\n setRow(index: number, row: Row, columns = this.columns) {\n for (const column of columns) {\n if (row.hasOwnProperty(column.name)) {\n column.data[index] = row[column.name];\n }\n }\n }\n\n // columns\n\n get numColumns() {\n return this.columns.length;\n }\n\n get columnNames() {\n return this.columns.map(column => column.name);\n }\n\n get columnData() {\n return this.columns.map(column => column.data);\n }\n\n get columnTypes() {\n return this.columns.map(column => column.dataType);\n }\n\n getColumn(index: number): Column {\n return this.columns[index];\n }\n\n getColumnIndex(name: string): number {\n return this.columns.findIndex(column => column.name === name);\n }\n\n getColumnByName(name: string): Column | null {\n return this.columns.find(column => column.name === name);\n }\n\n hasColumn(name: string): boolean {\n return this.columns.some(column => column.name === name);\n }\n\n addColumn(column: Column) {\n if (column.data.length !== this.numRows) {\n throw new Error(`Column '${column.name}' has inconsistent number of rows: expected ${this.numRows}, got ${column.data.length}`);\n }\n this.columns.push(column);\n }\n\n removeColumn(name: string) {\n const index = this.columns.findIndex(column => column.name === name);\n if (index === -1) {\n return false;\n }\n this.columns.splice(index, 1);\n return true;\n }\n\n // general\n\n clone(): DataTable {\n return new DataTable(this.columns.map(c => c.clone()));\n }\n\n filter(predicate: RowPredicate): DataTable | null {\n const flags = new Uint8Array(this.numRows);\n const row = {};\n let numRows = 0;\n\n for (let i = 0; i < this.numRows; i++) {\n this.getRow(i, row);\n flags[i] = predicate(i, row) ? 1 : 0;\n numRows += flags[i];\n }\n\n if (numRows === 0) {\n return null;\n }\n\n if (numRows === this.numRows) {\n return this;\n }\n\n return new DataTable(this.columns.map(c => c.filter(numRows, flags)));\n }\n}\n\nexport { Column, DataTable, TypedArray };\n","import { Mat3 } from 'playcanvas';\n\n/* eslint-disable indent */\n\nconst kSqrt03_02 = Math.sqrt(3.0 / 2.0);\nconst kSqrt01_03 = Math.sqrt(1.0 / 3.0);\nconst kSqrt02_03 = Math.sqrt(2.0 / 3.0);\nconst kSqrt04_03 = Math.sqrt(4.0 / 3.0);\nconst kSqrt01_04 = Math.sqrt(1.0 / 4.0);\nconst kSqrt03_04 = Math.sqrt(3.0 / 4.0);\nconst kSqrt01_05 = Math.sqrt(1.0 / 5.0);\nconst kSqrt03_05 = Math.sqrt(3.0 / 5.0);\nconst kSqrt06_05 = Math.sqrt(6.0 / 5.0);\nconst kSqrt08_05 = Math.sqrt(8.0 / 5.0);\nconst kSqrt09_05 = Math.sqrt(9.0 / 5.0);\nconst kSqrt01_06 = Math.sqrt(1.0 / 6.0);\nconst kSqrt05_06 = Math.sqrt(5.0 / 6.0);\nconst kSqrt03_08 = Math.sqrt(3.0 / 8.0);\nconst kSqrt05_08 = Math.sqrt(5.0 / 8.0);\nconst kSqrt09_08 = Math.sqrt(9.0 / 8.0);\nconst kSqrt05_09 = Math.sqrt(5.0 / 9.0);\nconst kSqrt08_09 = Math.sqrt(8.0 / 9.0);\nconst kSqrt01_10 = Math.sqrt(1.0 / 10.0);\nconst kSqrt03_10 = Math.sqrt(3.0 / 10.0);\nconst kSqrt01_12 = Math.sqrt(1.0 / 12.0);\nconst kSqrt04_15 = Math.sqrt(4.0 / 15.0);\nconst kSqrt01_16 = Math.sqrt(1.0 / 16.0);\nconst kSqrt15_16 = Math.sqrt(15.0 / 16.0);\nconst kSqrt01_18 = Math.sqrt(1.0 / 18.0);\nconst kSqrt01_60 = Math.sqrt(1.0 / 60.0);\n\nconst dp = (n: number, start: number, a: number[] | Float32Array, b: number[] | Float32Array) => {\n let sum = 0;\n for (let i = 0; i < n; i++) {\n sum += a[start + i] * b[i];\n }\n return sum;\n};\n\nconst coeffsIn = new Float32Array(15);\n\n// Rotate spherical harmonics up to band 3 based on https://github.com/andrewwillmott/sh-lib\n//\n// This implementation calculates the rotation factors during construction which can then\n// be used to rotate multiple spherical harmonics cheaply.\nclass RotateSH {\n apply: (result: Float32Array | number[], src?: Float32Array | number[]) => void;\n\n constructor(mat: Mat3) {\n const rot = mat.data;\n\n // band 1\n const sh1 = [\n [rot[4], -rot[7], rot[1]],\n [-rot[5], rot[8], -rot[2]],\n [rot[3], -rot[6], rot[0]]\n ];\n\n // band 2\n const sh2 = [[\n kSqrt01_04 * ((sh1[2][2] * sh1[0][0] + sh1[2][0] * sh1[0][2]) + (sh1[0][2] * sh1[2][0] + sh1[0][0] * sh1[2][2])),\n (sh1[2][1] * sh1[0][0] + sh1[0][1] * sh1[2][0]),\n kSqrt03_04 * (sh1[2][1] * sh1[0][1] + sh1[0][1] * sh1[2][1]),\n (sh1[2][1] * sh1[0][2] + sh1[0][1] * sh1[2][2]),\n kSqrt01_04 * ((sh1[2][2] * sh1[0][2] - sh1[2][0] * sh1[0][0]) + (sh1[0][2] * sh1[2][2] - sh1[0][0] * sh1[2][0]))\n ], [\n kSqrt01_04 * ((sh1[1][2] * sh1[0][0] + sh1[1][0] * sh1[0][2]) + (sh1[0][2] * sh1[1][0] + sh1[0][0] * sh1[1][2])),\n sh1[1][1] * sh1[0][0] + sh1[0][1] * sh1[1][0],\n kSqrt03_04 * (sh1[1][1] * sh1[0][1] + sh1[0][1] * sh1[1][1]),\n sh1[1][1] * sh1[0][2] + sh1[0][1] * sh1[1][2],\n kSqrt01_04 * ((sh1[1][2] * sh1[0][2] - sh1[1][0] * sh1[0][0]) + (sh1[0][2] * sh1[1][2] - sh1[0][0] * sh1[1][0]))\n ], [\n kSqrt01_03 * (sh1[1][2] * sh1[1][0] + sh1[1][0] * sh1[1][2]) - kSqrt01_12 * ((sh1[2][2] * sh1[2][0] + sh1[2][0] * sh1[2][2]) + (sh1[0][2] * sh1[0][0] + sh1[0][0] * sh1[0][2])),\n kSqrt04_03 * sh1[1][1] * sh1[1][0] - kSqrt01_03 * (sh1[2][1] * sh1[2][0] + sh1[0][1] * sh1[0][0]),\n sh1[1][1] * sh1[1][1] - kSqrt01_04 * (sh1[2][1] * sh1[2][1] + sh1[0][1] * sh1[0][1]),\n kSqrt04_03 * sh1[1][1] * sh1[1][2] - kSqrt01_03 * (sh1[2][1] * sh1[2][2] + sh1[0][1] * sh1[0][2]),\n kSqrt01_03 * (sh1[1][2] * sh1[1][2] - sh1[1][0] * sh1[1][0]) - kSqrt01_12 * ((sh1[2][2] * sh1[2][2] - sh1[2][0] * sh1[2][0]) + (sh1[0][2] * sh1[0][2] - sh1[0][0] * sh1[0][0]))\n ], [\n kSqrt01_04 * ((sh1[1][2] * sh1[2][0] + sh1[1][0] * sh1[2][2]) + (sh1[2][2] * sh1[1][0] + sh1[2][0] * sh1[1][2])),\n sh1[1][1] * sh1[2][0] + sh1[2][1] * sh1[1][0],\n kSqrt03_04 * (sh1[1][1] * sh1[2][1] + sh1[2][1] * sh1[1][1]),\n sh1[1][1] * sh1[2][2] + sh1[2][1] * sh1[1][2],\n kSqrt01_04 * ((sh1[1][2] * sh1[2][2] - sh1[1][0] * sh1[2][0]) + (sh1[2][2] * sh1[1][2] - sh1[2][0] * sh1[1][0]))\n ], [\n kSqrt01_04 * ((sh1[2][2] * sh1[2][0] + sh1[2][0] * sh1[2][2]) - (sh1[0][2] * sh1[0][0] + sh1[0][0] * sh1[0][2])),\n (sh1[2][1] * sh1[2][0] - sh1[0][1] * sh1[0][0]),\n kSqrt03_04 * (sh1[2][1] * sh1[2][1] - sh1[0][1] * sh1[0][1]),\n (sh1[2][1] * sh1[2][2] - sh1[0][1] * sh1[0][2]),\n kSqrt01_04 * ((sh1[2][2] * sh1[2][2] - sh1[2][0] * sh1[2][0]) - (sh1[0][2] * sh1[0][2] - sh1[0][0] * sh1[0][0]))\n ]];\n\n // band 3\n const sh3 = [[\n kSqrt01_04 * ((sh1[2][2] * sh2[0][0] + sh1[2][0] * sh2[0][4]) + (sh1[0][2] * sh2[4][0] + sh1[0][0] * sh2[4][4])),\n kSqrt03_02 * (sh1[2][1] * sh2[0][0] + sh1[0][1] * sh2[4][0]),\n kSqrt15_16 * (sh1[2][1] * sh2[0][1] + sh1[0][1] * sh2[4][1]),\n kSqrt05_06 * (sh1[2][1] * sh2[0][2] + sh1[0][1] * sh2[4][2]),\n kSqrt15_16 * (sh1[2][1] * sh2[0][3] + sh1[0][1] * sh2[4][3]),\n kSqrt03_02 * (sh1[2][1] * sh2[0][4] + sh1[0][1] * sh2[4][4]),\n kSqrt01_04 * ((sh1[2][2] * sh2[0][4] - sh1[2][0] * sh2[0][0]) + (sh1[0][2] * sh2[4][4] - sh1[0][0] * sh2[4][0]))\n ], [\n kSqrt01_06 * (sh1[1][2] * sh2[0][0] + sh1[1][0] * sh2[0][4]) + kSqrt01_06 * ((sh1[2][2] * sh2[1][0] + sh1[2][0] * sh2[1][4]) + (sh1[0][2] * sh2[3][0] + sh1[0][0] * sh2[3][4])),\n sh1[1][1] * sh2[0][0] + (sh1[2][1] * sh2[1][0] + sh1[0][1] * sh2[3][0]),\n kSqrt05_08 * sh1[1][1] * sh2[0][1] + kSqrt05_08 * (sh1[2][1] * sh2[1][1] + sh1[0][1] * sh2[3][1]),\n kSqrt05_09 * sh1[1][1] * sh2[0][2] + kSqrt05_09 * (sh1[2][1] * sh2[1][2] + sh1[0][1] * sh2[3][2]),\n kSqrt05_08 * sh1[1][1] * sh2[0][3] + kSqrt05_08 * (sh1[2][1] * sh2[1][3] + sh1[0][1] * sh2[3][3]),\n sh1[1][1] * sh2[0][4] + (sh1[2][1] * sh2[1][4] + sh1[0][1] * sh2[3][4]),\n kSqrt01_06 * (sh1[1][2] * sh2[0][4] - sh1[1][0] * sh2[0][0]) + kSqrt01_06 * ((sh1[2][2] * sh2[1][4] - sh1[2][0] * sh2[1][0]) + (sh1[0][2] * sh2[3][4] - sh1[0][0] * sh2[3][0]))\n ], [\n kSqrt04_15 * (sh1[1][2] * sh2[1][0] + sh1[1][0] * sh2[1][4]) + kSqrt01_05 * (sh1[0][2] * sh2[2][0] + sh1[0][0] * sh2[2][4]) - kSqrt01_60 * ((sh1[2][2] * sh2[0][0] + sh1[2][0] * sh2[0][4]) - (sh1[0][2] * sh2[4][0] + sh1[0][0] * sh2[4][4])),\n kSqrt08_05 * sh1[1][1] * sh2[1][0] + kSqrt06_05 * sh1[0][1] * sh2[2][0] - kSqrt01_10 * (sh1[2][1] * sh2[0][0] - sh1[0][1] * sh2[4][0]),\n sh1[1][1] * sh2[1][1] + kSqrt03_04 * sh1[0][1] * sh2[2][1] - kSqrt01_16 * (sh1[2][1] * sh2[0][1] - sh1[0][1] * sh2[4][1]),\n kSqrt08_09 * sh1[1][1] * sh2[1][2] + kSqrt02_03 * sh1[0][1] * sh2[2][2] - kSqrt01_18 * (sh1[2][1] * sh2[0][2] - sh1[0][1] * sh2[4][2]),\n sh1[1][1] * sh2[1][3] + kSqrt03_04 * sh1[0][1] * sh2[2][3] - kSqrt01_16 * (sh1[2][1] * sh2[0][3] - sh1[0][1] * sh2[4][3]),\n kSqrt08_05 * sh1[1][1] * sh2[1][4] + kSqrt06_05 * sh1[0][1] * sh2[2][4] - kSqrt01_10 * (sh1[2][1] * sh2[0][4] - sh1[0][1] * sh2[4][4]),\n kSqrt04_15 * (sh1[1][2] * sh2[1][4] - sh1[1][0] * sh2[1][0]) + kSqrt01_05 * (sh1[0][2] * sh2[2][4] - sh1[0][0] * sh2[2][0]) - kSqrt01_60 * ((sh1[2][2] * sh2[0][4] - sh1[2][0] * sh2[0][0]) - (sh1[0][2] * sh2[4][4] - sh1[0][0] * sh2[4][0]))\n ], [\n kSqrt03_10 * (sh1[1][2] * sh2[2][0] + sh1[1][0] * sh2[2][4]) - kSqrt01_10 * ((sh1[2][2] * sh2[3][0] + sh1[2][0] * sh2[3][4]) + (sh1[0][2] * sh2[1][0] + sh1[0][0] * sh2[1][4])),\n kSqrt09_05 * sh1[1][1] * sh2[2][0] - kSqrt03_05 * (sh1[2][1] * sh2[3][0] + sh1[0][1] * sh2[1][0]),\n kSqrt09_08 * sh1[1][1] * sh2[2][1] - kSqrt03_08 * (sh1[2][1] * sh2[3][1] + sh1[0][1] * sh2[1][1]),\n sh1[1][1] * sh2[2][2] - kSqrt01_03 * (sh1[2][1] * sh2[3][2] + sh1[0][1] * sh2[1][2]),\n kSqrt09_08 * sh1[1][1] * sh2[2][3] - kSqrt03_08 * (sh1[2][1] * sh2[3][3] + sh1[0][1] * sh2[1][3]),\n kSqrt09_05 * sh1[1][1] * sh2[2][4] - kSqrt03_05 * (sh1[2][1] * sh2[3][4] + sh1[0][1] * sh2[1][4]),\n kSqrt03_10 * (sh1[1][2] * sh2[2][4] - sh1[1][0] * sh2[2][0]) - kSqrt01_10 * ((sh1[2][2] * sh2[3][4] - sh1[2][0] * sh2[3][0]) + (sh1[0][2] * sh2[1][4] - sh1[0][0] * sh2[1][0]))\n ], [\n kSqrt04_15 * (sh1[1][2] * sh2[3][0] + sh1[1][0] * sh2[3][4]) + kSqrt01_05 * (sh1[2][2] * sh2[2][0] + sh1[2][0] * sh2[2][4]) - kSqrt01_60 * ((sh1[2][2] * sh2[4][0] + sh1[2][0] * sh2[4][4]) + (sh1[0][2] * sh2[0][0] + sh1[0][0] * sh2[0][4])),\n kSqrt08_05 * sh1[1][1] * sh2[3][0] + kSqrt06_05 * sh1[2][1] * sh2[2][0] - kSqrt01_10 * (sh1[2][1] * sh2[4][0] + sh1[0][1] * sh2[0][0]),\n sh1[1][1] * sh2[3][1] + kSqrt03_04 * sh1[2][1] * sh2[2][1] - kSqrt01_16 * (sh1[2][1] * sh2[4][1] + sh1[0][1] * sh2[0][1]),\n kSqrt08_09 * sh1[1][1] * sh2[3][2] + kSqrt02_03 * sh1[2][1] * sh2[2][2] - kSqrt01_18 * (sh1[2][1] * sh2[4][2] + sh1[0][1] * sh2[0][2]),\n sh1[1][1] * sh2[3][3] + kSqrt03_04 * sh1[2][1] * sh2[2][3] - kSqrt01_16 * (sh1[2][1] * sh2[4][3] + sh1[0][1] * sh2[0][3]),\n kSqrt08_05 * sh1[1][1] * sh2[3][4] + kSqrt06_05 * sh1[2][1] * sh2[2][4] - kSqrt01_10 * (sh1[2][1] * sh2[4][4] + sh1[0][1] * sh2[0][4]),\n kSqrt04_15 * (sh1[1][2] * sh2[3][4] - sh1[1][0] * sh2[3][0]) + kSqrt01_05 * (sh1[2][2] * sh2[2][4] - sh1[2][0] * sh2[2][0]) - kSqrt01_60 * ((sh1[2][2] * sh2[4][4] - sh1[2][0] * sh2[4][0]) + (sh1[0][2] * sh2[0][4] - sh1[0][0] * sh2[0][0]))\n ], [\n kSqrt01_06 * (sh1[1][2] * sh2[4][0] + sh1[1][0] * sh2[4][4]) + kSqrt01_06 * ((sh1[2][2] * sh2[3][0] + sh1[2][0] * sh2[3][4]) - (sh1[0][2] * sh2[1][0] + sh1[0][0] * sh2[1][4])),\n sh1[1][1] * sh2[4][0] + (sh1[2][1] * sh2[3][0] - sh1[0][1] * sh2[1][0]),\n kSqrt05_08 * sh1[1][1] * sh2[4][1] + kSqrt05_08 * (sh1[2][1] * sh2[3][1] - sh1[0][1] * sh2[1][1]),\n kSqrt05_09 * sh1[1][1] * sh2[4][2] + kSqrt05_09 * (sh1[2][1] * sh2[3][2] - sh1[0][1] * sh2[1][2]),\n kSqrt05_08 * sh1[1][1] * sh2[4][3] + kSqrt05_08 * (sh1[2][1] * sh2[3][3] - sh1[0][1] * sh2[1][3]),\n sh1[1][1] * sh2[4][4] + (sh1[2][1] * sh2[3][4] - sh1[0][1] * sh2[1][4]),\n kSqrt01_06 * (sh1[1][2] * sh2[4][4] - sh1[1][0] * sh2[4][0]) + kSqrt01_06 * ((sh1[2][2] * sh2[3][4] - sh1[2][0] * sh2[3][0]) - (sh1[0][2] * sh2[1][4] - sh1[0][0] * sh2[1][0]))\n ], [\n kSqrt01_04 * ((sh1[2][2] * sh2[4][0] + sh1[2][0] * sh2[4][4]) - (sh1[0][2] * sh2[0][0] + sh1[0][0] * sh2[0][4])),\n kSqrt03_02 * (sh1[2][1] * sh2[4][0] - sh1[0][1] * sh2[0][0]),\n kSqrt15_16 * (sh1[2][1] * sh2[4][1] - sh1[0][1] * sh2[0][1]),\n kSqrt05_06 * (sh1[2][1] * sh2[4][2] - sh1[0][1] * sh2[0][2]),\n kSqrt15_16 * (sh1[2][1] * sh2[4][3] - sh1[0][1] * sh2[0][3]),\n kSqrt03_02 * (sh1[2][1] * sh2[4][4] - sh1[0][1] * sh2[0][4]),\n kSqrt01_04 * ((sh1[2][2] * sh2[4][4] - sh1[2][0] * sh2[4][0]) - (sh1[0][2] * sh2[0][4] - sh1[0][0] * sh2[0][0]))\n ]];\n\n // rotate spherical harmonic coefficients, up to band 3\n this.apply = (result: Float32Array | number[], src?: Float32Array | number[]) => {\n if (!src || src === result) {\n coeffsIn.set(result);\n src = coeffsIn;\n }\n\n // band 1\n if (result.length < 3) {\n return;\n }\n result[0] = dp(3, 0, src, sh1[0]);\n result[1] = dp(3, 0, src, sh1[1]);\n result[2] = dp(3, 0, src, sh1[2]);\n\n // band 2\n if (result.length < 8) {\n return;\n }\n result[3] = dp(5, 3, src, sh2[0]);\n result[4] = dp(5, 3, src, sh2[1]);\n result[5] = dp(5, 3, src, sh2[2]);\n result[6] = dp(5, 3, src, sh2[3]);\n result[7] = dp(5, 3, src, sh2[4]);\n\n // band 3\n if (result.length < 15) {\n return;\n }\n result[8] = dp(7, 8, src, sh3[0]);\n result[9] = dp(7, 8, src, sh3[1]);\n result[10] = dp(7, 8, src, sh3[2]);\n result[11] = dp(7, 8, src, sh3[3]);\n result[12] = dp(7, 8, src, sh3[4]);\n result[13] = dp(7, 8, src, sh3[5]);\n result[14] = dp(7, 8, src, sh3[6]);\n };\n }\n}\n\nexport { RotateSH };\n","import { Mat3, Mat4, Quat, Vec3 } from 'playcanvas';\n\nimport { DataTable } from './data-table';\nimport { RotateSH } from './utils/rotate-sh';\n\nconst shNames = new Array(45).fill('').map((_, i) => `f_rest_${i}`);\n\nconst v = new Vec3();\nconst q = new Quat();\n\n// apply translation, rotation and scale to a data table\nconst transform = (dataTable: DataTable, t: Vec3, r: Quat, s: number) => {\n const mat = new Mat4().setTRS(t, r, new Vec3(s, s, s));\n const mat3 = new Mat3().setFromQuat(r);\n const rotateSH = new RotateSH(mat3);\n\n const hasTranslation = ['x', 'y', 'z'].every(c => dataTable.hasColumn(c));\n const hasRotation = ['rot_0', 'rot_1', 'rot_2', 'rot_3'].every(c => dataTable.hasColumn(c));\n const hasScale = ['scale_0', 'scale_1', 'scale_2'].every(c => dataTable.hasColumn(c));\n const shBands = { '9': 1, '24': 2, '-1': 3 }[shNames.findIndex(v => !dataTable.hasColumn(v))] ?? 0;\n const shCoeffs = new Float32Array([0, 3, 8, 15][shBands]);\n\n const row: any = {};\n for (let i = 0; i < dataTable.numRows; ++i) {\n dataTable.getRow(i, row);\n\n if (hasTranslation) {\n v.set(row.x, row.y, row.z);\n mat.transformPoint(v, v);\n row.x = v.x;\n row.y = v.y;\n row.z = v.z;\n }\n\n if (hasRotation) {\n q.set(row.rot_1, row.rot_2, row.rot_3, row.rot_0).mul2(r, q);\n row.rot_0 = q.w;\n row.rot_1 = q.x;\n row.rot_2 = q.y;\n row.rot_3 = q.z;\n }\n\n if (hasScale) {\n row.scale_0 = Math.log(Math.exp(row.scale_0) * s);\n row.scale_1 = Math.log(Math.exp(row.scale_1) * s);\n row.scale_2 = Math.log(Math.exp(row.scale_2) * s);\n }\n\n if (shBands > 0) {\n for (let j = 0; j < 3; ++j) {\n for (let k = 0; k < shCoeffs.length; ++k) {\n shCoeffs[k] = row[shNames[k + j * shCoeffs.length]];\n }\n\n rotateSH.apply(shCoeffs);\n\n for (let k = 0; k < shCoeffs.length; ++k) {\n row[shNames[k + j * shCoeffs.length]] = shCoeffs[k];\n }\n }\n }\n\n dataTable.setRow(i, row);\n }\n};\n\n\nexport { transform };\n","import { Quat, Vec3 } from 'playcanvas';\n\nimport { Column, DataTable } from './data-table';\nimport { transform } from './transform';\n\ntype Translate = {\n kind: 'translate';\n value: Vec3;\n};\n\ntype Rotate = {\n kind: 'rotate';\n value: Vec3; // euler angles in degrees\n};\n\ntype Scale = {\n kind: 'scale';\n value: number;\n};\n\ntype FilterNaN = {\n kind: 'filterNaN';\n};\n\ntype FilterByValue = {\n kind: 'filterByValue';\n columnName: string;\n comparator: 'lt' | 'lte' | 'gt' | 'gte' | 'eq' | 'neq';\n value: number;\n};\n\ntype FilterBands = {\n kind: 'filterBands';\n value: 0 | 1 | 2 | 3;\n};\n\ntype ProcessAction = Translate | Rotate | Scale | FilterNaN | FilterByValue | FilterBands;\n\nconst shNames = new Array(45).fill('').map((_, i) => `f_rest_${i}`);\n\n// process a data table with standard options\nconst process = (dataTable: DataTable, processActions: ProcessAction[]) => {\n let result = dataTable;\n\n for (let i = 0; i < processActions.length; i++) {\n const processAction = processActions[i];\n\n switch (processAction.kind) {\n case 'translate':\n transform(result, processAction.value, Quat.IDENTITY, 1);\n break;\n case 'rotate':\n transform(result, Vec3.ZERO, new Quat().setFromEulerAngles(\n processAction.value.x,\n processAction.value.y,\n processAction.value.z\n ), 1);\n break;\n case 'scale':\n transform(result, Vec3.ZERO, Quat.IDENTITY, processAction.value);\n break;\n case 'filterNaN': {\n const predicate = (rowIndex: number, row: any) => {\n for (const key in row) {\n if (!isFinite(row[key])) {\n return false;\n }\n }\n return true;\n };\n result = result.filter(predicate);\n break;\n }\n case 'filterByValue': {\n const { columnName, comparator, value } = processAction;\n const Predicates = {\n 'lt': (rowIndex: number, row: any) => row[columnName] < value,\n 'lte': (rowIndex: number, row: any) => row[columnName] <= value,\n 'gt': (rowIndex: number, row: any) => row[columnName] > value,\n 'gte': (rowIndex: number, row: any) => row[columnName] >= value,\n 'eq': (rowIndex: number, row: any) => row[columnName] === value,\n 'neq': (rowIndex: number, row: any) => row[columnName] !== value\n };\n const predicate = Predicates[comparator] ?? ((rowIndex: number, row: any) => true);\n result = result.filter(predicate);\n break;\n }\n case 'filterBands': {\n const inputBands = { '9': 1, '24': 2, '-1': 3 }[shNames.findIndex(v => !dataTable.hasColumn(v))] ?? 0;\n const outputBands = processAction.value;\n\n if (outputBands < inputBands) {\n const inputCoeffs = [0, 3, 8, 15][inputBands];\n const outputCoeffs = [0, 3, 8, 15][outputBands];\n\n const map: any = {};\n for (let i = 0; i < inputCoeffs; ++i) {\n for (let j = 0; j < 3; ++j) {\n const inputName = `f_rest_${i + j * inputCoeffs}`;\n map[inputName] = i < outputCoeffs ? `f_rest_${i + j * outputCoeffs}` : null;\n }\n }\n\n result = new DataTable(result.columns.map((column) => {\n if (map.hasOwnProperty(column.name)) {\n const name = map[column.name];\n return name ? new Column(name, column.data) : null;\n }\n return column;\n\n }).filter(c => c !== null));\n }\n break;\n }\n }\n }\n\n return result;\n};\n\nexport { ProcessAction, process };\n","import { Buffer } from 'node:buffer';\nimport { FileHandle } from 'node:fs/promises';\n\nimport { Column, DataTable } from '../data-table';\n\ntype PlyProperty = {\n name: string; // 'x', f_dc_0', etc\n type: string; // 'float', 'char', etc\n};\n\ntype PlyElement = {\n name: string; // 'vertex', etc\n count: number;\n properties: PlyProperty[];\n};\n\ntype PlyHeader = {\n comments: string[];\n elements: PlyElement[];\n};\n\ntype PlyData = {\n comments: string[];\n elements: {\n name: string,\n dataTable: DataTable\n }[];\n};\n\nconst getDataType = (type: string) => {\n switch (type) {\n case 'char': return Int8Array;\n case 'uchar': return Uint8Array;\n case 'short': return Int16Array;\n case 'ushort': return Uint16Array;\n case 'int': return Int32Array;\n case 'uint': return Uint32Array;\n case 'float': return Float32Array;\n case 'double': return Float64Array;\n default: return null;\n }\n};\n\n// parse the ply header text and return an array of Element structures and a\n// string containing the ply format\nconst parseHeader = (data: Buffer): PlyHeader => {\n // decode header and split into lines\n const strings = new TextDecoder('ascii')\n .decode(data)\n .split('\\n')\n .filter(line => line);\n\n const elements: PlyElement[] = [];\n const comments: string[] = [];\n let element;\n for (let i = 1; i < strings.length; ++i) {\n const words = strings[i].split(' ');\n\n switch (words[0]) {\n case 'ply':\n case 'format':\n case 'end_header':\n // skip\n break;\n case 'comment':\n comments.push(strings[i].substring(8)); // skip 'comment '\n break;\n case 'element': {\n if (words.length !== 3) {\n throw new Error('invalid ply header');\n }\n element = {\n name: words[1],\n count: parseInt(words[2], 10),\n properties: []\n };\n elements.push(element);\n break;\n }\n case 'property': {\n if (!element || words.length !== 3 || !getDataType(words[1])) {\n throw new Error('invalid ply header');\n }\n element.properties.push({\n name: words[2],\n type: words[1]\n });\n break;\n }\n default: {\n throw new Error(`unrecognized header value '${words[0]}' in ply header`);\n }\n }\n }\n\n return { comments, elements };\n};\n\nconst cmp = (a: Uint8Array, b: Uint8Array, aOffset = 0) => {\n for (let i = 0; i < b.length; ++i) {\n if (a[aOffset + i] !== b[i]) {\n return false;\n }\n }\n return true;\n};\n\nconst magicBytes = new Uint8Array([112, 108, 121, 10]); // ply\\n\nconst endHeaderBytes = new Uint8Array([10, 101, 110, 100, 95, 104, 101, 97, 100, 101, 114, 10]); // \\nend_header\\n\n\nconst readPly = async (fileHandle: FileHandle): Promise<PlyData> => {\n\n // we don't support ply text header larger than 128k\n const headerBuf = Buffer.alloc(128 * 1024);\n\n // smallest possible header size\n let headerSize = magicBytes.length + endHeaderBytes.length;\n\n if ((await fileHandle.read(headerBuf, 0, headerSize)).bytesRead !== headerSize) {\n throw new Error('failed to read file header');\n }\n\n if (!cmp(headerBuf, magicBytes)) {\n throw new Error('invalid file header');\n }\n\n // read the rest of the header till we find end header byte pattern\n while (true) {\n // read the next character\n if ((await fileHandle.read(headerBuf, headerSize++, 1)).bytesRead !== 1) {\n throw new Error('failed to read file header');\n }\n\n // check if we've reached the end of the header\n if (cmp(headerBuf, endHeaderBytes, headerSize - endHeaderBytes.length)) {\n break;\n }\n }\n\n // parse the header\n const header = parseHeader(headerBuf.subarray(0, headerSize));\n\n // create a data table for each ply element\n const elements = [];\n for (let i = 0; i < header.elements.length; ++i) {\n const element = header.elements[i];\n\n const columns = element.properties.map((property) => {\n return new Column(property.name, new (getDataType(property.type))(element.count));\n });\n\n const buffers = columns.map(column => new Uint8Array(column.data.buffer));\n const sizes = columns.map(column => column.data.BYTES_PER_ELEMENT);\n const rowSize = sizes.reduce((total, size) => total + size, 0);\n\n // read data in chunks of 1024 rows at a time\n const chunkSize = 1024;\n const numChunks = Math.ceil(element.count / chunkSize);\n const chunkData = Buffer.alloc(chunkSize * rowSize);\n\n for (let c = 0; c < numChunks; ++c) {\n const numRows = Math.min(chunkSize, element.count - c * chunkSize);\n\n await fileHandle.read(chunkData, 0, rowSize * numRows);\n\n let offset = 0;\n\n // read data row at a time\n for (let r = 0; r < numRows; ++r) {\n const rowOffset = c * chunkSize + r;\n\n // copy into column data\n for (let p = 0; p < columns.length; ++p) {\n const s = sizes[p];\n chunkData.copy(buffers[p], rowOffset * s, offset, offset + s);\n offset += s;\n }\n }\n }\n\n elements.push({\n name: element.name,\n dataTable: new DataTable(columns)\n });\n }\n\n return {\n comments: header.comments,\n elements\n };\n};\n\nexport { PlyData, readPly };\n","const sigmoid = (v: number) => 1 / (1 + Math.exp(-v));\n\nexport { sigmoid };\n","import { Quat } from 'playcanvas';\n\nimport { sigmoid } from './utils/math';\n\nconst q = new Quat();\n\n// process and compress a chunk of 256 splats\nclass CompressedChunk {\n static members = [\n 'x', 'y', 'z',\n 'scale_0', 'scale_1', 'scale_2',\n 'f_dc_0', 'f_dc_1', 'f_dc_2', 'opacity',\n 'rot_0', 'rot_1', 'rot_2', 'rot_3'\n ];\n\n size: number;\n data: any = {};\n\n // compressed data\n chunkData: Float32Array;\n position: Uint32Array;\n rotation: Uint32Array;\n scale: Uint32Array;\n color: Uint32Array;\n\n constructor(size = 256) {\n this.size = size;\n CompressedChunk.members.forEach((m) => {\n this.data[m] = new Float32Array(size);\n });\n this.chunkData = new Float32Array(18);\n this.position = new Uint32Array(size);\n this.rotation = new Uint32Array(size);\n this.scale = new Uint32Array(size);\n this.color = new Uint32Array(size);\n }\n\n set(index: number, data: any) {\n CompressedChunk.members.forEach((m) => {\n this.data[m][index] = data[m];\n });\n }\n\n pack() {\n const calcMinMax = (data: Float32Array) => {\n let min;\n let max;\n min = max = data[0];\n for (let i = 1; i < data.length; ++i) {\n const v = data[i];\n min = Math.min(min, v);\n max = Math.max(max, v);\n }\n return { min, max };\n };\n\n const normalize = (x: number, min: number, max: number) => {\n if (x <= min) return 0;\n if (x >= max) return 1;\n return (max - min < 0.00001) ? 0 : (x - min) / (max - min);\n };\n\n const data = this.data;\n\n const x = data.x;\n const y = data.y;\n const z = data.z;\n const scale_0 = data.scale_0;\n const scale_1 = data.scale_1;\n const scale_2 = data.scale_2;\n const rot_0 = data.rot_0;\n const rot_1 = data.rot_1;\n const rot_2 = data.rot_2;\n const rot_3 = data.rot_3;\n const f_dc_0 = data.f_dc_0;\n const f_dc_1 = data.f_dc_1;\n const f_dc_2 = data.f_dc_2;\n const opacity = data.opacity;\n\n const px = calcMinMax(x);\n const py = calcMinMax(y);\n const pz = calcMinMax(z);\n\n const sx = calcMinMax(scale_0);\n const sy = calcMinMax(scale_1);\n const sz = calcMinMax(scale_2);\n\n // clamp scale because sometimes values are at infinity\n const clamp = (v: number, min: number, max: number) => Math.max(min, Math.min(max, v));\n sx.min = clamp(sx.min, -20, 20);\n sx.max = clamp(sx.max, -20, 20);\n sy.min = clamp(sy.min, -20, 20);\n sy.max = clamp(sy.max, -20, 20);\n sz.min = clamp(sz.min, -20, 20);\n sz.max = clamp(sz.max, -20, 20);\n\n // convert f_dc_ to colors before calculating min/max and packaging\n const SH_C0 = 0.28209479177387814;\n for (let i = 0; i < f_dc_0.length; ++i) {\n f_dc_0[i] = f_dc_0[i] * SH_C0 + 0.5;\n f_dc_1[i] = f_dc_1[i] * SH_C0 + 0.5;\n f_dc_2[i] = f_dc_2[i] * SH_C0 + 0.5;\n }\n\n const cr = calcMinMax(f_dc_0);\n const cg = calcMinMax(f_dc_1);\n const cb = calcMinMax(f_dc_2);\n\n const packUnorm = (value: number, bits: number) => {\n const t = (1 << bits) - 1;\n return Math.max(0, Math.min(t, Math.floor(value * t + 0.5)));\n };\n\n const pack111011 = (x: number, y: number, z: number) => {\n return packUnorm(x, 11) << 21 |\n packUnorm(y, 10) << 11 |\n packUnorm(z, 11);\n };\n\n const pack8888 = (x: number, y: number, z: number, w: number) => {\n return packUnorm(x, 8) << 24 |\n packUnorm(y, 8) << 16 |\n packUnorm(z, 8) << 8 |\n packUnorm(w, 8);\n };\n\n // pack quaternion into 2,10,10,10\n const packRot = (x: number, y: number, z: number, w: number) => {\n q.set(x, y, z, w).normalize();\n const a = [q.x, q.y, q.z, q.w];\n const largest = a.reduce((curr, v, i) => (Math.abs(v) > Math.abs(a[curr]) ? i : curr), 0);\n\n if (a[largest] < 0) {\n a[0] = -a[0];\n a[1] = -a[1];\n a[2] = -a[2];\n a[3] = -a[3];\n }\n\n const norm = Math.sqrt(2) * 0.5;\n let result = largest;\n for (let i = 0; i < 4; ++i) {\n if (i !== largest) {\n result = (result << 10) | packUnorm(a[i] * norm + 0.5, 10);\n }\n }\n\n return result;\n };\n\n // pack\n for (let i = 0; i < this.size; ++i) {\n this.position[i] = pack111011(\n normalize(x[i], px.min, px.max),\n normalize(y[i], py.min, py.max),\n normalize(z[i], pz.min, pz.max)\n );\n\n this.rotation[i] = packRot(rot_0[i], rot_1[i], rot_2[i], rot_3[i]);\n\n this.scale[i] = pack111011(\n normalize(scale_0[i], sx.min, sx.max),\n normalize(scale_1[i], sy.min, sy.max),\n normalize(scale_2[i], sz.min, sz.max)\n );\n\n this.color[i] = pack8888(\n normalize(f_dc_0[i], cr.min, cr.max),\n normalize(f_dc_1[i], cg.min, cg.max),\n normalize(f_dc_2[i], cb.min, cb.max),\n sigmoid(opacity[i])\n );\n }\n\n this.chunkData.set([\n px.min, py.min, pz.min, px.max, py.max, pz.max,\n sx.min, sy.min, sz.min, sx.max, sy.max, sz.max,\n cr.min, cg.min, cb.min, cr.max, cg.max, cb.max\n ], 0);\n }\n}\n\nexport { CompressedChunk };\n","import { DataTable } from './data-table.js';\n\n// sort the compressed indices into morton order\nconst generateOrdering = (dataTable: DataTable) => {\n\n const cx = dataTable.getColumnByName('x').data;\n const cy = dataTable.getColumnByName('y').data;\n const cz = dataTable.getColumnByName('z').data;\n\n const generate = (indices: Uint32Array) => {\n // https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/\n const encodeMorton3 = (x: number, y: number, z: number) : number => {\n const Part1By2 = (x: number) => {\n x &= 0x000003ff;\n x = (x ^ (x << 16)) & 0xff0000ff;\n x = (x ^ (x << 8)) & 0x0300f00f;\n x = (x ^ (x << 4)) & 0x030c30c3;\n x = (x ^ (x << 2)) & 0x09249249;\n return x;\n };\n\n return (Part1By2(z) << 2) + (Part1By2(y) << 1) + Part1By2(x);\n };\n\n let mx: number;\n let my: number;\n let mz: number;\n let Mx: number;\n let My: number;\n let Mz: number;\n\n // calculate scene extents across all splats (using sort centers, because they're in world space)\n for (let i = 0; i < indices.length; ++i) {\n const ri = indices[i];\n const x = cx[ri];\n const y = cy[ri];\n const z = cz[ri];\n\n if (mx === undefined) {\n mx = Mx = x;\n my = My = y;\n mz = Mz = z;\n } else {\n if (x < mx) mx = x; else if (x > Mx) Mx = x;\n if (y < my) my = y; else if (y > My) My = y;\n if (z < mz) mz = z; else if (z > Mz) Mz = z;\n }\n }\n\n const xlen = Mx - mx;\n const ylen = My - my;\n const zlen = Mz - mz;\n\n if (!isFinite(xlen) || !isFinite(ylen) || !isFinite(zlen)) {\n console.log('invalid extents', xlen, ylen, zlen);\n return;\n }\n\n const xmul = 1024 / xlen;\n const ymul = 1024 / ylen;\n const zmul = 1024 / zlen;\n\n const morton = new Uint32Array(indices.length);\n for (let i = 0; i < indices.length; ++i) {\n const ri = indices[i];\n const x = cx[ri];\n const y = cy[ri];\n const z = cz[ri];\n\n const ix = Math.min(1023, (x - mx) * xmul) >>> 0;\n const iy = Math.min(1023, (y - my) * ymul) >>> 0;\n const iz = Math.min(1023, (z - mz) * zmul) >>> 0;\n\n morton[i] = encodeMorton3(ix, iy, iz);\n }\n\n // sort indices by morton code\n const order = indices.map((_, i) => i);\n order.sort((a, b) => morton[a] - morton[b]);\n\n const tmpIndices = indices.slice();\n for (let i = 0; i < indices.length; ++i) {\n indices[i] = tmpIndices[order[i]];\n }\n\n // sort the largest buckets recursively\n let start = 0;\n let end = 1;\n while (start < indices.length) {\n while (end < indices.length && morton[order[end]] === morton[order[start]]) {\n ++end;\n }\n\n if (end - start > 256) {\n // console.log('sorting', end - start);\n generate(indices.subarray(start, end));\n }\n\n start = end;\n }\n };\n\n const indices = new Uint32Array(dataTable.numRows);\n for (let i = 0; i < indices.length; ++i) {\n indices[i] = i;\n }\n\n generate(indices);\n\n return indices;\n};\n\nexport { generateOrdering };\n","import { FileHandle } from 'node:fs/promises';\n\nimport { CompressedChunk } from '../compressed-chunk';\nimport { DataTable } from '../data-table';\nimport { generateOrdering } from '../ordering';\nimport { version } from '../../package.json';\n\nconst generatedByString = `Generated by splat-transform ${version}`;\n\nconst chunkProps = [\n 'min_x', 'min_y', 'min_z',\n 'max_x', 'max_y', 'max_z',\n 'min_scale_x', 'min_scale_y', 'min_scale_z',\n 'max_scale_x', 'max_scale_y', 'max_scale_z',\n 'min_r', 'min_g', 'min_b',\n 'max_r', 'max_g', 'max_b'\n];\n\nconst vertexProps = [\n 'packed_position',\n 'packed_rotation',\n 'packed_scale',\n 'packed_color'\n];\n\nconst shNames = new Array(45).fill('').map((_, i) => `f_rest_${i}`);\n\nconst writeCompressedPly = async (fileHandle: FileHandle, dataTable: DataTable) => {\n const shBands = { '9': 1, '24': 2, '-1': 3 }[shNames.findIndex(v => !dataTable.hasColumn(v))] ?? 0;\n const outputSHCoeffs = [0, 3, 8, 15][shBands];\n\n const numSplats = dataTable.numRows;\n const numChunks = Math.ceil(numSplats / 256);\n\n const shHeader = shBands ? [\n `element sh ${numSplats}`,\n new Array(outputSHCoeffs * 3).fill('').map((_, i) => `property uchar f_rest_${i}`)\n ].flat() : [];\n\n const headerText = [\n 'ply',\n 'format binary_little_endian 1.0',\n `comment ${generatedByString}`,\n `element chunk ${numChunks}`,\n chunkProps.map(p => `property float ${p}`),\n `element vertex ${numSplats}`,\n vertexProps.map(p => `property uint ${p}`),\n shHeader,\n 'end_header\\n'\n ].flat().join('\\n');\n\n const header = (new TextEncoder()).encode(headerText);\n const chunkData = new Float32Array(numChunks * chunkProps.length);\n const splatIData = new Uint32Array(numSplats * vertexProps.length);\n const shData = new Uint8Array(numSplats * outputSHCoeffs * 3);\n\n // sort splats into some kind of order (morton order rn)\n const sortIndices = generateOrdering(dataTable);\n\n const row: any = {};\n\n const chunk = new CompressedChunk();\n\n for (let i = 0; i < numChunks; ++i) {\n const num = Math.min(numSplats, (i + 1) * 256) - i * 256;\n for (let j = 0; j < num; ++j) {\n const index = sortIndices[i * 256 + j];\n\n // read splat data\n dataTable.getRow(index, row);\n\n // update chunk\n chunk.set(j, row);\n\n // quantize and write sh data\n let off = (i * 256 + j) * outputSHCoeffs * 3;\n for (let k = 0; k < outputSHCoeffs * 3; ++k) {\n const nvalue = row[shNames[k]] / 8 + 0.5;\n shData[off++] = Math.max(0, Math.min(255, Math.trunc(nvalue * 256)));\n }\n }\n\n // repeat the last gaussian to fill the rest of the final chunk\n for (let j = num; j < 256; ++j) {\n chunk.set(j, row);\n }\n\n // pack the chunk\n chunk.pack();\n\n // store the float data\n chunkData.set(chunk.chunkData, i * 18);\n\n // write packed bits\n const offset = i * 256 * 4;\n for (let j = 0; j < num; ++j) {\n splatIData[offset + j * 4 + 0] = chunk.position[j];\n splatIData[offset + j * 4 + 1] = chunk.rotation[j];\n splatIData[offset + j * 4 + 2] = chunk.scale[j];\n splatIData[offset + j * 4 + 3] = chunk.color[j];\n }\n }\n\n await fileHandle.write(header);\n await fileHandle.write(new Uint8Array(chunkData.buffer));\n await fileHandle.write(new Uint8Array(splatIData.buffer));\n await fileHandle.write(shData);\n};\n\nexport { writeCompressedPly };\n","import { FileHandle } from 'node:fs/promises';\n\nimport { PlyData } from '../readers/read-ply';\n\nconst columnTypeToPlyType = (type: string): string => {\n switch (type) {\n case 'float32': return 'float';\n case 'float64': return 'double';\n case 'int8': return 'char';\n case 'uint8': return 'uchar';\n case 'int16': return 'short';\n case 'uint16': return 'ushort';\n case 'int32': return 'int';\n case 'uint32': return 'uint';\n }\n};\n\nconst writePly = async (fileHandle: FileHandle, plyData: PlyData) => {\n const header = [\n 'ply',\n 'format binary_little_endian 1.0',\n plyData.comments.map(c => `comment ${c}`),\n plyData.elements.map((element) => {\n return [\n `element ${element.name} ${element.dataTable.numRows}`,\n element.dataTable.columns.map((column) => {\n return `property ${columnTypeToPlyType(column.dataType)} ${column.name}`;\n })\n ];\n }),\n 'end_header'\n ];\n\n // write the header\n await fileHandle.write((new TextEncoder()).encode(`${header.flat(3).join('\\n')}\\n`));\n\n for (let i = 0; i < plyData.elements.length; ++i) {\n const table = plyData.elements[i].dataTable;\n const columns = table.columns;\n const buffers = columns.map(c => Buffer.from(c.data.buffer));\n const sizes = columns.map(c => c.data.BYTES_PER_ELEMENT);\n const rowSize = sizes.reduce((total, size) => total + size, 0);\n\n // write to file in chunks of 1024 rows\n const chunkSize = 1024;\n const numChunks = Math.ceil(table.numRows / chunkSize);\n const chunkData = Buffer.alloc(chunkSize * rowSize);\n\n for (let c = 0; c < numChunks; ++c) {\n const numRows = Math.min(chunkSize, table.numRows - c * chunkSize);\n\n let offset = 0;\n\n for (let r = 0; r < numRows; ++r) {\n const rowOffset = c * chunkSize + r;\n\n for (let p = 0; p < columns.length; ++p) {\n const s = sizes[p];\n buffers[p].copy(chunkData, offset, rowOffset * s, rowOffset * s + s);\n offset += s;\n }\n }\n\n // write the chunk\n await fileHandle.write(chunkData.subarray(0, offset));\n }\n }\n};\n\nexport { writePly };\n","import { open } from 'node:fs/promises';\nimport { dirname, resolve } from 'node:path';\n\nimport sharp from 'sharp';\n\nimport { DataTable } from '../data-table';\nimport { generateOrdering } from '../ordering';\nimport { kmeans } from '../utils/k-means';\n\nconst enableSogs = false;\n\nconst shNames = new Array(45).fill('').map((_, i) => `f_rest_${i}`);\n\nconst calcMinMax = (dataTable: DataTable, columnNames: string[]) => {\n const columns = columnNames.map(name => dataTable.getColumnByName(name));\n const minMax = columnNames.map(() => [Infinity, -Infinity]);\n const row = {};\n\n for (let i = 0; i < dataTable.numRows; ++i) {\n const r = dataTable.getRow(i, row, columns);\n\n for (let j = 0; j < columnNames.length; ++j) {\n const value = r[columnNames[j]];\n if (value < minMax[j][0]) minMax[j][0] = value;\n if (value > minMax[j][1]) minMax[j][1] = value;\n }\n }\n\n return minMax;\n};\n\nconst logTransform = (value: number) => {\n return Math.sign(value) * Math.log(Math.abs(value) + 1);\n};\n\n// calculate the output index of the gaussian given its index. chunks of\n// 256 gaussians are packed into 16x16 tiles on the output texture.\nconst target = (index: number, width: number) => {\n const chunkWidth = width / 16;\n const chunkIndex = Math.floor(index / 256);\n const chunkX = chunkIndex % chunkWidth;\n const chunkY = Math.floor(chunkIndex / chunkWidth);\n\n const x = chunkX * 16 + (index % 16);\n const y = chunkY * 16 + Math.floor((index % 256) / 16);\n\n return x + y * width;\n};\n\nconst writeSogs = async (outputFilename: string, dataTable: DataTable) => {\n\n // generate an optimal ordering\n const sortIndices = generateOrdering(dataTable);\n\n const numRows = dataTable.numRows;\n const width = Math.ceil(Math.sqrt(numRows) / 16) * 16;\n const height = Math.ceil(numRows / width / 16) * 16;\n const channels = 4;\n\n const write = (filename: string, data: Uint8Array, w = width, h = height) => {\n const pathname = resolve(dirname(outputFilename), filename);\n console.log(`writing '${pathname}'...`);\n return sharp(data, { raw: { width: w, height: h, channels } })\n .webp({ lossless: true })\n .toFile(pathname);\n };\n\n const row: any = {};\n\n // convert position/means\n const meansL = new Uint8Array(width * height * channels);\n const meansU = new Uint8Array(width * height * channels);\n const meansNames = ['x', 'y', 'z'];\n const meansMinMax = calcMinMax(dataTable, meansNames).map(v => v.map(logTransform));\n const meansColumns = meansNames.map(name => dataTable.getColumnByName(name));\n for (let i = 0; i < dataTable.numRows; ++i) {\n dataTable.getRow(sortIndices[i], row, meansColumns);\n\n const x = 65535 * (logTransform(row.x) - meansMinMax[0][0]) / (meansMinMax[0][1] - meansMinMax[0][0]);\n const y = 65535 * (logTransform(row.y) - meansMinMax[1][0]) / (meansMinMax[1][1] - meansMinMax[1][0]);\n const z = 65535 * (logTransform(row.z) - meansMinMax[2][0]) / (meansMinMax[2][1] - meansMinMax[2][0]);\n\n const ti = target(i, width);\n\n meansL[ti * 4] = x & 0xff;\n meansL[ti * 4 + 1] = y & 0xff;\n meansL[ti * 4 + 2] = z & 0xff;\n meansL[ti * 4 + 3] = 0xff;\n\n meansU[ti * 4] = (x >> 8) & 0xff;\n meansU[ti * 4 + 1] = (y >> 8) & 0xff;\n meansU[ti * 4 + 2] = (z >> 8) & 0xff;\n meansU[ti * 4 + 3] = 0xff;\n }\n await write('means_l.webp', meansL);\n await write('means_u.webp', meansU);\n\n // convert quaternions\n const quats = new Uint8Array(width * height * channels);\n const quatNames = ['rot_0', 'rot_1', 'rot_2', 'rot_3'];\n const quatColumns = quatNames.map(name => dataTable.getColumnByName(name));\n const q = [0, 0, 0, 0];\n for (let i = 0; i < dataTable.numRows; ++i) {\n dataTable.getRow(sortIndices[i], row, quatColumns);\n\n q[0] = row.rot_0;\n q[1] = row.rot_1;\n q[2] = row.rot_2;\n q[3] = row.rot_3;\n\n const l = Math.sqrt(q[0] * q[0] + q[1] * q[1] + q[2] * q[2] + q[3] * q[3]);\n\n // normalize\n q.forEach((v, j) => {\n q[j] = v / l;\n });\n\n // find max component\n const maxComp = q.reduce((v, _, i) => (Math.abs(q[i]) > Math.abs(q[v]) ? i : v), 0);\n\n // invert if max component is negative\n if (q[maxComp] < 0) {\n q.forEach((v, j) => {\n q[j] *= -1;\n });\n }\n\n // scale by sqrt(2) to fit in [-1, 1] range\n const sqrt2 = Math.sqrt(2);\n q.forEach((v, j) => {\n q[j] *= sqrt2;\n });\n\n const idx = [\n [1, 2, 3],\n [0, 2, 3],\n [0, 1, 3],\n [0, 1, 2]\n ][maxComp];\n\n const ti = target(i, width);\n\n quats[ti * 4] = 255 * (q[idx[0]] * 0.5 + 0.5);\n quats[ti * 4 + 1] = 255 * (q[idx[1]] * 0.5 + 0.5);\n quats[ti * 4 + 2] = 255 * (q[idx[2]] * 0.5 + 0.5);\n quats[ti * 4 + 3] = 252 + maxComp;\n }\n await write('quats.webp', quats);\n\n // scales\n const scales = new Uint8Array(width * height * channels);\n const scaleNames = ['scale_0', 'scale_1', 'scale_2'];\n const scaleColumns = scaleNames.map(name => dataTable.getColumnByName(name));\n const scaleMinMax = calcMinMax(dataTable, scaleNames);\n for (let i = 0; i < dataTable.numRows; ++i) {\n dataTable.getRow(sortIndices[i], row, scaleColumns);\n\n const ti = target(i, width);\n\n scales[ti * 4] = 255 * (row.scale_0 - scaleMinMax[0][0]) / (scaleMinMax[0][1] - scaleMinMax[0][0]);\n scales[ti * 4 + 1] = 255 * (row.scale_1 - scaleMinMax[1][0]) / (scaleMinMax[1][1] - scaleMinMax[1][0]);\n scales[ti * 4 + 2] = 255 * (row.scale_2 - scaleMinMax[2][0]) / (scaleMinMax[2][1] - scaleMinMax[2][0]);\n scales[ti * 4 + 3] = 0xff;\n }\n await write('scales.webp', scales);\n\n // colors\n const sh0 = new Uint8Array(width * height * channels);\n const sh0Names = ['f_dc_0', 'f_dc_1', 'f_dc_2', 'opacity'];\n const sh0Columns = sh0Names.map(name => dataTable.getColumnByName(name));\n const sh0MinMax = calcMinMax(dataTable, sh0Names);\n for (let i = 0; i < dataTable.numRows; ++i) {\n dataTable.getRow(sortIndices[i], row, sh0Columns);\n\n const ti = target(i, width);\n\n sh0[ti * 4] = 255 * (row.f_dc_0 - sh0MinMax[0][0]) / (sh0MinMax[0][1] - sh0MinMax[0][0]);\n sh0[ti * 4 + 1] = 255 * (row.f_dc_1 - sh0MinMax[1][0]) / (sh0MinMax[1][1] - sh0MinMax[1][0]);\n sh0[ti * 4 + 2] = 255 * (row.f_dc_2 - sh0MinMax[2][0]) / (sh0MinMax[2][1] - sh0MinMax[2][0]);\n sh0[ti * 4 + 3] = 255 * (row.opacity - sh0MinMax[3][0]) / (sh0MinMax[3][1] - sh0MinMax[3][0]);\n }\n await write('sh0.webp', sh0);\n\n // write meta.json\n const meta: any = {\n means: {\n shape: [numRows, 3],\n dtype: 'float32',\n mins: meansMinMax.map(v => v[0]),\n maxs: meansMinMax.map(v => v[1]),\n files: [\n 'means_l.webp',\n 'means_u.webp'\n ]\n },\n scales: {\n shape: [numRows, 3],\n dtype: 'float32',\n mins: scaleMinMax.map(v => v[0]),\n maxs: scaleMinMax.map(v => v[1]),\n files: ['scales.webp']\n },\n quats: {\n shape: [numRows, 4],\n dtype: 'uint8',\n encoding: 'quaternion_packed',\n files: ['quats.webp']\n },\n sh0: {\n shape: [numRows, 1, 4],\n dtype: 'float32',\n mins: sh0MinMax.map(v => v[0]),\n maxs: sh0MinMax.map(v => v[1]),\n files: ['sh0.webp']\n }\n };\n\n // disable spherical harmonics\n if (enableSogs) {\n // spherical harmonics\n const shBands = { '9': 1, '24': 2, '-1': 3 }[shNames.findIndex(v => !dataTable.hasColumn(v))] ?? 0;\n\n if (shBands > 0) {\n const shCoeffs = [0, 3, 8, 15][shBands];\n const centroidsNames = shNames.slice(0, shCoeffs * 3);\n const centroidsColumns = centroidsNames.map(name => dataTable.getColumnByName(name));\n\n // create a table with just spherical harmonics data\n const shDataTable = new DataTable(centroidsColumns);\n\n // calculate kmeans\n const { centroids, labels } = kmeans(shDataTable, 1 * 1024);\n\n // write centroids\n const centroidsBuf = new Uint8Array(64 * shCoeffs * Math.ceil(centroids.numRows / 64) * channels);\n const centroidsMinMax = calcMinMax(shDataTable, centroidsNames);\n const centroidsMin = centroidsMinMax.map(v => v[0]).reduce((a, b) => Math.min(a, b));\n const centroidsMax = centroidsMinMax.map(v => v[1]).reduce((a, b) => Math.max(a, b));\n const centroidsRow: any = {};\n for (let i = 0; i < centroids.numRows; ++i) {\n centroids.getRow(i, centroidsRow);\n\n for (let j = 0; j < shCoeffs; ++j) {\n const x = centroidsRow[centroidsNames[shCoeffs * 0 + j]];\n const y = centroidsRow[centroidsNames[shCoeffs * 1 + j]];\n const z = centroidsRow[centroidsNames[shCoeffs * 2 + j]];\n\n centroidsBuf[i * shCoeffs * 4 + j * 4 + 0] = 255 * ((x - centroidsMin) / (centroidsMax - centroidsMin));\n centroidsBuf[i * shCoeffs * 4 + j * 4 + 1] = 255 * ((y - centroidsMin) / (centroidsMax - centroidsMin));\n centroidsBuf[i * shCoeffs * 4 + j * 4 + 2] = 255 * ((z - centroidsMin) / (centroidsMax - centroidsMin));\n centroidsBuf[i * shCoeffs * 4 + j * 4 + 3] = 0xff;\n }\n }\n await write('shN_centroids.webp', centroidsBuf, 64 * shCoeffs, Math.ceil(centroids.numRows / 64));\n\n // write labels\n const labelsBuf = new Uint8Array(width * height * channels);\n for (let i = 0; i < dataTable.numRows; ++i) {\n const label = labels[sortIndices[i]];\n\n const ti = target(i, width);\n labelsBuf[ti * 4] = label & 0xff;\n labelsBuf[ti * 4 + 1] = (label >> 8) & 0xff;\n labelsBuf[ti * 4 + 2] = 0;\n labelsBuf[ti * 4 + 3] = 0xff;\n }\n await write('shN_labels.webp', labelsBuf);\n\n meta.shN = {\n shape: [dataTable.numRows, shCoeffs],\n dtype: 'float32',\n mins: centroidsMin,\n maxs: centroidsMax,\n quantization: 8,\n files: [\n 'shN_centroids.webp',\n 'shN_labels.webp'\n ]\n };\n\n console.log(centroids, labels);\n }\n }\n\n const outputFile = await open(outputFilename, 'w');\n await outputFile.write((new TextEncoder()).encode(JSON.stringify(meta, null, 4)));\n await outputFile.close();\n};\n\nexport { writeSogs };\n","import { open } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { exit } from 'node:process';\nimport { parseArgs } from 'node:util';\n\nimport { Vec3 } from 'playcanvas';\n\nimport { version } from '../package.json';\nimport { Column, DataTable, TypedArray } from './data-table';\nimport { ProcessAction, process } from './process';\nimport { readPly } from './readers/read-ply';\nimport { writeCompressedPly } from './writers/write-compressed-ply';\nimport { writePly } from './writers/write-ply';\nimport { writeSogs } from './writers/write-sogs';\n\n\nconst readFile = async (filename: string) => {\n console.log(`reading '${filename}'...`);\n const inputFile = await open(filename, 'r');\n const plyData = await readPly(inputFile);\n await inputFile.close();\n return plyData;\n};\n\nconst writeFile = async (filename: string, dataTable: DataTable) => {\n if (filename.endsWith('.json')) {\n await writeSogs(filename, dataTable);\n } else if (filename.endsWith('.compressed.ply')) {\n console.log(`writing '${filename}'...`);\n const outputFile = await open(filename, 'w');\n await writeCompressedPly(outputFile, dataTable);\n await outputFile.close();\n } else {\n console.log(`writing '${filename}'...`);\n const outputFile = await open(filename, 'w');\n await writePly(outputFile, {\n comments: [],\n elements: [{\n name: 'vertex',\n dataTable: dataTable\n }]\n });\n await outputFile.close();\n }\n};\n\n// combine multiple tables into one\n// columns with matching name and type are combined\nconst combine = (dataTables: DataTable[]) => {\n if (dataTables.length === 1) {\n // nothing to combine\n return dataTables[0];\n }\n\n const findMatchingColumn = (columns: Column[], column: Column) => {\n for (let i = 0; i < columns.length; ++i) {\n if (columns[i].name === column.name &&\n columns[i].dataType === column.dataType) {\n return columns[i];\n }\n }\n return null;\n };\n\n // make unique list of columns where name and type much match\n const columns = dataTables[0].columns.slice();\n for (let i = 1; i < dataTables.length; ++i) {\n const dataTable = dataTables[i];\n for (let j = 0; j < dataTable.columns.length; ++j) {\n if (!findMatchingColumn(columns, dataTable.columns[j])) {\n columns.push(dataTable.columns[j]);\n }\n }\n }\n\n // count total number of rows\n const totalRows = dataTables.reduce((sum, dataTable) => sum + dataTable.numRows, 0);\n\n // construct output dataTable\n const resultColumns = columns.map((column) => {\n const constructor = column.data.constructor as new (length: number) => TypedArray;\n return new Column(column.name, new constructor(totalRows));\n });\n const result = new DataTable(resultColumns);\n\n // copy data\n let rowOffset = 0;\n for (let i = 0; i < dataTables.length; ++i) {\n const dataTable = dataTables[i];\n\n for (let j = 0; j < dataTable.columns.length; ++j) {\n const column = dataTable.columns[j];\n const targetColumn = findMatchingColumn(result.columns, column);\n targetColumn.data.set(column.data, rowOffset);\n }\n\n rowOffset += dataTable.numRows;\n }\n\n return result;\n};\n\nconst isGSDataTable = (dataTable: DataTable) => {\n if (![\n 'x', 'y', 'z',\n 'rot_0', 'rot_1', 'rot_2', 'rot_3',\n 'scale_0', 'scale_1', 'scale_2',\n 'f_dc_0', 'f_dc_1', 'f_dc_2',\n 'opacity'\n ].every(c => dataTable.hasColumn(c))) {\n return false;\n }\n return true;\n};\n\ntype File = {\n filename: string;\n processActions: ProcessAction[];\n};\n\nconst parseArguments = () => {\n const { values: v, tokens } = parseArgs({\n tokens: true,\n strict: true,\n allowPositionals: true,\n options: {\n translate: { type: 'string', short: 't', multiple: true },\n rotate: { type: 'string', short: 'r', multiple: true },\n scale: { type: 'string', short: 's', multiple: true },\n filterNaN: { type: 'boolean', short: 'n', multiple: true },\n filterByValue: { type: 'string', short: 'c', multiple: true },\n filterBands: { type: 'string', short: 'h', multiple: true }\n }\n });\n\n const parseNumber = (value: string): number => {\n const result = Number(value);\n if (isNaN(result)) {\n throw new Error(`Invalid number value: ${value}`);\n }\n return result;\n };\n\n const parseVec3 = (value: string): Vec3 => {\n const parts = value.split(',').map(Number);\n if (parts.length !== 3 || parts.some(isNaN)) {\n throw new Error(`Invalid Vec3 value: ${value}`);\n }\n return new Vec3(parts[0], parts[1], parts[2]);\n };\n\n const parseComparator = (value: string): 'lt' | 'lte' | 'gt' | 'gte' | 'eq' | 'neq' => {\n switch (value) {\n case 'lt': return 'lt';\n case 'lte': return 'lte';\n case 'gt': return 'gt';\n case 'gte': return 'gte';\n case 'eq': return 'eq';\n case 'neq': return 'neq';\n default:\n throw new Error(`Invalid comparator value: ${value}`);\n }\n };\n\n const files: File[] = [];\n\n for (const t of tokens) {\n if (t.kind === 'positional') {\n files.push({\n filename: t.value,\n processActions: []\n });\n } else if (t.kind === 'option' && files.length > 0) {\n const current = files[files.length - 1];\n switch (t.name) {\n case 'translate':\n current.processActions.push({\n kind: 'translate',\n value: parseVec3(t.value)\n });\n break;\n case 'rotate':\n current.processActions.push({\n kind: 'rotate',\n value: parseVec3(t.value)\n });\n break;\n case 'scale':\n current.processActions.push({\n kind: 'scale',\n value: parseNumber(t.value)\n });\n break;\n case 'filterNaN':\n current.processActions.push({\n kind: 'filterNaN'\n });\n break;\n case 'filterByValue': {\n const parts = t.value.split(',').map(p => p.trim());\n if (parts.length !== 3) {\n throw new Error(`Invalid filterByValue value: ${t.value}`);\n }\n current.processActions.push({\n kind: 'filterByValue',\n columnName: parts[0],\n comparator: parseComparator(parts[1]),\n value: parseNumber(parts[2])\n });\n break;\n }\n case 'filterBands': {\n const shBands = parseNumber(t.value);\n if (![0, 1, 2, 3].includes(shBands)) {\n throw new Error(`Invalid filterBands value: ${t.value}. Must be 0, 1, 2, or 3.`);\n }\n current.processActions.push({\n kind: 'filterBands',\n value: shBands as 0 | 1 | 2 | 3\n });\n\n break;\n }\n }\n }\n }\n\n return files;\n};\n\nconst usage = `Usage: splat-transform input.ply [actions] input.ply [actions] ... output.ply [actions]\nactions:\n-translate -t x,y,z Translate splats by (x, y, z)\n-rotate -r x,y,z Rotate splats by euler angles (x, y, z) (in degrees)\n-scale -s x Scale splats by x (uniform scaling)\n-filterNaN -n Remove gaussians containing any NaN or Inf value\n-filterByValue -c name,comparator,value Filter gaussians by a value. Specify the value name, comparator (lt, lte, gt, gte, eq, neq) and value\n-filterBands -h 1 Filter spherical harmonic band data. Value must be 0, 1, 2 or 3.\n`;\n\nconst main = async () => {\n console.log(`splat-transform v${version}`);\n\n // read args\n const files = parseArguments();\n if (files.length < 2) {\n console.error(usage);\n exit(1);\n }\n\n const inputArgs = files.slice(0, -1);\n const outputArg = files[files.length - 1];\n\n try {\n // read, filter, process input files\n const inputFiles = await Promise.all(inputArgs.map(async (inputArg) => {\n const file = await readFile(resolve(inputArg.filename));\n\n // filter out non-gs files\n if (file.elements.length !== 1) {\n return null;\n }\n\n const element = file.elements[0];\n if (element.name !== 'vertex') {\n return null;\n }\n\n const { dataTable } = element;\n if (dataTable.numRows === 0 || !isGSDataTable(dataTable)) {\n return null;\n }\n\n file.elements[0].dataTable = process(dataTable, inputArg.processActions);\n\n return file;\n }));\n\n // combine inputs into a single output dataTable\n const dataTable = process(\n combine(inputFiles.map(file => file.elements[0].dataTable)),\n outputArg.processActions\n );\n\n // write file\n await writeFile(resolve(outputArg.filename), dataTable);\n } catch (err) {\n // handle errors\n console.error(`error: ${err.message}`);\n exit(1);\n }\n\n console.log('done');\n};\n\nexport { main };\n"],"names":["shNames","q","Buffer"],"mappings":"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AI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACrB,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACtB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACpD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACpD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACpD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACpD,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACpD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACpD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACpD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACpD,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACd,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACd,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACpD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACpD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACrD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACrD,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACd,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACd,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACd,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACrD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACrD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACrD,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACrD,IAAI,OAAO,IAAI;AACf,EAAE;AACF,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE;AACvB,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI;AACtB,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI;AACtB,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI;AACvB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACpB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACrB,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AACrB,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AAClB,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACzC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACzC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACzC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACZ,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACzC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACzC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACzC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AACZ,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACd,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACzC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AACzC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE;AAC1C,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;AACb,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACd,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACd,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACd,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,EAA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C,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,MAAM;AAC1D,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,MAAM;AACzD,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,MAAM;AAC1D,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,MAAM;AACzD,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,MAAM;AACzD,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,MAAM;AAC1D,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,MAAM;AAC1D,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,MAAM;AAC3D,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,MAAM;AAC3D,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,MAAM;AAC1D,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,MAAM;AAC3D,MAAM,CAAC,CAAC,EA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C,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnJ,gBAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAA4B,UAAU,GAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjK,gBAAA,UAAU,GAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAA4B,UAAU,GAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnJ,gBAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAA4B,UAAU,GAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC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AG,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjK,gBAAA,UAAU,GAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAA4B,UAAU,GAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnJ,gBAAA,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAA4B,UAAU,GAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjK,gBAAA,UAAU,GAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAA4B,UAAU,GAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAA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","x_google_ignoreList":[0,1,2,3,4,5,6]}