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/README.md +1 -1
- package/dist/rayzee.es.js +842 -833
- package/dist/rayzee.es.js.map +1 -1
- package/dist/rayzee.umd.js +41 -41
- package/dist/rayzee.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/Pipeline/RenderStage.js +0 -1
- package/src/Processor/AssetLoader.js +2 -5
- package/src/Processor/EquirectHDRInfo.js +42 -5
- package/src/Processor/SceneProcessor.js +2 -2
- package/src/TSL/BVHTraversal.js +1 -1
- package/src/TSL/Debugger.js +2 -1
- package/src/TSL/LightsCore.js +1 -1
- package/src/TSL/LightsDirect.js +9 -7
- package/src/TSL/LightsSampling.js +3 -2
- package/src/TSL/PathTracerCore.js +4 -3
- package/src/managers/EnvironmentManager.js +1 -1
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 (
|
|
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
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
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
|
-
|
|
1344
|
-
for (let e = 0, t = r.length; e < t; 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,
|
|
1348
|
-
for (let t = 0, n = r.length; t < n; t++)
|
|
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(
|
|
1358
|
+
let e = new Float32Array(a.length);
|
|
1352
1359
|
for (let r = 0; r < n; r++) {
|
|
1353
|
-
let
|
|
1354
|
-
e.set(
|
|
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
|
-
|
|
1363
|
+
a = e;
|
|
1357
1364
|
}
|
|
1358
1365
|
return {
|
|
1359
|
-
floatData:
|
|
1366
|
+
floatData: a,
|
|
1360
1367
|
width: t,
|
|
1361
1368
|
height: n
|
|
1362
1369
|
};
|
|
1363
1370
|
}
|
|
1364
|
-
var
|
|
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 } =
|
|
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 } =
|
|
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
|
-
},
|
|
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
|
-
],
|
|
1433
|
+
], rr = [
|
|
1427
1434
|
183999185144339.78,
|
|
1428
1435
|
277980239196605.28,
|
|
1429
1436
|
407904795438610.94
|
|
1430
|
-
],
|
|
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 *
|
|
1438
|
-
.434 * t *
|
|
1439
|
-
.434 * t *
|
|
1444
|
+
.434 * t * rr[0],
|
|
1445
|
+
.434 * t * rr[1],
|
|
1446
|
+
.434 * t * rr[2]
|
|
1440
1447
|
];
|
|
1441
1448
|
}
|
|
1442
|
-
function
|
|
1443
|
-
return
|
|
1449
|
+
function mr(e) {
|
|
1450
|
+
return ur * (1 + e ** 2);
|
|
1444
1451
|
}
|
|
1445
|
-
function
|
|
1452
|
+
function hr(e, t) {
|
|
1446
1453
|
let n = t * t;
|
|
1447
|
-
return
|
|
1454
|
+
return dr * ((1 - n) / (1 - 2 * t * e + n) ** 1.5);
|
|
1448
1455
|
}
|
|
1449
|
-
function
|
|
1456
|
+
function gr(e, t) {
|
|
1450
1457
|
return e[0] * t[0] + e[1] * t[1] + e[2] * t[2];
|
|
1451
1458
|
}
|
|
1452
|
-
function
|
|
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
|
|
1465
|
-
let c = (1 - t) *
|
|
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 =
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
], g =
|
|
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 /
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
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
|
-
},
|
|
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
|
-
},
|
|
1602
|
+
}, Sr = class {
|
|
1596
1603
|
constructor(e, t) {
|
|
1597
|
-
this.scene = e, this.uniforms = t, this.equirectHdrInfo = new
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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) =>
|
|
1762
|
+
return n === "toVar" && typeof i == "function" ? (...n) => Cr(i.apply(e, n), t) : i;
|
|
1756
1763
|
} });
|
|
1757
1764
|
}
|
|
1758
|
-
function
|
|
1759
|
-
let n = _t(e, t), r = new Set(Object.keys(e)), i = (...e) =>
|
|
1760
|
-
return i.layout = n.layout, i.isStruct = !0, i.wrap = (e) =>
|
|
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
|
|
1771
|
+
var Tr = wr({
|
|
1765
1772
|
origin: "vec3",
|
|
1766
1773
|
direction: "vec3"
|
|
1767
|
-
}),
|
|
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
|
-
|
|
1820
|
+
wr({
|
|
1814
1821
|
position: "vec3",
|
|
1815
1822
|
radius: "float",
|
|
1816
|
-
material:
|
|
1823
|
+
material: Er
|
|
1817
1824
|
});
|
|
1818
|
-
var
|
|
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
|
-
|
|
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:
|
|
1847
|
+
material: Er,
|
|
1841
1848
|
materialIndex: "int",
|
|
1842
1849
|
meshIndex: "int"
|
|
1843
|
-
}),
|
|
1850
|
+
}), wr({
|
|
1844
1851
|
color: "vec4",
|
|
1845
1852
|
samples: "int"
|
|
1846
1853
|
});
|
|
1847
|
-
var
|
|
1854
|
+
var Or = wr({
|
|
1848
1855
|
direction: "vec3",
|
|
1849
1856
|
value: "vec3",
|
|
1850
1857
|
pdf: "float"
|
|
1851
|
-
}),
|
|
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
|
-
}),
|
|
1865
|
+
}), Ar = wr({
|
|
1859
1866
|
diffuseImportance: "float",
|
|
1860
1867
|
specularImportance: "float",
|
|
1861
1868
|
transmissionImportance: "float",
|
|
1862
1869
|
clearcoatImportance: "float",
|
|
1863
1870
|
envmapImportance: "float"
|
|
1864
|
-
}),
|
|
1871
|
+
}), jr = wr({
|
|
1865
1872
|
NoL: "float",
|
|
1866
1873
|
NoV: "float",
|
|
1867
1874
|
NoH: "float",
|
|
1868
1875
|
VoH: "float",
|
|
1869
1876
|
LoH: "float"
|
|
1870
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
|
|
1919
|
-
brdfWeights:
|
|
1920
|
-
samplingInfo:
|
|
1921
|
-
materialCache:
|
|
1922
|
-
materialClass:
|
|
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
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
|
|
1965
|
+
wr({
|
|
1959
1966
|
traversals: "int",
|
|
1960
1967
|
transmissiveTraversals: "int",
|
|
1961
1968
|
rayType: "int",
|
|
1962
1969
|
isPrimaryRay: "bool",
|
|
1963
1970
|
actualBounceDepth: "int"
|
|
1964
|
-
}),
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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, ${
|
|
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
|
|
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(
|
|
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
|
-
}),
|
|
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 > ${
|
|
2011
|
+
if ( lum > ${Hr} ) {
|
|
2005
2012
|
return color * ( suppressedLum / lum );
|
|
2006
2013
|
}
|
|
2007
2014
|
return color;
|
|
2008
2015
|
|
|
2009
2016
|
}
|
|
2010
|
-
`, [
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
2028
|
-
let a =
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
|
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:
|
|
2093
|
+
albedoTransform: ai({
|
|
2087
2094
|
data1: h,
|
|
2088
2095
|
data2: g
|
|
2089
2096
|
}),
|
|
2090
|
-
normalTransform:
|
|
2097
|
+
normalTransform: ai({
|
|
2091
2098
|
data1: _,
|
|
2092
2099
|
data2: v
|
|
2093
2100
|
}),
|
|
2094
|
-
roughnessTransform:
|
|
2101
|
+
roughnessTransform: ai({
|
|
2095
2102
|
data1: y,
|
|
2096
2103
|
data2: b
|
|
2097
2104
|
}),
|
|
2098
|
-
metalnessTransform:
|
|
2105
|
+
metalnessTransform: ai({
|
|
2099
2106
|
data1: x,
|
|
2100
2107
|
data2: S
|
|
2101
2108
|
}),
|
|
2102
|
-
emissiveTransform:
|
|
2109
|
+
emissiveTransform: ai({
|
|
2103
2110
|
data1: C,
|
|
2104
2111
|
data2: w
|
|
2105
2112
|
}),
|
|
2106
|
-
bumpTransform:
|
|
2113
|
+
bumpTransform: ai({
|
|
2107
2114
|
data1: T,
|
|
2108
2115
|
data2: E
|
|
2109
2116
|
}),
|
|
2110
|
-
displacementTransform:
|
|
2117
|
+
displacementTransform: ai({
|
|
2111
2118
|
data1: D,
|
|
2112
2119
|
data2: O
|
|
2113
2120
|
})
|
|
2114
2121
|
});
|
|
2115
|
-
}),
|
|
2116
|
-
function
|
|
2117
|
-
|
|
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
|
|
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
|
-
}),
|
|
2123
|
-
let i =
|
|
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 =
|
|
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(
|
|
2136
|
-
return P(l.greaterThan(B(0)).and(m.lessThan(B(
|
|
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(
|
|
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(
|
|
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(
|
|
2157
|
-
N(
|
|
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(
|
|
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 (
|
|
2167
|
-
let t = B(u.y).toVar(), n = $(
|
|
2168
|
-
N(n.greaterThan(.5).and(l.lessThan(B(
|
|
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(
|
|
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(
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
}),
|
|
2202
|
-
let a =
|
|
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 =
|
|
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(
|
|
2215
|
-
return P(s.greaterThan(B(0)).and(a.didHit.not()).and(u.lessThan(B(
|
|
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(
|
|
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(
|
|
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(
|
|
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 (
|
|
2241
|
-
let t = B(i.y).toVar(), n = $(
|
|
2242
|
-
N(n.greaterThan(.5).and(s.lessThan(B(
|
|
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(
|
|
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(
|
|
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 =
|
|
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(
|
|
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(
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
2283
|
+
}), Tr({
|
|
2277
2284
|
origin: h,
|
|
2278
2285
|
direction: g
|
|
2279
2286
|
});
|
|
2280
|
-
}),
|
|
2281
|
-
M(([e, t, n]) => vt(e,
|
|
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
|
|
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,
|
|
2297
|
+
let o = vt(e, Si({
|
|
2291
2298
|
direction: t,
|
|
2292
2299
|
environmentMatrix: n
|
|
2293
|
-
}).toVar(), 0).rgb.toVar(), s = R(o,
|
|
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
|
-
}),
|
|
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 =
|
|
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),
|
|
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
|
-
}),
|
|
2311
|
-
let n =
|
|
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 =
|
|
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(
|
|
2326
|
+
m.assign(Oi({
|
|
2320
2327
|
uv: e,
|
|
2321
2328
|
transform: t.albedoTransform
|
|
2322
|
-
})), h.assign(l.select(m,
|
|
2329
|
+
})), h.assign(l.select(m, Oi({
|
|
2323
2330
|
uv: e,
|
|
2324
2331
|
transform: t.normalTransform
|
|
2325
|
-
}))), v.assign(f.select(m,
|
|
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(
|
|
2340
|
+
y.assign(Oi({
|
|
2334
2341
|
uv: e,
|
|
2335
2342
|
transform: t.bumpTransform
|
|
2336
2343
|
}));
|
|
2337
2344
|
}), N(d, () => {
|
|
2338
|
-
g.assign(
|
|
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(
|
|
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(
|
|
2366
|
+
_.assign(Oi({
|
|
2360
2367
|
uv: e,
|
|
2361
2368
|
transform: t.roughnessTransform
|
|
2362
2369
|
}));
|
|
2363
2370
|
});
|
|
2364
2371
|
});
|
|
2365
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
2418
|
-
let l = Y(0).toVar(), u = J(0).toVar(), d = z(0).toVar(), f = z(0).toVar(), p = J(0).toVar(), m =
|
|
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 =
|
|
2421
|
-
l.assign(
|
|
2422
|
-
let h =
|
|
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 =
|
|
2425
|
-
p.assign(
|
|
2426
|
-
}),
|
|
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]) =>
|
|
2436
|
-
var
|
|
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 =
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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(
|
|
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(
|
|
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 =
|
|
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(
|
|
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 =
|
|
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(), _ =
|
|
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
|
-
}),
|
|
2496
|
+
}), Wi({
|
|
2490
2497
|
hitPoint: o,
|
|
2491
2498
|
uv: s,
|
|
2492
2499
|
normal: c,
|
|
2493
2500
|
height: l
|
|
2494
2501
|
});
|
|
2495
|
-
}),
|
|
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
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
2513
|
+
}), Yi = M(([e]) => {
|
|
2507
2514
|
let t = ht(e);
|
|
2508
|
-
return J(1).add(t).div(V(J(1).sub(t), J(
|
|
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),
|
|
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 =
|
|
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(
|
|
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),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
2534
|
-
let r =
|
|
2535
|
-
return r.mul(i).div(V(t.mul(4),
|
|
2536
|
-
}),
|
|
2537
|
-
let n = z(
|
|
2538
|
-
return o.x.addAssign(z(9747e-17).mul(ht(z(
|
|
2539
|
-
}),
|
|
2540
|
-
let a = H(e, t, mt(0, .03, r)).toVar(), o =
|
|
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 =
|
|
2545
|
-
S.mulAssign(y), x.addAssign(S.mul(z(2).mul(
|
|
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
|
-
}),
|
|
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
|
|
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,
|
|
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
|
|
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 =
|
|
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:
|
|
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 =
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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(
|
|
2654
|
-
return
|
|
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(
|
|
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
|
|
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
|
|
2712
|
-
M(([e]) => V(e,
|
|
2713
|
-
var
|
|
2714
|
-
let r =
|
|
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:
|
|
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(
|
|
2736
|
-
return
|
|
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
|
-
}),
|
|
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(
|
|
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(
|
|
2753
|
-
c.assign(
|
|
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(
|
|
2763
|
+
l.assign(F(d).div(zr));
|
|
2757
2764
|
}), N(r.sheen.greaterThan(0).and(d.greaterThan(0)), () => {
|
|
2758
|
-
u.assign(d.div(
|
|
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 =
|
|
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(
|
|
2776
|
+
f.assign(pa({
|
|
2770
2777
|
N: t,
|
|
2771
2778
|
xi: r
|
|
2772
|
-
})), p.assign(V(R(t, f), 0).div(
|
|
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 =
|
|
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(
|
|
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 =
|
|
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(
|
|
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 =
|
|
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(
|
|
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(
|
|
2814
|
+
f.assign(pa({
|
|
2808
2815
|
N: t,
|
|
2809
2816
|
xi: r
|
|
2810
|
-
})), p.assign(V(R(t, f), 0).div(
|
|
2817
|
+
})), p.assign(V(R(t, f), 0).div(zr)), m.assign(p.mul(o.sheen.add(o.iridescence)));
|
|
2811
2818
|
});
|
|
2812
|
-
let h =
|
|
2813
|
-
return g.mulAssign(h),
|
|
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
|
|
2828
|
+
var va = wr({
|
|
2822
2829
|
direction: "vec3",
|
|
2823
2830
|
throughput: "vec3",
|
|
2824
2831
|
didReflect: "bool"
|
|
2825
|
-
}),
|
|
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
|
-
|
|
2842
|
+
wr({
|
|
2836
2843
|
ior: "float",
|
|
2837
2844
|
attenuationColor: "vec3",
|
|
2838
2845
|
attenuationDistance: "float",
|
|
2839
2846
|
dispersion: "float"
|
|
2840
2847
|
});
|
|
2841
|
-
var
|
|
2848
|
+
var ba = wr({
|
|
2842
2849
|
wavelength: "float",
|
|
2843
2850
|
ior: "float",
|
|
2844
2851
|
colorWeight: "vec3"
|
|
2845
|
-
}),
|
|
2852
|
+
}), xa = wr({
|
|
2846
2853
|
direction: "vec3",
|
|
2847
2854
|
halfVector: "vec3",
|
|
2848
2855
|
didReflect: "bool",
|
|
2849
2856
|
pdf: "float"
|
|
2850
2857
|
});
|
|
2851
|
-
|
|
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
|
|
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))),
|
|
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
|
-
}),
|
|
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 =
|
|
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 =
|
|
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
|
-
}),
|
|
2916
|
-
let c =
|
|
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 =
|
|
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(
|
|
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 =
|
|
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(
|
|
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 =
|
|
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
|
-
}),
|
|
2956
|
-
let s =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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),
|
|
3017
|
-
s.throughput.mulAssign(
|
|
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
|
-
}),
|
|
3026
|
-
let c =
|
|
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 =
|
|
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
|
-
}),
|
|
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(
|
|
3069
|
+
i.assign(r.color.rgb.mul(z(1).sub(r.metalness)).mul(Br));
|
|
3063
3070
|
}).Else(() => {
|
|
3064
|
-
let a =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
3091
|
-
let c = V(R(n, t),
|
|
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(
|
|
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 =
|
|
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(
|
|
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 =
|
|
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 =
|
|
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
|
|
3114
|
-
let n = L(H(
|
|
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
|
-
}),
|
|
3123
|
+
}), Aa = wr({
|
|
3117
3124
|
brdf: "vec3",
|
|
3118
3125
|
L: "vec3",
|
|
3119
3126
|
pdf: "float"
|
|
3120
|
-
}),
|
|
3121
|
-
let a = t.normal, o = e.direction.negate(), s = V(n.clearcoatRoughness,
|
|
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(
|
|
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(
|
|
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(
|
|
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 =
|
|
3143
|
-
return
|
|
3144
|
-
brdf:
|
|
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
|
-
}),
|
|
3155
|
+
}), Ma = wr({
|
|
3149
3156
|
direction: "vec3",
|
|
3150
3157
|
color: "vec3",
|
|
3151
3158
|
intensity: "float",
|
|
3152
3159
|
angle: "float"
|
|
3153
|
-
}),
|
|
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
|
-
}),
|
|
3168
|
+
}), Pa = wr({
|
|
3162
3169
|
position: "vec3",
|
|
3163
3170
|
color: "vec3",
|
|
3164
3171
|
intensity: "float",
|
|
3165
3172
|
distance: "float",
|
|
3166
3173
|
decay: "float"
|
|
3167
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
3190
|
+
}), La = wr({
|
|
3184
3191
|
direction: "vec3",
|
|
3185
3192
|
throughput: "vec3",
|
|
3186
3193
|
misWeight: "float",
|
|
3187
3194
|
pdf: "float",
|
|
3188
3195
|
combinedPdf: "float"
|
|
3189
|
-
}),
|
|
3196
|
+
}), Ra = M(([e, t]) => {
|
|
3190
3197
|
let n = t.mul(8);
|
|
3191
|
-
return
|
|
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
|
-
}),
|
|
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
|
|
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
|
-
}),
|
|
3215
|
+
}), Ba = M(([e, t]) => {
|
|
3209
3216
|
let n = t.mul(9);
|
|
3210
|
-
return
|
|
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
|
-
}),
|
|
3224
|
+
}), Va = M(([e, t]) => {
|
|
3218
3225
|
let n = t.mul(14);
|
|
3219
|
-
return
|
|
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
|
-
}),
|
|
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(
|
|
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 =
|
|
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
|
|
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 =
|
|
3263
|
+
let e = Tr({
|
|
3257
3264
|
origin: l,
|
|
3258
3265
|
direction: t
|
|
3259
|
-
}), n =
|
|
3266
|
+
}), n = Dr.wrap(i(e, a, o, s, u));
|
|
3260
3267
|
N(n.didHit.not(), () => {
|
|
3261
3268
|
Ve();
|
|
3262
3269
|
});
|
|
3263
|
-
let r =
|
|
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 =
|
|
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 =
|
|
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
|
-
})
|
|
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
|
-
})
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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,
|
|
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
|
-
}),
|
|
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,
|
|
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
|
-
}),
|
|
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,
|
|
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
|
-
}),
|
|
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,
|
|
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
|
-
}),
|
|
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(
|
|
3365
|
-
let f =
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
3411
|
+
let p = J(0).toVar(), m = Xa(e, t, n, i);
|
|
3401
3412
|
return N(m.greaterThanEqual(.001), () => {
|
|
3402
|
-
let h =
|
|
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),
|
|
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 =
|
|
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),
|
|
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 =
|
|
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), _ =
|
|
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
|
|
3465
|
-
M(() =>
|
|
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
|
|
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
|
-
}),
|
|
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(
|
|
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
|
-
}),
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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 =
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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 =
|
|
3561
|
-
x.addAssign(
|
|
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 =
|
|
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 =
|
|
3585
|
-
x.addAssign(
|
|
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 =
|
|
3597
|
-
x.addAssign(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
3632
|
+
let r = Pa.wrap(Ba(u, t.sub(x)));
|
|
3622
3633
|
N(r.intensity.greaterThan(0), () => {
|
|
3623
|
-
let t =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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(
|
|
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(
|
|
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(
|
|
3757
|
+
N(Ha({
|
|
3747
3758
|
direction: o,
|
|
3748
3759
|
surfaceNormal: r
|
|
3749
3760
|
}), () => {
|
|
3750
|
-
let p =
|
|
3761
|
+
let p = qa(a, o, n.sub(.001), s, bi, c, l, u);
|
|
3751
3762
|
N(p.greaterThan(0), () => {
|
|
3752
|
-
let n =
|
|
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,
|
|
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
|
|
3764
|
-
let k = J(0).toVar(), A = e.add(t
|
|
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 =
|
|
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 =
|
|
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(
|
|
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.
|
|
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 =
|
|
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(
|
|
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(
|
|
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 =
|
|
3832
|
+
let a = Na.wrap(za(f, r));
|
|
3822
3833
|
N(a.intensity.greaterThan(0), () => {
|
|
3823
|
-
let o =
|
|
3834
|
+
let o = Xa(a, e, t, n).toVar();
|
|
3824
3835
|
N(o.greaterThanEqual(oe), () => {
|
|
3825
|
-
N(
|
|
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 =
|
|
3844
|
+
let e = Na.wrap(za(f, u)), t = Ka(e, A, i).toVar();
|
|
3834
3845
|
N(t.greaterThan(0), () => {
|
|
3835
|
-
let n =
|
|
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),
|
|
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 =
|
|
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 =
|
|
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(
|
|
3868
|
+
N(e.greaterThan(0).and(Ha({
|
|
3858
3869
|
direction: o,
|
|
3859
3870
|
surfaceNormal: t
|
|
3860
3871
|
})), () => {
|
|
3861
|
-
let a =
|
|
3872
|
+
let a = qa(A, o, z(1e3), l, bi, v, y, b);
|
|
3862
3873
|
N(a.greaterThan(0), () => {
|
|
3863
|
-
let c =
|
|
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
|
-
}),
|
|
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(
|
|
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 =
|
|
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
|
-
}),
|
|
3891
|
+
}), co = M(([e, t, n, r]) => {
|
|
3881
3892
|
let i = e.add(t).toVar(), a = R(i, i).toVar();
|
|
3882
|
-
return
|
|
3883
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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(
|
|
3937
|
+
y.assign(ma(t, e)), b.assign(n.color.xyz), x.assign(1), S.assign(1);
|
|
3927
3938
|
}).Else(() => {
|
|
3928
|
-
let o =
|
|
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(
|
|
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 =
|
|
3937
|
-
m.assign(i.direction), h.assign(i.pdf), g.assign(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
3963
|
+
let r = co(e, m, t, n.clearcoatRoughness).toVar();
|
|
3953
3964
|
D.addAssign(o.clearcoatWeight.mul(r));
|
|
3954
|
-
}), h.assign(V(h,
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
3985
|
+
}), ho = wr({
|
|
3975
3986
|
contribution: "vec3",
|
|
3976
3987
|
hasEmissive: "bool",
|
|
3977
3988
|
emissionOnly: "vec3",
|
|
3978
3989
|
distance: "float"
|
|
3979
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
4002
|
+
}), bo = wr({
|
|
3992
4003
|
direction: "vec3",
|
|
3993
4004
|
position: "vec3",
|
|
3994
4005
|
solidAngle: "float",
|
|
3995
4006
|
valid: "bool"
|
|
3996
|
-
}),
|
|
4007
|
+
}), xo = M(([e]) => {
|
|
3997
4008
|
let t = et(e);
|
|
3998
4009
|
return W(t.greaterThan(1e-10), e.div(t), J(0));
|
|
3999
|
-
}),
|
|
4000
|
-
let a =
|
|
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 =
|
|
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(
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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(
|
|
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
|
|
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
|
-
}),
|
|
4038
|
-
let n = $(t, e, B(0), B(
|
|
4039
|
-
return
|
|
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
|
-
}),
|
|
4049
|
-
let s =
|
|
4050
|
-
return N(
|
|
4051
|
-
let e =
|
|
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,
|
|
4057
|
-
}),
|
|
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(
|
|
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
|
-
}),
|
|
4068
|
-
let c =
|
|
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 =
|
|
4081
|
-
N(
|
|
4082
|
-
let n =
|
|
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 =
|
|
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,
|
|
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 =
|
|
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,
|
|
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
|
-
}),
|
|
4099
|
-
let h =
|
|
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 =
|
|
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 =
|
|
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
|
-
}),
|
|
4123
|
-
let o =
|
|
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(
|
|
4135
|
-
let t = c.mul(B(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
4162
|
-
N(
|
|
4163
|
-
let n =
|
|
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 =
|
|
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,
|
|
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 =
|
|
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,
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
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(
|
|
4200
|
+
a.assign(ri(e.metalness, e.roughness, e.transmission, e.clearcoat, e.emissive));
|
|
4190
4201
|
}), a;
|
|
4191
|
-
}),
|
|
4192
|
-
let p = J(0).toVar(), m = J(0).toVar(), h = z(0).toVar(), g =
|
|
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(
|
|
4206
|
+
_.assign(la(n, g, f));
|
|
4196
4207
|
}).Else(() => {
|
|
4197
|
-
let e =
|
|
4198
|
-
F0:
|
|
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(
|
|
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(
|
|
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(
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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,
|
|
4260
|
-
b.assign(
|
|
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(
|
|
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 =
|
|
4269
|
-
p.assign(o.direction), h.assign(V(o.pdf,
|
|
4270
|
-
}), h.assign(V(h,
|
|
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
|
-
}),
|
|
4276
|
-
let l = V(
|
|
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
|
-
}),
|
|
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(
|
|
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 =
|
|
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(
|
|
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
|
-
}),
|
|
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 =
|
|
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
|
-
}),
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
4414
|
+
let r = W(e.greaterThan(B(0)), oe, z(1)), te = Tr({
|
|
4404
4415
|
origin: Ge,
|
|
4405
4416
|
direction: Ke
|
|
4406
|
-
}), P =
|
|
4417
|
+
}), P = Dr.wrap(yi(te, i, a, o)).toVar();
|
|
4407
4418
|
N(P.didHit.not(), () => {
|
|
4408
|
-
let t =
|
|
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 =
|
|
4421
|
+
let e = Ti(S, Ke, w, D, O).w.toVar();
|
|
4411
4422
|
N(e.greaterThan(0), () => {
|
|
4412
|
-
n.assign(
|
|
4423
|
+
n.assign(Zr({
|
|
4413
4424
|
pdf1: xe,
|
|
4414
4425
|
pdf2: e
|
|
4415
4426
|
}));
|
|
4416
4427
|
});
|
|
4417
|
-
}), _e.addAssign(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
4434
|
-
qe.color.assign(Xe.albedo), qe.metalness.assign(L(Xe.metalness, 0, 1)), qe.roughness.assign(L(Xe.roughness,
|
|
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 =
|
|
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(
|
|
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(
|
|
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,
|
|
4482
|
-
We.assign(
|
|
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 =
|
|
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 =
|
|
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(
|
|
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 =
|
|
4497
|
-
t.assign(
|
|
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(
|
|
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 =
|
|
4509
|
-
_e.addAssign(
|
|
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]) =>
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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 =
|
|
4538
|
-
_e.addAssign(
|
|
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(
|
|
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 =
|
|
4549
|
-
ve.mulAssign(ct.throughput), Ge.assign(P.hitPoint.add(
|
|
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
|
-
}).
|
|
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 =
|
|
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
|
-
}),
|
|
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
|
-
}),
|
|
4571
|
-
let S = Y(1, 0, 1, 1).toVar(), C =
|
|
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 =
|
|
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 =
|
|
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,
|
|
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 =
|
|
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 =
|
|
4631
|
-
S.assign(Y(
|
|
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 =
|
|
4648
|
+
let e = $o({
|
|
4638
4649
|
worldPos: w.hitPoint,
|
|
4639
4650
|
cameraProjectionMatrix: y,
|
|
4640
4651
|
cameraViewMatrix: b
|
|
4641
4652
|
});
|
|
4642
|
-
S.assign(Y(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
4659
|
-
origin: w.hitPoint.add(u.mul(
|
|
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
|
-
}),
|
|
4662
|
-
N(
|
|
4672
|
+
}), T = Dr.wrap(yi(C, n, r, i).toVar()), E = J(0).toVar();
|
|
4673
|
+
N(T.didHit.not(), () => {
|
|
4663
4674
|
N(c, () => {
|
|
4664
|
-
|
|
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 =
|
|
4675
|
-
|
|
4676
|
-
let e = U(t.normal).toVar(), n =
|
|
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
|
-
|
|
4695
|
+
E.addAssign(t.albedo.rgb.mul(n));
|
|
4685
4696
|
});
|
|
4686
4697
|
});
|
|
4687
|
-
let
|
|
4688
|
-
S.assign(Y(
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
-
}),
|
|
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 =
|
|
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 =
|
|
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(
|
|
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 =
|
|
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(
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
|
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 /
|
|
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 /
|
|
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 /
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
4977
|
-
|
|
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
|
-
},
|
|
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
|
|
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
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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 =
|
|
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 *
|
|
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 / (
|
|
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 *
|
|
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 / (
|
|
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
|
|
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
|
|
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 *
|
|
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] *
|
|
5614
|
-
f.set(d.subarray(t, t +
|
|
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
|
|
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
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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 *
|
|
5985
|
-
e[a +
|
|
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 +
|
|
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 *
|
|
5995
|
-
if (e[a + 3] ===
|
|
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) *
|
|
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 *
|
|
6013
|
-
if (o ===
|
|
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) *
|
|
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 ===
|
|
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
|
-
},
|
|
6030
|
-
function
|
|
6031
|
-
let i = e.byteLength / (
|
|
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 *
|
|
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(
|
|
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,
|
|
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
|
|
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
|
|
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 / (
|
|
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
|
|
6245
|
-
return typeof Worker < "u" && typeof SharedArrayBuffer < "u" && e >=
|
|
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
|
|
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
|
-
},
|
|
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
|
|
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 *
|
|
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 *
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
|
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
|
|
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
|
|
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
|
-
},
|
|
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 <
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
|
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
|
-
},
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 &&
|
|
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 }) =>
|
|
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
|
|
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
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
|
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(
|
|
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 /
|
|
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
|
-
},
|
|
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 =
|
|
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 =
|
|
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
|
-
},
|
|
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
|
|
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
|
|
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 =
|
|
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(
|
|
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(
|
|
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 =
|
|
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
|
-
|
|
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
|
-
},
|
|
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(
|
|
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(
|
|
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(_)),
|
|
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
|
-
},
|
|
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 =
|
|
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 =
|
|
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
|
-
},
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
9807
|
+
}, t = ic({
|
|
9797
9808
|
...e,
|
|
9798
9809
|
writeCacheTex: this._cacheTexA,
|
|
9799
9810
|
writePrevNDTex: this._prevNDTexA,
|
|
9800
9811
|
framesSinceReset: this._framesSinceReset
|
|
9801
|
-
}), n =
|
|
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 =
|
|
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
|
-
},
|
|
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,
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
10029
|
+
}, uc = class {
|
|
10019
10030
|
constructor(e, t, n) {
|
|
10020
|
-
this.renderer = e, this.width = t, this.height = n, this.stages = [], this.context = new
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
|
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
|
|
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 (
|
|
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
|
|
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(
|
|
11175
|
+
for (let [n, r] of Object.entries(pc)) r.type === e && (t[n] = r);
|
|
11167
11176
|
return t;
|
|
11168
11177
|
}
|
|
11169
|
-
return
|
|
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
|
-
},
|
|
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
|
-
},
|
|
11297
|
+
}, gc = {
|
|
11289
11298
|
bounces: "maxBounces",
|
|
11290
11299
|
adaptiveSampling: "useAdaptiveSampling",
|
|
11291
11300
|
debugMode: "visMode"
|
|
11292
|
-
},
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
11375
|
-
for (let [t, n] of Object.entries(
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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] =
|
|
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
|
-
|
|
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
|
|
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] =
|
|
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
|
|
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 =
|
|
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] =
|
|
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
|
|
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
|
|
11691
|
-
[me,
|
|
11692
|
-
[te,
|
|
11693
|
-
[Te,
|
|
11694
|
-
[h,
|
|
11695
|
-
[c,
|
|
11696
|
-
[u,
|
|
11697
|
-
[fe,
|
|
11698
|
-
]),
|
|
11699
|
-
function
|
|
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] *
|
|
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
|
|
11707
|
-
async function
|
|
11708
|
-
return
|
|
11715
|
+
var Pc = null;
|
|
11716
|
+
async function Fc() {
|
|
11717
|
+
return Pc ||= (await import("oidn-web")).initUNetFromURL, Pc;
|
|
11709
11718
|
}
|
|
11710
|
-
var
|
|
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
|
-
},
|
|
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
|
-
...
|
|
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
|
|
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 } =
|
|
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(
|
|
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 =
|
|
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 && (
|
|
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 =
|
|
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 && (
|
|
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:
|
|
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:
|
|
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
|
-
},
|
|
12069
|
+
}, zc = "https://huggingface.co/notaneimu/onnx-image-models/resolve/main/", Bc = {
|
|
12061
12070
|
QUALITY_PRESETS: {
|
|
12062
12071
|
fast: {
|
|
12063
|
-
2:
|
|
12064
|
-
4:
|
|
12072
|
+
2: zc + "2x-spanx2-ch48.onnx",
|
|
12073
|
+
4: zc + "4xNomos8k_span_otf_strong_fp32_opset17.onnx"
|
|
12065
12074
|
},
|
|
12066
12075
|
balanced: {
|
|
12067
|
-
2:
|
|
12068
|
-
4:
|
|
12076
|
+
2: zc + "2xNomosUni_compact_otf_medium.onnx",
|
|
12077
|
+
4: zc + "RealESRGAN_x4plus.onnx"
|
|
12069
12078
|
},
|
|
12070
12079
|
quality: {
|
|
12071
|
-
2:
|
|
12072
|
-
4:
|
|
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
|
-
},
|
|
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 ||
|
|
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 =
|
|
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:
|
|
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 =
|
|
12183
|
-
let o =
|
|
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,
|
|
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 =
|
|
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,
|
|
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 (!
|
|
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
|
-
},
|
|
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
|
|
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
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
|
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
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
},
|
|
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,
|
|
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
|