rayzee 5.1.0 → 5.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/rayzee.es.js CHANGED
@@ -243,7 +243,7 @@ var Kt = q(bt(Gt)), qt = z(.61803398875), Jt = z(.38196601125), Yt = /* @__PURE_
243
243
  shouldExecuteThisFrame(e) {
244
244
  if (!this.enabled) return !1;
245
245
  let t = e.getState("renderMode") || 0, n = e.getState("tileRenderingComplete");
246
- switch (e.getState("frame"), this.executionMode) {
246
+ switch (this.executionMode) {
247
247
  case fn.ALWAYS: return !0;
248
248
  case fn.PER_CYCLE: return t === 0 ? !0 : n === !0;
249
249
  case fn.PER_TILE: return !0;
@@ -1335,33 +1335,40 @@ function Yn(e, t, n) {
1335
1335
  return .2126 * e + .7152 * t + .0722 * n;
1336
1336
  }
1337
1337
  function Xn(e) {
1338
- let { width: t, height: n, data: r } = e.image;
1339
- if (!r) throw Error("EquirectHDRInfo: Environment map must have CPU-accessible image data. Render target textures are not supported.");
1340
- let i;
1341
- if (e.type === D && r instanceof Float32Array) i = new Float32Array(r);
1338
+ return e <= .04045 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4;
1339
+ }
1340
+ function Zn(e) {
1341
+ let { width: t, height: n } = e.image, r = e.image.data, i = !1;
1342
+ if (!r) {
1343
+ let a = new OffscreenCanvas(t, n).getContext("2d");
1344
+ a.drawImage(e.image, 0, 0, t, n), r = a.getImageData(0, 0, t, n).data, i = !0;
1345
+ }
1346
+ let a;
1347
+ if (e.type === D && r instanceof Float32Array) a = new Float32Array(r);
1342
1348
  else if (e.type === k) {
1343
- i = new Float32Array(r.length);
1344
- for (let e = 0, t = r.length; e < t; e++) i[e] = x.fromHalfFloat(r[e]);
1349
+ a = new Float32Array(r.length);
1350
+ for (let e = 0, t = r.length; e < t; e++) a[e] = x.fromHalfFloat(r[e]);
1345
1351
  } else {
1346
1352
  let e;
1347
- e = r instanceof Int8Array || r instanceof Int16Array || r instanceof Int32Array ? 2 ** (8 * r.BYTES_PER_ELEMENT - 1) - 1 : 2 ** (8 * r.BYTES_PER_ELEMENT) - 1, i = new Float32Array(r.length);
1348
- for (let t = 0, n = r.length; t < n; t++) i[t] = r[t] / e;
1353
+ e = r instanceof Int8Array || r instanceof Int16Array || r instanceof Int32Array ? 2 ** (8 * r.BYTES_PER_ELEMENT - 1) - 1 : 2 ** (8 * r.BYTES_PER_ELEMENT) - 1, a = new Float32Array(r.length);
1354
+ for (let t = 0, n = r.length; t < n; t++) a[t] = r[t] / e;
1349
1355
  }
1356
+ if (!i && e.colorSpace === De && (i = !0), i) for (let e = 0, t = a.length; e < t; e += 4) a[e] = Xn(a[e]), a[e + 1] = Xn(a[e + 1]), a[e + 2] = Xn(a[e + 2]);
1350
1357
  if (e.flipY) {
1351
- let e = new Float32Array(i.length);
1358
+ let e = new Float32Array(a.length);
1352
1359
  for (let r = 0; r < n; r++) {
1353
- let a = n - r - 1, o = r * t * 4, s = a * t * 4;
1354
- e.set(i.subarray(o, o + t * 4), s);
1360
+ let i = n - r - 1, o = r * t * 4, s = i * t * 4;
1361
+ e.set(a.subarray(o, o + t * 4), s);
1355
1362
  }
1356
- i = e;
1363
+ a = e;
1357
1364
  }
1358
1365
  return {
1359
- floatData: i,
1366
+ floatData: a,
1360
1367
  width: t,
1361
1368
  height: n
1362
1369
  };
1363
1370
  }
1364
- var Zn = class e {
1371
+ var Qn = class e {
1365
1372
  constructor() {
1366
1373
  this.marginalData = new Float32Array([0, 1]), this.conditionalData = new Float32Array([
1367
1374
  0,
@@ -1374,11 +1381,11 @@ var Zn = class e {
1374
1381
  this.marginalData = null, this.conditionalData = null, this._worker &&= (this._worker.terminate(), null);
1375
1382
  }
1376
1383
  updateFrom(t) {
1377
- let { floatData: n, width: r, height: i } = Xn(t), a = e.computeCDF(n, r, i);
1384
+ let { floatData: n, width: r, height: i } = Zn(t), a = e.computeCDF(n, r, i);
1378
1385
  this.marginalData = a.marginalData, this.conditionalData = a.conditionalData, this.totalSum = a.totalSum, this.width = r, this.height = i;
1379
1386
  }
1380
1387
  async updateFromAsync(e) {
1381
- let { floatData: t, width: n, height: r } = Xn(e);
1388
+ let { floatData: t, width: n, height: r } = Zn(e);
1382
1389
  this._worker ||= new Worker(new URL(
1383
1390
  /* @vite-ignore */
1384
1391
  "" + new URL("assets/CDFWorker-2MoynL4F.js", import.meta.url).href,
@@ -1419,37 +1426,37 @@ var Zn = class e {
1419
1426
  totalSum: a
1420
1427
  };
1421
1428
  }
1422
- }, Qn = Math.PI, $n = Math.PI * 2, er = Math.E, tr = [
1429
+ }, $n = Math.PI, er = Math.PI * 2, tr = Math.E, nr = [
1423
1430
  5804542996261093e-21,
1424
1431
  13562911419845635e-21,
1425
1432
  30265902468824876e-21
1426
- ], nr = [
1433
+ ], rr = [
1427
1434
  183999185144339.78,
1428
1435
  277980239196605.28,
1429
1436
  407904795438610.94
1430
- ], rr = 1.6110731556870734, ir = 1.5, ar = 1e3, or = 8400, sr = 1250, cr = .9999566769464484, lr = .05968310365946075, ur = .07957747154594767;
1431
- function dr(e) {
1432
- return ar * Math.max(0, 1 - er ** +(-(rr - Math.acos(Math.max(-1, Math.min(1, e)))) / ir));
1433
- }
1437
+ ], ir = 1.6110731556870734, ar = 1.5, or = 1e3, sr = 8400, cr = 1250, lr = .9999566769464484, ur = .05968310365946075, dr = .07957747154594767;
1434
1438
  function fr(e) {
1439
+ return or * Math.max(0, 1 - tr ** +(-(ir - Math.acos(Math.max(-1, Math.min(1, e)))) / ar));
1440
+ }
1441
+ function pr(e) {
1435
1442
  let t = .2 * e * 1e-17;
1436
1443
  return [
1437
- .434 * t * nr[0],
1438
- .434 * t * nr[1],
1439
- .434 * t * nr[2]
1444
+ .434 * t * rr[0],
1445
+ .434 * t * rr[1],
1446
+ .434 * t * rr[2]
1440
1447
  ];
1441
1448
  }
1442
- function pr(e) {
1443
- return lr * (1 + e ** 2);
1449
+ function mr(e) {
1450
+ return ur * (1 + e ** 2);
1444
1451
  }
1445
- function mr(e, t) {
1452
+ function hr(e, t) {
1446
1453
  let n = t * t;
1447
- return ur * ((1 - n) / (1 - 2 * t * e + n) ** 1.5);
1454
+ return dr * ((1 - n) / (1 - 2 * t * e + n) ** 1.5);
1448
1455
  }
1449
- function hr(e, t) {
1456
+ function gr(e, t) {
1450
1457
  return e[0] * t[0] + e[1] * t[1] + e[2] * t[2];
1451
1458
  }
1452
- function gr(e) {
1459
+ function _r(e) {
1453
1460
  let t = Math.sqrt(e[0] * e[0] + e[1] * e[1] + e[2] * e[2]);
1454
1461
  return t === 0 ? [
1455
1462
  0,
@@ -1461,28 +1468,28 @@ function gr(e) {
1461
1468
  e[2] / t
1462
1469
  ];
1463
1470
  }
1464
- function _r(e, t, n, r, i, a, o, s) {
1465
- let c = (1 - t) * Qn, l = (e - .5) * $n, u = Math.sin(c), d = gr([
1471
+ function vr(e, t, n, r, i, a, o, s) {
1472
+ let c = (1 - t) * $n, l = (e - .5) * er, u = Math.sin(c), d = _r([
1466
1473
  u * Math.sin(l),
1467
1474
  Math.cos(c),
1468
1475
  u * Math.cos(l)
1469
- ]), f = gr(n), p = dr(f[1]) * r, m = i - 1 * (1 - (1 - Math.max(0, Math.min(1, 1 - Math.exp(f[1] / 45e4))))), h = [
1470
- tr[0] * m,
1471
- tr[1] * m,
1472
- tr[2] * m
1473
- ], g = fr(s), _ = [
1476
+ ]), f = _r(n), p = fr(f[1]) * r, m = i - 1 * (1 - (1 - Math.max(0, Math.min(1, 1 - Math.exp(f[1] / 45e4))))), h = [
1477
+ nr[0] * m,
1478
+ nr[1] * m,
1479
+ nr[2] * m
1480
+ ], g = pr(s), _ = [
1474
1481
  g[0] * a,
1475
1482
  g[1] * a,
1476
1483
  g[2] * a
1477
- ], v = Math.acos(Math.max(0, d[1])), y = Math.cos(v) + .15 * (93.885 - 180 / Qn * v) ** -1.253, b = or / y, x = sr / y, S = [
1484
+ ], v = Math.acos(Math.max(0, d[1])), y = Math.cos(v) + .15 * (93.885 - 180 / $n * v) ** -1.253, b = sr / y, x = cr / y, S = [
1478
1485
  Math.exp(-(h[0] * b + _[0] * x)),
1479
1486
  Math.exp(-(h[1] * b + _[1] * x)),
1480
1487
  Math.exp(-(h[2] * b + _[2] * x))
1481
- ], C = hr(d, f), w = pr(C * .5 + .5), T = [
1488
+ ], C = gr(d, f), w = mr(C * .5 + .5), T = [
1482
1489
  h[0] * w,
1483
1490
  h[1] * w,
1484
1491
  h[2] * w
1485
- ], E = mr(C, o), D = [
1492
+ ], E = hr(C, o), D = [
1486
1493
  _[0] * E,
1487
1494
  _[1] * E,
1488
1495
  _[2] * E
@@ -1511,7 +1518,7 @@ function _r(e, t, n, r, i, a, o, s) {
1511
1518
  .1 * S[0],
1512
1519
  .1 * S[1],
1513
1520
  .1 * S[2]
1514
- ], ie = vr(cr, cr + 2e-5, C);
1521
+ ], ie = yr(lr, lr + 2e-5, C);
1515
1522
  for (let e = 0; e < 3; e++) re[e] += p * 19e3 * S[e] * ie;
1516
1523
  let ae = 65504;
1517
1524
  return [
@@ -1521,11 +1528,11 @@ function _r(e, t, n, r, i, a, o, s) {
1521
1528
  1
1522
1529
  ];
1523
1530
  }
1524
- function vr(e, t, n) {
1531
+ function yr(e, t, n) {
1525
1532
  let r = Math.max(0, Math.min(1, (n - e) / (t - e)));
1526
1533
  return r * r * (3 - 2 * r);
1527
1534
  }
1528
- var yr = class {
1535
+ var br = class {
1529
1536
  constructor(e = 512, t = 256) {
1530
1537
  this.width = e, this.height = t, this.lastRenderTime = 0, this._pixels = new Float32Array(e * t * 4), this._texture = new b(this._pixels, e, t, Se, D), this._texture.mapping = T, this._texture.colorSpace = ee, this._texture.minFilter = A, this._texture.magFilter = A, this._texture.wrapS = Ee, this._texture.wrapT = _, this._texture.generateMipmaps = !1;
1531
1538
  }
@@ -1538,7 +1545,7 @@ var yr = class {
1538
1545
  for (let e = 0; e < l; e++) {
1539
1546
  let t = (e + .5) / l;
1540
1547
  for (let l = 0; l < c; l++) {
1541
- let d = _r((l + .5) / c, t, n, r, i, a, o, s), f = (e * c + l) * 4;
1548
+ let d = vr((l + .5) / c, t, n, r, i, a, o, s), f = (e * c + l) * 4;
1542
1549
  u[f] = d[0], u[f + 1] = d[1], u[f + 2] = d[2], u[f + 3] = d[3];
1543
1550
  }
1544
1551
  }
@@ -1553,7 +1560,7 @@ var yr = class {
1553
1560
  dispose() {
1554
1561
  this._texture.dispose();
1555
1562
  }
1556
- }, br = class {
1563
+ }, xr = class {
1557
1564
  constructor(e = 512, t = 256) {
1558
1565
  this.width = e, this.height = t, this.lastRenderTime = 0, this._pixels = new Float32Array(e * t * 4), this._texture = new b(this._pixels, e, t, Se, D), this._texture.mapping = T, this._texture.colorSpace = ee, this._texture.minFilter = A, this._texture.magFilter = A, this._texture.wrapS = Ee, this._texture.wrapT = _, this._texture.generateMipmaps = !1;
1559
1566
  }
@@ -1592,9 +1599,9 @@ var yr = class {
1592
1599
  dispose() {
1593
1600
  this._texture.dispose();
1594
1601
  }
1595
- }, xr = class {
1602
+ }, Sr = class {
1596
1603
  constructor(e, t) {
1597
- this.scene = e, this.uniforms = t, this.equirectHdrInfo = new Zn(), this.proceduralSkyRenderer = null, this.simpleSkyRenderer = null, this._envPlaceholder = new b(new Float32Array([
1604
+ this.scene = e, this.uniforms = t, this.equirectHdrInfo = new Qn(), this.proceduralSkyRenderer = null, this.simpleSkyRenderer = null, this._envPlaceholder = new b(new Float32Array([
1598
1605
  0,
1599
1606
  0,
1600
1607
  0,
@@ -1674,7 +1681,7 @@ var yr = class {
1674
1681
  }
1675
1682
  try {
1676
1683
  let t = performance.now(), n = this.scene.environment;
1677
- if (!n.image || !n.image.data) {
1684
+ if (!n.image) {
1678
1685
  this._updateCDFStorageBuffers(), this.uniforms.set("envTotalSum", 0), this.uniforms.set("useEnvMapIS", 0);
1679
1686
  return;
1680
1687
  }
@@ -1695,7 +1702,7 @@ var yr = class {
1695
1702
  t && e && t.envTex && (t.envTex.value = e), e && !e._isGeneratedProcedural && this.uniforms.set("hasSun", 0), this._notifyReset();
1696
1703
  }
1697
1704
  async generateGradientTexture() {
1698
- this.simpleSkyRenderer ||= new br(512, 256);
1705
+ this.simpleSkyRenderer ||= new xr(512, 256);
1699
1706
  let e = {
1700
1707
  zenithColor: this.envParams.gradientZenithColor,
1701
1708
  horizonColor: this.envParams.gradientHorizonColor,
@@ -1709,7 +1716,7 @@ var yr = class {
1709
1716
  }
1710
1717
  }
1711
1718
  async generateSolidColorTexture() {
1712
- this.simpleSkyRenderer ||= new br(512, 256);
1719
+ this.simpleSkyRenderer ||= new xr(512, 256);
1713
1720
  let e = { color: this.envParams.solidSkyColor };
1714
1721
  try {
1715
1722
  let t = this.simpleSkyRenderer.renderSolid(e);
@@ -1719,7 +1726,7 @@ var yr = class {
1719
1726
  }
1720
1727
  }
1721
1728
  async generateProceduralSkyTexture() {
1722
- this.proceduralSkyRenderer ||= new yr(512, 256);
1729
+ this.proceduralSkyRenderer ||= new br(512, 256);
1723
1730
  let e = {
1724
1731
  sunDirection: this.envParams.skySunDirection.clone(),
1725
1732
  sunIntensity: this.envParams.skySunIntensity * .05,
@@ -1748,23 +1755,23 @@ var yr = class {
1748
1755
  };
1749
1756
  //#endregion
1750
1757
  //#region src/TSL/structProxy.js
1751
- function Sr(e, t) {
1758
+ function Cr(e, t) {
1752
1759
  return new Proxy(e, { get(e, n, r) {
1753
1760
  if (typeof n == "string" && t.has(n)) return e.get(n);
1754
1761
  let i = Reflect.get(e, n, r);
1755
- return n === "toVar" && typeof i == "function" ? (...n) => Sr(i.apply(e, n), t) : i;
1762
+ return n === "toVar" && typeof i == "function" ? (...n) => Cr(i.apply(e, n), t) : i;
1756
1763
  } });
1757
1764
  }
1758
- function Cr(e, t = null) {
1759
- let n = _t(e, t), r = new Set(Object.keys(e)), i = (...e) => Sr(n(...e), r);
1760
- return i.layout = n.layout, i.isStruct = !0, i.wrap = (e) => Sr(e, r), i;
1765
+ function wr(e, t = null) {
1766
+ let n = _t(e, t), r = new Set(Object.keys(e)), i = (...e) => Cr(n(...e), r);
1767
+ return i.layout = n.layout, i.isStruct = !0, i.wrap = (e) => Cr(e, r), i;
1761
1768
  }
1762
1769
  //#endregion
1763
1770
  //#region src/TSL/Struct.js
1764
- var wr = Cr({
1771
+ var Tr = wr({
1765
1772
  origin: "vec3",
1766
1773
  direction: "vec3"
1767
- }), Tr = Cr({
1774
+ }), Er = wr({
1768
1775
  color: "vec4",
1769
1776
  emissive: "vec3",
1770
1777
  emissiveIntensity: "float",
@@ -1810,12 +1817,12 @@ var wr = Cr({
1810
1817
  iridescenceIOR: "float",
1811
1818
  iridescenceThicknessRange: "vec2"
1812
1819
  });
1813
- Cr({
1820
+ wr({
1814
1821
  position: "vec3",
1815
1822
  radius: "float",
1816
- material: Tr
1823
+ material: Er
1817
1824
  });
1818
- var Er = Cr({
1825
+ var Dr = wr({
1819
1826
  didHit: "bool",
1820
1827
  dst: "float",
1821
1828
  hitPoint: "vec3",
@@ -1827,7 +1834,7 @@ var Er = Cr({
1827
1834
  boxTests: "int",
1828
1835
  triTests: "int"
1829
1836
  });
1830
- Cr({
1837
+ wr({
1831
1838
  posA: "vec3",
1832
1839
  posB: "vec3",
1833
1840
  posC: "vec3",
@@ -1837,44 +1844,44 @@ Cr({
1837
1844
  normalA: "vec3",
1838
1845
  normalB: "vec3",
1839
1846
  normalC: "vec3",
1840
- material: Tr,
1847
+ material: Er,
1841
1848
  materialIndex: "int",
1842
1849
  meshIndex: "int"
1843
- }), Cr({
1850
+ }), wr({
1844
1851
  color: "vec4",
1845
1852
  samples: "int"
1846
1853
  });
1847
- var Dr = Cr({
1854
+ var Or = wr({
1848
1855
  direction: "vec3",
1849
1856
  value: "vec3",
1850
1857
  pdf: "float"
1851
- }), Or = Cr({
1858
+ }), kr = wr({
1852
1859
  specular: "float",
1853
1860
  diffuse: "float",
1854
1861
  sheen: "float",
1855
1862
  clearcoat: "float",
1856
1863
  transmission: "float",
1857
1864
  iridescence: "float"
1858
- }), kr = Cr({
1865
+ }), Ar = wr({
1859
1866
  diffuseImportance: "float",
1860
1867
  specularImportance: "float",
1861
1868
  transmissionImportance: "float",
1862
1869
  clearcoatImportance: "float",
1863
1870
  envmapImportance: "float"
1864
- }), Ar = Cr({
1871
+ }), jr = wr({
1865
1872
  NoL: "float",
1866
1873
  NoV: "float",
1867
1874
  NoH: "float",
1868
1875
  VoH: "float",
1869
1876
  LoH: "float"
1870
- }), jr = Cr({
1877
+ }), Mr = wr({
1871
1878
  albedo: "vec4",
1872
1879
  emissive: "vec3",
1873
1880
  metalness: "float",
1874
1881
  roughness: "float",
1875
1882
  normal: "vec3",
1876
1883
  hasTextures: "bool"
1877
- }), Mr = Cr({
1884
+ }), Nr = wr({
1878
1885
  isMetallic: "bool",
1879
1886
  isRough: "bool",
1880
1887
  isSmooth: "bool",
@@ -1882,7 +1889,7 @@ var Dr = Cr({
1882
1889
  hasClearcoat: "bool",
1883
1890
  isEmissive: "bool",
1884
1891
  complexityScore: "float"
1885
- }), Nr = Cr({
1892
+ }), Pr = wr({
1886
1893
  albedoUV: "vec2",
1887
1894
  normalUV: "vec2",
1888
1895
  metalnessUV: "vec2",
@@ -1893,7 +1900,7 @@ var Dr = Cr({
1893
1900
  metalRoughSameUV: "bool",
1894
1901
  albedoEmissiveSameUV: "bool",
1895
1902
  allSameUV: "bool"
1896
- }), Pr = Cr({
1903
+ }), Fr = wr({
1897
1904
  F0: "vec3",
1898
1905
  NoV: "float",
1899
1906
  diffuseColor: "vec3",
@@ -1915,11 +1922,11 @@ var Dr = Cr({
1915
1922
  iorFactor: "float",
1916
1923
  maxSheenColor: "float"
1917
1924
  });
1918
- Cr({
1919
- brdfWeights: Or,
1920
- samplingInfo: kr,
1921
- materialCache: Pr,
1922
- materialClass: Mr,
1925
+ wr({
1926
+ brdfWeights: kr,
1927
+ samplingInfo: Ar,
1928
+ materialCache: Fr,
1929
+ materialClass: Nr,
1923
1930
  weightsComputed: "bool",
1924
1931
  texturesLoaded: "bool",
1925
1932
  classificationCached: "bool",
@@ -1927,7 +1934,7 @@ Cr({
1927
1934
  pathImportance: "float",
1928
1935
  lastMaterialIndex: "int"
1929
1936
  });
1930
- var Fr = Cr({
1937
+ var Ir = wr({
1931
1938
  envWeight: "float",
1932
1939
  specularWeight: "float",
1933
1940
  diffuseWeight: "float",
@@ -1939,14 +1946,14 @@ var Fr = Cr({
1939
1946
  useDiffuse: "bool",
1940
1947
  useTransmission: "bool",
1941
1948
  useClearcoat: "bool"
1942
- }), Ir = Cr({
1949
+ }), Lr = wr({
1943
1950
  brdfWeight: "float",
1944
1951
  lightWeight: "float",
1945
1952
  envWeight: "float",
1946
1953
  useBRDFSampling: "bool",
1947
1954
  useLightSampling: "bool",
1948
1955
  useEnvSampling: "bool"
1949
- }), Lr = Cr({
1956
+ }), Rr = wr({
1950
1957
  diffuse: "float",
1951
1958
  specular: "float",
1952
1959
  clearcoat: "float",
@@ -1955,45 +1962,45 @@ var Fr = Cr({
1955
1962
  iridescence: "float",
1956
1963
  totalWeight: "float"
1957
1964
  });
1958
- Cr({
1965
+ wr({
1959
1966
  traversals: "int",
1960
1967
  transmissiveTraversals: "int",
1961
1968
  rayType: "int",
1962
1969
  isPrimaryRay: "bool",
1963
1970
  actualBounceDepth: "int"
1964
- }), Cr({
1971
+ }), wr({
1965
1972
  gColor: "vec4",
1966
1973
  gNormalDepth: "vec4",
1967
1974
  gAlbedo: "vec4"
1968
1975
  });
1969
1976
  //#endregion
1970
1977
  //#region src/TSL/Common.js
1971
- var Rr = 3.14159, zr = 1 / Rr, Br = 2 * Rr, Vr = 1e-6, Hr = .05, Ur = .089, Wr = .001, Gr = J(.2126, .7152, .0722), Kr = it(3.2404542, -.969266, .0556434, -1.5371385, 1.8760108, -.2040259, -.4985314, .041556, 1.0572252);
1978
+ var zr = 3.14159, Br = 1 / zr, Vr = 2 * zr, Hr = 1e-6, Ur = .05, Wr = .089, Gr = .001, Kr = J(.2126, .7152, .0722), qr = it(3.2404542, -.969266, .0556434, -1.5371385, 1.8760108, -.2040259, -.4985314, .041556, 1.0572252);
1972
1979
  X("\n fn sRGBToLinear( srgbColor: vec3f ) -> vec3f {\n\n return pow( srgbColor, vec3f( 2.2 ) );\n\n }\n"), X("\n fn gammaCorrection( color: vec3f ) -> vec3f {\n\n return pow( color, vec3f( 1.0 / 2.2 ) );\n\n }\n");
1973
- var qr = X("\n fn square( x: f32 ) -> f32 {\n\n return x * x;\n\n }\n");
1980
+ var Jr = X("\n fn square( x: f32 ) -> f32 {\n\n return x * x;\n\n }\n");
1974
1981
  X("\n fn squareVec3( x: vec3f ) -> vec3f {\n\n return x * x;\n\n }\n");
1975
- var Jr = X("\n fn maxComponent( v: vec3f ) -> f32 {\n\n return max( max( v.r, v.g ), v.b );\n\n }\n");
1982
+ var Yr = X("\n fn maxComponent( v: vec3f ) -> f32 {\n\n return max( max( v.r, v.g ), v.b );\n\n }\n");
1976
1983
  X("\n fn minComponent( v: vec3f ) -> f32 {\n\n return min( min( v.r, v.g ), v.b );\n\n }\n");
1977
- var Yr = X("\n fn luminance( color: vec3f ) -> f32 {\n\n return dot( color, vec3f( 0.2126, 0.7152, 0.0722 ) );\n\n }\n"), Xr = X(`
1984
+ var Xr = X("\n fn luminance( color: vec3f ) -> f32 {\n\n return dot( color, vec3f( 0.2126, 0.7152, 0.0722 ) );\n\n }\n"), Zr = X(`
1978
1985
  fn powerHeuristic( pdf1: f32, pdf2: f32 ) -> f32 {
1979
1986
 
1980
1987
  let p1 = pdf1 * pdf1;
1981
1988
  let p2 = pdf2 * pdf2;
1982
- return p1 / max( p1 + p2, ${Wr} );
1989
+ return p1 / max( p1 + p2, ${Gr} );
1983
1990
 
1984
1991
  }
1985
1992
  `);
1986
1993
  X("\n fn applyDithering( color: vec3f, uv: vec2f, ditheringAmount: f32, resolution: vec2f ) -> vec3f {\n\n let bayerRow0 = vec4f( 0.0 / 16.0, 8.0 / 16.0, 2.0 / 16.0, 10.0 / 16.0 );\n let bayerRow1 = vec4f( 12.0 / 16.0, 4.0 / 16.0, 14.0 / 16.0, 6.0 / 16.0 );\n let bayerRow2 = vec4f( 3.0 / 16.0, 11.0 / 16.0, 1.0 / 16.0, 9.0 / 16.0 );\n let bayerRow3 = vec4f( 15.0 / 16.0, 7.0 / 16.0, 13.0 / 16.0, 5.0 / 16.0 );\n let bayer = mat4x4f( bayerRow0, bayerRow1, bayerRow2, bayerRow3 );\n\n let pixelCoord = vec2i( uv * resolution );\n let dither = bayer[ pixelCoord.x % 4 ][ pixelCoord.y % 4 ];\n\n return color + ( dither - 0.5 ) * ditheringAmount / 255.0;\n\n }\n"), X("\n fn reduceFireflies( color: vec3f, maxValue: f32 ) -> vec3f {\n\n let lum = dot( color, vec3f( 0.2126, 0.7152, 0.0722 ) );\n if ( lum > maxValue ) {\n return color * ( maxValue / lum );\n }\n return color;\n\n }\n");
1987
- var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3f;\n if ( abs( N.x ) < 0.999 ) {\n majorAxis = vec3f( 1.0, 0.0, 0.0 );\n } else {\n majorAxis = vec3f( 0.0, 1.0, 0.0 );\n }\n let T = normalize( cross( N, majorAxis ) );\n let B = normalize( cross( N, T ) );\n return mat3x3f( T, B, N );\n\n }\n"), Qr = M(([e, t, n]) => {
1994
+ var Qr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3f;\n if ( abs( N.x ) < 0.999 ) {\n majorAxis = vec3f( 1.0, 0.0, 0.0 );\n } else {\n majorAxis = vec3f( 0.0, 1.0, 0.0 );\n }\n let T = normalize( cross( N, majorAxis ) );\n let B = normalize( cross( N, T ) );\n return mat3x3f( T, B, N );\n\n }\n"), $r = M(([e, t, n]) => {
1988
1995
  let r = t.add(n).toVar(), i = R(r, r).toVar();
1989
- return r.assign(i.greaterThan(Vr).select(r.div(i.sqrt()), J(0, 0, 1))), Ar({
1996
+ return r.assign(i.greaterThan(Hr).select(r.div(i.sqrt()), J(0, 0, 1))), jr({
1990
1997
  NoL: V(R(e, n), .001),
1991
1998
  NoV: V(R(e, t), .001),
1992
1999
  NoH: V(R(e, r), .001),
1993
2000
  VoH: V(R(t, r), .001),
1994
2001
  LoH: V(R(n, r), .001)
1995
2002
  });
1996
- }), $r = X("\n fn calculateFireflyThreshold( baseThreshold: f32, bounceIndex: i32, frame: i32 ) -> f32 {\n\n let depthFactor = 1.0 / ( 1.0 + f32( bounceIndex ) * 0.1 );\n let relaxation = sqrt( f32( frame + 1 ) );\n return baseThreshold * depthFactor * relaxation;\n\n }\n"), ei = X("\n fn applySoftSuppression( value: f32, threshold: f32, dampingFactor: f32 ) -> f32 {\n\n if ( value <= threshold ) {\n return value;\n }\n let excess = value - threshold;\n let suppressionFactor = threshold / ( threshold + excess * dampingFactor );\n return value * suppressionFactor;\n\n }\n"), ti = X(`
2003
+ }), ei = X("\n fn calculateFireflyThreshold( baseThreshold: f32, bounceIndex: i32, frame: i32 ) -> f32 {\n\n let depthFactor = 1.0 / ( 1.0 + f32( bounceIndex ) * 0.1 );\n let relaxation = sqrt( f32( frame + 1 ) );\n return baseThreshold * depthFactor * relaxation;\n\n }\n"), ti = X("\n fn applySoftSuppression( value: f32, threshold: f32, dampingFactor: f32 ) -> f32 {\n\n if ( value <= threshold ) {\n return value;\n }\n let excess = value - threshold;\n let suppressionFactor = threshold / ( threshold + excess * dampingFactor );\n return value * suppressionFactor;\n\n }\n"), ni = X(`
1997
2004
  fn applySoftSuppressionRGB( color: vec3f, threshold: f32, dampingFactor: f32 ) -> vec3f {
1998
2005
 
1999
2006
  let lum = dot( color, vec3f( 0.2126, 0.7152, 0.0722 ) );
@@ -2001,13 +2008,13 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
2001
2008
  return color;
2002
2009
  }
2003
2010
  let suppressedLum = applySoftSuppression( lum, threshold, dampingFactor );
2004
- if ( lum > ${Vr} ) {
2011
+ if ( lum > ${Hr} ) {
2005
2012
  return color * ( suppressedLum / lum );
2006
2013
  }
2007
2014
  return color;
2008
2015
 
2009
2016
  }
2010
- `, [ei]), ni = M(([e, t, n, r, i]) => {
2017
+ `, [ti]), ri = M(([e, t, n, r, i]) => {
2011
2018
  let a = e.greaterThan(.7).toVar(), o = t.greaterThan(.8).toVar(), s = t.lessThan(.3).toVar(), c = n.greaterThan(.5).toVar(), l = r.greaterThan(.5).toVar(), u = i.x.add(i.y).add(i.z).greaterThan(0).toVar(), d = z(.15).mul(z(a)).add(z(.25).mul(z(s))).add(z(.45).mul(z(c))).add(z(.35).mul(z(l))).add(z(.3).mul(z(u))).toVar(), f = z(0).toVar();
2012
2019
  return N(a.and(s), () => {
2013
2020
  f.addAssign(.15);
@@ -2015,7 +2022,7 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
2015
2022
  f.addAssign(.2);
2016
2023
  }), N(u.and(c.or(a)), () => {
2017
2024
  f.addAssign(.1);
2018
- }), Mr({
2025
+ }), Nr({
2019
2026
  isMetallic: a,
2020
2027
  isRough: o,
2021
2028
  isSmooth: s,
@@ -2024,15 +2031,15 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
2024
2031
  isEmissive: u,
2025
2032
  complexityScore: L(d.add(f), 0, 1)
2026
2033
  });
2027
- }), ri = M(([e, t, n, r, i]) => {
2028
- let a = Jr({ v: i }).toVar(), o = z(.5).toVar(), s = z(.5).toVar(), c = I(!0), l = a.greaterThan(.01).toVar();
2034
+ }), ii = M(([e, t, n, r, i]) => {
2035
+ let a = Yr({ v: i }).toVar(), o = z(.5).toVar(), s = z(.5).toVar(), c = I(!0), l = a.greaterThan(.01).toVar();
2029
2036
  return N(e.lessThan(.1).and(t.greaterThan(.8)), () => {
2030
2037
  o.assign(.7), s.assign(.3);
2031
2038
  }).ElseIf(e.greaterThan(.7), () => {
2032
2039
  o.assign(.4), s.assign(.6);
2033
2040
  }), N(r.greaterThan(B(5)), () => {
2034
2041
  o.assign(.6), s.assign(.4);
2035
- }), Ir({
2042
+ }), Lr({
2036
2043
  brdfWeight: o,
2037
2044
  lightWeight: s,
2038
2045
  envWeight: z(0),
@@ -2043,9 +2050,9 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
2043
2050
  }), $ = M(([e, t, n, r]) => {
2044
2051
  let i = t.mul(r).add(n);
2045
2052
  return e.element(i);
2046
- }), ii = X("\n fn arrayToMat3( data1: vec4f, data2: vec4f ) -> mat3x3f {\n\n return mat3x3f(\n data1.xyz,\n vec3f( data1.w, data2.xy ),\n vec3f( data2.zw, 1.0 )\n );\n\n }\n"), ai = M(([e, t]) => {
2053
+ }), ai = X("\n fn arrayToMat3( data1: vec4f, data2: vec4f ) -> mat3x3f {\n\n return mat3x3f(\n data1.xyz,\n vec3f( data1.w, data2.xy ),\n vec3f( data2.zw, 1.0 )\n );\n\n }\n"), oi = M(([e, t]) => {
2047
2054
  let n = $(t, e, B(0), B(27)).toVar(), r = $(t, e, B(1), B(27)).toVar(), i = $(t, e, B(2), B(27)).toVar(), a = $(t, e, B(3), B(27)).toVar(), o = $(t, e, B(4), B(27)).toVar(), s = $(t, e, B(5), B(27)).toVar(), c = $(t, e, B(6), B(27)).toVar(), l = $(t, e, B(7), B(27)).toVar(), u = $(t, e, B(8), B(27)).toVar(), d = $(t, e, B(9), B(27)).toVar(), f = $(t, e, B(10), B(27)).toVar(), p = $(t, e, B(11), B(27)).toVar(), m = $(t, e, B(12), B(27)).toVar(), h = $(t, e, B(13), B(27)).toVar(), g = $(t, e, B(14), B(27)).toVar(), _ = $(t, e, B(15), B(27)).toVar(), v = $(t, e, B(16), B(27)).toVar(), y = $(t, e, B(17), B(27)).toVar(), b = $(t, e, B(18), B(27)).toVar(), x = $(t, e, B(19), B(27)).toVar(), S = $(t, e, B(20), B(27)).toVar(), C = $(t, e, B(21), B(27)).toVar(), w = $(t, e, B(22), B(27)).toVar(), T = $(t, e, B(23), B(27)).toVar(), E = $(t, e, B(24), B(27)).toVar(), D = $(t, e, B(25), B(27)).toVar(), O = $(t, e, B(26), B(27)).toVar();
2048
- return Tr({
2055
+ return Er({
2049
2056
  color: Y(n.rgb, 1),
2050
2057
  metalness: n.a,
2051
2058
  emissive: r.rgb,
@@ -2083,44 +2090,44 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
2083
2090
  bumpScale: m.r,
2084
2091
  displacementScale: m.g,
2085
2092
  displacementMapIndex: B(m.b),
2086
- albedoTransform: ii({
2093
+ albedoTransform: ai({
2087
2094
  data1: h,
2088
2095
  data2: g
2089
2096
  }),
2090
- normalTransform: ii({
2097
+ normalTransform: ai({
2091
2098
  data1: _,
2092
2099
  data2: v
2093
2100
  }),
2094
- roughnessTransform: ii({
2101
+ roughnessTransform: ai({
2095
2102
  data1: y,
2096
2103
  data2: b
2097
2104
  }),
2098
- metalnessTransform: ii({
2105
+ metalnessTransform: ai({
2099
2106
  data1: x,
2100
2107
  data2: S
2101
2108
  }),
2102
- emissiveTransform: ii({
2109
+ emissiveTransform: ai({
2103
2110
  data1: C,
2104
2111
  data2: w
2105
2112
  }),
2106
- bumpTransform: ii({
2113
+ bumpTransform: ai({
2107
2114
  data1: T,
2108
2115
  data2: E
2109
2116
  }),
2110
- displacementTransform: ii({
2117
+ displacementTransform: ai({
2111
2118
  data1: D,
2112
2119
  data2: O
2113
2120
  })
2114
2121
  });
2115
- }), oi = /* @__PURE__ */ X("\n fn normalDepthWeight(\n n1: vec3f, n2: vec3f,\n d1: f32, d2: f32,\n phiN: f32, phiD: f32\n ) -> f32 {\n\n let normalW = pow( clamp( dot( n1, n2 ), 0.0, 1.0 ), phiN );\n let depthW = exp( -abs( d1 - d2 ) / max( phiD, 0.001 ) );\n return normalW * depthW;\n\n }\n"), si = 32, ci = 512, li = 4, ui = 8, di = 1e8, fi = null;
2116
- function pi(e) {
2117
- fi = e;
2122
+ }), si = /* @__PURE__ */ X("\n fn normalDepthWeight(\n n1: vec3f, n2: vec3f,\n d1: f32, d2: f32,\n phiN: f32, phiD: f32\n ) -> f32 {\n\n let normalW = pow( clamp( dot( n1, n2 ), 0.0, 1.0 ), phiN );\n let depthW = exp( -abs( d1 - d2 ) / max( phiD, 0.001 ) );\n return normalW * depthW;\n\n }\n"), ci = 32, li = 512, ui = 4, di = 8, fi = 1e8, pi = null;
2123
+ function mi(e) {
2124
+ pi = e;
2118
2125
  }
2119
- var mi = () => Ke("int", si).toVar(), hi = X("\n fn RayTriangleGeometry( rayOrigin: vec3f, rayDir: vec3f, pA: vec3f, pB: vec3f, pC: vec3f, closestHitDst: f32 ) -> vec4f {\n\n // Returns vec4(t, u, v, hit) where hit > 0.5 means intersection\n var result = vec4f( 1e20f, 0.0f, 0.0f, 0.0f );\n\n let edge1 = pB - pA;\n let edge2 = pC - pA;\n let h = cross( rayDir, edge2 );\n let a = dot( edge1, h );\n\n if ( abs( a ) >= 1e-8f ) {\n\n let f = 1.0f / a;\n let s = rayOrigin - pA;\n let u = f * dot( s, h );\n\n if ( u >= 0.0f && u <= 1.0f ) {\n\n let q = cross( s, edge1 );\n let v = f * dot( rayDir, q );\n\n if ( v >= 0.0f && ( u + v ) <= 1.0f ) {\n\n let t = f * dot( edge2, q );\n\n if ( t > 0.0f && t < closestHitDst ) {\n\n result = vec4f( t, u, v, 1.0f );\n\n }\n\n }\n\n }\n\n }\n\n return result;\n\n }\n"), gi = X("\n fn fastRayAABBDst( rayOrigin: vec3f, invDir: vec3f, boxMin: vec3f, boxMax: vec3f ) -> f32 {\n\n let t1 = ( boxMin - rayOrigin ) * invDir;\n let t2 = ( boxMax - rayOrigin ) * invDir;\n\n let tmin = min( t1, t2 );\n let tmax = max( t1, t2 );\n\n let tNear = max( max( tmin.x, tmin.y ), tmin.z );\n let tFar = min( min( tmax.x, tmax.y ), tmax.z ) * 1.00000024f; // Robust traversal: 2 ULP padding (Ize 2013)\n\n let isHit = tNear <= tFar && tFar > 0.0f;\n return select( 1e20f, max( tNear, 0.0f ), isHit );\n\n }\n"), _i = M(([e, t, n, r]) => {
2126
+ var hi = () => Ke("int", ci).toVar(), gi = X("\n fn RayTriangleGeometry( rayOrigin: vec3f, rayDir: vec3f, pA: vec3f, pB: vec3f, pC: vec3f, closestHitDst: f32 ) -> vec4f {\n\n // Returns vec4(t, u, v, hit) where hit > 0.5 means intersection\n var result = vec4f( 1e20f, 0.0f, 0.0f, 0.0f );\n\n let edge1 = pB - pA;\n let edge2 = pC - pA;\n let h = cross( rayDir, edge2 );\n let a = dot( edge1, h );\n\n if ( abs( a ) >= 1e-8f ) {\n\n let f = 1.0f / a;\n let s = rayOrigin - pA;\n let u = f * dot( s, h );\n\n if ( u >= 0.0f && u <= 1.0f ) {\n\n let q = cross( s, edge1 );\n let v = f * dot( rayDir, q );\n\n if ( v >= 0.0f && ( u + v ) <= 1.0f ) {\n\n let t = f * dot( edge2, q );\n\n if ( t > 0.0f && t < closestHitDst ) {\n\n result = vec4f( t, u, v, 1.0f );\n\n }\n\n }\n\n }\n\n }\n\n return result;\n\n }\n"), _i = X("\n fn fastRayAABBDst( rayOrigin: vec3f, invDir: vec3f, boxMin: vec3f, boxMax: vec3f ) -> f32 {\n\n let t1 = ( boxMin - rayOrigin ) * invDir;\n let t2 = ( boxMax - rayOrigin ) * invDir;\n\n let tmin = min( t1, t2 );\n let tmax = max( t1, t2 );\n\n let tNear = max( max( tmin.x, tmin.y ), tmin.z );\n let tFar = min( min( tmax.x, tmax.y ), tmax.z ) * 1.00000024f; // Robust traversal: 2 ULP padding (Ize 2013)\n\n let isHit = tNear <= tFar && tFar > 0.0f;\n return select( 1e20f, max( tNear, 0.0f ), isHit );\n\n }\n"), vi = M(([e, t, n, r]) => {
2120
2127
  let i = B($(r, e, B(10), B(27)).g), a = t.dot(n), o = i.equal(B(2)), s = i.equal(B(0)).and(a.lessThan(-1e-4)), c = i.equal(B(1)).and(a.greaterThan(1e-4));
2121
2128
  return o.or(s).or(c);
2122
- }), vi = M(([e, t, n, r]) => {
2123
- let i = Er({
2129
+ }), yi = M(([e, t, n, r]) => {
2130
+ let i = Dr({
2124
2131
  didHit: !1,
2125
2132
  dst: z(0x56bc75e2d63100000),
2126
2133
  hitPoint: J(0),
@@ -2130,12 +2137,12 @@ var mi = () => Ke("int", si).toVar(), hi = X("\n fn RayTriangleGeometry( rayOrig
2130
2137
  meshIndex: B(-1),
2131
2138
  boxTests: B(0),
2132
2139
  triTests: B(0)
2133
- }).toVar(), a = B(-1).toVar(), o = z(0).toVar(), s = z(0).toVar(), c = mi(), l = B(1).toVar();
2140
+ }).toVar(), a = B(-1).toVar(), o = z(0).toVar(), s = z(0).toVar(), c = hi(), l = B(1).toVar();
2134
2141
  c.element(B(0)).assign(B(0));
2135
- let u = H(J(1), ft(e.direction), st(e.direction, J(0))), d = H(J(1).div(e.direction), J(di).mul(u), tt(F(e.direction), J(1e-8))).toVar(), f = e.origin, p = e.direction, m = B(0).toVar();
2136
- return P(l.greaterThan(B(0)).and(m.lessThan(B(ci))), () => {
2142
+ let u = H(J(1), ft(e.direction), st(e.direction, J(0))), d = H(J(1).div(e.direction), J(fi).mul(u), tt(F(e.direction), J(1e-8))).toVar(), f = e.origin, p = e.direction, m = B(0).toVar();
2143
+ return P(l.greaterThan(B(0)).and(m.lessThan(B(li))), () => {
2137
2144
  m.addAssign(1), l.subAssign(1);
2138
- let e = c.element(l).toVar(), u = $(t, e, B(0), B(li));
2145
+ let e = c.element(l).toVar(), u = $(t, e, B(0), B(ui));
2139
2146
  i.boxTests.addAssign(1), N(u.w.lessThan(0), () => {
2140
2147
  N(u.w.greaterThan(z(-1.5)), () => {
2141
2148
  let e = B(u.x).toVar(), t = B(u.y).toVar();
@@ -2144,7 +2151,7 @@ var mi = () => Ke("int", si).toVar(), hi = X("\n fn RayTriangleGeometry( rayOrig
2144
2151
  end: t
2145
2152
  }, ({ i: t }) => {
2146
2153
  i.triTests.addAssign(1);
2147
- let c = e.add(t).toVar(), l = $(n, c, B(0), B(ui)).xyz, u = $(n, c, B(1), B(ui)).xyz, d = $(n, c, B(2), B(ui)).xyz, m = hi({
2154
+ let c = e.add(t).toVar(), l = $(n, c, B(0), B(di)).xyz, u = $(n, c, B(1), B(di)).xyz, d = $(n, c, B(2), B(di)).xyz, m = gi({
2148
2155
  rayOrigin: f,
2149
2156
  rayDir: p,
2150
2157
  pA: l,
@@ -2153,32 +2160,32 @@ var mi = () => Ke("int", si).toVar(), hi = X("\n fn RayTriangleGeometry( rayOrig
2153
2160
  closestHitDst: i.dst
2154
2161
  });
2155
2162
  N(m.w.greaterThan(.5), () => {
2156
- let e = m.x, t = m.y, l = m.z, u = $(n, c, B(3), B(ui)).xyz, d = $(n, c, B(4), B(ui)).xyz, f = $(n, c, B(5), B(ui)).xyz, h = $(n, c, B(7), B(ui)), g = B(h.z), _ = z(1).sub(t).sub(l), v = U(u.mul(_).add(d.mul(t)).add(f.mul(l))).toVar();
2157
- N(_i(g, p, v, r), () => {
2163
+ let e = m.x, t = m.y, l = m.z, u = $(n, c, B(3), B(di)).xyz, d = $(n, c, B(4), B(di)).xyz, f = $(n, c, B(5), B(di)).xyz, h = $(n, c, B(7), B(di)), g = B(h.z), _ = z(1).sub(t).sub(l), v = U(u.mul(_).add(d.mul(t)).add(f.mul(l))).toVar();
2164
+ N(vi(g, p, v, r), () => {
2158
2165
  i.didHit.assign(!0), i.dst.assign(e), i.normal.assign(v), i.materialIndex.assign(g), i.meshIndex.assign(B(h.w)), a.assign(c), o.assign(t), s.assign(l);
2159
2166
  });
2160
2167
  });
2161
- }), N(i.didHit.and(i.dst.lessThan(.001)), () => {
2168
+ }), N(i.didHit.and(i.dst.lessThan(1e-6)), () => {
2162
2169
  Ve();
2163
2170
  });
2164
2171
  }).Else(() => {
2165
2172
  let e = B(u.x).toVar();
2166
- if (fi) {
2167
- let t = B(u.y).toVar(), n = $(fi, B(1), t, B(0)).x;
2168
- N(n.greaterThan(.5).and(l.lessThan(B(si))), () => {
2173
+ if (pi) {
2174
+ let t = B(u.y).toVar(), n = $(pi, B(1), t, B(0)).x;
2175
+ N(n.greaterThan(.5).and(l.lessThan(B(ci))), () => {
2169
2176
  c.element(l).assign(e), l.addAssign(1);
2170
2177
  });
2171
- } else N(l.lessThan(B(si)), () => {
2178
+ } else N(l.lessThan(B(ci)), () => {
2172
2179
  c.element(l).assign(e), l.addAssign(1);
2173
2180
  });
2174
2181
  });
2175
2182
  }).Else(() => {
2176
- let n = $(t, e, B(1), B(li)), r = $(t, e, B(2), B(li)), a = $(t, e, B(3), B(li)), o = B(u.w).toVar(), s = B(n.w).toVar(), p = gi({
2183
+ let n = $(t, e, B(1), B(ui)), r = $(t, e, B(2), B(ui)), a = $(t, e, B(3), B(ui)), o = B(u.w).toVar(), s = B(n.w).toVar(), p = _i({
2177
2184
  rayOrigin: f,
2178
2185
  invDir: d,
2179
2186
  boxMin: u.xyz,
2180
2187
  boxMax: n.xyz
2181
- }).toVar(), m = gi({
2188
+ }).toVar(), m = _i({
2182
2189
  rayOrigin: f,
2183
2190
  invDir: d,
2184
2191
  boxMin: r.xyz,
@@ -2186,20 +2193,20 @@ var mi = () => Ke("int", si).toVar(), hi = X("\n fn RayTriangleGeometry( rayOrig
2186
2193
  }).toVar();
2187
2194
  N(at(p, m).lessThan(i.dst), () => {
2188
2195
  let e = p.lessThan(m), t = W(e, o, s).toVar(), n = W(e, s, o).toVar();
2189
- N(W(e, m, p).toVar().lessThan(i.dst).and(l.lessThan(B(si))), () => {
2196
+ N(W(e, m, p).toVar().lessThan(i.dst).and(l.lessThan(B(ci))), () => {
2190
2197
  c.element(l).assign(n), l.addAssign(1);
2191
- }), N(l.lessThan(B(si)), () => {
2198
+ }), N(l.lessThan(B(ci)), () => {
2192
2199
  c.element(l).assign(t), l.addAssign(1);
2193
2200
  });
2194
2201
  });
2195
2202
  });
2196
2203
  }), N(i.didHit, () => {
2197
2204
  i.hitPoint.assign(e.origin.add(e.direction.mul(i.dst)));
2198
- let t = z(1).sub(o).sub(s), r = $(n, a, B(6), B(ui)), c = $(n, a, B(7), B(ui));
2205
+ let t = z(1).sub(o).sub(s), r = $(n, a, B(6), B(di)), c = $(n, a, B(7), B(di));
2199
2206
  i.uv.assign(r.xy.mul(t).add(r.zw.mul(o)).add(c.xy.mul(s))), i.triangleIndex.assign(a);
2200
2207
  }), i;
2201
- }), yi = M(([e, t, n, r, i]) => {
2202
- let a = Er({
2208
+ }), bi = M(([e, t, n, r, i]) => {
2209
+ let a = Dr({
2203
2210
  didHit: !1,
2204
2211
  dst: i,
2205
2212
  hitPoint: J(0),
@@ -2209,12 +2216,12 @@ var mi = () => Ke("int", si).toVar(), hi = X("\n fn RayTriangleGeometry( rayOrig
2209
2216
  meshIndex: B(-1),
2210
2217
  boxTests: B(0),
2211
2218
  triTests: B(0)
2212
- }).toVar(), o = mi(), s = B(1).toVar();
2219
+ }).toVar(), o = hi(), s = B(1).toVar();
2213
2220
  o.element(B(0)).assign(B(0));
2214
- let c = H(J(1), ft(e.direction), st(e.direction, J(0))), l = H(J(1).div(e.direction), J(di).mul(c), tt(F(e.direction), J(1e-8))).toVar(), u = B(0).toVar();
2215
- return P(s.greaterThan(B(0)).and(a.didHit.not()).and(u.lessThan(B(ci))), () => {
2221
+ let c = H(J(1), ft(e.direction), st(e.direction, J(0))), l = H(J(1).div(e.direction), J(fi).mul(c), tt(F(e.direction), J(1e-8))).toVar(), u = B(0).toVar();
2222
+ return P(s.greaterThan(B(0)).and(a.didHit.not()).and(u.lessThan(B(li))), () => {
2216
2223
  u.addAssign(1), s.subAssign(1);
2217
- let r = o.element(s).toVar(), i = $(t, r, B(0), B(li));
2224
+ let r = o.element(s).toVar(), i = $(t, r, B(0), B(ui));
2218
2225
  N(i.w.lessThan(0), () => {
2219
2226
  N(i.w.greaterThan(z(-1.5)), () => {
2220
2227
  let t = B(i.x).toVar(), r = B(i.y).toVar();
@@ -2222,7 +2229,7 @@ var mi = () => Ke("int", si).toVar(), hi = X("\n fn RayTriangleGeometry( rayOrig
2222
2229
  start: B(0),
2223
2230
  end: r
2224
2231
  }, ({ i: r }) => {
2225
- let i = t.add(r).toVar(), o = $(n, i, B(0), B(ui)).xyz, s = $(n, i, B(1), B(ui)).xyz, c = $(n, i, B(2), B(ui)).xyz, l = hi({
2232
+ let i = t.add(r).toVar(), o = $(n, i, B(0), B(di)).xyz, s = $(n, i, B(1), B(di)).xyz, c = $(n, i, B(2), B(di)).xyz, l = gi({
2226
2233
  rayOrigin: e.origin,
2227
2234
  rayDir: e.direction,
2228
2235
  pA: o,
@@ -2231,28 +2238,28 @@ var mi = () => Ke("int", si).toVar(), hi = X("\n fn RayTriangleGeometry( rayOrig
2231
2238
  closestHitDst: a.dst
2232
2239
  });
2233
2240
  N(l.w.greaterThan(.5), () => {
2234
- let t = $(n, i, B(7), B(ui));
2241
+ let t = $(n, i, B(7), B(di));
2235
2242
  a.didHit.assign(!0), a.dst.assign(l.x), a.materialIndex.assign(B(t.z)), a.meshIndex.assign(B(t.w)), a.hitPoint.assign(e.origin.add(e.direction.mul(l.x))), a.normal.assign(U(Ye(s.sub(o), c.sub(o)))), Ve();
2236
2243
  });
2237
2244
  });
2238
2245
  }).Else(() => {
2239
2246
  let e = B(i.x).toVar();
2240
- if (fi) {
2241
- let t = B(i.y).toVar(), n = $(fi, B(1), t, B(0)).x;
2242
- N(n.greaterThan(.5).and(s.lessThan(B(si))), () => {
2247
+ if (pi) {
2248
+ let t = B(i.y).toVar(), n = $(pi, B(1), t, B(0)).x;
2249
+ N(n.greaterThan(.5).and(s.lessThan(B(ci))), () => {
2243
2250
  o.element(s).assign(e), s.addAssign(1);
2244
2251
  });
2245
- } else N(s.lessThan(B(si)), () => {
2252
+ } else N(s.lessThan(B(ci)), () => {
2246
2253
  o.element(s).assign(e), s.addAssign(1);
2247
2254
  });
2248
2255
  });
2249
2256
  }).Else(() => {
2250
- let n = $(t, r, B(1), B(li)), c = $(t, r, B(2), B(li)), u = $(t, r, B(3), B(li)), d = B(i.w).toVar(), f = B(n.w).toVar(), p = gi({
2257
+ let n = $(t, r, B(1), B(ui)), c = $(t, r, B(2), B(ui)), u = $(t, r, B(3), B(ui)), d = B(i.w).toVar(), f = B(n.w).toVar(), p = _i({
2251
2258
  rayOrigin: e.origin,
2252
2259
  invDir: l,
2253
2260
  boxMin: i.xyz,
2254
2261
  boxMax: n.xyz
2255
- }).toVar(), m = gi({
2262
+ }).toVar(), m = _i({
2256
2263
  rayOrigin: e.origin,
2257
2264
  invDir: l,
2258
2265
  boxMin: c.xyz,
@@ -2260,69 +2267,69 @@ var mi = () => Ke("int", si).toVar(), hi = X("\n fn RayTriangleGeometry( rayOrig
2260
2267
  }).toVar();
2261
2268
  N(at(p, m).lessThan(a.dst), () => {
2262
2269
  let e = p.lessThan(m), t = W(e, d, f).toVar(), n = W(e, f, d).toVar();
2263
- N(W(e, m, p).toVar().lessThan(a.dst).and(s.lessThan(B(si))), () => {
2270
+ N(W(e, m, p).toVar().lessThan(a.dst).and(s.lessThan(B(ci))), () => {
2264
2271
  o.element(s).assign(n), s.addAssign(1);
2265
- }), N(s.lessThan(B(si)), () => {
2272
+ }), N(s.lessThan(B(ci)), () => {
2266
2273
  o.element(s).assign(t), s.addAssign(1);
2267
2274
  });
2268
2275
  });
2269
2276
  });
2270
2277
  }), a;
2271
- }), bi = M(([e, t, n, r, i, a, o, s, c, l, u]) => {
2278
+ }), xi = M(([e, t, n, r, i, a, o, s, c, l, u]) => {
2272
2279
  let d = J(e.xy, 1), f = r.mul(Y(d, 1)), p = U(it(n[0].xyz, n[1].xyz, n[2].xyz).mul(f.xyz.div(f.w))).toVar(), m = J(n[3]).toVar(), h = m.toVar(), g = p.toVar();
2273
2280
  return N(i.and(a.greaterThan(0)).and(o.lessThan(64)).and(s.greaterThan(.001)), () => {
2274
2281
  let e = m.add(p.mul(s)).toVar(), r = a.div(o).mul(.001).mul(c).mul(l), i = en(t), d = i.x.mul(u.max(.01)), f = i.y, _ = U(J(n[0])), v = U(J(n[1])), y = _.mul(d).add(v.mul(f)).mul(r);
2275
2282
  h.assign(m.add(y)), g.assign(U(e.sub(h)));
2276
- }), wr({
2283
+ }), Tr({
2277
2284
  origin: h,
2278
2285
  direction: g
2279
2286
  });
2280
- }), xi = /* @__PURE__ */ X("\n fn equirectDirectionToUv( direction: vec3f, environmentMatrix: mat4x4f ) -> vec2f {\n let d = normalize( ( environmentMatrix * vec4f( direction, 0.0f ) ).xyz );\n var uv = vec2f( atan2( d.z, d.x ), acos( d.y ) );\n uv = uv / vec2f( 6.28318530717958647692f, 3.14159265358979323846f );\n uv.x = uv.x + 0.5f;\n uv.y = 1.0f - uv.y;\n return uv;\n }\n"), Si = /* @__PURE__ */ X("\n fn equirectUvToDirection( uv: vec2f, environmentMatrix: mat4x4f ) -> vec3f {\n let adjustedUv = vec2f( uv.x - 0.5f, 1.0f - uv.y );\n let theta = adjustedUv.x * 6.28318530717958647692f;\n let phi = adjustedUv.y * 3.14159265358979323846f;\n let sinPhi = sin( phi );\n let localDir = vec3f( sinPhi * cos( theta ), cos( phi ), sinPhi * sin( theta ) );\n return normalize( ( transpose( environmentMatrix ) * vec4f( localDir, 0.0f ) ).xyz );\n }\n");
2281
- M(([e, t, n]) => vt(e, xi({
2287
+ }), Si = /* @__PURE__ */ X("\n fn equirectDirectionToUv( direction: vec3f, environmentMatrix: mat4x4f ) -> vec2f {\n let d = normalize( ( environmentMatrix * vec4f( direction, 0.0f ) ).xyz );\n var uv = vec2f( atan2( d.z, d.x ), acos( d.y ) );\n uv = uv / vec2f( 6.28318530717958647692f, 3.14159265358979323846f );\n uv.x = uv.x + 0.5f;\n uv.y = 1.0f - uv.y;\n return uv;\n }\n"), Ci = /* @__PURE__ */ X("\n fn equirectUvToDirection( uv: vec2f, environmentMatrix: mat4x4f ) -> vec3f {\n let adjustedUv = vec2f( uv.x - 0.5f, 1.0f - uv.y );\n let theta = adjustedUv.x * 6.28318530717958647692f;\n let phi = adjustedUv.y * 3.14159265358979323846f;\n let sinPhi = sin( phi );\n let localDir = vec3f( sinPhi * cos( theta ), cos( phi ), sinPhi * sin( theta ) );\n return normalize( ( transpose( environmentMatrix ) * vec4f( localDir, 0.0f ) ).xyz );\n }\n");
2288
+ M(([e, t, n]) => vt(e, Si({
2282
2289
  direction: t,
2283
2290
  environmentMatrix: n
2284
2291
  }), 0).rgb);
2285
- var Ci = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, environmentMatrix: mat4x4f ) -> f32 {\n let uv = equirectDirectionToUv( direction, environmentMatrix );\n let theta = uv.y * 3.14159265358979323846f;\n let sinTheta = sin( theta );\n if ( sinTheta == 0.0f ) { return 0.0f; }\n return 1.0f / ( 6.28318530717958647692f * 3.14159265358979323846f * sinTheta );\n }\n", [xi]), wi = M(([e, t, n, r, i]) => {
2292
+ var wi = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, environmentMatrix: mat4x4f ) -> f32 {\n let uv = equirectDirectionToUv( direction, environmentMatrix );\n let theta = uv.y * 3.14159265358979323846f;\n let sinTheta = sin( theta );\n if ( sinTheta == 0.0f ) { return 0.0f; }\n return 1.0f / ( 6.28318530717958647692f * 3.14159265358979323846f * sinTheta );\n }\n", [Si]), Ti = M(([e, t, n, r, i]) => {
2286
2293
  let a = Y(0).toVar();
2287
2294
  return N(r.equal(0), () => {
2288
2295
  a.assign(Y(0));
2289
2296
  }).Else(() => {
2290
- let o = vt(e, xi({
2297
+ let o = vt(e, Si({
2291
2298
  direction: t,
2292
2299
  environmentMatrix: n
2293
- }).toVar(), 0).rgb.toVar(), s = R(o, Gr).toVar().div(r).toVar(), c = Ci({
2300
+ }).toVar(), 0).rgb.toVar(), s = R(o, Kr).toVar().div(r).toVar(), c = wi({
2294
2301
  direction: t,
2295
2302
  environmentMatrix: n
2296
2303
  }).toVar(), l = z(i.x).mul(z(i.y)).mul(s).mul(c).toVar();
2297
2304
  a.assign(Y(o, l));
2298
2305
  }), a;
2299
- }), Ti = M(([e, t, n, r, i, a, o, s, c]) => {
2300
- let l = o.y, u = L(s.x.mul(l.sub(1)), 0, l.sub(1)), d = B(Ze(u)), f = at(d.add(1), B(l).sub(1)), p = Qe(u), m = H(t.element(d), t.element(f), p).toVar(), h = o.x, g = o.y, _ = L(s.y.mul(h.sub(1)), 0, h.sub(1)), v = L(m.mul(g.sub(1)), 0, g.sub(1)), y = B(Ze(_)), b = B(Ze(v)), x = at(y.add(1), B(h).sub(1)), S = at(b.add(1), B(g).sub(1)), C = Qe(_), w = Qe(v), T = B(h), E = n.element(b.mul(T).add(y)), D = n.element(b.mul(T).add(x)), O = n.element(S.mul(T).add(y)), k = n.element(S.mul(T).add(x)), A = q(H(H(E, D, C), H(O, k, C), w).toVar(), m).toVar(), ee = Si({
2306
+ }), Ei = M(([e, t, n, r, i, a, o, s, c]) => {
2307
+ let l = o.y, u = L(s.x.mul(l.sub(1)), 0, l.sub(1)), d = B(Ze(u)), f = at(d.add(1), B(l).sub(1)), p = Qe(u), m = H(t.element(d), t.element(f), p).toVar(), h = o.x, g = o.y, _ = L(s.y.mul(h.sub(1)), 0, h.sub(1)), v = L(m.mul(g.sub(1)), 0, g.sub(1)), y = B(Ze(_)), b = B(Ze(v)), x = at(y.add(1), B(h).sub(1)), S = at(b.add(1), B(g).sub(1)), C = Qe(_), w = Qe(v), T = B(h), E = n.element(b.mul(T).add(y)), D = n.element(b.mul(T).add(x)), O = n.element(S.mul(T).add(y)), k = n.element(S.mul(T).add(x)), A = q(H(H(E, D, C), H(O, k, C), w).toVar(), m).toVar(), ee = Ci({
2301
2308
  uv: A,
2302
2309
  environmentMatrix: r
2303
2310
  }).toVar(), te = vt(e, A, 0).rgb.mul(i).toVar();
2304
2311
  c.assign(te);
2305
- let ne = R(te.div(i), Gr).toVar().div(a).toVar(), re = Ci({
2312
+ let ne = R(te.div(i), Kr).toVar().div(a).toVar(), re = wi({
2306
2313
  direction: ee,
2307
2314
  environmentMatrix: r
2308
2315
  }).toVar();
2309
2316
  return Y(ee, z(o.x).mul(z(o.y)).mul(ne).mul(re).toVar());
2310
- }), Ei = /* @__PURE__ */ X("\n fn sampleEnvironment(\n tex: texture_2d<f32>,\n samp: sampler,\n direction: vec3f,\n environmentMatrix: mat4x4f,\n environmentIntensity: f32,\n enableEnvironmentLight: f32\n ) -> vec4f {\n if ( enableEnvironmentLight < 0.5 ) { return vec4f( 0.0 ); }\n let uv = equirectDirectionToUv( direction, environmentMatrix );\n let texSample = textureSampleLevel( tex, samp, uv, 0.0 );\n return texSample * environmentIntensity;\n }\n", [xi]), Di = /* @__PURE__ */ X("\n fn getTransformedUV( uv: vec2f, transform: mat3x3f ) -> vec2f {\n if ( !isIdentityTransform( transform ) ) {\n return fract( vec2f(\n transform[0][0] * uv.x + transform[1][0] * uv.y + transform[2][0],\n transform[0][1] * uv.x + transform[1][1] * uv.y + transform[2][1]\n ) );\n }\n return uv;\n }\n", [/* @__PURE__ */ X("\n fn isIdentityTransform( transform: mat3x3f ) -> bool {\n return transform[0][0] == 1.0f\n && transform[1][1] == 1.0f\n && transform[0][1] == 0.0f\n && transform[1][0] == 0.0f\n && transform[2][0] == 0.0f\n && transform[2][1] == 0.0f;\n }\n")]), Oi = M(([e]) => e.albedoMapIndex.greaterThanEqual(B(0)).or(e.normalMapIndex.greaterThanEqual(B(0))).or(e.roughnessMapIndex.greaterThanEqual(B(0))).or(e.metalnessMapIndex.greaterThanEqual(B(0))).or(e.emissiveMapIndex.greaterThanEqual(B(0))).or(e.bumpMapIndex.greaterThanEqual(B(0))).or(e.displacementMapIndex.greaterThanEqual(B(0)))), ki = /* @__PURE__ */ X("\n fn hashTransform( t: mat3x3f ) -> f32 {\n return t[0][0] + t[1][1] * 7.0f + t[2][0] * 13.0f + t[2][1] * 17.0f;\n }\n"), Ai = M(([e, t]) => {
2311
- let n = ki({ t: t.albedoTransform }).toVar(), r = ki({ t: t.normalTransform }).toVar(), i = ki({ t: t.metalnessTransform }).toVar(), a = ki({ t: t.roughnessTransform }).toVar(), o = ki({ t: t.emissiveTransform }).toVar(), s = ki({ t: t.bumpTransform }).toVar(), c = .001, l = F(n.sub(r)).lessThan(c).toVar(), u = F(r.sub(s)).lessThan(c).toVar(), d = F(i.sub(a)).lessThan(c).toVar(), f = F(n.sub(o)).lessThan(c).toVar(), p = l.and(F(n.sub(i)).lessThan(c)).and(F(n.sub(o)).lessThan(c)).and(F(n.sub(s)).lessThan(c)).toVar(), m = q(0).toVar(), h = q(0).toVar(), g = q(0).toVar(), _ = q(0).toVar(), v = q(0).toVar(), y = q(0).toVar(), b = u.or(p).toVar(), x = d.or(p).toVar(), S = f.or(p).toVar();
2317
+ }), Di = /* @__PURE__ */ X("\n fn sampleEnvironment(\n tex: texture_2d<f32>,\n samp: sampler,\n direction: vec3f,\n environmentMatrix: mat4x4f,\n environmentIntensity: f32,\n enableEnvironmentLight: f32\n ) -> vec4f {\n if ( enableEnvironmentLight < 0.5 ) { return vec4f( 0.0 ); }\n let uv = equirectDirectionToUv( direction, environmentMatrix );\n let texSample = textureSampleLevel( tex, samp, uv, 0.0 );\n return texSample * environmentIntensity;\n }\n", [Si]), Oi = /* @__PURE__ */ X("\n fn getTransformedUV( uv: vec2f, transform: mat3x3f ) -> vec2f {\n if ( !isIdentityTransform( transform ) ) {\n return fract( vec2f(\n transform[0][0] * uv.x + transform[1][0] * uv.y + transform[2][0],\n transform[0][1] * uv.x + transform[1][1] * uv.y + transform[2][1]\n ) );\n }\n return uv;\n }\n", [/* @__PURE__ */ X("\n fn isIdentityTransform( transform: mat3x3f ) -> bool {\n return transform[0][0] == 1.0f\n && transform[1][1] == 1.0f\n && transform[0][1] == 0.0f\n && transform[1][0] == 0.0f\n && transform[2][0] == 0.0f\n && transform[2][1] == 0.0f;\n }\n")]), ki = M(([e]) => e.albedoMapIndex.greaterThanEqual(B(0)).or(e.normalMapIndex.greaterThanEqual(B(0))).or(e.roughnessMapIndex.greaterThanEqual(B(0))).or(e.metalnessMapIndex.greaterThanEqual(B(0))).or(e.emissiveMapIndex.greaterThanEqual(B(0))).or(e.bumpMapIndex.greaterThanEqual(B(0))).or(e.displacementMapIndex.greaterThanEqual(B(0)))), Ai = /* @__PURE__ */ X("\n fn hashTransform( t: mat3x3f ) -> f32 {\n return t[0][0] + t[1][1] * 7.0f + t[2][0] * 13.0f + t[2][1] * 17.0f;\n }\n"), ji = M(([e, t]) => {
2318
+ let n = Ai({ t: t.albedoTransform }).toVar(), r = Ai({ t: t.normalTransform }).toVar(), i = Ai({ t: t.metalnessTransform }).toVar(), a = Ai({ t: t.roughnessTransform }).toVar(), o = Ai({ t: t.emissiveTransform }).toVar(), s = Ai({ t: t.bumpTransform }).toVar(), c = .001, l = F(n.sub(r)).lessThan(c).toVar(), u = F(r.sub(s)).lessThan(c).toVar(), d = F(i.sub(a)).lessThan(c).toVar(), f = F(n.sub(o)).lessThan(c).toVar(), p = l.and(F(n.sub(i)).lessThan(c)).and(F(n.sub(o)).lessThan(c)).and(F(n.sub(s)).lessThan(c)).toVar(), m = q(0).toVar(), h = q(0).toVar(), g = q(0).toVar(), _ = q(0).toVar(), v = q(0).toVar(), y = q(0).toVar(), b = u.or(p).toVar(), x = d.or(p).toVar(), S = f.or(p).toVar();
2312
2319
  return N(p, () => {
2313
- let n = Di({
2320
+ let n = Oi({
2314
2321
  uv: e,
2315
2322
  transform: t.albedoTransform
2316
2323
  });
2317
2324
  m.assign(n), h.assign(n), g.assign(n), _.assign(n), v.assign(n), y.assign(n);
2318
2325
  }).Else(() => {
2319
- m.assign(Di({
2326
+ m.assign(Oi({
2320
2327
  uv: e,
2321
2328
  transform: t.albedoTransform
2322
- })), h.assign(l.select(m, Di({
2329
+ })), h.assign(l.select(m, Oi({
2323
2330
  uv: e,
2324
2331
  transform: t.normalTransform
2325
- }))), v.assign(f.select(m, Di({
2332
+ }))), v.assign(f.select(m, Oi({
2326
2333
  uv: e,
2327
2334
  transform: t.emissiveTransform
2328
2335
  }))), N(u, () => {
@@ -2330,12 +2337,12 @@ var Ci = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
2330
2337
  }).ElseIf(F(s.sub(n)).lessThan(c), () => {
2331
2338
  y.assign(m);
2332
2339
  }).Else(() => {
2333
- y.assign(Di({
2340
+ y.assign(Oi({
2334
2341
  uv: e,
2335
2342
  transform: t.bumpTransform
2336
2343
  }));
2337
2344
  }), N(d, () => {
2338
- g.assign(Di({
2345
+ g.assign(Oi({
2339
2346
  uv: e,
2340
2347
  transform: t.metalnessTransform
2341
2348
  })), _.assign(g);
@@ -2345,7 +2352,7 @@ var Ci = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
2345
2352
  }).ElseIf(F(i.sub(r)).lessThan(c), () => {
2346
2353
  g.assign(h);
2347
2354
  }).Else(() => {
2348
- g.assign(Di({
2355
+ g.assign(Oi({
2349
2356
  uv: e,
2350
2357
  transform: t.metalnessTransform
2351
2358
  }));
@@ -2356,13 +2363,13 @@ var Ci = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
2356
2363
  }).ElseIf(F(a.sub(i)).lessThan(c), () => {
2357
2364
  _.assign(g);
2358
2365
  }).Else(() => {
2359
- _.assign(Di({
2366
+ _.assign(Oi({
2360
2367
  uv: e,
2361
2368
  transform: t.roughnessTransform
2362
2369
  }));
2363
2370
  });
2364
2371
  });
2365
- }), Nr({
2372
+ }), Pr({
2366
2373
  albedoUV: m,
2367
2374
  normalUV: h,
2368
2375
  metalnessUV: g,
@@ -2374,13 +2381,13 @@ var Ci = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
2374
2381
  metalRoughSameUV: x,
2375
2382
  albedoEmissiveSameUV: S
2376
2383
  });
2377
- }), ji = M(([e, t, n]) => {
2384
+ }), Mi = M(([e, t, n]) => {
2378
2385
  let r = t.color.toVar();
2379
2386
  return N(t.albedoMapIndex.greaterThanEqual(B(0)), () => {
2380
2387
  let i = vt(e, n.albedoUV).depth(B(t.albedoMapIndex)).toVar();
2381
2388
  r.assign(Y(t.color.rgb.mul(i.rgb), t.color.a.mul(i.a)));
2382
2389
  }), r;
2383
- }), Mi = M(([e, t, n, r]) => {
2390
+ }), Ni = M(([e, t, n, r]) => {
2384
2391
  let i = n.metalness.toVar(), a = n.roughness.toVar();
2385
2392
  return N(n.metalnessMapIndex.greaterThanEqual(B(0)).and(n.metalnessMapIndex.equal(n.roughnessMapIndex)), () => {
2386
2393
  let t = vt(e, r.metalnessUV).depth(B(n.metalnessMapIndex));
@@ -2394,7 +2401,7 @@ var Ci = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
2394
2401
  a.assign(n.roughness.mul(e.g));
2395
2402
  });
2396
2403
  }), q(i, a);
2397
- }), Ni = M(([e, t, n, r]) => {
2404
+ }), Pi = M(([e, t, n, r]) => {
2398
2405
  let i = t.toVar();
2399
2406
  return N(n.normalMapIndex.greaterThanEqual(B(0)), () => {
2400
2407
  let a = vt(e, r.normalUV).depth(B(n.normalMapIndex)).xyz.mul(2).sub(1).toVar();
@@ -2402,28 +2409,28 @@ var Ci = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
2402
2409
  let o = U(Ye(F(t.z).lessThan(.999).select(J(0, 0, 1), J(1, 0, 0)), t)), s = Ye(t, o);
2403
2410
  i.assign(U(o.mul(a.x).add(s.mul(a.y)).add(t.mul(a.z))));
2404
2411
  }), i;
2405
- }), Pi = M(([e, t, n, r]) => {
2412
+ }), Fi = M(([e, t, n, r]) => {
2406
2413
  let i = t.toVar();
2407
2414
  return N(n.bumpMapIndex.greaterThanEqual(B(0)), () => {
2408
2415
  let a = q(1 / 1024).toVar(), o = vt(e, r.bumpUV).depth(B(n.bumpMapIndex)).r, s = vt(e, q(r.bumpUV.x.add(a.x), r.bumpUV.y)).depth(B(n.bumpMapIndex)).r, c = vt(e, q(r.bumpUV.x, r.bumpUV.y.add(a.y))).depth(B(n.bumpMapIndex)).r, l = q(s.sub(o), c.sub(o)).mul(n.bumpScale), u = U(J(l.x.negate(), l.y.negate(), 1)), d = U(Ye(F(t.z).lessThan(.999).select(J(0, 0, 1), J(1, 0, 0)), t)), f = Ye(t, d), p = d.mul(u.x).add(f.mul(u.y)).add(t.mul(u.z));
2409
2416
  i.assign(U(H(t, p, L(n.bumpScale, 0, 1))));
2410
2417
  }), i;
2411
- }), Fi = M(([e, t, n, r]) => {
2418
+ }), Ii = M(([e, t, n, r]) => {
2412
2419
  let i = t.emissive.mul(t.emissiveIntensity).toVar();
2413
2420
  return N(t.emissiveMapIndex.greaterThanEqual(B(0)), () => {
2414
2421
  let n = vt(e, r.emissiveUV).depth(B(t.emissiveMapIndex)).toVar();
2415
2422
  i.assign(i.mul(n.rgb));
2416
2423
  }), i;
2417
- }), Ii = M(([e, t, n, r, i, a, o, s, c]) => {
2418
- let l = Y(0).toVar(), u = J(0).toVar(), d = z(0).toVar(), f = z(0).toVar(), p = J(0).toVar(), m = Oi(o).toVar();
2424
+ }), Li = M(([e, t, n, r, i, a, o, s, c]) => {
2425
+ let l = Y(0).toVar(), u = J(0).toVar(), d = z(0).toVar(), f = z(0).toVar(), p = J(0).toVar(), m = ki(o).toVar();
2419
2426
  return l.assign(o.color), u.assign(o.emissive.mul(o.emissiveIntensity)), d.assign(o.metalness), f.assign(o.roughness), p.assign(c), N(m, () => {
2420
- let m = Nr.wrap(Ai(s, o)).toVar();
2421
- l.assign(ji(e, o, m));
2422
- let h = Mi(r, i, o, m);
2427
+ let m = Pr.wrap(ji(s, o)).toVar();
2428
+ l.assign(Mi(e, o, m));
2429
+ let h = Ni(r, i, o, m);
2423
2430
  d.assign(h.x), f.assign(h.y);
2424
- let g = Ni(t, c, o, m).toVar();
2425
- p.assign(Pi(n, g, o, m)), u.assign(Fi(a, o, l, m));
2426
- }), jr({
2431
+ let g = Pi(t, c, o, m).toVar();
2432
+ p.assign(Fi(n, g, o, m)), u.assign(Ii(a, o, l, m));
2433
+ }), Mr({
2427
2434
  albedo: l,
2428
2435
  emissive: u,
2429
2436
  metalness: d,
@@ -2432,27 +2439,27 @@ var Ci = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
2432
2439
  hasTextures: m
2433
2440
  });
2434
2441
  });
2435
- M(([e, t, n, r, i, a, o, s]) => jr.wrap(Ii(e, t, n, r, i, a, o, s, J(0, 1, 0))).albedo), M(([e, t, n, r, i, a, o, s]) => jr.wrap(Ii(e, t, n, r, i, a, o, s, J(0, 1, 0))).emissive), M(([e, t, n, r, i, a, o, s]) => jr.wrap(Ii(e, t, n, r, i, a, o, s, J(0, 1, 0))).metalness), M(([e, t, n, r, i, a, o, s]) => jr.wrap(Ii(e, t, n, r, i, a, o, s, J(0, 1, 0))).roughness), M(([e, t, n, r, i, a, o, s, c]) => jr.wrap(Ii(e, t, n, r, i, a, o, s, c)).normal);
2436
- var Li = M(([e, t, n, r]) => {
2442
+ M(([e, t, n, r, i, a, o, s]) => Mr.wrap(Li(e, t, n, r, i, a, o, s, J(0, 1, 0))).albedo), M(([e, t, n, r, i, a, o, s]) => Mr.wrap(Li(e, t, n, r, i, a, o, s, J(0, 1, 0))).emissive), M(([e, t, n, r, i, a, o, s]) => Mr.wrap(Li(e, t, n, r, i, a, o, s, J(0, 1, 0))).metalness), M(([e, t, n, r, i, a, o, s]) => Mr.wrap(Li(e, t, n, r, i, a, o, s, J(0, 1, 0))).roughness), M(([e, t, n, r, i, a, o, s, c]) => Mr.wrap(Li(e, t, n, r, i, a, o, s, c)).normal);
2443
+ var Ri = M(([e, t, n, r]) => {
2437
2444
  let i = z(0).toVar();
2438
2445
  return N(t.greaterThanEqual(B(0)), () => {
2439
- let a = Di({
2446
+ let a = Oi({
2440
2447
  uv: n,
2441
2448
  transform: r
2442
2449
  });
2443
2450
  i.assign(vt(e, a).depth(B(t)).r);
2444
2451
  }), i;
2445
- }), Ri = 32, zi = 16, Bi = 5, Vi = 1 / 1024, Hi = 8, Ui = Cr({
2452
+ }), zi = 32, Bi = 16, Vi = 5, Hi = 1 / 1024, Ui = 8, Wi = wr({
2446
2453
  hitPoint: "vec3",
2447
2454
  uv: "vec2",
2448
2455
  normal: "vec3",
2449
2456
  height: "float"
2450
- }), Wi = M(([e, t, n, r, i, a]) => {
2451
- let o = t.hitPoint.toVar(), s = t.uv.toVar(), c = t.normal.toVar(), l = z(0).toVar(), u = t.triangleIndex, d = $(n, u, B(0), B(Hi)).xyz.toVar(), f = $(n, u, B(1), B(Hi)).xyz.toVar(), p = $(n, u, B(2), B(Hi)).xyz.toVar(), m = $(n, u, B(6), B(Hi)).toVar(), h = $(n, u, B(7), B(Hi)).toVar(), g = m.xy.toVar(), _ = m.zw.toVar(), v = h.xy.toVar(), y = f.sub(d).toVar(), b = p.sub(d).toVar(), x = _.sub(g).toVar(), S = v.sub(g).toVar(), C = x.x.mul(S.y).sub(S.x.mul(x.y)).toVar();
2457
+ }), Gi = M(([e, t, n, r, i, a]) => {
2458
+ let o = t.hitPoint.toVar(), s = t.uv.toVar(), c = t.normal.toVar(), l = z(0).toVar(), u = t.triangleIndex, d = $(n, u, B(0), B(Ui)).xyz.toVar(), f = $(n, u, B(1), B(Ui)).xyz.toVar(), p = $(n, u, B(2), B(Ui)).xyz.toVar(), m = $(n, u, B(6), B(Ui)).toVar(), h = $(n, u, B(7), B(Ui)).toVar(), g = m.xy.toVar(), _ = m.zw.toVar(), v = h.xy.toVar(), y = f.sub(d).toVar(), b = p.sub(d).toVar(), x = _.sub(g).toVar(), S = v.sub(g).toVar(), C = x.x.mul(S.y).sub(S.x.mul(x.y)).toVar();
2452
2459
  return N(F(C).greaterThan(1e-8), () => {
2453
2460
  let n = z(1).div(C), u = y.mul(S.y).sub(b.mul(x.y)).mul(n).toVar(), d = b.mul(x.x).sub(y.mul(S.x)).mul(n).toVar(), f = t.normal.toVar(), p = i.displacementScale.div(z(10)), m = e.direction, h = R(m, f).toVar(), g = m.sub(f.mul(h)).toVar(), _ = R(u, u), v = R(u, d), w = R(d, d), T = _.mul(w).sub(v.mul(v)).toVar();
2454
2461
  N(F(T).greaterThan(1e-10), () => {
2455
- let e = z(1).div(T), n = R(g, u), y = R(g, d), b = q(w.mul(n).sub(v.mul(y)).mul(e).toVar(), _.mul(y).sub(v.mul(n)).mul(e).toVar()).toVar(), x = h.toVar(), S = V(F(x), .001).toVar(), C = p.div(S).toVar(), E = B(a.equal(B(0)).select(B(Ri), B(zi))).toVar(), D = C.negate().toVar(), O = C.toVar().sub(D).div(z(E)).toVar(), k = D.toVar(), A = D.toVar(), ee = B(0).toVar();
2462
+ let e = z(1).div(T), n = R(g, u), y = R(g, d), b = q(w.mul(n).sub(v.mul(y)).mul(e).toVar(), _.mul(y).sub(v.mul(n)).mul(e).toVar()).toVar(), x = h.toVar(), S = V(F(x), .001).toVar(), C = p.div(S).toVar(), E = B(a.equal(B(0)).select(B(zi), B(Bi))).toVar(), D = C.negate().toVar(), O = C.toVar().sub(D).div(z(E)).toVar(), k = D.toVar(), A = D.toVar(), ee = B(0).toVar();
2456
2463
  P({
2457
2464
  start: B(0),
2458
2465
  end: E,
@@ -2460,7 +2467,7 @@ var Li = M(([e, t, n, r]) => {
2460
2467
  condition: "<"
2461
2468
  }, ({ i: e }) => {
2462
2469
  N(ee.equal(B(0)), () => {
2463
- let n = D.add(O.mul(z(e))).toVar(), a = t.uv.add(b.mul(n)).toVar(), o = n.mul(x).toVar(), s = Li(r, i.displacementMapIndex, a, i.displacementTransform).sub(.5).mul(p);
2470
+ let n = D.add(O.mul(z(e))).toVar(), a = t.uv.add(b.mul(n)).toVar(), o = n.mul(x).toVar(), s = Ri(r, i.displacementMapIndex, a, i.displacementTransform).sub(.5).mul(p);
2464
2471
  N(o.lessThanEqual(s).and(e.greaterThan(B(0))), () => {
2465
2472
  ee.assign(1), A.assign(n);
2466
2473
  }).Else(() => {
@@ -2471,80 +2478,80 @@ var Li = M(([e, t, n, r]) => {
2471
2478
  let e = k.toVar(), n = A.toVar();
2472
2479
  P({
2473
2480
  start: B(0),
2474
- end: B(Bi),
2481
+ end: B(Vi),
2475
2482
  type: "int",
2476
2483
  condition: "<"
2477
2484
  }, () => {
2478
- let a = e.add(n).mul(.5).toVar(), o = t.uv.add(b.mul(a)).toVar(), s = a.mul(x), c = Li(r, i.displacementMapIndex, o, i.displacementTransform).sub(.5).mul(p);
2485
+ let a = e.add(n).mul(.5).toVar(), o = t.uv.add(b.mul(a)).toVar(), s = a.mul(x), c = Ri(r, i.displacementMapIndex, o, i.displacementTransform).sub(.5).mul(p);
2479
2486
  N(s.lessThanEqual(c), () => {
2480
2487
  n.assign(a);
2481
2488
  }).Else(() => {
2482
2489
  e.assign(a);
2483
2490
  });
2484
2491
  });
2485
- let a = e.add(n).mul(.5).toVar(), h = t.uv.add(b.mul(a)).toVar(), g = t.hitPoint.add(m.mul(a)).toVar(), _ = Li(r, i.displacementMapIndex, h, i.displacementTransform), v = _.sub(.5).mul(p), y = z(Vi), S = _, C = Li(r, i.displacementMapIndex, h.add(q(y, 0)), i.displacementTransform), w = Li(r, i.displacementMapIndex, h.add(q(0, y)), i.displacementTransform), T = U(u).toVar(), E = U(d).toVar(), D = C.sub(S).mul(p), O = w.sub(S).mul(p), ee = U(f.sub(T.mul(D)).sub(E.mul(O)));
2492
+ let a = e.add(n).mul(.5).toVar(), h = t.uv.add(b.mul(a)).toVar(), g = t.hitPoint.add(m.mul(a)).toVar(), _ = Ri(r, i.displacementMapIndex, h, i.displacementTransform), v = _.sub(.5).mul(p), y = z(Hi), S = _, C = Ri(r, i.displacementMapIndex, h.add(q(y, 0)), i.displacementTransform), w = Ri(r, i.displacementMapIndex, h.add(q(0, y)), i.displacementTransform), T = U(u).toVar(), E = U(d).toVar(), D = C.sub(S).mul(p), O = w.sub(S).mul(p), ee = U(f.sub(T.mul(D)).sub(E.mul(O)));
2486
2493
  o.assign(g), s.assign(h), c.assign(ee), l.assign(v);
2487
2494
  });
2488
2495
  });
2489
- }), Ui({
2496
+ }), Wi({
2490
2497
  hitPoint: o,
2491
2498
  uv: s,
2492
2499
  normal: c,
2493
2500
  height: l
2494
2501
  });
2495
- }), Gi = 1e-6;
2502
+ }), Ki = 1e-6;
2496
2503
  M(([e, t, n]) => {
2497
2504
  let r = V(J(z(1).sub(n)), e);
2498
2505
  return e.add(r.sub(e).mul(ct(z(1).sub(t), 5)));
2499
2506
  });
2500
- var Ki = M(([e, t]) => {
2507
+ var qi = M(([e, t]) => {
2501
2508
  let n = L(e, 0, 1);
2502
2509
  return t.add(z(1).sub(t).mul(ct(z(1).sub(n), 5)));
2503
- }), qi = M(([e, t]) => {
2510
+ }), Ji = M(([e, t]) => {
2504
2511
  let n = L(e, 0, 1);
2505
2512
  return t.add(J(1).sub(t).mul(ct(z(1).sub(n), 5)));
2506
- }), Ji = M(([e]) => {
2513
+ }), Yi = M(([e]) => {
2507
2514
  let t = ht(e);
2508
- return J(1).add(t).div(V(J(1).sub(t), J(Gi)));
2509
- }), Yi = M(([e, t]) => {
2510
- let n = e.sub(J(t)), r = V(e.add(J(t)), J(Gi)), i = n.div(r);
2511
- return i.mul(i);
2515
+ return J(1).add(t).div(V(J(1).sub(t), J(Ki)));
2512
2516
  }), Xi = M(([e, t]) => {
2513
- let n = e.sub(t), r = V(e.add(t), Gi), i = n.div(r);
2517
+ let n = e.sub(J(t)), r = V(e.add(J(t)), J(Ki)), i = n.div(r);
2514
2518
  return i.mul(i);
2515
- }), Zi = (e) => J(Xi(e, z(1))), Qi = M(([e, t]) => {
2519
+ }), Zi = M(([e, t]) => {
2520
+ let n = e.sub(t), r = V(e.add(t), Ki), i = n.div(r);
2521
+ return i.mul(i);
2522
+ }), Qi = (e) => J(Zi(e, z(1))), $i = M(([e, t]) => {
2516
2523
  let n = t.mul(t), r = n.mul(n), i = e.mul(e).mul(r.sub(1)).add(1);
2517
- return r.div(V(z(Rr).mul(i).mul(i), Vr));
2518
- }), $i = M(([e, t]) => {
2519
- let n = V(t, Hr), r = n.mul(n), i = z(1).div(r), a = e.mul(e).mul(i.mul(i).sub(1)).add(1);
2520
- return at(i.mul(i).div(V(z(Rr).mul(a).mul(a), Vr)), 100);
2524
+ return r.div(V(z(zr).mul(i).mul(i), Hr));
2521
2525
  }), ea = M(([e, t]) => {
2526
+ let n = V(t, Ur), r = n.mul(n), i = z(1).div(r), a = e.mul(e).mul(i.mul(i).sub(1)).add(1);
2527
+ return at(i.mul(i).div(V(z(zr).mul(a).mul(a), Hr)), 100);
2528
+ }), ta = M(([e, t]) => {
2522
2529
  let n = t.add(1), r = n.mul(n).div(8);
2523
- return e.div(V(e.mul(z(1).sub(r)).add(r), Vr));
2524
- }), ta = M(([e, t, n]) => {
2525
- let r = ea(e, n);
2526
- return ea(t, n).mul(r);
2530
+ return e.div(V(e.mul(z(1).sub(r)).add(r), Hr));
2527
2531
  }), na = M(([e, t, n]) => {
2532
+ let r = ta(e, n);
2533
+ return ta(t, n).mul(r);
2534
+ }), ra = M(([e, t, n]) => {
2528
2535
  let r = z(1).sub(n), i = n.mul(-.0275).add(.0425), a = n.mul(-.572).add(1.04), o = n.mul(.022).sub(.04), s = at(r.mul(r), Xe(z(-6.4308).mul(t))).mul(r).add(i), c = z(-1.04).mul(s).add(a), l = z(1.04).mul(s).add(o), u = V(c.add(l), .1);
2529
2536
  return J(1).add(e.mul(z(1).div(u).sub(1)));
2530
- }), ra = M(([e, t, n]) => {
2537
+ }), ia = M(([e, t, n]) => {
2531
2538
  let r = z(1).sub(n), i = n.mul(-.0275).add(.0425), a = n.mul(-.572).add(1.04), o = n.mul(.022).sub(.04), s = at(r.mul(r), Xe(z(-6.4308).mul(t))).mul(r).add(i), c = z(-1.04).mul(s).add(a), l = z(1.04).mul(s).add(o), u = V(e.mul(c).add(J(l)), J(0)), d = V(c.add(l), .1), f = J(1).add(e.mul(z(1).div(d).sub(1)));
2532
2539
  return L(u.mul(f), J(0), J(1));
2533
- }), ia = M(([e, t, n]) => Qi(e, n).mul(e).div(V(z(4).mul(t), Vr))), aa = M(([e, t, n]) => {
2534
- let r = Qi(e, n), i = ea(t, n);
2535
- return r.mul(i).div(V(t.mul(4), Vr));
2536
- }), oa = M(([e, t]) => {
2537
- let n = z(Br).mul(e).mul(1e-9), r = J(54856e-17, 44201e-17, 52481e-17), i = J(1681e3, 1795300, 2208400), a = J(43278e5, 93046e5, 66121e5), o = r.mul(ht(z(Br).mul(a))).mul(Je(i.mul(n).add(t))).mul(Xe(qr({ x: n }).negate().mul(a))).toVar();
2538
- return o.x.addAssign(z(9747e-17).mul(ht(z(Br).mul(45282e5))).mul(Je(z(2239900).mul(n).add(t.x))).mul(Xe(z(-45282e5).mul(qr({ x: n }))))), Kr.mul(o.div(1.0685e-7));
2539
- }), sa = M(([e, t, n, r, i]) => {
2540
- let a = H(e, t, mt(0, .03, r)).toVar(), o = qr({ x: e.div(a) }).mul(z(1).sub(qr({ x: n }))).toVar(), s = z(1).sub(o).toVar(), c = J(0).toVar();
2540
+ }), aa = M(([e, t, n]) => $i(e, n).mul(e).div(V(z(4).mul(t), Hr))), oa = M(([e, t, n]) => {
2541
+ let r = $i(e, n), i = ta(t, n);
2542
+ return r.mul(i).div(V(t.mul(4), Hr));
2543
+ }), sa = M(([e, t]) => {
2544
+ let n = z(Vr).mul(e).mul(1e-9), r = J(54856e-17, 44201e-17, 52481e-17), i = J(1681e3, 1795300, 2208400), a = J(43278e5, 93046e5, 66121e5), o = r.mul(ht(z(Vr).mul(a))).mul(Je(i.mul(n).add(t))).mul(Xe(Jr({ x: n }).negate().mul(a))).toVar();
2545
+ return o.x.addAssign(z(9747e-17).mul(ht(z(Vr).mul(45282e5))).mul(Je(z(2239900).mul(n).add(t.x))).mul(Xe(z(-45282e5).mul(Jr({ x: n }))))), qr.mul(o.div(1.0685e-7));
2546
+ }), ca = M(([e, t, n, r, i]) => {
2547
+ let a = H(e, t, mt(0, .03, r)).toVar(), o = Jr({ x: e.div(a) }).mul(z(1).sub(Jr({ x: n }))).toVar(), s = z(1).sub(o).toVar(), c = J(0).toVar();
2541
2548
  return N(s.lessThan(0), () => {
2542
2549
  c.assign(J(1));
2543
2550
  }).Else(() => {
2544
- let t = ht(s).toVar(), o = Ki(n, Xi(a, e).toVar()).toVar(), l = z(1).sub(o).toVar(), u = a.lessThan(e).select(z(Rr), z(0)).toVar(), d = z(Rr).sub(u).toVar(), f = Ji(L(i, 0, .9999)).toVar(), p = Yi(f, a).toVar(), m = J(Ki(t, p.x), Ki(t, p.y), Ki(t, p.z)).toVar(), h = J(f.x.lessThan(a).select(z(Rr), z(0)), f.y.lessThan(a).select(z(Rr), z(0)), f.z.lessThan(a).select(z(Rr), z(0))).toVar(), g = z(2).mul(a).mul(r).mul(t).toVar(), _ = J(d).add(h).toVar(), v = L(J(o).mul(m), 1e-5, .9999).toVar(), y = ht(v).toVar(), b = J(l.mul(l)).mul(m).div(J(1).sub(v)).toVar(), x = J(o).add(b).toVar().toVar(), S = b.sub(J(l)).toVar();
2545
- S.mulAssign(y), x.addAssign(S.mul(z(2).mul(oa(z(1).mul(g), z(1).mul(_))))), S.mulAssign(y), x.addAssign(S.mul(z(2).mul(oa(z(2).mul(g), z(2).mul(_))))), c.assign(V(x, J(0)));
2551
+ let t = ht(s).toVar(), o = qi(n, Zi(a, e).toVar()).toVar(), l = z(1).sub(o).toVar(), u = a.lessThan(e).select(z(zr), z(0)).toVar(), d = z(zr).sub(u).toVar(), f = Yi(L(i, 0, .9999)).toVar(), p = Xi(f, a).toVar(), m = J(qi(t, p.x), qi(t, p.y), qi(t, p.z)).toVar(), h = J(f.x.lessThan(a).select(z(zr), z(0)), f.y.lessThan(a).select(z(zr), z(0)), f.z.lessThan(a).select(z(zr), z(0))).toVar(), g = z(2).mul(a).mul(r).mul(t).toVar(), _ = J(d).add(h).toVar(), v = L(J(o).mul(m), 1e-5, .9999).toVar(), y = ht(v).toVar(), b = J(l.mul(l)).mul(m).div(J(1).sub(v)).toVar(), x = J(o).add(b).toVar().toVar(), S = b.sub(J(l)).toVar();
2552
+ S.mulAssign(y), x.addAssign(S.mul(z(2).mul(sa(z(1).mul(g), z(1).mul(_))))), S.mulAssign(y), x.addAssign(S.mul(z(2).mul(sa(z(2).mul(g), z(2).mul(_))))), c.assign(V(x, J(0)));
2546
2553
  }), c;
2547
- }), ca = M(([e, t, n]) => {
2554
+ }), la = M(([e, t, n]) => {
2548
2555
  let r = n.invRoughness, i = n.metalFactor, a = z(0).toVar();
2549
2556
  N(t.isMetallic, () => {
2550
2557
  a.assign(V(r.mul(i), .7));
@@ -2570,7 +2577,7 @@ var Ki = M(([e, t]) => {
2570
2577
  let d = r.mul(t.isSmooth.select(z(.6), z(.5))), f = at(e.iridescence.mul(d).mul(z(.5).add(z(.5).mul(e.iridescenceThicknessRange.y.sub(e.iridescenceThicknessRange.x).div(1e3)))).mul(z(.5).add(z(.5).mul(e.iridescenceIOR.div(2)))), s);
2571
2578
  o.addAssign(f), s.subAssign(f);
2572
2579
  let p = o.add(s).add(c).add(l).add(u), m = z(1).div(V(p, .001));
2573
- return Or({
2580
+ return kr({
2574
2581
  specular: o.mul(m),
2575
2582
  diffuse: s.mul(m),
2576
2583
  sheen: c.mul(m),
@@ -2586,7 +2593,7 @@ M(([e, t]) => {
2586
2593
  }).Else(() => {
2587
2594
  let r = t.complexityScore.toVar(), i = z(0).toVar();
2588
2595
  N(t.isEmissive, () => {
2589
- let t = R(e.emissive, Gr);
2596
+ let t = R(e.emissive, Kr);
2590
2597
  i.assign(at(z(.6), t.mul(e.emissiveIntensity).mul(.25)));
2591
2598
  });
2592
2599
  let a = z(0).toVar();
@@ -2603,8 +2610,8 @@ M(([e, t]) => {
2603
2610
  n.assign(L(o, 0, 1));
2604
2611
  }), n;
2605
2612
  });
2606
- var la = M(([e, t, n, r, i, a]) => {
2607
- let o = z(1).sub(e.roughness), s = z(.5).add(z(.5).mul(e.metalness)), c = at(z(2).div(e.ior), 1), l = V(e.sheenColor.r, V(e.sheenColor.g, e.sheenColor.b)), u = Pr({
2613
+ var ua = M(([e, t, n, r, i, a]) => {
2614
+ let o = z(1).sub(e.roughness), s = z(.5).add(z(.5).mul(e.metalness)), c = at(z(2).div(e.ior), 1), l = V(e.sheenColor.r, V(e.sheenColor.g, e.sheenColor.b)), u = Fr({
2608
2615
  NoV: z(.5),
2609
2616
  isPurelyDiffuse: !1,
2610
2617
  isMetallic: n.isMetallic,
@@ -2612,7 +2619,7 @@ var la = M(([e, t, n, r, i, a]) => {
2612
2619
  alpha: e.roughness.mul(e.roughness),
2613
2620
  alpha2: e.roughness.mul(e.roughness).mul(e.roughness).mul(e.roughness),
2614
2621
  k: e.roughness.add(1).mul(e.roughness.add(1)).div(8),
2615
- F0: Zi(e.ior),
2622
+ F0: Qi(e.ior),
2616
2623
  diffuseColor: e.color.rgb,
2617
2624
  specularColor: e.color.rgb,
2618
2625
  tsAlbedo: e.color,
@@ -2625,7 +2632,7 @@ var la = M(([e, t, n, r, i, a]) => {
2625
2632
  metalFactor: s,
2626
2633
  iorFactor: c,
2627
2634
  maxSheenColor: l
2628
- }), d = Or.wrap(ca(e, n, u)), f = d.diffuse.toVar(), p = d.specular.toVar(), m = d.transmission.toVar(), h = d.clearcoat.toVar();
2635
+ }), d = kr.wrap(la(e, n, u)), f = d.diffuse.toVar(), p = d.specular.toVar(), m = d.transmission.toVar(), h = d.clearcoat.toVar();
2629
2636
  N(t.greaterThan(B(2)), () => {
2630
2637
  let e = z(1).div(z(t).sub(1));
2631
2638
  p.mulAssign(z(.8).add(e.mul(.2))), h.mulAssign(z(.7).add(e.mul(.3))), f.mulAssign(z(1).add(e.mul(.2)));
@@ -2642,16 +2649,16 @@ var la = M(([e, t, n, r, i, a]) => {
2642
2649
  f.mulAssign(e), p.mulAssign(e), m.mulAssign(e), h.mulAssign(e);
2643
2650
  }).Else(() => {
2644
2651
  f.assign(1), p.assign(0), m.assign(0), h.assign(0);
2645
- }), kr({
2652
+ }), Ar({
2646
2653
  diffuseImportance: f,
2647
2654
  specularImportance: p,
2648
2655
  transmissionImportance: m,
2649
2656
  clearcoatImportance: h,
2650
2657
  envmapImportance: z(0)
2651
2658
  });
2652
- }), ua = M(([e, t, n, r, i]) => {
2653
- let a = V(R(e, t), .001).toVar(), o = i.isRough.and(i.isMetallic.not()).and(n.transmission.equal(0)).and(n.clearcoat.equal(0)).toVar(), s = i.isMetallic.toVar(), c = i.isTransmissive.or(i.hasClearcoat).or(n.sheen.greaterThan(0)).or(n.iridescence.greaterThan(0)).toVar(), l = r.roughness.mul(r.roughness).toVar(), u = l.mul(l).toVar(), d = r.roughness.add(1), f = d.mul(d).div(8).toVar(), p = H(Zi(n.ior).mul(n.specularColor), r.albedo.rgb, r.metalness).mul(n.specularIntensity).toVar(), m = r.albedo.rgb.mul(z(1).sub(r.metalness)).toVar(), h = r.albedo.rgb.toVar(), g = z(1).sub(r.roughness).toVar(), _ = z(.5).add(z(.5).mul(r.metalness)).toVar(), v = at(z(2).div(n.ior), 1).toVar(), y = V(n.sheenColor.r, V(n.sheenColor.g, n.sheenColor.b)).toVar();
2654
- return Pr({
2659
+ }), da = M(([e, t, n, r, i]) => {
2660
+ let a = V(R(e, t), .001).toVar(), o = i.isRough.and(i.isMetallic.not()).and(n.transmission.equal(0)).and(n.clearcoat.equal(0)).toVar(), s = i.isMetallic.toVar(), c = i.isTransmissive.or(i.hasClearcoat).or(n.sheen.greaterThan(0)).or(n.iridescence.greaterThan(0)).toVar(), l = r.roughness.mul(r.roughness).toVar(), u = l.mul(l).toVar(), d = r.roughness.add(1), f = d.mul(d).div(8).toVar(), p = H(Qi(n.ior).mul(n.specularColor), r.albedo.rgb, r.metalness).mul(n.specularIntensity).toVar(), m = r.albedo.rgb.mul(z(1).sub(r.metalness)).toVar(), h = r.albedo.rgb.toVar(), g = z(1).sub(r.roughness).toVar(), _ = z(.5).add(z(.5).mul(r.metalness)).toVar(), v = at(z(2).div(n.ior), 1).toVar(), y = V(n.sheenColor.r, V(n.sheenColor.g, n.sheenColor.b)).toVar();
2661
+ return Fr({
2655
2662
  NoV: a,
2656
2663
  isPurelyDiffuse: o,
2657
2664
  isMetallic: s,
@@ -2675,7 +2682,7 @@ var la = M(([e, t, n, r, i, a]) => {
2675
2682
  });
2676
2683
  });
2677
2684
  M(([e, t, n]) => {
2678
- let r = V(R(e, t), .001).toVar(), i = n.roughness.greaterThan(.98).and(n.metalness.lessThan(.02)).and(n.transmission.equal(0)).and(n.clearcoat.equal(0)).toVar(), a = n.metalness.greaterThan(.7).toVar(), o = n.transmission.greaterThan(0).or(n.clearcoat.greaterThan(0)).or(n.sheen.greaterThan(0)).or(n.iridescence.greaterThan(0)).toVar(), s = n.roughness.mul(n.roughness).toVar(), c = s.mul(s).toVar(), l = n.roughness.add(1), u = l.mul(l).div(8).toVar(), d = H(Zi(n.ior).mul(n.specularColor), n.color.rgb, n.metalness).mul(n.specularIntensity).toVar(), f = n.color.rgb.mul(z(1).sub(n.metalness)).toVar(), p = n.color.rgb.toVar(), m = jr({
2685
+ let r = V(R(e, t), .001).toVar(), i = n.roughness.greaterThan(.98).and(n.metalness.lessThan(.02)).and(n.transmission.equal(0)).and(n.clearcoat.equal(0)).toVar(), a = n.metalness.greaterThan(.7).toVar(), o = n.transmission.greaterThan(0).or(n.clearcoat.greaterThan(0)).or(n.sheen.greaterThan(0)).or(n.iridescence.greaterThan(0)).toVar(), s = n.roughness.mul(n.roughness).toVar(), c = s.mul(s).toVar(), l = n.roughness.add(1), u = l.mul(l).div(8).toVar(), d = H(Qi(n.ior).mul(n.specularColor), n.color.rgb, n.metalness).mul(n.specularIntensity).toVar(), f = n.color.rgb.mul(z(1).sub(n.metalness)).toVar(), p = n.color.rgb.toVar(), m = Mr({
2679
2686
  albedo: n.color,
2680
2687
  emissive: n.emissive.mul(n.emissiveIntensity),
2681
2688
  metalness: n.metalness,
@@ -2683,7 +2690,7 @@ M(([e, t, n]) => {
2683
2690
  normal: e,
2684
2691
  hasTextures: !1
2685
2692
  }), h = z(1).sub(n.roughness).toVar(), g = z(.5).add(z(.5).mul(n.metalness)).toVar(), _ = at(z(2).div(n.ior), 1).toVar(), v = V(n.sheenColor.r, V(n.sheenColor.g, n.sheenColor.b)).toVar();
2686
- return Pr({
2693
+ return Fr({
2687
2694
  NoV: r,
2688
2695
  isPurelyDiffuse: i,
2689
2696
  isMetallic: a,
@@ -2708,10 +2715,10 @@ M(([e, t, n]) => {
2708
2715
  });
2709
2716
  //#endregion
2710
2717
  //#region src/TSL/MaterialSampling.js
2711
- var da = /* @__PURE__ */ X("\n fn ImportanceSampleGGX( N: vec3f, roughness: f32, Xi: vec2f ) -> vec3f {\n let alpha = roughness * roughness;\n let phi = 6.28318530717958647692f * Xi.x;\n let cosTheta = sqrt( ( 1.0f - Xi.y ) / ( 1.0f + ( alpha * alpha - 1.0f ) * Xi.y ) );\n let sinTheta = sqrt( max( 0.0f, 1.0f - cosTheta * cosTheta ) );\n let H = vec3f( cos( phi ) * sinTheta, sin( phi ) * sinTheta, cosTheta );\n // TBN construction\n let up = select( vec3f( 1.0f, 0.0f, 0.0f ), vec3f( 0.0f, 0.0f, 1.0f ), abs( N.z ) < 0.999f );\n let tangent = normalize( cross( up, N ) );\n let bitangent = cross( N, tangent );\n return normalize( tangent * H.x + bitangent * H.y + N * H.z );\n }\n"), fa = /* @__PURE__ */ X("\n fn ImportanceSampleCosine( N: vec3f, xi: vec2f ) -> vec3f {\n let T = normalize( cross( N, N.yzx + vec3f( 0.1f, 0.2f, 0.3f ) ) );\n let B = cross( N, T );\n let phi = 6.28318530717958647692f * xi.x;\n let cosTheta = sqrt( 1.0f - xi.y );\n let sinTheta = sqrt( xi.y );\n let localDir = vec3f( sinTheta * cos( phi ), sinTheta * sin( phi ), cosTheta );\n return normalize( T * localDir.x + B * localDir.y + N * localDir.z );\n }\n"), pa = /* @__PURE__ */ X("\n fn cosineWeightedSample( N: vec3f, xi: vec2f ) -> vec3f {\n let T = normalize( cross( N, N.yzx + vec3f( 0.1f, 0.2f, 0.3f ) ) );\n let B = cross( N, T );\n let phi = 6.28318530717958647692f * xi.y;\n let cosTheta = sqrt( 1.0f - xi.x );\n let sinTheta = sqrt( xi.x );\n let localDir = vec3f( sinTheta * cos( phi ), sinTheta * sin( phi ), cosTheta );\n return normalize( T * localDir.x + B * localDir.y + N * localDir.z );\n }\n");
2712
- M(([e]) => V(e, Wr).mul(zr));
2713
- var ma = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: vec2f ) -> vec3f {\n let alpha = roughness * roughness;\n // Transform view direction to local space\n let Vh = normalize( vec3f( alpha * V.x, alpha * V.y, V.z ) );\n // Construct orthonormal basis around view direction\n let lensq = Vh.x * Vh.x + Vh.y * Vh.y;\n let T1 = select( vec3f( 1.0f, 0.0f, 0.0f ), vec3f( -Vh.y, Vh.x, 0.0f ) / sqrt( lensq ), lensq > 1e-8f );\n let T2 = cross( Vh, T1 );\n // Sample point with polar coordinates (r, phi)\n let r = sqrt( Xi.x );\n let phi = 6.28318530717958647692f * Xi.y;\n let t1 = r * cos( phi );\n let t2tmp = r * sin( phi );\n let s = 0.5f * ( 1.0f + Vh.z );\n let t2 = ( 1.0f - s ) * sqrt( 1.0f - t1 * t1 ) + s * t2tmp;\n // Compute normal\n let Nh = T1 * t1 + T2 * t2 + Vh * sqrt( max( 0.0f, 1.0f - t1 * t1 - t2 * t2 ) );\n // Transform the normal back to the ellipsoid configuration\n return normalize( vec3f( alpha * Nh.x, alpha * Nh.y, max( 0.0f, Nh.z ) ) );\n }\n"), ha = M(([e, t, n]) => {
2714
- let r = Mr.wrap(ni(n)), i = z(1).sub(n.roughness), a = z(.5).add(z(.5).mul(n.metalness)), o = at(z(2).div(n.ior), 1), s = V(n.sheenColor.r, V(n.sheenColor.g, n.sheenColor.b)), c = Pr({
2718
+ var fa = /* @__PURE__ */ X("\n fn ImportanceSampleGGX( N: vec3f, roughness: f32, Xi: vec2f ) -> vec3f {\n let alpha = roughness * roughness;\n let phi = 6.28318530717958647692f * Xi.x;\n let cosTheta = sqrt( ( 1.0f - Xi.y ) / ( 1.0f + ( alpha * alpha - 1.0f ) * Xi.y ) );\n let sinTheta = sqrt( max( 0.0f, 1.0f - cosTheta * cosTheta ) );\n let H = vec3f( cos( phi ) * sinTheta, sin( phi ) * sinTheta, cosTheta );\n // TBN construction\n let up = select( vec3f( 1.0f, 0.0f, 0.0f ), vec3f( 0.0f, 0.0f, 1.0f ), abs( N.z ) < 0.999f );\n let tangent = normalize( cross( up, N ) );\n let bitangent = cross( N, tangent );\n return normalize( tangent * H.x + bitangent * H.y + N * H.z );\n }\n"), pa = /* @__PURE__ */ X("\n fn ImportanceSampleCosine( N: vec3f, xi: vec2f ) -> vec3f {\n let T = normalize( cross( N, N.yzx + vec3f( 0.1f, 0.2f, 0.3f ) ) );\n let B = cross( N, T );\n let phi = 6.28318530717958647692f * xi.x;\n let cosTheta = sqrt( 1.0f - xi.y );\n let sinTheta = sqrt( xi.y );\n let localDir = vec3f( sinTheta * cos( phi ), sinTheta * sin( phi ), cosTheta );\n return normalize( T * localDir.x + B * localDir.y + N * localDir.z );\n }\n"), ma = /* @__PURE__ */ X("\n fn cosineWeightedSample( N: vec3f, xi: vec2f ) -> vec3f {\n let T = normalize( cross( N, N.yzx + vec3f( 0.1f, 0.2f, 0.3f ) ) );\n let B = cross( N, T );\n let phi = 6.28318530717958647692f * xi.y;\n let cosTheta = sqrt( 1.0f - xi.x );\n let sinTheta = sqrt( xi.x );\n let localDir = vec3f( sinTheta * cos( phi ), sinTheta * sin( phi ), cosTheta );\n return normalize( T * localDir.x + B * localDir.y + N * localDir.z );\n }\n");
2719
+ M(([e]) => V(e, Gr).mul(Br));
2720
+ var ha = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: vec2f ) -> vec3f {\n let alpha = roughness * roughness;\n // Transform view direction to local space\n let Vh = normalize( vec3f( alpha * V.x, alpha * V.y, V.z ) );\n // Construct orthonormal basis around view direction\n let lensq = Vh.x * Vh.x + Vh.y * Vh.y;\n let T1 = select( vec3f( 1.0f, 0.0f, 0.0f ), vec3f( -Vh.y, Vh.x, 0.0f ) / sqrt( lensq ), lensq > 1e-8f );\n let T2 = cross( Vh, T1 );\n // Sample point with polar coordinates (r, phi)\n let r = sqrt( Xi.x );\n let phi = 6.28318530717958647692f * Xi.y;\n let t1 = r * cos( phi );\n let t2tmp = r * sin( phi );\n let s = 0.5f * ( 1.0f + Vh.z );\n let t2 = ( 1.0f - s ) * sqrt( 1.0f - t1 * t1 ) + s * t2tmp;\n // Compute normal\n let Nh = T1 * t1 + T2 * t2 + Vh * sqrt( max( 0.0f, 1.0f - t1 * t1 - t2 * t2 ) );\n // Transform the normal back to the ellipsoid configuration\n return normalize( vec3f( alpha * Nh.x, alpha * Nh.y, max( 0.0f, Nh.z ) ) );\n }\n"), ga = M(([e, t, n]) => {
2721
+ let r = Nr.wrap(ri(n)), i = z(1).sub(n.roughness), a = z(.5).add(z(.5).mul(n.metalness)), o = at(z(2).div(n.ior), 1), s = V(n.sheenColor.r, V(n.sheenColor.g, n.sheenColor.b)), c = Fr({
2715
2722
  NoV: z(.5),
2716
2723
  isPurelyDiffuse: !1,
2717
2724
  isMetallic: r.isMetallic,
@@ -2719,7 +2726,7 @@ var ma = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
2719
2726
  alpha: n.roughness.mul(n.roughness),
2720
2727
  alpha2: n.roughness.mul(n.roughness).mul(n.roughness).mul(n.roughness),
2721
2728
  k: n.roughness.add(1).mul(n.roughness.add(1)).div(8),
2722
- F0: Zi(n.ior),
2729
+ F0: Qi(n.ior),
2723
2730
  diffuseColor: n.color.rgb,
2724
2731
  specularColor: n.color.rgb,
2725
2732
  tsAlbedo: n.color,
@@ -2732,8 +2739,8 @@ var ma = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
2732
2739
  metalFactor: a,
2733
2740
  iorFactor: o,
2734
2741
  maxSheenColor: s
2735
- }), l = BRDFWeights.wrap(ca(n, r, c)), u = V(R(t, e), 0), d = ct(z(1).sub(u), 5), f = l.diffuse.mul(d), p = l.diffuse.sub(f).toVar(), m = l.specular.add(f).toVar(), h = l.clearcoat.toVar(), g = l.transmission.mul(o).toVar(), _ = l.sheen.toVar(), v = l.iridescence.toVar(), y = V(p.add(m).add(h).add(g).add(_).add(v), 1e-6).toVar(), b = z(1).div(y);
2736
- return Lr({
2742
+ }), l = BRDFWeights.wrap(la(n, r, c)), u = V(R(t, e), 0), d = ct(z(1).sub(u), 5), f = l.diffuse.mul(d), p = l.diffuse.sub(f).toVar(), m = l.specular.add(f).toVar(), h = l.clearcoat.toVar(), g = l.transmission.mul(o).toVar(), _ = l.sheen.toVar(), v = l.iridescence.toVar(), y = V(p.add(m).add(h).add(g).add(_).add(v), 1e-6).toVar(), b = z(1).div(y);
2743
+ return Rr({
2737
2744
  diffuse: p.mul(b),
2738
2745
  specular: m.mul(b),
2739
2746
  clearcoat: h.mul(b),
@@ -2742,20 +2749,20 @@ var ma = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
2742
2749
  iridescence: v.mul(b),
2743
2750
  totalWeight: y
2744
2751
  });
2745
- }), ga = M(([e, t, n, r, i, a]) => {
2752
+ }), _a = M(([e, t, n, r, i, a]) => {
2746
2753
  let o = z(0).toVar(), s = z(0).toVar(), c = z(0).toVar(), l = z(0).toVar(), u = z(0).toVar(), d = R(n, e);
2747
2754
  N(d.greaterThan(0), () => {
2748
- o.assign(d.div(Rr));
2755
+ o.assign(d.div(zr));
2749
2756
  });
2750
2757
  let f = U(t.add(e)).toVar(), p = V(R(n, f), 0), m = V(R(t, f), 0), h = V(R(n, t), 0);
2751
2758
  N(p.greaterThan(0).and(m.greaterThan(0)).and(h.greaterThan(0)), () => {
2752
- s.assign(ia(p, m, r.roughness)), N(r.clearcoat.greaterThan(0), () => {
2753
- c.assign(ia(p, m, r.clearcoatRoughness));
2759
+ s.assign(aa(p, m, r.roughness)), N(r.clearcoat.greaterThan(0), () => {
2760
+ c.assign(aa(p, m, r.clearcoatRoughness));
2754
2761
  });
2755
2762
  }), N(r.transmission.greaterThan(0).and(d.lessThan(0)), () => {
2756
- l.assign(F(d).div(Rr));
2763
+ l.assign(F(d).div(zr));
2757
2764
  }), N(r.sheen.greaterThan(0).and(d.greaterThan(0)), () => {
2758
- u.assign(d.div(Rr));
2765
+ u.assign(d.div(zr));
2759
2766
  });
2760
2767
  let g = i.diffuse.mul(o), _ = i.specular.mul(s), v = i.clearcoat.mul(c), y = i.transmission.mul(l), b = i.sheen.mul(u), x = i.iridescence.mul(o), S = g.mul(g).add(_.mul(_)).add(v.mul(v)).add(y.mul(y)).add(b.mul(b)).add(x.mul(x)), C = z(1).toVar();
2761
2768
  return N(S.greaterThan(0).and(a.greaterThan(0)), () => {
@@ -2764,34 +2771,34 @@ var ma = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
2764
2771
  }), C;
2765
2772
  });
2766
2773
  M(([e, t, n, r, i, a]) => {
2767
- let o = ha(e, t, n), s = $t(i), c = o.diffuse, l = c.add(o.specular), u = l.add(o.clearcoat), d = u.add(o.transmission), f = J(0).toVar(), p = z(0).toVar(), m = z(0).toVar();
2774
+ let o = ga(e, t, n), s = $t(i), c = o.diffuse, l = c.add(o.specular), u = l.add(o.clearcoat), d = u.add(o.transmission), f = J(0).toVar(), p = z(0).toVar(), m = z(0).toVar();
2768
2775
  N(s.lessThan(c), () => {
2769
- f.assign(fa({
2776
+ f.assign(pa({
2770
2777
  N: t,
2771
2778
  xi: r
2772
- })), p.assign(V(R(t, f), 0).div(Rr)), m.assign(p.mul(o.diffuse));
2779
+ })), p.assign(V(R(t, f), 0).div(zr)), m.assign(p.mul(o.diffuse));
2773
2780
  }).ElseIf(s.lessThan(l), () => {
2774
- let i = da({
2781
+ let i = fa({
2775
2782
  N: t,
2776
2783
  roughness: n.roughness,
2777
2784
  Xi: r
2778
2785
  }).toVar();
2779
2786
  f.assign(lt(e.negate(), i)), N(R(t, f).greaterThan(0), () => {
2780
2787
  let r = V(R(t, i), 0), a = V(R(e, i), 0);
2781
- p.assign(ia(r, a, n.roughness));
2788
+ p.assign(aa(r, a, n.roughness));
2782
2789
  }), m.assign(p.mul(o.specular));
2783
2790
  }).ElseIf(s.lessThan(u).and(n.clearcoat.greaterThan(0)), () => {
2784
- let i = da({
2791
+ let i = fa({
2785
2792
  N: t,
2786
2793
  roughness: n.clearcoatRoughness,
2787
2794
  Xi: r
2788
2795
  }).toVar();
2789
2796
  f.assign(lt(e.negate(), i)), N(R(t, f).greaterThan(0), () => {
2790
2797
  let r = V(R(t, i), 0), a = V(R(e, i), 0);
2791
- p.assign(ia(r, a, n.clearcoatRoughness));
2798
+ p.assign(aa(r, a, n.clearcoatRoughness));
2792
2799
  }), m.assign(p.mul(o.clearcoat));
2793
2800
  }).ElseIf(s.lessThan(d).and(n.transmission.greaterThan(0)), () => {
2794
- let i = da({
2801
+ let i = fa({
2795
2802
  N: t,
2796
2803
  roughness: n.roughness,
2797
2804
  Xi: r
@@ -2799,18 +2806,18 @@ M(([e, t, n, r, i, a]) => {
2799
2806
  N(R(a, a).greaterThan(.001), () => {
2800
2807
  f.assign(U(a));
2801
2808
  let r = V(R(t, i), 0), o = V(R(e, i), 0);
2802
- p.assign(ia(r, o, n.roughness));
2809
+ p.assign(aa(r, o, n.roughness));
2803
2810
  }).Else(() => {
2804
2811
  f.assign(lt(e.negate(), i)), p.assign(.1);
2805
2812
  }), m.assign(p.mul(o.transmission));
2806
2813
  }).Else(() => {
2807
- f.assign(fa({
2814
+ f.assign(pa({
2808
2815
  N: t,
2809
2816
  xi: r
2810
- })), p.assign(V(R(t, f), 0).div(Rr)), m.assign(p.mul(o.sheen.add(o.iridescence)));
2817
+ })), p.assign(V(R(t, f), 0).div(zr)), m.assign(p.mul(o.sheen.add(o.iridescence)));
2811
2818
  });
2812
- let h = ga(f, e, t, n, o, m), g = a(e, f, t, n).toVar();
2813
- return g.mulAssign(h), Dr({
2819
+ let h = _a(f, e, t, n, o, m), g = a(e, f, t, n).toVar();
2820
+ return g.mulAssign(h), Or({
2814
2821
  direction: f,
2815
2822
  value: g,
2816
2823
  pdf: m
@@ -2818,11 +2825,11 @@ M(([e, t, n, r, i, a]) => {
2818
2825
  });
2819
2826
  //#endregion
2820
2827
  //#region src/TSL/MaterialTransmission.js
2821
- var _a = Cr({
2828
+ var va = wr({
2822
2829
  direction: "vec3",
2823
2830
  throughput: "vec3",
2824
2831
  didReflect: "bool"
2825
- }), va = Cr({
2832
+ }), ya = wr({
2826
2833
  continueRay: "bool",
2827
2834
  isTransmissive: "bool",
2828
2835
  isAlphaSkip: "bool",
@@ -2832,23 +2839,23 @@ var _a = Cr({
2832
2839
  throughput: "vec3",
2833
2840
  alpha: "float"
2834
2841
  });
2835
- Cr({
2842
+ wr({
2836
2843
  ior: "float",
2837
2844
  attenuationColor: "vec3",
2838
2845
  attenuationDistance: "float",
2839
2846
  dispersion: "float"
2840
2847
  });
2841
- var ya = Cr({
2848
+ var ba = wr({
2842
2849
  wavelength: "float",
2843
2850
  ior: "float",
2844
2851
  colorWeight: "vec3"
2845
- }), ba = Cr({
2852
+ }), xa = wr({
2846
2853
  direction: "vec3",
2847
2854
  halfVector: "vec3",
2848
2855
  didReflect: "bool",
2849
2856
  pdf: "float"
2850
2857
  });
2851
- Cr({
2858
+ wr({
2852
2859
  m0_ior: "float",
2853
2860
  m0_attenuationColor: "vec3",
2854
2861
  m0_attenuationDistance: "float",
@@ -2878,7 +2885,7 @@ Cr({
2878
2885
  });
2879
2886
  }), t;
2880
2887
  });
2881
- var xa = M(([e, t, n]) => {
2888
+ var Sa = M(([e, t, n]) => {
2882
2889
  let r = H(z(380), z(700), n).toVar(), i = r.div(1e3), a = e, o = t.mul(.03), s = a.add(o.div(i.mul(i))).toVar(), c = J(0).toVar();
2883
2890
  return N(r.greaterThanEqual(380).and(r.lessThan(420)), () => {
2884
2891
  c.assign(J(.9, 0, 1));
@@ -2894,17 +2901,17 @@ var xa = M(([e, t, n]) => {
2894
2901
  c.assign(J(1, .5, 0));
2895
2902
  }), N(r.greaterThanEqual(620).and(r.lessThanEqual(700)), () => {
2896
2903
  c.assign(J(1, 0, 0));
2897
- }), c.assign(ct(c, J(.4))), c.assign(L(c, J(0), J(2))), ya({
2904
+ }), c.assign(ct(c, J(.4))), c.assign(L(c, J(0), J(2))), ba({
2898
2905
  wavelength: r,
2899
2906
  ior: s,
2900
2907
  colorWeight: c
2901
2908
  });
2902
- }), Sa = /* @__PURE__ */ X("\n fn calculateBeerLawAbsorption( attenuationColor: vec3f, attenuationDistance: f32, thickness: f32 ) -> vec3f {\n if ( attenuationDistance <= 0.0f ) { return vec3f( 1.0f ); }\n // Convert RGB attenuation color to absorption coefficients\n let absorption = -log( max( attenuationColor, vec3f( 0.001f ) ) ) / attenuationDistance;\n // Apply Beer's law\n return exp( -absorption * thickness );\n }\n"), Ca = M(([e, t, n, r]) => {
2909
+ }), Ca = /* @__PURE__ */ X("\n fn calculateBeerLawAbsorption( attenuationColor: vec3f, attenuationDistance: f32, thickness: f32 ) -> vec3f {\n if ( attenuationDistance <= 0.0f ) { return vec3f( 1.0f ); }\n // Convert RGB attenuation color to absorption coefficients\n let absorption = -log( max( attenuationColor, vec3f( 0.001f ) ) ) / attenuationDistance;\n // Apply Beer's law\n return exp( -absorption * thickness );\n }\n"), wa = M(([e, t, n, r]) => {
2903
2910
  let i = W(r, z(1), n.ior).toVar(), a = W(r, n.ior, z(1)).toVar(), o = F(R(t, e)), s = i.mul(i).div(a.mul(a)).mul(z(1).sub(o.mul(o))), c = z(0).toVar();
2904
2911
  return N(s.lessThanEqual(1), () => {
2905
- let e = Ki(o, Xi(a, i)), t = z(1).sub(e).mul(n.transmission).toVar();
2912
+ let e = qi(o, Zi(a, i)), t = z(1).sub(e).mul(n.transmission).toVar();
2906
2913
  N(r.not().and(n.attenuationDistance.greaterThan(0)), () => {
2907
- let e = Sa({
2914
+ let e = Ca({
2908
2915
  attenuationColor: n.attenuationColor,
2909
2916
  attenuationDistance: n.attenuationDistance,
2910
2917
  thickness: n.thickness
@@ -2912,8 +2919,8 @@ var xa = M(([e, t, n]) => {
2912
2919
  t.assign(t.mul(e.x.add(e.y).add(e.z).div(3)));
2913
2920
  }), c.assign(L(t, 0, 1));
2914
2921
  }), c;
2915
- }), wa = M(([e, t, n, r, i, a, o, s]) => {
2916
- let c = ba({
2922
+ }), Ta = M(([e, t, n, r, i, a, o, s]) => {
2923
+ let c = xa({
2917
2924
  direction: J(0),
2918
2925
  halfVector: J(0),
2919
2926
  didReflect: !1,
@@ -2921,7 +2928,7 @@ var xa = M(([e, t, n]) => {
2921
2928
  }).toVar();
2922
2929
  return N(r.lessThanEqual(.05).and(a.greaterThan(0)), () => {
2923
2930
  c.halfVector.assign(t), c.didReflect.assign(!1);
2924
- let r = n, o = W(i, z(1).div(r), r).toVar(), l = ya.wrap(xa(n, a, $t(s)));
2931
+ let r = n, o = W(i, z(1).div(r), r).toVar(), l = ba.wrap(Sa(n, a, $t(s)));
2925
2932
  o.assign(W(i, z(1).div(l.ior), l.ior));
2926
2933
  let u = ut(e.negate(), t, o).toVar();
2927
2934
  N(R(u, u).lessThan(.001), () => {
@@ -2930,7 +2937,7 @@ var xa = M(([e, t, n]) => {
2930
2937
  c.direction.assign(u), c.pdf.assign(1);
2931
2938
  });
2932
2939
  }).Else(() => {
2933
- let l = V(Hr, r), u = da({
2940
+ let l = V(Ur, r), u = fa({
2934
2941
  N: t,
2935
2942
  roughness: l,
2936
2943
  Xi: o
@@ -2938,26 +2945,26 @@ var xa = M(([e, t, n]) => {
2938
2945
  c.halfVector.assign(u);
2939
2946
  let d = W(i, z(1).div(n), n).toVar();
2940
2947
  N(a.greaterThan(0), () => {
2941
- let e = ya.wrap(xa(n, a, $t(s)));
2948
+ let e = ba.wrap(Sa(n, a, $t(s)));
2942
2949
  d.assign(W(i, z(1).div(e.ior), e.ior));
2943
2950
  });
2944
2951
  let f = L(R(u, e), .001, 1), p = ut(e.negate(), u, d).toVar();
2945
2952
  N(R(p, p).lessThan(.001), () => {
2946
2953
  c.direction.assign(lt(e.negate(), u)), c.didReflect.assign(!0);
2947
2954
  let n = L(R(t, u), .001, 1), r = L(R(e, u), .001, 1);
2948
- c.pdf.assign(ia(n, r, l));
2955
+ c.pdf.assign(aa(n, r, l));
2949
2956
  }).Else(() => {
2950
2957
  c.direction.assign(p), c.didReflect.assign(!1);
2951
- let e = L(R(t, u), .001, 1), n = L(R(u, p), .001, 1), r = Qi(e, l), i = f.add(d.mul(n)), a = F(n).div(i.mul(i));
2958
+ let e = L(R(t, u), .001, 1), n = L(R(u, p), .001, 1), r = $i(e, l), i = f.add(d.mul(n)), a = F(n).div(i.mul(i));
2952
2959
  c.pdf.assign(r.mul(e).mul(a));
2953
2960
  });
2954
2961
  }), c;
2955
- }), Ta = M(([e, t, n, r, i, a, o]) => {
2956
- let s = _a({
2962
+ }), Ea = M(([e, t, n, r, i, a, o]) => {
2963
+ let s = va({
2957
2964
  direction: J(0),
2958
2965
  throughput: J(1),
2959
2966
  didReflect: !1
2960
- }).toVar(), c = W(r, t, t.negate()).toVar(), l = e.negate().toVar(), u = W(r, a, n.ior).toVar(), d = W(r, n.ior, o).toVar(), f = F(R(c, e)), p = u.mul(u).div(d.mul(d)).mul(z(1).sub(f.mul(f))).greaterThan(1).toVar(), m = Xi(d, u), h = W(p, z(1), Ki(f, m)).toVar(), g = z(0).toVar();
2967
+ }).toVar(), c = W(r, t, t.negate()).toVar(), l = e.negate().toVar(), u = W(r, a, n.ior).toVar(), d = W(r, n.ior, o).toVar(), f = F(R(c, e)), p = u.mul(u).div(d.mul(d)).mul(z(1).sub(f.mul(f))).greaterThan(1).toVar(), m = Zi(d, u), h = W(p, z(1), qi(f, m)).toVar(), g = z(0).toVar();
2961
2968
  N(p, () => {
2962
2969
  g.assign(1);
2963
2970
  }).Else(() => {
@@ -2969,14 +2976,14 @@ var xa = M(([e, t, n]) => {
2969
2976
  let v = q($t(i).toVar(), $t(i).toVar());
2970
2977
  return N(_, () => {
2971
2978
  N(n.roughness.greaterThan(.05), () => {
2972
- let e = ba.wrap(wa(l, c, n.ior, n.roughness, r, z(0), v, i));
2979
+ let e = xa.wrap(Ta(l, c, n.ior, n.roughness, r, z(0), v, i));
2973
2980
  s.direction.assign(e.direction);
2974
2981
  }).Else(() => {
2975
2982
  s.direction.assign(lt(e, c));
2976
2983
  }), s.throughput.assign(n.color.xyz.mul(h).div(V(g, .05)));
2977
2984
  }).Else(() => {
2978
2985
  N(n.roughness.greaterThan(.05).or(n.dispersion.greaterThan(0)), () => {
2979
- let t = ba.wrap(wa(l, c, n.ior, n.roughness, r, n.dispersion, v, i));
2986
+ let t = xa.wrap(Ta(l, c, n.ior, n.roughness, r, n.dispersion, v, i));
2980
2987
  N(t.didReflect, () => {
2981
2988
  s.direction.assign(t.direction), s.didReflect.assign(!0), s.throughput.assign(n.color.xyz.div(V(z(1).sub(g), .05)));
2982
2989
  }).Else(() => {
@@ -3013,8 +3020,8 @@ var xa = M(([e, t, n]) => {
3013
3020
  }).Else(() => {
3014
3021
  s.direction.assign(ut(e, c, u.div(d))), s.throughput.assign(J(1));
3015
3022
  }), N(s.didReflect.not(), () => {
3016
- s.throughput.mulAssign(n.color.xyz), s.throughput.mulAssign(u.mul(u).div(V(d.mul(d), Vr))), N(r.and(n.attenuationDistance.greaterThan(0)), () => {
3017
- s.throughput.mulAssign(Sa({
3023
+ s.throughput.mulAssign(n.color.xyz), s.throughput.mulAssign(u.mul(u).div(V(d.mul(d), Hr))), N(r.and(n.attenuationDistance.greaterThan(0)), () => {
3024
+ s.throughput.mulAssign(Ca({
3018
3025
  attenuationColor: n.attenuationColor,
3019
3026
  attenuationDistance: n.attenuationDistance,
3020
3027
  thickness: n.thickness
@@ -3022,8 +3029,8 @@ var xa = M(([e, t, n]) => {
3022
3029
  }), s.throughput.mulAssign(z(1).sub(h).div(V(z(1).sub(g), .05)));
3023
3030
  });
3024
3031
  }), s;
3025
- }), Ea = M(([e, t, n, r, i, a, o, s]) => {
3026
- let c = va({
3032
+ }), Da = M(([e, t, n, r, i, a, o, s]) => {
3033
+ let c = ya({
3027
3034
  continueRay: !1,
3028
3035
  isTransmissive: !1,
3029
3036
  isAlphaSkip: !1,
@@ -3051,17 +3058,17 @@ var xa = M(([e, t, n]) => {
3051
3058
  });
3052
3059
  }), N(d.not().and(r.transmission.greaterThan(0)).and(a.greaterThan(B(0))), () => {
3053
3060
  N(l.lessThan(r.transmission), () => {
3054
- let t = R(e.direction, n).lessThan(0), i = _a.wrap(Ta(e.direction, n, r, t, u, o, s));
3061
+ let t = R(e.direction, n).lessThan(0), i = va.wrap(Ea(e.direction, n, r, t, u, o, s));
3055
3062
  c.direction.assign(i.direction), c.throughput.assign(i.throughput), c.continueRay.assign(!0), c.isTransmissive.assign(!0), c.didReflect.assign(i.didReflect), c.entering.assign(t), c.alpha.assign(z(1).sub(r.transmission));
3056
3063
  });
3057
3064
  });
3058
3065
  }), c;
3059
- }), Da = M(([e, t, n, r]) => {
3066
+ }), Oa = M(([e, t, n, r]) => {
3060
3067
  let i = J(0).toVar();
3061
3068
  return N(r.roughness.greaterThan(.98).and(r.metalness.lessThan(.02)).and(r.transmission.equal(0)).and(r.clearcoat.equal(0)).and(r.iridescence.equal(0)), () => {
3062
- i.assign(r.color.rgb.mul(z(1).sub(r.metalness)).mul(zr));
3069
+ i.assign(r.color.rgb.mul(z(1).sub(r.metalness)).mul(Br));
3063
3070
  }).Else(() => {
3064
- let a = Ar.wrap(Qr(n, e, t)), o = L(H(Zi(r.ior).mul(r.specularColor), r.color.rgb, r.metalness).mul(r.specularIntensity), J(0), J(1)).toVar(), s = r.color.rgb.toVar();
3071
+ let a = jr.wrap($r(n, e, t)), o = L(H(Qi(r.ior).mul(r.specularColor), r.color.rgb, r.metalness).mul(r.specularIntensity), J(0), J(1)).toVar(), s = r.color.rgb.toVar();
3065
3072
  N(r.dispersion.greaterThan(0).and(r.transmission.greaterThan(.5)), () => {
3066
3073
  let e = L(r.dispersion.mul(.1), 0, .8), t = V(V(s.r, s.g), s.b), n = at(at(s.r, s.g), s.b);
3067
3074
  N(t.greaterThan(n), () => {
@@ -3069,12 +3076,12 @@ var xa = M(([e, t, n]) => {
3069
3076
  s.assign(H(s, r, e.mul(.3)));
3070
3077
  });
3071
3078
  }), N(r.iridescence.greaterThan(0), () => {
3072
- let e = r.iridescenceThicknessRange.y, t = sa(z(1), r.iridescenceIOR, a.VoH, e, o);
3079
+ let e = r.iridescenceThicknessRange.y, t = ca(z(1), r.iridescenceIOR, a.VoH, e, o);
3073
3080
  o.assign(H(o, t, r.iridescence));
3074
3081
  });
3075
- let c = Qi(a.NoH, r.roughness), l = ta(a.NoV, a.NoL, r.roughness), u = qi(a.VoH, o).toVar(), d = c.mul(l).mul(u).div(V(z(4).mul(a.NoV).mul(a.NoL), Vr)).mul(na(o, a.NoV, r.roughness)), f = ra(o, a.NoV, r.roughness), p = J(1).sub(f).mul(z(1).sub(r.metalness)).mul(s).mul(zr).add(d).toVar();
3082
+ let c = $i(a.NoH, r.roughness), l = na(a.NoV, a.NoL, r.roughness), u = Ji(a.VoH, o).toVar(), d = c.mul(l).mul(u).div(V(z(4).mul(a.NoV).mul(a.NoL), Hr)).mul(ra(o, a.NoV, r.roughness)), f = ia(o, a.NoV, r.roughness), p = J(1).sub(f).mul(z(1).sub(r.metalness)).mul(s).mul(Br).add(d).toVar();
3076
3083
  N(r.sheen.greaterThan(0), () => {
3077
- let e = $i(a.NoH, r.sheenRoughness), t = r.sheenColor.mul(r.sheen).mul(e).mul(a.NoL), n = z(1).sub(r.sheenRoughness).mul(.5).add(.25), o = L(r.sheenColor.mul(r.sheen).mul(n), J(0), J(1)), s = J(1).sub(o);
3084
+ let e = ea(a.NoH, r.sheenRoughness), t = r.sheenColor.mul(r.sheen).mul(e).mul(a.NoL), n = z(1).sub(r.sheenRoughness).mul(.5).add(.25), o = L(r.sheenColor.mul(r.sheen).mul(n), J(0), J(1)), s = J(1).sub(o);
3078
3085
  i.assign(p.mul(s).add(t));
3079
3086
  }).Else(() => {
3080
3087
  i.assign(p);
@@ -3087,19 +3094,19 @@ M(([e, t, n, r, i]) => {
3087
3094
  a.assign(i.diffuseColor);
3088
3095
  }).Else(() => {
3089
3096
  let o = e.add(t).toVar(), s = R(o, o);
3090
- o.assign(s.greaterThan(Vr).select(o.div(ht(s)), J(0, 0, 1)));
3091
- let c = V(R(n, t), Vr), l = V(R(n, o), Vr), u = V(R(e, o), Vr);
3097
+ o.assign(s.greaterThan(Hr).select(o.div(ht(s)), J(0, 0, 1)));
3098
+ let c = V(R(n, t), Hr), l = V(R(n, o), Hr), u = V(R(e, o), Hr);
3092
3099
  N(i.NoV.mul(c).lessThan(0).and(r.transmission.greaterThan(0)), () => {
3093
- a.assign(Da(e, t, n, r));
3100
+ a.assign(Oa(e, t, n, r));
3094
3101
  }).Else(() => {
3095
3102
  let e = i.F0.toVar();
3096
3103
  N(r.iridescence.greaterThan(0), () => {
3097
- let t = r.iridescenceThicknessRange.y, n = sa(z(1), r.iridescenceIOR, u, t, e);
3104
+ let t = r.iridescenceThicknessRange.y, n = ca(z(1), r.iridescenceIOR, u, t, e);
3098
3105
  e.assign(L(H(e, n, r.iridescence), J(0), J(1)));
3099
3106
  });
3100
- let t = l.mul(l).mul(i.alpha2.sub(1)).add(1), n = i.alpha2.div(V(z(Rr).mul(t).mul(t), Vr)), o = c.div(c.mul(z(1).sub(i.k)).add(i.k)), s = i.NoV.div(i.NoV.mul(z(1).sub(i.k)).add(i.k)), d = o.mul(s), f = qi(u, e).toVar(), p = V(z(4).mul(i.NoV).mul(c), Vr), m = n.mul(d).mul(f).div(p).mul(na(e, i.NoV, r.roughness)), h = ra(e, i.NoV, r.roughness), g = J(1).sub(h).mul(z(1).sub(r.metalness)).mul(r.color.rgb).mul(zr).add(m).toVar();
3107
+ let t = l.mul(l).mul(i.alpha2.sub(1)).add(1), n = i.alpha2.div(V(z(zr).mul(t).mul(t), Hr)), o = c.div(c.mul(z(1).sub(i.k)).add(i.k)), s = i.NoV.div(i.NoV.mul(z(1).sub(i.k)).add(i.k)), d = o.mul(s), f = Ji(u, e).toVar(), p = V(z(4).mul(i.NoV).mul(c), Hr), m = n.mul(d).mul(f).div(p).mul(ra(e, i.NoV, r.roughness)), h = ia(e, i.NoV, r.roughness), g = J(1).sub(h).mul(z(1).sub(r.metalness)).mul(r.color.rgb).mul(Br).add(m).toVar();
3101
3108
  N(r.sheen.greaterThan(0), () => {
3102
- let e = $i(l, r.sheenRoughness), t = r.sheenColor.mul(r.sheen).mul(e).mul(c), n = z(1).sub(r.sheenRoughness).mul(.5).add(.25), i = L(r.sheenColor.mul(r.sheen).mul(n), J(0), J(1)), o = J(1).sub(i);
3109
+ let e = ea(l, r.sheenRoughness), t = r.sheenColor.mul(r.sheen).mul(e).mul(c), n = z(1).sub(r.sheenRoughness).mul(.5).add(.25), i = L(r.sheenColor.mul(r.sheen).mul(n), J(0), J(1)), o = J(1).sub(i);
3103
3110
  a.assign(g.mul(o).add(t));
3104
3111
  }).Else(() => {
3105
3112
  a.assign(g);
@@ -3107,50 +3114,50 @@ M(([e, t, n, r, i]) => {
3107
3114
  });
3108
3115
  }), a;
3109
3116
  }), M(([e, t]) => {
3110
- let n = Ki(t, z(.04));
3117
+ let n = qi(t, z(.04));
3111
3118
  return z(1).sub(e.mul(n).mul(z(2).sub(n)));
3112
3119
  });
3113
- var Oa = M(([e, t]) => {
3114
- let n = L(H(Zi(t.ior).mul(t.specularColor), t.color.rgb, t.metalness).mul(t.specularIntensity), J(0), J(1)).toVar(), r = Qi(e.NoH, t.roughness), i = ta(e.NoV, e.NoL, t.roughness), a = qi(e.VoH, n).toVar(), o = r.mul(i).mul(a).div(V(z(4).mul(e.NoV).mul(e.NoL), Vr)).mul(na(n, e.NoV, t.roughness)), s = ra(n, e.NoV, t.roughness), c = J(1).sub(s).mul(z(1).sub(t.metalness)).mul(t.color.rgb).div(Rr).add(o), l = V(t.clearcoatRoughness, Ur), u = Qi(e.NoH, l), d = ta(e.NoV, e.NoL, l), f = Ki(e.VoH, z(.04)), p = u.mul(d).mul(f).div(V(z(4).mul(e.NoV).mul(e.NoL), Vr)), m = z(1).sub(t.clearcoat.mul(f).mul(z(2).sub(f)));
3120
+ var ka = M(([e, t]) => {
3121
+ let n = L(H(Qi(t.ior).mul(t.specularColor), t.color.rgb, t.metalness).mul(t.specularIntensity), J(0), J(1)).toVar(), r = $i(e.NoH, t.roughness), i = na(e.NoV, e.NoL, t.roughness), a = Ji(e.VoH, n).toVar(), o = r.mul(i).mul(a).div(V(z(4).mul(e.NoV).mul(e.NoL), Hr)).mul(ra(n, e.NoV, t.roughness)), s = ia(n, e.NoV, t.roughness), c = J(1).sub(s).mul(z(1).sub(t.metalness)).mul(t.color.rgb).div(zr).add(o), l = V(t.clearcoatRoughness, Wr), u = $i(e.NoH, l), d = na(e.NoV, e.NoL, l), f = qi(e.VoH, z(.04)), p = u.mul(d).mul(f).div(V(z(4).mul(e.NoV).mul(e.NoL), Hr)), m = z(1).sub(t.clearcoat.mul(f).mul(z(2).sub(f)));
3115
3122
  return c.mul(m).add(J(p).mul(t.clearcoat));
3116
- }), ka = Cr({
3123
+ }), Aa = wr({
3117
3124
  brdf: "vec3",
3118
3125
  L: "vec3",
3119
3126
  pdf: "float"
3120
- }), Aa = M(([e, t, n, r, i]) => {
3121
- let a = t.normal, o = e.direction.negate(), s = V(n.clearcoatRoughness, Ur), c = V(n.roughness, Ur), l = z(1).sub(c).mul(z(.5).add(z(.5).mul(n.metalness))).toVar(), u = n.clearcoat.mul(z(1).sub(s)).toVar(), d = z(1).sub(l).mul(z(1).sub(n.metalness)).toVar(), f = l.add(u).add(d);
3127
+ }), ja = M(([e, t, n, r, i]) => {
3128
+ let a = t.normal, o = e.direction.negate(), s = V(n.clearcoatRoughness, Wr), c = V(n.roughness, Wr), l = z(1).sub(c).mul(z(.5).add(z(.5).mul(n.metalness))).toVar(), u = n.clearcoat.mul(z(1).sub(s)).toVar(), d = z(1).sub(l).mul(z(1).sub(n.metalness)).toVar(), f = l.add(u).add(d);
3122
3129
  l.divAssign(f), u.divAssign(f), d.divAssign(f);
3123
3130
  let p = $t(i), m = J(0).toVar(), h = J(0).toVar();
3124
3131
  N(p.lessThan(u), () => {
3125
- h.assign(da({
3132
+ h.assign(fa({
3126
3133
  N: a,
3127
3134
  roughness: s,
3128
3135
  Xi: r
3129
3136
  })), m.assign(lt(o.negate(), h));
3130
3137
  }).ElseIf(p.lessThan(u.add(l)), () => {
3131
- h.assign(da({
3138
+ h.assign(fa({
3132
3139
  N: a,
3133
3140
  roughness: c,
3134
3141
  Xi: r
3135
3142
  })), m.assign(lt(o.negate(), h));
3136
3143
  }).Else(() => {
3137
- m.assign(fa({
3144
+ m.assign(pa({
3138
3145
  N: a,
3139
3146
  xi: r
3140
3147
  })), h.assign(U(o.add(m)));
3141
3148
  });
3142
- let g = Ar.wrap(Qr(a, o, m)), _ = Qi(g.NoH, s).mul(g.NoH).div(z(4).mul(g.VoH)).mul(u), v = Qi(g.NoH, c).mul(g.NoH).div(z(4).mul(g.VoH)).mul(l), y = g.NoL.div(Rr).mul(d), b = V(_.add(v).add(y), .001);
3143
- return ka({
3144
- brdf: Oa(g, n),
3149
+ let g = jr.wrap($r(a, o, m)), _ = $i(g.NoH, s).mul(g.NoH).div(z(4).mul(g.VoH)).mul(u), v = $i(g.NoH, c).mul(g.NoH).div(z(4).mul(g.VoH)).mul(l), y = g.NoL.div(zr).mul(d), b = V(_.add(v).add(y), .001);
3150
+ return Aa({
3151
+ brdf: ka(g, n),
3145
3152
  L: m,
3146
3153
  pdf: b
3147
3154
  });
3148
- }), ja = Cr({
3155
+ }), Ma = wr({
3149
3156
  direction: "vec3",
3150
3157
  color: "vec3",
3151
3158
  intensity: "float",
3152
3159
  angle: "float"
3153
- }), Ma = Cr({
3160
+ }), Na = wr({
3154
3161
  position: "vec3",
3155
3162
  u: "vec3",
3156
3163
  v: "vec3",
@@ -3158,13 +3165,13 @@ var Oa = M(([e, t]) => {
3158
3165
  intensity: "float",
3159
3166
  normal: "vec3",
3160
3167
  area: "float"
3161
- }), Na = Cr({
3168
+ }), Pa = wr({
3162
3169
  position: "vec3",
3163
3170
  color: "vec3",
3164
3171
  intensity: "float",
3165
3172
  distance: "float",
3166
3173
  decay: "float"
3167
- }), Pa = Cr({
3174
+ }), Fa = wr({
3168
3175
  position: "vec3",
3169
3176
  direction: "vec3",
3170
3177
  color: "vec3",
@@ -3173,30 +3180,30 @@ var Oa = M(([e, t]) => {
3173
3180
  penumbra: "float",
3174
3181
  distance: "float",
3175
3182
  decay: "float"
3176
- }), Fa = Cr({
3183
+ }), Ia = wr({
3177
3184
  direction: "vec3",
3178
3185
  emission: "vec3",
3179
3186
  pdf: "float",
3180
3187
  distance: "float",
3181
3188
  lightType: "int",
3182
3189
  valid: "bool"
3183
- }), Ia = Cr({
3190
+ }), La = wr({
3184
3191
  direction: "vec3",
3185
3192
  throughput: "vec3",
3186
3193
  misWeight: "float",
3187
3194
  pdf: "float",
3188
3195
  combinedPdf: "float"
3189
- }), La = M(([e, t]) => {
3196
+ }), Ra = M(([e, t]) => {
3190
3197
  let n = t.mul(8);
3191
- return ja({
3198
+ return Ma({
3192
3199
  direction: U(J(e.element(n), e.element(n.add(1)), e.element(n.add(2)))),
3193
3200
  color: J(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5))),
3194
3201
  intensity: e.element(n.add(6)),
3195
3202
  angle: e.element(n.add(7))
3196
3203
  });
3197
- }), Ra = M(([e, t]) => {
3204
+ }), za = M(([e, t]) => {
3198
3205
  let n = t.mul(13), r = J(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5))).toVar(), i = J(e.element(n.add(6)), e.element(n.add(7)), e.element(n.add(8))).toVar(), a = Ye(r, i);
3199
- return Ma({
3206
+ return Na({
3200
3207
  position: J(e.element(n), e.element(n.add(1)), e.element(n.add(2))),
3201
3208
  u: r,
3202
3209
  v: i,
@@ -3205,18 +3212,18 @@ var Oa = M(([e, t]) => {
3205
3212
  normal: U(a),
3206
3213
  area: et(a).mul(4)
3207
3214
  });
3208
- }), za = M(([e, t]) => {
3215
+ }), Ba = M(([e, t]) => {
3209
3216
  let n = t.mul(9);
3210
- return Na({
3217
+ return Pa({
3211
3218
  position: J(e.element(n), e.element(n.add(1)), e.element(n.add(2))),
3212
3219
  color: J(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5))),
3213
3220
  intensity: e.element(n.add(6)),
3214
3221
  distance: e.element(n.add(7)),
3215
3222
  decay: e.element(n.add(8))
3216
3223
  });
3217
- }), Ba = M(([e, t]) => {
3224
+ }), Va = M(([e, t]) => {
3218
3225
  let n = t.mul(14);
3219
- return Pa({
3226
+ return Fa({
3220
3227
  position: J(e.element(n), e.element(n.add(1)), e.element(n.add(2))),
3221
3228
  direction: U(J(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5)))),
3222
3229
  color: J(e.element(n.add(6)), e.element(n.add(7)), e.element(n.add(8))),
@@ -3226,11 +3233,11 @@ var Oa = M(([e, t]) => {
3226
3233
  distance: e.element(n.add(12)),
3227
3234
  decay: e.element(n.add(13))
3228
3235
  });
3229
- }), Va = /* @__PURE__ */ X("\n fn isDirectionValid( direction: vec3f, surfaceNormal: vec3f ) -> bool {\n return dot( direction, surfaceNormal ) > 0.0f;\n }\n"), Ha = /* @__PURE__ */ X("\n fn getDistanceAttenuation( lightDistance: f32, cutoffDistance: f32, decayExponent: f32 ) -> f32 {\n var distanceFalloff = 1.0f / max( pow( lightDistance, decayExponent ), 0.01f );\n if ( cutoffDistance > 0.0f ) {\n let ratio = pow( lightDistance / cutoffDistance, 4.0f );\n distanceFalloff *= pow( clamp( 1.0f - ratio, 0.0f, 1.0f ), 2.0f );\n }\n return distanceFalloff;\n }\n"), Ua = /* @__PURE__ */ X("\n fn getSpotAttenuation( coneCosine: f32, penumbraCosine: f32, angleCosine: f32 ) -> f32 {\n return smoothstep( coneCosine, penumbraCosine, angleCosine );\n }\n"), Wa = /* @__PURE__ */ X("\n fn sampleCone( direction: vec3f, halfAngle: f32, xi: vec2f ) -> vec3f {\n let cosHalfAngle = cos( halfAngle );\n let cosTheta = cosHalfAngle + xi.x * ( 1.0f - cosHalfAngle );\n let sinTheta = sqrt( 1.0f - cosTheta * cosTheta );\n let phi = 6.28318530717958647692f * xi.y;\n // Create local coordinate system\n let up = select( vec3f( 1.0f, 0.0f, 0.0f ), vec3f( 0.0f, 0.0f, 1.0f ), abs( direction.z ) < 0.999f );\n let tangent = normalize( cross( up, direction ) );\n let bitangent = cross( direction, tangent );\n // Convert to world space\n let localDir = vec3f( sinTheta * cos( phi ), sinTheta * sin( phi ), cosTheta );\n return normalize( tangent * localDir.x + bitangent * localDir.y + direction * localDir.z );\n }\n"), Ga = M(([e, t, n]) => {
3236
+ }), Ha = /* @__PURE__ */ X("\n fn isDirectionValid( direction: vec3f, surfaceNormal: vec3f ) -> bool {\n return dot( direction, surfaceNormal ) > 0.0f;\n }\n"), Ua = /* @__PURE__ */ X("\n fn getDistanceAttenuation( lightDistance: f32, cutoffDistance: f32, decayExponent: f32 ) -> f32 {\n var distanceFalloff = 1.0f / max( pow( lightDistance, decayExponent ), 0.01f );\n if ( cutoffDistance > 0.0f ) {\n let ratio = pow( lightDistance / cutoffDistance, 4.0f );\n distanceFalloff *= pow( clamp( 1.0f - ratio, 0.0f, 1.0f ), 2.0f );\n }\n return distanceFalloff;\n }\n"), Wa = /* @__PURE__ */ X("\n fn getSpotAttenuation( coneCosine: f32, penumbraCosine: f32, angleCosine: f32 ) -> f32 {\n return smoothstep( coneCosine, penumbraCosine, angleCosine );\n }\n"), Ga = /* @__PURE__ */ X("\n fn sampleCone( direction: vec3f, halfAngle: f32, xi: vec2f ) -> vec3f {\n let cosHalfAngle = cos( halfAngle );\n let cosTheta = cosHalfAngle + xi.x * ( 1.0f - cosHalfAngle );\n let sinTheta = sqrt( 1.0f - cosTheta * cosTheta );\n let phi = 6.28318530717958647692f * xi.y;\n // Create local coordinate system\n let up = select( vec3f( 1.0f, 0.0f, 0.0f ), vec3f( 0.0f, 0.0f, 1.0f ), abs( direction.z ) < 0.999f );\n let tangent = normalize( cross( up, direction ) );\n let bitangent = cross( direction, tangent );\n // Convert to world space\n let localDir = vec3f( sinTheta * cos( phi ), sinTheta * sin( phi ), cosTheta );\n return normalize( tangent * localDir.x + bitangent * localDir.y + direction * localDir.z );\n }\n"), Ka = M(([e, t, n]) => {
3230
3237
  let r = e.normal, i = R(r, n), a = z(-1).toVar();
3231
3238
  return N(i.lessThan(-1e-4), () => {
3232
3239
  let o = z(1).div(i), s = R(e.position.sub(t), r).mul(o).toVar();
3233
- N(s.greaterThan(.001), () => {
3240
+ N(s.greaterThan(1e-5), () => {
3234
3241
  let r = t.add(n.mul(s)).sub(e.position), i = et(e.u), o = et(e.v), c = e.u.div(i), l = e.v.div(o), u = R(r, c), d = R(r, l);
3235
3242
  N(F(u).lessThanEqual(i).and(F(d).lessThanEqual(o)), () => {
3236
3243
  a.assign(s);
@@ -3241,55 +3248,59 @@ var Oa = M(([e, t]) => {
3241
3248
  M(([e, t, n]) => {
3242
3249
  let r = z(1).toVar();
3243
3250
  return N(e.material.transmission.greaterThan(0), () => {
3244
- let n = R(t, e.normal).lessThan(0), i = Ca(t, e.normal, e.material, n);
3251
+ let n = R(t, e.normal).lessThan(0), i = wa(t, e.normal, e.material, n);
3245
3252
  r.assign(z(1).sub(i));
3246
3253
  }).ElseIf(e.material.transparent, () => {
3247
3254
  r.assign(e.material.opacity);
3248
3255
  }), r;
3249
3256
  });
3250
- var Ka = M(([e, t, n, r, i, a, o, s]) => {
3257
+ var qa = M(([e, t, n, r, i, a, o, s]) => {
3251
3258
  let c = z(1).toVar(), l = e.toVar(), u = z(n).toVar();
3252
3259
  return P({
3253
3260
  start: B(0),
3254
3261
  end: B(8)
3255
3262
  }, () => {
3256
- let e = wr({
3263
+ let e = Tr({
3257
3264
  origin: l,
3258
3265
  direction: t
3259
- }), n = Er.wrap(i(e, a, o, s, u));
3266
+ }), n = Dr.wrap(i(e, a, o, s, u));
3260
3267
  N(n.didHit.not(), () => {
3261
3268
  Ve();
3262
3269
  });
3263
- let r = Tr.wrap(ai(n.materialIndex, s));
3270
+ let r = Er.wrap(oi(n.materialIndex, s));
3264
3271
  N(r.transmission.greaterThan(0), () => {
3265
3272
  let e = R(t, n.normal).lessThan(0), i = W(e, n.normal, n.normal.negate());
3266
3273
  N(e.not().and(r.attenuationDistance.greaterThan(0)), () => {
3267
- let e = et(n.hitPoint.sub(l)), t = Sa(r.attenuationColor, r.attenuationDistance, e);
3274
+ let e = et(n.hitPoint.sub(l)), t = Ca(r.attenuationColor, r.attenuationDistance, e);
3268
3275
  c.mulAssign(t.x.add(t.y).add(t.z).div(3));
3269
3276
  });
3270
- let a = Ki(F(R(t, i)), Xi(r.ior, z(1))), o = z(1).sub(a).mul(r.transmission);
3277
+ let a = qi(F(R(t, i)), Zi(r.ior, z(1))), o = z(1).sub(a).mul(r.transmission);
3271
3278
  c.mulAssign(o), N(c.lessThan(.005), () => {
3272
3279
  c.assign(0), Ve();
3273
- }), l.assign(n.hitPoint.add(t.mul(.001))), u.subAssign(n.dst.add(.001));
3280
+ });
3281
+ let s = V(z(1e-5), et(n.hitPoint).mul(1e-6));
3282
+ l.assign(n.hitPoint.add(t.mul(s))), u.subAssign(n.dst.add(s));
3274
3283
  }).ElseIf(r.transparent, () => {
3275
3284
  c.mulAssign(z(1).sub(r.opacity)), N(c.lessThan(.005), () => {
3276
3285
  c.assign(0), Ve();
3277
- }), l.assign(n.hitPoint.add(t.mul(.001))), u.subAssign(n.dst.add(.001));
3286
+ });
3287
+ let e = V(z(1e-5), et(n.hitPoint).mul(1e-6));
3288
+ l.assign(n.hitPoint.add(t.mul(e))), u.subAssign(n.dst.add(e));
3278
3289
  }).Else(() => {
3279
3290
  c.assign(0), Ve();
3280
3291
  });
3281
3292
  }), c;
3282
- }), qa = M(([e, t, n]) => {
3293
+ }), Ja = M(([e, t, n]) => {
3283
3294
  let r = V(z(1e-4), et(e).mul(1e-6)).toVar().toVar();
3284
3295
  return N(n.transmission.greaterThan(0), () => {
3285
3296
  r.mulAssign(2);
3286
3297
  }), N(n.roughness.lessThan(.1), () => {
3287
3298
  r.mulAssign(1.5);
3288
3299
  }), t.mul(r);
3289
- }), Ja = M(([e, t, n, r, i]) => {
3300
+ }), Ya = M(([e, t, n, r, i]) => {
3290
3301
  let a = V(z(0), R(n, e.direction)), o = z(0).toVar();
3291
3302
  return N(a.greaterThan(0), () => {
3292
- let t = e.intensity.mul(R(e.color, Gr)), n = z(1).toVar();
3303
+ let t = e.intensity.mul(R(e.color, Kr)), n = z(1).toVar();
3293
3304
  N(r.metalness.greaterThan(.7), () => {
3294
3305
  n.assign(1.5);
3295
3306
  }).ElseIf(r.roughness.greaterThan(.8), () => {
@@ -3298,12 +3309,12 @@ var Ka = M(([e, t, n, r, i, a, o, s]) => {
3298
3309
  let s = z(1).div(z(1).add(z(i).mul(.5)));
3299
3310
  o.assign(t.mul(a).mul(n).mul(s));
3300
3311
  }), o;
3301
- }), Ya = M(([e, t, n, r]) => {
3312
+ }), Xa = M(([e, t, n, r]) => {
3302
3313
  let i = e.position.sub(t), a = et(i), o = a.mul(a), s = i.div(a), c = V(R(n, s), 0), l = z(0).toVar();
3303
3314
  return N(c.greaterThan(0), () => {
3304
3315
  let t = V(R(s, e.normal).negate(), 0);
3305
3316
  N(t.greaterThan(0), () => {
3306
- let n = e.area.div(V(o, .1)), i = e.intensity.mul(R(e.color, Gr)).mul(e.area), a = z(1).toVar();
3317
+ let n = e.area.div(V(o, 1e-4)), i = e.intensity.mul(R(e.color, Kr)).mul(e.area), a = z(1).toVar();
3307
3318
  N(r.metalness.greaterThan(.7), () => {
3308
3319
  a.mulAssign(1.5), N(r.roughness.lessThan(.3), () => {
3309
3320
  a.mulAssign(z(1).add(z(1).sub(r.roughness).mul(.5)));
@@ -3316,12 +3327,12 @@ var Ka = M(([e, t, n, r, i, a, o, s]) => {
3316
3327
  }), l.assign(i.mul(n).mul(c).mul(t).mul(a));
3317
3328
  });
3318
3329
  }), l;
3319
- }), Xa = M(([e, t, n, r]) => {
3330
+ }), Za = M(([e, t, n, r]) => {
3320
3331
  let i = e.position.sub(t), a = R(i, i), o = z(0).toVar();
3321
3332
  return N(a.greaterThanEqual(.001), () => {
3322
3333
  let t = ht(a), s = i.div(t), c = V(z(0), R(n, s));
3323
3334
  N(c.greaterThan(0), () => {
3324
- let t = z(1).div(V(a, .1)), n = e.intensity.mul(R(e.color, Gr)), i = z(1).toVar();
3335
+ let t = z(1).div(V(a, .1)), n = e.intensity.mul(R(e.color, Kr)), i = z(1).toVar();
3325
3336
  N(r.metalness.greaterThan(.7), () => {
3326
3337
  i.mulAssign(1.5), N(r.roughness.lessThan(.3), () => {
3327
3338
  i.mulAssign(z(1).add(z(1).sub(r.roughness).mul(.4)));
@@ -3333,19 +3344,19 @@ var Ka = M(([e, t, n, r, i, a, o, s]) => {
3333
3344
  }), o.assign(n.mul(t).mul(c).mul(i));
3334
3345
  });
3335
3346
  }), o;
3336
- }), Za = M(([e, t, n, r]) => {
3347
+ }), Qa = M(([e, t, n, r]) => {
3337
3348
  let i = e.position.sub(t), a = R(i, i), o = z(0).toVar();
3338
3349
  return N(a.greaterThanEqual(.001), () => {
3339
3350
  let t = i.div(ht(a)), s = V(z(0), R(n, t));
3340
3351
  N(s.greaterThan(0), () => {
3341
3352
  let n = R(t.negate(), e.direction), i = Je(e.angle);
3342
3353
  N(n.greaterThanEqual(i), () => {
3343
- let t = z(1).div(V(a, .01)), c = mt(i, i.add(.1), n), l = e.intensity.mul(R(e.color, Gr)), u = W(r.metalness.greaterThan(.7), z(1.5), W(r.roughness.greaterThan(.8), z(.8), z(1)));
3354
+ let t = z(1).div(V(a, .01)), c = mt(i, i.add(.1), n), l = e.intensity.mul(R(e.color, Kr)), u = W(r.metalness.greaterThan(.7), z(1.5), W(r.roughness.greaterThan(.8), z(.8), z(1)));
3344
3355
  o.assign(l.mul(t).mul(c).mul(s).mul(u));
3345
3356
  });
3346
3357
  });
3347
3358
  }), o;
3348
- }), Qa = M(([e, t, n, r]) => {
3359
+ }), $a = M(([e, t, n, r]) => {
3349
3360
  let i = V(z(0), R(t, e.direction)), a = I(!1).toVar();
3350
3361
  return N(e.intensity.lessThanEqual(.001).or(i.lessThanEqual(.001)), () => {
3351
3362
  a.assign(!0);
@@ -3361,17 +3372,17 @@ var Ka = M(([e, t, n, r, i, a, o, s]) => {
3361
3372
  });
3362
3373
  M(([e, t, n, r, i, a, o, s, c, l, u]) => {
3363
3374
  let d = J(0).toVar();
3364
- return N(Qa(e, n, i, s).not(), () => {
3365
- let f = qa(t, n, i), p = t.add(f), m = J(0).toVar(), h = z(1e6).toVar();
3375
+ return N($a(e, n, i, s).not(), () => {
3376
+ let f = Ja(t, n, i), p = t.add(f), m = J(0).toVar(), h = z(1e6).toVar();
3366
3377
  N(e.angle.greaterThan(.001), () => {
3367
3378
  let t = q($t(c).toVar(), $t(c).toVar()), n = e.angle.mul(.5);
3368
- m.assign(Wa({
3379
+ m.assign(Ga({
3369
3380
  direction: e.direction,
3370
3381
  halfAngle: n,
3371
3382
  xi: t
3372
3383
  }));
3373
3384
  let r = Je(n);
3374
- h.assign(z(1).div(Br.mul(z(1).sub(r))));
3385
+ h.assign(z(1).div(Vr.mul(z(1).sub(r))));
3375
3386
  }).Else(() => {
3376
3387
  m.assign(e.direction);
3377
3388
  });
@@ -3382,7 +3393,7 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
3382
3393
  let c = u(r, m, n, i, a), l = e.color.mul(e.intensity).mul(c).mul(g).mul(t);
3383
3394
  N(s.equal(B(0)).and(o.pdf.greaterThan(0)), () => {
3384
3395
  N(V(z(0), R(U(o.direction), m)).greaterThan(.996), () => {
3385
- let e = Xr({
3396
+ let e = Zr({
3386
3397
  pdf1: h,
3387
3398
  pdf2: o.pdf
3388
3399
  });
@@ -3397,15 +3408,15 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
3397
3408
  });
3398
3409
  }), d;
3399
3410
  }), M(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
3400
- let p = J(0).toVar(), m = Ya(e, t, n, i);
3411
+ let p = J(0).toVar(), m = Xa(e, t, n, i);
3401
3412
  return N(m.greaterThanEqual(.001), () => {
3402
- let h = qa(t, n, i), g = t.add(h), _ = i.roughness.greaterThan(.7).and(i.metalness.lessThan(.3)), v = i.roughness.lessThan(.3).or(i.metalness.greaterThan(.7)), y = c.equal(B(0));
3413
+ let h = Ja(t, n, i), g = t.add(h), _ = i.roughness.greaterThan(.7).and(i.metalness.lessThan(.3)), v = i.roughness.lessThan(.3).or(i.metalness.greaterThan(.7)), y = c.equal(B(0));
3403
3414
  N(y.or(_).or(m.greaterThan(.1).and(v.not())), () => {
3404
3415
  let m = f(s, c, l), h = e.position.add(e.u.mul(m.x.sub(.5))).add(e.v.mul(m.y.sub(.5))).sub(t), _ = R(h, h), v = ht(_), b = h.div(v), x = V(z(0), R(n, b)), S = V(z(0), R(b, e.normal).negate());
3405
3416
  N(x.greaterThan(0).and(S.greaterThan(0)), () => {
3406
3417
  let t = u(g, b, v, l);
3407
3418
  N(t.greaterThan(0), () => {
3408
- let s = d(r, b, n, i, a), c = _.div(V(e.area.mul(S), Vr)), l = o.pdf, u = e.area.div(z(4).mul(Rr).mul(_)), f = e.color.mul(e.intensity).mul(u).mul(S), m = W(l.greaterThan(0).and(y), Xr({
3419
+ let s = d(r, b, n, i, a), c = _.div(V(e.area.mul(S), Hr)), l = o.pdf, u = e.area.div(z(4).mul(zr).mul(_)), f = e.color.mul(e.intensity).mul(u).mul(S), m = W(l.greaterThan(0).and(y), Zr({
3409
3420
  pdf1: c,
3410
3421
  pdf2: l
3411
3422
  }), z(1));
@@ -3414,13 +3425,13 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
3414
3425
  });
3415
3426
  }), N(y.or(v).and(o.pdf.greaterThan(0)), () => {
3416
3427
  N(R(e.position.sub(g), o.direction).greaterThan(0), () => {
3417
- let t = Ga(e, g, o.direction);
3428
+ let t = Ka(e, g, o.direction);
3418
3429
  N(t.greaterThan(0), () => {
3419
3430
  let r = u(g, o.direction, t, l);
3420
3431
  N(r.greaterThan(0), () => {
3421
3432
  let i = V(z(0), R(o.direction, e.normal).negate());
3422
3433
  N(i.greaterThan(0), () => {
3423
- let a = t.mul(t).div(V(e.area.mul(i), Vr)), s = Xr({
3434
+ let a = t.mul(t).div(V(e.area.mul(i), Hr)), s = Zr({
3424
3435
  pdf1: o.pdf,
3425
3436
  pdf2: a
3426
3437
  }), c = e.color.mul(e.intensity), l = V(z(0), R(n, o.direction));
@@ -3436,7 +3447,7 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
3436
3447
  return N(p.lessThanEqual(1e3), () => {
3437
3448
  let a = f.div(p), o = R(n, a);
3438
3449
  N(o.greaterThan(0), () => {
3439
- let s = z(1).div(p.mul(p)), f = e.color.mul(e.intensity).mul(s), m = qa(t, n, i), h = l(t.add(m), a, p.sub(.001), c);
3450
+ let s = z(1).div(p.mul(p)), f = e.color.mul(e.intensity).mul(s), m = Ja(t, n, i), h = l(t.add(m), a, p.mul(.999), c);
3440
3451
  N(h.greaterThan(0), () => {
3441
3452
  let e = u(r, a, n, i);
3442
3453
  d.assign(e.mul(f).mul(o).mul(h));
@@ -3450,7 +3461,7 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
3450
3461
  N(o.greaterThan(0), () => {
3451
3462
  let s = R(a.negate(), e.direction), f = Je(e.angle);
3452
3463
  N(s.greaterThanEqual(f), () => {
3453
- let m = mt(f, f.add(.1), s), h = z(1).div(p.mul(p)), g = e.color.mul(e.intensity).mul(h).mul(m), _ = qa(t, n, i), v = l(t.add(_), a, p.sub(.001), c);
3464
+ let m = mt(f, f.add(.1), s), h = z(1).div(p.mul(p)), g = e.color.mul(e.intensity).mul(h).mul(m), _ = Ja(t, n, i), v = l(t.add(_), a, p.mul(.999), c);
3454
3465
  N(v.greaterThan(0), () => {
3455
3466
  let e = u(r, a, n, i);
3456
3467
  d.assign(e.mul(g).mul(o).mul(v));
@@ -3461,8 +3472,8 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
3461
3472
  });
3462
3473
  //#endregion
3463
3474
  //#region src/TSL/LightsSampling.js
3464
- var $a = 2 * Rr;
3465
- M(() => Fa({
3475
+ var eo = 2 * zr;
3476
+ M(() => Ia({
3466
3477
  valid: I(!1),
3467
3478
  direction: J(0, 1, 0),
3468
3479
  emission: J(0),
@@ -3470,7 +3481,7 @@ M(() => Fa({
3470
3481
  pdf: z(0),
3471
3482
  lightType: B(2)
3472
3483
  }));
3473
- var eo = M(([e, t, n, r]) => {
3484
+ var to = M(([e, t, n, r]) => {
3474
3485
  let i = I(!1).toVar(), a = J(0, 1, 0).toVar(), o = J(0).toVar(), s = z(0).toVar(), c = z(0).toVar(), l = B(2).toVar();
3475
3486
  return N(e.area.greaterThan(0), () => {
3476
3487
  let u = e.position.add(e.u.mul(n.x.mul(2).sub(1))).add(e.v.mul(n.y.mul(2).sub(1))).toVar().sub(t).toVar(), d = R(u, u).toVar();
@@ -3478,7 +3489,7 @@ var eo = M(([e, t, n, r]) => {
3478
3489
  let t = ht(d).toVar(), n = u.div(t).toVar(), f = U(Ye(e.u, e.v)).toVar(), p = R(n.negate(), f).toVar();
3479
3490
  l.assign(B(1)), o.assign(e.color.mul(e.intensity)), s.assign(t), a.assign(n), c.assign(d.div(V(e.area.mul(V(p, .001)), 1e-10)).mul(r)), i.assign(p.greaterThan(0));
3480
3491
  });
3481
- }), Fa({
3492
+ }), Ia({
3482
3493
  valid: i,
3483
3494
  direction: a,
3484
3495
  emission: o,
@@ -3490,12 +3501,12 @@ var eo = M(([e, t, n, r]) => {
3490
3501
  M(([e, t, n, r]) => {
3491
3502
  let i = I(!1).toVar(), a = J(0, 1, 0).toVar(), o = J(0).toVar(), s = z(0).toVar(), c = z(0).toVar(), l = B(2).toVar();
3492
3503
  return N(e.area.greaterThan(0), () => {
3493
- let u = z(.5).mul(ht(n.x)).toVar(), d = n.y.mul($a).toVar(), f = u.mul(Je(d)).toVar(), p = u.mul(pt(d)).toVar(), m = e.position.add(e.u.mul(f)).add(e.v.mul(p)).toVar().sub(t).toVar(), h = R(m, m).toVar();
3504
+ let u = z(.5).mul(ht(n.x)).toVar(), d = n.y.mul(eo).toVar(), f = u.mul(Je(d)).toVar(), p = u.mul(pt(d)).toVar(), m = e.position.add(e.u.mul(f)).add(e.v.mul(p)).toVar().sub(t).toVar(), h = R(m, m).toVar();
3494
3505
  N(h.greaterThanEqual(1e-10), () => {
3495
3506
  let t = ht(h).toVar(), n = m.div(t).toVar(), u = U(Ye(e.u, e.v)).toVar(), d = R(n.negate(), u).toVar();
3496
3507
  l.assign(B(1)), o.assign(e.color.mul(e.intensity)), s.assign(t), a.assign(n), c.assign(h.div(V(e.area.mul(V(d, .001)), 1e-10)).mul(r)), i.assign(d.greaterThan(0));
3497
3508
  });
3498
- }), Fa({
3509
+ }), Ia({
3499
3510
  valid: i,
3500
3511
  direction: a,
3501
3512
  emission: o,
@@ -3504,23 +3515,23 @@ M(([e, t, n, r]) => {
3504
3515
  lightType: l
3505
3516
  });
3506
3517
  });
3507
- var to = M(([e, t, n, r]) => {
3518
+ var no = M(([e, t, n, r]) => {
3508
3519
  let i = I(!1).toVar(), a = J(0, 1, 0).toVar(), o = J(0).toVar(), s = z(0).toVar(), c = z(0).toVar(), l = B(3).toVar(), u = e.position.sub(t).toVar(), d = et(u).toVar();
3509
3520
  return N(d.greaterThanEqual(1e-10), () => {
3510
3521
  let t = u.div(d).toVar(), n = R(t.negate(), e.direction).toVar(), l = Je(e.angle).toVar();
3511
3522
  a.assign(t), s.assign(d), c.assign(r), i.assign(n.greaterThanEqual(l)), N(i, () => {
3512
- let t = Ua({
3523
+ let t = Wa({
3513
3524
  coneCosine: l,
3514
3525
  penumbraCosine: Je(e.angle.mul(z(1).sub(e.penumbra))).max(l.add(1e-5)).toVar(),
3515
3526
  angleCosine: n
3516
- }), r = Ha({
3527
+ }), r = Ua({
3517
3528
  lightDistance: d,
3518
3529
  cutoffDistance: e.distance,
3519
3530
  decayExponent: e.decay
3520
3531
  });
3521
3532
  o.assign(e.color.mul(e.intensity).mul(r).mul(t));
3522
3533
  });
3523
- }), Fa({
3534
+ }), Ia({
3524
3535
  valid: i,
3525
3536
  direction: a,
3526
3537
  emission: o,
@@ -3528,16 +3539,16 @@ var to = M(([e, t, n, r]) => {
3528
3539
  pdf: c,
3529
3540
  lightType: l
3530
3541
  });
3531
- }), no = M(([e, t, n]) => {
3542
+ }), ro = M(([e, t, n]) => {
3532
3543
  let r = I(!1).toVar(), i = J(0, 1, 0).toVar(), a = J(0).toVar(), o = z(0).toVar(), s = z(0).toVar(), c = B(2).toVar(), l = e.position.sub(t).toVar(), u = et(l).toVar();
3533
3544
  return N(u.greaterThanEqual(1e-10), () => {
3534
- let t = l.div(u).toVar(), d = Ha({
3545
+ let t = l.div(u).toVar(), d = Ua({
3535
3546
  lightDistance: u,
3536
3547
  cutoffDistance: e.distance,
3537
3548
  decayExponent: e.decay
3538
3549
  });
3539
3550
  c.assign(B(2)), i.assign(t), o.assign(u), a.assign(e.color.mul(e.intensity).mul(d)), s.assign(n), r.assign(I(!0));
3540
- }), Fa({
3551
+ }), Ia({
3541
3552
  valid: r,
3542
3553
  direction: i,
3543
3554
  emission: a,
@@ -3545,7 +3556,7 @@ var to = M(([e, t, n, r]) => {
3545
3556
  pdf: s,
3546
3557
  lightType: c
3547
3558
  });
3548
- }), ro = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p]) => {
3559
+ }), io = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p]) => {
3549
3560
  let m = I(!1).toVar(), h = J(0, 1, 0).toVar(), g = J(0).toVar(), _ = z(0).toVar(), v = z(0).toVar(), y = B(2).toVar(), b = s.add(l).add(d).add(p).toVar();
3550
3561
  return N(b.greaterThan(B(0)), () => {
3551
3562
  let x = z(0).toVar(), S = B(0).toVar();
@@ -3557,8 +3568,8 @@ var to = M(([e, t, n, r]) => {
3557
3568
  condition: "<"
3558
3569
  }, ({ i: r }) => {
3559
3570
  N(S.lessThan(B(16)), () => {
3560
- let a = ja.wrap(La(o, r));
3561
- x.addAssign(Ja(a, e, t, n, i)), S.addAssign(1);
3571
+ let a = Ma.wrap(Ra(o, r));
3572
+ x.addAssign(Ya(a, e, t, n, i)), S.addAssign(1);
3562
3573
  });
3563
3574
  });
3564
3575
  }), N(l.greaterThan(B(0)), () => {
@@ -3569,7 +3580,7 @@ var to = M(([e, t, n, r]) => {
3569
3580
  condition: "<"
3570
3581
  }, ({ i: r }) => {
3571
3582
  N(S.lessThan(B(16)), () => {
3572
- let i = Ma.wrap(Ra(c, r)), a = W(i.intensity.greaterThan(0), Ya(i, e, t, n), z(0));
3583
+ let i = Na.wrap(za(c, r)), a = W(i.intensity.greaterThan(0), Xa(i, e, t, n), z(0));
3573
3584
  x.addAssign(a), S.addAssign(1);
3574
3585
  });
3575
3586
  });
@@ -3581,8 +3592,8 @@ var to = M(([e, t, n, r]) => {
3581
3592
  condition: "<"
3582
3593
  }, ({ i: r }) => {
3583
3594
  N(S.lessThan(B(16)), () => {
3584
- let i = Na.wrap(za(u, r));
3585
- x.addAssign(Xa(i, e, t, n)), S.addAssign(1);
3595
+ let i = Pa.wrap(Ba(u, r));
3596
+ x.addAssign(Za(i, e, t, n)), S.addAssign(1);
3586
3597
  });
3587
3598
  });
3588
3599
  }), N(p.greaterThan(B(0)), () => {
@@ -3593,8 +3604,8 @@ var to = M(([e, t, n, r]) => {
3593
3604
  condition: "<"
3594
3605
  }, ({ i: r }) => {
3595
3606
  N(S.lessThan(B(16)), () => {
3596
- let i = Pa.wrap(Ba(f, r));
3597
- x.addAssign(Za(i, e, t, n)), S.addAssign(1);
3607
+ let i = Fa.wrap(Va(f, r));
3608
+ x.addAssign(Qa(i, e, t, n)), S.addAssign(1);
3598
3609
  });
3599
3610
  });
3600
3611
  }), N(x.lessThanEqual(0), () => {
@@ -3603,32 +3614,32 @@ var to = M(([e, t, n, r]) => {
3603
3614
  let i = I(!1).toVar(), x = B(0).toVar();
3604
3615
  N(s.greaterThan(B(0)), () => {
3605
3616
  N(i.not().and(t.greaterThanEqual(x)).and(t.lessThan(x.add(s))), () => {
3606
- let e = ja.wrap(La(o, t.sub(x)));
3617
+ let e = Ma.wrap(Ra(o, t.sub(x)));
3607
3618
  N(e.intensity.greaterThan(0), () => {
3608
3619
  h.assign(U(e.direction)), g.assign(e.color.mul(e.intensity)), _.assign(1e6), y.assign(B(0)), m.assign(I(!0)), i.assign(I(!0));
3609
3620
  });
3610
3621
  }), x.addAssign(s);
3611
3622
  }), N(l.greaterThan(B(0)), () => {
3612
3623
  N(i.not().and(t.greaterThanEqual(x)).and(t.lessThan(x.add(l))), () => {
3613
- let o = Ma.wrap(Ra(c, t.sub(x)));
3624
+ let o = Na.wrap(za(c, t.sub(x)));
3614
3625
  N(o.intensity.greaterThan(0), () => {
3615
- let t = q(r.y, $t(a)).toVar(), s = Fa.wrap(eo(o, e, t, n));
3626
+ let t = q(r.y, $t(a)).toVar(), s = Ia.wrap(to(o, e, t, n));
3616
3627
  m.assign(s.valid), h.assign(s.direction), g.assign(s.emission), _.assign(s.distance), v.assign(s.pdf), y.assign(s.lightType), i.assign(I(!0));
3617
3628
  });
3618
3629
  }), x.addAssign(l);
3619
3630
  }), N(d.greaterThan(B(0)), () => {
3620
3631
  N(i.not().and(t.greaterThanEqual(x)).and(t.lessThan(x.add(d))), () => {
3621
- let r = Na.wrap(za(u, t.sub(x)));
3632
+ let r = Pa.wrap(Ba(u, t.sub(x)));
3622
3633
  N(r.intensity.greaterThan(0), () => {
3623
- let t = Fa.wrap(no(r, e, n));
3634
+ let t = Ia.wrap(ro(r, e, n));
3624
3635
  m.assign(t.valid), h.assign(t.direction), g.assign(t.emission), _.assign(t.distance), v.assign(t.pdf), y.assign(t.lightType), i.assign(I(!0));
3625
3636
  });
3626
3637
  }), x.addAssign(d);
3627
3638
  }), N(p.greaterThan(B(0)), () => {
3628
3639
  N(i.not().and(t.greaterThanEqual(x)).and(t.lessThan(x.add(p))), () => {
3629
- let o = Pa.wrap(Ba(f, t.sub(x)));
3640
+ let o = Fa.wrap(Va(f, t.sub(x)));
3630
3641
  N(o.intensity.greaterThan(0), () => {
3631
- let t = q(r.y, $t(a)).toVar(), s = Fa.wrap(to(o, e, t, n));
3642
+ let t = q(r.y, $t(a)).toVar(), s = Ia.wrap(no(o, e, t, n));
3632
3643
  m.assign(s.valid), h.assign(s.direction), g.assign(s.emission), _.assign(s.distance), v.assign(s.pdf), y.assign(s.lightType), i.assign(I(!0));
3633
3644
  });
3634
3645
  });
@@ -3645,7 +3656,7 @@ var to = M(([e, t, n, r]) => {
3645
3656
  condition: "<"
3646
3657
  }, ({ i: r }) => {
3647
3658
  N(S.lessThan(B(16)).and(w.lessThan(B(0))), () => {
3648
- let a = Ja(ja.wrap(La(o, r)), e, t, n, i).toVar(), s = C.toVar();
3659
+ let a = Ya(Ma.wrap(Ra(o, r)), e, t, n, i).toVar(), s = C.toVar();
3649
3660
  C.addAssign(a), N(b.greaterThan(s).and(b.lessThanEqual(C)), () => {
3650
3661
  w.assign(0), T.assign(r), E.assign(a);
3651
3662
  });
@@ -3659,7 +3670,7 @@ var to = M(([e, t, n, r]) => {
3659
3670
  condition: "<"
3660
3671
  }, ({ i: r }) => {
3661
3672
  N(S.lessThan(B(16)).and(w.lessThan(B(0))), () => {
3662
- let i = Ma.wrap(Ra(c, r)), a = W(i.intensity.greaterThan(0), Ya(i, e, t, n), z(0)).toVar(), o = C.toVar();
3673
+ let i = Na.wrap(za(c, r)), a = W(i.intensity.greaterThan(0), Xa(i, e, t, n), z(0)).toVar(), o = C.toVar();
3663
3674
  C.addAssign(a), N(b.greaterThan(o).and(b.lessThanEqual(C)), () => {
3664
3675
  w.assign(1), T.assign(r), E.assign(a);
3665
3676
  });
@@ -3673,7 +3684,7 @@ var to = M(([e, t, n, r]) => {
3673
3684
  condition: "<"
3674
3685
  }, ({ i: r }) => {
3675
3686
  N(S.lessThan(B(16)).and(w.lessThan(B(0))), () => {
3676
- let i = Xa(Na.wrap(za(u, r)), e, t, n).toVar(), a = C.toVar();
3687
+ let i = Za(Pa.wrap(Ba(u, r)), e, t, n).toVar(), a = C.toVar();
3677
3688
  C.addAssign(i), N(b.greaterThan(a).and(b.lessThanEqual(C)), () => {
3678
3689
  w.assign(2), T.assign(r), E.assign(i);
3679
3690
  });
@@ -3687,7 +3698,7 @@ var to = M(([e, t, n, r]) => {
3687
3698
  condition: "<"
3688
3699
  }, ({ i: r }) => {
3689
3700
  N(S.lessThan(B(16)).and(w.lessThan(B(0))), () => {
3690
- let i = Za(Pa.wrap(Ba(f, r)), e, t, n).toVar(), a = C.toVar();
3701
+ let i = Qa(Fa.wrap(Va(f, r)), e, t, n).toVar(), a = C.toVar();
3691
3702
  C.addAssign(i), N(b.greaterThan(a).and(b.lessThanEqual(C)), () => {
3692
3703
  w.assign(3), T.assign(r), E.assign(i);
3693
3704
  });
@@ -3696,25 +3707,25 @@ var to = M(([e, t, n, r]) => {
3696
3707
  });
3697
3708
  let D = E.div(V(x, 1e-10)).toVar();
3698
3709
  N(w.equal(B(0)).and(T.greaterThanEqual(B(0))), () => {
3699
- let e = ja.wrap(La(o, T)), t = U(e.direction).toVar(), n = z(1).toVar();
3710
+ let e = Ma.wrap(Ra(o, T)), t = U(e.direction).toVar(), n = z(1).toVar();
3700
3711
  N(e.angle.greaterThan(0), () => {
3701
- let i = Je(e.angle.mul(.5)).toVar(), o = H(i, z(1), r.y).toVar(), s = ht(V(z(0), z(1).sub(o.mul(o)))).toVar(), c = z($a).mul($t(a)).toVar(), l = U(e.direction).toVar(), u = U(Ye(W(F(l.x).greaterThan(.9), J(0, 1, 0), J(1, 0, 0)), l)).toVar(), d = Ye(l, u).toVar();
3712
+ let i = Je(e.angle.mul(.5)).toVar(), o = H(i, z(1), r.y).toVar(), s = ht(V(z(0), z(1).sub(o.mul(o)))).toVar(), c = z(eo).mul($t(a)).toVar(), l = U(e.direction).toVar(), u = U(Ye(W(F(l.x).greaterThan(.9), J(0, 1, 0), J(1, 0, 0)), l)).toVar(), d = Ye(l, u).toVar();
3702
3713
  t.assign(U(l.mul(o).add(u.mul(Je(c)).add(d.mul(pt(c))).mul(s))));
3703
- let f = z($a).mul(V(z(1).sub(i), 1e-10)).toVar();
3714
+ let f = z(eo).mul(V(z(1).sub(i), 1e-10)).toVar();
3704
3715
  n.assign(z(1).div(f));
3705
3716
  }), h.assign(t), g.assign(e.color.mul(e.intensity)), _.assign(1e6), v.assign(n.mul(D)), y.assign(B(0)), m.assign(I(!0));
3706
3717
  }), N(w.equal(B(1)).and(T.greaterThanEqual(B(0))), () => {
3707
- let t = Ma.wrap(Ra(c, T)), n = q(r.y, $t(a)).toVar(), i = Fa.wrap(eo(t, e, n, D));
3718
+ let t = Na.wrap(za(c, T)), n = q(r.y, $t(a)).toVar(), i = Ia.wrap(to(t, e, n, D));
3708
3719
  m.assign(i.valid), h.assign(i.direction), g.assign(i.emission), _.assign(i.distance), v.assign(i.pdf), y.assign(i.lightType);
3709
3720
  }), N(w.equal(B(2)).and(T.greaterThanEqual(B(0))), () => {
3710
- let t = Na.wrap(za(u, T)), n = Fa.wrap(no(t, e, D));
3721
+ let t = Pa.wrap(Ba(u, T)), n = Ia.wrap(ro(t, e, D));
3711
3722
  m.assign(n.valid), h.assign(n.direction), g.assign(n.emission), _.assign(n.distance), v.assign(n.pdf), y.assign(n.lightType);
3712
3723
  }), N(w.equal(B(3)).and(T.greaterThanEqual(B(0))), () => {
3713
- let t = Pa.wrap(Ba(f, T)), n = q(r.y, $t(a)).toVar(), i = Fa.wrap(to(t, e, n, D));
3724
+ let t = Fa.wrap(Va(f, T)), n = q(r.y, $t(a)).toVar(), i = Ia.wrap(no(t, e, n, D));
3714
3725
  m.assign(i.valid), h.assign(i.direction), g.assign(i.emission), _.assign(i.distance), v.assign(i.pdf), y.assign(i.lightType);
3715
3726
  });
3716
3727
  });
3717
- }), Fa({
3728
+ }), Ia({
3718
3729
  valid: m,
3719
3730
  direction: h,
3720
3731
  emission: g,
@@ -3722,17 +3733,17 @@ var to = M(([e, t, n, r]) => {
3722
3733
  pdf: v,
3723
3734
  lightType: y
3724
3735
  });
3725
- }), io = M(([e, t, n, r]) => {
3736
+ }), ao = M(([e, t, n, r]) => {
3726
3737
  let i = V(z(0), R(n, e)).toVar(), a = V(z(0), R(n, t)).toVar(), o = U(e.add(t)).toVar(), s = V(z(0), R(n, o)).toVar();
3727
3738
  V(z(0), R(e, o)).toVar();
3728
3739
  let c = z(1).sub(r.metalness).mul(z(1).sub(r.transmission)).toVar(), l = z(1).sub(c.mul(z(1).sub(r.metalness))).toVar(), u = c.add(l).toVar(), d = z(0).toVar();
3729
3740
  return N(u.greaterThan(0), () => {
3730
3741
  let e = z(1).div(V(u, 1e-10)).toVar();
3731
3742
  c.mulAssign(e), l.mulAssign(e), N(c.greaterThan(0).and(a.greaterThan(0)), () => {
3732
- d.addAssign(c.mul(a).mul(zr));
3743
+ d.addAssign(c.mul(a).mul(Br));
3733
3744
  }), N(l.greaterThan(0).and(a.greaterThan(0)), () => {
3734
3745
  let e = V(r.roughness, .02).toVar();
3735
- d.addAssign(l.mul(aa(s, i, e)));
3746
+ d.addAssign(l.mul(oa(s, i, e)));
3736
3747
  });
3737
3748
  }), V(d, 1e-8);
3738
3749
  });
@@ -3743,27 +3754,27 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
3743
3754
  N(h.greaterThan(0), () => {
3744
3755
  let f = R(r, o).toVar();
3745
3756
  N(f.greaterThan(0), () => {
3746
- N(Va({
3757
+ N(Ha({
3747
3758
  direction: o,
3748
3759
  surfaceNormal: r
3749
3760
  }), () => {
3750
- let p = Ka(a, o, n.sub(.001), s, yi, c, l, u);
3761
+ let p = qa(a, o, n.sub(.001), s, bi, c, l, u);
3751
3762
  N(p.greaterThan(0), () => {
3752
- let n = Da(t, o, r, i), a = m.div(V(e.area.mul(h), Vr)).toVar(), s = io(t, o, r, i).toVar(), c = W(s.greaterThan(0), Xr({
3763
+ let n = Oa(t, o, r, i), a = m.div(V(e.area.mul(h), Hr)).toVar(), s = ao(t, o, r, i).toVar(), c = W(s.greaterThan(0), Zr({
3753
3764
  pdf1: a,
3754
3765
  pdf2: s
3755
3766
  }), z(1)).toVar(), l = e.color.mul(e.intensity).toVar();
3756
- d.assign(l.mul(n).mul(f).mul(p).mul(c).div(V(a, Wr)));
3767
+ d.assign(l.mul(n).mul(f).mul(p).mul(c).div(V(a, Gr)));
3757
3768
  });
3758
3769
  });
3759
3770
  });
3760
3771
  });
3761
3772
  }), d;
3762
3773
  });
3763
- var ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E, D, O]) => {
3764
- let k = J(0).toVar(), A = e.add(t.mul(.001)).toVar();
3774
+ var oo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E, D, O]) => {
3775
+ let k = J(0).toVar(), A = e.add(Ja(e, t, n)).toVar();
3765
3776
  return N(n.emissiveIntensity.lessThanEqual(10), () => {
3766
- let s = J(1).toVar(), ee = Ir.wrap(ri(n.roughness, n.metalness, n.transmission, c, s)), te = ee.useBRDFSampling.toVar(), ne = ee.useLightSampling.toVar(), re = ee.brdfWeight.toVar(), ie = ee.lightWeight.toVar(), ae = d.add(p).add(h).add(_).toVar(), oe = z(.001).mul(z(1).add(z(c).mul(.5))).toVar(), se = ae.greaterThan(B(0)).toVar(), ce = z(0).toVar();
3777
+ let s = J(1).toVar(), ee = Lr.wrap(ii(n.roughness, n.metalness, n.transmission, c, s)), te = ee.useBRDFSampling.toVar(), ne = ee.useLightSampling.toVar(), re = ee.brdfWeight.toVar(), ie = ee.lightWeight.toVar(), ae = d.add(p).add(h).add(_).toVar(), oe = z(.001).mul(z(1).add(z(c).mul(.5))).toVar(), se = ae.greaterThan(B(0)).toVar(), ce = z(0).toVar();
3767
3778
  N(ne.and(se), () => {
3768
3779
  ce.addAssign(ie);
3769
3780
  }), N(te, () => {
@@ -3779,20 +3790,20 @@ var ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
3779
3790
  }).ElseIf(se, () => {
3780
3791
  j.assign(I(!0));
3781
3792
  }), N(j, () => {
3782
- let e = q(ue, $t(l)).toVar(), i = Fa.wrap(ro(A, t, n, e, c, l, u, d, f, p, m, h, g, _));
3793
+ let e = q(ue, $t(l)).toVar(), i = Ia.wrap(io(A, t, n, e, c, l, u, d, f, p, m, h, g, _));
3783
3794
  N(i.valid.and(i.pdf.greaterThan(0)), () => {
3784
3795
  let e = V(z(0), R(t, i.direction)).toVar(), a = i.emission.x.add(i.emission.y).add(i.emission.z).toVar();
3785
- N(e.greaterThan(0).and(a.mul(e).greaterThan(oe)).and(Va({
3796
+ N(e.greaterThan(0).and(a.mul(e).greaterThan(oe)).and(Ha({
3786
3797
  direction: i.direction,
3787
3798
  surfaceNormal: t
3788
3799
  })), () => {
3789
- let a = at(i.distance.sub(.001), z(1e3)).toVar(), o = Ka(A, i.direction, a, l, yi, v, y, b);
3800
+ let a = at(i.distance.mul(.999), z(1e3)).toVar(), o = qa(A, i.direction, a, l, bi, v, y, b);
3790
3801
  N(o.greaterThan(0), () => {
3791
- let a = Da(r, i.direction, t, n), s = io(r, i.direction, t, n).toVar(), c = z(1).toVar();
3802
+ let a = Oa(r, i.direction, t, n), s = ao(r, i.direction, t, n).toVar(), c = z(1).toVar();
3792
3803
  N(s.greaterThan(0).and(te), () => {
3793
3804
  let e = i.pdf.mul(ie).toVar(), t = s.mul(re).toVar();
3794
3805
  N(i.lightType.equal(B(1)), () => {
3795
- c.assign(Xr({
3806
+ c.assign(Zr({
3796
3807
  pdf1: e,
3797
3808
  pdf2: t
3798
3809
  }));
@@ -3806,7 +3817,7 @@ var ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
3806
3817
  }), N(fe, () => {
3807
3818
  N(a.greaterThan(0).and(te), () => {
3808
3819
  let r = V(z(0), R(t, i)).toVar();
3809
- N(r.greaterThan(0).and(Va({
3820
+ N(r.greaterThan(0).and(Ha({
3810
3821
  direction: i,
3811
3822
  surfaceNormal: t
3812
3823
  })), () => {
@@ -3818,11 +3829,11 @@ var ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
3818
3829
  type: "int",
3819
3830
  condition: "<"
3820
3831
  }, ({ i: r }) => {
3821
- let a = Ma.wrap(Ra(f, r));
3832
+ let a = Na.wrap(za(f, r));
3822
3833
  N(a.intensity.greaterThan(0), () => {
3823
- let o = Ya(a, e, t, n).toVar();
3834
+ let o = Xa(a, e, t, n).toVar();
3824
3835
  N(o.greaterThanEqual(oe), () => {
3825
- N(Ga(a, A, i).toVar().greaterThan(0), () => {
3836
+ N(Ka(a, A, i).toVar().greaterThan(0), () => {
3826
3837
  N(o.greaterThan(c), () => {
3827
3838
  c.assign(o), u.assign(r);
3828
3839
  }), s.assign(I(!0));
@@ -3830,15 +3841,15 @@ var ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
3830
3841
  });
3831
3842
  });
3832
3843
  }), N(s.and(u.greaterThanEqual(B(0))), () => {
3833
- let e = Ma.wrap(Ra(f, u)), t = Ga(e, A, i).toVar();
3844
+ let e = Na.wrap(za(f, u)), t = Ka(e, A, i).toVar();
3834
3845
  N(t.greaterThan(0), () => {
3835
- let n = Ka(A, i, at(t.sub(.001), z(1e3)).toVar(), l, yi, v, y, b);
3846
+ let n = qa(A, i, at(t.sub(.001), z(1e3)).toVar(), l, bi, v, y, b);
3836
3847
  N(n.greaterThan(0), () => {
3837
3848
  let s = V(z(0), R(i, e.normal).negate()).toVar();
3838
3849
  N(s.greaterThan(0), () => {
3839
- let i = t.mul(t).toVar().div(V(e.area.mul(s), Vr)).toVar();
3850
+ let i = t.mul(t).toVar().div(V(e.area.mul(s), Hr)).toVar();
3840
3851
  i.divAssign(V(z(ae), 1));
3841
- let c = Xr({
3852
+ let c = Zr({
3842
3853
  pdf1: a.mul(re).toVar(),
3843
3854
  pdf2: i.mul(ie).toVar()
3844
3855
  }).toVar(), l = e.color.mul(e.intensity).toVar().mul(o).mul(r).mul(n).mul(c).div(V(a, 1e-10));
@@ -3851,16 +3862,16 @@ var ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
3851
3862
  });
3852
3863
  });
3853
3864
  }), N(O, () => {
3854
- let e = q($t(l).toVar(), $t(l).toVar()).toVar(), i = J(0).toVar(), a = Ti(x, w, T, C, S, E, D, e, i).toVar(), o = a.xyz.toVar(), s = a.w.toVar();
3865
+ let e = q($t(l).toVar(), $t(l).toVar()).toVar(), i = J(0).toVar(), a = Ei(x, w, T, C, S, E, D, e, i).toVar(), o = a.xyz.toVar(), s = a.w.toVar();
3855
3866
  N(s.greaterThan(0), () => {
3856
3867
  let e = V(z(0), R(t, o)).toVar();
3857
- N(e.greaterThan(0).and(Va({
3868
+ N(e.greaterThan(0).and(Ha({
3858
3869
  direction: o,
3859
3870
  surfaceNormal: t
3860
3871
  })), () => {
3861
- let a = Ka(A, o, z(1e3), l, yi, v, y, b);
3872
+ let a = qa(A, o, z(1e3), l, bi, v, y, b);
3862
3873
  N(a.greaterThan(0), () => {
3863
- let c = Da(r, o, t, n), l = io(r, o, t, n).toVar(), u = W(l.greaterThan(0), Xr({
3874
+ let c = Oa(r, o, t, n), l = ao(r, o, t, n).toVar(), u = W(l.greaterThan(0), Zr({
3864
3875
  pdf1: s,
3865
3876
  pdf2: l
3866
3877
  }), z(1)).toVar(), d = i.mul(c).mul(e).mul(a).mul(u).div(V(s, 1e-10));
@@ -3870,24 +3881,24 @@ var ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
3870
3881
  });
3871
3882
  });
3872
3883
  }), k;
3873
- }), oo = M(([e, t, n, r, i, a]) => {
3874
- let o = W(a, r, z(1).div(r)).toVar(), s = e.add(t.mul(o)).toVar(), c = R(s, s).toVar(), l = W(c.greaterThan(Vr), s.div(ht(c)), n).toVar();
3884
+ }), so = M(([e, t, n, r, i, a]) => {
3885
+ let o = W(a, r, z(1).div(r)).toVar(), s = e.add(t.mul(o)).toVar(), c = R(s, s).toVar(), l = W(c.greaterThan(Hr), s.div(ht(c)), n).toVar();
3875
3886
  N(R(l, n).lessThan(0), () => {
3876
3887
  l.assign(l.negate());
3877
3888
  });
3878
- let u = F(R(e, l)).toVar(), d = F(R(t, l)).toVar(), f = F(R(n, l)).toVar(), p = Qi(f, i).toVar(), m = u.add(d.mul(o)).toVar(), h = m.mul(m).toVar(), g = d.mul(o).mul(o).div(V(h, Vr)).toVar();
3889
+ let u = F(R(e, l)).toVar(), d = F(R(t, l)).toVar(), f = F(R(n, l)).toVar(), p = $i(f, i).toVar(), m = u.add(d.mul(o)).toVar(), h = m.mul(m).toVar(), g = d.mul(o).mul(o).div(V(h, Hr)).toVar();
3879
3890
  return p.mul(f).mul(g);
3880
- }), so = M(([e, t, n, r]) => {
3891
+ }), co = M(([e, t, n, r]) => {
3881
3892
  let i = e.add(t).toVar(), a = R(i, i).toVar();
3882
- return aa(V(R(n, W(a.greaterThan(Vr), i.div(ht(a)), n).toVar()), 0).toVar(), V(R(n, e), 0).toVar(), r);
3883
- }), co = M(([e, t, n, r, i]) => {
3893
+ return oa(V(R(n, W(a.greaterThan(Hr), i.div(ht(a)), n).toVar()), 0).toVar(), V(R(n, e), 0).toVar(), r);
3894
+ }), lo = M(([e, t, n, r, i]) => {
3884
3895
  let a = e.specularImportance.toVar(), o = a.greaterThan(.001).toVar(), s = e.diffuseImportance.toVar(), c = s.greaterThan(.001).toVar(), l = e.transmissionImportance.toVar(), u = l.greaterThan(.001).toVar(), d = e.clearcoatImportance.toVar(), f = d.greaterThan(.001).toVar(), p = a.add(s).add(l).add(d).toVar();
3885
3896
  return N(p.lessThan(.001), () => {
3886
3897
  a.assign(0), s.assign(1), l.assign(0), d.assign(0), p.assign(1), o.assign(I(!1)), c.assign(I(!0)), u.assign(I(!1)), f.assign(I(!1));
3887
3898
  }).Else(() => {
3888
3899
  let e = z(1).div(p).toVar();
3889
3900
  a.mulAssign(e), s.mulAssign(e), l.mulAssign(e), d.mulAssign(e), p.assign(1);
3890
- }), Fr({
3901
+ }), Ir({
3891
3902
  envWeight: z(0),
3892
3903
  specularWeight: a,
3893
3904
  diffuseWeight: s,
@@ -3900,7 +3911,7 @@ var ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
3900
3911
  useTransmission: u,
3901
3912
  useClearcoat: f
3902
3913
  });
3903
- }), lo = M(([e, t]) => {
3914
+ }), uo = M(([e, t]) => {
3904
3915
  let n = B(2).toVar(), r = z(1).toVar(), i = z(0).toVar(), a = I(!1).toVar();
3905
3916
  return N(e.useSpecular.and(a.not()), () => {
3906
3917
  i.addAssign(e.specularWeight), N(t.lessThan(i), () => {
@@ -3919,49 +3930,49 @@ var ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
3919
3930
  }), N(a.not(), () => {
3920
3931
  n.assign(2), r.assign(W(e.useDiffuse, e.diffuseWeight, z(1)));
3921
3932
  }), q(z(n), r);
3922
- }), uo = M(([e]) => V(e, 0).mul(zr)), fo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v]) => {
3933
+ }), fo = M(([e]) => V(e, 0).mul(Br)), po = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v]) => {
3923
3934
  let y = J(0).toVar(), b = J(0).toVar(), x = z(0).toVar(), S = z(0).toVar(), C = z(0).toVar();
3924
3935
  return N(l.diffuseImportance.greaterThanEqual(0).and(l.specularImportance.greaterThanEqual(0)).and(l.transmissionImportance.greaterThanEqual(0)).and(l.clearcoatImportance.greaterThanEqual(0)).and(l.envmapImportance.greaterThanEqual(0)).toVar().not(), () => {
3925
3936
  let e = q($t(c).toVar(), $t(c).toVar()).toVar();
3926
- y.assign(pa(t, e)), b.assign(n.color.xyz), x.assign(1), S.assign(1);
3937
+ y.assign(ma(t, e)), b.assign(n.color.xyz), x.assign(1), S.assign(1);
3927
3938
  }).Else(() => {
3928
- let o = Fr.wrap(co(l, s, n, _, v).toVar()), u = $t(c).toVar(), d = q($t(c).toVar(), $t(c).toVar()).toVar(), f = lo(o, u).toVar(), p = B(f.x).toVar();
3939
+ let o = Ir.wrap(lo(l, s, n, _, v).toVar()), u = $t(c).toVar(), d = q($t(c).toVar(), $t(c).toVar()).toVar(), f = uo(o, u).toVar(), p = B(f.x).toVar();
3929
3940
  f.y.toVar();
3930
3941
  let m = J(0).toVar(), h = z(0).toVar(), g = J(0).toVar();
3931
3942
  N(p.equal(B(1)), () => {
3932
3943
  m.assign(r), h.assign(i), g.assign(a);
3933
3944
  }).ElseIf(p.equal(B(2)), () => {
3934
- m.assign(pa(t, d)), h.assign(uo(V(R(t, m), 0))), g.assign(Da(e, m, t, n));
3945
+ m.assign(ma(t, d)), h.assign(fo(V(R(t, m), 0))), g.assign(Oa(e, m, t, n));
3935
3946
  }).ElseIf(p.equal(B(3)), () => {
3936
- let r = R(e, t).greaterThan(0).toVar(), i = ba.wrap(wa(e, t, n.ior, n.roughness, r, n.dispersion, d, c).toVar());
3937
- m.assign(i.direction), h.assign(i.pdf), g.assign(Da(e, m, t, n));
3947
+ let r = R(e, t).greaterThan(0).toVar(), i = xa.wrap(Ta(e, t, n.ior, n.roughness, r, n.dispersion, d, c).toVar());
3948
+ m.assign(i.direction), h.assign(i.pdf), g.assign(Oa(e, m, t, n));
3938
3949
  }).Else(() => {
3939
3950
  m.assign(r), h.assign(i), g.assign(a);
3940
3951
  });
3941
3952
  let w = R(t, m).toVar(), T = V(w, 0).toVar(), E = F(w).toVar(), D = z(0).toVar();
3942
3953
  N(o.useSpecular, () => {
3943
- let r = aa(V(R(t, U(e.add(m))), .001), V(R(t, e), .001), n.roughness);
3954
+ let r = oa(V(R(t, U(e.add(m))), .001), V(R(t, e), .001), n.roughness);
3944
3955
  D.addAssign(o.specularWeight.mul(r));
3945
3956
  }), N(o.useDiffuse, () => {
3946
- let e = uo(T).toVar();
3957
+ let e = fo(T).toVar();
3947
3958
  D.addAssign(o.diffuseWeight.mul(e));
3948
3959
  }), N(o.useTransmission.and(n.transmission.greaterThan(0)), () => {
3949
- let r = R(e, t).greaterThan(0).toVar(), i = oo(e, m, t, n.ior, n.roughness, r).toVar();
3960
+ let r = R(e, t).greaterThan(0).toVar(), i = so(e, m, t, n.ior, n.roughness, r).toVar();
3950
3961
  D.addAssign(o.transmissionWeight.mul(i));
3951
3962
  }), N(o.useClearcoat.and(n.clearcoat.greaterThan(0)), () => {
3952
- let r = so(e, m, t, n.clearcoatRoughness).toVar();
3963
+ let r = co(e, m, t, n.clearcoatRoughness).toVar();
3953
3964
  D.addAssign(o.clearcoatWeight.mul(r));
3954
- }), h.assign(V(h, Wr)), D.assign(V(D, Wr));
3965
+ }), h.assign(V(h, Gr)), D.assign(V(D, Gr));
3955
3966
  let O = h.div(D).toVar(), k = W(p.equal(B(3)), E, T), A = g.mul(k).mul(O).div(h).toVar();
3956
3967
  y.assign(m), b.assign(A), x.assign(O), S.assign(h), C.assign(D);
3957
- }), Ia({
3968
+ }), La({
3958
3969
  direction: y,
3959
3970
  throughput: b,
3960
3971
  misWeight: x,
3961
3972
  pdf: S,
3962
3973
  combinedPdf: C
3963
3974
  });
3964
- }), po = Cr({
3975
+ }), mo = wr({
3965
3976
  position: "vec3",
3966
3977
  normal: "vec3",
3967
3978
  emission: "vec3",
@@ -3971,40 +3982,40 @@ var ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
3971
3982
  area: "float",
3972
3983
  cosThetaLight: "float",
3973
3984
  valid: "bool"
3974
- }), mo = Cr({
3985
+ }), ho = wr({
3975
3986
  contribution: "vec3",
3976
3987
  hasEmissive: "bool",
3977
3988
  emissionOnly: "vec3",
3978
3989
  distance: "float"
3979
- }), ho = M(([e, t, n, r]) => {
3990
+ }), go = M(([e, t, n, r]) => {
3980
3991
  let i = ht(r.x), a = z(1).sub(i), o = r.y.mul(i), s = z(1).sub(a).sub(o);
3981
3992
  return e.mul(a).add(t.mul(o)).add(n.mul(s));
3982
- }), go = M(([e, t, n]) => et(Ye(t.sub(e), n.sub(e))).mul(.5)), _o = M(([e, t, n, r]) => {
3993
+ }), _o = M(([e, t, n]) => et(Ye(t.sub(e), n.sub(e))).mul(.5)), vo = M(([e, t, n, r]) => {
3983
3994
  let i = U(e.sub(r)), a = U(t.sub(r)), o = U(n.sub(r)), s = F(R(i, Ye(a, o))), c = z(1).add(R(a, o)).add(R(i, o)).add(R(i, a));
3984
3995
  return V(z(2).mul(qe(s, V(c, z(1e-10)))), z(0));
3985
- }), vo = M(([e, t, n, r]) => {
3996
+ }), yo = M(([e, t, n, r]) => {
3986
3997
  let i = t.sub(e), a = n.sub(e), o = n.sub(t), s = V(R(i, i), V(R(a, a), R(o, o))), c = Ye(i, a), l = R(c, c), u = I(!1).toVar();
3987
3998
  return N(l.greaterThan(1e-20), () => {
3988
3999
  let t = R(c, r.sub(e)), n = t.mul(t).div(l);
3989
4000
  u.assign(s.greaterThan(n));
3990
4001
  }), u;
3991
- }), yo = Cr({
4002
+ }), bo = wr({
3992
4003
  direction: "vec3",
3993
4004
  position: "vec3",
3994
4005
  solidAngle: "float",
3995
4006
  valid: "bool"
3996
- }), bo = M(([e]) => {
4007
+ }), xo = M(([e]) => {
3997
4008
  let t = et(e);
3998
4009
  return W(t.greaterThan(1e-10), e.div(t), J(0));
3999
- }), xo = M(([e, t, n, r, i]) => {
4000
- let a = yo({
4010
+ }), So = M(([e, t, n, r, i]) => {
4011
+ let a = bo({
4001
4012
  direction: J(0),
4002
4013
  position: J(0),
4003
4014
  solidAngle: z(0),
4004
4015
  valid: !1
4005
- }).toVar(), o = U(e.sub(r)), s = U(t.sub(r)), c = U(n.sub(r)), l = _o(e, t, n, r);
4016
+ }).toVar(), o = U(e.sub(r)), s = U(t.sub(r)), c = U(n.sub(r)), l = vo(e, t, n, r);
4006
4017
  return a.solidAngle.assign(l), N(l.greaterThan(1e-7), () => {
4007
- let u = L(R(bo(Ye(o, s)), bo(Ye(o, c))), -1, 1), d = ht(V(z(1).sub(u.mul(u)), 0)), f = Ge(u), p = i.x.mul(l).sub(f), m = pt(p), h = Je(p), g = L(R(o, s), -1, 1), _ = h.sub(u), v = m.add(d.mul(g)), y = v.mul(h).sub(_.mul(m)).mul(u).sub(v), b = v.mul(m).add(_.mul(h)).mul(d), x = L(W(F(b).greaterThan(1e-10), y.div(b), z(1)), -1, 1), S = R(c, o), C = bo(c.sub(o.mul(S))), w = ht(V(z(1).sub(x.mul(x)), 0)), T = U(o.mul(x).add(C.mul(w))), E = R(T, s), D = z(1).sub(i.y.mul(z(1).sub(E))), O = ht(V(z(1).sub(D.mul(D)), 0)), k = bo(T.sub(s.mul(E))), A = U(s.mul(D).add(k.mul(O))), ee = U(Ye(t.sub(e), n.sub(e))), te = R(ee, A);
4018
+ let u = L(R(xo(Ye(o, s)), xo(Ye(o, c))), -1, 1), d = ht(V(z(1).sub(u.mul(u)), 0)), f = Ge(u), p = i.x.mul(l).sub(f), m = pt(p), h = Je(p), g = L(R(o, s), -1, 1), _ = h.sub(u), v = m.add(d.mul(g)), y = v.mul(h).sub(_.mul(m)).mul(u).sub(v), b = v.mul(m).add(_.mul(h)).mul(d), x = L(W(F(b).greaterThan(1e-10), y.div(b), z(1)), -1, 1), S = R(c, o), C = xo(c.sub(o.mul(S))), w = ht(V(z(1).sub(x.mul(x)), 0)), T = U(o.mul(x).add(C.mul(w))), E = R(T, s), D = z(1).sub(i.y.mul(z(1).sub(E))), O = ht(V(z(1).sub(D.mul(D)), 0)), k = xo(T.sub(s.mul(E))), A = U(s.mul(D).add(k.mul(O))), ee = U(Ye(t.sub(e), n.sub(e))), te = R(ee, A);
4008
4019
  N(F(te).greaterThan(1e-10), () => {
4009
4020
  let t = R(ee, e.sub(r)).div(te);
4010
4021
  N(t.greaterThan(0), () => {
@@ -4012,21 +4023,21 @@ var ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
4012
4023
  });
4013
4024
  });
4014
4025
  }), a;
4015
- }), So = M(([e, t, n, r]) => {
4026
+ }), Co = M(([e, t, n, r]) => {
4016
4027
  let i = n.sub(t), a = r.sub(t), o = e.sub(t), s = R(i, i), c = R(i, a), l = R(a, a), u = R(o, i), d = R(o, a), f = z(1).div(V(s.mul(l).sub(c.mul(c)), z(1e-10))), p = l.mul(u).sub(c.mul(d)).mul(f), m = s.mul(d).sub(c.mul(u)).mul(f);
4017
4028
  return J(z(1).sub(p).sub(m), p, m);
4018
- }), Co = M(([e, t, n, r]) => {
4029
+ }), wo = M(([e, t, n, r]) => {
4019
4030
  let i = ht(r.x), a = z(1).sub(i), o = r.y.mul(i), s = z(1).sub(a).sub(o);
4020
4031
  return U(e.mul(a).add(t.mul(o)).add(n.mul(s)));
4021
- }), wo = M(([e]) => e.emissiveIntensity.greaterThan(0).and(et(e.emissive).greaterThan(0)));
4032
+ }), To = M(([e]) => e.emissiveIntensity.greaterThan(0).and(et(e.emissive).greaterThan(0)));
4022
4033
  M(([e, t]) => {
4023
4034
  let n = z(0).toVar();
4024
- return N(wo(e), () => {
4035
+ return N(To(e), () => {
4025
4036
  let r = e.emissive.x.add(e.emissive.y).add(e.emissive.z).div(3);
4026
4037
  n.assign(r.mul(e.emissiveIntensity).mul(t));
4027
4038
  }), n;
4028
4039
  });
4029
- var To = 8, Eo = 2, Do = Cr({
4040
+ var Eo = 8, Do = 2, Oo = wr({
4030
4041
  v0: "vec3",
4031
4042
  v1: "vec3",
4032
4043
  v2: "vec3",
@@ -4034,9 +4045,9 @@ var To = 8, Eo = 2, Do = Cr({
4034
4045
  n1: "vec3",
4035
4046
  n2: "vec3",
4036
4047
  materialIndex: "int"
4037
- }), Oo = M(([e, t]) => {
4038
- let n = $(t, e, B(0), B(To)), r = $(t, e, B(1), B(To)), i = $(t, e, B(2), B(To)), a = $(t, e, B(3), B(To)), o = $(t, e, B(4), B(To)), s = $(t, e, B(5), B(To)), c = $(t, e, B(7), B(To));
4039
- return Do({
4048
+ }), ko = M(([e, t]) => {
4049
+ let n = $(t, e, B(0), B(Eo)), r = $(t, e, B(1), B(Eo)), i = $(t, e, B(2), B(Eo)), a = $(t, e, B(3), B(Eo)), o = $(t, e, B(4), B(Eo)), s = $(t, e, B(5), B(Eo)), c = $(t, e, B(7), B(Eo));
4050
+ return Oo({
4040
4051
  v0: n.xyz,
4041
4052
  v1: r.xyz,
4042
4053
  v2: i.xyz,
@@ -4045,27 +4056,27 @@ var To = 8, Eo = 2, Do = Cr({
4045
4056
  n2: s.xyz,
4046
4057
  materialIndex: B(c.z)
4047
4058
  });
4048
- }), ko = M(([e, t, n, r, i, a, o]) => {
4049
- let s = Do.wrap(Oo(e, i)), c = go(s.v0, s.v1, s.v2), l = B(27), u = $(a, s.materialIndex, B(1), l), d = $(a, s.materialIndex, B(2), l), f = V(u.x.add(u.y).add(u.z).div(3).mul(d.a).mul(c), z(1e-10)).div(V(o, z(1e-10))), p = z(0).toVar();
4050
- return N(vo(s.v0, s.v1, s.v2, r), () => {
4051
- let e = _o(s.v0, s.v1, s.v2, r);
4059
+ }), Ao = M(([e, t, n, r, i, a, o]) => {
4060
+ let s = Oo.wrap(ko(e, i)), c = _o(s.v0, s.v1, s.v2), l = B(27), u = $(a, s.materialIndex, B(1), l), d = $(a, s.materialIndex, B(2), l), f = V(u.x.add(u.y).add(u.z).div(3).mul(d.a).mul(c), z(1e-10)).div(V(o, z(1e-10))), p = z(0).toVar();
4061
+ return N(yo(s.v0, s.v1, s.v2, r), () => {
4062
+ let e = vo(s.v0, s.v1, s.v2, r);
4052
4063
  p.assign(f.div(V(e, z(1e-10))));
4053
4064
  }).Else(() => {
4054
4065
  let e = U(Ye(s.v1.sub(s.v0), s.v2.sub(s.v0))), r = V(R(n.negate(), e), .001), i = t.mul(t), a = f.div(c);
4055
4066
  p.assign(a.mul(i).div(r));
4056
- }), V(p, Wr);
4057
- }), Ao = M(([e, t, n]) => {
4067
+ }), V(p, Gr);
4068
+ }), jo = M(([e, t, n]) => {
4058
4069
  let r = B(0).toVar(), i = t.sub(1).toVar();
4059
4070
  return P(r.lessThan(i), () => {
4060
- let t = r.add(i).div(2).toVar(), a = e.element(t.mul(Eo)).b;
4071
+ let t = r.add(i).div(2).toVar(), a = e.element(t.mul(Do)).b;
4061
4072
  N(a.lessThan(n), () => {
4062
4073
  r.assign(t.add(1));
4063
4074
  }).Else(() => {
4064
4075
  i.assign(t);
4065
4076
  });
4066
4077
  }), r;
4067
- }), jo = M(([e, t, n, r, i, a, o, s]) => {
4068
- let c = po({
4078
+ }), Mo = M(([e, t, n, r, i, a, o, s]) => {
4079
+ let c = mo({
4069
4080
  position: J(0),
4070
4081
  normal: J(0),
4071
4082
  emission: J(0),
@@ -4077,40 +4088,40 @@ var To = 8, Eo = 2, Do = Cr({
4077
4088
  valid: !1
4078
4089
  }).toVar();
4079
4090
  return N(a.greaterThan(B(0)), () => {
4080
- let n = Ao(i, a, $t(r)).toVar().mul(Eo), l = i.element(n), u = i.element(n.add(1)), d = B(l.r), f = V(l.g, z(1e-10)), p = u.xyz, m = u.w, h = Do.wrap(Oo(d, s)), g = q($t(r).toVar(), $t(r).toVar()), _ = U(Ye(h.v1.sub(h.v0), h.v2.sub(h.v0)));
4081
- N(vo(h.v0, h.v1, h.v2, e), () => {
4082
- let n = yo.wrap(xo(h.v0, h.v1, h.v2, e, g));
4091
+ let n = jo(i, a, $t(r)).toVar().mul(Do), l = i.element(n), u = i.element(n.add(1)), d = B(l.r), f = V(l.g, z(1e-10)), p = u.xyz, m = u.w, h = Oo.wrap(ko(d, s)), g = q($t(r).toVar(), $t(r).toVar()), _ = U(Ye(h.v1.sub(h.v0), h.v2.sub(h.v0)));
4092
+ N(yo(h.v0, h.v1, h.v2, e), () => {
4093
+ let n = bo.wrap(So(h.v0, h.v1, h.v2, e, g));
4083
4094
  N(n.valid.and(n.solidAngle.greaterThan(1e-7)), () => {
4084
4095
  let r = n.direction, i = n.position, a = R(r, t), s = R(r, _.negate());
4085
4096
  N(a.greaterThan(0).and(s.greaterThan(0)), () => {
4086
- let t = So(i, h.v0, h.v1, h.v2), a = U(h.n0.mul(t.x).add(h.n1.mul(t.y)).add(h.n2.mul(t.z))), l = et(i.sub(e)), u = f.div(V(o, z(1e-10))).div(n.solidAngle);
4087
- c.position.assign(i), c.normal.assign(a), c.emission.assign(p), c.direction.assign(r), c.distance.assign(l), c.pdf.assign(V(u, Wr)), c.area.assign(m), c.cosThetaLight.assign(s), c.valid.assign(!0);
4097
+ let t = Co(i, h.v0, h.v1, h.v2), a = U(h.n0.mul(t.x).add(h.n1.mul(t.y)).add(h.n2.mul(t.z))), l = et(i.sub(e)), u = f.div(V(o, z(1e-10))).div(n.solidAngle);
4098
+ c.position.assign(i), c.normal.assign(a), c.emission.assign(p), c.direction.assign(r), c.distance.assign(l), c.pdf.assign(V(u, Gr)), c.area.assign(m), c.cosThetaLight.assign(s), c.valid.assign(!0);
4088
4099
  });
4089
4100
  });
4090
4101
  }).Else(() => {
4091
- let n = ho(h.v0, h.v1, h.v2, g), r = Co(h.n0, h.n1, h.n2, g), i = n.sub(e), a = R(i, i), s = ht(a), l = i.div(s), u = R(l, t), d = R(l, r.negate());
4102
+ let n = go(h.v0, h.v1, h.v2, g), r = wo(h.n0, h.n1, h.n2, g), i = n.sub(e), a = R(i, i), s = ht(a), l = i.div(s), u = R(l, t), d = R(l, r.negate());
4092
4103
  N(u.greaterThan(0).and(d.greaterThan(0)), () => {
4093
4104
  let e = f.div(V(o, z(1e-10)).mul(m)).mul(a).div(d);
4094
- c.position.assign(n), c.normal.assign(r), c.emission.assign(p), c.direction.assign(l), c.distance.assign(s), c.pdf.assign(V(e, Wr)), c.area.assign(m), c.cosThetaLight.assign(d), c.valid.assign(!0);
4105
+ c.position.assign(n), c.normal.assign(r), c.emission.assign(p), c.direction.assign(l), c.distance.assign(s), c.pdf.assign(V(e, Gr)), c.area.assign(m), c.cosThetaLight.assign(d), c.valid.assign(!0);
4095
4106
  });
4096
4107
  });
4097
4108
  }), c;
4098
- }), Mo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m]) => {
4099
- let h = mo({
4109
+ }), No = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m]) => {
4110
+ let h = ho({
4100
4111
  contribution: J(0),
4101
4112
  hasEmissive: !1,
4102
4113
  emissionOnly: J(0),
4103
4114
  distance: z(0)
4104
4115
  }).toVar();
4105
4116
  return N(a.greaterThan(B(1)).and(r.roughness.greaterThan(.9)).and(r.metalness.lessThan(.1)).not(), () => {
4106
- let a = po.wrap(jo(e, t, i, o, c, l, u, d));
4117
+ let a = mo.wrap(Mo(e, t, i, o, c, l, u, d));
4107
4118
  N(a.valid.and(a.pdf.greaterThan(0)), () => {
4108
4119
  h.hasEmissive.assign(!0), h.emissionOnly.assign(a.emission), h.distance.assign(a.distance);
4109
4120
  let i = V(z(0), R(t, a.direction));
4110
4121
  N(i.greaterThan(0), () => {
4111
4122
  let c = m(e, t, r), l = e.add(c), u = a.distance.sub(.001), d = f(l, a.direction, u, o);
4112
4123
  N(d.greaterThan(0), () => {
4113
- let e = p(n, a.direction, t, r), o = io(n, a.direction, t, r), c = W(o.greaterThan(0), Xr({
4124
+ let e = p(n, a.direction, t, r), o = ao(n, a.direction, t, r), c = W(o.greaterThan(0), Zr({
4114
4125
  pdf1: a.pdf,
4115
4126
  pdf2: o
4116
4127
  }), z(1));
@@ -4119,8 +4130,8 @@ var To = 8, Eo = 2, Do = Cr({
4119
4130
  });
4120
4131
  });
4121
4132
  }), h;
4122
- }), No = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m]) => mo.wrap(Mo(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)).contribution), Po = 4, Fo = 2, Io = 32, Lo = M(([e, t, n, r, i, a]) => {
4123
- let o = po({
4133
+ }), Po = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m]) => ho.wrap(No(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)).contribution), Fo = 4, Io = 2, Lo = 32, Ro = M(([e, t, n, r, i, a]) => {
4134
+ let o = mo({
4124
4135
  position: J(0),
4125
4136
  normal: J(0),
4126
4137
  emission: J(0),
@@ -4131,12 +4142,12 @@ var To = 8, Eo = 2, Do = Cr({
4131
4142
  cosThetaLight: z(0),
4132
4143
  valid: !1
4133
4144
  }).toVar(), s = z(1).toVar(), c = B(0).toVar(), l = I(!1).toVar();
4134
- return P(Io, () => {
4135
- let t = c.mul(B(Po)), i = r.element(t.add(B(1))), a = r.element(t.add(B(2)));
4145
+ return P(Lo, () => {
4146
+ let t = c.mul(B(Fo)), i = r.element(t.add(B(1))), a = r.element(t.add(B(2)));
4136
4147
  N(i.w.greaterThan(.5), () => {
4137
4148
  l.assign(I(!0)), Ve();
4138
4149
  });
4139
- let o = B(a.x), u = B(a.y), d = o.mul(B(Po)), f = r.element(d), p = r.element(d.add(B(1))), m = u.mul(B(Po)), h = r.element(m), g = r.element(m.add(B(1))), _ = J(f.x.add(p.x).mul(.5), f.y.add(p.y).mul(.5), f.z.add(p.z).mul(.5)), v = J(h.x.add(g.x).mul(.5), h.y.add(g.y).mul(.5), h.z.add(g.z).mul(.5)), y = _.sub(e), b = v.sub(e), x = V(R(y, y), z(.01)), S = V(R(b, b), z(.01)), C = V(f.w, z(0)), w = V(h.w, z(0)), T = C.div(x), E = w.div(S), D = T.add(E);
4150
+ let o = B(a.x), u = B(a.y), d = o.mul(B(Fo)), f = r.element(d), p = r.element(d.add(B(1))), m = u.mul(B(Fo)), h = r.element(m), g = r.element(m.add(B(1))), _ = J(f.x.add(p.x).mul(.5), f.y.add(p.y).mul(.5), f.z.add(p.z).mul(.5)), v = J(h.x.add(g.x).mul(.5), h.y.add(g.y).mul(.5), h.z.add(g.z).mul(.5)), y = _.sub(e), b = v.sub(e), x = V(R(y, y), z(.01)), S = V(R(b, b), z(.01)), C = V(f.w, z(0)), w = V(h.w, z(0)), T = C.div(x), E = w.div(S), D = T.add(E);
4140
4151
  N(D.lessThanEqual(z(0)), () => {
4141
4152
  c.assign(o);
4142
4153
  }).Else(() => {
@@ -4148,54 +4159,54 @@ var To = 8, Eo = 2, Do = Cr({
4148
4159
  });
4149
4160
  });
4150
4161
  }), N(l, () => {
4151
- let l = c.mul(B(Po)), u = r.element(l), d = r.element(l.add(B(2))), f = B(d.x), p = B(d.y), m = V(u.w, z(1e-10)), h = $t(n).mul(m), g = z(0).toVar(), _ = f.add(p.sub(B(1))).toVar(), v = z(1e-10).toVar();
4162
+ let l = c.mul(B(Fo)), u = r.element(l), d = r.element(l.add(B(2))), f = B(d.x), p = B(d.y), m = V(u.w, z(1e-10)), h = $t(n).mul(m), g = z(0).toVar(), _ = f.add(p.sub(B(1))).toVar(), v = z(1e-10).toVar();
4152
4163
  P({
4153
4164
  start: B(0),
4154
4165
  end: p
4155
4166
  }, ({ i: e }) => {
4156
- let t = f.add(e), n = t.mul(B(Fo)), r = V(i.element(n).g, z(0));
4167
+ let t = f.add(e), n = t.mul(B(Io)), r = V(i.element(n).g, z(0));
4157
4168
  g.addAssign(r), N(g.greaterThanEqual(h).and(r.greaterThan(z(0))), () => {
4158
4169
  _.assign(t), v.assign(r), Ve();
4159
4170
  });
4160
4171
  }), s.mulAssign(v.div(m));
4161
- let y = _.mul(B(Fo)), b = i.element(y), x = i.element(y.add(B(1))), S = B(b.r), C = x.xyz, w = x.w, T = Do.wrap(Oo(S, a)), E = q($t(n).toVar(), $t(n).toVar()), D = U(Ye(T.v1.sub(T.v0), T.v2.sub(T.v0)));
4162
- N(vo(T.v0, T.v1, T.v2, e), () => {
4163
- let n = yo.wrap(xo(T.v0, T.v1, T.v2, e, E));
4172
+ let y = _.mul(B(Io)), b = i.element(y), x = i.element(y.add(B(1))), S = B(b.r), C = x.xyz, w = x.w, T = Oo.wrap(ko(S, a)), E = q($t(n).toVar(), $t(n).toVar()), D = U(Ye(T.v1.sub(T.v0), T.v2.sub(T.v0)));
4173
+ N(yo(T.v0, T.v1, T.v2, e), () => {
4174
+ let n = bo.wrap(So(T.v0, T.v1, T.v2, e, E));
4164
4175
  N(n.valid.and(n.solidAngle.greaterThan(z(1e-7))), () => {
4165
4176
  let r = n.direction, i = n.position, a = R(r, t), c = R(r, D.negate());
4166
4177
  N(a.greaterThan(z(0)).and(c.greaterThan(z(0))), () => {
4167
- let t = So(i, T.v0, T.v1, T.v2), a = U(T.n0.mul(t.x).add(T.n1.mul(t.y)).add(T.n2.mul(t.z))), l = et(i.sub(e)), u = s.div(V(n.solidAngle, z(1e-10)));
4168
- o.position.assign(i), o.normal.assign(a), o.emission.assign(C), o.direction.assign(r), o.distance.assign(l), o.pdf.assign(V(u, Wr)), o.area.assign(w), o.cosThetaLight.assign(c), o.valid.assign(!0);
4178
+ let t = Co(i, T.v0, T.v1, T.v2), a = U(T.n0.mul(t.x).add(T.n1.mul(t.y)).add(T.n2.mul(t.z))), l = et(i.sub(e)), u = s.div(V(n.solidAngle, z(1e-10)));
4179
+ o.position.assign(i), o.normal.assign(a), o.emission.assign(C), o.direction.assign(r), o.distance.assign(l), o.pdf.assign(V(u, Gr)), o.area.assign(w), o.cosThetaLight.assign(c), o.valid.assign(!0);
4169
4180
  });
4170
4181
  });
4171
4182
  }).Else(() => {
4172
- let n = ho(T.v0, T.v1, T.v2, E), r = Co(T.n0, T.n1, T.n2, E), i = n.sub(e), a = R(i, i), c = ht(a), l = i.div(c), u = R(l, t), d = R(l, r.negate());
4183
+ let n = go(T.v0, T.v1, T.v2, E), r = wo(T.n0, T.n1, T.n2, E), i = n.sub(e), a = R(i, i), c = ht(a), l = i.div(c), u = R(l, t), d = R(l, r.negate());
4173
4184
  N(u.greaterThan(z(0)).and(d.greaterThan(z(0))), () => {
4174
4185
  let e = s.div(V(w, z(1e-10))).mul(a).div(d);
4175
- o.position.assign(n), o.normal.assign(r), o.emission.assign(C), o.direction.assign(l), o.distance.assign(c), o.pdf.assign(V(e, Wr)), o.area.assign(w), o.cosThetaLight.assign(d), o.valid.assign(!0);
4186
+ o.position.assign(n), o.normal.assign(r), o.emission.assign(C), o.direction.assign(l), o.distance.assign(c), o.pdf.assign(V(e, Gr)), o.area.assign(w), o.cosThetaLight.assign(d), o.valid.assign(!0);
4176
4187
  });
4177
4188
  });
4178
4189
  }), o;
4179
- }), Ro = 0, zo = 1, Bo = 2, Vo = 3, Ho = Cr({
4190
+ }), zo = 0, Bo = 1, Vo = 2, Ho = 3, Uo = wr({
4180
4191
  radiance: "vec4",
4181
4192
  objectNormal: "vec3",
4182
4193
  objectColor: "vec3",
4183
4194
  objectID: "float",
4184
4195
  firstHitPoint: "vec3",
4185
4196
  firstHitDistance: "float"
4186
- }), Uo = M(([e, t, n, r, i]) => {
4197
+ }), Wo = M(([e, t, n, r, i]) => {
4187
4198
  let a = i.toVar();
4188
4199
  return N(n.not().or(r.notEqual(t)), () => {
4189
- a.assign(ni(e.metalness, e.roughness, e.transmission, e.clearcoat, e.emissive));
4200
+ a.assign(ri(e.metalness, e.roughness, e.transmission, e.clearcoat, e.emissive));
4190
4201
  }), a;
4191
- }), Wo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
4192
- let p = J(0).toVar(), m = J(0).toVar(), h = z(0).toVar(), g = Mr.wrap(Uo(n, r, o, s, c)).toVar(), _ = u.toVar();
4202
+ }), Go = M(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
4203
+ let p = J(0).toVar(), m = J(0).toVar(), h = z(0).toVar(), g = Nr.wrap(Wo(n, r, o, s, c)).toVar(), _ = u.toVar();
4193
4204
  N(l.not(), () => {
4194
4205
  N(d, () => {
4195
- _.assign(ca(n, g, f));
4206
+ _.assign(la(n, g, f));
4196
4207
  }).Else(() => {
4197
- let e = Pr({
4198
- F0: Zi(n.ior),
4208
+ let e = Fr({
4209
+ F0: Qi(n.ior),
4199
4210
  NoV: z(1),
4200
4211
  diffuseColor: J(0),
4201
4212
  specularColor: J(0),
@@ -4216,30 +4227,30 @@ var To = 8, Eo = 2, Do = Cr({
4216
4227
  iorFactor: at(z(2).div(n.ior), 1),
4217
4228
  maxSheenColor: V(n.sheenColor.x, V(n.sheenColor.y, n.sheenColor.z))
4218
4229
  }).toVar();
4219
- _.assign(ca(n, g, e));
4230
+ _.assign(la(n, g, e));
4220
4231
  });
4221
4232
  });
4222
4233
  let v = i.x.toVar(), y = q(i.y, $t(a)).toVar(), b = J(0).toVar(), x = _.diffuse.toVar(), S = x.add(_.specular).toVar(), C = S.add(_.sheen).toVar(), w = C.add(_.clearcoat).toVar(), T = I(!1).toVar();
4223
4234
  N(v.lessThan(x).and(T.not()), () => {
4224
- p.assign(fa({
4235
+ p.assign(pa({
4225
4236
  N: t,
4226
4237
  xi: y
4227
4238
  }));
4228
4239
  let r = L(R(t, p), 0, 1);
4229
- h.assign(r.mul(zr)), m.assign(Da(e, p, t, n)), T.assign(I(!0));
4240
+ h.assign(r.mul(Br)), m.assign(Oa(e, p, t, n)), T.assign(I(!0));
4230
4241
  });
4231
4242
  let E = L(R(t, e), .001, 1).toVar();
4232
4243
  return N(v.lessThan(S).and(T.not()), () => {
4233
- let r = Zr({ N: t }), a = ma({
4244
+ let r = Qr({ N: t }), a = ha({
4234
4245
  V: r.transpose().mul(e).toVar(),
4235
4246
  roughness: n.roughness,
4236
4247
  Xi: i
4237
4248
  });
4238
4249
  b.assign(r.mul(a));
4239
4250
  let o = L(R(t, b), .001, 1);
4240
- p.assign(lt(e.negate(), b)), h.assign(aa(o, E, n.roughness)), m.assign(Da(e, p, t, n)), T.assign(I(!0));
4251
+ p.assign(lt(e.negate(), b)), h.assign(oa(o, E, n.roughness)), m.assign(Oa(e, p, t, n)), T.assign(I(!0));
4241
4252
  }), N(v.lessThan(C).and(T.not()), () => {
4242
- b.assign(da({
4253
+ b.assign(fa({
4243
4254
  N: t,
4244
4255
  roughness: n.sheenRoughness,
4245
4256
  Xi: i
@@ -4248,32 +4259,32 @@ var To = 8, Eo = 2, Do = Cr({
4248
4259
  p.assign(lt(e.negate(), b));
4249
4260
  let o = R(t, p).toVar();
4250
4261
  N(o.lessThanEqual(0), () => {
4251
- p.assign(fa({
4262
+ p.assign(pa({
4252
4263
  N: t,
4253
4264
  xi: i
4254
- })), o.assign(L(R(t, p), 0, 1)), h.assign(o.mul(zr)), m.assign(Da(e, p, t, n));
4265
+ })), o.assign(L(R(t, p), 0, 1)), h.assign(o.mul(Br)), m.assign(Oa(e, p, t, n));
4255
4266
  }).Else(() => {
4256
- h.assign($i(r, n.sheenRoughness).mul(r).div(z(4).mul(a))), h.assign(V(h, Wr)), m.assign(Da(e, p, t, n));
4267
+ h.assign(ea(r, n.sheenRoughness).mul(r).div(z(4).mul(a))), h.assign(V(h, Gr)), m.assign(Oa(e, p, t, n));
4257
4268
  }), T.assign(I(!0));
4258
4269
  }), N(v.lessThan(w).and(T.not()), () => {
4259
- let r = L(n.clearcoatRoughness, Ur, 1);
4260
- b.assign(da({
4270
+ let r = L(n.clearcoatRoughness, Wr, 1);
4271
+ b.assign(fa({
4261
4272
  N: t,
4262
4273
  roughness: r,
4263
4274
  Xi: i
4264
4275
  }));
4265
4276
  let a = L(R(t, b), 0, 1);
4266
- p.assign(lt(e.negate(), b)), h.assign(aa(a, E, r)), h.assign(V(h, Wr)), m.assign(Da(e, p, t, n)), T.assign(I(!0));
4277
+ p.assign(lt(e.negate(), b)), h.assign(oa(a, E, r)), h.assign(V(h, Gr)), m.assign(Oa(e, p, t, n)), T.assign(I(!0));
4267
4278
  }), N(T.not(), () => {
4268
- let r = R(e, t).greaterThan(0).toVar(), o = ba.wrap(wa(e, t, n.ior, n.roughness, r, n.dispersion, i, a));
4269
- p.assign(o.direction), h.assign(V(o.pdf, Wr)), m.assign(Da(e, p, t, n));
4270
- }), h.assign(V(h, Wr)), Dr({
4279
+ let r = R(e, t).greaterThan(0).toVar(), o = xa.wrap(Ta(e, t, n.ior, n.roughness, r, n.dispersion, i, a));
4280
+ p.assign(o.direction), h.assign(V(o.pdf, Gr)), m.assign(Oa(e, p, t, n));
4281
+ }), h.assign(V(h, Gr)), Or({
4271
4282
  direction: p,
4272
4283
  value: m,
4273
4284
  pdf: h
4274
4285
  });
4275
- }), Go = M(([e, t, n, r, i, a, o, s, c]) => {
4276
- let l = V(Jr({ v: e }), 0).toVar(), u = Mr.wrap(Uo(n, r, i, a, o)).toVar(), d = u.complexityScore.toVar();
4286
+ }), Ko = M(([e, t, n, r, i, a, o, s, c]) => {
4287
+ let l = V(Yr({ v: e }), 0).toVar(), u = Nr.wrap(Wo(n, r, i, a, o)).toVar(), d = u.complexityScore.toVar();
4277
4288
  N(u.isMetallic.and(u.isSmooth), () => {
4278
4289
  d.addAssign(.15);
4279
4290
  }), N(u.isTransmissive.and(u.hasClearcoat), () => {
@@ -4288,15 +4299,15 @@ var To = 8, Eo = 2, Do = Cr({
4288
4299
  });
4289
4300
  let p = mt(z(.001), z(.1), l);
4290
4301
  return l.mul(H(d.mul(.7), f, .3)).mul(p);
4291
- }), Ko = M(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
4302
+ }), qo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
4292
4303
  let p = z(1).toVar();
4293
4304
  return N(e.greaterThanEqual(B(3)), () => {
4294
- let m = V(Jr({ v: t }), 0).toVar();
4305
+ let m = V(Yr({ v: t }), 0).toVar();
4295
4306
  N(m.lessThan(8e-4).and(e.greaterThan(B(4))), () => {
4296
4307
  let e = V(m.mul(125), .01), t = $t(a);
4297
4308
  p.assign(W(t.lessThan(e), e, z(0)));
4298
4309
  }).Else(() => {
4299
- let h = Mr.wrap(Uo(n, r, o, s, c)).toVar(), g = h.complexityScore.toVar();
4310
+ let h = Nr.wrap(Wo(n, r, o, s, c)).toVar(), g = h.complexityScore.toVar();
4300
4311
  N(h.isMetallic.and(h.isSmooth).and(e.lessThan(B(7))), () => {
4301
4312
  g.addAssign(.3);
4302
4313
  }), N(h.isTransmissive.and(e.lessThan(B(6))), () => {
@@ -4316,7 +4327,7 @@ var To = 8, Eo = 2, Do = Cr({
4316
4327
  N(o.and(l), () => {
4317
4328
  v.assign(u);
4318
4329
  }).Else(() => {
4319
- v.assign(Go(t, i, n, r, o, s, c, d, f));
4330
+ v.assign(Ko(t, i, n, r, o, s, c, d, f));
4320
4331
  });
4321
4332
  let y = H(L(g.mul(.4).add(m.mul(.6)).mul(1.2), .15, .95), L(m.mul(.4).add(g.mul(.1)), .03, .6), L(z(e.sub(_)).div(10), 0, 1)).toVar();
4322
4333
  y.assign(H(y, V(y, v), .4)), N(g.greaterThan(.5), () => {
@@ -4332,12 +4343,12 @@ var To = 8, Eo = 2, Do = Cr({
4332
4343
  });
4333
4344
  });
4334
4345
  }), p;
4335
- }), qo = M(([e, t, n, r, i, a, o, s]) => {
4346
+ }), Jo = M(([e, t, n, r, i, a, o, s]) => {
4336
4347
  let c = Y(0).toVar();
4337
4348
  return N(e.and(o.not()), () => {
4338
4349
  c.assign(Y(0));
4339
4350
  }).Else(() => {
4340
- let o = Ei({
4351
+ let o = Di({
4341
4352
  tex: n,
4342
4353
  samp: dt(n),
4343
4354
  direction: t,
@@ -4351,10 +4362,10 @@ var To = 8, Eo = 2, Do = Cr({
4351
4362
  c.assign(o);
4352
4363
  });
4353
4364
  }), c;
4354
- }), Jo = /* @__PURE__ */ X("\n fn regularizePathContribution( contribution: vec3f, pathLength: f32, fireflyThreshold: f32, frame: i32 ) -> vec3f {\n let threshold = calculateFireflyThreshold( fireflyThreshold, i32( pathLength ), frame );\n return applySoftSuppressionRGB( contribution, threshold, 0.5f );\n }\n", [$r, ti]), Yo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E, D, O, k, A, ee, te, ne, re, ie, ae, oe, se, ce, le, ue, de, j, fe, pe, me, he, ge]) => {
4355
- let _e = J(0).toVar(), ve = J(1).toVar(), ye = z(1).toVar(), be = I(!1).toVar(), xe = z(0).toVar(), Se = J(0).toVar(), Ce = J(0).toVar(), we = z(-1e3).toVar(), Te = e.origin.toVar(), Ee = z(1e10).toVar(), De = B(0).toVar(), Oe = z(1).toVar(), ke = z(1).toVar(), Ae = z(1).toVar(), je = ee.toVar(), Me = te.toVar(), Ne = B(Ro).toVar(), Pe = I(!0).toVar(), Fe = I(!1).toVar(), Ie = I(!1).toVar(), Le = I(!1).toVar();
4365
+ }), Yo = /* @__PURE__ */ X("\n fn regularizePathContribution( contribution: vec3f, pathLength: f32, fireflyThreshold: f32, frame: i32 ) -> vec3f {\n let threshold = calculateFireflyThreshold( fireflyThreshold, i32( pathLength ), frame );\n return applySoftSuppressionRGB( contribution, threshold, 0.5f );\n }\n", [ei, ni]), Xo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E, D, O, k, A, ee, te, ne, re, ie, ae, oe, se, ce, le, ue, de, j, fe, pe, me, he, ge]) => {
4366
+ let _e = J(0).toVar(), ve = J(1).toVar(), ye = z(1).toVar(), be = I(!1).toVar(), xe = z(0).toVar(), Se = J(0).toVar(), Ce = J(0).toVar(), we = z(-1e3).toVar(), Te = e.origin.toVar(), Ee = z(1e10).toVar(), De = B(0).toVar(), Oe = z(1).toVar(), ke = z(1).toVar(), Ae = z(1).toVar(), je = ee.toVar(), Me = te.toVar(), Ne = B(zo).toVar(), Pe = I(!0).toVar(), Fe = I(!1).toVar(), Ie = I(!1).toVar(), Le = I(!1).toVar();
4356
4367
  I(!1).toVar();
4357
- let Re = z(0).toVar(), ze = B(-1).toVar(), Be = Mr({
4368
+ let Re = z(0).toVar(), ze = B(-1).toVar(), Be = Nr({
4358
4369
  isMetallic: !1,
4359
4370
  isRough: !1,
4360
4371
  isSmooth: !1,
@@ -4362,14 +4373,14 @@ var To = 8, Eo = 2, Do = Cr({
4362
4373
  hasClearcoat: !1,
4363
4374
  isEmissive: !1,
4364
4375
  complexityScore: z(0)
4365
- }).toVar(), Ue = Or({
4376
+ }).toVar(), Ue = kr({
4366
4377
  specular: z(.5),
4367
4378
  diffuse: z(.5),
4368
4379
  sheen: z(0),
4369
4380
  clearcoat: z(0),
4370
4381
  transmission: z(0),
4371
4382
  iridescence: z(0)
4372
- }).toVar(), We = Pr({
4383
+ }).toVar(), We = Fr({
4373
4384
  F0: J(.04),
4374
4385
  NoV: z(1),
4375
4386
  diffuseColor: J(0),
@@ -4400,21 +4411,21 @@ var To = 8, Eo = 2, Do = Cr({
4400
4411
  je.assign(ee.sub(F)), Pe.assign(e.equal(B(0))), N(F.greaterThan(ee), () => {
4401
4412
  Ve();
4402
4413
  });
4403
- let r = W(e.greaterThan(B(0)), oe, z(1)), te = wr({
4414
+ let r = W(e.greaterThan(B(0)), oe, z(1)), te = Tr({
4404
4415
  origin: Ge,
4405
4416
  direction: Ke
4406
- }), P = Er.wrap(vi(te, i, a, o)).toVar();
4417
+ }), P = Dr.wrap(yi(te, i, a, o)).toVar();
4407
4418
  N(P.didHit.not(), () => {
4408
- let t = qo(Pe, Ke, S, w, C, k, re, ne), n = z(1).toVar();
4419
+ let t = Jo(Pe, Ke, S, w, C, k, re, ne), n = z(1).toVar();
4409
4420
  N(xe.greaterThan(0).and(k).and(A), () => {
4410
- let e = wi(S, Ke, w, D, O).w.toVar();
4421
+ let e = Ti(S, Ke, w, D, O).w.toVar();
4411
4422
  N(e.greaterThan(0), () => {
4412
- n.assign(Xr({
4423
+ n.assign(Zr({
4413
4424
  pdf1: xe,
4414
4425
  pdf2: e
4415
4426
  }));
4416
4427
  });
4417
- }), _e.addAssign(Jo({
4428
+ }), _e.addAssign(Yo({
4418
4429
  contribution: t.xyz.mul(ve).mul(r).mul(n),
4419
4430
  pathLength: z(e),
4420
4431
  fireflyThreshold: ae,
@@ -4425,13 +4436,13 @@ var To = 8, Eo = 2, Do = Cr({
4425
4436
  ye.mulAssign(t.a);
4426
4437
  }), Ve();
4427
4438
  });
4428
- let qe = Tr.wrap(ai(P.materialIndex, o)).toVar(), Je = P.uv.toVar(), Ye = P.normal.toVar();
4439
+ let qe = Er.wrap(oi(P.materialIndex, o)).toVar(), Je = P.uv.toVar(), Ye = P.normal.toVar();
4429
4440
  N(qe.displacementMapIndex.greaterThanEqual(B(0)).and(qe.displacementScale.greaterThan(0)), () => {
4430
- let t = Ui.wrap(Wi(te, P, a, p, qe, e)).toVar();
4441
+ let t = Wi.wrap(Gi(te, P, a, p, qe, e)).toVar();
4431
4442
  Je.assign(t.uv), Ye.assign(t.normal), P.hitPoint.assign(t.hitPoint);
4432
4443
  });
4433
- let Xe = jr.wrap(Ii(s, c, l, u, d, f, qe, Je, P.normal)).toVar();
4434
- qe.color.assign(Xe.albedo), qe.metalness.assign(L(Xe.metalness, 0, 1)), qe.roughness.assign(L(Xe.roughness, Hr, 1));
4444
+ let Xe = Mr.wrap(Li(s, c, l, u, d, f, qe, Je, P.normal)).toVar();
4445
+ qe.color.assign(Xe.albedo), qe.metalness.assign(L(Xe.metalness, 0, 1)), qe.roughness.assign(L(Xe.roughness, Ur, 1));
4435
4446
  let Ze = Xe.normal.toVar();
4436
4447
  N(qe.displacementMapIndex.greaterThanEqual(B(0)).and(qe.displacementScale.greaterThan(0)), () => {
4437
4448
  Ze.assign(U(Ye.add(Xe.normal.sub(P.normal))));
@@ -4444,11 +4455,11 @@ var To = 8, Eo = 2, Do = Cr({
4444
4455
  }).ElseIf(De.equal(B(3)), () => {
4445
4456
  Qe.assign(Ae), $e.assign(ke);
4446
4457
  });
4447
- let tt = va.wrap(Ea(te, P.hitPoint, Ze, qe, t, Me, Qe, $e)).toVar();
4458
+ let tt = ya.wrap(Da(te, P.hitPoint, Ze, qe, t, Me, Qe, $e)).toVar();
4448
4459
  N(tt.continueRay, () => {
4449
4460
  let e = I(!1).toVar();
4450
4461
  N(tt.isTransmissive.and(Me.greaterThan(B(0))), () => {
4451
- Me.subAssign(1), Ne.assign(B(Bo)), e.assign(I(!0)), N(tt.didReflect.not(), () => {
4462
+ Me.subAssign(1), Ne.assign(B(Vo)), e.assign(I(!0)), N(tt.didReflect.not(), () => {
4452
4463
  N(tt.entering, () => {
4453
4464
  N(De.lessThan(B(3)), () => {
4454
4465
  De.addAssign(1), N(De.equal(B(1)), () => {
@@ -4470,61 +4481,61 @@ var To = 8, Eo = 2, Do = Cr({
4470
4481
  }), ve.mulAssign(tt.throughput), N(ie.not(), () => {
4471
4482
  ye.mulAssign(tt.alpha);
4472
4483
  });
4473
- let t = W(tt.entering, Ze, Ze.negate()), n = W(tt.didReflect, t, Ke);
4474
- Ge.assign(P.hitPoint.add(n.mul(.001))), Ke.assign(tt.direction), Pe.assign(I(!1)), Fe.assign(I(!1)), Le.assign(I(!1)), N(e.not(), () => {
4484
+ let t = W(tt.entering, Ze, Ze.negate()), n = W(tt.didReflect, t, Ke), r = V(z(1e-4), et(P.hitPoint).mul(1e-6));
4485
+ Ge.assign(P.hitPoint.add(n.mul(r))), Ke.assign(tt.direction), Pe.assign(I(!1)), Fe.assign(I(!1)), Le.assign(I(!1)), N(e.not(), () => {
4475
4486
  F.addAssign(1);
4476
4487
  }), He();
4477
4488
  }), N(ie.not(), () => {
4478
4489
  ye.mulAssign(tt.alpha);
4479
4490
  }), be.assign(I(!0));
4480
4491
  let nt = ln(me, n, e, t, B(-1), he, ge).toVar(), rt = Ke.negate().toVar();
4481
- qe.sheenRoughness.assign(L(qe.sheenRoughness, Hr, 1)), N(Le.not(), () => {
4482
- We.assign(ua(Ze, rt, qe, Xe, Be)), Le.assign(I(!0));
4492
+ qe.sheenRoughness.assign(L(qe.sheenRoughness, Ur, 1)), N(Le.not(), () => {
4493
+ We.assign(da(Ze, rt, qe, Xe, Be)), Le.assign(I(!0));
4483
4494
  });
4484
4495
  let it = J(0).toVar(), at = J(0).toVar(), H = z(0).toVar();
4485
4496
  N(qe.clearcoat.greaterThan(0), () => {
4486
- let e = ka.wrap(Aa(te, P, qe, nt, t));
4497
+ let e = Aa.wrap(ja(te, P, qe, nt, t));
4487
4498
  it.assign(e.L), at.assign(e.brdf), H.assign(e.pdf);
4488
4499
  }).Else(() => {
4489
- let e = Dr.wrap(Wo(rt, Ze, qe, P.materialIndex, nt, t, Ie, ze, Be, Fe, Ue, Le, We));
4500
+ let e = Or.wrap(Go(rt, Ze, qe, P.materialIndex, nt, t, Ie, ze, Be, Fe, Ue, Le, We));
4490
4501
  it.assign(e.direction), at.assign(e.value), H.assign(e.pdf), N(ze.notEqual(P.materialIndex).or(Ie.not()), () => {
4491
- Be.assign(ni(qe.metalness, qe.roughness, qe.transmission, qe.clearcoat, qe.emissive));
4502
+ Be.assign(ri(qe.metalness, qe.roughness, qe.transmission, qe.clearcoat, qe.emissive));
4492
4503
  }), Ie.assign(I(!0)), ze.assign(P.materialIndex), Fe.assign(I(!0));
4493
4504
  }), N(et(Xe.emissive).greaterThan(0), () => {
4494
4505
  let t = z(1).toVar();
4495
4506
  N(ce.equal(B(1)).and(ue.greaterThan(B(0))).and(xe.greaterThan(0)), () => {
4496
- let e = ko(P.triangleIndex, P.dst, Ke, Ge, a, o, de);
4497
- t.assign(Xr({
4507
+ let e = Ao(P.triangleIndex, P.dst, Ke, Ge, a, o, de);
4508
+ t.assign(Zr({
4498
4509
  pdf1: xe,
4499
4510
  pdf2: e
4500
4511
  }));
4501
- }), _e.addAssign(Jo({
4512
+ }), _e.addAssign(Yo({
4502
4513
  contribution: Xe.emissive.mul(ve).mul(r).mul(t),
4503
4514
  pathLength: z(e),
4504
4515
  fireflyThreshold: ae,
4505
4516
  frame: B(ge)
4506
4517
  }));
4507
4518
  });
4508
- let ot = ao(P.hitPoint, Ze, qe, rt, it, H, at, n, e, t, m, h, g, _, v, y, b, x, i, a, o, S, C, w, T, E, D, O, k);
4509
- _e.addAssign(Jo({
4519
+ let ot = oo(P.hitPoint, Ze, qe, rt, it, H, at, n, e, t, m, h, g, _, v, y, b, x, i, a, o, S, C, w, T, E, D, O, k);
4520
+ _e.addAssign(Yo({
4510
4521
  contribution: ot.mul(ve).mul(r),
4511
4522
  pathLength: z(e),
4512
4523
  fireflyThreshold: ae,
4513
4524
  frame: B(ge)
4514
4525
  })), N(ce.equal(B(1)).and(ue.greaterThan(B(0))), () => {
4515
- let n = M(([e, t, n, r]) => Ka(e, t, n, r, yi, i, a, o));
4526
+ let n = M(([e, t, n, r]) => qa(e, t, n, r, bi, i, a, o));
4516
4527
  N(pe.greaterThan(B(0)), () => {
4517
- let i = po.wrap(Lo(P.hitPoint, Ze, t, fe, le, a));
4528
+ let i = mo.wrap(Ro(P.hitPoint, Ze, t, fe, le, a));
4518
4529
  N(e.greaterThan(B(1)).and(qe.roughness.greaterThan(.9)).and(qe.metalness.lessThan(.1)).not().and(i.valid).and(i.pdf.greaterThan(0)), () => {
4519
4530
  let a = V(z(0), R(Ze, i.direction));
4520
4531
  N(a.greaterThan(0), () => {
4521
- let o = qa(P.hitPoint, Ze, qe), s = P.hitPoint.add(o), c = i.distance.sub(.001), l = n(s, i.direction, c, t);
4532
+ let o = Ja(P.hitPoint, Ze, qe), s = P.hitPoint.add(o), c = i.distance.mul(.999), l = n(s, i.direction, c, t);
4522
4533
  N(l.greaterThan(0), () => {
4523
- let t = Da(rt, i.direction, Ze, qe), n = io(rt, i.direction, Ze, qe), o = W(n.greaterThan(0), Xr({
4534
+ let t = Oa(rt, i.direction, Ze, qe), n = ao(rt, i.direction, Ze, qe), o = W(n.greaterThan(0), Zr({
4524
4535
  pdf1: i.pdf,
4525
4536
  pdf2: n
4526
4537
  }), z(1)), s = i.emission.mul(t).mul(a).div(i.pdf).mul(l).mul(j).mul(o);
4527
- _e.addAssign(Jo({
4538
+ _e.addAssign(Yo({
4528
4539
  contribution: s.mul(ve).mul(r),
4529
4540
  pathLength: z(e),
4530
4541
  fireflyThreshold: ae,
@@ -4534,8 +4545,8 @@ var To = 8, Eo = 2, Do = Cr({
4534
4545
  });
4535
4546
  });
4536
4547
  }).Else(() => {
4537
- let i = No(P.hitPoint, Ze, rt, qe, se, e, t, j, le, ue, de, a, n, Da, qa);
4538
- _e.addAssign(Jo({
4548
+ let i = Po(P.hitPoint, Ze, rt, qe, se, e, t, j, le, ue, de, a, n, Oa, Ja);
4549
+ _e.addAssign(Yo({
4539
4550
  contribution: i.mul(ve).mul(r),
4540
4551
  pathLength: z(e),
4541
4552
  fireflyThreshold: ae,
@@ -4543,23 +4554,23 @@ var To = 8, Eo = 2, Do = Cr({
4543
4554
  }));
4544
4555
  });
4545
4556
  }), N(Fe.not().or(e.equal(B(0))), () => {
4546
- Be.assign(Mr.wrap(Uo(qe, P.materialIndex, Ie, ze, Be))), Ie.assign(I(!0)), ze.assign(P.materialIndex);
4557
+ Be.assign(Nr.wrap(Wo(qe, P.materialIndex, Ie, ze, Be))), Ie.assign(I(!0)), ze.assign(P.materialIndex);
4547
4558
  });
4548
- let st = kr.wrap(la(qe, e, Be, C, A, k)), ct = Ia.wrap(fo(rt, Ze, qe, it, H, at, n, e, t, st, S, C, w, T, E, D, O, k, A));
4549
- ve.mulAssign(ct.throughput), Ge.assign(P.hitPoint.add(Ze.mul(.001))), Ke.assign(ct.direction), xe.assign(ct.combinedPdf), Pe.assign(I(!1)), N(qe.metalness.greaterThan(.7).and(qe.roughness.lessThan(.3)), () => {
4550
- Ne.assign(B(zo));
4551
- }).ElseIf(qe.transmission.greaterThan(.5), () => {
4559
+ let st = Ar.wrap(ua(qe, e, Be, C, A, k)), ct = La.wrap(po(rt, Ze, qe, it, H, at, n, e, t, st, S, C, w, T, E, D, O, k, A));
4560
+ ve.mulAssign(ct.throughput), Ge.assign(P.hitPoint.add(Ja(P.hitPoint, Ze, qe))), Ke.assign(ct.direction), xe.assign(ct.combinedPdf), Pe.assign(I(!1)), N(qe.metalness.greaterThan(.7).and(qe.roughness.lessThan(.3)), () => {
4552
4561
  Ne.assign(B(Bo));
4553
- }).Else(() => {
4562
+ }).ElseIf(qe.transmission.greaterThan(.5), () => {
4554
4563
  Ne.assign(B(Vo));
4564
+ }).Else(() => {
4565
+ Ne.assign(B(Ho));
4555
4566
  }), N(e.equal(B(0)).and(P.didHit), () => {
4556
4567
  Se.assign(Ze), Ce.assign(qe.color.xyz), we.assign(z(P.materialIndex)), Te.assign(P.hitPoint), Ee.assign(P.dst);
4557
4568
  });
4558
- let lt = Ko(e, ve, qe, P.materialIndex, Ke, t, Ie, ze, Be, Fe, Re, k, A);
4569
+ let lt = qo(e, ve, qe, P.materialIndex, Ke, t, Ie, ze, Be, Fe, Re, k, A);
4559
4570
  N(lt.lessThanEqual(0), () => {
4560
4571
  Ve();
4561
4572
  }), ve.divAssign(lt), F.addAssign(1), Fe.assign(I(!1)), Le.assign(I(!1));
4562
- }), Ho({
4573
+ }), Uo({
4563
4574
  radiance: Y(_e, ye),
4564
4575
  objectNormal: Se,
4565
4576
  objectColor: Ce,
@@ -4567,11 +4578,11 @@ var To = 8, Eo = 2, Do = Cr({
4567
4578
  firstHitPoint: Te,
4568
4579
  firstHitDistance: Ee
4569
4580
  });
4570
- }), Xo = /* @__PURE__ */ X("\n fn visualizeDepth( depth: f32 ) -> vec3f {\n return vec3f( 1.0f - depth );\n }\n"), Zo = /* @__PURE__ */ X("\n fn visualizeNormal( normal: vec3f ) -> vec3f {\n return normal * 0.5f + 0.5f;\n }\n"), Qo = /* @__PURE__ */ X("\n fn computeNDCDepthLocal( worldPos: vec3f, cameraProjectionMatrix: mat4x4f, cameraViewMatrix: mat4x4f ) -> f32 {\n let clipPos = cameraProjectionMatrix * cameraViewMatrix * vec4f( worldPos, 1.0f );\n let ndcDepth = clipPos.z / clipPos.w * 0.5f + 0.5f;\n return clamp( ndcDepth, 0.0f, 1.0f );\n }\n"), $o = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x]) => {
4571
- let S = Y(1, 0, 1, 1).toVar(), C = wr({
4581
+ }), Zo = /* @__PURE__ */ X("\n fn visualizeDepth( depth: f32 ) -> vec3f {\n return vec3f( 1.0f - depth );\n }\n"), Qo = /* @__PURE__ */ X("\n fn visualizeNormal( normal: vec3f ) -> vec3f {\n return normal * 0.5f + 0.5f;\n }\n"), $o = /* @__PURE__ */ X("\n fn computeNDCDepthLocal( worldPos: vec3f, cameraProjectionMatrix: mat4x4f, cameraViewMatrix: mat4x4f ) -> f32 {\n let clipPos = cameraProjectionMatrix * cameraViewMatrix * vec4f( worldPos, 1.0f );\n let ndcDepth = clipPos.z / clipPos.w * 0.5f + 0.5f;\n return clamp( ndcDepth, 0.0f, 1.0f );\n }\n"), es = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x]) => {
4582
+ let S = Y(1, 0, 1, 1).toVar(), C = Tr({
4572
4583
  origin: e,
4573
4584
  direction: t
4574
- }), w = Er.wrap(vi(C, n, r, i).toVar());
4585
+ }), w = Dr.wrap(yi(C, n, r, i).toVar());
4575
4586
  return N(l.equal(B(7)), () => {
4576
4587
  let e = z(w.triTests).div(u);
4577
4588
  S.assign(W(e.lessThan(1), Y(J(e), 1), Y(1, 0, 0, 1)));
@@ -4580,14 +4591,14 @@ var To = 8, Eo = 2, Do = Cr({
4580
4591
  S.assign(W(e.lessThan(1), Y(J(e), 1), Y(1, 0, 0, 1)));
4581
4592
  }), N(l.equal(B(10)), () => {
4582
4593
  N(c, () => {
4583
- let e = Ei({
4594
+ let e = Di({
4584
4595
  tex: a,
4585
4596
  samp: dt(a),
4586
4597
  direction: t,
4587
4598
  environmentMatrix: o,
4588
4599
  environmentIntensity: s,
4589
4600
  enableEnvironmentLight: c
4590
- }).toVar(), n = R(e.xyz, Gr).toVar(), r = n.toVar(), i = V(u.mul(.1), .001), l = n.div(i).toVar(), p = rt(n.add(1e-6)).add(10).div(10).toVar(), m = W(u.greaterThan(1), l, p).toVar(), h = J(0).toVar();
4601
+ }).toVar(), n = R(e.xyz, Kr).toVar(), r = n.toVar(), i = V(u.mul(.1), .001), l = n.div(i).toVar(), p = rt(n.add(1e-6)).add(10).div(10).toVar(), m = W(u.greaterThan(1), l, p).toVar(), h = J(0).toVar();
4591
4602
  N(m.lessThan(.2), () => {
4592
4603
  h.assign(H(J(0, 0, 0), J(0, 0, .5), m.mul(5)));
4593
4604
  }).ElseIf(m.lessThan(.4), () => {
@@ -4615,7 +4626,7 @@ var To = 8, Eo = 2, Do = Cr({
4615
4626
  N(w.didHit.not(), () => {
4616
4627
  S.assign(Y(0, 0, 0, 1));
4617
4628
  }).Else(() => {
4618
- let t = Tr.wrap(ai(w.materialIndex, i)).toVar(), n = jr.wrap(Ii(p, m, h, g, _, v, t, w.uv, w.normal)).toVar().emissive.toVar(), r = et(n).toVar();
4629
+ let t = Er.wrap(oi(w.materialIndex, i)).toVar(), n = Mr.wrap(Li(p, m, h, g, _, v, t, w.uv, w.normal)).toVar().emissive.toVar(), r = et(n).toVar();
4619
4630
  N(r.greaterThan(0), () => {
4620
4631
  let t = n.div(V(r.mul(.1), .001)).toVar(), i = et(e.sub(w.hitPoint)), a = L(z(1).sub(i.div(10)), 0, 1), o = H(t, t.mul(J(1, .8, .6)), a.mul(.3));
4621
4632
  S.assign(Y(o, 1));
@@ -4627,41 +4638,41 @@ var To = 8, Eo = 2, Do = Cr({
4627
4638
  N(w.didHit.not(), () => {
4628
4639
  S.assign(Y(.5, .5, 1, 1));
4629
4640
  }).Else(() => {
4630
- let e = Tr.wrap(ai(w.materialIndex, i)).toVar(), t = U(jr.wrap(Ii(p, m, h, g, _, v, e, w.uv, w.normal)).toVar().normal);
4631
- S.assign(Y(Zo({ normal: t }), 1));
4641
+ let e = Er.wrap(oi(w.materialIndex, i)).toVar(), t = U(Mr.wrap(Li(p, m, h, g, _, v, e, w.uv, w.normal)).toVar().normal);
4642
+ S.assign(Y(Qo({ normal: t }), 1));
4632
4643
  });
4633
4644
  }), N(l.equal(B(2)), () => {
4634
4645
  N(w.didHit.not(), () => {
4635
4646
  S.assign(Y(J(1), 1));
4636
4647
  }).Else(() => {
4637
- let e = Qo({
4648
+ let e = $o({
4638
4649
  worldPos: w.hitPoint,
4639
4650
  cameraProjectionMatrix: y,
4640
4651
  cameraViewMatrix: b
4641
4652
  });
4642
- S.assign(Y(Xo({ depth: e }), 1));
4653
+ S.assign(Y(Zo({ depth: e }), 1));
4643
4654
  });
4644
4655
  }), N(l.equal(B(3)), () => {
4645
4656
  N(w.didHit.not(), () => {
4646
4657
  S.assign(Y(0, 0, 0, 1));
4647
4658
  }).Else(() => {
4648
- let e = Tr.wrap(ai(w.materialIndex, i)).toVar(), t = jr.wrap(Ii(p, m, h, g, _, v, e, w.uv, w.normal)).toVar().albedo.rgb;
4659
+ let e = Er.wrap(oi(w.materialIndex, i)).toVar(), t = Mr.wrap(Li(p, m, h, g, _, v, e, w.uv, w.normal)).toVar().albedo.rgb;
4649
4660
  S.assign(Y(t, 1));
4650
4661
  });
4651
4662
  }), N(l.equal(B(5)), () => {
4652
4663
  N(w.didHit.not(), () => {
4653
4664
  S.assign(Y(0, 0, 0, 1));
4654
4665
  }).Else(() => {
4655
- let e = Tr.wrap(ai(w.materialIndex, i)).toVar(), t = jr.wrap(Ii(p, m, h, g, _, v, e, w.uv, w.normal)).toVar(), l = t.albedo.rgb.toVar(), u = U(t.normal).toVar(), f = Xt({ state: Zt({ seed: G(d.x).mul(G(1973)).add(G(d.y).mul(G(9277))).add(x.mul(G(26699))) }) }).toVar(), y = pa({
4666
+ let e = Er.wrap(oi(w.materialIndex, i)).toVar(), t = Mr.wrap(Li(p, m, h, g, _, v, e, w.uv, w.normal)).toVar(), l = t.albedo.rgb.toVar(), u = U(t.normal).toVar(), f = Xt({ state: Zt({ seed: G(d.x).mul(G(1973)).add(G(d.y).mul(G(9277))).add(x.mul(G(26699))) }) }).toVar(), y = ma({
4656
4667
  N: u,
4657
4668
  xi: q($t(f).toVar(), $t(f).toVar()).toVar()
4658
- }).toVar(), b = wr({
4659
- origin: w.hitPoint.add(u.mul(.001)).toVar(),
4669
+ }).toVar(), b = V(z(1e-4), et(w.hitPoint).mul(1e-6)), C = Tr({
4670
+ origin: w.hitPoint.add(u.mul(b)).toVar(),
4660
4671
  direction: y
4661
- }), C = Er.wrap(vi(b, n, r, i).toVar()), T = J(0).toVar();
4662
- N(C.didHit.not(), () => {
4672
+ }), T = Dr.wrap(yi(C, n, r, i).toVar()), E = J(0).toVar();
4673
+ N(T.didHit.not(), () => {
4663
4674
  N(c, () => {
4664
- T.assign(Ei({
4675
+ E.assign(Di({
4665
4676
  tex: a,
4666
4677
  samp: dt(a),
4667
4678
  direction: y,
@@ -4671,9 +4682,9 @@ var To = 8, Eo = 2, Do = Cr({
4671
4682
  }).xyz);
4672
4683
  });
4673
4684
  }).Else(() => {
4674
- let e = Tr.wrap(ai(C.materialIndex, i)).toVar(), t = jr.wrap(Ii(p, m, h, g, _, v, e, C.uv, C.normal)).toVar();
4675
- T.assign(t.emissive), N(c, () => {
4676
- let e = U(t.normal).toVar(), n = Ei({
4685
+ let e = Er.wrap(oi(T.materialIndex, i)).toVar(), t = Mr.wrap(Li(p, m, h, g, _, v, e, T.uv, T.normal)).toVar();
4686
+ E.assign(t.emissive), N(c, () => {
4687
+ let e = U(t.normal).toVar(), n = Di({
4677
4688
  tex: a,
4678
4689
  samp: dt(a),
4679
4690
  direction: e,
@@ -4681,15 +4692,15 @@ var To = 8, Eo = 2, Do = Cr({
4681
4692
  environmentIntensity: s,
4682
4693
  enableEnvironmentLight: c
4683
4694
  }).xyz;
4684
- T.addAssign(t.albedo.rgb.mul(n));
4695
+ E.addAssign(t.albedo.rgb.mul(n));
4685
4696
  });
4686
4697
  });
4687
- let E = l.mul(T);
4688
- S.assign(Y(E, 1));
4698
+ let D = l.mul(E);
4699
+ S.assign(Y(D, 1));
4689
4700
  });
4690
4701
  }), N(l.equal(B(6)), () => {
4691
4702
  N(w.didHit, () => {
4692
- let e = w.normal.toVar(), n = U(t.sub(e.mul(R(t, e).mul(2)))).toVar(), r = Ei({
4703
+ let e = w.normal.toVar(), n = U(t.sub(e.mul(R(t, e).mul(2)))).toVar(), r = Di({
4693
4704
  tex: a,
4694
4705
  samp: dt(a),
4695
4706
  direction: n,
@@ -4699,7 +4710,7 @@ var To = 8, Eo = 2, Do = Cr({
4699
4710
  }).xyz, i = r.div(r.add(1));
4700
4711
  S.assign(Y(i, 1));
4701
4712
  }).Else(() => {
4702
- let e = Ei({
4713
+ let e = Di({
4703
4714
  tex: a,
4704
4715
  samp: dt(a),
4705
4716
  direction: t,
@@ -4715,7 +4726,7 @@ M(([e, t]) => {
4715
4726
  let n = $t(t), r = J(.25 / 255, -.25 / 255, .25 / 255).toVar();
4716
4727
  return r.assign(H(r.mul(2), r.mul(-2), n)), e.add(r);
4717
4728
  });
4718
- var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjectionMatrix: mat4x4f, cameraViewMatrix: mat4x4f ) -> f32 {\n let clipPos = cameraProjectionMatrix * cameraViewMatrix * vec4f( worldPos, 1.0f );\n let ndcDepth = clipPos.z / clipPos.w * 0.5f + 0.5f;\n return clamp( ndcDepth, 0.0f, 1.0f );\n }\n"), ts = M(([e, t, n, r, i]) => {
4729
+ var ts = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjectionMatrix: mat4x4f, cameraViewMatrix: mat4x4f ) -> f32 {\n let clipPos = cameraProjectionMatrix * cameraViewMatrix * vec4f( worldPos, 1.0f );\n let ndcDepth = clipPos.z / clipPos.w * 0.5f + 0.5f;\n return clamp( ndcDepth, 0.0f, 1.0f );\n }\n"), ns = M(([e, t, n, r, i]) => {
4719
4730
  let a = vt(n, e.div(t), 0), o = B(0).toVar();
4720
4731
  return N(a.b.greaterThan(.5), () => {
4721
4732
  o.assign(0);
@@ -4723,7 +4734,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
4723
4734
  let e = B(Ze(a.r.mul(z(i)).add(.5)));
4724
4735
  o.assign(L(e, r, i));
4725
4736
  }), o;
4726
- }), ns = (e) => {
4737
+ }), rs = (e) => {
4727
4738
  let { pixelCoord: t, writeColorTex: n, writeNDTex: r, writeAlbedoTex: i, resolution: a, frame: o, samplesPerPixel: s, visMode: c, cameraWorldMatrix: l, cameraProjectionMatrixInverse: u, cameraViewMatrix: d, cameraProjectionMatrix: f, bvhBuffer: p, triangleBuffer: m, materialBuffer: h, albedoMaps: g, normalMaps: _, bumpMaps: v, metalnessMaps: y, roughnessMaps: b, emissiveMaps: x, displacementMaps: S, directionalLightsBuffer: C, numDirectionalLights: w, areaLightsBuffer: T, numAreaLights: E, pointLightsBuffer: D, numPointLights: O, spotLightsBuffer: k, numSpotLights: A, envTexture: ee, environmentIntensity: te, envMatrix: ne, envMarginalWeights: re, envConditionalWeights: ie, envTotalSum: ae, envResolution: oe, enableEnvironmentLight: se, useEnvMapIS: ce, maxBounceCount: le, transmissiveBounces: ue, showBackground: de, transparentBackground: j, backgroundIntensity: fe, fireflyThreshold: pe, globalIlluminationIntensity: me, totalTriangleCount: he, enableEmissiveTriangleSampling: ge, emissiveTriangleBuffer: _e, emissiveTriangleCount: ve, emissiveTotalPower: ye, emissiveBoost: be, lightBVHBuffer: xe, lightBVHNodeCount: Se, debugVisScale: Ce, enableAccumulation: we, hasPreviousAccumulated: Te, prevAccumTexture: Ee, prevNormalDepthTexture: De, prevAlbedoTexture: Oe, accumulationAlpha: ke, cameraIsMoving: Ae, useAdaptiveSampling: je, adaptiveSamplingTexture: Me, adaptiveSamplingMin: Ne, adaptiveSamplingMax: Pe, enableDOF: Fe, focalLength: Ie, aperture: Le, focusDistance: Re, sceneScale: ze, apertureScale: Be, anamorphicRatio: He } = e, M = wt(G(B(t.x)), G(B(t.y))), Ue = t.div(a), We = t.div(a).mul(2).sub(1).toVar();
4728
4739
  We.y.assign(We.y.negate());
4729
4740
  let F = Y(0).toVar(), Ge = B(0).toVar(), Ke = dn({
@@ -4732,7 +4743,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
4732
4743
  frame: o
4733
4744
  }).toVar(), qe = B(t.y).mul(B(a.x)).add(B(t.x)).toVar(), I = J(0, 0, 1).toVar(), L = z(1).toVar(), Je = z(0).toVar(), Ye = B(s).toVar();
4734
4745
  N(o.greaterThan(G(2)).and(je), () => {
4735
- let e = ts(t, a, Me, Ne, Pe);
4746
+ let e = ns(t, a, Me, Ne, Pe);
4736
4747
  Ye.assign(e), N(Ye.equal(B(0)), () => {
4737
4748
  N(we.and(Te), () => {
4738
4749
  let e = vt(Ee, Ue, 0);
@@ -4755,14 +4766,14 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
4755
4766
  N(c.equal(B(9)), () => {
4756
4767
  F.assign(Y(r, 1, 1)), Ge.assign(1), Ve();
4757
4768
  });
4758
- let i = r.sub(.5).mul(Qe), s = We.add(i), we = wr.wrap(bi(s, n, l, u, Fe, Ie, Le, Re, ze, Be, He)), Te = Y(0).toVar();
4769
+ let i = r.sub(.5).mul(Qe), s = We.add(i), we = Tr.wrap(xi(s, n, l, u, Fe, Ie, Le, Re, ze, Be, He)), Te = Y(0).toVar();
4759
4770
  N(c.greaterThan(B(0)), () => {
4760
- Te.assign($o(we.origin, we.direction, p, m, h, ee, ne, te, se, c, Ce, t, a, g, _, v, y, b, x, f, d, o));
4771
+ Te.assign(es(we.origin, we.direction, p, m, h, ee, ne, te, se, c, Ce, t, a, g, _, v, y, b, x, f, d, o));
4761
4772
  }).Else(() => {
4762
- let r = Ho.wrap(Yo(we, n, e, qe, p, m, h, g, _, v, y, b, x, S, C, w, T, E, D, O, k, A, ee, te, ne, re, ie, ae, oe, se, ce, le, ue, fe, de, j, pe, me, he, ge, _e, ve, ye, be, xe, Se, t, a, o));
4773
+ let r = Uo.wrap(Xo(we, n, e, qe, p, m, h, g, _, v, y, b, x, S, C, w, T, E, D, O, k, A, ee, te, ne, re, ie, ae, oe, se, ce, le, ue, fe, de, j, pe, me, he, ge, _e, ve, ye, be, xe, Se, t, a, o));
4763
4774
  Te.assign(r.radiance), N(e.equal(B(0)), () => {
4764
4775
  R.assign(r.objectNormal), Xe.assign(r.objectColor), Ze.assign(r.objectID), N(r.firstHitDistance.lessThan(1e9), () => {
4765
- I.assign(U(r.objectNormal)), L.assign(es({
4776
+ I.assign(U(r.objectNormal)), L.assign(ts({
4766
4777
  worldPos: r.firstHitPoint,
4767
4778
  cameraProjectionMatrix: f,
4768
4779
  cameraViewMatrix: d
@@ -4780,7 +4791,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
4780
4791
  nt.assign(H(e.w, Je, ke));
4781
4792
  });
4782
4793
  }), xt(n, M, Y($e.xyz, nt)).toWriteOnly(), xt(r, M, et).toWriteOnly(), xt(i, M, Y(tt, 1)).toWriteOnly();
4783
- }, rs = class {
4794
+ }, is = class {
4784
4795
  constructor(e = "Build") {
4785
4796
  this.label = e, this.entries = /* @__PURE__ */ new Map(), this.order = [], this.totalStart = performance.now();
4786
4797
  }
@@ -4807,17 +4818,17 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
4807
4818
  total: Math.round(e)
4808
4819
  };
4809
4820
  }
4810
- }, is = 8, as = class {
4821
+ }, as = 8, os = class {
4811
4822
  constructor() {
4812
4823
  this.computeNode = null, this.prevColorTexNode = null, this.prevNormalDepthTexNode = null, this.prevAlbedoTexNode = null, this.adaptiveSamplingTexNode = null, this.tileOffsetX = K(0, "int"), this.tileOffsetY = K(0, "int"), this.renderWidth = K(1920, "int"), this.renderHeight = K(1080, "int"), this._dispatchX = 0, this._dispatchY = 0, this._sceneTextureNodes = null;
4813
4824
  }
4814
4825
  setupCompute(e) {
4815
- let { stage: t, storageTextures: n } = e, r = new rs("setupCompute");
4826
+ let { stage: t, storageTextures: n } = e, r = new is("setupCompute");
4816
4827
  r.start("Create texture nodes");
4817
4828
  let i = this._createTextureNodes(t, n);
4818
4829
  r.end("Create texture nodes"), r.start("Build compute node (TSL)");
4819
4830
  let a = n.renderWidth, o = n.renderHeight;
4820
- this._dispatchX = Math.ceil(a / is), this._dispatchY = Math.ceil(o / is), this.renderWidth.value = a, this.renderHeight.value = o;
4831
+ this._dispatchX = Math.ceil(a / as), this._dispatchY = Math.ceil(o / as), this.renderWidth.value = a, this.renderHeight.value = o;
4821
4832
  let s = n.getWriteTextures();
4822
4833
  this.computeNode = this._buildComputeNode(t, i, s.color, s.normalDepth, s.albedo), r.end("Build compute node (TSL)"), r.print();
4823
4834
  }
@@ -4829,7 +4840,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
4829
4840
  return this._sceneTextureNodes;
4830
4841
  }
4831
4842
  setSize(e, t) {
4832
- this._dispatchX = Math.ceil(e / is), this._dispatchY = Math.ceil(t / is), this.computeNode && this.computeNode.setCount([
4843
+ this._dispatchX = Math.ceil(e / as), this._dispatchY = Math.ceil(t / as), this.computeNode && this.computeNode.setCount([
4833
4844
  this._dispatchX,
4834
4845
  this._dispatchY,
4835
4846
  1
@@ -4837,7 +4848,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
4837
4848
  }
4838
4849
  setTileDispatch(e, t, n, r) {
4839
4850
  this.tileOffsetX.value = e, this.tileOffsetY.value = t;
4840
- let i = Math.ceil(n / is), a = Math.ceil(r / is);
4851
+ let i = Math.ceil(n / as), a = Math.ceil(r / as);
4841
4852
  this.computeNode && this.computeNode.setCount([
4842
4853
  i,
4843
4854
  a,
@@ -4854,7 +4865,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
4854
4865
  forceCompile() {}
4855
4866
  _createTextureNodes(e, t) {
4856
4867
  let n = e.triangleStorageNode, r = e.bvhStorageNode, i = e.materialData.materialStorageNode, a = e.emissiveTriangleStorageNode, s = e.lightBVHStorageNode;
4857
- pi(e.meshVisibilityStorageNode);
4868
+ mi(e.meshVisibilityStorageNode);
4858
4869
  let c = vt(e.environment.environmentTexture), l = new o();
4859
4870
  this.adaptiveSamplingTexNode = l;
4860
4871
  let u = e.environment.envMarginalStorageNode, d = e.environment.envConditionalStorageNode, f = t.getReadTextures();
@@ -4890,9 +4901,9 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
4890
4901
  _buildComputeNode(e, t, n, r, i) {
4891
4902
  let { triStorage: a, bvhStorage: o, matStorage: s, emissiveTriStorage: c, lightBVHStorage: l, envTex: u, adaptiveSamplingTex: d, marginalCDFStorage: f, conditionalCDFStorage: p, albedoMapsTex: m, normalMapsTex: h, bumpMapsTex: g, metalnessMapsTex: _, roughnessMapsTex: v, emissiveMapsTex: y, displacementMapsTex: b } = t, x = this.tileOffsetX, S = this.tileOffsetY, C = this.renderWidth, w = this.renderHeight, T = this.prevColorTexNode, E = this.prevNormalDepthTexNode, D = this.prevAlbedoTexNode;
4892
4903
  return M(() => {
4893
- let t = x.add(B(Dt.x).mul(is)).add(B(nt.x)), O = S.add(B(Dt.y).mul(is)).add(B(nt.y));
4904
+ let t = x.add(B(Dt.x).mul(as)).add(B(nt.x)), O = S.add(B(Dt.y).mul(as)).add(B(nt.y));
4894
4905
  N(t.lessThan(C).and(O.lessThan(w)), () => {
4895
- ns({
4906
+ rs({
4896
4907
  pixelCoord: q(z(t).add(.5), z(O).add(.5)),
4897
4908
  writeColorTex: n,
4898
4909
  writeNDTex: r,
@@ -4973,15 +4984,15 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
4973
4984
  this._dispatchY,
4974
4985
  1
4975
4986
  ], [
4976
- is,
4977
- is,
4987
+ as,
4988
+ as,
4978
4989
  1
4979
4990
  ]);
4980
4991
  }
4981
4992
  dispose() {
4982
4993
  this.computeNode?.dispose(), this.computeNode = null, this.prevColorTexNode = null, this.prevNormalDepthTexNode = null, this.prevAlbedoTexNode = null, this.adaptiveSamplingTexNode = null, this._sceneTextureNodes = null;
4983
4994
  }
4984
- }, os = class {
4995
+ }, ss = class {
4985
4996
  constructor(e, t) {
4986
4997
  this.traversalCost = e, this.intersectionCost = t, this.maxTreeletLeaves = 7, this.minImprovement = .02, this.topologyCache = /* @__PURE__ */ new Map();
4987
4998
  for (let e = 3; e <= this.maxTreeletLeaves; e++) this.topologyCache.set(e, this.generateTopologies(e));
@@ -5172,10 +5183,10 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5172
5183
  }
5173
5184
  buildSubtree(e, t, n) {
5174
5185
  if (typeof e == "number") {
5175
- let r = t[n[e]], i = new ss();
5186
+ let r = t[n[e]], i = new cs();
5176
5187
  return i.minX = r.minX, i.minY = r.minY, i.minZ = r.minZ, i.maxX = r.maxX, i.maxY = r.maxY, i.maxZ = r.maxZ, i.triangleOffset = r.triangleOffset, i.triangleCount = r.triangleCount, i;
5177
5188
  }
5178
- let r = this.buildSubtree(e[0], t, n), i = this.buildSubtree(e[1], t, n), a = new ss();
5189
+ let r = this.buildSubtree(e[0], t, n), i = this.buildSubtree(e[1], t, n), a = new cs();
5179
5190
  return a.leftChild = r, a.rightChild = i, a.minX = Math.min(r.minX, i.minX), a.minY = Math.min(r.minY, i.minY), a.minZ = Math.min(r.minZ, i.minZ), a.maxX = Math.max(r.maxX, i.maxX), a.maxY = Math.max(r.maxY, i.maxY), a.maxZ = Math.max(r.maxZ, i.maxZ), a;
5180
5191
  }
5181
5192
  setTreeletSize(e) {
@@ -5189,11 +5200,11 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5189
5200
  getStatistics() {
5190
5201
  return { ...this.stats };
5191
5202
  }
5192
- }, ss = class {
5203
+ }, cs = class {
5193
5204
  constructor() {
5194
5205
  this.minX = 0, this.minY = 0, this.minZ = 0, this.maxX = 0, this.maxY = 0, this.maxZ = 0, this.leftChild = null, this.rightChild = null, this.triangleOffset = 0, this.triangleCount = 0;
5195
5206
  }
5196
- }, cs = class {
5207
+ }, ls = class {
5197
5208
  constructor(e, t) {
5198
5209
  this.traversalCost = e, this.intersectionCost = t, this.batchSizeRatio = .02, this.maxIterations = 2, this.timeBudgetMs = 15e3, this.stats = {
5199
5210
  reinsertionsApplied: 0,
@@ -5358,7 +5369,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5358
5369
  }
5359
5370
  return this.stats.timeMs = performance.now() - n, this.stats;
5360
5371
  }
5361
- }, ls = {
5372
+ }, us = {
5362
5373
  FLOATS_PER_TRIANGLE: 32,
5363
5374
  POSITION_A_OFFSET: 0,
5364
5375
  POSITION_B_OFFSET: 4,
@@ -5368,11 +5379,11 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5368
5379
  NORMAL_C_OFFSET: 20,
5369
5380
  UV_AB_OFFSET: 24,
5370
5381
  UV_C_MAT_OFFSET: 28
5371
- }, us = ls.FLOATS_PER_TRIANGLE, ds = class {
5382
+ }, ds = us.FLOATS_PER_TRIANGLE, fs = class {
5372
5383
  constructor() {
5373
5384
  this.minX = 0, this.minY = 0, this.minZ = 0, this.maxX = 0, this.maxY = 0, this.maxZ = 0, this.leftChild = null, this.rightChild = null, this.triangleOffset = 0, this.triangleCount = 0;
5374
5385
  }
5375
- }, fs = class {
5386
+ }, ps = class {
5376
5387
  constructor() {
5377
5388
  this.useWorker = !0, this.maxLeafSize = 8, this.numBins = 32, this.minBins = 8, this.maxBins = 64, this.totalNodes = 0, this.processedTriangles = 0, this.totalTriangles = 0, this.lastProgressUpdate = 0, this.progressUpdateInterval = 100, this.traversalCost = 1, this.intersectionCost = 2.5, this.useMortonCodes = !0, this.mortonBits = 10, this.mortonClusterThreshold = 128, this.enableObjectMedianFallback = !0, this.enableSpatialMedianFallback = !0, this.splitStats = {
5378
5389
  sahSplits: 0,
@@ -5432,9 +5443,9 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5432
5443
  e.enabled !== void 0 && (this.enableReinsertionOptimization = e.enabled), e.batchSizeRatio !== void 0 && (this.reinsertionBatchSizeRatio = Math.max(.005, Math.min(.1, e.batchSizeRatio))), e.maxIterations !== void 0 && (this.reinsertionMaxIterations = Math.max(1, Math.min(5, e.maxIterations)));
5433
5444
  }
5434
5445
  initializeTriangleArrays() {
5435
- let e = this.totalTriangles, t = this.triangles, n = ls.POSITION_A_OFFSET, r = ls.POSITION_B_OFFSET, i = ls.POSITION_C_OFFSET;
5446
+ let e = this.totalTriangles, t = this.triangles, n = us.POSITION_A_OFFSET, r = us.POSITION_B_OFFSET, i = us.POSITION_C_OFFSET;
5436
5447
  for (let a = 0; a < e; a++) {
5437
- let e = a * us, o = t[e + n], s = t[e + n + 1], c = t[e + n + 2], l = t[e + r], u = t[e + r + 1], d = t[e + r + 2], f = t[e + i], p = t[e + i + 1], m = t[e + i + 2], h = a * 3;
5448
+ let e = a * ds, o = t[e + n], s = t[e + n + 1], c = t[e + n + 2], l = t[e + r], u = t[e + r + 1], d = t[e + r + 2], f = t[e + i], p = t[e + i + 1], m = t[e + i + 2], h = a * 3;
5438
5449
  this.centroids[h] = (o + l + f) / 3, this.centroids[h + 1] = (s + u + p) / 3, this.centroids[h + 2] = (c + d + m) / 3, this.bMin[h] = o < l ? o < f ? o : f : l < f ? l : f, this.bMin[h + 1] = s < u ? s < p ? s : p : u < p ? u : p, this.bMin[h + 2] = c < d ? c < m ? c : m : d < m ? d : m, this.bMax[h] = o > l ? o > f ? o : f : l > f ? l : f, this.bMax[h + 1] = s > u ? s > p ? s : p : u > p ? u : p, this.bMax[h + 2] = c > d ? c > m ? c : m : d > m ? d : m, this.indices[a] = a;
5439
5450
  }
5440
5451
  }
@@ -5479,7 +5490,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5479
5490
  this.splitStats.mortonSortTime += performance.now() - t;
5480
5491
  }
5481
5492
  build(e, t = 30, n = null) {
5482
- return this.totalTriangles = e.byteLength / (us * 4), this.processedTriangles = 0, this.lastProgressUpdate = performance.now(), this.useWorker && typeof Worker < "u" ? new Promise((r, i) => {
5493
+ return this.totalTriangles = e.byteLength / (ds * 4), this.processedTriangles = 0, this.lastProgressUpdate = performance.now(), this.useWorker && typeof Worker < "u" ? new Promise((r, i) => {
5483
5494
  try {
5484
5495
  let a = new Worker(new URL(
5485
5496
  /* @vite-ignore */
@@ -5487,7 +5498,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5487
5498
  "" + import.meta.url
5488
5499
  ), { type: "module" }), o = this.totalTriangles, s = typeof SharedArrayBuffer < "u";
5489
5500
  console.log(`[BVHBuilder] SharedArrayBuffer: ${s ? "enabled" : "unavailable (using transfer fallback)"}`);
5490
- let c = s ? new SharedArrayBuffer(o * us * 4) : null;
5501
+ let c = s ? new SharedArrayBuffer(o * ds * 4) : null;
5491
5502
  a.onmessage = (e) => {
5492
5503
  let { bvhData: t, triangles: o, originalToBvh: s, error: l, progress: u, treeletStats: d } = e.data;
5493
5504
  if (l) {
@@ -5546,7 +5557,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5546
5557
  }
5547
5558
  buildSync(e, t = 30, n = null, r = null) {
5548
5559
  let i = performance.now();
5549
- this.totalNodes = 0, this.processedTriangles = 0, this.triangles = e, this.totalTriangles = e.byteLength / (us * 4), this.lastProgressUpdate = performance.now(), this.splitStats = {
5560
+ this.totalNodes = 0, this.processedTriangles = 0, this.triangles = e, this.totalTriangles = e.byteLength / (ds * 4), this.lastProgressUpdate = performance.now(), this.splitStats = {
5550
5561
  sahSplits: 0,
5551
5562
  objectMedianSplits: 0,
5552
5563
  spatialMedianSplits: 0,
@@ -5571,7 +5582,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5571
5582
  this.centroids = new Float32Array(a * 3), this.bMin = new Float32Array(a * 3), this.bMax = new Float32Array(a * 3), this.indices = new Uint32Array(a), this.mortonCodes = new Uint32Array(a), this.initializeTriangleArrays(), this.splitStats.initTime = performance.now() - o, this.sortTrianglesByMortonCode();
5572
5583
  let s = performance.now(), c = this.buildNodeRecursive(0, a, t, n);
5573
5584
  if (this.splitStats.sahBuildTime = performance.now() - s, this.enableTreeletOptimization && this.totalTriangles > 1e3) {
5574
- let e = this.totalTriangles > this.treeletComplexityThreshold, t = e ? 3 : this.treeletSize, r = e ? 10 : this.maxTreeletsPerScene, i = new os(this.traversalCost, this.intersectionCost);
5585
+ let e = this.totalTriangles > this.treeletComplexityThreshold, t = e ? 3 : this.treeletSize, r = e ? 10 : this.maxTreeletsPerScene, i = new ss(this.traversalCost, this.intersectionCost);
5575
5586
  i.setTreeletSize(t), i.setMinImprovement(this.treeletMinImprovement), i.setMaxTreelets(r);
5576
5587
  let a = performance.now();
5577
5588
  for (let e = 0; e < this.treeletOptimizationPasses; e++) {
@@ -5593,7 +5604,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5593
5604
  this.splitStats.treeletsProcessed = s.treeletsProcessed, this.splitStats.treeletsImproved = s.treeletsImproved, this.splitStats.averageSAHImprovement = s.averageSAHImprovement;
5594
5605
  }
5595
5606
  if (this.enableReinsertionOptimization && this.totalTriangles > 1e3) {
5596
- let e = new cs(this.traversalCost, this.intersectionCost);
5607
+ let e = new ls(this.traversalCost, this.intersectionCost);
5597
5608
  e.setBatchSizeRatio(this.reinsertionBatchSizeRatio), e.setMaxIterations(this.reinsertionMaxIterations);
5598
5609
  let t = n ? (e) => {
5599
5610
  n(e);
@@ -5608,10 +5619,10 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5608
5619
  }
5609
5620
  let l = performance.now();
5610
5621
  this.applySAOrdering(c), this.splitStats.saOrderTime = performance.now() - l;
5611
- let u = performance.now(), d = this.triangles, f = r || new Float32Array(a * us);
5622
+ let u = performance.now(), d = this.triangles, f = r || new Float32Array(a * ds);
5612
5623
  for (let e = 0; e < a; e++) {
5613
- let t = this.indices[e] * us, n = e * us;
5614
- f.set(d.subarray(t, t + us), n);
5624
+ let t = this.indices[e] * ds, n = e * ds;
5625
+ f.set(d.subarray(t, t + ds), n);
5615
5626
  }
5616
5627
  this.reorderedTriangleData = f;
5617
5628
  let p = new Uint32Array(a);
@@ -5627,7 +5638,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5627
5638
  n - this.lastProgressUpdate < this.progressUpdateInterval || (this.lastProgressUpdate = n, t(Math.min(Math.floor(this.processedTriangles / this.totalTriangles * 100), 99)));
5628
5639
  }
5629
5640
  buildNodeRecursiveToDepth(e, t, n, r, i, a, o, s, c, l, u) {
5630
- let d = new ds();
5641
+ let d = new fs();
5631
5642
  this.totalNodes++;
5632
5643
  let f = t - e;
5633
5644
  if (a === void 0 ? this.updateNodeBounds(d, e, t) : (d.minX = a, d.minY = o, d.minZ = s, d.maxX = c, d.maxY = l, d.maxZ = u), f <= this.maxLeafSize || n <= 0) return d.triangleOffset = e, d.triangleCount = f, this.updateProgress(f, i), d;
@@ -5668,7 +5679,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5668
5679
  return h === e || h === t ? (d.triangleOffset = e, d.triangleCount = f, this.updateProgress(f, i), d) : (d.leftChild = this.buildNodeRecursiveToDepth(e, h, n - 1, r - 1, i, g, _, v, y, b, x), d.rightChild = this.buildNodeRecursiveToDepth(h, t, n - 1, r - 1, i, S, C, w, T, E, D), d);
5669
5680
  }
5670
5681
  buildNodeRecursive(e, t, n, r, i, a, o, s, c, l) {
5671
- let u = new ds();
5682
+ let u = new fs();
5672
5683
  this.totalNodes++;
5673
5684
  let d = t - e;
5674
5685
  if (i === void 0 ? this.updateNodeBounds(u, e, t) : (u.minX = i, u.minY = a, u.minZ = o, u.maxX = s, u.maxY = c, u.maxZ = l), d <= this.maxLeafSize || n <= 0) return u.triangleOffset = e, u.triangleCount = d, this.updateProgress(d, r), u;
@@ -5966,7 +5977,7 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5966
5977
  let o = r - e, s = i - t, c = a - n;
5967
5978
  return 2 * (o * s + s * c + c * o);
5968
5979
  }
5969
- }, ps = {
5980
+ }, ms = {
5970
5981
  FLOATS_PER_TRIANGLE: 32,
5971
5982
  POSITION_A_OFFSET: 0,
5972
5983
  POSITION_B_OFFSET: 4,
@@ -5974,28 +5985,28 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
5974
5985
  NORMAL_A_OFFSET: 12,
5975
5986
  NORMAL_B_OFFSET: 16,
5976
5987
  NORMAL_C_OFFSET: 20
5977
- }, ms = ps.FLOATS_PER_TRIANGLE, hs = 16, gs = -1, _s = -2, vs = class {
5988
+ }, hs = ms.FLOATS_PER_TRIANGLE, gs = 16, _s = -1, vs = -2, ys = class {
5978
5989
  constructor() {
5979
5990
  this._bounds = null, this._boundsNodeCount = 0;
5980
5991
  }
5981
5992
  updateTrianglePositions(e, t, n) {
5982
5993
  let r = n.length;
5983
5994
  for (let i = 0; i < r; i++) {
5984
- let r = n[i], a = i * ms, o = r * 9, s = t[o], c = t[o + 1], l = t[o + 2], u = t[o + 3], d = t[o + 4], f = t[o + 5], p = t[o + 6], m = t[o + 7], h = t[o + 8];
5985
- e[a + ps.POSITION_A_OFFSET] = s, e[a + ps.POSITION_A_OFFSET + 1] = c, e[a + ps.POSITION_A_OFFSET + 2] = l, e[a + ps.POSITION_B_OFFSET] = u, e[a + ps.POSITION_B_OFFSET + 1] = d, e[a + ps.POSITION_B_OFFSET + 2] = f, e[a + ps.POSITION_C_OFFSET] = p, e[a + ps.POSITION_C_OFFSET + 1] = m, e[a + ps.POSITION_C_OFFSET + 2] = h;
5995
+ let r = n[i], a = i * hs, o = r * 9, s = t[o], c = t[o + 1], l = t[o + 2], u = t[o + 3], d = t[o + 4], f = t[o + 5], p = t[o + 6], m = t[o + 7], h = t[o + 8];
5996
+ e[a + ms.POSITION_A_OFFSET] = s, e[a + ms.POSITION_A_OFFSET + 1] = c, e[a + ms.POSITION_A_OFFSET + 2] = l, e[a + ms.POSITION_B_OFFSET] = u, e[a + ms.POSITION_B_OFFSET + 1] = d, e[a + ms.POSITION_B_OFFSET + 2] = f, e[a + ms.POSITION_C_OFFSET] = p, e[a + ms.POSITION_C_OFFSET + 1] = m, e[a + ms.POSITION_C_OFFSET + 2] = h;
5986
5997
  let g = u - s, _ = d - c, v = f - l, y = p - s, b = m - c, x = h - l, S = _ * x - v * b, C = v * y - g * x, w = g * b - _ * y;
5987
- e[a + ps.NORMAL_A_OFFSET] = S, e[a + ps.NORMAL_A_OFFSET + 1] = C, e[a + ps.NORMAL_A_OFFSET + 2] = w, e[a + ps.NORMAL_B_OFFSET] = S, e[a + ps.NORMAL_B_OFFSET + 1] = C, e[a + ps.NORMAL_B_OFFSET + 2] = w, e[a + ps.NORMAL_C_OFFSET] = S, e[a + ps.NORMAL_C_OFFSET + 1] = C, e[a + ps.NORMAL_C_OFFSET + 2] = w;
5998
+ e[a + ms.NORMAL_A_OFFSET] = S, e[a + ms.NORMAL_A_OFFSET + 1] = C, e[a + ms.NORMAL_A_OFFSET + 2] = w, e[a + ms.NORMAL_B_OFFSET] = S, e[a + ms.NORMAL_B_OFFSET + 1] = C, e[a + ms.NORMAL_B_OFFSET + 2] = w, e[a + ms.NORMAL_C_OFFSET] = S, e[a + ms.NORMAL_C_OFFSET + 1] = C, e[a + ms.NORMAL_C_OFFSET + 2] = w;
5988
5999
  }
5989
6000
  }
5990
6001
  refitRange(e, t, n, r) {
5991
6002
  r > this._boundsNodeCount && (this._bounds = new Float32Array(r * 6), this._boundsNodeCount = r);
5992
6003
  let i = this._bounds, a = n + r;
5993
6004
  for (let r = a - 1; r >= n; r--) {
5994
- let a = r * hs, o = (r - n) * 6;
5995
- if (e[a + 3] === gs) {
6005
+ let a = r * gs, o = (r - n) * 6;
6006
+ if (e[a + 3] === _s) {
5996
6007
  let n = e[a], r = e[a + 1], s = Infinity, c = Infinity, l = Infinity, u = -Infinity, d = -Infinity, f = -Infinity;
5997
6008
  for (let e = 0; e < r; e++) {
5998
- let r = (n + e) * ms, i = t[r + ps.POSITION_A_OFFSET], a = t[r + ps.POSITION_A_OFFSET + 1], o = t[r + ps.POSITION_A_OFFSET + 2], p = t[r + ps.POSITION_B_OFFSET], m = t[r + ps.POSITION_B_OFFSET + 1], h = t[r + ps.POSITION_B_OFFSET + 2], g = t[r + ps.POSITION_C_OFFSET], _ = t[r + ps.POSITION_C_OFFSET + 1], v = t[r + ps.POSITION_C_OFFSET + 2];
6009
+ let r = (n + e) * hs, i = t[r + ms.POSITION_A_OFFSET], a = t[r + ms.POSITION_A_OFFSET + 1], o = t[r + ms.POSITION_A_OFFSET + 2], p = t[r + ms.POSITION_B_OFFSET], m = t[r + ms.POSITION_B_OFFSET + 1], h = t[r + ms.POSITION_B_OFFSET + 2], g = t[r + ms.POSITION_C_OFFSET], _ = t[r + ms.POSITION_C_OFFSET + 1], v = t[r + ms.POSITION_C_OFFSET + 2];
5999
6010
  s = Math.min(s, i, p, g), c = Math.min(c, a, m, _), l = Math.min(l, o, h, v), u = Math.max(u, i, p, g), d = Math.max(d, a, m, _), f = Math.max(f, o, h, v);
6000
6011
  }
6001
6012
  i[o] = s, i[o + 1] = c, i[o + 2] = l, i[o + 3] = u, i[o + 4] = d, i[o + 5] = f;
@@ -6009,15 +6020,15 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
6009
6020
  n !== this._boundsNodeCount && (this._bounds = new Float32Array(n * 6), this._boundsNodeCount = n);
6010
6021
  let r = this._bounds;
6011
6022
  for (let i = n - 1; i >= 0; i--) {
6012
- let n = i * hs, a = i * 6, o = e[n + 3];
6013
- if (o === gs) {
6023
+ let n = i * gs, a = i * 6, o = e[n + 3];
6024
+ if (o === _s) {
6014
6025
  let i = e[n], o = e[n + 1], s = Infinity, c = Infinity, l = Infinity, u = -Infinity, d = -Infinity, f = -Infinity;
6015
6026
  for (let e = 0; e < o; e++) {
6016
- let n = (i + e) * ms, r = t[n + ps.POSITION_A_OFFSET], a = t[n + ps.POSITION_A_OFFSET + 1], o = t[n + ps.POSITION_A_OFFSET + 2], p = t[n + ps.POSITION_B_OFFSET], m = t[n + ps.POSITION_B_OFFSET + 1], h = t[n + ps.POSITION_B_OFFSET + 2], g = t[n + ps.POSITION_C_OFFSET], _ = t[n + ps.POSITION_C_OFFSET + 1], v = t[n + ps.POSITION_C_OFFSET + 2];
6027
+ let n = (i + e) * hs, r = t[n + ms.POSITION_A_OFFSET], a = t[n + ms.POSITION_A_OFFSET + 1], o = t[n + ms.POSITION_A_OFFSET + 2], p = t[n + ms.POSITION_B_OFFSET], m = t[n + ms.POSITION_B_OFFSET + 1], h = t[n + ms.POSITION_B_OFFSET + 2], g = t[n + ms.POSITION_C_OFFSET], _ = t[n + ms.POSITION_C_OFFSET + 1], v = t[n + ms.POSITION_C_OFFSET + 2];
6017
6028
  s = Math.min(s, r, p, g), c = Math.min(c, a, m, _), l = Math.min(l, o, h, v), u = Math.max(u, r, p, g), d = Math.max(d, a, m, _), f = Math.max(f, o, h, v);
6018
6029
  }
6019
6030
  r[a] = s, r[a + 1] = c, r[a + 2] = l, r[a + 3] = u, r[a + 4] = d, r[a + 5] = f;
6020
- } else if (o === _s) {
6031
+ } else if (o === vs) {
6021
6032
  let t = e[n] * 6;
6022
6033
  r[a] = r[t], r[a + 1] = r[t + 1], r[a + 2] = r[t + 2], r[a + 3] = r[t + 3], r[a + 4] = r[t + 4], r[a + 5] = r[t + 5];
6023
6034
  } else {
@@ -6026,14 +6037,14 @@ var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
6026
6037
  }
6027
6038
  }
6028
6039
  }
6029
- }, ys = 32, bs = 5e4, xs = 8;
6030
- function Ss(e, t, n, r) {
6031
- let i = e.byteLength / (ys * 4), a = Math.min(navigator.hardwareConcurrency || 4, xs), o = Math.ceil(Math.log2(a * 2.5 + 1));
6040
+ }, bs = 32, xs = 5e4, Ss = 8;
6041
+ function Cs(e, t, n, r) {
6042
+ let i = e.byteLength / (bs * 4), a = Math.min(navigator.hardwareConcurrency || 4, Ss), o = Math.ceil(Math.log2(a * 2.5 + 1));
6032
6043
  return console.log(`[ParallelBVH] Parallel build: ${i.toLocaleString()} triangles, ${a} workers, parallelDepth=${o}`), new Promise((s, c) => {
6033
6044
  try {
6034
6045
  let c = new SharedArrayBuffer(e.byteLength);
6035
6046
  new Float32Array(c).set(e);
6036
- let l = new SharedArrayBuffer(i * 3 * 4), u = new SharedArrayBuffer(i * 3 * 4), d = new SharedArrayBuffer(i * 3 * 4), f = new SharedArrayBuffer(i * 4), p = new SharedArrayBuffer(i * 4), m = new SharedArrayBuffer(i * ys * 4), h = new Worker(new URL(
6047
+ let l = new SharedArrayBuffer(i * 3 * 4), u = new SharedArrayBuffer(i * 3 * 4), d = new SharedArrayBuffer(i * 3 * 4), f = new SharedArrayBuffer(i * 4), p = new SharedArrayBuffer(i * 4), m = new SharedArrayBuffer(i * bs * 4), h = new Worker(new URL(
6037
6048
  /* @vite-ignore */
6038
6049
  "" + new URL("assets/BVHWorker-BqQTDljT.js", import.meta.url).href,
6039
6050
  "" + import.meta.url
@@ -6046,7 +6057,7 @@ function Ss(e, t, n, r) {
6046
6057
  if (y) return;
6047
6058
  y = !0, console.warn(`[ParallelBVH] Parallel build failed (${e}), falling back to single worker`), b();
6048
6059
  let i = new ArrayBuffer(c.byteLength);
6049
- new Float32Array(i).set(new Float32Array(c)), s(ws(new Float32Array(i), t, n, r));
6060
+ new Float32Array(i).set(new Float32Array(c)), s(Ts(new Float32Array(i), t, n, r));
6050
6061
  };
6051
6062
  h.onerror = (e) => {
6052
6063
  x(`coordinator error: ${e.message}`);
@@ -6061,7 +6072,7 @@ function Ss(e, t, n, r) {
6061
6072
  return;
6062
6073
  }
6063
6074
  if (t.type === "phase1Result") {
6064
- g = t.splitStats, Cs(t, a, c, l, u, d, f, m, i, n, h, _, b, x, s, v, r);
6075
+ g = t.splitStats, ws(t, a, c, l, u, d, f, m, i, n, h, _, b, x, s, v, r);
6065
6076
  return;
6066
6077
  }
6067
6078
  if (t.type === "assembleResult") {
@@ -6095,7 +6106,7 @@ function Ss(e, t, n, r) {
6095
6106
  }
6096
6107
  });
6097
6108
  }
6098
- function Cs(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
6109
+ function ws(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
6099
6110
  let { topFlatData: _, topNodeCount: v, frontierTasks: y, frontierMap: b } = e;
6100
6111
  if (!y || y.length === 0) {
6101
6112
  console.log("[ParallelBVH] No frontier tasks, assembling with top-level tree only"), u.postMessage({
@@ -6196,14 +6207,14 @@ function Cs(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
6196
6207
  });
6197
6208
  }
6198
6209
  }
6199
- function ws(e, t, n, r) {
6210
+ function Ts(e, t, n, r) {
6200
6211
  return new Promise((i, a) => {
6201
6212
  try {
6202
6213
  let o = new Worker(new URL(
6203
6214
  /* @vite-ignore */
6204
6215
  "" + new URL("assets/BVHWorker-BqQTDljT.js", import.meta.url).href,
6205
6216
  "" + import.meta.url
6206
- ), { type: "module" }), s = e.byteLength / (ys * 4), c = typeof SharedArrayBuffer < "u" ? new SharedArrayBuffer(s * ys * 4) : null;
6217
+ ), { type: "module" }), s = e.byteLength / (bs * 4), c = typeof SharedArrayBuffer < "u" ? new SharedArrayBuffer(s * bs * 4) : null;
6207
6218
  o.onmessage = (e) => {
6208
6219
  let { bvhData: t, triangles: r, originalToBvh: s, error: l, progress: u, treeletStats: d } = e.data;
6209
6220
  if (l) {
@@ -6241,16 +6252,16 @@ function ws(e, t, n, r) {
6241
6252
  }
6242
6253
  });
6243
6254
  }
6244
- function Ts(e) {
6245
- return typeof Worker < "u" && typeof SharedArrayBuffer < "u" && e >= bs;
6255
+ function Es(e) {
6256
+ return typeof Worker < "u" && typeof SharedArrayBuffer < "u" && e >= xs;
6246
6257
  }
6247
6258
  //#endregion
6248
6259
  //#region src/Processor/TLASBuilder.js
6249
- var Es = 16, Ds = class {
6260
+ var Ds = 16, Os = class {
6250
6261
  constructor() {
6251
6262
  this.minX = 0, this.minY = 0, this.minZ = 0, this.maxX = 0, this.maxY = 0, this.maxZ = 0, this.leftChild = null, this.rightChild = null, this.entryIndex = -1;
6252
6263
  }
6253
- }, Os = class {
6264
+ }, ks = class {
6254
6265
  constructor() {
6255
6266
  this._flatBuffer = null, this._flatBufferCapacity = 0;
6256
6267
  }
@@ -6268,7 +6279,7 @@ var Es = 16, Ds = class {
6268
6279
  };
6269
6280
  }
6270
6281
  _buildRecursive(e, t) {
6271
- let n = new Ds();
6282
+ let n = new Os();
6272
6283
  if (t.length === 1) {
6273
6284
  let r = e[t[0]].worldAABB;
6274
6285
  return n.minX = r.minX, n.minY = r.minY, n.minZ = r.minZ, n.maxX = r.maxX, n.maxY = r.maxY, n.maxZ = r.maxZ, n.entryIndex = t[0], n;
@@ -6305,12 +6316,12 @@ var Es = 16, Ds = class {
6305
6316
  let e = r.pop();
6306
6317
  e._flatIndex = n.length, n.push(e), e.rightChild && r.push(e.rightChild), e.leftChild && r.push(e.leftChild);
6307
6318
  }
6308
- let i = n.length * Es;
6319
+ let i = n.length * Ds;
6309
6320
  i > this._flatBufferCapacity && (this._flatBuffer = new Float32Array(i), this._flatBufferCapacity = i);
6310
6321
  let a = this._flatBuffer;
6311
6322
  a.fill(0, 0, i);
6312
6323
  for (let e = 0; e < n.length; e++) {
6313
- let r = n[e], i = e * Es;
6324
+ let r = n[e], i = e * Ds;
6314
6325
  if (r.leftChild) {
6315
6326
  let e = r.leftChild, t = r.rightChild;
6316
6327
  a[i] = e.minX, a[i + 1] = e.minY, a[i + 2] = e.minZ, a[i + 3] = e._flatIndex, a[i + 4] = e.maxX, a[i + 5] = e.maxY, a[i + 6] = e.maxZ, a[i + 7] = t._flatIndex, a[i + 8] = t.minX, a[i + 9] = t.minY, a[i + 10] = t.minZ, a[i + 12] = t.maxX, a[i + 13] = t.maxY, a[i + 14] = t.maxZ;
@@ -6349,7 +6360,7 @@ var Es = 16, Ds = class {
6349
6360
  }
6350
6361
  return t;
6351
6362
  }
6352
- }, ks = class {
6363
+ }, As = class {
6353
6364
  constructor() {
6354
6365
  this.entries = [], this.totalBLASNodes = 0, this.tlasNodeCount = 0;
6355
6366
  }
@@ -6420,7 +6431,7 @@ var Es = 16, Ds = class {
6420
6431
  clear() {
6421
6432
  this.entries = [], this.totalBLASNodes = 0, this.tlasNodeCount = 0;
6422
6433
  }
6423
- }, As = class {
6434
+ }, js = class {
6424
6435
  constructor() {
6425
6436
  this.canvasContextPairs = [], this.maxPoolSize = zn.CANVAS_POOL_SIZE;
6426
6437
  }
@@ -6460,7 +6471,7 @@ var Es = 16, Ds = class {
6460
6471
  dispose() {
6461
6472
  this.canvasContextPairs = [];
6462
6473
  }
6463
- }, js = class {
6474
+ }, Ms = class {
6464
6475
  constructor(e = {}) {
6465
6476
  this.pools = /* @__PURE__ */ new Map(), this.memoryUsage = 0, this.maxMemoryUsage = e.maxMemory || Un.MAX_BUFFER_MEMORY, this.allocatedBuffers = /* @__PURE__ */ new WeakMap(), this.sizeStrategy = e.sizeStrategy || "adaptive";
6466
6477
  }
@@ -6518,7 +6529,7 @@ var Es = 16, Ds = class {
6518
6529
  let e = this.getMemoryStats();
6519
6530
  return e.utilizationPercentage > 90 ? (console.warn(`Memory pool critical: ${e.utilizationPercentage.toFixed(1)}% used (${(e.currentUsage / (1024 * 1024)).toFixed(1)}MB / ${(e.maxUsage / (1024 * 1024)).toFixed(1)}MB)`), "critical") : e.utilizationPercentage > 70 ? (console.warn(`Memory pool high: ${e.utilizationPercentage.toFixed(1)}% used (${(e.currentUsage / (1024 * 1024)).toFixed(1)}MB / ${(e.maxUsage / (1024 * 1024)).toFixed(1)}MB)`), "high") : "normal";
6520
6531
  }
6521
- }, Ms = class {
6532
+ }, Ns = class {
6522
6533
  constructor(e = zn.CACHE_SIZE_LIMIT) {
6523
6534
  this.cache = /* @__PURE__ */ new Map(), this.accessOrder = [], this.maxSize = e;
6524
6535
  }
@@ -6555,12 +6566,12 @@ var Es = 16, Ds = class {
6555
6566
  e && e.dispose && e.dispose();
6556
6567
  }), this.cache.clear(), this.accessOrder = [];
6557
6568
  }
6558
- }, Ns = class {
6569
+ }, Ps = class {
6559
6570
  constructor(e = {}) {
6560
- this.useWorkers = typeof Worker < "u", this.maxConcurrentWorkers = zn.MAX_CONCURRENT_WORKERS, this.activeWorkers = 0, this.canvasPool = new As(), this.bufferPool = new js({
6571
+ this.useWorkers = typeof Worker < "u", this.maxConcurrentWorkers = zn.MAX_CONCURRENT_WORKERS, this.activeWorkers = 0, this.canvasPool = new js(), this.bufferPool = new Ms({
6561
6572
  maxMemory: e.maxBufferMemory || Un.MAX_BUFFER_MEMORY,
6562
6573
  sizeStrategy: e.bufferSizeStrategy || "adaptive"
6563
- }), this.textureCache = new Ms(), this.capabilities = this.detectCapabilities(), this.optimalMethod = this.selectOptimalMethod();
6574
+ }), this.textureCache = new Ns(), this.capabilities = this.detectCapabilities(), this.optimalMethod = this.selectOptimalMethod();
6564
6575
  }
6565
6576
  detectCapabilities() {
6566
6577
  return {
@@ -6867,7 +6878,7 @@ var Es = 16, Ds = class {
6867
6878
  let l = performance.now();
6868
6879
  try {
6869
6880
  if (!t || t.length === 0) throw Error("No materials provided for texture creation");
6870
- this.textureCache.dispose(), this.textureCache = new Ms();
6881
+ this.textureCache.dispose(), this.textureCache = new Ns();
6871
6882
  let e = [];
6872
6883
  n && n.length > 0 && e.push(this.createTexturesToDataTexture(n).then((e) => ({
6873
6884
  type: "albedo",
@@ -6986,7 +6997,7 @@ var Es = 16, Ds = class {
6986
6997
  dispose() {
6987
6998
  this.canvasPool.dispose(), this.bufferPool.dispose(), this.textureCache.dispose();
6988
6999
  }
6989
- }, Ps = 128, Fs = class {
7000
+ }, Fs = 128, Is = class {
6990
7001
  constructor() {
6991
7002
  this._vectorPool = {
6992
7003
  vec3: Array(9).fill().map(() => new Le()),
@@ -7201,7 +7212,7 @@ var Es = 16, Ds = class {
7201
7212
  n || (n = /* @__PURE__ */ new Map(), this._textureIndexCache.set(t, n));
7202
7213
  let r = e.source.uuid, i = n.get(r);
7203
7214
  if (i !== void 0) return i;
7204
- if (t.length < Ps) {
7215
+ if (t.length < Fs) {
7205
7216
  t.push(e);
7206
7217
  let i = t.length - 1;
7207
7218
  return n.set(r, i), i;
@@ -7288,7 +7299,7 @@ var Es = 16, Ds = class {
7288
7299
  sceneFeatures: this.sceneFeatures
7289
7300
  };
7290
7301
  }
7291
- }, Is = class {
7302
+ }, Ls = class {
7292
7303
  constructor() {
7293
7304
  this.maxLeafSize = 8;
7294
7305
  }
@@ -7347,7 +7358,7 @@ var Es = 16, Ds = class {
7347
7358
  l < i ? n = l + 1 : r = l;
7348
7359
  }
7349
7360
  }
7350
- }, Ls = class {
7361
+ }, Rs = class {
7351
7362
  constructor() {
7352
7363
  this.emissiveTriangles = [], this.emissiveCount = 0, this.totalEmissivePower = 0, this.emissiveIndicesArray = null, this.emissivePowerArray = null, this.cdfArray = null, this.lightBVHNodeData = null, this.lightBVHNodeCount = 0;
7353
7364
  }
@@ -7491,7 +7502,7 @@ var Es = 16, Ds = class {
7491
7502
  }
7492
7503
  buildLightBVH() {
7493
7504
  if (this.emissiveCount === 0) return this.lightBVHNodeData = new Float32Array(16), this.lightBVHNodeData[7] = 1, this.lightBVHNodeCount = 1, 1;
7494
- let { nodeData: e, nodeCount: t, sortedPerm: n } = new Is().build(this.emissiveTriangles);
7505
+ let { nodeData: e, nodeCount: t, sortedPerm: n } = new Ls().build(this.emissiveTriangles);
7495
7506
  return this.lightBVHNodeData = e, this.lightBVHNodeCount = t, this._rebuildSortedEmissiveData(n), t;
7496
7507
  }
7497
7508
  _rebuildSortedEmissiveData(e) {
@@ -7512,7 +7523,7 @@ var Es = 16, Ds = class {
7512
7523
  clear() {
7513
7524
  this.emissiveTriangles = [], this.emissiveCount = 0, this.totalEmissivePower = 0, this.emissiveIndicesArray = null, this.emissivePowerArray = null, this.cdfArray = null, this.lightBVHNodeData = null, this.lightBVHNodeCount = 0;
7514
7525
  }
7515
- }, Rs = class {
7526
+ }, zs = class {
7516
7527
  constructor(e = {}) {
7517
7528
  this.config = {
7518
7529
  useWorkers: !0,
@@ -7535,12 +7546,12 @@ var Es = 16, Ds = class {
7535
7546
  };
7536
7547
  }
7537
7548
  _initProcessors() {
7538
- this.geometryExtractor = new Fs(), this.bvhBuilder = new fs(), this.bvhBuilder.maxLeafSize = this.config.maxLeafSize, this.bvhBuilder.setTreeletConfig({
7549
+ this.geometryExtractor = new Is(), this.bvhBuilder = new ps(), this.bvhBuilder.maxLeafSize = this.config.maxLeafSize, this.bvhBuilder.setTreeletConfig({
7539
7550
  enabled: this.config.enableTreeletOptimization,
7540
7551
  size: this.config.treeletSize,
7541
7552
  passes: this.config.treeletOptimizationPasses,
7542
7553
  minImprovement: this.config.treeletMinImprovement
7543
- }), this.textureCreator = new Ns(), this.emissiveTriangleBuilder = new Ls(), this.tlasBuilder = new Os();
7554
+ }), this.textureCreator = new Ps(), this.emissiveTriangleBuilder = new Rs(), this.tlasBuilder = new ks();
7544
7555
  }
7545
7556
  _log(e, t) {
7546
7557
  this.config.verbose && console.log(`[SceneProcessor] ${e}`, t || "");
@@ -7548,7 +7559,7 @@ var Es = 16, Ds = class {
7548
7559
  async buildBVH(e) {
7549
7560
  if (this.isProcessing) throw Error("Already processing a scene. Call dispose() first.");
7550
7561
  this.isProcessing = !0, this.processingStage = "init";
7551
- let t = new rs(`SceneProcessor (${e.name || "scene"})`);
7562
+ let t = new is(`SceneProcessor (${e.name || "scene"})`);
7552
7563
  try {
7553
7564
  this._reset(), this._log("Starting scene processing"), this.processingStage = "extraction", t.start("Geometry extraction"), await this._extractGeometry(e), t.end("Geometry extraction"), this.performanceMetrics.geometryExtractionTime = t.getDuration("Geometry extraction"), this.processingStage = "bvh", t.start("BVH construction (worker)"), t.start("Material textures (parallel)");
7554
7565
  let n = !1, r = this._buildBVH().then(() => t.end("BVH construction (worker)")), i = this._createMaterialTextures().then(() => {
@@ -7609,11 +7620,11 @@ var Es = 16, Ds = class {
7609
7620
  try {
7610
7621
  let t = Q.FLOATS_PER_TRIANGLE, n = this.meshTriangleRanges;
7611
7622
  if (!n || n.length === 0) throw Error("No mesh triangle ranges available for TLAS/BLAS build");
7612
- this.instanceTable = new ks(), this.instanceTable.allocate(n.length);
7623
+ this.instanceTable = new As(), this.instanceTable.allocate(n.length);
7613
7624
  let r = n.length, i = this.config.enableTreeletOptimization, a = [], o = [];
7614
7625
  for (let e = 0; e < r; e++) {
7615
7626
  let t = n[e];
7616
- t.count !== 0 && (t.count >= 2e5 && Ts(t.count) ? o.push({
7627
+ t.count !== 0 && (t.count >= 2e5 && Es(t.count) ? o.push({
7617
7628
  m: e,
7618
7629
  range: t
7619
7630
  }) : a.push({
@@ -7639,7 +7650,7 @@ var Es = 16, Ds = class {
7639
7650
  status: `Building BLAS ${e + o.length}/${c}...`,
7640
7651
  progress: 25 + Math.floor(e / c * 45)
7641
7652
  });
7642
- }), u = o.map(({ m: e, range: n }) => Ss(this.triangleData.slice(n.start * t, (n.start + n.count) * t), this.config.bvhDepth, null, {
7653
+ }), u = o.map(({ m: e, range: n }) => Cs(this.triangleData.slice(n.start * t, (n.start + n.count) * t), this.config.bvhDepth, null, {
7643
7654
  maxLeafSize: this.bvhBuilder.maxLeafSize,
7644
7655
  numBins: this.bvhBuilder.numBins,
7645
7656
  maxBins: this.bvhBuilder.maxBins,
@@ -7816,7 +7827,7 @@ var Es = 16, Ds = class {
7816
7827
  this.emissiveTriangleCount = this.emissiveTriangleBuilder.extractEmissiveTriangles(this.triangleData, this.materials, this.triangleCount), this.emissiveTriangleData = this.emissiveTriangleBuilder.createEmissiveRawData(), this.emissiveTotalPower = this.emissiveTriangleBuilder.totalEmissivePower, this._log("Emissive triangle extraction complete", this.emissiveTriangleBuilder.getStats()), this.emissiveTriangleBuilder.buildLightBVH(), this.lightBVHNodeData = this.emissiveTriangleBuilder.lightBVHNodeData, this.lightBVHNodeCount = this.emissiveTriangleBuilder.lightBVHNodeCount, this.emissiveTriangleData = this.emissiveTriangleBuilder.emissiveTriangleData || this.emissiveTriangleData;
7817
7828
  }
7818
7829
  _createSpheres() {
7819
- return new v(16777215), new v(0), [];
7830
+ return [];
7820
7831
  }
7821
7832
  _reset() {
7822
7833
  this._disposeTextures(), this.triangles = [], this.triangleData = null, this.triangleCount = 0, this.materials = [], this.meshTriangleRanges = null, this.maps = [], this.normalMaps = [], this.bumpMaps = [], this.roughnessMaps = [], this.metalnessMaps = [], this.emissiveMaps = [], this.displacementMaps = [], this.directionalLights = [], this.cameras = [], this.spheres = [], this.bvhRoot = null, this.bvhData = null, this.instanceTable = null, this.lightBVHNodeData = null, this.lightBVHNodeCount = 0, this.performanceMetrics = {
@@ -7956,7 +7967,7 @@ var Es = 16, Ds = class {
7956
7967
  refitBLASes(e, t, n) {
7957
7968
  if (!this.instanceTable || !this.bvhData || !this.triangleData) throw Error("No TLAS/BLAS data available. Run buildBVH() first.");
7958
7969
  let r = performance.now();
7959
- this._blasRefitter ||= new vs();
7970
+ this._blasRefitter ||= new ys();
7960
7971
  for (let r of e) {
7961
7972
  let e = this.instanceTable.entries[r];
7962
7973
  e && (this._updateMeshTrianglePositions(e, t), n && this._patchMeshSmoothNormals(e, n), this._blasRefitter.refitRange(this.bvhData, this.triangleData, e.blasOffset, e.blasNodeCount), this.instanceTable.recomputeAABB(r, this.bvhData, this.triangleData));
@@ -8119,7 +8130,7 @@ var Es = 16, Ds = class {
8119
8130
  dispose() {
8120
8131
  this._log("Disposing resources"), this._disposeRefitWorker(), this._disposeTextures(), this._reset(), this.textureCreator &&= (this.textureCreator.dispose(), null), this.geometryExtractor = null, this.bvhBuilder = null, this.tlasBuilder = null, this._blasRefitter = null;
8121
8132
  }
8122
- }, zs = class {
8133
+ }, Bs = class {
8123
8134
  constructor() {
8124
8135
  this.lightData = {
8125
8136
  directional: [],
@@ -8272,14 +8283,14 @@ var Es = 16, Ds = class {
8272
8283
  }))
8273
8284
  };
8274
8285
  }
8275
- }, Bs = "https://assets.rayzee.atulmourya.com/noise/simple_bluenoise.png", Vs = 4, Hs = class extends pn {
8286
+ }, Vs = "https://assets.rayzee.atulmourya.com/noise/simple_bluenoise.png", Hs = 4, Us = class extends pn {
8276
8287
  constructor(e, t, n, r = {}) {
8277
8288
  super("PathTracer", {
8278
8289
  ...r,
8279
8290
  executionMode: fn.ALWAYS
8280
8291
  });
8281
8292
  let i = r.width || 1920, a = r.height || 1080;
8282
- this.camera = n, this.width = i, this.height = a, this.renderer = e, this.scene = t, this.tileManager = new mn(i, a, Z.tiles), this.sdfs = new Rs(), this.lightSerializer = new zs(), this.accumulationEnabled = !0, this.isComplete = !1, this.cameras = [], this.performanceMonitor = kn(), this.completionThreshold = 0, this.renderLimitMode = "frames", this._initDataTextures(), this.storageTextures = new jn(0, 0), this.uniforms = new Gn(i, a), this._defineUniformGetters(), this.materialData = new qn(this.sdfs), this.materialData.callbacks.onReset = () => this.reset(), this.environment = new xr(this.scene, this.uniforms), this.environment.callbacks.onReset = () => this.reset(), this.environment.callbacks.getSceneTextureNodes = () => this.shaderBuilder.getSceneTextureNodes(), this.shaderBuilder = new as(), this._initRenderingState(), this.setupBlueNoise(), this.tempVector2 = new Ie(), this.lastCameraMatrix = new se(), this.lastProjectionMatrix = new se(), this.lastRenderMode = -1, this.tileCompletionFrame = 0, this.renderModeChangeTimeout = null, this.renderModeChangeDelay = 50, this.pendingRenderMode = null, this.adaptiveSamplingFrameToggle = !1, this.lastInteractionModeState = !1, this.cameraChanged = !1, this.tileChanged = !1, this.updateCompletionThreshold();
8293
+ this.camera = n, this.width = i, this.height = a, this.renderer = e, this.scene = t, this.tileManager = new mn(i, a, Z.tiles), this.sdfs = new zs(), this.lightSerializer = new Bs(), this.accumulationEnabled = !0, this.isComplete = !1, this.cameras = [], this.performanceMonitor = kn(), this.completionThreshold = 0, this.renderLimitMode = "frames", this._initDataTextures(), this.storageTextures = new jn(0, 0), this.uniforms = new Gn(i, a), this._defineUniformGetters(), this.materialData = new qn(this.sdfs), this.materialData.callbacks.onReset = () => this.reset(), this.environment = new Sr(this.scene, this.uniforms), this.environment.callbacks.onReset = () => this.reset(), this.environment.callbacks.getSceneTextureNodes = () => this.shaderBuilder.getSceneTextureNodes(), this.shaderBuilder = new os(), this._initRenderingState(), this.setupBlueNoise(), this.tempVector2 = new Ie(), this.lastCameraMatrix = new se(), this.lastProjectionMatrix = new se(), this.lastRenderMode = -1, this.tileCompletionFrame = 0, this.renderModeChangeTimeout = null, this.renderModeChangeDelay = 50, this.pendingRenderMode = null, this.adaptiveSamplingFrameToggle = !1, this.lastInteractionModeState = !1, this.cameraChanged = !1, this.tileChanged = !1, this.updateCompletionThreshold();
8283
8294
  }
8284
8295
  _initDataTextures() {
8285
8296
  this.triangleStorageAttr = null, this.triangleStorageNode = null, this.triangleCount = 0, this.bvhStorageAttr = null, this.bvhStorageNode = null, this.bvhNodeCount = 0, this.directionalLightsData = null, this.pointLightsData = null, this.spotLightsData = null, this.areaLightsData = null, this.blueNoiseTexture = null, this.emissiveTriangleStorageAttr = new i(new Float32Array(4), 4), this.emissiveTriangleStorageNode = gt(this.emissiveTriangleStorageAttr, "vec4", 1).toReadOnly(), this.lightBVHStorageAttr = new i(new Float32Array(16), 4), this.lightBVHStorageNode = gt(this.lightBVHStorageAttr, "vec4", 1).toReadOnly(), this.meshVisibilityStorageAttr = new i(new Float32Array([
@@ -8380,7 +8391,7 @@ var Es = 16, Ds = class {
8380
8391
  }
8381
8392
  setupBlueNoise() {
8382
8393
  let e = new Me();
8383
- e.setCrossOrigin("anonymous"), e.load(Bs, (e) => {
8394
+ e.setCrossOrigin("anonymous"), e.load(Vs, (e) => {
8384
8395
  e.minFilter = j, e.magFilter = j, e.wrapS = Ee, e.wrapT = Ee, e.type = D, e.generateMipmaps = !1, this.blueNoiseTexture = e, Gt.value = e, console.log(`PathTracer: Blue noise loaded ${e.image.width}x${e.image.height}`);
8385
8396
  });
8386
8397
  }
@@ -8463,7 +8474,7 @@ var Es = 16, Ds = class {
8463
8474
  setBVHData(e) {
8464
8475
  if (!e) return;
8465
8476
  let t = e.length / 4;
8466
- this.bvhStorageNode ? (this.bvhStorageAttr = new i(e, 4), this.bvhStorageNode.value = this.bvhStorageAttr, this.bvhStorageNode.bufferCount = t) : (this.bvhStorageAttr = new i(e, 4), this.bvhStorageNode = gt(this.bvhStorageAttr, "vec4", t).toReadOnly()), this.bvhNodeCount = Math.floor(t / Vs), console.log(`PathTracer: ${this.bvhNodeCount} BVH nodes (storage buffer)`);
8477
+ this.bvhStorageNode ? (this.bvhStorageAttr = new i(e, 4), this.bvhStorageNode.value = this.bvhStorageAttr, this.bvhStorageNode.bufferCount = t) : (this.bvhStorageAttr = new i(e, 4), this.bvhStorageNode = gt(this.bvhStorageAttr, "vec4", t).toReadOnly()), this.bvhNodeCount = Math.floor(t / Hs), console.log(`PathTracer: ${this.bvhNodeCount} BVH nodes (storage buffer)`);
8467
8478
  }
8468
8479
  setMeshVisibilityData(e) {
8469
8480
  if (!e || e.length === 0) return;
@@ -8655,7 +8666,7 @@ var Es = 16, Ds = class {
8655
8666
  dispose() {
8656
8667
  this.renderModeChangeTimeout &&= (clearTimeout(this.renderModeChangeTimeout), null), this.tileManager?.dispose(), this.cameraOptimizer?.dispose(), this.materialData?.dispose(), this.environment?.dispose(), this.shaderBuilder?.dispose(), this.storageTextures?.dispose(), this.blueNoiseTexture?.dispose(), this.placeholderTexture?.dispose(), this.triangleStorageAttr = null, this.triangleStorageNode = null, this.bvhStorageAttr = null, this.bvhStorageNode = null, this.placeholderTexture = null, this.isReady = !1;
8657
8668
  }
8658
- }, Us = class extends pn {
8669
+ }, Ws = class extends pn {
8659
8670
  constructor(e, t = {}) {
8660
8671
  super("NormalDepth", {
8661
8672
  ...t,
@@ -8690,10 +8701,10 @@ var Es = 16, Ds = class {
8690
8701
  this._computeNode = M(([r, i]) => {
8691
8702
  let c = B(Dt.x).mul(8).add(B(nt.x)), l = B(Dt.y).mul(8).add(B(nt.y));
8692
8703
  N(c.lessThan(B(a)).and(l.lessThan(B(o))), () => {
8693
- let u = J(z(c).add(.5).div(a).mul(2).sub(1), z(l).add(.5).div(o).mul(2).sub(1).negate(), 1), d = i.mul(Y(u, 1)), f = U(it(r[0].xyz, r[1].xyz, r[2].xyz).mul(d.xyz.div(d.w))), p = wr({
8704
+ let u = J(z(c).add(.5).div(a).mul(2).sub(1), z(l).add(.5).div(o).mul(2).sub(1).negate(), 1), d = i.mul(Y(u, 1)), f = U(it(r[0].xyz, r[1].xyz, r[2].xyz).mul(d.xyz.div(d.w))), p = Tr({
8694
8705
  origin: J(r[3]),
8695
8706
  direction: f
8696
- }), m = Er.wrap(vi(p, t, e, n)), h = m.normal.mul(.5).add(.5), g = m.dst, _ = m.didHit.select(Y(h, g), Y(0, 0, 0, z(1e6)));
8707
+ }), m = Dr.wrap(yi(p, t, e, n)), h = m.normal.mul(.5).add(.5), g = m.dst, _ = m.didHit.select(Y(h, g), Y(0, 0, 0, z(1e6)));
8697
8708
  xt(s, wt(G(c), G(l)), _).toWriteOnly();
8698
8709
  });
8699
8710
  })(r, i).compute([
@@ -8734,7 +8745,7 @@ var Es = 16, Ds = class {
8734
8745
  dispose() {
8735
8746
  this._computeNode?.dispose(), this._outputStorageTex?.dispose(), this.renderTarget?.dispose();
8736
8747
  }
8737
- }, Ws = class extends pn {
8748
+ }, Gs = class extends pn {
8738
8749
  constructor(e, t, n = {}) {
8739
8750
  super("MotionVector", {
8740
8751
  ...n,
@@ -8846,7 +8857,7 @@ var Es = 16, Ds = class {
8846
8857
  };
8847
8858
  //#endregion
8848
8859
  //#region src/Processor/createRenderTargetHelper.js
8849
- function Gs(e, t, n = {}) {
8860
+ function Ks(e, t, n = {}) {
8850
8861
  let r = n.textureIndex || 0, i = t.isTexture === !0, a;
8851
8862
  i ? (console.warn("RenderTargetHelper: Direct Texture input is not supported. Pass a RenderTarget instead."), a = null) : a = t;
8852
8863
  let o = {
@@ -8998,7 +9009,7 @@ function Gs(e, t, n = {}) {
8998
9009
  }
8999
9010
  //#endregion
9000
9011
  //#region src/Stages/ASVGF.js
9001
- var Ks = class extends pn {
9012
+ var qs = class extends pn {
9002
9013
  constructor(e, t = {}) {
9003
9014
  super("ASVGF", {
9004
9015
  ...t,
@@ -9012,7 +9023,7 @@ var Ks = class extends pn {
9012
9023
  magFilter: j,
9013
9024
  depthBuffer: !1,
9014
9025
  stencilBuffer: !1
9015
- }), this._heatmapRawColorTexNode = new o(), this._heatmapColorTexNode = new o(), this._heatmapTemporalTexNode = new o(), this._heatmapNDTexNode = new o(), this._heatmapMotionTexNode = new o(), this._heatmapGradientTexNode = new o(), this._buildHeatmapCompute(), this.heatmapHelper = Gs(this.renderer, this.heatmapTarget, {
9026
+ }), this._heatmapRawColorTexNode = new o(), this._heatmapColorTexNode = new o(), this._heatmapTemporalTexNode = new o(), this._heatmapNDTexNode = new o(), this._heatmapMotionTexNode = new o(), this._heatmapGradientTexNode = new o(), this._buildHeatmapCompute(), this.heatmapHelper = Ks(this.renderer, this.heatmapTarget, {
9016
9027
  width: 400,
9017
9028
  height: 400,
9018
9029
  position: "bottom-right",
@@ -9025,9 +9036,9 @@ var Ks = class extends pn {
9025
9036
  let e = this._colorTexNode, t = this._motionTexNode, n = this._readTemporalTexNode, r = this._gradientStorageTex, i = this.resW, a = this.resH, o = Tt("float", 100);
9026
9037
  this._gradientNode = M(() => {
9027
9038
  let s = nt.x, c = nt.y, l = c.mul(8).add(s), u = B(Dt.x).mul(8).sub(1), d = B(Dt.y).mul(8).sub(1), f = l.mod(10), p = l.div(10), m = yt(e, $e(u.add(B(f)).clamp(B(0), B(i).sub(1)), d.add(B(p)).clamp(B(0), B(a).sub(1)))).xyz;
9028
- o.element(l).assign(Yr(m)), N(l.lessThan(G(36)), () => {
9039
+ o.element(l).assign(Xr(m)), N(l.lessThan(G(36)), () => {
9029
9040
  let t = l.add(G(64)), n = t.mod(10), r = t.div(10), s = yt(e, $e(u.add(B(n)).clamp(B(0), B(i).sub(1)), d.add(B(r)).clamp(B(0), B(a).sub(1)))).xyz;
9030
- o.element(t).assign(Yr(s));
9041
+ o.element(t).assign(Xr(s));
9031
9042
  }), Et();
9032
9043
  let h = B(Dt.x).mul(8).add(B(s)), g = B(Dt.y).mul(8).add(B(c));
9033
9044
  N(h.lessThan(B(i)).and(g.lessThan(B(a))), () => {
@@ -9038,7 +9049,7 @@ var Ks = class extends pn {
9038
9049
  e.assign(r), l.assign(B(n)), u.assign(B(t));
9039
9050
  });
9040
9051
  }
9041
- let d = h.add(l).clamp(B(0), B(i).sub(1)), f = g.add(u).clamp(B(0), B(a).sub(1)), p = yt(t, $e(d, f)), m = z(d).sub(p.x.mul(i)), _ = z(f).sub(p.y.mul(a)), v = yt(n, $e(B(m).clamp(B(0), B(i).sub(1)), B(_).clamp(B(0), B(a).sub(1)))).xyz, y = Yr(v), b = F(e.sub(y)).div(V(e, z(.001))).clamp(0, 1);
9052
+ let d = h.add(l).clamp(B(0), B(i).sub(1)), f = g.add(u).clamp(B(0), B(a).sub(1)), p = yt(t, $e(d, f)), m = z(d).sub(p.x.mul(i)), _ = z(f).sub(p.y.mul(a)), v = yt(n, $e(B(m).clamp(B(0), B(i).sub(1)), B(_).clamp(B(0), B(a).sub(1)))).xyz, y = Xr(v), b = F(e.sub(y)).div(V(e, z(.001))).clamp(0, 1);
9042
9053
  xt(r, wt(G(h), G(g)), Y(b, e, y, 1)).toWriteOnly();
9043
9054
  });
9044
9055
  })().compute([
@@ -9068,7 +9079,7 @@ var Ks = class extends pn {
9068
9079
  let e = yt(i, _), t = e.w.greaterThan(.5), r = z(h).sub(e.x.mul(p)), f = z(g).sub(e.y.mul(m)), x = r.greaterThanEqual(0).and(r.lessThan(z(p))).and(f.greaterThanEqual(0)).and(f.lessThan(z(m)));
9069
9080
  N(t.and(x), () => {
9070
9081
  let e = $e(B(r).clamp(B(0), B(p).sub(1)), B(f).clamp(B(0), B(m).sub(1))), t = y.xyz.mul(2).sub(1), i = yt(o, e);
9071
- oi(t, i.xyz.mul(2).sub(1), y.w, i.w, c, l);
9082
+ si(t, i.xyz.mul(2).sub(1), y.w, i.w, c, l);
9072
9083
  let _ = yt(a, e), x = _.xyz, S = _.w, C = S.div(u).clamp(0, 1), w = J(1e10).toVar(), T = J(-1e10).toVar(), E = J(0).toVar();
9073
9084
  for (let e = -1; e <= 1; e++) for (let t = -1; t <= 1; t++) {
9074
9085
  let r = yt(n, $e(h.add(t).clamp(B(0), B(p).sub(1)), g.add(e).clamp(B(0), B(m).sub(1)))).xyz;
@@ -9185,7 +9196,7 @@ var Ks = class extends pn {
9185
9196
  dispose() {
9186
9197
  this._gradientNode?.dispose(), this._temporalNodeA?.dispose(), this._temporalNodeB?.dispose(), this._temporalTexA?.dispose(), this._temporalTexB?.dispose(), this._prevNDTexA?.dispose(), this._prevNDTexB?.dispose(), this._gradientStorageTex?.dispose(), this._heatmapComputeNode?.dispose(), this._heatmapStorageTex?.dispose(), this.heatmapTarget?.dispose(), this.heatmapHelper?.dispose();
9187
9198
  }
9188
- }, qs = /* @__PURE__ */ X("\n fn temporalAccumulate(\n lum: f32,\n prevMean: f32,\n prevMeanSq: f32,\n alpha: f32,\n spatialVariance: f32,\n varianceBoost: f32\n ) -> vec4f {\n\n let newMean = prevMean + ( lum - prevMean ) * alpha;\n let newMeanSq = prevMeanSq + ( lum * lum - prevMeanSq ) * alpha;\n let temporalVariance = max( newMeanSq - newMean * newMean, 0.0 );\n\n return vec4f(\n newMean,\n newMeanSq,\n temporalVariance * varianceBoost,\n spatialVariance * varianceBoost\n );\n\n }\n"), Js = class extends pn {
9199
+ }, Js = /* @__PURE__ */ X("\n fn temporalAccumulate(\n lum: f32,\n prevMean: f32,\n prevMeanSq: f32,\n alpha: f32,\n spatialVariance: f32,\n varianceBoost: f32\n ) -> vec4f {\n\n let newMean = prevMean + ( lum - prevMean ) * alpha;\n let newMeanSq = prevMeanSq + ( lum * lum - prevMeanSq ) * alpha;\n let temporalVariance = max( newMeanSq - newMean * newMean, 0.0 );\n\n return vec4f(\n newMean,\n newMeanSq,\n temporalVariance * varianceBoost,\n spatialVariance * varianceBoost\n );\n\n }\n"), Ys = class extends pn {
9189
9200
  constructor(e, t = {}) {
9190
9201
  super("VarianceEstimation", {
9191
9202
  ...t,
@@ -9204,9 +9215,9 @@ var Ks = class extends pn {
9204
9215
  let n = this._colorTexNode, r = this.temporalAlpha, i = this.varianceBoost, a = this.resW, o = this.resH, s = Tt("float", 100);
9205
9216
  return M(() => {
9206
9217
  let c = nt.x, l = nt.y, u = l.mul(8).add(c), d = B(Dt.x).mul(8).sub(1), f = B(Dt.y).mul(8).sub(1), p = u.mod(10), m = u.div(10), h = yt(n, $e(d.add(B(p)).clamp(B(0), B(a).sub(1)), f.add(B(m)).clamp(B(0), B(o).sub(1)))).xyz;
9207
- s.element(u).assign(Yr(h)), N(u.lessThan(G(36)), () => {
9218
+ s.element(u).assign(Xr(h)), N(u.lessThan(G(36)), () => {
9208
9219
  let e = u.add(G(64)), t = e.mod(10), r = e.div(10), i = yt(n, $e(d.add(B(t)).clamp(B(0), B(a).sub(1)), f.add(B(r)).clamp(B(0), B(o).sub(1)))).xyz;
9209
- s.element(e).assign(Yr(i));
9220
+ s.element(e).assign(Xr(i));
9210
9221
  }), Et();
9211
9222
  let g = B(Dt.x).mul(8).add(B(c)), _ = B(Dt.y).mul(8).add(B(l));
9212
9223
  N(g.lessThan(B(a)).and(_.lessThan(B(o))), () => {
@@ -9217,7 +9228,7 @@ var Ks = class extends pn {
9217
9228
  }
9218
9229
  n.divAssign(9), a.divAssign(9);
9219
9230
  let o = V(a.sub(n.mul(n)), z(0)), u = s.element(l.add(1).mul(10).add(c.add(1))), d = yt(t, $e(g, _));
9220
- xt(e, wt(G(g), G(_)), qs(u, d.x, d.y, r, o, i)).toWriteOnly();
9231
+ xt(e, wt(G(g), G(_)), Js(u, d.x, d.y, r, o, i)).toWriteOnly();
9221
9232
  });
9222
9233
  })().compute([
9223
9234
  this._dispatchX,
@@ -9260,7 +9271,7 @@ var Ks = class extends pn {
9260
9271
  dispose() {
9261
9272
  this._computeNodeA?.dispose(), this._computeNodeB?.dispose(), this._storageTexA?.dispose(), this._storageTexB?.dispose();
9262
9273
  }
9263
- }, Ys = /* @__PURE__ */ X("\n fn bilateralWeight(\n centerLum: f32, sLum: f32,\n centerNormal: vec3f, sNormal: vec3f,\n centerDepth: f32, sDepth: f32,\n centerColor: vec3f, sColor: vec3f,\n kernelW: f32,\n phiLum: f32, phiNorm: f32, phiDep: f32, phiCol: f32\n ) -> f32 {\n\n let lumW = exp( -abs( centerLum - sLum ) * phiLum );\n let normW = pow( max( dot( centerNormal, sNormal ), 0.0 ), phiNorm );\n let depW = exp( -abs( centerDepth - sDepth ) / max( phiDep, 0.001 ) );\n let maxDiff = max( max( abs( centerColor.x - sColor.x ),\n abs( centerColor.y - sColor.y ) ),\n abs( centerColor.z - sColor.z ) );\n let colW = exp( -maxDiff * phiCol );\n return kernelW * lumW * normW * depW * colW;\n\n }\n"), Xs = class extends pn {
9274
+ }, Xs = /* @__PURE__ */ X("\n fn bilateralWeight(\n centerLum: f32, sLum: f32,\n centerNormal: vec3f, sNormal: vec3f,\n centerDepth: f32, sDepth: f32,\n centerColor: vec3f, sColor: vec3f,\n kernelW: f32,\n phiLum: f32, phiNorm: f32, phiDep: f32, phiCol: f32\n ) -> f32 {\n\n let lumW = exp( -abs( centerLum - sLum ) * phiLum );\n let normW = pow( max( dot( centerNormal, sNormal ), 0.0 ), phiNorm );\n let depW = exp( -abs( centerDepth - sDepth ) / max( phiDep, 0.001 ) );\n let maxDiff = max( max( abs( centerColor.x - sColor.x ),\n abs( centerColor.y - sColor.y ) ),\n abs( centerColor.z - sColor.z ) );\n let colW = exp( -maxDiff * phiCol );\n return kernelW * lumW * normW * depW * colW;\n\n }\n"), Zs = class extends pn {
9264
9275
  constructor(e, t = {}) {
9265
9276
  super("BilateralFiltering", {
9266
9277
  ...t,
@@ -9303,9 +9314,9 @@ var Ks = class extends pn {
9303
9314
  return M(() => {
9304
9315
  let d = B(Dt.x).mul(8).add(B(nt.x)), f = B(Dt.y).mul(8).add(B(nt.y));
9305
9316
  N(d.lessThan(B(c)).and(f.lessThan(B(l))), () => {
9306
- let p = $e(d, f), m = yt(t, p).xyz, h = yt(n, p), g = h.xyz.mul(2).sub(1), _ = h.w, v = Yr(m), y = J(0).toVar(), b = z(0).toVar();
9317
+ let p = $e(d, f), m = yt(t, p).xyz, h = yt(n, p), g = h.xyz.mul(2).sub(1), _ = h.w, v = Xr(m), y = J(0).toVar(), b = z(0).toVar();
9307
9318
  for (let e = 0; e < 5; e++) for (let p = 0; p < 5; p++) {
9308
- let h = p - 2, x = e - 2, S = u[e * 5 + p], C = d.add(s.mul(h)).clamp(B(0), B(c).sub(1)), w = f.add(s.mul(x)).clamp(B(0), B(l).sub(1)), T = yt(t, $e(C, w)).xyz, E = yt(n, $e(C, w)), D = E.xyz.mul(2).sub(1), O = E.w, k = Ys(v, Yr(T), g, D, _, O, m, T, z(S), o, i, a, r);
9319
+ let h = p - 2, x = e - 2, S = u[e * 5 + p], C = d.add(s.mul(h)).clamp(B(0), B(c).sub(1)), w = f.add(s.mul(x)).clamp(B(0), B(l).sub(1)), T = yt(t, $e(C, w)).xyz, E = yt(n, $e(C, w)), D = E.xyz.mul(2).sub(1), O = E.w, k = Xs(v, Xr(T), g, D, _, O, m, T, z(S), o, i, a, r);
9309
9320
  y.addAssign(T.mul(k)), b.addAssign(k);
9310
9321
  }
9311
9322
  let x = y.div(V(b, z(1e-4)));
@@ -9350,7 +9361,7 @@ var Ks = class extends pn {
9350
9361
  dispose() {
9351
9362
  this._computeNodeA?.dispose(), this._computeNodeB?.dispose(), this._storageTexA?.dispose(), this._storageTexB?.dispose();
9352
9363
  }
9353
- }, Zs = /* @__PURE__ */ X("\n fn computeSamplingGuidance(\n temporalVariance: f32,\n spatialVariance: f32,\n meanLuminance: f32,\n threshold: f32,\n frame: i32,\n minFrames: i32,\n convThreshold: f32,\n sensitivity: f32,\n convSpeedScale: f32\n ) -> vec4f {\n\n // The path tracer accumulates via alpha = 1/(frame+1), so temporal variance\n // of the accumulated output shrinks as ~sigma²/(frame+1)². Scale by (frame+1)\n // to get accumulated image quality ~sigma²/N — decreases as image converges.\n let frameScale = f32( frame + 1 );\n let effectiveVariance = temporalVariance * frameScale;\n\n // Normalize by luminance² — converts absolute variance to relative (CV²).\n // Floor of 0.01 prevents noise amplification for near-black pixels\n // (linear luminance < 0.1 → below perceptual visibility threshold).\n let normFactor = max( meanLuminance * meanLuminance, 0.01 );\n let normalizedVariance = effectiveVariance / normFactor;\n\n let varianceRatio = clamp( normalizedVariance / threshold, 0.0, 1.0 );\n\n // Apply sensitivity — higher values assign more samples to noisy pixels\n var normalizedSamples = clamp( varianceRatio * sensitivity, 0.0, 1.0 );\n\n // Small spatial boost for noisy neighbourhoods (un-scaled — provides\n // a minor secondary signal that naturally diminishes as image converges)\n let spatialBoost = clamp( spatialVariance / ( threshold * 4.0 ), 0.0, 0.2 );\n normalizedSamples = clamp( normalizedSamples + spatialBoost, 0.0, 1.0 );\n\n // Warm-up: variance estimates need a few frames to stabilise\n if ( frame < minFrames ) {\n\n let warmupFactor = f32( frame ) / f32( minFrames );\n normalizedSamples = mix( 1.0, normalizedSamples, warmupFactor * warmupFactor );\n\n }\n\n // Convergence: mark pixel only when per-frame noise is truly negligible.\n // convSpeedScale controls aggressiveness: higher = easier to converge\n // (scales the threshold up, so more pixels qualify as converged).\n let scaledConvThreshold = convThreshold * convSpeedScale;\n var converged = 0.0;\n if ( normalizedVariance < scaledConvThreshold && frame > minFrames ) {\n\n converged = 1.0;\n\n }\n\n return vec4f(\n normalizedSamples,\n varianceRatio,\n converged,\n 1.0\n );\n\n }\n"), Qs = /* @__PURE__ */ X("\n fn heatmapGradient( t: f32, normalizedVariance: f32, converged: f32 ) -> vec4f {\n\n let r = clamp( ( t - 0.5 ) * 4.0, 0.0, 1.0 );\n let g = clamp( t * 4.0, 0.0, 1.0 ) - clamp( ( t - 0.75 ) * 4.0, 0.0, 1.0 );\n let b = 1.0 - clamp( ( t - 0.25 ) * 4.0, 0.0, 1.0 );\n\n var color = vec3f( r, g, b );\n\n // Convergence: desaturate converged pixels\n if ( converged > 0.5 ) {\n\n let gray = color.x * 0.299 + color.y * 0.587 + color.z * 0.114;\n color = mix( color, vec3f( gray ), 0.6 );\n\n }\n\n // Brightness modulation\n color *= 0.7 + normalizedVariance * 0.3;\n\n return vec4f( color, 1.0 );\n\n }\n"), $s = class extends pn {
9364
+ }, Qs = /* @__PURE__ */ X("\n fn computeSamplingGuidance(\n temporalVariance: f32,\n spatialVariance: f32,\n meanLuminance: f32,\n threshold: f32,\n frame: i32,\n minFrames: i32,\n convThreshold: f32,\n sensitivity: f32,\n convSpeedScale: f32\n ) -> vec4f {\n\n // The path tracer accumulates via alpha = 1/(frame+1), so temporal variance\n // of the accumulated output shrinks as ~sigma²/(frame+1)². Scale by (frame+1)\n // to get accumulated image quality ~sigma²/N — decreases as image converges.\n let frameScale = f32( frame + 1 );\n let effectiveVariance = temporalVariance * frameScale;\n\n // Normalize by luminance² — converts absolute variance to relative (CV²).\n // Floor of 0.01 prevents noise amplification for near-black pixels\n // (linear luminance < 0.1 → below perceptual visibility threshold).\n let normFactor = max( meanLuminance * meanLuminance, 0.01 );\n let normalizedVariance = effectiveVariance / normFactor;\n\n let varianceRatio = clamp( normalizedVariance / threshold, 0.0, 1.0 );\n\n // Apply sensitivity — higher values assign more samples to noisy pixels\n var normalizedSamples = clamp( varianceRatio * sensitivity, 0.0, 1.0 );\n\n // Small spatial boost for noisy neighbourhoods (un-scaled — provides\n // a minor secondary signal that naturally diminishes as image converges)\n let spatialBoost = clamp( spatialVariance / ( threshold * 4.0 ), 0.0, 0.2 );\n normalizedSamples = clamp( normalizedSamples + spatialBoost, 0.0, 1.0 );\n\n // Warm-up: variance estimates need a few frames to stabilise\n if ( frame < minFrames ) {\n\n let warmupFactor = f32( frame ) / f32( minFrames );\n normalizedSamples = mix( 1.0, normalizedSamples, warmupFactor * warmupFactor );\n\n }\n\n // Convergence: mark pixel only when per-frame noise is truly negligible.\n // convSpeedScale controls aggressiveness: higher = easier to converge\n // (scales the threshold up, so more pixels qualify as converged).\n let scaledConvThreshold = convThreshold * convSpeedScale;\n var converged = 0.0;\n if ( normalizedVariance < scaledConvThreshold && frame > minFrames ) {\n\n converged = 1.0;\n\n }\n\n return vec4f(\n normalizedSamples,\n varianceRatio,\n converged,\n 1.0\n );\n\n }\n"), $s = /* @__PURE__ */ X("\n fn heatmapGradient( t: f32, normalizedVariance: f32, converged: f32 ) -> vec4f {\n\n let r = clamp( ( t - 0.5 ) * 4.0, 0.0, 1.0 );\n let g = clamp( t * 4.0, 0.0, 1.0 ) - clamp( ( t - 0.75 ) * 4.0, 0.0, 1.0 );\n let b = 1.0 - clamp( ( t - 0.25 ) * 4.0, 0.0, 1.0 );\n\n var color = vec3f( r, g, b );\n\n // Convergence: desaturate converged pixels\n if ( converged > 0.5 ) {\n\n let gray = color.x * 0.299 + color.y * 0.587 + color.z * 0.114;\n color = mix( color, vec3f( gray ), 0.6 );\n\n }\n\n // Brightness modulation\n color *= 0.7 + normalizedVariance * 0.3;\n\n return vec4f( color, 1.0 );\n\n }\n"), ec = class extends pn {
9354
9365
  constructor(e, t = {}) {
9355
9366
  super("AdaptiveSampling", {
9356
9367
  ...t,
@@ -9364,7 +9375,7 @@ var Ks = class extends pn {
9364
9375
  magFilter: j,
9365
9376
  depthBuffer: !1,
9366
9377
  stencilBuffer: !1
9367
- }), this._dispatchX = Math.ceil(n / 16), this._dispatchY = Math.ceil(i / 16), this._varianceTexNode = new o(), this._buildCompute(), this._buildHeatmapCompute(), this.helper = Gs(this.renderer, this.heatmapTarget, {
9378
+ }), this._dispatchX = Math.ceil(n / 16), this._dispatchY = Math.ceil(i / 16), this._varianceTexNode = new o(), this._buildCompute(), this._buildHeatmapCompute(), this.helper = Ks(this.renderer, this.heatmapTarget, {
9368
9379
  width: 400,
9369
9380
  height: 400,
9370
9381
  position: "bottom-right",
@@ -9381,7 +9392,7 @@ var Ks = class extends pn {
9381
9392
  this._computeNode = M(() => {
9382
9393
  let u = B(Dt.x).mul(16).add(B(nt.x)), d = B(Dt.y).mul(16).add(B(nt.y));
9383
9394
  N(u.lessThan(B(s)).and(d.lessThan(B(c))), () => {
9384
- let s = yt(e, $e(u, d)), c = Zs(s.z, s.w, s.x, t, B(i), B(a), o, n, r);
9395
+ let s = yt(e, $e(u, d)), c = Qs(s.z, s.w, s.x, t, B(i), B(a), o, n, r);
9385
9396
  xt(l, wt(G(u), G(d)), c).toWriteOnly();
9386
9397
  });
9387
9398
  })().compute([
@@ -9399,7 +9410,7 @@ var Ks = class extends pn {
9399
9410
  this._heatmapComputeNode = M(() => {
9400
9411
  let i = B(Dt.x).mul(16).add(B(nt.x)), a = B(Dt.y).mul(16).add(B(nt.y));
9401
9412
  N(i.lessThan(B(n)).and(a.lessThan(B(r))), () => {
9402
- let n = yt(e, $e(i, a)), r = Qs(n.x.clamp(0, 1), n.y, n.z);
9413
+ let n = yt(e, $e(i, a)), r = $s(n.x.clamp(0, 1), n.y, n.z);
9403
9414
  xt(t, wt(G(i), G(a)), r).toWriteOnly();
9404
9415
  });
9405
9416
  })().compute([
@@ -9458,7 +9469,7 @@ var Ks = class extends pn {
9458
9469
  dispose() {
9459
9470
  this._computeNode?.dispose(), this._heatmapComputeNode?.dispose(), this._heatmapStorageTex?.dispose(), this._outputStorageTex?.dispose(), this.heatmapTarget?.dispose(), this.helper?.dispose();
9460
9471
  }
9461
- }, ec = class extends pn {
9472
+ }, tc = class extends pn {
9462
9473
  constructor(e, t = {}) {
9463
9474
  super("EdgeAwareFiltering", {
9464
9475
  ...t,
@@ -9538,7 +9549,7 @@ var Ks = class extends pn {
9538
9549
  dispose() {
9539
9550
  this._computeNode?.dispose(), this._outputStorageTex?.dispose(), this.outputTarget?.dispose();
9540
9551
  }
9541
- }, tc = /* @__PURE__ */ X("\n fn adaptExposure(\n geoMean: f32,\n prevExposure: f32,\n keyValue: f32,\n minExp: f32,\n maxExp: f32,\n speedBright: f32,\n speedDark: f32,\n dt: f32,\n isFirstFrame: f32\n ) -> vec4f {\n\n let targetExp = clamp( keyValue / max( geoMean, 0.001 ), minExp, maxExp );\n var newExposure = targetExp;\n\n // Temporal smoothing (skip on first frame)\n if ( isFirstFrame < 0.5 ) {\n\n // Asymmetric speed: brighter scenes adapt faster\n let speed = select( speedDark, speedBright, targetExp < prevExposure );\n let alpha = 1.0 - exp( -dt * speed );\n newExposure = mix( prevExposure, targetExp, alpha );\n\n }\n\n return vec4f( newExposure, geoMean, targetExp, 1.0 );\n\n }\n"), nc = class extends pn {
9552
+ }, nc = /* @__PURE__ */ X("\n fn adaptExposure(\n geoMean: f32,\n prevExposure: f32,\n keyValue: f32,\n minExp: f32,\n maxExp: f32,\n speedBright: f32,\n speedDark: f32,\n dt: f32,\n isFirstFrame: f32\n ) -> vec4f {\n\n let targetExp = clamp( keyValue / max( geoMean, 0.001 ), minExp, maxExp );\n var newExposure = targetExp;\n\n // Temporal smoothing (skip on first frame)\n if ( isFirstFrame < 0.5 ) {\n\n // Asymmetric speed: brighter scenes adapt faster\n let speed = select( speedDark, speedBright, targetExp < prevExposure );\n let alpha = 1.0 - exp( -dt * speed );\n newExposure = mix( prevExposure, targetExp, alpha );\n\n }\n\n return vec4f( newExposure, geoMean, targetExp, 1.0 );\n\n }\n"), rc = class extends pn {
9542
9553
  constructor(e, t = {}) {
9543
9554
  super("AutoExposure", {
9544
9555
  ...t,
@@ -9564,7 +9575,7 @@ var Ks = class extends pn {
9564
9575
  this._downsampleComputeNode = M(() => {
9565
9576
  let a = B(Dt.x).mul(8).add(B(nt.x)), o = B(Dt.y).mul(8).add(B(nt.y)), s = r.div(z(64)), c = i.div(z(64)), l = z(a).mul(s), u = z(o).mul(c), d = z(0).toVar(), f = z(0).toVar();
9566
9577
  for (let t = 0; t < 4; t++) for (let r = 0; r < 4; r++) {
9567
- let i = Yr(yt(e, $e(B(l.add(z((r + .5) / 4).mul(s))), B(u.add(z((t + .5) / 4).mul(c))))).xyz);
9578
+ let i = Xr(yt(e, $e(B(l.add(z((r + .5) / 4).mul(s))), B(u.add(z((t + .5) / 4).mul(c))))).xyz);
9568
9579
  N(i.greaterThan(n), () => {
9569
9580
  d.addAssign(i.add(n).log()), f.addAssign(1);
9570
9581
  });
@@ -9605,7 +9616,7 @@ var Ks = class extends pn {
9605
9616
  _buildAdaptationCompute() {
9606
9617
  let e = this._reductionReadTexNode, t = this._adaptationStorageTex, n = this.keyValueU, r = this.minExposureU, i = this.maxExposureU, a = this.adaptSpeedBrightU, o = this.adaptSpeedDarkU, s = this.deltaTimeU, c = this.isFirstFrameU, l = this.previousExposureU;
9607
9618
  this._adaptationComputeNode = M(() => {
9608
- let u = yt(e, $e(B(0), B(0))).x, d = tc(u, l, n, r, i, a, o, s, c);
9619
+ let u = yt(e, $e(B(0), B(0))).x, d = nc(u, l, n, r, i, a, o, s, c);
9609
9620
  xt(t, wt(G(0), G(0)), d).toWriteOnly();
9610
9621
  })().compute(1, [
9611
9622
  1,
@@ -9670,7 +9681,7 @@ var Ks = class extends pn {
9670
9681
  };
9671
9682
  //#endregion
9672
9683
  //#region src/TSL/SSRC.js
9673
- function rc({ colorTexNode: e, ndTexNode: t, motionTexNode: n, readCacheTexNode: r, readPrevNDTexNode: i, writeCacheTex: a, writePrevNDTex: o, resW: s, resH: c, temporalAlpha: l, phiNormal: u, phiDepth: d, maxHistory: f, framesSinceReset: p }) {
9684
+ function ic({ colorTexNode: e, ndTexNode: t, motionTexNode: n, readCacheTexNode: r, readPrevNDTexNode: i, writeCacheTex: a, writePrevNDTex: o, resW: s, resH: c, temporalAlpha: l, phiNormal: u, phiDepth: d, maxHistory: f, framesSinceReset: p }) {
9674
9685
  return M(() => {
9675
9686
  let m = B(Dt.x).mul(8).add(B(nt.x)), h = B(Dt.y).mul(8).add(B(nt.y));
9676
9687
  N(m.lessThan(B(s)).and(h.lessThan(B(c))), () => {
@@ -9678,7 +9689,7 @@ function rc({ colorTexNode: e, ndTexNode: t, motionTexNode: n, readCacheTexNode:
9678
9689
  N(p.greaterThan(B(0)), () => {
9679
9690
  let e = yt(n, g), t = e.w.greaterThan(.5), a = z(m).sub(e.x.mul(s)), o = z(h).sub(e.y.mul(c)), p = a.greaterThanEqual(0).and(a.lessThan(z(s))).and(o.greaterThanEqual(0)).and(o.lessThan(z(c)));
9680
9691
  N(t.and(p), () => {
9681
- let e = $e(B(a).clamp(B(0), B(s).sub(1)), B(o).clamp(B(0), B(c).sub(1))), t = v.xyz.mul(2).sub(1), n = yt(i, e), p = oi(t, n.xyz.mul(2).sub(1), v.w, n.w, u, d);
9692
+ let e = $e(B(a).clamp(B(0), B(s).sub(1)), B(o).clamp(B(0), B(c).sub(1))), t = v.xyz.mul(2).sub(1), n = yt(i, e), p = si(t, n.xyz.mul(2).sub(1), v.w, n.w, u, d);
9682
9693
  N(p.greaterThan(.01), () => {
9683
9694
  let t = yt(r, e), n = t.xyz, i = t.w, a = H(n, _, at(V(l, z(1).div(i.add(1))).div(V(p, z(.1))), 1)), o = at(i.add(1), f);
9684
9695
  y.assign(Y(a, o));
@@ -9692,7 +9703,7 @@ function rc({ colorTexNode: e, ndTexNode: t, motionTexNode: n, readCacheTexNode:
9692
9703
  });
9693
9704
  });
9694
9705
  }
9695
- function ic({ colorTexNode: e, ndTexNode: t, readCacheTexNode: n, outputTex: r, resW: i, resH: a, spatialRadius: o, spatialWeight: s, phiNormal: c, phiDepth: l }) {
9706
+ function ac({ colorTexNode: e, ndTexNode: t, readCacheTexNode: n, outputTex: r, resW: i, resH: a, spatialRadius: o, spatialWeight: s, phiNormal: c, phiDepth: l }) {
9696
9707
  let u = [
9697
9708
  [1, 0],
9698
9709
  [-1, 0],
@@ -9708,7 +9719,7 @@ function ic({ colorTexNode: e, ndTexNode: t, readCacheTexNode: n, outputTex: r,
9708
9719
  N(d.lessThan(B(i)).and(f.lessThan(B(a))), () => {
9709
9720
  let p = $e(d, f), m = yt(n, p), h = m.xyz, g = m.w, _ = yt(t, p), v = _.xyz.mul(2).sub(1), y = z(1).sub(g.div(16).clamp(0, 1)), b = s.mul(y), x = J(h).toVar(), S = z(1).toVar();
9710
9721
  for (let e = 0; e < u.length; e++) {
9711
- let [r, s] = u[e], p = $e(d.add(B(o).mul(r)).clamp(B(0), B(i).sub(1)), f.add(B(o).mul(s)).clamp(B(0), B(a).sub(1))), m = yt(n, p).xyz, h = yt(t, p), g = oi(v, h.xyz.mul(2).sub(1), _.w, h.w, c, l);
9722
+ let [r, s] = u[e], p = $e(d.add(B(o).mul(r)).clamp(B(0), B(i).sub(1)), f.add(B(o).mul(s)).clamp(B(0), B(a).sub(1))), m = yt(n, p).xyz, h = yt(t, p), g = si(v, h.xyz.mul(2).sub(1), _.w, h.w, c, l);
9712
9723
  x.addAssign(m.mul(g)), S.addAssign(g);
9713
9724
  }
9714
9725
  let C = H(h, x.div(V(S, 1e-4)), b), w = yt(e, p).w;
@@ -9718,7 +9729,7 @@ function ic({ colorTexNode: e, ndTexNode: t, readCacheTexNode: n, outputTex: r,
9718
9729
  }
9719
9730
  //#endregion
9720
9731
  //#region src/Stages/SSRC.js
9721
- var ac = class extends pn {
9732
+ var oc = class extends pn {
9722
9733
  constructor(e, t = {}) {
9723
9734
  super("SSRC", {
9724
9735
  ...t,
@@ -9793,12 +9804,12 @@ var ac = class extends pn {
9793
9804
  phiNormal: this.phiNormal,
9794
9805
  phiDepth: this.phiDepth,
9795
9806
  maxHistory: this.maxHistory
9796
- }, t = rc({
9807
+ }, t = ic({
9797
9808
  ...e,
9798
9809
  writeCacheTex: this._cacheTexA,
9799
9810
  writePrevNDTex: this._prevNDTexA,
9800
9811
  framesSinceReset: this._framesSinceReset
9801
- }), n = rc({
9812
+ }), n = ic({
9802
9813
  ...e,
9803
9814
  writeCacheTex: this._cacheTexB,
9804
9815
  writePrevNDTex: this._prevNDTexB,
@@ -9812,7 +9823,7 @@ var ac = class extends pn {
9812
9823
  8,
9813
9824
  1
9814
9825
  ];
9815
- this._pass1NodeA = t().compute(r, i), this._pass1NodeB = n().compute(r, i), this._pass2Node = ic({
9826
+ this._pass1NodeA = t().compute(r, i), this._pass1NodeB = n().compute(r, i), this._pass2Node = ac({
9816
9827
  colorTexNode: this._colorTexNode,
9817
9828
  ndTexNode: this._ndTexNode,
9818
9829
  readCacheTexNode: this._readPass1CacheTexNode,
@@ -9825,13 +9836,13 @@ var ac = class extends pn {
9825
9836
  phiDepth: this.phiDepth
9826
9837
  })().compute(r, i);
9827
9838
  }
9828
- }, oc = class extends pn {
9839
+ }, sc = class extends pn {
9829
9840
  constructor(n, r = {}) {
9830
9841
  super("Display", {
9831
9842
  ...r,
9832
9843
  executionMode: fn.ALWAYS
9833
9844
  }), this.renderer = n, this.exposure = K(r.exposure ?? 1), this.saturation = K(r.saturation ?? 1), this._transparentBackground = K(0, "int"), this._displayTexNode = new o();
9834
- let i = this._displayTexNode.sample(Ct()), a = i.xyz.mul(this.exposure), s = H(J(R(a, Gr)), a, this.saturation), c = W(this._transparentBackground, i.w, 1);
9845
+ let i = this._displayTexNode.sample(Ct()), a = i.xyz.mul(this.exposure), s = H(J(R(a, Kr)), a, this.saturation), c = W(this._transparentBackground, i.w, 1);
9835
9846
  this.displayMaterial = new e(), this.displayMaterial.colorNode = Y(s, c), this.displayMaterial.blending = pe, this.displayMaterial.toneMapped = !0, this.displayQuad = new t(this.displayMaterial);
9836
9847
  }
9837
9848
  _resolveDisplayTexture(e) {
@@ -9854,7 +9865,7 @@ var ac = class extends pn {
9854
9865
  dispose() {
9855
9866
  this.displayMaterial?.dispose();
9856
9867
  }
9857
- }, sc = class {
9868
+ }, cc = class {
9858
9869
  constructor() {
9859
9870
  this.textures = /* @__PURE__ */ new Map(), this.renderTargets = /* @__PURE__ */ new Map(), this.uniforms = /* @__PURE__ */ new Map(), this.state = {
9860
9871
  frame: 0,
@@ -9977,7 +9988,7 @@ var ac = class extends pn {
9977
9988
  dispose() {
9978
9989
  this.textures.clear(), this.renderTargets.clear(), this.uniforms.clear(), this._stateChangeCallbacks.clear(), this.state = {};
9979
9990
  }
9980
- }, cc = class extends E {
9991
+ }, lc = class extends E {
9981
9992
  constructor() {
9982
9993
  super(), this._onceCallbacks = /* @__PURE__ */ new Map();
9983
9994
  }
@@ -10015,9 +10026,9 @@ var ac = class extends pn {
10015
10026
  eventNames() {
10016
10027
  return this._listeners ? Object.keys(this._listeners) : [];
10017
10028
  }
10018
- }, lc = class {
10029
+ }, uc = class {
10019
10030
  constructor(e, t, n) {
10020
- this.renderer = e, this.width = t, this.height = n, this.stages = [], this.context = new sc(), this.eventBus = new cc(), this.context.setState("width", t), this.context.setState("height", n), this.stats = {
10031
+ this.renderer = e, this.width = t, this.height = n, this.stages = [], this.context = new cc(), this.eventBus = new lc(), this.context.setState("width", t), this.context.setState("height", n), this.stats = {
10021
10032
  enabled: !1,
10022
10033
  logSkipped: !1,
10023
10034
  timings: /* @__PURE__ */ new Map(),
@@ -10149,7 +10160,7 @@ var ac = class extends pn {
10149
10160
  let e = this.getInfo();
10150
10161
  console.group("[Pipeline] Info"), console.log("Stages:", e.stages), console.log("Context Textures:", e.textures), console.log("Context Render Targets:", e.renderTargets), console.log("Context Uniforms:", e.uniforms), console.log("Event Types:", e.events), console.log("State:", e.contextState), console.groupEnd();
10151
10162
  }
10152
- }, uc = class {
10163
+ }, dc = class {
10153
10164
  constructor() {
10154
10165
  this.timeElapsed = 0, this.lastResetTime = performance.now(), this.renderCompleteDispatched = !1;
10155
10166
  }
@@ -10171,7 +10182,7 @@ var ac = class extends pn {
10171
10182
  resumeFromPause() {
10172
10183
  this.renderCompleteDispatched = !1, this.lastResetTime = performance.now() - this.timeElapsed * 1e3;
10173
10184
  }
10174
- }, dc = class extends E {
10185
+ }, fc = class extends E {
10175
10186
  constructor({ scene: e, camera: t, canvas: n, assetLoader: r, pathTracer: i, floorPlane: a }) {
10176
10187
  super(), this.scene = e, this.camera = t, this.canvas = n, this.assetLoader = r, this.pathTracer = i, this.floorPlane = a, this.raycaster = new Ce(), this.focusMode = !1, this.focusPointIndicator = null, this.afPointPlacementMode = !1, this.handleAFPointClick = this.handleAFPointClick.bind(this), this.selectedObject = null, this.selectMode = !1, this.clickTimeout = null, this.mouseDownPosition = null, this.dragThreshold = 5, this.handleFocusClick = this.handleFocusClick.bind(this), this.handleSelectClick = this.handleSelectClick.bind(this), this.handleSelectDoubleClick = this.handleSelectDoubleClick.bind(this), this.handleMouseDown = this.handleMouseDown.bind(this), this.handleMouseUp = this.handleMouseUp.bind(this), this.handleContextMenu = this.handleContextMenu.bind(this), this.handleContextPointerDown = this.handleContextPointerDown.bind(this), this.handleContextPointerUp = this.handleContextPointerUp.bind(this), this.contextPointerDownPosition = null, this.canvas.addEventListener("pointerdown", this.handleContextPointerDown), this.canvas.addEventListener("pointerup", this.handleContextPointerUp), this.canvas.addEventListener("contextmenu", this.handleContextMenu), this._overlayManager = null, this._transformManager = null, this._appDispatch = null, this._orbitControls = null;
10177
10188
  }
@@ -10392,7 +10403,7 @@ var ac = class extends pn {
10392
10403
  dispose() {
10393
10404
  this.canvas.removeEventListener("click", this.handleAFPointClick), this.canvas.removeEventListener("click", this.handleFocusClick), this.canvas.removeEventListener("mousedown", this.handleMouseDown), this.canvas.removeEventListener("mouseup", this.handleMouseUp), this.canvas.removeEventListener("click", this.handleSelectClick), this.canvas.removeEventListener("dblclick", this.handleSelectDoubleClick), this.canvas.removeEventListener("contextmenu", this.handleContextMenu), this.canvas.removeEventListener("pointerdown", this.handleContextPointerDown), this.canvas.removeEventListener("pointerup", this.handleContextPointerUp), this.clickTimeout &&= (clearTimeout(this.clickTimeout), null), this.mouseDownPosition = null, this.contextPointerDownPosition = null, this.focusPointIndicator &&= (this.scene.remove(this.focusPointIndicator), null), this.canvas.style.cursor = "auto", this.scene = null, this.camera = null, this.canvas = null, this.assetLoader = null, this.pathTracer = null, this.floorPlane = null, this.raycaster = null;
10394
10405
  }
10395
- }, fc = {
10406
+ }, pc = {
10396
10407
  glb: {
10397
10408
  type: "model",
10398
10409
  name: "GLB (GLTF Binary)"
@@ -10457,12 +10468,12 @@ var ac = class extends pn {
10457
10468
  type: "archive",
10458
10469
  name: "ZIP Archive"
10459
10470
  }
10460
- }, pc = class extends E {
10471
+ }, mc = class extends E {
10461
10472
  constructor(e, t, n) {
10462
10473
  super(), this.scene = e, this.camera = t, this.controls = n, this.targetModel = null, this.floorPlane = null, this.sceneScale = 1, this.loaderCache = {}, this.uploadedFileInfo = null, this.animations = [];
10463
10474
  }
10464
10475
  getFileFormat(e) {
10465
- return fc[e.split(".").pop().toLowerCase()] || null;
10476
+ return pc[e.split(".").pop().toLowerCase()] || null;
10466
10477
  }
10467
10478
  readFileAsArrayBuffer(e) {
10468
10479
  return new Promise((t, n) => {
@@ -10638,7 +10649,7 @@ var ac = class extends pn {
10638
10649
  }
10639
10650
  return n;
10640
10651
  }
10641
- async findAndLoadModelFromZip(e, t) {
10652
+ async findAndLoadModelFromZip(e) {
10642
10653
  for (let t of [
10643
10654
  "scene.gltf",
10644
10655
  "scene.glb",
@@ -10655,7 +10666,7 @@ var ac = class extends pn {
10655
10666
  }
10656
10667
  for (let t in e) {
10657
10668
  let n = t.split(".").pop().toLowerCase();
10658
- if (fc[n] && fc[n].type === "model") return console.log(`Loading model file from ZIP: ${t}`), await this.loadModelFromZipEntry(e[t], t, n, e);
10669
+ if (pc[n] && pc[n].type === "model") return console.log(`Loading model file from ZIP: ${t}`), await this.loadModelFromZipEntry(e[t], t, n, e);
10659
10670
  }
10660
10671
  throw Error("No supported model files found in the ZIP archive");
10661
10672
  }
@@ -10713,9 +10724,7 @@ var ac = class extends pn {
10713
10724
  }
10714
10725
  async handleGltfFromZip(e, t, n, r) {
10715
10726
  if (e === "gltf") {
10716
- let e = Pt(t);
10717
- JSON.parse(e);
10718
- let i = new ne(), a = n.split("/").slice(0, -1).join("/");
10727
+ let e = Pt(t), i = new ne(), a = n.split("/").slice(0, -1).join("/");
10719
10728
  i.setURLModifier((e) => this.resolveZipResource(e, a, r));
10720
10729
  let o = await this.createGLTFLoader();
10721
10730
  return o.manager = i, await new Promise((t, n) => {
@@ -11084,7 +11093,7 @@ var ac = class extends pn {
11084
11093
  }), e;
11085
11094
  }
11086
11095
  async onModelLoad(e) {
11087
- let t = new rs("onModelLoad");
11096
+ let t = new is("onModelLoad");
11088
11097
  t.start("Camera extraction");
11089
11098
  let n = this.extractCamerasFromModel(e);
11090
11099
  t.end("Camera extraction"), t.start("Camera setup");
@@ -11163,10 +11172,10 @@ var ac = class extends pn {
11163
11172
  getSupportedFormats(e = null) {
11164
11173
  if (e) {
11165
11174
  let t = {};
11166
- for (let [n, r] of Object.entries(fc)) r.type === e && (t[n] = r);
11175
+ for (let [n, r] of Object.entries(pc)) r.type === e && (t[n] = r);
11167
11176
  return t;
11168
11177
  }
11169
- return fc;
11178
+ return pc;
11170
11179
  }
11171
11180
  dispose() {
11172
11181
  for (let e in this.loaderCache) {
@@ -11178,7 +11187,7 @@ var ac = class extends pn {
11178
11187
  removeAllEventListeners() {
11179
11188
  super.dispose();
11180
11189
  }
11181
- }, mc = {
11190
+ }, hc = {
11182
11191
  maxBounces: {
11183
11192
  uniform: "maxBounces",
11184
11193
  reset: !0
@@ -11285,11 +11294,11 @@ var ac = class extends pn {
11285
11294
  },
11286
11295
  renderMode: { handler: "handleRenderMode" },
11287
11296
  environmentRotation: { handler: "handleEnvironmentRotation" }
11288
- }, hc = {
11297
+ }, gc = {
11289
11298
  bounces: "maxBounces",
11290
11299
  adaptiveSampling: "useAdaptiveSampling",
11291
11300
  debugMode: "visMode"
11292
- }, gc = class extends E {
11301
+ }, _c = class extends E {
11293
11302
  constructor(e = Z) {
11294
11303
  super(), this._values = /* @__PURE__ */ new Map(), this._pathTracer = null, this._resetCallback = null, this._handlers = {}, this._delegates = {}, this._initDefaults(e);
11295
11304
  }
@@ -11331,7 +11340,7 @@ var ac = class extends pn {
11331
11340
  let i = this._values.get(e);
11332
11341
  if (i === t) return;
11333
11342
  this._values.set(e, t);
11334
- let a = mc[e];
11343
+ let a = hc[e];
11335
11344
  a && (this._applyRoute(a, t, i), (n === void 0 ? a.reset ?? !0 : n) && this._resetCallback?.(), r || this.dispatchEvent({
11336
11345
  type: gn.SETTING_CHANGED,
11337
11346
  key: e,
@@ -11345,7 +11354,7 @@ var ac = class extends pn {
11345
11354
  let e = this._values.get(r);
11346
11355
  if (e === i) continue;
11347
11356
  this._values.set(r, i);
11348
- let a = mc[r];
11357
+ let a = hc[r];
11349
11358
  a && (this._applyRoute(a, i, e), (a.reset ?? !0) && (n = !0), t || this.dispatchEvent({
11350
11359
  type: gn.SETTING_CHANGED,
11351
11360
  key: r,
@@ -11363,7 +11372,7 @@ var ac = class extends pn {
11363
11372
  }
11364
11373
  applyAll() {
11365
11374
  for (let [e, t] of this._values) {
11366
- let n = mc[e];
11375
+ let n = hc[e];
11367
11376
  n && this._applyRoute(n, t, void 0);
11368
11377
  }
11369
11378
  }
@@ -11371,10 +11380,10 @@ var ac = class extends pn {
11371
11380
  e.uniform ? (this._pathTracer?.setUniform(e.uniform, t), e.after && this._pathTracer?.[e.after]?.()) : e.handler ? this._handlers[e.handler]?.(t, n) : e.delegate && this._delegates[e.delegate]?.updateParam?.(e.param, t);
11372
11381
  }
11373
11382
  _initDefaults(e) {
11374
- for (let t of Object.keys(mc)) t in e && this._values.set(t, e[t]);
11375
- for (let [t, n] of Object.entries(hc)) t in e && this._values.set(n, e[t]);
11383
+ for (let t of Object.keys(hc)) t in e && this._values.set(t, e[t]);
11384
+ for (let [t, n] of Object.entries(gc)) t in e && this._values.set(n, e[t]);
11376
11385
  }
11377
- }, _c = class extends E {
11386
+ }, vc = class extends E {
11378
11387
  constructor(e) {
11379
11388
  super();
11380
11389
  let t = e.clientWidth, n = e.clientHeight;
@@ -11490,7 +11499,7 @@ var ac = class extends pn {
11490
11499
  dispose() {
11491
11500
  this.controls?.dispose();
11492
11501
  }
11493
- }, vc = class extends E {
11502
+ }, yc = class extends E {
11494
11503
  constructor(e, t, n, r = {}) {
11495
11504
  super(), this.scene = e, this.sceneHelpers = t, this.pathTracer = n, this._onReset = r.onReset || null;
11496
11505
  }
@@ -11640,39 +11649,39 @@ var ac = class extends pn {
11640
11649
  ]);
11641
11650
  return n;
11642
11651
  }
11643
- }, yc = (e) => Math.min(Math.max(e, 0), 1);
11644
- function bc(e, t, n, r, i) {
11645
- i[0] = yc(e), i[1] = yc(t), i[2] = yc(n);
11646
- }
11652
+ }, bc = (e) => Math.min(Math.max(e, 0), 1);
11647
11653
  function xc(e, t, n, r, i) {
11648
- i[0] = yc(e * r), i[1] = yc(t * r), i[2] = yc(n * r);
11654
+ i[0] = bc(e), i[1] = bc(t), i[2] = bc(n);
11649
11655
  }
11650
11656
  function Sc(e, t, n, r, i) {
11651
- e *= r, t *= r, n *= r, i[0] = yc(e / (e + 1)), i[1] = yc(t / (t + 1)), i[2] = yc(n / (n + 1));
11657
+ i[0] = bc(e * r), i[1] = bc(t * r), i[2] = bc(n * r);
11652
11658
  }
11653
11659
  function Cc(e, t, n, r, i) {
11660
+ e *= r, t *= r, n *= r, i[0] = bc(e / (e + 1)), i[1] = bc(t / (t + 1)), i[2] = bc(n / (n + 1));
11661
+ }
11662
+ function wc(e, t, n, r, i) {
11654
11663
  e = Math.max(e * r - .004, 0), t = Math.max(t * r - .004, 0), n = Math.max(n * r - .004, 0);
11655
11664
  let a = (e) => (e * (6.2 * e + .5) / (e * (6.2 * e + 1.7) + .06)) ** 2.2;
11656
11665
  i[0] = a(e), i[1] = a(t), i[2] = a(n);
11657
11666
  }
11658
- function wc(e, t, n, r, i) {
11667
+ function Tc(e, t, n, r, i) {
11659
11668
  e = e * r / .6, t = t * r / .6, n = n * r / .6;
11660
11669
  let a = .59719 * e + .35458 * t + .04823 * n, o = .076 * e + .90834 * t + .01566 * n, s = .0284 * e + .13383 * t + .83777 * n, c = (e) => (e * (e + .0245786) - 90537e-9) / (e * (.983729 * e + .432951) + .238081);
11661
- a = c(a), o = c(o), s = c(s), i[0] = yc(1.60475 * a - .53108 * o - .07367 * s), i[1] = yc(-.10208 * a + 1.10813 * o - .00605 * s), i[2] = yc(-.00327 * a - .07276 * o + 1.07602 * s);
11670
+ a = c(a), o = c(o), s = c(s), i[0] = bc(1.60475 * a - .53108 * o - .07367 * s), i[1] = bc(-.10208 * a + 1.10813 * o - .00605 * s), i[2] = bc(-.00327 * a - .07276 * o + 1.07602 * s);
11662
11671
  }
11663
- function Tc(e, t, n, r, i) {
11672
+ function Ec(e, t, n, r, i) {
11664
11673
  e *= r, t *= r, n *= r;
11665
11674
  let a = .6274 * e + .3293 * t + .0433 * n, o = .0691 * e + .9195 * t + .0113 * n, s = .0164 * e + .088 * t + .8956 * n, c = .856627153315983 * a + .0951212405381588 * o + .0482516061458583 * s, l = .137318972929847 * a + .761241990602591 * o + .101439036467562 * s, u = .11189821299995 * a + .0767994186031903 * o + .811302368396859 * s, d = -12.47393, f = 4.026069 - d;
11666
- c = yc((Math.log2(Math.max(c, 1e-10)) - d) / f), l = yc((Math.log2(Math.max(l, 1e-10)) - d) / f), u = yc((Math.log2(Math.max(u, 1e-10)) - d) / f);
11675
+ c = bc((Math.log2(Math.max(c, 1e-10)) - d) / f), l = bc((Math.log2(Math.max(l, 1e-10)) - d) / f), u = bc((Math.log2(Math.max(u, 1e-10)) - d) / f);
11667
11676
  let p = (e) => {
11668
11677
  let t = e * e, n = t * t;
11669
11678
  return 15.5 * n * t - 40.14 * n * e + 31.96 * n - 6.868 * t * e + .4298 * t + .1191 * e - .00232;
11670
11679
  };
11671
11680
  c = p(c), l = p(l), u = p(u);
11672
11681
  let m = 1.1271005818144368 * c - .11060664309660323 * l - .016493938717834573 * u, h = -.1413297634984383 * c + 1.157823702216272 * l - .016493938717834257 * u, g = -.14132976349843826 * c - .11060664309660294 * l + 1.2519364065950405 * u;
11673
- m = Math.max(0, m) ** 2.2, h = Math.max(0, h) ** 2.2, g = Math.max(0, g) ** 2.2, i[0] = yc(1.6605 * m - .5876 * h - .0728 * g), i[1] = yc(-.1246 * m + 1.1329 * h - .0083 * g), i[2] = yc(-.0182 * m - .1006 * h + 1.1187 * g);
11682
+ m = Math.max(0, m) ** 2.2, h = Math.max(0, h) ** 2.2, g = Math.max(0, g) ** 2.2, i[0] = bc(1.6605 * m - .5876 * h - .0728 * g), i[1] = bc(-.1246 * m + 1.1329 * h - .0083 * g), i[2] = bc(-.0182 * m - .1006 * h + 1.1187 * g);
11674
11683
  }
11675
- function Ec(e, t, n, r, i) {
11684
+ function Dc(e, t, n, r, i) {
11676
11685
  let a = .76;
11677
11686
  e *= r, t *= r, n *= r;
11678
11687
  let o = Math.min(e, Math.min(t, n)), s = o < .08 ? o - 6.25 * o * o : .04;
@@ -11687,27 +11696,27 @@ function Ec(e, t, n, r, i) {
11687
11696
  let f = 1 - 1 / (.15 * (c - u) + 1);
11688
11697
  i[0] = e + (u - e) * f, i[1] = t + (u - t) * f, i[2] = n + (u - n) * f;
11689
11698
  }
11690
- var Dc = new Map([
11691
- [me, bc],
11692
- [te, xc],
11693
- [Te, Sc],
11694
- [h, Cc],
11695
- [c, wc],
11696
- [u, Tc],
11697
- [fe, Ec]
11698
- ]), Oc = 1 / 2.2, kc = .2126, Ac = .7152, jc = .0722;
11699
- function Mc(e, t) {
11699
+ var Oc = new Map([
11700
+ [me, xc],
11701
+ [te, Sc],
11702
+ [Te, Cc],
11703
+ [h, wc],
11704
+ [c, Tc],
11705
+ [u, Ec],
11706
+ [fe, Dc]
11707
+ ]), kc = 1 / 2.2, Ac = .2126, jc = .7152, Mc = .0722;
11708
+ function Nc(e, t) {
11700
11709
  if (t === 1) return;
11701
- let n = e[0] * kc + e[1] * Ac + e[2] * jc;
11710
+ let n = e[0] * Ac + e[1] * jc + e[2] * Mc;
11702
11711
  e[0] = n + (e[0] - n) * t, e[1] = n + (e[1] - n) * t, e[2] = n + (e[2] - n) * t;
11703
11712
  }
11704
11713
  //#endregion
11705
11714
  //#region src/Passes/OIDNDenoiser.js
11706
- var Nc = null;
11707
- async function Pc() {
11708
- return Nc ||= (await import("oidn-web")).initUNetFromURL, Nc;
11715
+ var Pc = null;
11716
+ async function Fc() {
11717
+ return Pc ||= (await import("oidn-web")).initUNetFromURL, Pc;
11709
11718
  }
11710
- var Fc = new Float32Array(3), Ic = {
11719
+ var Ic = new Float32Array(3), Lc = {
11711
11720
  BASE_URL: "https://cdn.jsdelivr.net/npm/denoiser/tzas/",
11712
11721
  QUALITY_SUFFIXES: {
11713
11722
  fast: "_small",
@@ -11720,7 +11729,7 @@ var Fc = new Float32Array(3), Ic = {
11720
11729
  debugGbufferMaps: !0,
11721
11730
  tileSize: 256
11722
11731
  }
11723
- }, Lc = class extends E {
11732
+ }, Rc = class extends E {
11724
11733
  constructor(e, t, n, r, i = {}) {
11725
11734
  if (super(), !e || !t || !n || !r) throw Error("OIDNDenoiser requires output canvas, renderer, scene, and camera");
11726
11735
  this.renderer = t, this.scene = n, this.camera = r, this.input = t.domElement, this.output = e, this.debugContainer = i.debugContainer || null, this.extractGBufferData = i.extractGBufferData || null, this.getMRTRenderTarget = i.getMRTRenderTarget || null, this.backendParamsGetter = i.backendParams || null, this.getGPUTextures = i.getGPUTextures || null, this.getExposure = i.getExposure || (() => 1), this.getToneMapping = i.getToneMapping || (() => c), this.getSaturation = i.getSaturation || (() => 1), this.getTransparentBackground = i.getTransparentBackground || (() => !1), this.isGPUMode = !!this.backendParamsGetter, this.gpuDevice = null, this._gpuInputBuffers = {
@@ -11731,7 +11740,7 @@ var Fc = new Float32Array(3), Ic = {
11731
11740
  width: 0,
11732
11741
  height: 0
11733
11742
  }, this._cachedAlpha = null, this._cachedAlphaWidth = 0, this.config = {
11734
- ...Ic.DEFAULT_OPTIONS,
11743
+ ...Lc.DEFAULT_OPTIONS,
11735
11744
  ...i
11736
11745
  }, this.enabled = this.config.enableOIDN, this.quality = this.config.oidnQuality, this.debugGbufferMaps = this.config.debugGbufferMaps, this.tileSize = this.config.tileSize, this.state = {
11737
11746
  isDenoising: !1,
@@ -11787,7 +11796,7 @@ var Fc = new Float32Array(3), Ic = {
11787
11796
  let e = this.backendParamsGetter();
11788
11797
  this.gpuDevice = e?.device ?? null, t = e?.device ? e : void 0;
11789
11798
  }
11790
- this.unet = await (await Pc())(e, t, {
11799
+ this.unet = await (await Fc())(e, t, {
11791
11800
  aux: !0,
11792
11801
  hdr: !0,
11793
11802
  maxTileSize: this.tileSize
@@ -11802,14 +11811,14 @@ var Fc = new Float32Array(3), Ic = {
11802
11811
  }
11803
11812
  }
11804
11813
  _generateTzaUrl() {
11805
- let { BASE_URL: e, QUALITY_SUFFIXES: t } = Ic;
11814
+ let { BASE_URL: e, QUALITY_SUFFIXES: t } = Lc;
11806
11815
  return `${e}rt_hdr_alb_nrm${t[this.quality] || ""}.tza`;
11807
11816
  }
11808
11817
  async updateConfiguration(e) {
11809
11818
  Object.keys(e).some((t) => this.config[t] !== e[t]) && (Object.assign(this.config, e), this.quality = this.config.oidnQuality, this.debugGbufferMaps = this.config.debugGbufferMaps, this.tileSize = this.config.tileSize, await this._setupUNetDenoiser());
11810
11819
  }
11811
11820
  async updateQuality(e) {
11812
- if (!Object.prototype.hasOwnProperty.call(Ic.QUALITY_SUFFIXES, e)) throw Error(`Invalid quality setting: ${e}. Must be one of: ${Object.keys(Ic.QUALITY_SUFFIXES).join(", ")}`);
11821
+ if (!Object.prototype.hasOwnProperty.call(Lc.QUALITY_SUFFIXES, e)) throw Error(`Invalid quality setting: ${e}. Must be one of: ${Object.keys(Lc.QUALITY_SUFFIXES).join(", ")}`);
11813
11822
  await this.updateConfiguration({ oidnQuality: e });
11814
11823
  }
11815
11824
  async start() {
@@ -11983,10 +11992,10 @@ var Fc = new Float32Array(3), Ic = {
11983
11992
  f.copyBufferToBuffer(e.data, r, d, a, l);
11984
11993
  }
11985
11994
  r.queue.submit([f.finish()]), d.mapAsync(GPUMapMode.READ).then(() => {
11986
- let e = new Float32Array(d.getMappedRange()), t = new ImageData(o, s), r = this.getExposure(), i = this.getSaturation(), a = Dc.get(this.getToneMapping()) || Dc.get(c), l = this._cachedAlpha, u = this._cachedAlphaWidth;
11995
+ let e = new Float32Array(d.getMappedRange()), t = new ImageData(o, s), r = this.getExposure(), i = this.getSaturation(), a = Oc.get(this.getToneMapping()) || Oc.get(c), l = this._cachedAlpha, u = this._cachedAlphaWidth;
11987
11996
  for (let s = 0, c = e.length; s < c; s += 4) {
11988
11997
  let c = e[s] * r, d = e[s + 1] * r, f = e[s + 2] * r;
11989
- if (i !== 1 && (Fc[0] = c, Fc[1] = d, Fc[2] = f, Mc(Fc, i), c = Fc[0], d = Fc[1], f = Fc[2]), a(c, d, f, 1, Fc), t.data[s] = Fc[0] ** Oc * 255 | 0, t.data[s + 1] = Fc[1] ** Oc * 255 | 0, t.data[s + 2] = Fc[2] ** Oc * 255 | 0, l) {
11998
+ if (i !== 1 && (Ic[0] = c, Ic[1] = d, Ic[2] = f, Nc(Ic, i), c = Ic[0], d = Ic[1], f = Ic[2]), a(c, d, f, 1, Ic), t.data[s] = Ic[0] ** kc * 255 | 0, t.data[s + 1] = Ic[1] ** kc * 255 | 0, t.data[s + 2] = Ic[2] ** kc * 255 | 0, l) {
11990
11999
  let e = (s >> 2) % o, r = (s >> 2) / o | 0;
11991
12000
  t.data[s + 3] = l[(n.y + r) * u + n.x + e];
11992
12001
  } else t.data[s + 3] = 255;
@@ -12009,10 +12018,10 @@ var Fc = new Float32Array(3), Ic = {
12009
12018
  usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST
12010
12019
  }), o = r.createCommandEncoder({ label: "oidn-readback" });
12011
12020
  o.copyBufferToBuffer(e, 0, a, 0, i), r.queue.submit([o.finish()]), await a.mapAsync(GPUMapMode.READ);
12012
- let s = new Float32Array(a.getMappedRange()), l = new ImageData(t, n), u = this.getExposure(), d = this.getSaturation(), f = Dc.get(this.getToneMapping()) || Dc.get(c), p = this._cachedAlpha;
12021
+ let s = new Float32Array(a.getMappedRange()), l = new ImageData(t, n), u = this.getExposure(), d = this.getSaturation(), f = Oc.get(this.getToneMapping()) || Oc.get(c), p = this._cachedAlpha;
12013
12022
  for (let e = 0, t = s.length; e < t; e += 4) {
12014
12023
  let t = s[e] * u, n = s[e + 1] * u, r = s[e + 2] * u;
12015
- d !== 1 && (Fc[0] = t, Fc[1] = n, Fc[2] = r, Mc(Fc, d), t = Fc[0], n = Fc[1], r = Fc[2]), f(t, n, r, 1, Fc), l.data[e] = Fc[0] ** Oc * 255 | 0, l.data[e + 1] = Fc[1] ** Oc * 255 | 0, l.data[e + 2] = Fc[2] ** Oc * 255 | 0, l.data[e + 3] = p ? p[e >> 2] : 255;
12024
+ d !== 1 && (Ic[0] = t, Ic[1] = n, Ic[2] = r, Nc(Ic, d), t = Ic[0], n = Ic[1], r = Ic[2]), f(t, n, r, 1, Ic), l.data[e] = Ic[0] ** kc * 255 | 0, l.data[e + 1] = Ic[1] ** kc * 255 | 0, l.data[e + 2] = Ic[2] ** kc * 255 | 0, l.data[e + 3] = p ? p[e >> 2] : 255;
12016
12025
  }
12017
12026
  a.unmap(), a.destroy(), this.ctx.putImageData(l, 0, 0);
12018
12027
  }
@@ -12030,7 +12039,7 @@ var Fc = new Float32Array(3), Ic = {
12030
12039
  let t = this.debugHelpers && (this._lastAlbedoTexture !== e.textures[2] || this._lastNormalTexture !== e.textures[1]);
12031
12040
  if (!this.debugHelpers || t) {
12032
12041
  this.debugHelpers && (this.debugHelpers.albedo?.dispose(), this.debugHelpers.normal?.dispose(), console.log("OIDNDenoiser: Recreating debug helpers due to texture change")), this.debugHelpers = {
12033
- albedo: Gs(this.renderer, e, {
12042
+ albedo: Ks(this.renderer, e, {
12034
12043
  width: 250,
12035
12044
  height: 250,
12036
12045
  position: "bottom-right",
@@ -12039,7 +12048,7 @@ var Fc = new Float32Array(3), Ic = {
12039
12048
  autoUpdate: !1,
12040
12049
  textureIndex: 2
12041
12050
  }),
12042
- normal: Gs(this.renderer, e, {
12051
+ normal: Ks(this.renderer, e, {
12043
12052
  width: 250,
12044
12053
  height: 250,
12045
12054
  position: "bottom-left",
@@ -12057,19 +12066,19 @@ var Fc = new Float32Array(3), Ic = {
12057
12066
  dispose() {
12058
12067
  this.abort(), this.unet?.dispose(), this._destroyGPUInputBuffers(), this.debugHelpers &&= (this.debugHelpers.albedo?.dispose(), this.debugHelpers.normal?.dispose(), null), this._lastAlbedoTexture = null, this._lastNormalTexture = null, this.output?.parentNode && this.output.remove(), this.unet = null, this.ctx = null, this.state.abortController = null, this.removeAllListeners?.(), console.log("OIDNDenoiser disposed");
12059
12068
  }
12060
- }, Rc = "https://huggingface.co/notaneimu/onnx-image-models/resolve/main/", zc = {
12069
+ }, zc = "https://huggingface.co/notaneimu/onnx-image-models/resolve/main/", Bc = {
12061
12070
  QUALITY_PRESETS: {
12062
12071
  fast: {
12063
- 2: Rc + "2x-spanx2-ch48.onnx",
12064
- 4: Rc + "4xNomos8k_span_otf_strong_fp32_opset17.onnx"
12072
+ 2: zc + "2x-spanx2-ch48.onnx",
12073
+ 4: zc + "4xNomos8k_span_otf_strong_fp32_opset17.onnx"
12065
12074
  },
12066
12075
  balanced: {
12067
- 2: Rc + "2xNomosUni_compact_otf_medium.onnx",
12068
- 4: Rc + "RealESRGAN_x4plus.onnx"
12076
+ 2: zc + "2xNomosUni_compact_otf_medium.onnx",
12077
+ 4: zc + "RealESRGAN_x4plus.onnx"
12069
12078
  },
12070
12079
  quality: {
12071
- 2: Rc + "2x-realesrgan-x2plus.onnx",
12072
- 4: Rc + "4xNomos2_hq_mosr_fp32.onnx"
12080
+ 2: zc + "2x-realesrgan-x2plus.onnx",
12081
+ 4: zc + "4xNomos2_hq_mosr_fp32.onnx"
12073
12082
  }
12074
12083
  },
12075
12084
  TILE_SIZE: 512,
@@ -12081,17 +12090,17 @@ var Fc = new Float32Array(3), Ic = {
12081
12090
  }],
12082
12091
  graphOptimizationLevel: "all"
12083
12092
  }
12084
- }, Bc = class extends E {
12093
+ }, Vc = class extends E {
12085
12094
  constructor(e, t, n = {}) {
12086
12095
  if (super(), !e || !t) throw Error("AIUpscaler requires output canvas and renderer");
12087
- this.renderer = t, this.input = t.domElement, this.output = e, this.getSourceCanvas = n.getSourceCanvas || null, this.getGPUTextures = n.getGPUTextures || null, this.getExposure = n.getExposure || (() => 1), this.getToneMapping = n.getToneMapping || (() => c), this.getSaturation = n.getSaturation || (() => 1), this.enabled = !1, this.hdr = !1, this.scaleFactor = n.scaleFactor || 2, this.quality = n.quality || "fast", this.tileSize = n.tileSize || zc.TILE_SIZE, this._tileSizeOverride = !!n.tileSize, this.state = {
12096
+ this.renderer = t, this.input = t.domElement, this.output = e, this.getSourceCanvas = n.getSourceCanvas || null, this.getGPUTextures = n.getGPUTextures || null, this.getExposure = n.getExposure || (() => 1), this.getToneMapping = n.getToneMapping || (() => c), this.getSaturation = n.getSaturation || (() => 1), this.enabled = !1, this.hdr = !1, this.scaleFactor = n.scaleFactor || 2, this.quality = n.quality || "fast", this.tileSize = n.tileSize || Bc.TILE_SIZE, this._tileSizeOverride = !!n.tileSize, this.state = {
12088
12097
  isUpscaling: !1,
12089
12098
  isLoading: !1,
12090
12099
  abortController: null
12091
12100
  }, this._worker = null, this._currentModelUrl = null, this._tileId = 0, this._upscaledAlpha = null, this._upscaledAlphaWidth = 0, this._backupCanvas = null, this._baseWidth = e.width, this._baseHeight = e.height;
12092
12101
  }
12093
12102
  async _ensureSession() {
12094
- let e = zc.QUALITY_PRESETS[this.quality];
12103
+ let e = Bc.QUALITY_PRESETS[this.quality];
12095
12104
  if (!e) throw Error(`Unknown quality preset: ${this.quality}`);
12096
12105
  let t = e[this.scaleFactor];
12097
12106
  if (!t) throw Error(`No model for ${this.quality}/${this.scaleFactor}x`);
@@ -12112,7 +12121,7 @@ var Fc = new Float32Array(3), Ic = {
12112
12121
  this._worker.addEventListener("message", r), this._worker.postMessage({
12113
12122
  type: "load",
12114
12123
  url: t,
12115
- sessionOptions: zc.SESSION_OPTIONS
12124
+ sessionOptions: Bc.SESSION_OPTIONS
12116
12125
  });
12117
12126
  }), this._currentModelUrl = t, this.dispatchEvent({ type: "loaded" });
12118
12127
  } catch (e) {
@@ -12179,8 +12188,8 @@ var Fc = new Float32Array(3), Ic = {
12179
12188
  willReadFrequently: !0,
12180
12189
  alpha: !0
12181
12190
  });
12182
- this._cacheUpscaledAlpha(t, n * i, r * i), t.isHDR && (this._hdrToneMapFn = Dc.get(this.getToneMapping()) || Dc.get(c), this._hdrExposure = this.getExposure(), this._hdrSaturation = this.getSaturation(), this._tmOut = new Float32Array(3));
12183
- let o = zc.TILE_OVERLAP, s = this.tileSize, l = s - o * 2, u = Math.ceil(n / l), d = Math.ceil(r / l), f = u * d, p = 0;
12191
+ this._cacheUpscaledAlpha(t, n * i, r * i), t.isHDR && (this._hdrToneMapFn = Oc.get(this.getToneMapping()) || Oc.get(c), this._hdrExposure = this.getExposure(), this._hdrSaturation = this.getSaturation(), this._tmOut = new Float32Array(3));
12192
+ let o = Bc.TILE_OVERLAP, s = this.tileSize, l = s - o * 2, u = Math.ceil(n / l), d = Math.ceil(r / l), f = u * d, p = 0;
12184
12193
  for (let o = 0; o < d; o++) for (let c = 0; c < u; c++) {
12185
12194
  if (e.aborted) throw new DOMException("Aborted", "AbortError");
12186
12195
  let u = Math.min(c * l, Math.max(0, n - s)), d = Math.min(o * l, Math.max(0, r - s)), m = Math.min(s, n - u), h = Math.min(s, r - d), g = this._extractTile(t, u, d, m, h), _ = await this._inferTile(g, m, h), v = u * i, y = d * i, b = m * i, x = h * i, S = this._tensorToImageData(_, b, x, v, y);
@@ -12250,7 +12259,7 @@ var Fc = new Float32Array(3), Ic = {
12250
12259
  let u = ((n + e) * o + (t + i)) * 4, d = e * r + i;
12251
12260
  if (s) {
12252
12261
  let e = this._hdrToneMapFn, t = this._hdrExposure, n = this._hdrSaturation, r = a[u] * t, i = a[u + 1] * t, o = a[u + 2] * t;
12253
- n !== 1 && (this._tmOut[0] = r, this._tmOut[1] = i, this._tmOut[2] = o, Mc(this._tmOut, n), r = this._tmOut[0], i = this._tmOut[1], o = this._tmOut[2]), e(r, i, o, 1, this._tmOut), l[d] = this._tmOut[0] ** +Oc, l[c + d] = this._tmOut[1] ** +Oc, l[2 * c + d] = this._tmOut[2] ** +Oc;
12262
+ n !== 1 && (this._tmOut[0] = r, this._tmOut[1] = i, this._tmOut[2] = o, Nc(this._tmOut, n), r = this._tmOut[0], i = this._tmOut[1], o = this._tmOut[2]), e(r, i, o, 1, this._tmOut), l[d] = this._tmOut[0] ** +kc, l[c + d] = this._tmOut[1] ** +kc, l[2 * c + d] = this._tmOut[2] ** +kc;
12254
12263
  } else l[d] = a[u] / 255, l[c + d] = a[u + 1] / 255, l[2 * c + d] = a[u + 2] / 255;
12255
12264
  }
12256
12265
  return l;
@@ -12308,10 +12317,10 @@ var Fc = new Float32Array(3), Ic = {
12308
12317
  this._backupCanvas = document.createElement("canvas"), this._backupCanvas.width = e.width, this._backupCanvas.height = e.height;
12309
12318
  let t = this._backupCanvas.getContext("2d");
12310
12319
  if (e.isHDR) {
12311
- let { data: n, width: r, height: i } = e, a = t.createImageData(r, i), o = a.data, s = Dc.get(this.getToneMapping()) || Dc.get(c), l = this.getExposure(), u = this.getSaturation(), d = new Float32Array(3);
12320
+ let { data: n, width: r, height: i } = e, a = t.createImageData(r, i), o = a.data, s = Oc.get(this.getToneMapping()) || Oc.get(c), l = this.getExposure(), u = this.getSaturation(), d = new Float32Array(3);
12312
12321
  for (let e = 0, t = r * i; e < t; e++) {
12313
12322
  let t = e * 4, r = n[t] * l, i = n[t + 1] * l, a = n[t + 2] * l;
12314
- u !== 1 && (d[0] = r, d[1] = i, d[2] = a, Mc(d, u), r = d[0], i = d[1], a = d[2]), s(r, i, a, 1, d), o[t] = d[0] ** +Oc * 255 + .5 | 0, o[t + 1] = d[1] ** +Oc * 255 + .5 | 0, o[t + 2] = d[2] ** +Oc * 255 + .5 | 0, o[t + 3] = 255;
12323
+ u !== 1 && (d[0] = r, d[1] = i, d[2] = a, Nc(d, u), r = d[0], i = d[1], a = d[2]), s(r, i, a, 1, d), o[t] = d[0] ** +kc * 255 + .5 | 0, o[t + 1] = d[1] ** +kc * 255 + .5 | 0, o[t + 2] = d[2] ** +kc * 255 + .5 | 0, o[t + 3] = 255;
12315
12324
  }
12316
12325
  t.putImageData(a, 0, 0);
12317
12326
  } else t.putImageData(e, 0, 0);
@@ -12323,7 +12332,7 @@ var Fc = new Float32Array(3), Ic = {
12323
12332
  this.hdr = !!e;
12324
12333
  }
12325
12334
  setQuality(e) {
12326
- if (!zc.QUALITY_PRESETS[e]) {
12335
+ if (!Bc.QUALITY_PRESETS[e]) {
12327
12336
  console.warn(`AIUpscaler: Invalid quality "${e}", must be fast/balanced/quality`);
12328
12337
  return;
12329
12338
  }
@@ -12342,7 +12351,7 @@ var Fc = new Float32Array(3), Ic = {
12342
12351
  async dispose() {
12343
12352
  this.abort(), this._worker &&= (this._worker.postMessage({ type: "dispose" }), this._worker.terminate(), null), this._currentModelUrl = null, this._backupCanvas = null, this._upscaledAlpha = null, this.state.abortController = null, console.log("AIUpscaler disposed");
12344
12353
  }
12345
- }, Vc = class extends E {
12354
+ }, Hc = class extends E {
12346
12355
  constructor({ renderer: e, mainCanvas: t, scene: n, camera: r, stages: i, pipeline: a, getExposure: o, getSaturation: s, getTransparentBg: c }) {
12347
12356
  super(), this.renderer = e, this.mainCanvas = t, this.denoiserCanvas = this._createDenoiserCanvas(t), this.scene = n, this.camera = r, this.pipeline = a, this._stages = i, this._getExposure = o, this._getSaturation = s, this._getTransparentBg = c, this.denoiser = null, this.upscaler = null, this._lastRenderWidth = 0, this._lastRenderHeight = 0;
12348
12357
  }
@@ -12366,7 +12375,7 @@ var Fc = new Float32Array(3), Ic = {
12366
12375
  setupDenoiser() {
12367
12376
  if (!this.denoiserCanvas) return;
12368
12377
  let e = this._stages.pathTracer;
12369
- this.denoiser = new Lc(this.denoiserCanvas, this.renderer, this.scene, this.camera, {
12378
+ this.denoiser = new Rc(this.denoiserCanvas, this.renderer, this.scene, this.camera, {
12370
12379
  ...Z,
12371
12380
  backendParams: () => ({
12372
12381
  device: this.renderer.backend.device,
@@ -12391,7 +12400,7 @@ var Fc = new Float32Array(3), Ic = {
12391
12400
  setupUpscaler() {
12392
12401
  if (!this.denoiserCanvas) return;
12393
12402
  let e = this._stages.pathTracer;
12394
- this.upscaler = new Bc(this.denoiserCanvas, this.renderer, {
12403
+ this.upscaler = new Vc(this.denoiserCanvas, this.renderer, {
12395
12404
  scaleFactor: Z.upscalerScale || 2,
12396
12405
  quality: Z.upscalerQuality || "fast",
12397
12406
  getSourceCanvas: () => this.denoiser?.enabled ? null : this.renderer.domElement,
@@ -12549,7 +12558,7 @@ var Fc = new Float32Array(3), Ic = {
12549
12558
  let t = Mn[e];
12550
12559
  t && this._stages.asvgf?.updateParameters(t);
12551
12560
  }
12552
- }, Hc = class {
12561
+ }, Uc = class {
12553
12562
  constructor() {
12554
12563
  this.layer = "hud", this.visible = !1, this._tileBounds = null, this._imageWidth = 1, this._imageHeight = 1, this.enabled = !0, this._borderColor = "rgba(255, 0, 0, 0.6)", this._borderWidth = 2;
12555
12564
  }
@@ -12573,7 +12582,7 @@ var Fc = new Float32Array(3), Ic = {
12573
12582
  dispose() {
12574
12583
  this.visible = !1;
12575
12584
  }
12576
- }, Uc = class {
12585
+ }, Wc = class {
12577
12586
  constructor(n, r, i) {
12578
12587
  this.layer = "scene", this.visible = !0, this._outlineNode = Lt(r, i, {
12579
12588
  selectedObjects: [],
@@ -12607,7 +12616,7 @@ var Fc = new Float32Array(3), Ic = {
12607
12616
  dispose() {
12608
12617
  this.visible = !1, this._outlineNode?.dispose(), this._material?.dispose(), this._quad?.dispose();
12609
12618
  }
12610
- }, Wc = class {
12619
+ }, Gc = class {
12611
12620
  constructor(e, t) {
12612
12621
  this.renderer = e, this.camera = t, this._helpers = /* @__PURE__ */ new Map(), this._hudCanvas = document.createElement("canvas"), this._hudCanvas.style.cssText = "position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;", this._hudCtx = this._hudCanvas.getContext("2d"), this._helperScene = null;
12613
12622
  }
@@ -12619,13 +12628,13 @@ var Fc = new Float32Array(3), Ic = {
12619
12628
  }
12620
12629
  setupDefaultHelpers({ helperScene: e, meshScene: t, pipeline: n, denoisingManager: r, app: i, renderWidth: a, renderHeight: o }) {
12621
12630
  this.setHelperScene(e);
12622
- let s = new Hc();
12631
+ let s = new Uc();
12623
12632
  this.register("tiles", s), s.setRenderSize(a || 1, o || 1), i.addEventListener("resolution_changed", (e) => {
12624
12633
  s.setRenderSize(e.width, e.height);
12625
12634
  }), n.eventBus.on("tile:changed", (e) => {
12626
12635
  e.renderMode === 1 && e.tileBounds && (s.setActiveTile(e.tileBounds), s.show());
12627
12636
  }), n.eventBus.on("pipeline:reset", () => s.hide()), i.addEventListener(gn.RENDER_COMPLETE, () => s.hide()), this._wireDenoiserTileEvents(s, r);
12628
- let c = new Uc(this.renderer, t, this.camera);
12637
+ let c = new Wc(this.renderer, t, this.camera);
12629
12638
  this.register("outline", c);
12630
12639
  }
12631
12640
  _wireDenoiserTileEvents(e, t) {
@@ -12692,7 +12701,7 @@ var Fc = new Float32Array(3), Ic = {
12692
12701
  for (let e of this._helpers.values()) e.dispose?.();
12693
12702
  this._helpers.clear(), this._hudCanvas.parentElement && this._hudCanvas.parentElement.removeChild(this._hudCanvas);
12694
12703
  }
12695
- }, Gc = class extends E {
12704
+ }, Kc = class extends E {
12696
12705
  constructor() {
12697
12706
  super(), this.mixer = null, this.timer = new Ne(), this.actions = [], this.isPlaying = !1, this._scene = null, this._mixerRoot = null, this._meshes = null, this._meshTriRanges = null, this._posBuffer = null, this._tempVec = new Le(), this._skinnedCache = null, this._totalTriangleCount = 0, this._clipsCache = null, this._savedTimeScale = 1, this.onFinished = null, this.wakeCallback = null;
12698
12707
  }
@@ -12792,7 +12801,7 @@ var Fc = new Float32Array(3), Ic = {
12792
12801
  dispose() {
12793
12802
  this.mixer &&= (this.mixer.stopAllAction(), this.mixer.uncacheRoot(this._mixerRoot), null), this.actions = [], this.isPlaying = !1, this.timer.reset(), this._scene = null, this._mixerRoot = null, this._meshes = null, this._meshTriRanges = null, this._posBuffer = null, this._skinnedCache = null, this._clipsCache = null;
12794
12803
  }
12795
- }, Kc = class {
12804
+ }, qc = class {
12796
12805
  constructor({ camera: e, canvas: t, orbitControls: n, app: r }) {
12797
12806
  this._app = r, this._orbitControls = n, this._camera = e, this._controls = new Rt(e, t), this._gizmoScene = new Oe(), this._gizmoScene.add(this._controls.getHelper()), this._attached = null, this._isDragging = !1, this._meshes = null, this._meshTriRanges = null, this._posBuffer = null, this._normalBuffer = null, this._skinnedCache = null, this._normalCache = null, this._tempVec = new Le(), this._normalMatrix = new oe(), this._refitInFlight = !1, this._baselineComputed = !1, this._onDraggingChanged = this._onDraggingChanged.bind(this), this._onObjectChange = this._onObjectChange.bind(this), this._controls.addEventListener("dragging-changed", this._onDraggingChanged), this._controls.addEventListener("objectChange", this._onObjectChange);
12798
12807
  }
@@ -12903,9 +12912,9 @@ var Fc = new Float32Array(3), Ic = {
12903
12912
  dispose() {
12904
12913
  this._controls.removeEventListener("dragging-changed", this._onDraggingChanged), this._controls.removeEventListener("objectChange", this._onObjectChange), this.detach(), this._gizmoScene.remove(this._controls.getHelper()), this._controls.dispose(), this._meshes = null, this._meshTriRanges = null, this._posBuffer = null, this._normalBuffer = null, this._skinnedCache = null, this._normalCache = null, this._baselineComputed = !1;
12905
12914
  }
12906
- }, qc = class extends E {
12915
+ }, Jc = class extends E {
12907
12916
  constructor(e, t = {}) {
12908
- super(), this.canvas = e, this._autoResize = t.autoResize !== !1, this._showStats = t.showStats !== !1, this._statsContainer = t.statsContainer || null, this.settings = new gc(Z), this.renderer = null, this.scene = null, this.meshScene = null, this._sceneHelpers = null, this.assetLoader = null, this._sdf = null, this._animRefitInFlight = !1, this.pipeline = null, this.stages = {}, this.cameraManager = null, this.lightManager = null, this.denoisingManager = null, this.overlayManager = null, this.interactionManager = null, this.transformManager = null, this.animationManager = new Gc(), this.environmentManager = null, this.isInitialized = !1, this.pauseRendering = !1, this.pathTracerEnabled = !0, this.animationManagerId = null, this.needsReset = !1, this._loadingInProgress = !1, this._needsDisplayRefresh = !1, this._paused = !1, this.completion = new uc(), this._resizeDebounceTimer = null;
12917
+ super(), this.canvas = e, this._autoResize = t.autoResize !== !1, this._showStats = t.showStats !== !1, this._statsContainer = t.statsContainer || null, this.settings = new _c(Z), this.renderer = null, this.scene = null, this.meshScene = null, this._sceneHelpers = null, this.assetLoader = null, this._sdf = null, this._animRefitInFlight = !1, this.pipeline = null, this.stages = {}, this.cameraManager = null, this.lightManager = null, this.denoisingManager = null, this.overlayManager = null, this.interactionManager = null, this.transformManager = null, this.animationManager = new Kc(), this.environmentManager = null, this.isInitialized = !1, this.pauseRendering = !1, this.pathTracerEnabled = !0, this.animationManagerId = null, this.needsReset = !1, this._loadingInProgress = !1, this._needsDisplayRefresh = !1, this._paused = !1, this.completion = new dc(), this._resizeDebounceTimer = null;
12909
12918
  }
12910
12919
  async init() {
12911
12920
  return await this._initRenderer(), this._initCameraManager(), this._initScenes(), this._initAssetPipeline(), this._initPipeline(), this._initManagers(), this._wireEvents(), this.stages.pathTracer.setTriangleData(new Float32Array(32), 0), this.stages.pathTracer.setBVHData(new Float32Array(16)), this.stages.pathTracer.materialData.setMaterialData(new Float32Array(16)), this.stages.pathTracer.setupMaterial(), this._showStats && this._initStats(), this.isInitialized = !0, console.log("WebGPU Path Tracer App initialized"), this;
@@ -13013,7 +13022,7 @@ var Fc = new Float32Array(3), Ic = {
13013
13022
  }
13014
13023
  async loadSceneData() {
13015
13024
  this.interactionManager?.deselect(), this.animationManager.dispose(), this._animRefitInFlight = !1;
13016
- let e = new rs("loadSceneData"), t = this.meshScene.environment, n = null;
13025
+ let e = new is("loadSceneData"), t = this.meshScene.environment, n = null;
13017
13026
  return t?.image?.data && (e.start("Environment CDF build (worker)"), this.stages.pathTracer.scene.environment = t, n = this.stages.pathTracer.environment.buildEnvironmentCDF().then(() => e.end("Environment CDF build (worker)"))), e.start("BVH build (SceneProcessor)"), await this._sdf.buildBVH(this.meshScene), e.end("BVH build (SceneProcessor)"), bn({
13018
13027
  status: "Transferring data to GPU...",
13019
13028
  progress: 86
@@ -13139,32 +13148,32 @@ var Fc = new Float32Array(3), Ic = {
13139
13148
  }), window.renderer = this.renderer, await this.renderer.init(), n.setLTC(Re.init()), this.renderer.toneMapping = c, this.renderer.toneMappingExposure = 1, this.renderer.setPixelRatio(1);
13140
13149
  }
13141
13150
  _initCameraManager() {
13142
- this.cameraManager = new _c(this.canvas);
13151
+ this.cameraManager = new vc(this.canvas);
13143
13152
  }
13144
13153
  _initScenes() {
13145
13154
  this.scene = new Oe(), this.meshScene = new Oe(), this._sceneHelpers = new Bt();
13146
13155
  }
13147
13156
  _initAssetPipeline() {
13148
- this._sdf = new Rs(), this.assetLoader = new pc(this.meshScene, this.cameraManager.camera, this.cameraManager.controls), this.assetLoader.createFloorPlane(), this.cameraManager.controls.addEventListener("change", () => {
13157
+ this._sdf = new zs(), this.assetLoader = new mc(this.meshScene, this.cameraManager.camera, this.cameraManager.controls), this.assetLoader.createFloorPlane(), this.cameraManager.controls.addEventListener("change", () => {
13149
13158
  this.needsReset = !0, this.wake();
13150
13159
  });
13151
13160
  }
13152
13161
  _initPipeline() {
13153
13162
  this._createStages();
13154
13163
  let { clientWidth: e, clientHeight: t } = this.canvas;
13155
- this.pipeline = new lc(this.renderer, e || 1, t || 1), this.pipeline.addStage(this.stages.pathTracer), this.pipeline.addStage(this.stages.normalDepth), this.pipeline.addStage(this.stages.motionVector), this.pipeline.addStage(this.stages.ssrc), this.pipeline.addStage(this.stages.asvgf), this.pipeline.addStage(this.stages.variance), this.pipeline.addStage(this.stages.bilateralFilter), this.pipeline.addStage(this.stages.adaptiveSampling), this.pipeline.addStage(this.stages.edgeFilter), this.pipeline.addStage(this.stages.autoExposure), this.pipeline.addStage(this.stages.display);
13164
+ this.pipeline = new uc(this.renderer, e || 1, t || 1), this.pipeline.addStage(this.stages.pathTracer), this.pipeline.addStage(this.stages.normalDepth), this.pipeline.addStage(this.stages.motionVector), this.pipeline.addStage(this.stages.ssrc), this.pipeline.addStage(this.stages.asvgf), this.pipeline.addStage(this.stages.variance), this.pipeline.addStage(this.stages.bilateralFilter), this.pipeline.addStage(this.stages.adaptiveSampling), this.pipeline.addStage(this.stages.edgeFilter), this.pipeline.addStage(this.stages.autoExposure), this.pipeline.addStage(this.stages.display);
13156
13165
  let n = this.canvas.clientWidth || 1, r = this.canvas.clientHeight || 1;
13157
13166
  this.pipeline.setSize(n, r);
13158
13167
  }
13159
13168
  _initManagers() {
13160
- this.interactionManager = new dc({
13169
+ this.interactionManager = new fc({
13161
13170
  scene: this.meshScene,
13162
13171
  camera: this.cameraManager.camera,
13163
13172
  canvas: this.canvas,
13164
13173
  assetLoader: this.assetLoader,
13165
13174
  pathTracer: null,
13166
13175
  floorPlane: this.assetLoader.floorPlane
13167
- }), this.interactionManager.wireAppEvents(this), this.cameraManager.setInteractionManager(this.interactionManager), this.lightManager = new vc(this.scene, this._sceneHelpers, this.stages.pathTracer, { onReset: () => this.reset() }), this._setupDenoisingManager(), this._setupOverlayManager(), this.transformManager = new Kc({
13176
+ }), this.interactionManager.wireAppEvents(this), this.cameraManager.setInteractionManager(this.interactionManager), this.lightManager = new yc(this.scene, this._sceneHelpers, this.stages.pathTracer, { onReset: () => this.reset() }), this._setupDenoisingManager(), this._setupOverlayManager(), this.transformManager = new qc({
13168
13177
  camera: this.cameraManager.camera,
13169
13178
  canvas: this.canvas,
13170
13179
  orbitControls: this.cameraManager.controls,
@@ -13234,16 +13243,16 @@ var Fc = new Float32Array(3), Ic = {
13234
13243
  }
13235
13244
  _createStages() {
13236
13245
  let e = this.settings.get("adaptiveSamplingMax"), t = this.settings.get("useAdaptiveSampling");
13237
- this.stages.pathTracer = new Hs(this.renderer, this.scene, this.cameraManager.camera), this.stages.normalDepth = new Us(this.renderer, { pathTracer: this.stages.pathTracer }), this.stages.motionVector = new Ws(this.renderer, this.cameraManager.camera, { pathTracer: this.stages.pathTracer }), this.stages.ssrc = new ac(this.renderer, { enabled: !1 }), this.stages.asvgf = new Ks(this.renderer, { enabled: !1 }), this.stages.variance = new Js(this.renderer, { enabled: !1 }), this.stages.bilateralFilter = new Xs(this.renderer, { enabled: !1 }), this.stages.adaptiveSampling = new $s(this.renderer, {
13246
+ this.stages.pathTracer = new Us(this.renderer, this.scene, this.cameraManager.camera), this.stages.normalDepth = new Ws(this.renderer, { pathTracer: this.stages.pathTracer }), this.stages.motionVector = new Gs(this.renderer, this.cameraManager.camera, { pathTracer: this.stages.pathTracer }), this.stages.ssrc = new oc(this.renderer, { enabled: !1 }), this.stages.asvgf = new qs(this.renderer, { enabled: !1 }), this.stages.variance = new Ys(this.renderer, { enabled: !1 }), this.stages.bilateralFilter = new Zs(this.renderer, { enabled: !1 }), this.stages.adaptiveSampling = new ec(this.renderer, {
13238
13247
  adaptiveSamplingMax: e,
13239
13248
  enabled: t
13240
- }), this.stages.edgeFilter = new ec(this.renderer, { enabled: !1 }), this.stages.autoExposure = new nc(this.renderer, { enabled: Z.autoExposure ?? !1 }), this.stages.display = new oc(this.renderer, {
13249
+ }), this.stages.edgeFilter = new tc(this.renderer, { enabled: !1 }), this.stages.autoExposure = new rc(this.renderer, { enabled: Z.autoExposure ?? !1 }), this.stages.display = new sc(this.renderer, {
13241
13250
  exposure: Z.autoExposure ? 1 : this.settings.get("exposure") ?? 1,
13242
13251
  saturation: this.settings.get("saturation") ?? Z.saturation
13243
13252
  });
13244
13253
  }
13245
13254
  _setupDenoisingManager() {
13246
- this.denoisingManager = new Vc({
13255
+ this.denoisingManager = new Hc({
13247
13256
  renderer: this.renderer,
13248
13257
  mainCanvas: this.canvas,
13249
13258
  scene: this.scene,
@@ -13295,7 +13304,7 @@ var Fc = new Float32Array(3), Ic = {
13295
13304
  this.scene.updateMatrixWorld(), this.overlayManager?.render(), this.transformManager?.render(this.renderer);
13296
13305
  }
13297
13306
  _setupOverlayManager() {
13298
- this.overlayManager = new Wc(this.renderer, this.cameraManager.camera), this.overlayManager.setupDefaultHelpers({
13307
+ this.overlayManager = new Gc(this.renderer, this.cameraManager.camera), this.overlayManager.setupDefaultHelpers({
13299
13308
  helperScene: this._sceneHelpers,
13300
13309
  meshScene: this.meshScene,
13301
13310
  pipeline: this.pipeline,
@@ -13311,7 +13320,7 @@ var Fc = new Float32Array(3), Ic = {
13311
13320
  _forwardEvents(e, t) {
13312
13321
  if (e) for (let n of t) e.addEventListener(n, (e) => this.dispatchEvent(e));
13313
13322
  }
13314
- }, Jc = class {
13323
+ }, Yc = class {
13315
13324
  constructor(e) {
13316
13325
  this._app = e, this._cancelled = !1, this._rendering = !1;
13317
13326
  }
@@ -13411,6 +13420,6 @@ var Fc = new Float32Array(3), Ic = {
13411
13420
  }
13412
13421
  };
13413
13422
  //#endregion
13414
- export { Ln as AF_DEFAULTS, Mn as ASVGF_QUALITY_PRESETS, In as AUTO_FOCUS_MODES, Gc as AnimationManager, Rn as BVH_LEAF_MARKERS, Fn as CAMERA_PRESETS, Nn as CAMERA_RANGES, _c as CameraManager, Bn as DEFAULT_TEXTURE_MATRIX, Vc as DenoisingManager, Z as ENGINE_DEFAULTS, gn as EngineEvents, Vn as FINAL_RENDER_CONFIG, dc as InteractionManager, vc as LightManager, Un as MEMORY_CONSTANTS, Wc as OverlayManager, Hn as PREVIEW_RENDER_CONFIG, qc as PathTracerApp, sc as PipelineContext, lc as RenderPipeline, gc as RenderSettings, pn as RenderStage, Pn as SKY_PRESETS, fn as StageExecutionMode, zn as TEXTURE_CONSTANTS, Q as TRIANGLE_DATA_LAYOUT, Kc as TransformManager, Jc as VideoRenderManager };
13423
+ export { Ln as AF_DEFAULTS, Mn as ASVGF_QUALITY_PRESETS, In as AUTO_FOCUS_MODES, Kc as AnimationManager, Rn as BVH_LEAF_MARKERS, Fn as CAMERA_PRESETS, Nn as CAMERA_RANGES, vc as CameraManager, Bn as DEFAULT_TEXTURE_MATRIX, Hc as DenoisingManager, Z as ENGINE_DEFAULTS, gn as EngineEvents, Vn as FINAL_RENDER_CONFIG, fc as InteractionManager, yc as LightManager, Un as MEMORY_CONSTANTS, Gc as OverlayManager, Hn as PREVIEW_RENDER_CONFIG, Jc as PathTracerApp, cc as PipelineContext, uc as RenderPipeline, _c as RenderSettings, pn as RenderStage, Pn as SKY_PRESETS, fn as StageExecutionMode, zn as TEXTURE_CONSTANTS, Q as TRIANGLE_DATA_LAYOUT, qc as TransformManager, Yc as VideoRenderManager };
13415
13424
 
13416
13425
  //# sourceMappingURL=rayzee.es.js.map