@d5techs/3dgs-lib 1.4.16 → 1.4.18
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/3dgs-lib.cjs +804 -11
- package/dist/3dgs-lib.cjs.map +1 -1
- package/dist/3dgs-lib.js +804 -11
- package/dist/3dgs-lib.js.map +1 -1
- package/dist/editor/SplatEditor.d.ts +2 -0
- package/dist/gs/SOGEncoder.d.ts +17 -0
- package/dist/index.d.ts +1 -0
- package/package.json +1 -1
package/dist/3dgs-lib.cjs
CHANGED
|
@@ -4658,7 +4658,7 @@ function createSeededRandom(seed) {
|
|
|
4658
4658
|
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
|
4659
4659
|
};
|
|
4660
4660
|
}
|
|
4661
|
-
const SH_C0$
|
|
4661
|
+
const SH_C0$2 = 0.28209479177387814;
|
|
4662
4662
|
function computeImportanceSampling(buffer, dataOffset, stride, totalCount, sampleCount, opacityOffset, opacityType, scale0Offset, scale0Type, scale1Offset, scale1Type, scale2Offset, scale2Type, littleEndian, seed) {
|
|
4663
4663
|
const dataView = new DataView(buffer, dataOffset);
|
|
4664
4664
|
const random = createSeededRandom(seed);
|
|
@@ -4848,9 +4848,9 @@ async function parsePLYBuffer(buffer, options = {}) {
|
|
|
4848
4848
|
const f_dc_0 = offsets.f_dc_0 >= 0 ? readProperty(dataView, base + offsets.f_dc_0, types.f_dc_0, littleEndian) : 0;
|
|
4849
4849
|
const f_dc_1 = offsets.f_dc_1 >= 0 ? readProperty(dataView, base + offsets.f_dc_1, types.f_dc_1, littleEndian) : 0;
|
|
4850
4850
|
const f_dc_2 = offsets.f_dc_2 >= 0 ? readProperty(dataView, base + offsets.f_dc_2, types.f_dc_2, littleEndian) : 0;
|
|
4851
|
-
colors[outputIdx * 3 + 0] = 0.5 + SH_C0$
|
|
4852
|
-
colors[outputIdx * 3 + 1] = 0.5 + SH_C0$
|
|
4853
|
-
colors[outputIdx * 3 + 2] = 0.5 + SH_C0$
|
|
4851
|
+
colors[outputIdx * 3 + 0] = 0.5 + SH_C0$2 * f_dc_0;
|
|
4852
|
+
colors[outputIdx * 3 + 1] = 0.5 + SH_C0$2 * f_dc_1;
|
|
4853
|
+
colors[outputIdx * 3 + 2] = 0.5 + SH_C0$2 * f_dc_2;
|
|
4854
4854
|
const rawOpacity = offsets.opacity >= 0 ? readProperty(dataView, base + offsets.opacity, types.opacity, littleEndian) : 0;
|
|
4855
4855
|
opacities[outputIdx] = sigmoid(rawOpacity);
|
|
4856
4856
|
if (shCoeffs && shProps.length > 0) {
|
|
@@ -5131,7 +5131,7 @@ var freb = function(eb, start) {
|
|
|
5131
5131
|
};
|
|
5132
5132
|
var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;
|
|
5133
5133
|
fl[28] = 258, revfl[258] = 28;
|
|
5134
|
-
var _b = freb(fdeb, 0), fd = _b.b;
|
|
5134
|
+
var _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;
|
|
5135
5135
|
var rev = new u16(32768);
|
|
5136
5136
|
for (var i = 0; i < 32768; ++i) {
|
|
5137
5137
|
var x = (i & 43690) >> 1 | (i & 21845) << 1;
|
|
@@ -5187,8 +5187,8 @@ for (var i = 280; i < 288; ++i)
|
|
|
5187
5187
|
var fdt = new u8(32);
|
|
5188
5188
|
for (var i = 0; i < 32; ++i)
|
|
5189
5189
|
fdt[i] = 5;
|
|
5190
|
-
var flrm = /* @__PURE__ */ hMap(flt, 9, 1);
|
|
5191
|
-
var fdrm = /* @__PURE__ */ hMap(fdt, 5, 1);
|
|
5190
|
+
var flm = /* @__PURE__ */ hMap(flt, 9, 0), flrm = /* @__PURE__ */ hMap(flt, 9, 1);
|
|
5191
|
+
var fdm = /* @__PURE__ */ hMap(fdt, 5, 0), fdrm = /* @__PURE__ */ hMap(fdt, 5, 1);
|
|
5192
5192
|
var max = function(a) {
|
|
5193
5193
|
var m = a[0];
|
|
5194
5194
|
for (var i = 1; i < a.length; ++i) {
|
|
@@ -5382,7 +5382,353 @@ var inflt = function(dat, st, buf, dict) {
|
|
|
5382
5382
|
} while (!final);
|
|
5383
5383
|
return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);
|
|
5384
5384
|
};
|
|
5385
|
+
var wbits = function(d, p, v) {
|
|
5386
|
+
v <<= p & 7;
|
|
5387
|
+
var o = p / 8 | 0;
|
|
5388
|
+
d[o] |= v;
|
|
5389
|
+
d[o + 1] |= v >> 8;
|
|
5390
|
+
};
|
|
5391
|
+
var wbits16 = function(d, p, v) {
|
|
5392
|
+
v <<= p & 7;
|
|
5393
|
+
var o = p / 8 | 0;
|
|
5394
|
+
d[o] |= v;
|
|
5395
|
+
d[o + 1] |= v >> 8;
|
|
5396
|
+
d[o + 2] |= v >> 16;
|
|
5397
|
+
};
|
|
5398
|
+
var hTree = function(d, mb) {
|
|
5399
|
+
var t = [];
|
|
5400
|
+
for (var i = 0; i < d.length; ++i) {
|
|
5401
|
+
if (d[i])
|
|
5402
|
+
t.push({ s: i, f: d[i] });
|
|
5403
|
+
}
|
|
5404
|
+
var s = t.length;
|
|
5405
|
+
var t2 = t.slice();
|
|
5406
|
+
if (!s)
|
|
5407
|
+
return { t: et, l: 0 };
|
|
5408
|
+
if (s == 1) {
|
|
5409
|
+
var v = new u8(t[0].s + 1);
|
|
5410
|
+
v[t[0].s] = 1;
|
|
5411
|
+
return { t: v, l: 1 };
|
|
5412
|
+
}
|
|
5413
|
+
t.sort(function(a, b) {
|
|
5414
|
+
return a.f - b.f;
|
|
5415
|
+
});
|
|
5416
|
+
t.push({ s: -1, f: 25001 });
|
|
5417
|
+
var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;
|
|
5418
|
+
t[0] = { s: -1, f: l.f + r.f, l, r };
|
|
5419
|
+
while (i1 != s - 1) {
|
|
5420
|
+
l = t[t[i0].f < t[i2].f ? i0++ : i2++];
|
|
5421
|
+
r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];
|
|
5422
|
+
t[i1++] = { s: -1, f: l.f + r.f, l, r };
|
|
5423
|
+
}
|
|
5424
|
+
var maxSym = t2[0].s;
|
|
5425
|
+
for (var i = 1; i < s; ++i) {
|
|
5426
|
+
if (t2[i].s > maxSym)
|
|
5427
|
+
maxSym = t2[i].s;
|
|
5428
|
+
}
|
|
5429
|
+
var tr = new u16(maxSym + 1);
|
|
5430
|
+
var mbt = ln(t[i1 - 1], tr, 0);
|
|
5431
|
+
if (mbt > mb) {
|
|
5432
|
+
var i = 0, dt = 0;
|
|
5433
|
+
var lft = mbt - mb, cst = 1 << lft;
|
|
5434
|
+
t2.sort(function(a, b) {
|
|
5435
|
+
return tr[b.s] - tr[a.s] || a.f - b.f;
|
|
5436
|
+
});
|
|
5437
|
+
for (; i < s; ++i) {
|
|
5438
|
+
var i2_1 = t2[i].s;
|
|
5439
|
+
if (tr[i2_1] > mb) {
|
|
5440
|
+
dt += cst - (1 << mbt - tr[i2_1]);
|
|
5441
|
+
tr[i2_1] = mb;
|
|
5442
|
+
} else
|
|
5443
|
+
break;
|
|
5444
|
+
}
|
|
5445
|
+
dt >>= lft;
|
|
5446
|
+
while (dt > 0) {
|
|
5447
|
+
var i2_2 = t2[i].s;
|
|
5448
|
+
if (tr[i2_2] < mb)
|
|
5449
|
+
dt -= 1 << mb - tr[i2_2]++ - 1;
|
|
5450
|
+
else
|
|
5451
|
+
++i;
|
|
5452
|
+
}
|
|
5453
|
+
for (; i >= 0 && dt; --i) {
|
|
5454
|
+
var i2_3 = t2[i].s;
|
|
5455
|
+
if (tr[i2_3] == mb) {
|
|
5456
|
+
--tr[i2_3];
|
|
5457
|
+
++dt;
|
|
5458
|
+
}
|
|
5459
|
+
}
|
|
5460
|
+
mbt = mb;
|
|
5461
|
+
}
|
|
5462
|
+
return { t: new u8(tr), l: mbt };
|
|
5463
|
+
};
|
|
5464
|
+
var ln = function(n, l, d) {
|
|
5465
|
+
return n.s == -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;
|
|
5466
|
+
};
|
|
5467
|
+
var lc = function(c) {
|
|
5468
|
+
var s = c.length;
|
|
5469
|
+
while (s && !c[--s])
|
|
5470
|
+
;
|
|
5471
|
+
var cl = new u16(++s);
|
|
5472
|
+
var cli = 0, cln = c[0], cls = 1;
|
|
5473
|
+
var w = function(v) {
|
|
5474
|
+
cl[cli++] = v;
|
|
5475
|
+
};
|
|
5476
|
+
for (var i = 1; i <= s; ++i) {
|
|
5477
|
+
if (c[i] == cln && i != s)
|
|
5478
|
+
++cls;
|
|
5479
|
+
else {
|
|
5480
|
+
if (!cln && cls > 2) {
|
|
5481
|
+
for (; cls > 138; cls -= 138)
|
|
5482
|
+
w(32754);
|
|
5483
|
+
if (cls > 2) {
|
|
5484
|
+
w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);
|
|
5485
|
+
cls = 0;
|
|
5486
|
+
}
|
|
5487
|
+
} else if (cls > 3) {
|
|
5488
|
+
w(cln), --cls;
|
|
5489
|
+
for (; cls > 6; cls -= 6)
|
|
5490
|
+
w(8304);
|
|
5491
|
+
if (cls > 2)
|
|
5492
|
+
w(cls - 3 << 5 | 8208), cls = 0;
|
|
5493
|
+
}
|
|
5494
|
+
while (cls--)
|
|
5495
|
+
w(cln);
|
|
5496
|
+
cls = 1;
|
|
5497
|
+
cln = c[i];
|
|
5498
|
+
}
|
|
5499
|
+
}
|
|
5500
|
+
return { c: cl.subarray(0, cli), n: s };
|
|
5501
|
+
};
|
|
5502
|
+
var clen = function(cf, cl) {
|
|
5503
|
+
var l = 0;
|
|
5504
|
+
for (var i = 0; i < cl.length; ++i)
|
|
5505
|
+
l += cf[i] * cl[i];
|
|
5506
|
+
return l;
|
|
5507
|
+
};
|
|
5508
|
+
var wfblk = function(out, pos, dat) {
|
|
5509
|
+
var s = dat.length;
|
|
5510
|
+
var o = shft(pos + 2);
|
|
5511
|
+
out[o] = s & 255;
|
|
5512
|
+
out[o + 1] = s >> 8;
|
|
5513
|
+
out[o + 2] = out[o] ^ 255;
|
|
5514
|
+
out[o + 3] = out[o + 1] ^ 255;
|
|
5515
|
+
for (var i = 0; i < s; ++i)
|
|
5516
|
+
out[o + i + 4] = dat[i];
|
|
5517
|
+
return (o + 4 + s) * 8;
|
|
5518
|
+
};
|
|
5519
|
+
var wblk = function(dat, out, final, syms, lf, df, eb, li, bs, bl, p) {
|
|
5520
|
+
wbits(out, p++, final);
|
|
5521
|
+
++lf[256];
|
|
5522
|
+
var _a2 = hTree(lf, 15), dlt = _a2.t, mlb = _a2.l;
|
|
5523
|
+
var _b2 = hTree(df, 15), ddt = _b2.t, mdb = _b2.l;
|
|
5524
|
+
var _c = lc(dlt), lclt = _c.c, nlc = _c.n;
|
|
5525
|
+
var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;
|
|
5526
|
+
var lcfreq = new u16(19);
|
|
5527
|
+
for (var i = 0; i < lclt.length; ++i)
|
|
5528
|
+
++lcfreq[lclt[i] & 31];
|
|
5529
|
+
for (var i = 0; i < lcdt.length; ++i)
|
|
5530
|
+
++lcfreq[lcdt[i] & 31];
|
|
5531
|
+
var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;
|
|
5532
|
+
var nlcc = 19;
|
|
5533
|
+
for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)
|
|
5534
|
+
;
|
|
5535
|
+
var flen = bl + 5 << 3;
|
|
5536
|
+
var ftlen = clen(lf, flt) + clen(df, fdt) + eb;
|
|
5537
|
+
var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];
|
|
5538
|
+
if (bs >= 0 && flen <= ftlen && flen <= dtlen)
|
|
5539
|
+
return wfblk(out, p, dat.subarray(bs, bs + bl));
|
|
5540
|
+
var lm, ll, dm, dl;
|
|
5541
|
+
wbits(out, p, 1 + (dtlen < ftlen)), p += 2;
|
|
5542
|
+
if (dtlen < ftlen) {
|
|
5543
|
+
lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;
|
|
5544
|
+
var llm = hMap(lct, mlcb, 0);
|
|
5545
|
+
wbits(out, p, nlc - 257);
|
|
5546
|
+
wbits(out, p + 5, ndc - 1);
|
|
5547
|
+
wbits(out, p + 10, nlcc - 4);
|
|
5548
|
+
p += 14;
|
|
5549
|
+
for (var i = 0; i < nlcc; ++i)
|
|
5550
|
+
wbits(out, p + 3 * i, lct[clim[i]]);
|
|
5551
|
+
p += 3 * nlcc;
|
|
5552
|
+
var lcts = [lclt, lcdt];
|
|
5553
|
+
for (var it = 0; it < 2; ++it) {
|
|
5554
|
+
var clct = lcts[it];
|
|
5555
|
+
for (var i = 0; i < clct.length; ++i) {
|
|
5556
|
+
var len = clct[i] & 31;
|
|
5557
|
+
wbits(out, p, llm[len]), p += lct[len];
|
|
5558
|
+
if (len > 15)
|
|
5559
|
+
wbits(out, p, clct[i] >> 5 & 127), p += clct[i] >> 12;
|
|
5560
|
+
}
|
|
5561
|
+
}
|
|
5562
|
+
} else {
|
|
5563
|
+
lm = flm, ll = flt, dm = fdm, dl = fdt;
|
|
5564
|
+
}
|
|
5565
|
+
for (var i = 0; i < li; ++i) {
|
|
5566
|
+
var sym = syms[i];
|
|
5567
|
+
if (sym > 255) {
|
|
5568
|
+
var len = sym >> 18 & 31;
|
|
5569
|
+
wbits16(out, p, lm[len + 257]), p += ll[len + 257];
|
|
5570
|
+
if (len > 7)
|
|
5571
|
+
wbits(out, p, sym >> 23 & 31), p += fleb[len];
|
|
5572
|
+
var dst = sym & 31;
|
|
5573
|
+
wbits16(out, p, dm[dst]), p += dl[dst];
|
|
5574
|
+
if (dst > 3)
|
|
5575
|
+
wbits16(out, p, sym >> 5 & 8191), p += fdeb[dst];
|
|
5576
|
+
} else {
|
|
5577
|
+
wbits16(out, p, lm[sym]), p += ll[sym];
|
|
5578
|
+
}
|
|
5579
|
+
}
|
|
5580
|
+
wbits16(out, p, lm[256]);
|
|
5581
|
+
return p + ll[256];
|
|
5582
|
+
};
|
|
5583
|
+
var deo = /* @__PURE__ */ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);
|
|
5385
5584
|
var et = /* @__PURE__ */ new u8(0);
|
|
5585
|
+
var dflt = function(dat, lvl, plvl, pre, post, st) {
|
|
5586
|
+
var s = st.z || dat.length;
|
|
5587
|
+
var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);
|
|
5588
|
+
var w = o.subarray(pre, o.length - post);
|
|
5589
|
+
var lst = st.l;
|
|
5590
|
+
var pos = (st.r || 0) & 7;
|
|
5591
|
+
if (lvl) {
|
|
5592
|
+
if (pos)
|
|
5593
|
+
w[0] = st.r >> 3;
|
|
5594
|
+
var opt = deo[lvl - 1];
|
|
5595
|
+
var n = opt >> 13, c = opt & 8191;
|
|
5596
|
+
var msk_1 = (1 << plvl) - 1;
|
|
5597
|
+
var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);
|
|
5598
|
+
var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;
|
|
5599
|
+
var hsh = function(i2) {
|
|
5600
|
+
return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;
|
|
5601
|
+
};
|
|
5602
|
+
var syms = new i32(25e3);
|
|
5603
|
+
var lf = new u16(288), df = new u16(32);
|
|
5604
|
+
var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;
|
|
5605
|
+
for (; i + 2 < s; ++i) {
|
|
5606
|
+
var hv = hsh(i);
|
|
5607
|
+
var imod = i & 32767, pimod = head[hv];
|
|
5608
|
+
prev[imod] = pimod;
|
|
5609
|
+
head[hv] = imod;
|
|
5610
|
+
if (wi <= i) {
|
|
5611
|
+
var rem = s - i;
|
|
5612
|
+
if ((lc_1 > 7e3 || li > 24576) && (rem > 423 || !lst)) {
|
|
5613
|
+
pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);
|
|
5614
|
+
li = lc_1 = eb = 0, bs = i;
|
|
5615
|
+
for (var j = 0; j < 286; ++j)
|
|
5616
|
+
lf[j] = 0;
|
|
5617
|
+
for (var j = 0; j < 30; ++j)
|
|
5618
|
+
df[j] = 0;
|
|
5619
|
+
}
|
|
5620
|
+
var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;
|
|
5621
|
+
if (rem > 2 && hv == hsh(i - dif)) {
|
|
5622
|
+
var maxn = Math.min(n, rem) - 1;
|
|
5623
|
+
var maxd = Math.min(32767, i);
|
|
5624
|
+
var ml = Math.min(258, rem);
|
|
5625
|
+
while (dif <= maxd && --ch_1 && imod != pimod) {
|
|
5626
|
+
if (dat[i + l] == dat[i + l - dif]) {
|
|
5627
|
+
var nl = 0;
|
|
5628
|
+
for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)
|
|
5629
|
+
;
|
|
5630
|
+
if (nl > l) {
|
|
5631
|
+
l = nl, d = dif;
|
|
5632
|
+
if (nl > maxn)
|
|
5633
|
+
break;
|
|
5634
|
+
var mmd = Math.min(dif, nl - 2);
|
|
5635
|
+
var md = 0;
|
|
5636
|
+
for (var j = 0; j < mmd; ++j) {
|
|
5637
|
+
var ti = i - dif + j & 32767;
|
|
5638
|
+
var pti = prev[ti];
|
|
5639
|
+
var cd = ti - pti & 32767;
|
|
5640
|
+
if (cd > md)
|
|
5641
|
+
md = cd, pimod = ti;
|
|
5642
|
+
}
|
|
5643
|
+
}
|
|
5644
|
+
}
|
|
5645
|
+
imod = pimod, pimod = prev[imod];
|
|
5646
|
+
dif += imod - pimod & 32767;
|
|
5647
|
+
}
|
|
5648
|
+
}
|
|
5649
|
+
if (d) {
|
|
5650
|
+
syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];
|
|
5651
|
+
var lin = revfl[l] & 31, din = revfd[d] & 31;
|
|
5652
|
+
eb += fleb[lin] + fdeb[din];
|
|
5653
|
+
++lf[257 + lin];
|
|
5654
|
+
++df[din];
|
|
5655
|
+
wi = i + l;
|
|
5656
|
+
++lc_1;
|
|
5657
|
+
} else {
|
|
5658
|
+
syms[li++] = dat[i];
|
|
5659
|
+
++lf[dat[i]];
|
|
5660
|
+
}
|
|
5661
|
+
}
|
|
5662
|
+
}
|
|
5663
|
+
for (i = Math.max(i, wi); i < s; ++i) {
|
|
5664
|
+
syms[li++] = dat[i];
|
|
5665
|
+
++lf[dat[i]];
|
|
5666
|
+
}
|
|
5667
|
+
pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);
|
|
5668
|
+
if (!lst) {
|
|
5669
|
+
st.r = pos & 7 | w[pos / 8 | 0] << 3;
|
|
5670
|
+
pos -= 7;
|
|
5671
|
+
st.h = head, st.p = prev, st.i = i, st.w = wi;
|
|
5672
|
+
}
|
|
5673
|
+
} else {
|
|
5674
|
+
for (var i = st.w || 0; i < s + lst; i += 65535) {
|
|
5675
|
+
var e = i + 65535;
|
|
5676
|
+
if (e >= s) {
|
|
5677
|
+
w[pos / 8 | 0] = lst;
|
|
5678
|
+
e = s;
|
|
5679
|
+
}
|
|
5680
|
+
pos = wfblk(w, pos + 1, dat.subarray(i, e));
|
|
5681
|
+
}
|
|
5682
|
+
st.i = s;
|
|
5683
|
+
}
|
|
5684
|
+
return slc(o, 0, pre + shft(pos) + post);
|
|
5685
|
+
};
|
|
5686
|
+
var crct = /* @__PURE__ */ function() {
|
|
5687
|
+
var t = new Int32Array(256);
|
|
5688
|
+
for (var i = 0; i < 256; ++i) {
|
|
5689
|
+
var c = i, k = 9;
|
|
5690
|
+
while (--k)
|
|
5691
|
+
c = (c & 1 && -306674912) ^ c >>> 1;
|
|
5692
|
+
t[i] = c;
|
|
5693
|
+
}
|
|
5694
|
+
return t;
|
|
5695
|
+
}();
|
|
5696
|
+
var crc = function() {
|
|
5697
|
+
var c = -1;
|
|
5698
|
+
return {
|
|
5699
|
+
p: function(d) {
|
|
5700
|
+
var cr = c;
|
|
5701
|
+
for (var i = 0; i < d.length; ++i)
|
|
5702
|
+
cr = crct[cr & 255 ^ d[i]] ^ cr >>> 8;
|
|
5703
|
+
c = cr;
|
|
5704
|
+
},
|
|
5705
|
+
d: function() {
|
|
5706
|
+
return ~c;
|
|
5707
|
+
}
|
|
5708
|
+
};
|
|
5709
|
+
};
|
|
5710
|
+
var dopt = function(dat, opt, pre, post, st) {
|
|
5711
|
+
if (!st) {
|
|
5712
|
+
st = { l: 1 };
|
|
5713
|
+
if (opt.dictionary) {
|
|
5714
|
+
var dict = opt.dictionary.subarray(-32768);
|
|
5715
|
+
var newDat = new u8(dict.length + dat.length);
|
|
5716
|
+
newDat.set(dict);
|
|
5717
|
+
newDat.set(dat, dict.length);
|
|
5718
|
+
dat = newDat;
|
|
5719
|
+
st.w = dict.length;
|
|
5720
|
+
}
|
|
5721
|
+
}
|
|
5722
|
+
return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20 : 12 + opt.mem, pre, post, st);
|
|
5723
|
+
};
|
|
5724
|
+
var mrg = function(a, b) {
|
|
5725
|
+
var o = {};
|
|
5726
|
+
for (var k in a)
|
|
5727
|
+
o[k] = a[k];
|
|
5728
|
+
for (var k in b)
|
|
5729
|
+
o[k] = b[k];
|
|
5730
|
+
return o;
|
|
5731
|
+
};
|
|
5386
5732
|
var b2 = function(d, b) {
|
|
5387
5733
|
return d[b] | d[b + 1] << 8;
|
|
5388
5734
|
};
|
|
@@ -5392,9 +5738,30 @@ var b4 = function(d, b) {
|
|
|
5392
5738
|
var b8 = function(d, b) {
|
|
5393
5739
|
return b4(d, b) + b4(d, b + 4) * 4294967296;
|
|
5394
5740
|
};
|
|
5741
|
+
var wbytes = function(d, b, v) {
|
|
5742
|
+
for (; v; ++b)
|
|
5743
|
+
d[b] = v, v >>>= 8;
|
|
5744
|
+
};
|
|
5745
|
+
function deflateSync(data, opts) {
|
|
5746
|
+
return dopt(data, opts || {}, 0, 0);
|
|
5747
|
+
}
|
|
5395
5748
|
function inflateSync(data, opts) {
|
|
5396
5749
|
return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);
|
|
5397
5750
|
}
|
|
5751
|
+
var fltn = function(d, p, t, o) {
|
|
5752
|
+
for (var k in d) {
|
|
5753
|
+
var val = d[k], n = p + k, op = o;
|
|
5754
|
+
if (Array.isArray(val))
|
|
5755
|
+
op = mrg(o, val[1]), val = val[0];
|
|
5756
|
+
if (val instanceof u8)
|
|
5757
|
+
t[n] = [val, op];
|
|
5758
|
+
else {
|
|
5759
|
+
t[n += "/"] = [new u8(0), op];
|
|
5760
|
+
fltn(val, n, t, o);
|
|
5761
|
+
}
|
|
5762
|
+
}
|
|
5763
|
+
};
|
|
5764
|
+
var te = typeof TextEncoder != "undefined" && /* @__PURE__ */ new TextEncoder();
|
|
5398
5765
|
var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder();
|
|
5399
5766
|
var tds = 0;
|
|
5400
5767
|
try {
|
|
@@ -5418,6 +5785,34 @@ var dutf8 = function(d) {
|
|
|
5418
5785
|
r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | d[i++] & 63);
|
|
5419
5786
|
}
|
|
5420
5787
|
};
|
|
5788
|
+
function strToU8(str, latin1) {
|
|
5789
|
+
var i;
|
|
5790
|
+
if (te)
|
|
5791
|
+
return te.encode(str);
|
|
5792
|
+
var l = str.length;
|
|
5793
|
+
var ar = new u8(str.length + (str.length >> 1));
|
|
5794
|
+
var ai = 0;
|
|
5795
|
+
var w = function(v) {
|
|
5796
|
+
ar[ai++] = v;
|
|
5797
|
+
};
|
|
5798
|
+
for (var i = 0; i < l; ++i) {
|
|
5799
|
+
if (ai + 5 > ar.length) {
|
|
5800
|
+
var n = new u8(ai + 8 + (l - i << 1));
|
|
5801
|
+
n.set(ar);
|
|
5802
|
+
ar = n;
|
|
5803
|
+
}
|
|
5804
|
+
var c = str.charCodeAt(i);
|
|
5805
|
+
if (c < 128 || latin1)
|
|
5806
|
+
w(c);
|
|
5807
|
+
else if (c < 2048)
|
|
5808
|
+
w(192 | c >> 6), w(128 | c & 63);
|
|
5809
|
+
else if (c > 55295 && c < 57344)
|
|
5810
|
+
c = 65536 + (c & 1023 << 10) | str.charCodeAt(++i) & 1023, w(240 | c >> 18), w(128 | c >> 12 & 63), w(128 | c >> 6 & 63), w(128 | c & 63);
|
|
5811
|
+
else
|
|
5812
|
+
w(224 | c >> 12), w(128 | c >> 6 & 63), w(128 | c & 63);
|
|
5813
|
+
}
|
|
5814
|
+
return slc(ar, 0, ai);
|
|
5815
|
+
}
|
|
5421
5816
|
function strFromU8(dat, latin1) {
|
|
5422
5817
|
if (latin1) {
|
|
5423
5818
|
var r = "";
|
|
@@ -5446,6 +5841,107 @@ var z64e = function(d, b) {
|
|
|
5446
5841
|
;
|
|
5447
5842
|
return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];
|
|
5448
5843
|
};
|
|
5844
|
+
var exfl = function(ex) {
|
|
5845
|
+
var le = 0;
|
|
5846
|
+
if (ex) {
|
|
5847
|
+
for (var k in ex) {
|
|
5848
|
+
var l = ex[k].length;
|
|
5849
|
+
if (l > 65535)
|
|
5850
|
+
err(9);
|
|
5851
|
+
le += l + 4;
|
|
5852
|
+
}
|
|
5853
|
+
}
|
|
5854
|
+
return le;
|
|
5855
|
+
};
|
|
5856
|
+
var wzh = function(d, b, f, fn, u, c, ce, co) {
|
|
5857
|
+
var fl2 = fn.length, ex = f.extra, col = co && co.length;
|
|
5858
|
+
var exl = exfl(ex);
|
|
5859
|
+
wbytes(d, b, ce != null ? 33639248 : 67324752), b += 4;
|
|
5860
|
+
if (ce != null)
|
|
5861
|
+
d[b++] = 20, d[b++] = f.os;
|
|
5862
|
+
d[b] = 20, b += 2;
|
|
5863
|
+
d[b++] = f.flag << 1 | (c < 0 && 8), d[b++] = u && 8;
|
|
5864
|
+
d[b++] = f.compression & 255, d[b++] = f.compression >> 8;
|
|
5865
|
+
var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;
|
|
5866
|
+
if (y < 0 || y > 119)
|
|
5867
|
+
err(10);
|
|
5868
|
+
wbytes(d, b, y << 25 | dt.getMonth() + 1 << 21 | dt.getDate() << 16 | dt.getHours() << 11 | dt.getMinutes() << 5 | dt.getSeconds() >> 1), b += 4;
|
|
5869
|
+
if (c != -1) {
|
|
5870
|
+
wbytes(d, b, f.crc);
|
|
5871
|
+
wbytes(d, b + 4, c < 0 ? -c - 2 : c);
|
|
5872
|
+
wbytes(d, b + 8, f.size);
|
|
5873
|
+
}
|
|
5874
|
+
wbytes(d, b + 12, fl2);
|
|
5875
|
+
wbytes(d, b + 14, exl), b += 16;
|
|
5876
|
+
if (ce != null) {
|
|
5877
|
+
wbytes(d, b, col);
|
|
5878
|
+
wbytes(d, b + 6, f.attrs);
|
|
5879
|
+
wbytes(d, b + 10, ce), b += 14;
|
|
5880
|
+
}
|
|
5881
|
+
d.set(fn, b);
|
|
5882
|
+
b += fl2;
|
|
5883
|
+
if (exl) {
|
|
5884
|
+
for (var k in ex) {
|
|
5885
|
+
var exf = ex[k], l = exf.length;
|
|
5886
|
+
wbytes(d, b, +k);
|
|
5887
|
+
wbytes(d, b + 2, l);
|
|
5888
|
+
d.set(exf, b + 4), b += 4 + l;
|
|
5889
|
+
}
|
|
5890
|
+
}
|
|
5891
|
+
if (col)
|
|
5892
|
+
d.set(co, b), b += col;
|
|
5893
|
+
return b;
|
|
5894
|
+
};
|
|
5895
|
+
var wzf = function(o, b, c, d, e) {
|
|
5896
|
+
wbytes(o, b, 101010256);
|
|
5897
|
+
wbytes(o, b + 8, c);
|
|
5898
|
+
wbytes(o, b + 10, c);
|
|
5899
|
+
wbytes(o, b + 12, d);
|
|
5900
|
+
wbytes(o, b + 16, e);
|
|
5901
|
+
};
|
|
5902
|
+
function zipSync(data, opts) {
|
|
5903
|
+
if (!opts)
|
|
5904
|
+
opts = {};
|
|
5905
|
+
var r = {};
|
|
5906
|
+
var files = [];
|
|
5907
|
+
fltn(data, "", r, opts);
|
|
5908
|
+
var o = 0;
|
|
5909
|
+
var tot = 0;
|
|
5910
|
+
for (var fn in r) {
|
|
5911
|
+
var _a2 = r[fn], file = _a2[0], p = _a2[1];
|
|
5912
|
+
var compression = p.level == 0 ? 0 : 8;
|
|
5913
|
+
var f = strToU8(fn), s = f.length;
|
|
5914
|
+
var com = p.comment, m = com && strToU8(com), ms = m && m.length;
|
|
5915
|
+
var exl = exfl(p.extra);
|
|
5916
|
+
if (s > 65535)
|
|
5917
|
+
err(11);
|
|
5918
|
+
var d = compression ? deflateSync(file, p) : file, l = d.length;
|
|
5919
|
+
var c = crc();
|
|
5920
|
+
c.p(file);
|
|
5921
|
+
files.push(mrg(p, {
|
|
5922
|
+
size: file.length,
|
|
5923
|
+
crc: c.d(),
|
|
5924
|
+
c: d,
|
|
5925
|
+
f,
|
|
5926
|
+
m,
|
|
5927
|
+
u: s != fn.length || m && com.length != ms,
|
|
5928
|
+
o,
|
|
5929
|
+
compression
|
|
5930
|
+
}));
|
|
5931
|
+
o += 30 + s + exl + l;
|
|
5932
|
+
tot += 76 + 2 * (s + exl) + (ms || 0) + l;
|
|
5933
|
+
}
|
|
5934
|
+
var out = new u8(tot + 22), oe = o, cdl = tot - o;
|
|
5935
|
+
for (var i = 0; i < files.length; ++i) {
|
|
5936
|
+
var f = files[i];
|
|
5937
|
+
wzh(out, f.o, f, f.f, f.u, f.c.length);
|
|
5938
|
+
var badd = 30 + f.f.length + exfl(f.extra);
|
|
5939
|
+
out.set(f.c, f.o + badd);
|
|
5940
|
+
wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);
|
|
5941
|
+
}
|
|
5942
|
+
wzf(out, o, files.length, cdl, oe);
|
|
5943
|
+
return out;
|
|
5944
|
+
}
|
|
5449
5945
|
function unzipSync(data, opts) {
|
|
5450
5946
|
var files = {};
|
|
5451
5947
|
var e = data.length - 22;
|
|
@@ -5480,7 +5976,7 @@ function unzipSync(data, opts) {
|
|
|
5480
5976
|
}
|
|
5481
5977
|
return files;
|
|
5482
5978
|
}
|
|
5483
|
-
const SH_C0 = 0.28209479177387814;
|
|
5979
|
+
const SH_C0$1 = 0.28209479177387814;
|
|
5484
5980
|
const COEFFS_PER_BAND = [3, 8, 15];
|
|
5485
5981
|
function lerp(a, b, t) {
|
|
5486
5982
|
return a + (b - a) * t;
|
|
@@ -5627,9 +6123,9 @@ async function deserializeSOG(data, onProgress) {
|
|
|
5627
6123
|
rotations[i * 4 + 1] = qX;
|
|
5628
6124
|
rotations[i * 4 + 2] = qY;
|
|
5629
6125
|
rotations[i * 4 + 3] = qZ;
|
|
5630
|
-
colors[i * 3 + 0] = 0.5 + dcCB[sh0Img.data[off + 0]] * SH_C0;
|
|
5631
|
-
colors[i * 3 + 1] = 0.5 + dcCB[sh0Img.data[off + 1]] * SH_C0;
|
|
5632
|
-
colors[i * 3 + 2] = 0.5 + dcCB[sh0Img.data[off + 2]] * SH_C0;
|
|
6126
|
+
colors[i * 3 + 0] = 0.5 + dcCB[sh0Img.data[off + 0]] * SH_C0$1;
|
|
6127
|
+
colors[i * 3 + 1] = 0.5 + dcCB[sh0Img.data[off + 1]] * SH_C0$1;
|
|
6128
|
+
colors[i * 3 + 2] = 0.5 + dcCB[sh0Img.data[off + 2]] * SH_C0$1;
|
|
5633
6129
|
opacities[i] = sh0Img.data[off + 3] / 255;
|
|
5634
6130
|
if (shCoeffs && shPalette && labelsImg) {
|
|
5635
6131
|
const lOff = (py * labelsImg.width + px) * 4;
|
|
@@ -5650,6 +6146,258 @@ async function deserializeSOG(data, onProgress) {
|
|
|
5650
6146
|
if (onProgress) onProgress(95, "parse");
|
|
5651
6147
|
return { count, positions, scales, rotations, colors, opacities, shCoeffs };
|
|
5652
6148
|
}
|
|
6149
|
+
const SH_C0 = 0.28209479177387814;
|
|
6150
|
+
function symLog(x) {
|
|
6151
|
+
return Math.sign(x) * Math.log(1 + Math.abs(x));
|
|
6152
|
+
}
|
|
6153
|
+
function buildCodebook(values, size = 256, iterations = 8) {
|
|
6154
|
+
if (values.length === 0) return new Array(size).fill(0);
|
|
6155
|
+
const sorted = Float32Array.from(values).sort();
|
|
6156
|
+
const codebook = new Float64Array(size);
|
|
6157
|
+
for (let i = 0; i < size; i++) {
|
|
6158
|
+
codebook[i] = sorted[Math.floor(i / (size - 1) * (sorted.length - 1))];
|
|
6159
|
+
}
|
|
6160
|
+
const assignments = new Uint8Array(values.length);
|
|
6161
|
+
for (let iter = 0; iter < iterations; iter++) {
|
|
6162
|
+
for (let i = 0; i < values.length; i++) {
|
|
6163
|
+
let bestIdx = 0;
|
|
6164
|
+
let bestDist = Math.abs(values[i] - codebook[0]);
|
|
6165
|
+
for (let j = 1; j < size; j++) {
|
|
6166
|
+
const d = Math.abs(values[i] - codebook[j]);
|
|
6167
|
+
if (d < bestDist) {
|
|
6168
|
+
bestDist = d;
|
|
6169
|
+
bestIdx = j;
|
|
6170
|
+
}
|
|
6171
|
+
}
|
|
6172
|
+
assignments[i] = bestIdx;
|
|
6173
|
+
}
|
|
6174
|
+
const sums = new Float64Array(size);
|
|
6175
|
+
const counts = new Uint32Array(size);
|
|
6176
|
+
for (let i = 0; i < values.length; i++) {
|
|
6177
|
+
sums[assignments[i]] += values[i];
|
|
6178
|
+
counts[assignments[i]]++;
|
|
6179
|
+
}
|
|
6180
|
+
for (let j = 0; j < size; j++) {
|
|
6181
|
+
if (counts[j] > 0) codebook[j] = sums[j] / counts[j];
|
|
6182
|
+
}
|
|
6183
|
+
}
|
|
6184
|
+
return Array.from(codebook);
|
|
6185
|
+
}
|
|
6186
|
+
function findNearest(codebook, value) {
|
|
6187
|
+
let bestIdx = 0;
|
|
6188
|
+
let bestDist = Math.abs(value - codebook[0]);
|
|
6189
|
+
for (let j = 1; j < codebook.length; j++) {
|
|
6190
|
+
const d = Math.abs(value - codebook[j]);
|
|
6191
|
+
if (d < bestDist) {
|
|
6192
|
+
bestDist = d;
|
|
6193
|
+
bestIdx = j;
|
|
6194
|
+
}
|
|
6195
|
+
}
|
|
6196
|
+
return bestIdx;
|
|
6197
|
+
}
|
|
6198
|
+
function calcImageDimensions(count) {
|
|
6199
|
+
const width = Math.ceil(Math.sqrt(count));
|
|
6200
|
+
const height = Math.ceil(count / width);
|
|
6201
|
+
return { width, height };
|
|
6202
|
+
}
|
|
6203
|
+
async function encodeWebP(width, height, pixelData) {
|
|
6204
|
+
let canvas;
|
|
6205
|
+
let ctx;
|
|
6206
|
+
if (typeof OffscreenCanvas !== "undefined") {
|
|
6207
|
+
canvas = new OffscreenCanvas(width, height);
|
|
6208
|
+
ctx = canvas.getContext("2d");
|
|
6209
|
+
} else {
|
|
6210
|
+
canvas = document.createElement("canvas");
|
|
6211
|
+
canvas.width = width;
|
|
6212
|
+
canvas.height = height;
|
|
6213
|
+
ctx = canvas.getContext("2d");
|
|
6214
|
+
}
|
|
6215
|
+
const imageData = ctx.createImageData(width, height);
|
|
6216
|
+
imageData.data.set(pixelData);
|
|
6217
|
+
ctx.putImageData(imageData, 0, 0);
|
|
6218
|
+
let blob;
|
|
6219
|
+
if (canvas instanceof OffscreenCanvas) {
|
|
6220
|
+
blob = await canvas.convertToBlob({ type: "image/webp", quality: 1 });
|
|
6221
|
+
} else {
|
|
6222
|
+
blob = await new Promise((resolve, reject) => {
|
|
6223
|
+
canvas.toBlob(
|
|
6224
|
+
(b) => b ? resolve(b) : reject(new Error("toBlob failed")),
|
|
6225
|
+
"image/webp",
|
|
6226
|
+
1
|
|
6227
|
+
);
|
|
6228
|
+
});
|
|
6229
|
+
}
|
|
6230
|
+
return new Uint8Array(await blob.arrayBuffer());
|
|
6231
|
+
}
|
|
6232
|
+
async function serializeSOG(data, coordinateSystem = "blender") {
|
|
6233
|
+
const { count, colors, opacities } = data;
|
|
6234
|
+
let { positions, scales, rotations } = data;
|
|
6235
|
+
if (coordinateSystem === "blender") {
|
|
6236
|
+
positions = new Float32Array(positions);
|
|
6237
|
+
scales = new Float32Array(scales);
|
|
6238
|
+
rotations = new Float32Array(rotations);
|
|
6239
|
+
for (let i = 0; i < count; i++) {
|
|
6240
|
+
const i3 = i * 3, i4 = i * 4;
|
|
6241
|
+
const py = positions[i3 + 1], pz = positions[i3 + 2];
|
|
6242
|
+
positions[i3 + 1] = -pz;
|
|
6243
|
+
positions[i3 + 2] = py;
|
|
6244
|
+
const sy = scales[i3 + 1], sz = scales[i3 + 2];
|
|
6245
|
+
scales[i3 + 1] = sz;
|
|
6246
|
+
scales[i3 + 2] = sy;
|
|
6247
|
+
const ry = rotations[i4 + 2], rz = rotations[i4 + 3];
|
|
6248
|
+
rotations[i4 + 2] = -rz;
|
|
6249
|
+
rotations[i4 + 3] = ry;
|
|
6250
|
+
}
|
|
6251
|
+
}
|
|
6252
|
+
const { width, height } = calcImageDimensions(count);
|
|
6253
|
+
const totalPixels = width * height;
|
|
6254
|
+
const logPositions = new Float32Array(count * 3);
|
|
6255
|
+
for (let i = 0; i < count * 3; i++) {
|
|
6256
|
+
logPositions[i] = symLog(positions[i]);
|
|
6257
|
+
}
|
|
6258
|
+
const mins = [Infinity, Infinity, Infinity];
|
|
6259
|
+
const maxs = [-Infinity, -Infinity, -Infinity];
|
|
6260
|
+
for (let i = 0; i < count; i++) {
|
|
6261
|
+
for (let c = 0; c < 3; c++) {
|
|
6262
|
+
const v = logPositions[i * 3 + c];
|
|
6263
|
+
if (v < mins[c]) mins[c] = v;
|
|
6264
|
+
if (v > maxs[c]) maxs[c] = v;
|
|
6265
|
+
}
|
|
6266
|
+
}
|
|
6267
|
+
const meansLData = new Uint8ClampedArray(totalPixels * 4);
|
|
6268
|
+
const meansUData = new Uint8ClampedArray(totalPixels * 4);
|
|
6269
|
+
meansLData.fill(255);
|
|
6270
|
+
meansUData.fill(255);
|
|
6271
|
+
for (let i = 0; i < count; i++) {
|
|
6272
|
+
const off = i * 4;
|
|
6273
|
+
for (let c = 0; c < 3; c++) {
|
|
6274
|
+
const range = maxs[c] - mins[c];
|
|
6275
|
+
const norm = range < 1e-10 ? 0 : (logPositions[i * 3 + c] - mins[c]) / range;
|
|
6276
|
+
const q16 = Math.round(norm * 65535);
|
|
6277
|
+
meansLData[off + c] = q16 & 255;
|
|
6278
|
+
meansUData[off + c] = q16 >> 8 & 255;
|
|
6279
|
+
}
|
|
6280
|
+
meansLData[off + 3] = 255;
|
|
6281
|
+
meansUData[off + 3] = 255;
|
|
6282
|
+
}
|
|
6283
|
+
const logScales = new Float32Array(count * 3);
|
|
6284
|
+
for (let i = 0; i < count * 3; i++) {
|
|
6285
|
+
logScales[i] = Math.log(Math.max(1e-8, scales[i]));
|
|
6286
|
+
}
|
|
6287
|
+
const scaleCodebook = buildCodebook(logScales);
|
|
6288
|
+
const scalesData = new Uint8ClampedArray(totalPixels * 4);
|
|
6289
|
+
scalesData.fill(255);
|
|
6290
|
+
for (let i = 0; i < count; i++) {
|
|
6291
|
+
const off = i * 4;
|
|
6292
|
+
scalesData[off + 0] = findNearest(scaleCodebook, logScales[i * 3 + 0]);
|
|
6293
|
+
scalesData[off + 1] = findNearest(scaleCodebook, logScales[i * 3 + 1]);
|
|
6294
|
+
scalesData[off + 2] = findNearest(scaleCodebook, logScales[i * 3 + 2]);
|
|
6295
|
+
scalesData[off + 3] = 255;
|
|
6296
|
+
}
|
|
6297
|
+
const quatsData = new Uint8ClampedArray(totalPixels * 4);
|
|
6298
|
+
quatsData.fill(255);
|
|
6299
|
+
const SQRT2 = Math.SQRT2;
|
|
6300
|
+
for (let i = 0; i < count; i++) {
|
|
6301
|
+
const off = i * 4;
|
|
6302
|
+
let qw = rotations[i * 4 + 0];
|
|
6303
|
+
let qx = rotations[i * 4 + 1];
|
|
6304
|
+
let qy = rotations[i * 4 + 2];
|
|
6305
|
+
let qz = rotations[i * 4 + 3];
|
|
6306
|
+
const comps = [qw, qx, qy, qz];
|
|
6307
|
+
let largest = 0;
|
|
6308
|
+
let largestAbs = Math.abs(comps[0]);
|
|
6309
|
+
for (let j = 1; j < 4; j++) {
|
|
6310
|
+
const a = Math.abs(comps[j]);
|
|
6311
|
+
if (a > largestAbs) {
|
|
6312
|
+
largestAbs = a;
|
|
6313
|
+
largest = j;
|
|
6314
|
+
}
|
|
6315
|
+
}
|
|
6316
|
+
if (comps[largest] < 0) {
|
|
6317
|
+
qw = -qw;
|
|
6318
|
+
qx = -qx;
|
|
6319
|
+
qy = -qy;
|
|
6320
|
+
qz = -qz;
|
|
6321
|
+
}
|
|
6322
|
+
let r0, r1, r2;
|
|
6323
|
+
if (largest === 0) {
|
|
6324
|
+
r0 = qx;
|
|
6325
|
+
r1 = qy;
|
|
6326
|
+
r2 = qz;
|
|
6327
|
+
} else if (largest === 1) {
|
|
6328
|
+
r0 = qw;
|
|
6329
|
+
r1 = qy;
|
|
6330
|
+
r2 = qz;
|
|
6331
|
+
} else if (largest === 2) {
|
|
6332
|
+
r0 = qw;
|
|
6333
|
+
r1 = qx;
|
|
6334
|
+
r2 = qz;
|
|
6335
|
+
} else {
|
|
6336
|
+
r0 = qw;
|
|
6337
|
+
r1 = qx;
|
|
6338
|
+
r2 = qy;
|
|
6339
|
+
}
|
|
6340
|
+
quatsData[off + 0] = Math.round(Math.max(0, Math.min(255, (r0 / SQRT2 + 0.5) * 255)));
|
|
6341
|
+
quatsData[off + 1] = Math.round(Math.max(0, Math.min(255, (r1 / SQRT2 + 0.5) * 255)));
|
|
6342
|
+
quatsData[off + 2] = Math.round(Math.max(0, Math.min(255, (r2 / SQRT2 + 0.5) * 255)));
|
|
6343
|
+
quatsData[off + 3] = largest + 252;
|
|
6344
|
+
}
|
|
6345
|
+
const dcValues = new Float32Array(count * 3);
|
|
6346
|
+
for (let i = 0; i < count; i++) {
|
|
6347
|
+
dcValues[i * 3 + 0] = (colors[i * 3 + 0] - 0.5) / SH_C0;
|
|
6348
|
+
dcValues[i * 3 + 1] = (colors[i * 3 + 1] - 0.5) / SH_C0;
|
|
6349
|
+
dcValues[i * 3 + 2] = (colors[i * 3 + 2] - 0.5) / SH_C0;
|
|
6350
|
+
}
|
|
6351
|
+
const dcCodebook = buildCodebook(dcValues);
|
|
6352
|
+
const sh0Data = new Uint8ClampedArray(totalPixels * 4);
|
|
6353
|
+
sh0Data.fill(255);
|
|
6354
|
+
for (let i = 0; i < count; i++) {
|
|
6355
|
+
const off = i * 4;
|
|
6356
|
+
sh0Data[off + 0] = findNearest(dcCodebook, dcValues[i * 3 + 0]);
|
|
6357
|
+
sh0Data[off + 1] = findNearest(dcCodebook, dcValues[i * 3 + 1]);
|
|
6358
|
+
sh0Data[off + 2] = findNearest(dcCodebook, dcValues[i * 3 + 2]);
|
|
6359
|
+
sh0Data[off + 3] = Math.round(Math.max(0, Math.min(255, opacities[i] * 255)));
|
|
6360
|
+
}
|
|
6361
|
+
const [meansLWebP, meansUWebP, scalesWebP, quatsWebP, sh0WebP] = await Promise.all([
|
|
6362
|
+
encodeWebP(width, height, meansLData),
|
|
6363
|
+
encodeWebP(width, height, meansUData),
|
|
6364
|
+
encodeWebP(width, height, scalesData),
|
|
6365
|
+
encodeWebP(width, height, quatsData),
|
|
6366
|
+
encodeWebP(width, height, sh0Data)
|
|
6367
|
+
]);
|
|
6368
|
+
const meta = {
|
|
6369
|
+
version: 2,
|
|
6370
|
+
asset: { generator: "d5techs/3dgs-lib" },
|
|
6371
|
+
count,
|
|
6372
|
+
antialias: false,
|
|
6373
|
+
means: {
|
|
6374
|
+
mins,
|
|
6375
|
+
maxs,
|
|
6376
|
+
files: ["means_l.webp", "means_u.webp"]
|
|
6377
|
+
},
|
|
6378
|
+
scales: {
|
|
6379
|
+
codebook: scaleCodebook,
|
|
6380
|
+
files: ["scales.webp"]
|
|
6381
|
+
},
|
|
6382
|
+
quats: {
|
|
6383
|
+
files: ["quats.webp"]
|
|
6384
|
+
},
|
|
6385
|
+
sh0: {
|
|
6386
|
+
codebook: dcCodebook,
|
|
6387
|
+
files: ["sh0.webp"]
|
|
6388
|
+
}
|
|
6389
|
+
};
|
|
6390
|
+
const metaBytes = new TextEncoder().encode(JSON.stringify(meta));
|
|
6391
|
+
const zipData = zipSync({
|
|
6392
|
+
"meta.json": metaBytes,
|
|
6393
|
+
"means_l.webp": meansLWebP,
|
|
6394
|
+
"means_u.webp": meansUWebP,
|
|
6395
|
+
"scales.webp": scalesWebP,
|
|
6396
|
+
"quats.webp": quatsWebP,
|
|
6397
|
+
"sh0.webp": sh0WebP
|
|
6398
|
+
}, { level: 0 });
|
|
6399
|
+
return zipData.buffer;
|
|
6400
|
+
}
|
|
5653
6401
|
const WORKGROUP_SIZE$1 = 256;
|
|
5654
6402
|
const RADIX_BITS = 8;
|
|
5655
6403
|
const RADIX_SIZE = 256;
|
|
@@ -16453,6 +17201,50 @@ class SplatEditor {
|
|
|
16453
17201
|
const { positions, scales, rotations, colors, opacities, shCoeffs } = this.compactData;
|
|
16454
17202
|
return exportEditedPLY(positions, scales, rotations, colors, opacities, shCoeffs ?? null, this.splatState);
|
|
16455
17203
|
}
|
|
17204
|
+
async exportSOG() {
|
|
17205
|
+
if (!this.compactData) return null;
|
|
17206
|
+
const filtered = this.getFilteredCompactData();
|
|
17207
|
+
if (!filtered) return null;
|
|
17208
|
+
return serializeSOG(filtered);
|
|
17209
|
+
}
|
|
17210
|
+
getFilteredCompactData() {
|
|
17211
|
+
if (!this.compactData) return null;
|
|
17212
|
+
const src = this.compactData;
|
|
17213
|
+
const { count, data } = this.splatState;
|
|
17214
|
+
let keepCount = 0;
|
|
17215
|
+
for (let i = 0; i < count; i++) {
|
|
17216
|
+
if (!(data[i] & State.deleted)) keepCount++;
|
|
17217
|
+
}
|
|
17218
|
+
if (keepCount === 0) return null;
|
|
17219
|
+
if (keepCount === count) return src;
|
|
17220
|
+
const positions = new Float32Array(keepCount * 3);
|
|
17221
|
+
const scales = new Float32Array(keepCount * 3);
|
|
17222
|
+
const rotations = new Float32Array(keepCount * 4);
|
|
17223
|
+
const colors = new Float32Array(keepCount * 3);
|
|
17224
|
+
const opacities = new Float32Array(keepCount);
|
|
17225
|
+
let dst = 0;
|
|
17226
|
+
for (let i = 0; i < count; i++) {
|
|
17227
|
+
if (data[i] & State.deleted) continue;
|
|
17228
|
+
const i3 = i * 3, d3 = dst * 3;
|
|
17229
|
+
positions[d3] = src.positions[i3];
|
|
17230
|
+
positions[d3 + 1] = src.positions[i3 + 1];
|
|
17231
|
+
positions[d3 + 2] = src.positions[i3 + 2];
|
|
17232
|
+
scales[d3] = src.scales[i3];
|
|
17233
|
+
scales[d3 + 1] = src.scales[i3 + 1];
|
|
17234
|
+
scales[d3 + 2] = src.scales[i3 + 2];
|
|
17235
|
+
colors[d3] = src.colors[i3];
|
|
17236
|
+
colors[d3 + 1] = src.colors[i3 + 1];
|
|
17237
|
+
colors[d3 + 2] = src.colors[i3 + 2];
|
|
17238
|
+
const i4 = i * 4, d4 = dst * 4;
|
|
17239
|
+
rotations[d4] = src.rotations[i4];
|
|
17240
|
+
rotations[d4 + 1] = src.rotations[i4 + 1];
|
|
17241
|
+
rotations[d4 + 2] = src.rotations[i4 + 2];
|
|
17242
|
+
rotations[d4 + 3] = src.rotations[i4 + 3];
|
|
17243
|
+
opacities[dst] = src.opacities[i];
|
|
17244
|
+
dst++;
|
|
17245
|
+
}
|
|
17246
|
+
return { count: keepCount, positions, scales, rotations, colors, opacities };
|
|
17247
|
+
}
|
|
16456
17248
|
downloadPLY(filename = "edited.ply") {
|
|
16457
17249
|
const buffer = this.exportPLY();
|
|
16458
17250
|
if (!buffer) return;
|
|
@@ -17789,5 +18581,6 @@ exports.loadTextureFromBuffer = loadTextureFromBuffer;
|
|
|
17789
18581
|
exports.loadTextureFromURL = loadTextureFromURL;
|
|
17790
18582
|
exports.mergeBoundingBoxes = mergeBoundingBoxes;
|
|
17791
18583
|
exports.parsePLYBuffer = parsePLYBuffer;
|
|
18584
|
+
exports.serializeSOG = serializeSOG;
|
|
17792
18585
|
exports.transformBoundingBox = transformBoundingBox;
|
|
17793
18586
|
//# sourceMappingURL=3dgs-lib.cjs.map
|