@playcanvas/splat-transform 0.1.0 → 0.1.1

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.
package/dist/index.mjs CHANGED
@@ -1129,5 +1129,6 @@ const main = async () => {
1129
1129
  }
1130
1130
  console.log('done');
1131
1131
  };
1132
- await main();
1132
+
1133
+ export { main };
1133
1134
  //# sourceMappingURL=index.mjs.map
@@ -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\n await writeCompressedPly(outputFile, new Splat(plyFile));\n\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\nawait main();\n"],"names":[],"mappings":"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","x_google_ignoreList":[3,4,5]}
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]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@playcanvas/splat-transform",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "author": "PlayCanvas<support@playcanvas.com>",
5
5
  "homepage": "https://playcanvas.com",
6
6
  "description": "CLI tool for converting PLY gaussian splat scenes to compressed.ply",