rayzee 5.6.1 → 5.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/assets/CDFWorker-BFQUr3By.js +2 -0
- package/dist/assets/CDFWorker-BFQUr3By.js.map +1 -0
- package/dist/rayzee.es.js +896 -863
- package/dist/rayzee.es.js.map +1 -1
- package/dist/rayzee.umd.js +49 -43
- package/dist/rayzee.umd.js.map +1 -1
- package/package.json +1 -1
- package/src/EngineEvents.js +3 -0
- package/src/PathTracerApp.js +17 -0
- package/src/Processor/EquirectHDRInfo.js +76 -16
- package/src/Processor/ShaderBuilder.js +1 -0
- package/src/Processor/Workers/CDFWorker.js +72 -11
- package/src/TSL/Common.js +9 -0
- package/src/TSL/Environment.js +15 -6
- package/src/TSL/LightsIndirect.js +1 -1
- package/src/TSL/LightsSampling.js +5 -4
- package/src/TSL/PathTracer.js +2 -2
- package/src/TSL/PathTracerCore.js +6 -5
- package/src/managers/EnvironmentManager.js +17 -0
- package/src/managers/TransformManager.js +9 -0
- package/src/managers/UniformManager.js +1 -0
- package/dist/assets/CDFWorker-2MoynL4F.js +0 -2
- package/dist/assets/CDFWorker-2MoynL4F.js.map +0 -1
package/dist/rayzee.es.js
CHANGED
|
@@ -485,7 +485,8 @@ var on = j(.7548776662466927), sn = j(.5698402909980532), cn = /* @__PURE__ */ K
|
|
|
485
485
|
ANIMATION_STOPPED: "engine:animationStopped",
|
|
486
486
|
ANIMATION_FINISHED: "engine:animationFinished",
|
|
487
487
|
VIDEO_RENDER_PROGRESS: "engine:videoRenderProgress",
|
|
488
|
-
VIDEO_RENDER_COMPLETE: "engine:videoRenderComplete"
|
|
488
|
+
VIDEO_RENDER_COMPLETE: "engine:videoRenderComplete",
|
|
489
|
+
DISPOSE: "engine:dispose"
|
|
489
490
|
}, Tn = null;
|
|
490
491
|
function En(e) {
|
|
491
492
|
Tn = e;
|
|
@@ -1115,7 +1116,7 @@ var zn = class {
|
|
|
1115
1116
|
let r = H(t, n);
|
|
1116
1117
|
return this._uniforms.set(e, r), r;
|
|
1117
1118
|
}, r = (e, t) => (this._booleans.add(e), n(e, +!!t, "int"));
|
|
1118
|
-
n("frame", 0, "uint"), n("maxBounces", X.bounces, "int"), n("samplesPerPixel", X.samplesPerPixel, "int"), n("maxSamples", X.maxSamples, "int"), n("transmissiveBounces", X.transmissiveBounces, "int"), n("visMode", X.debugMode, "int"), n("debugVisScale", X.debugVisScale, "float"), r("enableAccumulation", !0), n("accumulationAlpha", 0, "float"), r("cameraIsMoving", !1), r("hasPreviousAccumulated", !1), n("environmentIntensity", X.environmentIntensity, "float"), n("backgroundIntensity", X.backgroundIntensity, "float"), r("showBackground", X.showBackground), r("transparentBackground", X.transparentBackground), r("enableEnvironment", X.enableEnvironment), n("environmentMatrix", new tt(), "mat4"), r("useEnvMapIS", X.useImportanceSampledEnvironment), n("envTotalSum", 0, "float"), n("envResolution", new jt(1, 1), "vec2"), n("sunDirection", new Mt(0, 1, 0), "vec3"), n("sunAngularSize", .0087, "float"), r("hasSun", !1), n("globalIlluminationIntensity", X.globalIlluminationIntensity, "float"), n("exposure", X.exposure, "float"), n("numDirectionalLights", 0, "int"), n("numAreaLights", 0, "int"), n("numPointLights", 0, "int"), n("numSpotLights", 0, "int"), this._lightBuffers = {
|
|
1119
|
+
n("frame", 0, "uint"), n("maxBounces", X.bounces, "int"), n("samplesPerPixel", X.samplesPerPixel, "int"), n("maxSamples", X.maxSamples, "int"), n("transmissiveBounces", X.transmissiveBounces, "int"), n("visMode", X.debugMode, "int"), n("debugVisScale", X.debugVisScale, "float"), r("enableAccumulation", !0), n("accumulationAlpha", 0, "float"), r("cameraIsMoving", !1), r("hasPreviousAccumulated", !1), n("environmentIntensity", X.environmentIntensity, "float"), n("backgroundIntensity", X.backgroundIntensity, "float"), r("showBackground", X.showBackground), r("transparentBackground", X.transparentBackground), r("enableEnvironment", X.enableEnvironment), n("environmentMatrix", new tt(), "mat4"), r("useEnvMapIS", X.useImportanceSampledEnvironment), n("envTotalSum", 0, "float"), n("envCompensationDelta", 0, "float"), n("envResolution", new jt(1, 1), "vec2"), n("sunDirection", new Mt(0, 1, 0), "vec3"), n("sunAngularSize", .0087, "float"), r("hasSun", !1), n("globalIlluminationIntensity", X.globalIlluminationIntensity, "float"), n("exposure", X.exposure, "float"), n("numDirectionalLights", 0, "int"), n("numAreaLights", 0, "int"), n("numPointLights", 0, "int"), n("numSpotLights", 0, "int"), this._lightBuffers = {
|
|
1119
1120
|
directional: be(new Float32Array(128), "float"),
|
|
1120
1121
|
area: be(new Float32Array(208), "float"),
|
|
1121
1122
|
point: be(new Float32Array(144), "float"),
|
|
@@ -1427,7 +1428,7 @@ async function or(e) {
|
|
|
1427
1428
|
}
|
|
1428
1429
|
//#endregion
|
|
1429
1430
|
//#region src/Processor/Workers/CDFWorker.js?worker&url
|
|
1430
|
-
var sr = "" + new URL("assets/CDFWorker-
|
|
1431
|
+
var sr = "" + new URL("assets/CDFWorker-BFQUr3By.js", import.meta.url).href;
|
|
1431
1432
|
//#endregion
|
|
1432
1433
|
//#region src/Processor/EquirectHDRInfo.js
|
|
1433
1434
|
function cr(e, t, n = 0, r = e.length) {
|
|
@@ -1482,14 +1483,14 @@ var fr = class e {
|
|
|
1482
1483
|
0,
|
|
1483
1484
|
1,
|
|
1484
1485
|
1
|
|
1485
|
-
]), this.totalSum = 0, this.width = 0, this.height = 0, this._worker = null;
|
|
1486
|
+
]), this.totalSum = 0, this.compensationDelta = 0, this.width = 0, this.height = 0, this._worker = null;
|
|
1486
1487
|
}
|
|
1487
1488
|
dispose() {
|
|
1488
1489
|
this.marginalData = null, this.conditionalData = null, this._worker &&= (this._worker.terminate(), null);
|
|
1489
1490
|
}
|
|
1490
1491
|
updateFrom(t) {
|
|
1491
1492
|
let { floatData: n, width: r, height: i } = dr(t), a = e.computeCDF(n, r, i);
|
|
1492
|
-
this.marginalData = a.marginalData, this.conditionalData = a.conditionalData, this.totalSum = a.totalSum, this.width = r, this.height = i;
|
|
1493
|
+
this.marginalData = a.marginalData, this.conditionalData = a.conditionalData, this.totalSum = a.totalSum, this.compensationDelta = a.compensationDelta, this.width = r, this.height = i;
|
|
1493
1494
|
}
|
|
1494
1495
|
async updateFromAsync(e) {
|
|
1495
1496
|
let { floatData: t, width: n, height: r } = dr(e);
|
|
@@ -1509,33 +1510,52 @@ var fr = class e {
|
|
|
1509
1510
|
height: r
|
|
1510
1511
|
}, [t.buffer]);
|
|
1511
1512
|
});
|
|
1512
|
-
this.marginalData = e.marginalData, this.conditionalData = e.conditionalData, this.totalSum = e.totalSum, this.width = e.width, this.height = e.height;
|
|
1513
|
+
this.marginalData = e.marginalData, this.conditionalData = e.conditionalData, this.totalSum = e.totalSum, this.compensationDelta = e.compensationDelta, this.width = e.width, this.height = e.height;
|
|
1513
1514
|
} finally {
|
|
1514
1515
|
this._worker &&= (this._worker.terminate(), null);
|
|
1515
1516
|
}
|
|
1516
1517
|
}
|
|
1517
1518
|
static computeCDF(e, t, n) {
|
|
1518
|
-
let r =
|
|
1519
|
-
for (let
|
|
1519
|
+
let r = t * n, i = new Float32Array(r), a = 0;
|
|
1520
|
+
for (let r = 0; r < n; r++) {
|
|
1521
|
+
let o = Math.sin(Math.PI * (r + .5) / n);
|
|
1522
|
+
for (let n = 0; n < t; n++) {
|
|
1523
|
+
let s = r * t + n, c = lr(e[4 * s], e[4 * s + 1], e[4 * s + 2]) * o;
|
|
1524
|
+
i[s] = c, a += c;
|
|
1525
|
+
}
|
|
1526
|
+
}
|
|
1527
|
+
let o = a / r, s = 0;
|
|
1528
|
+
for (let e = 0; e < r; e++) i[e] = Math.max(0, i[e] - o), s += i[e];
|
|
1529
|
+
let c = s > 0, l = c ? s : a, u = c ? o : 0;
|
|
1530
|
+
if (!c) for (let r = 0; r < n; r++) {
|
|
1531
|
+
let a = Math.sin(Math.PI * (r + .5) / n);
|
|
1532
|
+
for (let n = 0; n < t; n++) {
|
|
1533
|
+
let o = r * t + n;
|
|
1534
|
+
i[o] = lr(e[4 * o], e[4 * o + 1], e[4 * o + 2]) * a;
|
|
1535
|
+
}
|
|
1536
|
+
}
|
|
1537
|
+
let d = new Float32Array(r), f = new Float32Array(n), p = 0;
|
|
1538
|
+
for (let e = 0; e < n; e++) {
|
|
1520
1539
|
let n = 0;
|
|
1521
|
-
for (let
|
|
1522
|
-
let
|
|
1523
|
-
n +=
|
|
1540
|
+
for (let r = 0; r < t; r++) {
|
|
1541
|
+
let a = e * t + r;
|
|
1542
|
+
n += i[a], d[a] = n;
|
|
1524
1543
|
}
|
|
1525
|
-
if (n !== 0) for (let
|
|
1526
|
-
|
|
1544
|
+
if (n !== 0) for (let r = e * t, i = e * t + t; r < i; r++) d[r] /= n;
|
|
1545
|
+
p += n, f[e] = p;
|
|
1527
1546
|
}
|
|
1528
|
-
if (
|
|
1529
|
-
let
|
|
1530
|
-
for (let e = 0; e < n; e++)
|
|
1547
|
+
if (p !== 0) for (let e = 0, t = f.length; e < t; e++) f[e] /= p;
|
|
1548
|
+
let m = new Float32Array(n), h = new Float32Array(r);
|
|
1549
|
+
for (let e = 0; e < n; e++) m[e] = (cr(f, (e + 1) / n) + .5) / n;
|
|
1531
1550
|
for (let e = 0; e < n; e++) for (let n = 0; n < t; n++) {
|
|
1532
|
-
let
|
|
1533
|
-
|
|
1551
|
+
let r = e * t + n;
|
|
1552
|
+
h[r] = (cr(d, (n + 1) / t, e * t, t) + .5) / t;
|
|
1534
1553
|
}
|
|
1535
1554
|
return {
|
|
1536
|
-
marginalData:
|
|
1537
|
-
conditionalData:
|
|
1538
|
-
totalSum:
|
|
1555
|
+
marginalData: m,
|
|
1556
|
+
conditionalData: h,
|
|
1557
|
+
totalSum: l,
|
|
1558
|
+
compensationDelta: u
|
|
1539
1559
|
};
|
|
1540
1560
|
}
|
|
1541
1561
|
}, pr = Math.PI, mr = Math.PI * 2, hr = Math.E, gr = [
|
|
@@ -1785,20 +1805,20 @@ var Pr = class {
|
|
|
1785
1805
|
}
|
|
1786
1806
|
async buildEnvironmentCDF({ useWorker: e = !0 } = {}) {
|
|
1787
1807
|
if (!this.scene.environment) {
|
|
1788
|
-
this._updateCDFStorageBuffers(), this.uniforms.set("envTotalSum", 0), this.uniforms.set("useEnvMapIS", 0);
|
|
1808
|
+
this._updateCDFStorageBuffers(), this.uniforms.set("envTotalSum", 0), this.uniforms.set("envCompensationDelta", 0), this.uniforms.set("useEnvMapIS", 0);
|
|
1789
1809
|
return;
|
|
1790
1810
|
}
|
|
1791
1811
|
try {
|
|
1792
1812
|
let t = performance.now(), n = this.scene.environment;
|
|
1793
1813
|
if (!n.image) {
|
|
1794
|
-
this._updateCDFStorageBuffers(), this.uniforms.set("envTotalSum", 0), this.uniforms.set("useEnvMapIS", 0);
|
|
1814
|
+
this._updateCDFStorageBuffers(), this.uniforms.set("envTotalSum", 0), this.uniforms.set("envCompensationDelta", 0), this.uniforms.set("useEnvMapIS", 0);
|
|
1795
1815
|
return;
|
|
1796
1816
|
}
|
|
1797
|
-
e ? await this.equirectHdrInfo.updateFromAsync(n) : this.equirectHdrInfo.updateFrom(n), this.cdfBuildTime = performance.now() - t, this._updateCDFStorageBuffers(), this.uniforms.set("envTotalSum", this.equirectHdrInfo.totalSum), this.uniforms.set("useEnvMapIS", 1);
|
|
1817
|
+
e ? await this.equirectHdrInfo.updateFromAsync(n) : this.equirectHdrInfo.updateFrom(n), this.cdfBuildTime = performance.now() - t, this._updateCDFStorageBuffers(), this.uniforms.set("envTotalSum", this.equirectHdrInfo.totalSum), this.uniforms.set("envCompensationDelta", this.equirectHdrInfo.compensationDelta), this.uniforms.set("useEnvMapIS", 1);
|
|
1798
1818
|
let { width: r, height: i } = this.equirectHdrInfo;
|
|
1799
1819
|
r && i && this.uniforms.get("envResolution").value.set(r, i), console.log(`Environment CDF built in ${this.cdfBuildTime.toFixed(2)}ms (worker: ${e})`);
|
|
1800
1820
|
} catch (e) {
|
|
1801
|
-
console.error("Error building environment CDF:", e), this.uniforms.set("useEnvMapIS", 0), this.uniforms.set("envTotalSum", 0);
|
|
1821
|
+
console.error("Error building environment CDF:", e), this.uniforms.set("useEnvMapIS", 0), this.uniforms.set("envTotalSum", 0), this.uniforms.set("envCompensationDelta", 0);
|
|
1802
1822
|
}
|
|
1803
1823
|
}
|
|
1804
1824
|
applyCDFResults() {
|
|
@@ -1806,7 +1826,7 @@ var Pr = class {
|
|
|
1806
1826
|
t && e && t.envTex && (t.envTex.value = e), e && !e._isGeneratedProcedural && this.uniforms.set("hasSun", 0);
|
|
1807
1827
|
}
|
|
1808
1828
|
async setEnvironmentMap(e) {
|
|
1809
|
-
this.scene.environment = e, this.setEnvironmentTexture(e), e ? await this.buildEnvironmentCDF() : (this._updateCDFStorageBuffers(), this.uniforms.set("envTotalSum", 0), this.uniforms.set("useEnvMapIS", 0));
|
|
1829
|
+
this.scene.environment = e, this.setEnvironmentTexture(e), e ? await this.buildEnvironmentCDF() : (this._updateCDFStorageBuffers(), this.uniforms.set("envTotalSum", 0), this.uniforms.set("envCompensationDelta", 0), this.uniforms.set("useEnvMapIS", 0));
|
|
1810
1830
|
let t = this.callbacks.getSceneTextureNodes?.();
|
|
1811
1831
|
t && e && t.envTex && (t.envTex.value = e), e && !e._isGeneratedProcedural && this.uniforms.set("hasSun", 0), this._notifyReset();
|
|
1812
1832
|
}
|
|
@@ -1859,7 +1879,7 @@ var Pr = class {
|
|
|
1859
1879
|
this.callbacks.onReset && this.callbacks.onReset();
|
|
1860
1880
|
}
|
|
1861
1881
|
dispose() {
|
|
1862
|
-
this.proceduralSkyRenderer = null, this.simpleSkyRenderer = null, this.envCDFStorageAttr = null, this.envCDFStorageNode = null, this._envPlaceholder?.dispose(), this._envPlaceholder = null, this.environmentTexture = null;
|
|
1882
|
+
this.proceduralSkyRenderer = null, this.simpleSkyRenderer = null, this.envCDFStorageAttr?.dispose?.(), this.envCDFStorageAttr = null, this.envCDFStorageNode = null, this.environmentTexture && this.environmentTexture !== this._envPlaceholder && this.environmentTexture.dispose?.(), this._envPlaceholder?.dispose(), this._envPlaceholder = null, this.environmentTexture = null, this._previousHDRI = null;
|
|
1863
1883
|
}
|
|
1864
1884
|
}, Lr = Xt({
|
|
1865
1885
|
origin: "vec3",
|
|
@@ -2071,10 +2091,16 @@ var fi = K("\n fn luminance( color: vec3f ) -> f32 {\n\n return dot( color, vec
|
|
|
2071
2091
|
let p2 = pdf2 * pdf2;
|
|
2072
2092
|
return p1 / max( p1 + p2, ${ii} );
|
|
2073
2093
|
|
|
2094
|
+
}
|
|
2095
|
+
`), mi = K(`
|
|
2096
|
+
fn balanceHeuristic( pdf1: f32, pdf2: f32 ) -> f32 {
|
|
2097
|
+
|
|
2098
|
+
return pdf1 / max( pdf1 + pdf2, ${ii} );
|
|
2099
|
+
|
|
2074
2100
|
}
|
|
2075
2101
|
`);
|
|
2076
2102
|
K("\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"), K("\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");
|
|
2077
|
-
var
|
|
2103
|
+
var hi = K("\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"), gi = f(([e, t, n]) => {
|
|
2078
2104
|
let r = t.add(n).toVar(), i = k(r, r).toVar();
|
|
2079
2105
|
return r.assign(i.greaterThan(ti).select(r.div(i.sqrt()), W(0, 0, 1))), Wr({
|
|
2080
2106
|
NoL: I(k(e, n), .001),
|
|
@@ -2083,7 +2109,7 @@ var mi = K("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2083
2109
|
VoH: I(k(t, r), .001),
|
|
2084
2110
|
LoH: I(k(n, r), .001)
|
|
2085
2111
|
});
|
|
2086
|
-
}),
|
|
2112
|
+
}), _i = K("\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"), vi = K("\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"), yi = K(`
|
|
2087
2113
|
fn applySoftSuppressionRGB( color: vec3f, threshold: f32, dampingFactor: f32 ) -> vec3f {
|
|
2088
2114
|
|
|
2089
2115
|
let lum = dot( color, vec3f( 0.2126, 0.7152, 0.0722 ) );
|
|
@@ -2097,7 +2123,7 @@ var mi = K("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2097
2123
|
return color;
|
|
2098
2124
|
|
|
2099
2125
|
}
|
|
2100
|
-
`, [
|
|
2126
|
+
`, [vi]), bi = f(([e, t, n, r, i]) => {
|
|
2101
2127
|
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 = j(.15).mul(j(a)).add(j(.25).mul(j(s))).add(j(.45).mul(j(c))).add(j(.35).mul(j(l))).add(j(.3).mul(j(u))).toVar(), f = j(0).toVar();
|
|
2102
2128
|
return p(a.and(s), () => {
|
|
2103
2129
|
f.addAssign(.15);
|
|
@@ -2114,7 +2140,7 @@ var mi = K("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2114
2140
|
isEmissive: u,
|
|
2115
2141
|
complexityScore: T(d.add(f), 0, 1)
|
|
2116
2142
|
});
|
|
2117
|
-
}),
|
|
2143
|
+
}), xi = f(([e, t, n, r, i]) => {
|
|
2118
2144
|
let a = di({ v: i }).toVar(), o = j(.5).toVar(), s = j(.5).toVar(), c = w(!0), l = a.greaterThan(.01).toVar();
|
|
2119
2145
|
return p(e.lessThan(.1).and(t.greaterThan(.8)), () => {
|
|
2120
2146
|
o.assign(.7), s.assign(.3);
|
|
@@ -2133,7 +2159,7 @@ var mi = K("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2133
2159
|
}), $ = f(([e, t, n, r]) => {
|
|
2134
2160
|
let i = t.mul(r).add(n);
|
|
2135
2161
|
return e.element(i);
|
|
2136
|
-
}),
|
|
2162
|
+
}), Si = K("\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"), Ci = f(([e, t]) => {
|
|
2137
2163
|
let n = $(t, e, N(ci.COLOR_METALNESS), N(oi)).toVar(), r = $(t, e, N(ci.EMISSIVE_ROUGHNESS), N(oi)).toVar(), i = $(t, e, N(ci.IOR_TRANSMISSION), N(oi)).toVar(), a = $(t, e, N(ci.ATTENUATION), N(oi)).toVar(), o = $(t, e, N(ci.DISPERSION_SHEEN), N(oi)).toVar(), s = $(t, e, N(ci.SHEEN_COLOR), N(oi)).toVar(), c = $(t, e, N(ci.SPECULAR), N(oi)).toVar(), l = $(t, e, N(ci.IRIDESCENCE), N(oi)).toVar(), u = $(t, e, N(ci.MAP_INDICES_A), N(oi)).toVar(), d = $(t, e, N(ci.MAP_INDICES_B), N(oi)).toVar(), f = $(t, e, N(ci.OPACITY_ALPHA), N(oi)).toVar(), p = $(t, e, N(ci.ALPHA_MODE), N(oi)).toVar(), m = $(t, e, N(ci.BUMP_DISPLACEMENT), N(oi)).toVar(), h = $(t, e, N(ci.ALBEDO_TRANSFORM_A), N(oi)).toVar(), g = $(t, e, N(ci.ALBEDO_TRANSFORM_B), N(oi)).toVar(), _ = $(t, e, N(ci.NORMAL_TRANSFORM_A), N(oi)).toVar(), v = $(t, e, N(ci.NORMAL_TRANSFORM_B), N(oi)).toVar(), y = $(t, e, N(ci.ROUGHNESS_TRANSFORM_A), N(oi)).toVar(), b = $(t, e, N(ci.ROUGHNESS_TRANSFORM_B), N(oi)).toVar(), x = $(t, e, N(ci.METALNESS_TRANSFORM_A), N(oi)).toVar(), S = $(t, e, N(ci.METALNESS_TRANSFORM_B), N(oi)).toVar(), C = $(t, e, N(ci.EMISSIVE_TRANSFORM_A), N(oi)).toVar(), w = $(t, e, N(ci.EMISSIVE_TRANSFORM_B), N(oi)).toVar(), T = $(t, e, N(ci.BUMP_TRANSFORM_A), N(oi)).toVar(), E = $(t, e, N(ci.BUMP_TRANSFORM_B), N(oi)).toVar(), D = $(t, e, N(ci.DISPLACEMENT_TRANSFORM_A), N(oi)).toVar(), O = $(t, e, N(ci.DISPLACEMENT_TRANSFORM_B), N(oi)).toVar();
|
|
2138
2164
|
return Rr({
|
|
2139
2165
|
color: G(n.rgb, 1),
|
|
@@ -2173,36 +2199,36 @@ var mi = K("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2173
2199
|
bumpScale: m.r,
|
|
2174
2200
|
displacementScale: m.g,
|
|
2175
2201
|
displacementMapIndex: N(m.b),
|
|
2176
|
-
albedoTransform:
|
|
2202
|
+
albedoTransform: Si({
|
|
2177
2203
|
data1: h,
|
|
2178
2204
|
data2: g
|
|
2179
2205
|
}),
|
|
2180
|
-
normalTransform:
|
|
2206
|
+
normalTransform: Si({
|
|
2181
2207
|
data1: _,
|
|
2182
2208
|
data2: v
|
|
2183
2209
|
}),
|
|
2184
|
-
roughnessTransform:
|
|
2210
|
+
roughnessTransform: Si({
|
|
2185
2211
|
data1: y,
|
|
2186
2212
|
data2: b
|
|
2187
2213
|
}),
|
|
2188
|
-
metalnessTransform:
|
|
2214
|
+
metalnessTransform: Si({
|
|
2189
2215
|
data1: x,
|
|
2190
2216
|
data2: S
|
|
2191
2217
|
}),
|
|
2192
|
-
emissiveTransform:
|
|
2218
|
+
emissiveTransform: Si({
|
|
2193
2219
|
data1: C,
|
|
2194
2220
|
data2: w
|
|
2195
2221
|
}),
|
|
2196
|
-
bumpTransform:
|
|
2222
|
+
bumpTransform: Si({
|
|
2197
2223
|
data1: T,
|
|
2198
2224
|
data2: E
|
|
2199
2225
|
}),
|
|
2200
|
-
displacementTransform:
|
|
2226
|
+
displacementTransform: Si({
|
|
2201
2227
|
data1: D,
|
|
2202
2228
|
data2: O
|
|
2203
2229
|
})
|
|
2204
2230
|
});
|
|
2205
|
-
}),
|
|
2231
|
+
}), wi = f(([e, t]) => {
|
|
2206
2232
|
let n = $(t, e, N(ci.IOR_TRANSMISSION), N(oi)).toVar(), r = $(t, e, N(ci.ATTENUATION), N(oi)).toVar(), i = $(t, e, N(ci.MAP_INDICES_A), N(oi)).toVar(), a = $(t, e, N(ci.OPACITY_ALPHA), N(oi)).toVar(), o = $(t, e, N(ci.ALPHA_MODE), N(oi)).toVar(), s = $(t, e, N(ci.ALBEDO_TRANSFORM_A), N(oi)).toVar(), c = $(t, e, N(ci.ALBEDO_TRANSFORM_B), N(oi)).toVar();
|
|
2207
2233
|
return zr({
|
|
2208
2234
|
color: G(1),
|
|
@@ -2215,17 +2241,17 @@ var mi = K("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2215
2241
|
transparent: a.b,
|
|
2216
2242
|
alphaTest: a.a,
|
|
2217
2243
|
alphaMode: N(o.r),
|
|
2218
|
-
albedoTransform:
|
|
2244
|
+
albedoTransform: Si({
|
|
2219
2245
|
data1: s,
|
|
2220
2246
|
data2: c
|
|
2221
2247
|
})
|
|
2222
2248
|
});
|
|
2223
|
-
}),
|
|
2249
|
+
}), Ti = /* @__PURE__ */ K("\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"), Ei = 32, Di = 512, Oi = 4, ki = 8, Ai = 1e8, ji = () => v("int", Ei).toVar(), Mi = K("\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"), Ni = K("\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");
|
|
2224
2250
|
f(([e, t, n, r]) => {
|
|
2225
2251
|
let i = N($(r, e, N(si.OPACITY_ALPHA), N(oi)).g), a = t.dot(n), o = i.equal(N(2)), s = i.equal(N(0)).and(a.lessThan(-1e-4)), c = i.equal(N(1)).and(a.greaterThan(1e-4));
|
|
2226
2252
|
return o.or(s).or(c);
|
|
2227
2253
|
});
|
|
2228
|
-
var
|
|
2254
|
+
var Pi = f(([e, t, n, r]) => {
|
|
2229
2255
|
let i = Br({
|
|
2230
2256
|
didHit: !1,
|
|
2231
2257
|
dst: j(0x56bc75e2d63100000),
|
|
@@ -2236,12 +2262,12 @@ var Ni = f(([e, t, n, r]) => {
|
|
|
2236
2262
|
meshIndex: N(-1),
|
|
2237
2263
|
boxTests: N(0),
|
|
2238
2264
|
triTests: N(0)
|
|
2239
|
-
}).toVar(), a = N(-1).toVar(), o = j(0).toVar(), s = j(0).toVar(), c =
|
|
2265
|
+
}).toVar(), a = N(-1).toVar(), o = j(0).toVar(), s = j(0).toVar(), c = ji(), l = N(1).toVar();
|
|
2240
2266
|
c.element(N(0)).assign(N(0));
|
|
2241
|
-
let d = L(W(1), fe(e.direction), se(e.direction, W(0))), f = L(W(1).div(e.direction), W(
|
|
2242
|
-
return m(l.greaterThan(N(0)).and(v.lessThan(N(
|
|
2267
|
+
let d = L(W(1), fe(e.direction), se(e.direction, W(0))), f = L(W(1).div(e.direction), W(Ai).mul(d), ne(g(e.direction), W(1e-8))).toVar(), h = e.origin, _ = e.direction, v = N(0).toVar();
|
|
2268
|
+
return m(l.greaterThan(N(0)).and(v.lessThan(N(Di))), () => {
|
|
2243
2269
|
v.addAssign(1), l.subAssign(1);
|
|
2244
|
-
let e = c.element(l).toVar(), r = $(t, e, N(0), N(
|
|
2270
|
+
let e = c.element(l).toVar(), r = $(t, e, N(0), N(Oi));
|
|
2245
2271
|
i.boxTests.addAssign(1), p(r.w.lessThan(0), () => {
|
|
2246
2272
|
p(r.w.greaterThan(j(-1.5)), () => {
|
|
2247
2273
|
let e = N(r.x).toVar(), t = N(r.y).toVar();
|
|
@@ -2250,7 +2276,7 @@ var Ni = f(([e, t, n, r]) => {
|
|
|
2250
2276
|
end: t
|
|
2251
2277
|
}, ({ i: t }) => {
|
|
2252
2278
|
i.triTests.addAssign(1);
|
|
2253
|
-
let r = e.add(t).toVar(), c = $(n, r, N(0), N(
|
|
2279
|
+
let r = e.add(t).toVar(), c = $(n, r, N(0), N(ki)).xyz, l = $(n, r, N(1), N(ki)).xyz, u = $(n, r, N(2), N(ki)).xyz, d = Mi({
|
|
2254
2280
|
rayOrigin: h,
|
|
2255
2281
|
rayDir: _,
|
|
2256
2282
|
pA: c,
|
|
@@ -2259,7 +2285,7 @@ var Ni = f(([e, t, n, r]) => {
|
|
|
2259
2285
|
closestHitDst: i.dst
|
|
2260
2286
|
});
|
|
2261
2287
|
p(d.w.greaterThan(.5), () => {
|
|
2262
|
-
let e = d.x, t = d.y, c = d.z, l = $(n, r, N(3), N(
|
|
2288
|
+
let e = d.x, t = d.y, c = d.z, l = $(n, r, N(3), N(ki)).xyz, u = $(n, r, N(4), N(ki)).xyz, f = $(n, r, N(5), N(ki)), m = f.xyz, h = N(f.w).toVar(), g = j(1).sub(t).sub(c), v = R(l.mul(g).add(u.mul(t)).add(m.mul(c))).toVar(), y = _.dot(v);
|
|
2263
2289
|
p(h.equal(N(2)).or(h.equal(N(0)).and(y.lessThan(-1e-4))).or(h.equal(N(1)).and(y.greaterThan(1e-4))), () => {
|
|
2264
2290
|
i.didHit.assign(!0), i.dst.assign(e), i.normal.assign(v), a.assign(r), o.assign(t), s.assign(c);
|
|
2265
2291
|
});
|
|
@@ -2269,17 +2295,17 @@ var Ni = f(([e, t, n, r]) => {
|
|
|
2269
2295
|
});
|
|
2270
2296
|
}).Else(() => {
|
|
2271
2297
|
let e = N(r.x).toVar();
|
|
2272
|
-
p(r.z.greaterThan(.5).and(l.lessThan(N(
|
|
2298
|
+
p(r.z.greaterThan(.5).and(l.lessThan(N(Ei))), () => {
|
|
2273
2299
|
c.element(l).assign(e), l.addAssign(1);
|
|
2274
2300
|
});
|
|
2275
2301
|
});
|
|
2276
2302
|
}).Else(() => {
|
|
2277
|
-
let n = $(t, e, N(1), N(
|
|
2303
|
+
let n = $(t, e, N(1), N(Oi)), a = $(t, e, N(2), N(Oi)), o = $(t, e, N(3), N(Oi)), s = N(r.w).toVar(), u = N(n.w).toVar(), d = Ni({
|
|
2278
2304
|
rayOrigin: h,
|
|
2279
2305
|
invDir: f,
|
|
2280
2306
|
boxMin: r.xyz,
|
|
2281
2307
|
boxMax: n.xyz
|
|
2282
|
-
}).toVar(), m =
|
|
2308
|
+
}).toVar(), m = Ni({
|
|
2283
2309
|
rayOrigin: h,
|
|
2284
2310
|
invDir: f,
|
|
2285
2311
|
boxMin: a.xyz,
|
|
@@ -2287,19 +2313,19 @@ var Ni = f(([e, t, n, r]) => {
|
|
|
2287
2313
|
}).toVar();
|
|
2288
2314
|
p(ae(d, m).lessThan(i.dst), () => {
|
|
2289
2315
|
let e = d.lessThan(m), t = z(e, s, u).toVar(), n = z(e, u, s).toVar();
|
|
2290
|
-
p(z(e, m, d).toVar().lessThan(i.dst).and(l.lessThan(N(
|
|
2316
|
+
p(z(e, m, d).toVar().lessThan(i.dst).and(l.lessThan(N(Ei))), () => {
|
|
2291
2317
|
c.element(l).assign(n), l.addAssign(1);
|
|
2292
|
-
}), p(l.lessThan(N(
|
|
2318
|
+
}), p(l.lessThan(N(Ei)), () => {
|
|
2293
2319
|
c.element(l).assign(t), l.addAssign(1);
|
|
2294
2320
|
});
|
|
2295
2321
|
});
|
|
2296
2322
|
});
|
|
2297
2323
|
}), p(i.didHit, () => {
|
|
2298
2324
|
i.hitPoint.assign(e.origin.add(e.direction.mul(i.dst)));
|
|
2299
|
-
let t = j(1).sub(o).sub(s), r = $(n, a, N(6), N(
|
|
2325
|
+
let t = j(1).sub(o).sub(s), r = $(n, a, N(6), N(ki)), c = $(n, a, N(7), N(ki));
|
|
2300
2326
|
i.uv.assign(r.xy.mul(t).add(r.zw.mul(o)).add(c.xy.mul(s))), i.materialIndex.assign(N(c.z)), i.meshIndex.assign(N(c.w)), i.triangleIndex.assign(a);
|
|
2301
2327
|
}), i;
|
|
2302
|
-
}),
|
|
2328
|
+
}), Fi = f(([e, t, n, r, i]) => {
|
|
2303
2329
|
let a = Br({
|
|
2304
2330
|
didHit: !1,
|
|
2305
2331
|
dst: i,
|
|
@@ -2310,12 +2336,12 @@ var Ni = f(([e, t, n, r]) => {
|
|
|
2310
2336
|
meshIndex: N(-1),
|
|
2311
2337
|
boxTests: N(0),
|
|
2312
2338
|
triTests: N(0)
|
|
2313
|
-
}).toVar(), o =
|
|
2339
|
+
}).toVar(), o = ji(), s = N(1).toVar();
|
|
2314
2340
|
o.element(N(0)).assign(N(0));
|
|
2315
|
-
let c = L(W(1), fe(e.direction), se(e.direction, W(0))), l = L(W(1).div(e.direction), W(
|
|
2316
|
-
return m(s.greaterThan(N(0)).and(a.didHit.not()).and(d.lessThan(N(
|
|
2341
|
+
let c = L(W(1), fe(e.direction), se(e.direction, W(0))), l = L(W(1).div(e.direction), W(Ai).mul(c), ne(g(e.direction), W(1e-8))).toVar(), d = N(0).toVar();
|
|
2342
|
+
return m(s.greaterThan(N(0)).and(a.didHit.not()).and(d.lessThan(N(Di))), () => {
|
|
2317
2343
|
d.addAssign(1), s.subAssign(1);
|
|
2318
|
-
let r = o.element(s).toVar(), i = $(t, r, N(0), N(
|
|
2344
|
+
let r = o.element(s).toVar(), i = $(t, r, N(0), N(Oi));
|
|
2319
2345
|
p(i.w.lessThan(0), () => {
|
|
2320
2346
|
p(i.w.greaterThan(j(-1.5)), () => {
|
|
2321
2347
|
let t = N(i.x).toVar(), r = N(i.y).toVar();
|
|
@@ -2323,7 +2349,7 @@ var Ni = f(([e, t, n, r]) => {
|
|
|
2323
2349
|
start: N(0),
|
|
2324
2350
|
end: r
|
|
2325
2351
|
}, ({ i: r }) => {
|
|
2326
|
-
let i = t.add(r).toVar(), o = $(n, i, N(0), N(
|
|
2352
|
+
let i = t.add(r).toVar(), o = $(n, i, N(0), N(ki)).xyz, s = $(n, i, N(1), N(ki)).xyz, c = $(n, i, N(2), N(ki)).xyz, l = Mi({
|
|
2327
2353
|
rayOrigin: e.origin,
|
|
2328
2354
|
rayDir: e.direction,
|
|
2329
2355
|
pA: o,
|
|
@@ -2332,23 +2358,23 @@ var Ni = f(([e, t, n, r]) => {
|
|
|
2332
2358
|
closestHitDst: a.dst
|
|
2333
2359
|
});
|
|
2334
2360
|
p(l.w.greaterThan(.5), () => {
|
|
2335
|
-
let t = $(n, i, N(7), N(
|
|
2361
|
+
let t = $(n, i, N(7), N(ki));
|
|
2336
2362
|
a.didHit.assign(!0), a.dst.assign(l.x), a.materialIndex.assign(N(t.z)), a.meshIndex.assign(N(t.w)), a.hitPoint.assign(e.origin.add(e.direction.mul(l.x))), a.normal.assign(R(D(s.sub(o), c.sub(o)))), a.uv.assign(U(l.y, l.z)), a.triangleIndex.assign(i), u();
|
|
2337
2363
|
});
|
|
2338
2364
|
});
|
|
2339
2365
|
}).Else(() => {
|
|
2340
2366
|
let e = N(i.x).toVar();
|
|
2341
|
-
p(i.z.greaterThan(.5).and(s.lessThan(N(
|
|
2367
|
+
p(i.z.greaterThan(.5).and(s.lessThan(N(Ei))), () => {
|
|
2342
2368
|
o.element(s).assign(e), s.addAssign(1);
|
|
2343
2369
|
});
|
|
2344
2370
|
});
|
|
2345
2371
|
}).Else(() => {
|
|
2346
|
-
let n = $(t, r, N(1), N(
|
|
2372
|
+
let n = $(t, r, N(1), N(Oi)), c = $(t, r, N(2), N(Oi)), u = $(t, r, N(3), N(Oi)), d = N(i.w).toVar(), f = N(n.w).toVar(), m = Ni({
|
|
2347
2373
|
rayOrigin: e.origin,
|
|
2348
2374
|
invDir: l,
|
|
2349
2375
|
boxMin: i.xyz,
|
|
2350
2376
|
boxMax: n.xyz
|
|
2351
|
-
}).toVar(), h =
|
|
2377
|
+
}).toVar(), h = Ni({
|
|
2352
2378
|
rayOrigin: e.origin,
|
|
2353
2379
|
invDir: l,
|
|
2354
2380
|
boxMin: c.xyz,
|
|
@@ -2356,15 +2382,15 @@ var Ni = f(([e, t, n, r]) => {
|
|
|
2356
2382
|
}).toVar();
|
|
2357
2383
|
p(ae(m, h).lessThan(a.dst), () => {
|
|
2358
2384
|
let e = m.lessThan(h), t = z(e, d, f).toVar(), n = z(e, f, d).toVar();
|
|
2359
|
-
p(z(e, h, m).toVar().lessThan(a.dst).and(s.lessThan(N(
|
|
2385
|
+
p(z(e, h, m).toVar().lessThan(a.dst).and(s.lessThan(N(Ei))), () => {
|
|
2360
2386
|
o.element(s).assign(n), s.addAssign(1);
|
|
2361
|
-
}), p(s.lessThan(N(
|
|
2387
|
+
}), p(s.lessThan(N(Ei)), () => {
|
|
2362
2388
|
o.element(s).assign(t), s.addAssign(1);
|
|
2363
2389
|
});
|
|
2364
2390
|
});
|
|
2365
2391
|
});
|
|
2366
2392
|
}), a;
|
|
2367
|
-
}),
|
|
2393
|
+
}), Ii = f(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
2368
2394
|
let d = W(e.xy, 1), f = r.mul(G(d, 1)), m = R(ie(n[0].xyz, n[1].xyz, n[2].xyz).mul(f.xyz.div(f.w))).toVar(), h = W(n[3]).toVar(), g = h.toVar(), _ = m.toVar();
|
|
2369
2395
|
return p(i.and(a.greaterThan(0)).and(o.lessThan(64)).and(s.greaterThan(.001)), () => {
|
|
2370
2396
|
let e = h.add(m.mul(s)).toVar(), r = a.div(o).mul(.001).mul(c).mul(l), i = fn(t), d = i.x.mul(u.max(.01)), f = i.y, p = R(W(n[0])), v = R(W(n[1])), y = p.mul(d).add(v.mul(f)).mul(r);
|
|
@@ -2373,52 +2399,52 @@ var Ni = f(([e, t, n, r]) => {
|
|
|
2373
2399
|
origin: g,
|
|
2374
2400
|
direction: _
|
|
2375
2401
|
});
|
|
2376
|
-
}),
|
|
2377
|
-
f(([e, t, n]) => ve(e,
|
|
2402
|
+
}), Li = /* @__PURE__ */ K("\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"), Ri = /* @__PURE__ */ K("\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");
|
|
2403
|
+
f(([e, t, n]) => ve(e, Li({
|
|
2378
2404
|
direction: t,
|
|
2379
2405
|
environmentMatrix: n
|
|
2380
2406
|
}), 0).rgb);
|
|
2381
|
-
var
|
|
2382
|
-
let
|
|
2407
|
+
var zi = /* @__PURE__ */ K("\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", [Li]), Bi = f(([e, t, n, r, i, a]) => {
|
|
2408
|
+
let o = G(0).toVar();
|
|
2383
2409
|
return p(r.equal(0), () => {
|
|
2384
|
-
|
|
2410
|
+
o.assign(G(0));
|
|
2385
2411
|
}).Else(() => {
|
|
2386
|
-
let
|
|
2412
|
+
let s = Li({
|
|
2387
2413
|
direction: t,
|
|
2388
2414
|
environmentMatrix: n
|
|
2389
|
-
}).toVar(), 0).rgb.toVar(), s = k(
|
|
2415
|
+
}).toVar(), c = ve(e, s, 0).rgb.toVar(), l = pe(s.y.mul(Math.PI)).toVar(), u = k(c, ai).toVar().mul(l).toVar(), d = I(j(0), u.sub(i)).toVar().div(r).toVar(), f = zi({
|
|
2390
2416
|
direction: t,
|
|
2391
2417
|
environmentMatrix: n
|
|
2392
|
-
}).toVar(),
|
|
2393
|
-
|
|
2394
|
-
}),
|
|
2395
|
-
}),
|
|
2396
|
-
let
|
|
2397
|
-
uv:
|
|
2418
|
+
}).toVar(), p = j(a.x).mul(j(a.y)).mul(d).mul(f).toVar();
|
|
2419
|
+
o.assign(G(c, p));
|
|
2420
|
+
}), o;
|
|
2421
|
+
}), Vi = f(([e, t, n, r, i, a, o, s, c]) => {
|
|
2422
|
+
let l = N(o.y).toVar(), u = o.y, d = T(s.x.mul(u.sub(1)), 0, u.sub(1)), f = N(M(d)), p = ae(f.add(1), N(u).sub(1)), m = ee(d), h = L(t.element(f), t.element(p), m).toVar(), g = o.x, _ = o.y, v = T(s.y.mul(g.sub(1)), 0, g.sub(1)), y = T(h.mul(_.sub(1)), 0, _.sub(1)), b = N(M(v)), x = N(M(y)), S = ae(b.add(1), N(g).sub(1)), C = ae(x.add(1), N(_).sub(1)), w = ee(v), E = ee(y), D = N(g), O = t.element(l.add(x.mul(D).add(b))), A = t.element(l.add(x.mul(D).add(S))), P = t.element(l.add(C.mul(D).add(b))), te = t.element(l.add(C.mul(D).add(S))), ne = U(L(L(O, A, w), L(P, te, w), E).toVar(), h).toVar(), F = Ri({
|
|
2423
|
+
uv: ne,
|
|
2398
2424
|
environmentMatrix: n
|
|
2399
|
-
}).toVar(),
|
|
2400
|
-
|
|
2401
|
-
let
|
|
2402
|
-
direction:
|
|
2425
|
+
}).toVar(), re = ve(e, ne, 0).rgb.mul(r).toVar();
|
|
2426
|
+
c.assign(re);
|
|
2427
|
+
let ie = pe(ne.y.mul(Math.PI)).toVar(), oe = k(re.div(r), ai).toVar().mul(ie).toVar(), R = I(j(0), oe.sub(a)).toVar().div(i).toVar(), se = zi({
|
|
2428
|
+
direction: F,
|
|
2403
2429
|
environmentMatrix: n
|
|
2404
2430
|
}).toVar();
|
|
2405
|
-
return G(
|
|
2406
|
-
}),
|
|
2407
|
-
let n =
|
|
2431
|
+
return G(F, j(o.x).mul(j(o.y)).mul(R).mul(se).toVar());
|
|
2432
|
+
}), Hi = /* @__PURE__ */ K("\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", [Li]), Ui = /* @__PURE__ */ K("\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__ */ K("\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")]), Wi = f(([e]) => e.albedoMapIndex.greaterThanEqual(N(0)).or(e.normalMapIndex.greaterThanEqual(N(0))).or(e.roughnessMapIndex.greaterThanEqual(N(0))).or(e.metalnessMapIndex.greaterThanEqual(N(0))).or(e.emissiveMapIndex.greaterThanEqual(N(0))).or(e.bumpMapIndex.greaterThanEqual(N(0))).or(e.displacementMapIndex.greaterThanEqual(N(0)))), Gi = /* @__PURE__ */ K("\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"), Ki = f(([e, t]) => {
|
|
2433
|
+
let n = Gi({ t: t.albedoTransform }).toVar(), r = Gi({ t: t.normalTransform }).toVar(), i = Gi({ t: t.metalnessTransform }).toVar(), a = Gi({ t: t.roughnessTransform }).toVar(), o = Gi({ t: t.emissiveTransform }).toVar(), s = Gi({ t: t.bumpTransform }).toVar(), c = .001, l = g(n.sub(r)).lessThan(c).toVar(), u = g(r.sub(s)).lessThan(c).toVar(), d = g(i.sub(a)).lessThan(c).toVar(), f = g(n.sub(o)).lessThan(c).toVar(), m = l.and(g(n.sub(i)).lessThan(c)).and(g(n.sub(o)).lessThan(c)).and(g(n.sub(s)).lessThan(c)).toVar(), h = U(0).toVar(), _ = U(0).toVar(), v = U(0).toVar(), y = U(0).toVar(), b = U(0).toVar(), x = U(0).toVar(), S = u.or(m).toVar(), C = d.or(m).toVar(), w = f.or(m).toVar();
|
|
2408
2434
|
return p(m, () => {
|
|
2409
|
-
let n =
|
|
2435
|
+
let n = Ui({
|
|
2410
2436
|
uv: e,
|
|
2411
2437
|
transform: t.albedoTransform
|
|
2412
2438
|
});
|
|
2413
2439
|
h.assign(n), _.assign(n), v.assign(n), y.assign(n), b.assign(n), x.assign(n);
|
|
2414
2440
|
}).Else(() => {
|
|
2415
|
-
h.assign(
|
|
2441
|
+
h.assign(Ui({
|
|
2416
2442
|
uv: e,
|
|
2417
2443
|
transform: t.albedoTransform
|
|
2418
|
-
})), _.assign(l.select(h,
|
|
2444
|
+
})), _.assign(l.select(h, Ui({
|
|
2419
2445
|
uv: e,
|
|
2420
2446
|
transform: t.normalTransform
|
|
2421
|
-
}))), b.assign(f.select(h,
|
|
2447
|
+
}))), b.assign(f.select(h, Ui({
|
|
2422
2448
|
uv: e,
|
|
2423
2449
|
transform: t.emissiveTransform
|
|
2424
2450
|
}))), p(u, () => {
|
|
@@ -2426,12 +2452,12 @@ var Ri = /* @__PURE__ */ K("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2426
2452
|
}).ElseIf(g(s.sub(n)).lessThan(c), () => {
|
|
2427
2453
|
x.assign(h);
|
|
2428
2454
|
}).Else(() => {
|
|
2429
|
-
x.assign(
|
|
2455
|
+
x.assign(Ui({
|
|
2430
2456
|
uv: e,
|
|
2431
2457
|
transform: t.bumpTransform
|
|
2432
2458
|
}));
|
|
2433
2459
|
}), p(d, () => {
|
|
2434
|
-
v.assign(
|
|
2460
|
+
v.assign(Ui({
|
|
2435
2461
|
uv: e,
|
|
2436
2462
|
transform: t.metalnessTransform
|
|
2437
2463
|
})), y.assign(v);
|
|
@@ -2441,7 +2467,7 @@ var Ri = /* @__PURE__ */ K("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2441
2467
|
}).ElseIf(g(i.sub(r)).lessThan(c), () => {
|
|
2442
2468
|
v.assign(_);
|
|
2443
2469
|
}).Else(() => {
|
|
2444
|
-
v.assign(
|
|
2470
|
+
v.assign(Ui({
|
|
2445
2471
|
uv: e,
|
|
2446
2472
|
transform: t.metalnessTransform
|
|
2447
2473
|
}));
|
|
@@ -2452,7 +2478,7 @@ var Ri = /* @__PURE__ */ K("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2452
2478
|
}).ElseIf(g(a.sub(i)).lessThan(c), () => {
|
|
2453
2479
|
y.assign(v);
|
|
2454
2480
|
}).Else(() => {
|
|
2455
|
-
y.assign(
|
|
2481
|
+
y.assign(Ui({
|
|
2456
2482
|
uv: e,
|
|
2457
2483
|
transform: t.roughnessTransform
|
|
2458
2484
|
}));
|
|
@@ -2470,13 +2496,13 @@ var Ri = /* @__PURE__ */ K("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2470
2496
|
metalRoughSameUV: C,
|
|
2471
2497
|
albedoEmissiveSameUV: w
|
|
2472
2498
|
});
|
|
2473
|
-
}),
|
|
2499
|
+
}), qi = f(([e, t, n]) => {
|
|
2474
2500
|
let r = t.color.toVar();
|
|
2475
2501
|
return p(t.albedoMapIndex.greaterThanEqual(N(0)), () => {
|
|
2476
2502
|
let i = ve(e, n.albedoUV).depth(N(t.albedoMapIndex)).toVar();
|
|
2477
2503
|
r.assign(G(t.color.rgb.mul(i.rgb), t.color.a.mul(i.a)));
|
|
2478
2504
|
}), r;
|
|
2479
|
-
}),
|
|
2505
|
+
}), Ji = f(([e, t, n, r]) => {
|
|
2480
2506
|
let i = n.metalness.toVar(), a = n.roughness.toVar();
|
|
2481
2507
|
return p(n.metalnessMapIndex.greaterThanEqual(N(0)).and(n.metalnessMapIndex.equal(n.roughnessMapIndex)), () => {
|
|
2482
2508
|
let t = ve(e, r.metalnessUV).depth(N(n.metalnessMapIndex));
|
|
@@ -2490,7 +2516,7 @@ var Ri = /* @__PURE__ */ K("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2490
2516
|
a.assign(n.roughness.mul(e.g));
|
|
2491
2517
|
});
|
|
2492
2518
|
}), U(i, a);
|
|
2493
|
-
}),
|
|
2519
|
+
}), Yi = f(([e, t, n, r]) => {
|
|
2494
2520
|
let i = t.toVar();
|
|
2495
2521
|
return p(n.normalMapIndex.greaterThanEqual(N(0)), () => {
|
|
2496
2522
|
let a = ve(e, r.normalUV).depth(N(n.normalMapIndex)).xyz.mul(2).sub(1).toVar();
|
|
@@ -2498,27 +2524,27 @@ var Ri = /* @__PURE__ */ K("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2498
2524
|
let o = R(D(g(t.z).lessThan(.999).select(W(0, 0, 1), W(1, 0, 0)), t)), s = D(t, o);
|
|
2499
2525
|
i.assign(R(o.mul(a.x).add(s.mul(a.y)).add(t.mul(a.z))));
|
|
2500
2526
|
}), i;
|
|
2501
|
-
}),
|
|
2527
|
+
}), Xi = f(([e, t, n, r]) => {
|
|
2502
2528
|
let i = t.toVar();
|
|
2503
2529
|
return p(n.bumpMapIndex.greaterThanEqual(N(0)).and(n.bumpScale.greaterThan(0)), () => {
|
|
2504
2530
|
let a = U(1 / 1024).toVar(), o = ve(e, r.bumpUV).depth(N(n.bumpMapIndex)).r, s = ve(e, U(r.bumpUV.x.add(a.x), r.bumpUV.y)).depth(N(n.bumpMapIndex)).r, c = ve(e, U(r.bumpUV.x, r.bumpUV.y.add(a.y))).depth(N(n.bumpMapIndex)).r, l = U(s.sub(o), c.sub(o)).mul(n.bumpScale), u = R(W(l.x.negate(), l.y.negate(), 1)), d = R(D(g(t.z).lessThan(.999).select(W(0, 0, 1), W(1, 0, 0)), t)), f = D(t, d), p = d.mul(u.x).add(f.mul(u.y)).add(t.mul(u.z));
|
|
2505
2531
|
i.assign(R(L(t, p, T(n.bumpScale, 0, 1))));
|
|
2506
2532
|
}), i;
|
|
2507
|
-
}),
|
|
2533
|
+
}), Zi = f(([e, t, n, r]) => {
|
|
2508
2534
|
let i = t.emissive.mul(t.emissiveIntensity).toVar();
|
|
2509
2535
|
return p(t.emissiveMapIndex.greaterThanEqual(N(0)), () => {
|
|
2510
2536
|
let n = ve(e, r.emissiveUV).depth(N(t.emissiveMapIndex)).toVar();
|
|
2511
2537
|
i.assign(i.mul(n.rgb));
|
|
2512
2538
|
}), i;
|
|
2513
|
-
}),
|
|
2514
|
-
let l = G(0).toVar(), u = W(0).toVar(), d = j(0).toVar(), f = j(0).toVar(), m = W(0).toVar(), h =
|
|
2539
|
+
}), Qi = f(([e, t, n, r, i, a, o, s, c]) => {
|
|
2540
|
+
let l = G(0).toVar(), u = W(0).toVar(), d = j(0).toVar(), f = j(0).toVar(), m = W(0).toVar(), h = Wi(o).toVar();
|
|
2515
2541
|
return l.assign(o.color), u.assign(o.emissive.mul(o.emissiveIntensity)), d.assign(o.metalness), f.assign(o.roughness), m.assign(c), p(h, () => {
|
|
2516
|
-
let p = qr.wrap(
|
|
2517
|
-
l.assign(
|
|
2518
|
-
let h =
|
|
2542
|
+
let p = qr.wrap(Ki(s, o)).toVar();
|
|
2543
|
+
l.assign(qi(e, o, p));
|
|
2544
|
+
let h = Ji(r, i, o, p);
|
|
2519
2545
|
d.assign(h.x), f.assign(h.y);
|
|
2520
|
-
let g =
|
|
2521
|
-
m.assign(
|
|
2546
|
+
let g = Yi(t, c, o, p).toVar();
|
|
2547
|
+
m.assign(Xi(n, g, o, p)), u.assign(Zi(a, o, l, p));
|
|
2522
2548
|
}), Gr({
|
|
2523
2549
|
albedo: l,
|
|
2524
2550
|
emissive: u,
|
|
@@ -2528,27 +2554,27 @@ var Ri = /* @__PURE__ */ K("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2528
2554
|
hasTextures: h
|
|
2529
2555
|
});
|
|
2530
2556
|
});
|
|
2531
|
-
f(([e, t, n, r, i, a, o, s]) => Gr.wrap(
|
|
2532
|
-
var
|
|
2557
|
+
f(([e, t, n, r, i, a, o, s]) => Gr.wrap(Qi(e, t, n, r, i, a, o, s, W(0, 1, 0))).albedo), f(([e, t, n, r, i, a, o, s]) => Gr.wrap(Qi(e, t, n, r, i, a, o, s, W(0, 1, 0))).emissive), f(([e, t, n, r, i, a, o, s]) => Gr.wrap(Qi(e, t, n, r, i, a, o, s, W(0, 1, 0))).metalness), f(([e, t, n, r, i, a, o, s]) => Gr.wrap(Qi(e, t, n, r, i, a, o, s, W(0, 1, 0))).roughness), f(([e, t, n, r, i, a, o, s, c]) => Gr.wrap(Qi(e, t, n, r, i, a, o, s, c)).normal);
|
|
2558
|
+
var $i = f(([e, t, n, r]) => {
|
|
2533
2559
|
let i = j(0).toVar();
|
|
2534
2560
|
return p(t.greaterThanEqual(N(0)), () => {
|
|
2535
|
-
let a =
|
|
2561
|
+
let a = Ui({
|
|
2536
2562
|
uv: n,
|
|
2537
2563
|
transform: r
|
|
2538
2564
|
});
|
|
2539
2565
|
i.assign(ve(e, a).depth(N(t)).r);
|
|
2540
2566
|
}), i;
|
|
2541
|
-
}),
|
|
2567
|
+
}), ea = 32, ta = 16, na = 5, ra = 1 / 1024, ia = 8, aa = Xt({
|
|
2542
2568
|
hitPoint: "vec3",
|
|
2543
2569
|
uv: "vec2",
|
|
2544
2570
|
normal: "vec3",
|
|
2545
2571
|
height: "float"
|
|
2546
|
-
}),
|
|
2547
|
-
let o = t.hitPoint.toVar(), s = t.uv.toVar(), c = t.normal.toVar(), l = j(0).toVar(), u = t.triangleIndex, d = $(n, u, N(0), N(
|
|
2572
|
+
}), oa = f(([e, t, n, r, i, a]) => {
|
|
2573
|
+
let o = t.hitPoint.toVar(), s = t.uv.toVar(), c = t.normal.toVar(), l = j(0).toVar(), u = t.triangleIndex, d = $(n, u, N(0), N(ia)).xyz.toVar(), f = $(n, u, N(1), N(ia)).xyz.toVar(), h = $(n, u, N(2), N(ia)).xyz.toVar(), _ = $(n, u, N(6), N(ia)).toVar(), v = $(n, u, N(7), N(ia)).toVar(), y = _.xy.toVar(), b = _.zw.toVar(), x = v.xy.toVar(), S = f.sub(d).toVar(), C = h.sub(d).toVar(), w = b.sub(y).toVar(), T = x.sub(y).toVar(), E = w.x.mul(T.y).sub(T.x.mul(w.y)).toVar();
|
|
2548
2574
|
return p(g(E).greaterThan(1e-8), () => {
|
|
2549
2575
|
let n = j(1).div(E), u = S.mul(T.y).sub(C.mul(w.y)).mul(n).toVar(), d = C.mul(w.x).sub(S.mul(T.x)).mul(n).toVar(), f = t.normal.toVar(), h = i.displacementScale.div(j(10)), _ = e.direction, v = k(_, f).toVar(), y = _.sub(f.mul(v)).toVar(), b = k(u, u), x = k(u, d), D = k(d, d), O = b.mul(D).sub(x.mul(x)).toVar();
|
|
2550
2576
|
p(g(O).greaterThan(1e-10), () => {
|
|
2551
|
-
let e = j(1).div(O), n = k(y, u), S = k(y, d), C = U(D.mul(n).sub(x.mul(S)).mul(e).toVar(), b.mul(S).sub(x.mul(n)).mul(e).toVar()).toVar(), w = v.toVar(), T = I(g(w), .001).toVar(), E = h.div(T).toVar(), A = N(a.equal(N(0)).select(N(
|
|
2577
|
+
let e = j(1).div(O), n = k(y, u), S = k(y, d), C = U(D.mul(n).sub(x.mul(S)).mul(e).toVar(), b.mul(S).sub(x.mul(n)).mul(e).toVar()).toVar(), w = v.toVar(), T = I(g(w), .001).toVar(), E = h.div(T).toVar(), A = N(a.equal(N(0)).select(N(ea), N(ta))).toVar(), M = E.negate().toVar(), ee = E.toVar().sub(M).div(j(A)).toVar(), P = M.toVar(), te = M.toVar(), ne = N(0).toVar();
|
|
2552
2578
|
m({
|
|
2553
2579
|
start: N(0),
|
|
2554
2580
|
end: A,
|
|
@@ -2556,7 +2582,7 @@ var Qi = f(([e, t, n, r]) => {
|
|
|
2556
2582
|
condition: "<"
|
|
2557
2583
|
}, ({ i: e }) => {
|
|
2558
2584
|
p(ne.equal(N(0)), () => {
|
|
2559
|
-
let n = M.add(ee.mul(j(e))).toVar(), a = t.uv.add(C.mul(n)).toVar(), o = n.mul(w).toVar(), s =
|
|
2585
|
+
let n = M.add(ee.mul(j(e))).toVar(), a = t.uv.add(C.mul(n)).toVar(), o = n.mul(w).toVar(), s = $i(r, i.displacementMapIndex, a, i.displacementTransform).sub(.5).mul(h);
|
|
2560
2586
|
p(o.lessThanEqual(s).and(e.greaterThan(N(0))), () => {
|
|
2561
2587
|
ne.assign(1), te.assign(n);
|
|
2562
2588
|
}).Else(() => {
|
|
@@ -2567,80 +2593,80 @@ var Qi = f(([e, t, n, r]) => {
|
|
|
2567
2593
|
let e = P.toVar(), n = te.toVar();
|
|
2568
2594
|
m({
|
|
2569
2595
|
start: N(0),
|
|
2570
|
-
end: N(
|
|
2596
|
+
end: N(na),
|
|
2571
2597
|
type: "int",
|
|
2572
2598
|
condition: "<"
|
|
2573
2599
|
}, () => {
|
|
2574
|
-
let a = e.add(n).mul(.5).toVar(), o = t.uv.add(C.mul(a)).toVar(), s = a.mul(w), c =
|
|
2600
|
+
let a = e.add(n).mul(.5).toVar(), o = t.uv.add(C.mul(a)).toVar(), s = a.mul(w), c = $i(r, i.displacementMapIndex, o, i.displacementTransform).sub(.5).mul(h);
|
|
2575
2601
|
p(s.lessThanEqual(c), () => {
|
|
2576
2602
|
n.assign(a);
|
|
2577
2603
|
}).Else(() => {
|
|
2578
2604
|
e.assign(a);
|
|
2579
2605
|
});
|
|
2580
2606
|
});
|
|
2581
|
-
let a = e.add(n).mul(.5).toVar(), g = t.uv.add(C.mul(a)).toVar(), v = t.hitPoint.add(_.mul(a)).toVar(), y =
|
|
2607
|
+
let a = e.add(n).mul(.5).toVar(), g = t.uv.add(C.mul(a)).toVar(), v = t.hitPoint.add(_.mul(a)).toVar(), y = $i(r, i.displacementMapIndex, g, i.displacementTransform), b = y.sub(.5).mul(h), x = j(ra), S = y, T = $i(r, i.displacementMapIndex, g.add(U(x, 0)), i.displacementTransform), E = $i(r, i.displacementMapIndex, g.add(U(0, x)), i.displacementTransform), D = R(u).toVar(), O = R(d).toVar(), k = T.sub(S).mul(h), A = E.sub(S).mul(h), M = R(f.sub(D.mul(k)).sub(O.mul(A)));
|
|
2582
2608
|
o.assign(v), s.assign(g), c.assign(M), l.assign(b);
|
|
2583
2609
|
});
|
|
2584
2610
|
});
|
|
2585
|
-
}),
|
|
2611
|
+
}), aa({
|
|
2586
2612
|
hitPoint: o,
|
|
2587
2613
|
uv: s,
|
|
2588
2614
|
normal: c,
|
|
2589
2615
|
height: l
|
|
2590
2616
|
});
|
|
2591
|
-
}),
|
|
2617
|
+
}), sa = 1e-6;
|
|
2592
2618
|
f(([e, t, n]) => {
|
|
2593
2619
|
let r = I(W(j(1).sub(n)), e);
|
|
2594
2620
|
return e.add(r.sub(e).mul(ce(j(1).sub(t), 5)));
|
|
2595
2621
|
});
|
|
2596
|
-
var
|
|
2622
|
+
var ca = f(([e, t]) => {
|
|
2597
2623
|
let n = T(e, 0, 1);
|
|
2598
2624
|
return t.add(j(1).sub(t).mul(ce(j(1).sub(n), 5)));
|
|
2599
|
-
}),
|
|
2625
|
+
}), la = f(([e, t]) => {
|
|
2600
2626
|
let n = T(e, 0, 1);
|
|
2601
2627
|
return t.add(W(1).sub(t).mul(ce(j(1).sub(n), 5)));
|
|
2602
|
-
}),
|
|
2628
|
+
}), ua = f(([e]) => {
|
|
2603
2629
|
let t = he(e);
|
|
2604
|
-
return W(1).add(t).div(I(W(1).sub(t), W(
|
|
2605
|
-
}), ua = f(([e, t]) => {
|
|
2606
|
-
let n = e.sub(W(t)), r = I(e.add(W(t)), W(oa)), i = n.div(r);
|
|
2607
|
-
return i.mul(i);
|
|
2630
|
+
return W(1).add(t).div(I(W(1).sub(t), W(sa)));
|
|
2608
2631
|
}), da = f(([e, t]) => {
|
|
2609
|
-
let n = e.sub(t), r = I(e.add(t),
|
|
2632
|
+
let n = e.sub(W(t)), r = I(e.add(W(t)), W(sa)), i = n.div(r);
|
|
2610
2633
|
return i.mul(i);
|
|
2611
|
-
}), fa =
|
|
2634
|
+
}), fa = f(([e, t]) => {
|
|
2635
|
+
let n = e.sub(t), r = I(e.add(t), sa), i = n.div(r);
|
|
2636
|
+
return i.mul(i);
|
|
2637
|
+
}), pa = (e) => W(fa(e, j(1))), ma = f(([e, t]) => {
|
|
2612
2638
|
let n = t.mul(t), r = n.mul(n), i = e.mul(e).mul(r.sub(1)).add(1);
|
|
2613
2639
|
return r.div(I(j(Qr).mul(i).mul(i), ti));
|
|
2614
|
-
}),
|
|
2640
|
+
}), ha = f(([e, t]) => {
|
|
2615
2641
|
let n = I(t, ni), r = n.mul(n), i = j(1).div(r), a = e.mul(e).mul(i.mul(i).sub(1)).add(1);
|
|
2616
2642
|
return ae(i.mul(i).div(I(j(Qr).mul(a).mul(a), ti)), 100);
|
|
2617
|
-
}),
|
|
2643
|
+
}), ga = f(([e, t]) => {
|
|
2618
2644
|
let n = t.add(1), r = n.mul(n).div(8);
|
|
2619
2645
|
return e.div(I(e.mul(j(1).sub(r)).add(r), ti));
|
|
2620
|
-
}), ga = f(([e, t, n]) => {
|
|
2621
|
-
let r = ha(e, n);
|
|
2622
|
-
return ha(t, n).mul(r);
|
|
2623
2646
|
}), _a = f(([e, t, n]) => {
|
|
2647
|
+
let r = ga(e, n);
|
|
2648
|
+
return ga(t, n).mul(r);
|
|
2649
|
+
}), va = f(([e, t, n]) => {
|
|
2624
2650
|
let r = j(1).sub(n), i = n.mul(-.0275).add(.0425), a = n.mul(-.572).add(1.04), o = n.mul(.022).sub(.04), s = ae(r.mul(r), A(j(-6.4308).mul(t))).mul(r).add(i), c = j(-1.04).mul(s).add(a), l = j(1.04).mul(s).add(o), u = I(c.add(l), .1);
|
|
2625
2651
|
return W(1).add(e.mul(j(1).div(u).sub(1)));
|
|
2626
|
-
}),
|
|
2652
|
+
}), ya = f(([e, t, n]) => {
|
|
2627
2653
|
let r = j(1).sub(n), i = n.mul(-.0275).add(.0425), a = n.mul(-.572).add(1.04), o = n.mul(.022).sub(.04), s = ae(r.mul(r), A(j(-6.4308).mul(t))).mul(r).add(i), c = j(-1.04).mul(s).add(a), l = j(1.04).mul(s).add(o), u = I(e.mul(c).add(W(l)), W(0)), d = I(c.add(l), .1), f = W(1).add(e.mul(j(1).div(d).sub(1)));
|
|
2628
2654
|
return T(u.mul(f), W(0), W(1));
|
|
2629
|
-
}),
|
|
2630
|
-
let r =
|
|
2655
|
+
}), ba = f(([e, t, n]) => ma(e, n).mul(e).div(I(j(4).mul(t), ti))), xa = f(([e, t, n]) => {
|
|
2656
|
+
let r = ma(e, n), i = ga(t, n);
|
|
2631
2657
|
return r.mul(i).div(I(t.mul(4), ti));
|
|
2632
|
-
}),
|
|
2658
|
+
}), Sa = f(([e, t]) => {
|
|
2633
2659
|
let n = j(ei).mul(e).mul(1e-9), r = W(54856e-17, 44201e-17, 52481e-17), i = W(1681e3, 1795300, 2208400), a = W(43278e5, 93046e5, 66121e5), o = r.mul(he(j(ei).mul(a))).mul(E(i.mul(n).add(t))).mul(A(ui({ x: n }).negate().mul(a))).toVar();
|
|
2634
2660
|
return o.x.addAssign(j(9747e-17).mul(he(j(ei).mul(45282e5))).mul(E(j(2239900).mul(n).add(t.x))).mul(A(j(-45282e5).mul(ui({ x: n }))))), li.mul(o.div(1.0685e-7));
|
|
2635
|
-
}),
|
|
2661
|
+
}), Ca = f(([e, t, n, r, i]) => {
|
|
2636
2662
|
let a = L(e, t, me(0, .03, r)).toVar(), o = ui({ x: e.div(a) }).mul(j(1).sub(ui({ x: n }))).toVar(), s = j(1).sub(o).toVar(), c = W(0).toVar();
|
|
2637
2663
|
return p(s.lessThan(0), () => {
|
|
2638
2664
|
c.assign(W(1));
|
|
2639
2665
|
}).Else(() => {
|
|
2640
|
-
let t = he(s).toVar(), o =
|
|
2641
|
-
S.mulAssign(y), x.addAssign(S.mul(j(2).mul(
|
|
2666
|
+
let t = he(s).toVar(), o = ca(n, fa(a, e).toVar()).toVar(), l = j(1).sub(o).toVar(), u = a.lessThan(e).select(j(Qr), j(0)).toVar(), d = j(Qr).sub(u).toVar(), f = ua(T(i, 0, .9999)).toVar(), p = da(f, a).toVar(), m = W(ca(t, p.x), ca(t, p.y), ca(t, p.z)).toVar(), h = W(f.x.lessThan(a).select(j(Qr), j(0)), f.y.lessThan(a).select(j(Qr), j(0)), f.z.lessThan(a).select(j(Qr), j(0))).toVar(), g = j(2).mul(a).mul(r).mul(t).toVar(), _ = W(d).add(h).toVar(), v = T(W(o).mul(m), 1e-5, .9999).toVar(), y = he(v).toVar(), b = W(l.mul(l)).mul(m).div(W(1).sub(v)).toVar(), x = W(o).add(b).toVar().toVar(), S = b.sub(W(l)).toVar();
|
|
2667
|
+
S.mulAssign(y), x.addAssign(S.mul(j(2).mul(Sa(j(1).mul(g), j(1).mul(_))))), S.mulAssign(y), x.addAssign(S.mul(j(2).mul(Sa(j(2).mul(g), j(2).mul(_))))), c.assign(I(x, W(0)));
|
|
2642
2668
|
}), c;
|
|
2643
|
-
}),
|
|
2669
|
+
}), wa = f(([e, t, n]) => {
|
|
2644
2670
|
let r = n.invRoughness, i = n.metalFactor, a = j(0).toVar();
|
|
2645
2671
|
p(t.isMetallic, () => {
|
|
2646
2672
|
a.assign(I(r.mul(i), .7));
|
|
@@ -2699,9 +2725,9 @@ f(([e, t]) => {
|
|
|
2699
2725
|
n.assign(T(o, 0, 1));
|
|
2700
2726
|
}), n;
|
|
2701
2727
|
});
|
|
2702
|
-
var
|
|
2728
|
+
var Ta = f(([e, t, n, r, i, a]) => {
|
|
2703
2729
|
let o = j(1).sub(e.roughness), s = j(.5).add(j(.5).mul(e.metalness)), c = ae(j(2).div(e.ior), 1), l = I(e.sheenColor.r, I(e.sheenColor.g, e.sheenColor.b)), u = Jr({
|
|
2704
|
-
F0:
|
|
2730
|
+
F0: pa(e.ior),
|
|
2705
2731
|
NoV: j(.5),
|
|
2706
2732
|
diffuseColor: e.color.rgb,
|
|
2707
2733
|
isPurelyDiffuse: !1,
|
|
@@ -2712,7 +2738,7 @@ var wa = f(([e, t, n, r, i, a]) => {
|
|
|
2712
2738
|
metalFactor: s,
|
|
2713
2739
|
iorFactor: c,
|
|
2714
2740
|
maxSheenColor: l
|
|
2715
|
-
}), d = Hr.wrap(
|
|
2741
|
+
}), d = Hr.wrap(wa(e, n, u)), f = d.diffuse.toVar(), m = d.specular.toVar(), h = d.transmission.toVar(), g = d.clearcoat.toVar();
|
|
2716
2742
|
p(t.greaterThan(N(2)), () => {
|
|
2717
2743
|
let e = j(1).div(j(t).sub(1));
|
|
2718
2744
|
m.mulAssign(j(.8).add(e.mul(.2))), g.mulAssign(j(.7).add(e.mul(.3))), f.mulAssign(j(1).add(e.mul(.2)));
|
|
@@ -2736,10 +2762,10 @@ var wa = f(([e, t, n, r, i, a]) => {
|
|
|
2736
2762
|
clearcoatImportance: g,
|
|
2737
2763
|
envmapImportance: j(0)
|
|
2738
2764
|
});
|
|
2739
|
-
}),
|
|
2765
|
+
}), Ea = f(([e, t, n, r, i]) => {
|
|
2740
2766
|
let a = I(k(e, t), .001).toVar(), o = i.isRough.and(i.isMetallic.not()).and(n.transmission.equal(0)).and(n.clearcoat.equal(0)).toVar(), s = r.roughness.mul(r.roughness).toVar(), c = s.mul(s).toVar(), l = r.roughness.add(1), u = l.mul(l).div(8).toVar();
|
|
2741
2767
|
return Jr({
|
|
2742
|
-
F0: L(
|
|
2768
|
+
F0: L(pa(n.ior).mul(n.specularColor), r.albedo.rgb, r.metalness).mul(n.specularIntensity).toVar(),
|
|
2743
2769
|
NoV: a,
|
|
2744
2770
|
diffuseColor: r.albedo.rgb.mul(j(1).sub(r.metalness)).toVar(),
|
|
2745
2771
|
isPurelyDiffuse: o,
|
|
@@ -2751,11 +2777,11 @@ var wa = f(([e, t, n, r, i, a]) => {
|
|
|
2751
2777
|
iorFactor: ae(j(2).div(n.ior), 1).toVar(),
|
|
2752
2778
|
maxSheenColor: I(n.sheenColor.r, I(n.sheenColor.g, n.sheenColor.b)).toVar()
|
|
2753
2779
|
});
|
|
2754
|
-
}),
|
|
2780
|
+
}), Da = /* @__PURE__ */ K("\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"), Oa = /* @__PURE__ */ K("\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"), ka = /* @__PURE__ */ K("\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");
|
|
2755
2781
|
f(([e]) => I(e, ii).mul($r));
|
|
2756
|
-
var
|
|
2757
|
-
let r = Kr.wrap(
|
|
2758
|
-
F0:
|
|
2782
|
+
var Aa = /* @__PURE__ */ K("\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"), ja = f(([e, t, n]) => {
|
|
2783
|
+
let r = Kr.wrap(bi(n)), i = j(1).sub(n.roughness), a = j(.5).add(j(.5).mul(n.metalness)), o = ae(j(2).div(n.ior), 1), s = I(n.sheenColor.r, I(n.sheenColor.g, n.sheenColor.b)), c = Jr({
|
|
2784
|
+
F0: pa(n.ior),
|
|
2759
2785
|
NoV: j(.5),
|
|
2760
2786
|
diffuseColor: n.color.rgb,
|
|
2761
2787
|
isPurelyDiffuse: !1,
|
|
@@ -2766,7 +2792,7 @@ var ka = /* @__PURE__ */ K("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
|
|
|
2766
2792
|
metalFactor: a,
|
|
2767
2793
|
iorFactor: o,
|
|
2768
2794
|
maxSheenColor: s
|
|
2769
|
-
}), l = BRDFWeights.wrap(
|
|
2795
|
+
}), l = BRDFWeights.wrap(wa(n, r, c)), u = I(k(t, e), 0), d = ce(j(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 = I(p.add(m).add(h).add(g).add(_).add(v), 1e-6).toVar(), b = j(1).div(y);
|
|
2770
2796
|
return Zr({
|
|
2771
2797
|
diffuse: p.mul(b),
|
|
2772
2798
|
specular: m.mul(b),
|
|
@@ -2776,15 +2802,15 @@ var ka = /* @__PURE__ */ K("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
|
|
|
2776
2802
|
iridescence: v.mul(b),
|
|
2777
2803
|
totalWeight: y
|
|
2778
2804
|
});
|
|
2779
|
-
}),
|
|
2805
|
+
}), Ma = f(([e, t, n, r, i, a]) => {
|
|
2780
2806
|
let o = j(0).toVar(), s = j(0).toVar(), c = j(0).toVar(), l = j(0).toVar(), u = j(0).toVar(), d = k(n, e);
|
|
2781
2807
|
p(d.greaterThan(0), () => {
|
|
2782
2808
|
o.assign(d.div(Qr));
|
|
2783
2809
|
});
|
|
2784
2810
|
let f = R(t.add(e)).toVar(), m = I(k(n, f), 0), h = I(k(t, f), 0), _ = I(k(n, t), 0);
|
|
2785
2811
|
p(m.greaterThan(0).and(h.greaterThan(0)).and(_.greaterThan(0)), () => {
|
|
2786
|
-
s.assign(
|
|
2787
|
-
c.assign(
|
|
2812
|
+
s.assign(ba(m, h, r.roughness)), p(r.clearcoat.greaterThan(0), () => {
|
|
2813
|
+
c.assign(ba(m, h, r.clearcoatRoughness));
|
|
2788
2814
|
});
|
|
2789
2815
|
}), p(r.transmission.greaterThan(0).and(d.lessThan(0)), () => {
|
|
2790
2816
|
l.assign(g(d).div(Qr));
|
|
@@ -2798,34 +2824,34 @@ var ka = /* @__PURE__ */ K("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
|
|
|
2798
2824
|
}), T;
|
|
2799
2825
|
});
|
|
2800
2826
|
f(([e, t, n, r, i, a]) => {
|
|
2801
|
-
let o =
|
|
2827
|
+
let o = ja(e, t, n), s = J(i), c = o.diffuse, l = c.add(o.specular), u = l.add(o.clearcoat), d = u.add(o.transmission), f = W(0).toVar(), m = j(0).toVar(), h = j(0).toVar();
|
|
2802
2828
|
p(s.lessThan(c), () => {
|
|
2803
|
-
f.assign(
|
|
2829
|
+
f.assign(Oa({
|
|
2804
2830
|
N: t,
|
|
2805
2831
|
xi: r
|
|
2806
2832
|
})), m.assign(I(k(t, f), 0).div(Qr)), h.assign(m.mul(o.diffuse));
|
|
2807
2833
|
}).ElseIf(s.lessThan(l), () => {
|
|
2808
|
-
let i =
|
|
2834
|
+
let i = Da({
|
|
2809
2835
|
N: t,
|
|
2810
2836
|
roughness: n.roughness,
|
|
2811
2837
|
Xi: r
|
|
2812
2838
|
}).toVar();
|
|
2813
2839
|
f.assign(le(e.negate(), i)), p(k(t, f).greaterThan(0), () => {
|
|
2814
2840
|
let r = I(k(t, i), 0), a = I(k(e, i), 0);
|
|
2815
|
-
m.assign(
|
|
2841
|
+
m.assign(ba(r, a, n.roughness));
|
|
2816
2842
|
}), h.assign(m.mul(o.specular));
|
|
2817
2843
|
}).ElseIf(s.lessThan(u).and(n.clearcoat.greaterThan(0)), () => {
|
|
2818
|
-
let i =
|
|
2844
|
+
let i = Da({
|
|
2819
2845
|
N: t,
|
|
2820
2846
|
roughness: n.clearcoatRoughness,
|
|
2821
2847
|
Xi: r
|
|
2822
2848
|
}).toVar();
|
|
2823
2849
|
f.assign(le(e.negate(), i)), p(k(t, f).greaterThan(0), () => {
|
|
2824
2850
|
let r = I(k(t, i), 0), a = I(k(e, i), 0);
|
|
2825
|
-
m.assign(
|
|
2851
|
+
m.assign(ba(r, a, n.clearcoatRoughness));
|
|
2826
2852
|
}), h.assign(m.mul(o.clearcoat));
|
|
2827
2853
|
}).ElseIf(s.lessThan(d).and(n.transmission.greaterThan(0)), () => {
|
|
2828
|
-
let i =
|
|
2854
|
+
let i = Da({
|
|
2829
2855
|
N: t,
|
|
2830
2856
|
roughness: n.roughness,
|
|
2831
2857
|
Xi: r
|
|
@@ -2833,17 +2859,17 @@ f(([e, t, n, r, i, a]) => {
|
|
|
2833
2859
|
p(k(a, a).greaterThan(.001), () => {
|
|
2834
2860
|
f.assign(R(a));
|
|
2835
2861
|
let r = I(k(t, i), 0), o = I(k(e, i), 0);
|
|
2836
|
-
m.assign(
|
|
2862
|
+
m.assign(ba(r, o, n.roughness));
|
|
2837
2863
|
}).Else(() => {
|
|
2838
2864
|
f.assign(le(e.negate(), i)), m.assign(.1);
|
|
2839
2865
|
}), h.assign(m.mul(o.transmission));
|
|
2840
2866
|
}).Else(() => {
|
|
2841
|
-
f.assign(
|
|
2867
|
+
f.assign(Oa({
|
|
2842
2868
|
N: t,
|
|
2843
2869
|
xi: r
|
|
2844
2870
|
})), m.assign(I(k(t, f), 0).div(Qr)), h.assign(m.mul(o.sheen.add(o.iridescence)));
|
|
2845
2871
|
});
|
|
2846
|
-
let g =
|
|
2872
|
+
let g = Ma(f, e, t, n, o, h), _ = a(e, f, t, n).toVar();
|
|
2847
2873
|
return _.mulAssign(g), Vr({
|
|
2848
2874
|
direction: f,
|
|
2849
2875
|
value: _,
|
|
@@ -2852,11 +2878,11 @@ f(([e, t, n, r, i, a]) => {
|
|
|
2852
2878
|
});
|
|
2853
2879
|
//#endregion
|
|
2854
2880
|
//#region src/TSL/MaterialTransmission.js
|
|
2855
|
-
var
|
|
2881
|
+
var Na = Xt({
|
|
2856
2882
|
direction: "vec3",
|
|
2857
2883
|
throughput: "vec3",
|
|
2858
2884
|
didReflect: "bool"
|
|
2859
|
-
}),
|
|
2885
|
+
}), Pa = Xt({
|
|
2860
2886
|
continueRay: "bool",
|
|
2861
2887
|
isTransmissive: "bool",
|
|
2862
2888
|
isAlphaSkip: "bool",
|
|
@@ -2872,11 +2898,11 @@ Xt({
|
|
|
2872
2898
|
attenuationDistance: "float",
|
|
2873
2899
|
dispersion: "float"
|
|
2874
2900
|
});
|
|
2875
|
-
var
|
|
2901
|
+
var Fa = Xt({
|
|
2876
2902
|
wavelength: "float",
|
|
2877
2903
|
ior: "float",
|
|
2878
2904
|
colorWeight: "vec3"
|
|
2879
|
-
}),
|
|
2905
|
+
}), Ia = Xt({
|
|
2880
2906
|
direction: "vec3",
|
|
2881
2907
|
halfVector: "vec3",
|
|
2882
2908
|
didReflect: "bool",
|
|
@@ -2912,7 +2938,7 @@ Xt({
|
|
|
2912
2938
|
});
|
|
2913
2939
|
}), t;
|
|
2914
2940
|
});
|
|
2915
|
-
var
|
|
2941
|
+
var La = f(([e, t, n]) => {
|
|
2916
2942
|
let r = L(j(380), j(700), n).toVar(), i = r.div(1e3), a = e, o = t.mul(.03), s = a.add(o.div(i.mul(i))).toVar(), c = W(0).toVar();
|
|
2917
2943
|
return p(r.greaterThanEqual(380).and(r.lessThan(420)), () => {
|
|
2918
2944
|
c.assign(W(.9, 0, 1));
|
|
@@ -2928,17 +2954,17 @@ var Ia = f(([e, t, n]) => {
|
|
|
2928
2954
|
c.assign(W(1, .5, 0));
|
|
2929
2955
|
}), p(r.greaterThanEqual(620).and(r.lessThanEqual(700)), () => {
|
|
2930
2956
|
c.assign(W(1, 0, 0));
|
|
2931
|
-
}), c.assign(ce(c, W(.4))), c.assign(T(c, W(0), W(2))),
|
|
2957
|
+
}), c.assign(ce(c, W(.4))), c.assign(T(c, W(0), W(2))), Fa({
|
|
2932
2958
|
wavelength: r,
|
|
2933
2959
|
ior: s,
|
|
2934
2960
|
colorWeight: c
|
|
2935
2961
|
});
|
|
2936
|
-
}),
|
|
2962
|
+
}), Ra = /* @__PURE__ */ K("\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"), za = f(([e, t, n, r]) => {
|
|
2937
2963
|
let i = z(r, j(1), n.ior).toVar(), a = z(r, n.ior, j(1)).toVar(), o = g(k(t, e)), s = i.mul(i).div(a.mul(a)).mul(j(1).sub(o.mul(o))), c = j(0).toVar();
|
|
2938
2964
|
return p(s.lessThanEqual(1), () => {
|
|
2939
|
-
let e =
|
|
2965
|
+
let e = ca(o, fa(a, i)), t = j(1).sub(e).mul(n.transmission).toVar();
|
|
2940
2966
|
p(r.not().and(n.attenuationDistance.greaterThan(0)), () => {
|
|
2941
|
-
let e =
|
|
2967
|
+
let e = Ra({
|
|
2942
2968
|
attenuationColor: n.attenuationColor,
|
|
2943
2969
|
attenuationDistance: n.attenuationDistance,
|
|
2944
2970
|
thickness: n.thickness
|
|
@@ -2946,8 +2972,8 @@ var Ia = f(([e, t, n]) => {
|
|
|
2946
2972
|
t.assign(t.mul(e.x.add(e.y).add(e.z).div(3)));
|
|
2947
2973
|
}), c.assign(T(t, 0, 1));
|
|
2948
2974
|
}), c;
|
|
2949
|
-
}),
|
|
2950
|
-
let c =
|
|
2975
|
+
}), Ba = f(([e, t, n, r, i, a, o, s]) => {
|
|
2976
|
+
let c = Ia({
|
|
2951
2977
|
direction: W(0),
|
|
2952
2978
|
halfVector: W(0),
|
|
2953
2979
|
didReflect: !1,
|
|
@@ -2955,7 +2981,7 @@ var Ia = f(([e, t, n]) => {
|
|
|
2955
2981
|
}).toVar();
|
|
2956
2982
|
return p(r.lessThanEqual(.05).and(a.greaterThan(0)), () => {
|
|
2957
2983
|
c.halfVector.assign(t), c.didReflect.assign(!1);
|
|
2958
|
-
let r = n, o = z(i, j(1).div(r), r).toVar(), l =
|
|
2984
|
+
let r = n, o = z(i, j(1).div(r), r).toVar(), l = Fa.wrap(La(n, a, J(s)));
|
|
2959
2985
|
o.assign(z(i, j(1).div(l.ior), l.ior));
|
|
2960
2986
|
let u = ue(e.negate(), t, o).toVar();
|
|
2961
2987
|
p(k(u, u).lessThan(.001), () => {
|
|
@@ -2964,7 +2990,7 @@ var Ia = f(([e, t, n]) => {
|
|
|
2964
2990
|
c.direction.assign(u), c.pdf.assign(1);
|
|
2965
2991
|
});
|
|
2966
2992
|
}).Else(() => {
|
|
2967
|
-
let l = I(ni, r), u =
|
|
2993
|
+
let l = I(ni, r), u = Da({
|
|
2968
2994
|
N: t,
|
|
2969
2995
|
roughness: l,
|
|
2970
2996
|
Xi: o
|
|
@@ -2972,26 +2998,26 @@ var Ia = f(([e, t, n]) => {
|
|
|
2972
2998
|
c.halfVector.assign(u);
|
|
2973
2999
|
let d = z(i, j(1).div(n), n).toVar();
|
|
2974
3000
|
p(a.greaterThan(0), () => {
|
|
2975
|
-
let e =
|
|
3001
|
+
let e = Fa.wrap(La(n, a, J(s)));
|
|
2976
3002
|
d.assign(z(i, j(1).div(e.ior), e.ior));
|
|
2977
3003
|
});
|
|
2978
3004
|
let f = T(k(u, e), .001, 1), m = ue(e.negate(), u, d).toVar();
|
|
2979
3005
|
p(k(m, m).lessThan(.001), () => {
|
|
2980
3006
|
c.direction.assign(le(e.negate(), u)), c.didReflect.assign(!0);
|
|
2981
3007
|
let n = T(k(t, u), .001, 1), r = T(k(e, u), .001, 1);
|
|
2982
|
-
c.pdf.assign(
|
|
3008
|
+
c.pdf.assign(ba(n, r, l));
|
|
2983
3009
|
}).Else(() => {
|
|
2984
3010
|
c.direction.assign(m), c.didReflect.assign(!1);
|
|
2985
|
-
let e = T(k(t, u), .001, 1), n = T(k(u, m), .001, 1), r =
|
|
3011
|
+
let e = T(k(t, u), .001, 1), n = T(k(u, m), .001, 1), r = ma(e, l), i = f.add(d.mul(n)), a = g(n).div(i.mul(i));
|
|
2986
3012
|
c.pdf.assign(r.mul(e).mul(a));
|
|
2987
3013
|
});
|
|
2988
3014
|
}), c;
|
|
2989
|
-
}),
|
|
2990
|
-
let s =
|
|
3015
|
+
}), Va = f(([e, t, n, r, i, a, o]) => {
|
|
3016
|
+
let s = Na({
|
|
2991
3017
|
direction: W(0),
|
|
2992
3018
|
throughput: W(1),
|
|
2993
3019
|
didReflect: !1
|
|
2994
|
-
}).toVar(), c = z(r, t, t.negate()).toVar(), l = e.negate().toVar(), u = z(r, a, n.ior).toVar(), d = z(r, n.ior, o).toVar(), f = g(k(c, e)), m = u.mul(u).div(d.mul(d)).mul(j(1).sub(f.mul(f))).greaterThan(1).toVar(), h =
|
|
3020
|
+
}).toVar(), c = z(r, t, t.negate()).toVar(), l = e.negate().toVar(), u = z(r, a, n.ior).toVar(), d = z(r, n.ior, o).toVar(), f = g(k(c, e)), m = u.mul(u).div(d.mul(d)).mul(j(1).sub(f.mul(f))).greaterThan(1).toVar(), h = fa(d, u), v = z(m, j(1), ca(f, h)).toVar(), y = j(0).toVar();
|
|
2995
3021
|
p(m, () => {
|
|
2996
3022
|
y.assign(1);
|
|
2997
3023
|
}).Else(() => {
|
|
@@ -3003,14 +3029,14 @@ var Ia = f(([e, t, n]) => {
|
|
|
3003
3029
|
let x = U(J(i).toVar(), J(i).toVar());
|
|
3004
3030
|
return p(b, () => {
|
|
3005
3031
|
p(n.roughness.greaterThan(.05), () => {
|
|
3006
|
-
let e =
|
|
3032
|
+
let e = Ia.wrap(Ba(l, c, n.ior, n.roughness, r, j(0), x, i));
|
|
3007
3033
|
s.direction.assign(e.direction);
|
|
3008
3034
|
}).Else(() => {
|
|
3009
3035
|
s.direction.assign(le(e, c));
|
|
3010
3036
|
}), s.throughput.assign(n.color.xyz.mul(v).div(I(y, .05)));
|
|
3011
3037
|
}).Else(() => {
|
|
3012
3038
|
p(n.roughness.greaterThan(.05).or(n.dispersion.greaterThan(0)), () => {
|
|
3013
|
-
let t =
|
|
3039
|
+
let t = Ia.wrap(Ba(l, c, n.ior, n.roughness, r, n.dispersion, x, i));
|
|
3014
3040
|
p(t.didReflect, () => {
|
|
3015
3041
|
s.direction.assign(t.direction), s.didReflect.assign(!0), s.throughput.assign(n.color.xyz.div(I(j(1).sub(y), .05)));
|
|
3016
3042
|
}).Else(() => {
|
|
@@ -3048,7 +3074,7 @@ var Ia = f(([e, t, n]) => {
|
|
|
3048
3074
|
s.direction.assign(ue(e, c, u.div(d))), s.throughput.assign(W(1));
|
|
3049
3075
|
}), p(s.didReflect.not(), () => {
|
|
3050
3076
|
s.throughput.mulAssign(n.color.xyz), s.throughput.mulAssign(u.mul(u).div(I(d.mul(d), ti))), p(r.and(n.attenuationDistance.greaterThan(0)), () => {
|
|
3051
|
-
s.throughput.mulAssign(
|
|
3077
|
+
s.throughput.mulAssign(Ra({
|
|
3052
3078
|
attenuationColor: n.attenuationColor,
|
|
3053
3079
|
attenuationDistance: n.attenuationDistance,
|
|
3054
3080
|
thickness: n.thickness
|
|
@@ -3056,8 +3082,8 @@ var Ia = f(([e, t, n]) => {
|
|
|
3056
3082
|
}), s.throughput.mulAssign(j(1).sub(v).div(I(j(1).sub(y), .05)));
|
|
3057
3083
|
});
|
|
3058
3084
|
}), s;
|
|
3059
|
-
}),
|
|
3060
|
-
let c =
|
|
3085
|
+
}), Ha = f(([e, t, n, r, i, a, o, s]) => {
|
|
3086
|
+
let c = Pa({
|
|
3061
3087
|
continueRay: !1,
|
|
3062
3088
|
isTransmissive: !1,
|
|
3063
3089
|
isAlphaSkip: !1,
|
|
@@ -3085,17 +3111,17 @@ var Ia = f(([e, t, n]) => {
|
|
|
3085
3111
|
});
|
|
3086
3112
|
}), p(d.not().and(r.transmission.greaterThan(0)).and(a.greaterThan(N(0))), () => {
|
|
3087
3113
|
p(l.lessThan(r.transmission), () => {
|
|
3088
|
-
let t = k(e.direction, n).lessThan(0), i =
|
|
3114
|
+
let t = k(e.direction, n).lessThan(0), i = Na.wrap(Va(e.direction, n, r, t, u, o, s));
|
|
3089
3115
|
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(j(1).sub(r.transmission));
|
|
3090
3116
|
});
|
|
3091
3117
|
});
|
|
3092
3118
|
}), c;
|
|
3093
|
-
}),
|
|
3119
|
+
}), Ua = f(([e, t, n, r]) => {
|
|
3094
3120
|
let i = W(0).toVar();
|
|
3095
3121
|
return p(r.roughness.greaterThan(.98).and(r.metalness.lessThan(.02)).and(r.transmission.equal(0)).and(r.clearcoat.equal(0)).and(r.iridescence.equal(0)), () => {
|
|
3096
3122
|
i.assign(r.color.rgb.mul(j(1).sub(r.metalness)).mul($r));
|
|
3097
3123
|
}).Else(() => {
|
|
3098
|
-
let a = Wr.wrap(
|
|
3124
|
+
let a = Wr.wrap(gi(n, e, t)), o = T(L(pa(r.ior).mul(r.specularColor), r.color.rgb, r.metalness).mul(r.specularIntensity), W(0), W(1)).toVar(), s = r.color.rgb.toVar();
|
|
3099
3125
|
p(r.dispersion.greaterThan(0).and(r.transmission.greaterThan(.5)), () => {
|
|
3100
3126
|
let e = T(r.dispersion.mul(.1), 0, .8), t = I(I(s.r, s.g), s.b), n = ae(ae(s.r, s.g), s.b);
|
|
3101
3127
|
p(t.greaterThan(n), () => {
|
|
@@ -3103,12 +3129,12 @@ var Ia = f(([e, t, n]) => {
|
|
|
3103
3129
|
s.assign(L(s, r, e.mul(.3)));
|
|
3104
3130
|
});
|
|
3105
3131
|
}), p(r.iridescence.greaterThan(0), () => {
|
|
3106
|
-
let e = r.iridescenceThicknessRange.y, t =
|
|
3132
|
+
let e = r.iridescenceThicknessRange.y, t = Ca(j(1), r.iridescenceIOR, a.VoH, e, o);
|
|
3107
3133
|
o.assign(L(o, t, r.iridescence));
|
|
3108
3134
|
});
|
|
3109
|
-
let c =
|
|
3135
|
+
let c = ma(a.NoH, r.roughness), l = _a(a.NoV, a.NoL, r.roughness), u = la(a.VoH, o).toVar(), d = c.mul(l).mul(u).div(I(j(4).mul(a.NoV).mul(a.NoL), ti)).mul(va(o, a.NoV, r.roughness)), f = ya(o, a.NoV, r.roughness), m = W(1).sub(f).mul(j(1).sub(r.metalness)).mul(s).mul($r).add(d).toVar();
|
|
3110
3136
|
p(r.sheen.greaterThan(0), () => {
|
|
3111
|
-
let e =
|
|
3137
|
+
let e = ha(a.NoH, r.sheenRoughness), t = r.sheenColor.mul(r.sheen).mul(e).mul(a.NoL), n = j(1).sub(r.sheenRoughness).mul(.5).add(.25), o = T(r.sheenColor.mul(r.sheen).mul(n), W(0), W(1)), s = W(1).sub(o);
|
|
3112
3138
|
i.assign(m.mul(s).add(t));
|
|
3113
3139
|
}).Else(() => {
|
|
3114
3140
|
i.assign(m);
|
|
@@ -3124,16 +3150,16 @@ f(([e, t, n, r, i]) => {
|
|
|
3124
3150
|
o.assign(s.greaterThan(ti).select(o.div(he(s)), W(0, 0, 1)));
|
|
3125
3151
|
let c = I(k(n, t), ti), l = I(k(n, o), ti), u = I(k(e, o), ti);
|
|
3126
3152
|
p(i.NoV.mul(c).lessThan(0).and(r.transmission.greaterThan(0)), () => {
|
|
3127
|
-
a.assign(
|
|
3153
|
+
a.assign(Ua(e, t, n, r));
|
|
3128
3154
|
}).Else(() => {
|
|
3129
3155
|
let e = i.F0.toVar();
|
|
3130
3156
|
p(r.iridescence.greaterThan(0), () => {
|
|
3131
|
-
let t = r.iridescenceThicknessRange.y, n =
|
|
3157
|
+
let t = r.iridescenceThicknessRange.y, n = Ca(j(1), r.iridescenceIOR, u, t, e);
|
|
3132
3158
|
e.assign(T(L(e, n, r.iridescence), W(0), W(1)));
|
|
3133
3159
|
});
|
|
3134
|
-
let t = l.mul(l).mul(i.alpha2.sub(1)).add(1), n = i.alpha2.div(I(j(Qr).mul(t).mul(t), ti)), o = c.div(c.mul(j(1).sub(i.k)).add(i.k)), s = i.NoV.div(i.NoV.mul(j(1).sub(i.k)).add(i.k)), d = o.mul(s), f =
|
|
3160
|
+
let t = l.mul(l).mul(i.alpha2.sub(1)).add(1), n = i.alpha2.div(I(j(Qr).mul(t).mul(t), ti)), o = c.div(c.mul(j(1).sub(i.k)).add(i.k)), s = i.NoV.div(i.NoV.mul(j(1).sub(i.k)).add(i.k)), d = o.mul(s), f = la(u, e).toVar(), m = I(j(4).mul(i.NoV).mul(c), ti), h = n.mul(d).mul(f).div(m).mul(va(e, i.NoV, r.roughness)), g = ya(e, i.NoV, r.roughness), _ = W(1).sub(g).mul(j(1).sub(r.metalness)).mul(r.color.rgb).mul($r).add(h).toVar();
|
|
3135
3161
|
p(r.sheen.greaterThan(0), () => {
|
|
3136
|
-
let e =
|
|
3162
|
+
let e = ha(l, r.sheenRoughness), t = r.sheenColor.mul(r.sheen).mul(e).mul(c), n = j(1).sub(r.sheenRoughness).mul(.5).add(.25), i = T(r.sheenColor.mul(r.sheen).mul(n), W(0), W(1)), o = W(1).sub(i);
|
|
3137
3163
|
a.assign(_.mul(o).add(t));
|
|
3138
3164
|
}).Else(() => {
|
|
3139
3165
|
a.assign(_);
|
|
@@ -3141,50 +3167,50 @@ f(([e, t, n, r, i]) => {
|
|
|
3141
3167
|
});
|
|
3142
3168
|
}), a;
|
|
3143
3169
|
}), f(([e, t]) => {
|
|
3144
|
-
let n =
|
|
3170
|
+
let n = ca(t, j(.04));
|
|
3145
3171
|
return j(1).sub(e.mul(n).mul(j(2).sub(n)));
|
|
3146
3172
|
});
|
|
3147
|
-
var
|
|
3148
|
-
let n = T(L(
|
|
3173
|
+
var Wa = f(([e, t]) => {
|
|
3174
|
+
let n = T(L(pa(t.ior).mul(t.specularColor), t.color.rgb, t.metalness).mul(t.specularIntensity), W(0), W(1)).toVar(), r = ma(e.NoH, t.roughness), i = _a(e.NoV, e.NoL, t.roughness), a = la(e.VoH, n).toVar(), o = r.mul(i).mul(a).div(I(j(4).mul(e.NoV).mul(e.NoL), ti)).mul(va(n, e.NoV, t.roughness)), s = ya(n, e.NoV, t.roughness), c = W(1).sub(s).mul(j(1).sub(t.metalness)).mul(t.color.rgb).div(Qr).add(o), l = I(t.clearcoatRoughness, ri), u = ma(e.NoH, l), d = _a(e.NoV, e.NoL, l), f = ca(e.VoH, j(.04)), p = u.mul(d).mul(f).div(I(j(4).mul(e.NoV).mul(e.NoL), ti)), m = j(1).sub(t.clearcoat.mul(f).mul(j(2).sub(f)));
|
|
3149
3175
|
return c.mul(m).add(W(p).mul(t.clearcoat));
|
|
3150
|
-
}),
|
|
3176
|
+
}), Ga = Xt({
|
|
3151
3177
|
brdf: "vec3",
|
|
3152
3178
|
L: "vec3",
|
|
3153
3179
|
pdf: "float"
|
|
3154
|
-
}),
|
|
3180
|
+
}), Ka = f(([e, t, n, r, i]) => {
|
|
3155
3181
|
let a = t.normal, o = e.direction.negate(), s = I(n.clearcoatRoughness, ri), c = I(n.roughness, ri), l = j(1).sub(c).mul(j(.5).add(j(.5).mul(n.metalness))).toVar(), u = n.clearcoat.mul(j(1).sub(s)).toVar(), d = j(1).sub(l).mul(j(1).sub(n.metalness)).toVar(), f = l.add(u).add(d);
|
|
3156
3182
|
l.divAssign(f), u.divAssign(f), d.divAssign(f);
|
|
3157
3183
|
let m = J(i), h = W(0).toVar(), g = W(0).toVar();
|
|
3158
3184
|
p(m.lessThan(u), () => {
|
|
3159
|
-
g.assign(
|
|
3185
|
+
g.assign(Da({
|
|
3160
3186
|
N: a,
|
|
3161
3187
|
roughness: s,
|
|
3162
3188
|
Xi: r
|
|
3163
3189
|
})), h.assign(le(o.negate(), g));
|
|
3164
3190
|
}).ElseIf(m.lessThan(u.add(l)), () => {
|
|
3165
|
-
g.assign(
|
|
3191
|
+
g.assign(Da({
|
|
3166
3192
|
N: a,
|
|
3167
3193
|
roughness: c,
|
|
3168
3194
|
Xi: r
|
|
3169
3195
|
})), h.assign(le(o.negate(), g));
|
|
3170
3196
|
}).Else(() => {
|
|
3171
|
-
h.assign(
|
|
3197
|
+
h.assign(Oa({
|
|
3172
3198
|
N: a,
|
|
3173
3199
|
xi: r
|
|
3174
3200
|
})), g.assign(R(o.add(h)));
|
|
3175
3201
|
});
|
|
3176
|
-
let _ = Wr.wrap(
|
|
3177
|
-
return
|
|
3178
|
-
brdf:
|
|
3202
|
+
let _ = Wr.wrap(gi(a, o, h)), v = ma(_.NoH, s).mul(_.NoH).div(j(4).mul(_.VoH)).mul(u), y = ma(_.NoH, c).mul(_.NoH).div(j(4).mul(_.VoH)).mul(l), b = _.NoL.div(Qr).mul(d), x = I(v.add(y).add(b), .001);
|
|
3203
|
+
return Ga({
|
|
3204
|
+
brdf: Wa(_, n),
|
|
3179
3205
|
L: h,
|
|
3180
3206
|
pdf: x
|
|
3181
3207
|
});
|
|
3182
|
-
}),
|
|
3208
|
+
}), qa = Xt({
|
|
3183
3209
|
direction: "vec3",
|
|
3184
3210
|
color: "vec3",
|
|
3185
3211
|
intensity: "float",
|
|
3186
3212
|
angle: "float"
|
|
3187
|
-
}),
|
|
3213
|
+
}), Ja = Xt({
|
|
3188
3214
|
position: "vec3",
|
|
3189
3215
|
u: "vec3",
|
|
3190
3216
|
v: "vec3",
|
|
@@ -3192,13 +3218,13 @@ var Ua = f(([e, t]) => {
|
|
|
3192
3218
|
intensity: "float",
|
|
3193
3219
|
normal: "vec3",
|
|
3194
3220
|
area: "float"
|
|
3195
|
-
}),
|
|
3221
|
+
}), Ya = Xt({
|
|
3196
3222
|
position: "vec3",
|
|
3197
3223
|
color: "vec3",
|
|
3198
3224
|
intensity: "float",
|
|
3199
3225
|
distance: "float",
|
|
3200
3226
|
decay: "float"
|
|
3201
|
-
}),
|
|
3227
|
+
}), Xa = Xt({
|
|
3202
3228
|
position: "vec3",
|
|
3203
3229
|
direction: "vec3",
|
|
3204
3230
|
color: "vec3",
|
|
@@ -3207,30 +3233,30 @@ var Ua = f(([e, t]) => {
|
|
|
3207
3233
|
penumbra: "float",
|
|
3208
3234
|
distance: "float",
|
|
3209
3235
|
decay: "float"
|
|
3210
|
-
}),
|
|
3236
|
+
}), Za = Xt({
|
|
3211
3237
|
direction: "vec3",
|
|
3212
3238
|
emission: "vec3",
|
|
3213
3239
|
pdf: "float",
|
|
3214
3240
|
distance: "float",
|
|
3215
3241
|
lightType: "int",
|
|
3216
3242
|
valid: "bool"
|
|
3217
|
-
}),
|
|
3243
|
+
}), Qa = Xt({
|
|
3218
3244
|
direction: "vec3",
|
|
3219
3245
|
throughput: "vec3",
|
|
3220
3246
|
misWeight: "float",
|
|
3221
3247
|
pdf: "float",
|
|
3222
3248
|
combinedPdf: "float"
|
|
3223
|
-
}),
|
|
3249
|
+
}), $a = f(([e, t]) => {
|
|
3224
3250
|
let n = t.mul(8);
|
|
3225
|
-
return
|
|
3251
|
+
return qa({
|
|
3226
3252
|
direction: R(W(e.element(n), e.element(n.add(1)), e.element(n.add(2)))),
|
|
3227
3253
|
color: W(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5))),
|
|
3228
3254
|
intensity: e.element(n.add(6)),
|
|
3229
3255
|
angle: e.element(n.add(7))
|
|
3230
3256
|
});
|
|
3231
|
-
}),
|
|
3257
|
+
}), eo = f(([e, t]) => {
|
|
3232
3258
|
let n = t.mul(13), r = W(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5))).toVar(), i = W(e.element(n.add(6)), e.element(n.add(7)), e.element(n.add(8))).toVar(), a = D(r, i);
|
|
3233
|
-
return
|
|
3259
|
+
return Ja({
|
|
3234
3260
|
position: W(e.element(n), e.element(n.add(1)), e.element(n.add(2))),
|
|
3235
3261
|
u: r,
|
|
3236
3262
|
v: i,
|
|
@@ -3239,18 +3265,18 @@ var Ua = f(([e, t]) => {
|
|
|
3239
3265
|
normal: R(a),
|
|
3240
3266
|
area: te(a).mul(4)
|
|
3241
3267
|
});
|
|
3242
|
-
}),
|
|
3268
|
+
}), to = f(([e, t]) => {
|
|
3243
3269
|
let n = t.mul(9);
|
|
3244
|
-
return
|
|
3270
|
+
return Ya({
|
|
3245
3271
|
position: W(e.element(n), e.element(n.add(1)), e.element(n.add(2))),
|
|
3246
3272
|
color: W(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5))),
|
|
3247
3273
|
intensity: e.element(n.add(6)),
|
|
3248
3274
|
distance: e.element(n.add(7)),
|
|
3249
3275
|
decay: e.element(n.add(8))
|
|
3250
3276
|
});
|
|
3251
|
-
}),
|
|
3277
|
+
}), no = f(([e, t]) => {
|
|
3252
3278
|
let n = t.mul(14);
|
|
3253
|
-
return
|
|
3279
|
+
return Xa({
|
|
3254
3280
|
position: W(e.element(n), e.element(n.add(1)), e.element(n.add(2))),
|
|
3255
3281
|
direction: R(W(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5)))),
|
|
3256
3282
|
color: W(e.element(n.add(6)), e.element(n.add(7)), e.element(n.add(8))),
|
|
@@ -3260,7 +3286,7 @@ var Ua = f(([e, t]) => {
|
|
|
3260
3286
|
distance: e.element(n.add(12)),
|
|
3261
3287
|
decay: e.element(n.add(13))
|
|
3262
3288
|
});
|
|
3263
|
-
}),
|
|
3289
|
+
}), ro = /* @__PURE__ */ K("\n fn isDirectionValid( direction: vec3f, surfaceNormal: vec3f ) -> bool {\n return dot( direction, surfaceNormal ) > 0.0f;\n }\n"), io = /* @__PURE__ */ K("\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"), ao = /* @__PURE__ */ K("\n fn getSpotAttenuation( coneCosine: f32, penumbraCosine: f32, angleCosine: f32 ) -> f32 {\n return smoothstep( coneCosine, penumbraCosine, angleCosine );\n }\n"), oo = /* @__PURE__ */ K("\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"), so = f(([e, t, n]) => {
|
|
3264
3290
|
let r = e.normal, i = k(r, n), a = j(-1).toVar();
|
|
3265
3291
|
return p(i.lessThan(-1e-4), () => {
|
|
3266
3292
|
let o = j(1).div(i), s = k(e.position.sub(t), r).mul(o).toVar();
|
|
@@ -3271,23 +3297,23 @@ var Ua = f(([e, t]) => {
|
|
|
3271
3297
|
});
|
|
3272
3298
|
});
|
|
3273
3299
|
}), a;
|
|
3274
|
-
}),
|
|
3275
|
-
function lo(e) {
|
|
3276
|
-
so = e;
|
|
3277
|
-
}
|
|
3300
|
+
}), co = null, lo = null;
|
|
3278
3301
|
function uo(e) {
|
|
3279
3302
|
co = e;
|
|
3280
3303
|
}
|
|
3304
|
+
function fo(e) {
|
|
3305
|
+
lo = e;
|
|
3306
|
+
}
|
|
3281
3307
|
f(([e, t, n]) => {
|
|
3282
3308
|
let r = j(1).toVar();
|
|
3283
3309
|
return p(e.material.transmission.greaterThan(0), () => {
|
|
3284
|
-
let n = k(t, e.normal).lessThan(0), i =
|
|
3310
|
+
let n = k(t, e.normal).lessThan(0), i = za(t, e.normal, e.material, n);
|
|
3285
3311
|
r.assign(j(1).sub(i));
|
|
3286
3312
|
}).ElseIf(e.material.transparent, () => {
|
|
3287
3313
|
r.assign(e.material.opacity);
|
|
3288
3314
|
}), r;
|
|
3289
3315
|
});
|
|
3290
|
-
var
|
|
3316
|
+
var po = f(([e, t, n, r, i, a, o, s]) => {
|
|
3291
3317
|
let c = j(1).toVar(), l = e.toVar(), d = j(n).toVar();
|
|
3292
3318
|
return m({
|
|
3293
3319
|
start: N(0),
|
|
@@ -3304,15 +3330,15 @@ var fo = f(([e, t, n, r, i, a, o, s]) => {
|
|
|
3304
3330
|
p(f.greaterThan(.5), () => {
|
|
3305
3331
|
c.assign(0), u();
|
|
3306
3332
|
});
|
|
3307
|
-
let m = zr.wrap(
|
|
3308
|
-
|
|
3333
|
+
let m = zr.wrap(wi(n.materialIndex, s)), h = w(!1).toVar();
|
|
3334
|
+
lo && p(lo.equal(N(1)), () => {
|
|
3309
3335
|
let e = j(1).toVar();
|
|
3310
|
-
|
|
3311
|
-
let t = n.uv.x, r = n.uv.y, i = j(1).sub(t).sub(r), a = N(8), s = $(o, n.triangleIndex, N(6), a), c = $(o, n.triangleIndex, N(7), a), l =
|
|
3336
|
+
co && p(m.albedoMapIndex.greaterThanEqual(N(0)), () => {
|
|
3337
|
+
let t = n.uv.x, r = n.uv.y, i = j(1).sub(t).sub(r), a = N(8), s = $(o, n.triangleIndex, N(6), a), c = $(o, n.triangleIndex, N(7), a), l = Ui({
|
|
3312
3338
|
uv: s.xy.mul(i).add(s.zw.mul(t)).add(c.xy.mul(r)),
|
|
3313
3339
|
transform: m.albedoTransform
|
|
3314
3340
|
});
|
|
3315
|
-
e.assign(ve(
|
|
3341
|
+
e.assign(ve(co, l).depth(N(m.albedoMapIndex)).a);
|
|
3316
3342
|
}), p(m.alphaMode.equal(N(1)), () => {
|
|
3317
3343
|
let t = m.color.a.mul(e), n = z(m.alphaTest.greaterThan(0), m.alphaTest, j(.5));
|
|
3318
3344
|
p(t.lessThan(n), () => {
|
|
@@ -3330,10 +3356,10 @@ var fo = f(([e, t, n, r, i, a, o, s]) => {
|
|
|
3330
3356
|
}).ElseIf(m.transmission.greaterThan(0), () => {
|
|
3331
3357
|
let e = k(t, n.normal).lessThan(0), r = z(e, n.normal, n.normal.negate());
|
|
3332
3358
|
p(e.not().and(m.attenuationDistance.greaterThan(0)), () => {
|
|
3333
|
-
let e = te(n.hitPoint.sub(l)), t =
|
|
3359
|
+
let e = te(n.hitPoint.sub(l)), t = Ra(m.attenuationColor, m.attenuationDistance, e);
|
|
3334
3360
|
c.mulAssign(t.x.add(t.y).add(t.z).div(3));
|
|
3335
3361
|
});
|
|
3336
|
-
let i =
|
|
3362
|
+
let i = ca(g(k(t, r)), fa(m.ior, j(1))), a = j(1).sub(i).mul(m.transmission);
|
|
3337
3363
|
c.mulAssign(a), p(c.lessThan(.005), () => {
|
|
3338
3364
|
c.assign(0), u();
|
|
3339
3365
|
}), l.assign(n.hitPoint.add(t.mul(.001))), d.subAssign(n.dst.add(.001));
|
|
@@ -3345,14 +3371,14 @@ var fo = f(([e, t, n, r, i, a, o, s]) => {
|
|
|
3345
3371
|
c.assign(0), u();
|
|
3346
3372
|
});
|
|
3347
3373
|
}), c;
|
|
3348
|
-
}),
|
|
3374
|
+
}), mo = f(([e, t, n]) => {
|
|
3349
3375
|
let r = I(j(1e-4), te(e).mul(1e-6)).toVar().toVar();
|
|
3350
3376
|
return p(n.transmission.greaterThan(0), () => {
|
|
3351
3377
|
r.mulAssign(2);
|
|
3352
3378
|
}), p(n.roughness.lessThan(.1), () => {
|
|
3353
3379
|
r.mulAssign(1.5);
|
|
3354
3380
|
}), t.mul(r);
|
|
3355
|
-
}),
|
|
3381
|
+
}), ho = f(([e, t, n, r, i]) => {
|
|
3356
3382
|
let a = I(j(0), k(n, e.direction)), o = j(0).toVar();
|
|
3357
3383
|
return p(a.greaterThan(0), () => {
|
|
3358
3384
|
let t = e.intensity.mul(k(e.color, ai)), n = j(1).toVar();
|
|
@@ -3364,7 +3390,7 @@ var fo = f(([e, t, n, r, i, a, o, s]) => {
|
|
|
3364
3390
|
let s = j(1).div(j(1).add(j(i).mul(.5)));
|
|
3365
3391
|
o.assign(t.mul(a).mul(n).mul(s));
|
|
3366
3392
|
}), o;
|
|
3367
|
-
}),
|
|
3393
|
+
}), go = f(([e, t, n, r]) => {
|
|
3368
3394
|
let i = e.position.sub(t), a = te(i), o = a.mul(a), s = i.div(a), c = I(k(n, s), 0), l = j(0).toVar();
|
|
3369
3395
|
return p(c.greaterThan(0), () => {
|
|
3370
3396
|
let t = I(k(s, e.normal).negate(), 0);
|
|
@@ -3382,7 +3408,7 @@ var fo = f(([e, t, n, r, i, a, o, s]) => {
|
|
|
3382
3408
|
}), l.assign(i.mul(n).mul(c).mul(t).mul(a));
|
|
3383
3409
|
});
|
|
3384
3410
|
}), l;
|
|
3385
|
-
}),
|
|
3411
|
+
}), _o = f(([e, t, n, r]) => {
|
|
3386
3412
|
let i = e.position.sub(t), a = k(i, i), o = j(0).toVar();
|
|
3387
3413
|
return p(a.greaterThanEqual(.001), () => {
|
|
3388
3414
|
let t = he(a), s = i.div(t), c = I(j(0), k(n, s));
|
|
@@ -3399,7 +3425,7 @@ var fo = f(([e, t, n, r, i, a, o, s]) => {
|
|
|
3399
3425
|
}), o.assign(n.mul(t).mul(c).mul(i));
|
|
3400
3426
|
});
|
|
3401
3427
|
}), o;
|
|
3402
|
-
}),
|
|
3428
|
+
}), vo = f(([e, t, n, r]) => {
|
|
3403
3429
|
let i = e.position.sub(t), a = k(i, i), o = j(0).toVar();
|
|
3404
3430
|
return p(a.greaterThanEqual(.001), () => {
|
|
3405
3431
|
let t = i.div(he(a)), s = I(j(0), k(n, t));
|
|
@@ -3411,7 +3437,7 @@ var fo = f(([e, t, n, r, i, a, o, s]) => {
|
|
|
3411
3437
|
});
|
|
3412
3438
|
});
|
|
3413
3439
|
}), o;
|
|
3414
|
-
}),
|
|
3440
|
+
}), yo = f(([e, t, n, r]) => {
|
|
3415
3441
|
let i = I(j(0), k(t, e.direction)), a = w(!1).toVar();
|
|
3416
3442
|
return p(e.intensity.lessThanEqual(.001).or(i.lessThanEqual(.001)), () => {
|
|
3417
3443
|
a.assign(!0);
|
|
@@ -3427,11 +3453,11 @@ var fo = f(([e, t, n, r, i, a, o, s]) => {
|
|
|
3427
3453
|
});
|
|
3428
3454
|
f(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
3429
3455
|
let d = W(0).toVar();
|
|
3430
|
-
return p(
|
|
3431
|
-
let f =
|
|
3456
|
+
return p(yo(e, n, i, s).not(), () => {
|
|
3457
|
+
let f = mo(t, n, i), m = t.add(f), h = W(0).toVar(), g = j(1e6).toVar();
|
|
3432
3458
|
p(e.angle.greaterThan(.001), () => {
|
|
3433
3459
|
let t = U(J(c).toVar(), J(c).toVar()), n = e.angle.mul(.5);
|
|
3434
|
-
h.assign(
|
|
3460
|
+
h.assign(oo({
|
|
3435
3461
|
direction: e.direction,
|
|
3436
3462
|
halfAngle: n,
|
|
3437
3463
|
xi: t
|
|
@@ -3463,9 +3489,9 @@ f(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3463
3489
|
});
|
|
3464
3490
|
}), d;
|
|
3465
3491
|
}), f(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
|
|
3466
|
-
let m = W(0).toVar(), h =
|
|
3492
|
+
let m = W(0).toVar(), h = go(e, t, n, i);
|
|
3467
3493
|
return p(h.greaterThanEqual(.001), () => {
|
|
3468
|
-
let g =
|
|
3494
|
+
let g = mo(t, n, i), _ = t.add(g), v = i.roughness.greaterThan(.7).and(i.metalness.lessThan(.3)), y = i.roughness.lessThan(.3).or(i.metalness.greaterThan(.7)), b = c.equal(N(0));
|
|
3469
3495
|
p(b.or(v).or(h.greaterThan(.1).and(y.not())), () => {
|
|
3470
3496
|
let h = f(s, c, l), g = e.position.add(e.u.mul(h.x.sub(.5))).add(e.v.mul(h.y.sub(.5))).sub(t), v = k(g, g), y = he(v), x = g.div(y), S = I(j(0), k(n, x)), C = I(j(0), k(x, e.normal).negate());
|
|
3471
3497
|
p(S.greaterThan(0).and(C.greaterThan(0)), () => {
|
|
@@ -3480,7 +3506,7 @@ f(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3480
3506
|
});
|
|
3481
3507
|
}), p(b.or(y).and(o.pdf.greaterThan(0)), () => {
|
|
3482
3508
|
p(k(e.position.sub(_), o.direction).greaterThan(0), () => {
|
|
3483
|
-
let t =
|
|
3509
|
+
let t = so(e, _, o.direction);
|
|
3484
3510
|
p(t.greaterThan(0), () => {
|
|
3485
3511
|
let r = u(_, o.direction, t, l);
|
|
3486
3512
|
p(r.greaterThan(0), () => {
|
|
@@ -3502,7 +3528,7 @@ f(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3502
3528
|
return p(m.lessThanEqual(1e3), () => {
|
|
3503
3529
|
let a = f.div(m), o = k(n, a);
|
|
3504
3530
|
p(o.greaterThan(0), () => {
|
|
3505
|
-
let s = j(1).div(m.mul(m)), f = e.color.mul(e.intensity).mul(s), h =
|
|
3531
|
+
let s = j(1).div(m.mul(m)), f = e.color.mul(e.intensity).mul(s), h = mo(t, n, i), g = l(t.add(h), a, m.sub(.001), c);
|
|
3506
3532
|
p(g.greaterThan(0), () => {
|
|
3507
3533
|
let e = u(r, a, n, i);
|
|
3508
3534
|
d.assign(e.mul(f).mul(o).mul(g));
|
|
@@ -3516,7 +3542,7 @@ f(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3516
3542
|
p(o.greaterThan(0), () => {
|
|
3517
3543
|
let s = k(a.negate(), e.direction), f = E(e.angle);
|
|
3518
3544
|
p(s.greaterThanEqual(f), () => {
|
|
3519
|
-
let h = me(f, f.add(.1), s), g = j(1).div(m.mul(m)), _ = e.color.mul(e.intensity).mul(g).mul(h), v =
|
|
3545
|
+
let h = me(f, f.add(.1), s), g = j(1).div(m.mul(m)), _ = e.color.mul(e.intensity).mul(g).mul(h), v = mo(t, n, i), y = l(t.add(v), a, m.sub(.001), c);
|
|
3520
3546
|
p(y.greaterThan(0), () => {
|
|
3521
3547
|
let e = u(r, a, n, i);
|
|
3522
3548
|
d.assign(e.mul(_).mul(o).mul(y));
|
|
@@ -3527,8 +3553,8 @@ f(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3527
3553
|
});
|
|
3528
3554
|
//#endregion
|
|
3529
3555
|
//#region src/TSL/LightsSampling.js
|
|
3530
|
-
var
|
|
3531
|
-
f(() =>
|
|
3556
|
+
var bo = 2 * Qr;
|
|
3557
|
+
f(() => Za({
|
|
3532
3558
|
valid: w(!1),
|
|
3533
3559
|
direction: W(0, 1, 0),
|
|
3534
3560
|
emission: W(0),
|
|
@@ -3536,7 +3562,7 @@ f(() => Xa({
|
|
|
3536
3562
|
pdf: j(0),
|
|
3537
3563
|
lightType: N(2)
|
|
3538
3564
|
}));
|
|
3539
|
-
var
|
|
3565
|
+
var xo = f(([e, t, n, r]) => {
|
|
3540
3566
|
let i = w(!1).toVar(), a = W(0, 1, 0).toVar(), o = W(0).toVar(), s = j(0).toVar(), c = j(0).toVar(), l = N(2).toVar();
|
|
3541
3567
|
return p(e.area.greaterThan(0), () => {
|
|
3542
3568
|
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 = k(u, u).toVar();
|
|
@@ -3544,7 +3570,7 @@ var bo = f(([e, t, n, r]) => {
|
|
|
3544
3570
|
let t = he(d).toVar(), n = u.div(t).toVar(), f = R(D(e.u, e.v)).toVar(), p = k(n.negate(), f).toVar();
|
|
3545
3571
|
l.assign(N(1)), o.assign(e.color.mul(e.intensity)), s.assign(t), a.assign(n), c.assign(d.div(I(e.area.mul(I(p, .001)), 1e-10)).mul(r)), i.assign(p.greaterThan(0));
|
|
3546
3572
|
});
|
|
3547
|
-
}),
|
|
3573
|
+
}), Za({
|
|
3548
3574
|
valid: i,
|
|
3549
3575
|
direction: a,
|
|
3550
3576
|
emission: o,
|
|
@@ -3556,12 +3582,12 @@ var bo = f(([e, t, n, r]) => {
|
|
|
3556
3582
|
f(([e, t, n, r]) => {
|
|
3557
3583
|
let i = w(!1).toVar(), a = W(0, 1, 0).toVar(), o = W(0).toVar(), s = j(0).toVar(), c = j(0).toVar(), l = N(2).toVar();
|
|
3558
3584
|
return p(e.area.greaterThan(0), () => {
|
|
3559
|
-
let u = j(.5).mul(he(n.x)).toVar(), d = n.y.mul(
|
|
3585
|
+
let u = j(.5).mul(he(n.x)).toVar(), d = n.y.mul(bo).toVar(), f = u.mul(E(d)).toVar(), m = u.mul(pe(d)).toVar(), h = e.position.add(e.u.mul(f)).add(e.v.mul(m)).toVar().sub(t).toVar(), g = k(h, h).toVar();
|
|
3560
3586
|
p(g.greaterThanEqual(1e-10), () => {
|
|
3561
3587
|
let t = he(g).toVar(), n = h.div(t).toVar(), u = R(D(e.u, e.v)).toVar(), d = k(n.negate(), u).toVar();
|
|
3562
3588
|
l.assign(N(1)), o.assign(e.color.mul(e.intensity)), s.assign(t), a.assign(n), c.assign(g.div(I(e.area.mul(I(d, .001)), 1e-10)).mul(r)), i.assign(d.greaterThan(0));
|
|
3563
3589
|
});
|
|
3564
|
-
}),
|
|
3590
|
+
}), Za({
|
|
3565
3591
|
valid: i,
|
|
3566
3592
|
direction: a,
|
|
3567
3593
|
emission: o,
|
|
@@ -3570,23 +3596,23 @@ f(([e, t, n, r]) => {
|
|
|
3570
3596
|
lightType: l
|
|
3571
3597
|
});
|
|
3572
3598
|
});
|
|
3573
|
-
var
|
|
3599
|
+
var So = f(([e, t, n, r]) => {
|
|
3574
3600
|
let i = w(!1).toVar(), a = W(0, 1, 0).toVar(), o = W(0).toVar(), s = j(0).toVar(), c = j(0).toVar(), l = N(3).toVar(), u = e.position.sub(t).toVar(), d = te(u).toVar();
|
|
3575
3601
|
return p(d.greaterThanEqual(1e-10), () => {
|
|
3576
3602
|
let t = u.div(d).toVar(), n = k(t.negate(), e.direction).toVar(), l = E(e.angle).toVar();
|
|
3577
3603
|
a.assign(t), s.assign(d), c.assign(r), i.assign(n.greaterThanEqual(l)), p(i, () => {
|
|
3578
|
-
let t =
|
|
3604
|
+
let t = ao({
|
|
3579
3605
|
coneCosine: l,
|
|
3580
3606
|
penumbraCosine: E(e.angle.mul(j(1).sub(e.penumbra))).max(l.add(1e-5)).toVar(),
|
|
3581
3607
|
angleCosine: n
|
|
3582
|
-
}), r =
|
|
3608
|
+
}), r = io({
|
|
3583
3609
|
lightDistance: d,
|
|
3584
3610
|
cutoffDistance: e.distance,
|
|
3585
3611
|
decayExponent: e.decay
|
|
3586
3612
|
});
|
|
3587
3613
|
o.assign(e.color.mul(e.intensity).mul(r).mul(t));
|
|
3588
3614
|
});
|
|
3589
|
-
}),
|
|
3615
|
+
}), Za({
|
|
3590
3616
|
valid: i,
|
|
3591
3617
|
direction: a,
|
|
3592
3618
|
emission: o,
|
|
@@ -3594,16 +3620,16 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3594
3620
|
pdf: c,
|
|
3595
3621
|
lightType: l
|
|
3596
3622
|
});
|
|
3597
|
-
}),
|
|
3623
|
+
}), Co = f(([e, t, n]) => {
|
|
3598
3624
|
let r = w(!1).toVar(), i = W(0, 1, 0).toVar(), a = W(0).toVar(), o = j(0).toVar(), s = j(0).toVar(), c = N(2).toVar(), l = e.position.sub(t).toVar(), u = te(l).toVar();
|
|
3599
3625
|
return p(u.greaterThanEqual(1e-10), () => {
|
|
3600
|
-
let t = l.div(u).toVar(), d =
|
|
3626
|
+
let t = l.div(u).toVar(), d = io({
|
|
3601
3627
|
lightDistance: u,
|
|
3602
3628
|
cutoffDistance: e.distance,
|
|
3603
3629
|
decayExponent: e.decay
|
|
3604
3630
|
});
|
|
3605
3631
|
c.assign(N(2)), i.assign(t), o.assign(u), a.assign(e.color.mul(e.intensity).mul(d)), s.assign(n), r.assign(w(!0));
|
|
3606
|
-
}),
|
|
3632
|
+
}), Za({
|
|
3607
3633
|
valid: r,
|
|
3608
3634
|
direction: i,
|
|
3609
3635
|
emission: a,
|
|
@@ -3611,7 +3637,7 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3611
3637
|
pdf: s,
|
|
3612
3638
|
lightType: c
|
|
3613
3639
|
});
|
|
3614
|
-
}),
|
|
3640
|
+
}), wo = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, h]) => {
|
|
3615
3641
|
let _ = w(!1).toVar(), v = W(0, 1, 0).toVar(), y = W(0).toVar(), b = j(0).toVar(), x = j(0).toVar(), S = N(2).toVar(), C = s.add(l).add(d).add(h).toVar();
|
|
3616
3642
|
return p(C.greaterThan(N(0)), () => {
|
|
3617
3643
|
let T = j(0).toVar(), O = N(0).toVar();
|
|
@@ -3623,8 +3649,8 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3623
3649
|
condition: "<"
|
|
3624
3650
|
}, ({ i: r }) => {
|
|
3625
3651
|
p(O.lessThan(N(16)), () => {
|
|
3626
|
-
let a =
|
|
3627
|
-
T.addAssign(
|
|
3652
|
+
let a = qa.wrap($a(o, r));
|
|
3653
|
+
T.addAssign(ho(a, e, t, n, i)), O.addAssign(1);
|
|
3628
3654
|
});
|
|
3629
3655
|
});
|
|
3630
3656
|
}), p(l.greaterThan(N(0)), () => {
|
|
@@ -3635,7 +3661,7 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3635
3661
|
condition: "<"
|
|
3636
3662
|
}, ({ i: r }) => {
|
|
3637
3663
|
p(O.lessThan(N(16)), () => {
|
|
3638
|
-
let i =
|
|
3664
|
+
let i = Ja.wrap(eo(c, r)), a = z(i.intensity.greaterThan(0), go(i, e, t, n), j(0));
|
|
3639
3665
|
T.addAssign(a), O.addAssign(1);
|
|
3640
3666
|
});
|
|
3641
3667
|
});
|
|
@@ -3647,8 +3673,8 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3647
3673
|
condition: "<"
|
|
3648
3674
|
}, ({ i: r }) => {
|
|
3649
3675
|
p(O.lessThan(N(16)), () => {
|
|
3650
|
-
let i =
|
|
3651
|
-
T.addAssign(
|
|
3676
|
+
let i = Ya.wrap(to(u, r));
|
|
3677
|
+
T.addAssign(_o(i, e, t, n)), O.addAssign(1);
|
|
3652
3678
|
});
|
|
3653
3679
|
});
|
|
3654
3680
|
}), p(h.greaterThan(N(0)), () => {
|
|
@@ -3659,8 +3685,8 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3659
3685
|
condition: "<"
|
|
3660
3686
|
}, ({ i: r }) => {
|
|
3661
3687
|
p(O.lessThan(N(16)), () => {
|
|
3662
|
-
let i =
|
|
3663
|
-
T.addAssign(
|
|
3688
|
+
let i = Xa.wrap(no(f, r));
|
|
3689
|
+
T.addAssign(vo(i, e, t, n)), O.addAssign(1);
|
|
3664
3690
|
});
|
|
3665
3691
|
});
|
|
3666
3692
|
}), p(T.lessThanEqual(0), () => {
|
|
@@ -3669,32 +3695,32 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3669
3695
|
let i = w(!1).toVar(), m = N(0).toVar();
|
|
3670
3696
|
p(s.greaterThan(N(0)), () => {
|
|
3671
3697
|
p(i.not().and(t.greaterThanEqual(m)).and(t.lessThan(m.add(s))), () => {
|
|
3672
|
-
let e =
|
|
3698
|
+
let e = qa.wrap($a(o, t.sub(m)));
|
|
3673
3699
|
p(e.intensity.greaterThan(0), () => {
|
|
3674
3700
|
v.assign(R(e.direction)), y.assign(e.color.mul(e.intensity)), b.assign(1e6), S.assign(N(0)), _.assign(w(!0)), i.assign(w(!0));
|
|
3675
3701
|
});
|
|
3676
3702
|
}), m.addAssign(s);
|
|
3677
3703
|
}), p(l.greaterThan(N(0)), () => {
|
|
3678
3704
|
p(i.not().and(t.greaterThanEqual(m)).and(t.lessThan(m.add(l))), () => {
|
|
3679
|
-
let o =
|
|
3705
|
+
let o = Ja.wrap(eo(c, t.sub(m)));
|
|
3680
3706
|
p(o.intensity.greaterThan(0), () => {
|
|
3681
|
-
let t = U(r.y, J(a)).toVar(), s =
|
|
3707
|
+
let t = U(r.y, J(a)).toVar(), s = Za.wrap(xo(o, e, t, n));
|
|
3682
3708
|
_.assign(s.valid), v.assign(s.direction), y.assign(s.emission), b.assign(s.distance), x.assign(s.pdf), S.assign(s.lightType), i.assign(w(!0));
|
|
3683
3709
|
});
|
|
3684
3710
|
}), m.addAssign(l);
|
|
3685
3711
|
}), p(d.greaterThan(N(0)), () => {
|
|
3686
3712
|
p(i.not().and(t.greaterThanEqual(m)).and(t.lessThan(m.add(d))), () => {
|
|
3687
|
-
let r =
|
|
3713
|
+
let r = Ya.wrap(to(u, t.sub(m)));
|
|
3688
3714
|
p(r.intensity.greaterThan(0), () => {
|
|
3689
|
-
let t =
|
|
3715
|
+
let t = Za.wrap(Co(r, e, n));
|
|
3690
3716
|
_.assign(t.valid), v.assign(t.direction), y.assign(t.emission), b.assign(t.distance), x.assign(t.pdf), S.assign(t.lightType), i.assign(w(!0));
|
|
3691
3717
|
});
|
|
3692
3718
|
}), m.addAssign(d);
|
|
3693
3719
|
}), p(h.greaterThan(N(0)), () => {
|
|
3694
3720
|
p(i.not().and(t.greaterThanEqual(m)).and(t.lessThan(m.add(h))), () => {
|
|
3695
|
-
let o =
|
|
3721
|
+
let o = Xa.wrap(no(f, t.sub(m)));
|
|
3696
3722
|
p(o.intensity.greaterThan(0), () => {
|
|
3697
|
-
let t = U(r.y, J(a)).toVar(), s =
|
|
3723
|
+
let t = U(r.y, J(a)).toVar(), s = Za.wrap(So(o, e, t, n));
|
|
3698
3724
|
_.assign(s.valid), v.assign(s.direction), y.assign(s.emission), b.assign(s.distance), x.assign(s.pdf), S.assign(s.lightType), i.assign(w(!0));
|
|
3699
3725
|
});
|
|
3700
3726
|
});
|
|
@@ -3711,7 +3737,7 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3711
3737
|
condition: "<"
|
|
3712
3738
|
}, ({ i: r }) => {
|
|
3713
3739
|
p(O.lessThan(N(16)).and(A.lessThan(N(0))), () => {
|
|
3714
|
-
let a =
|
|
3740
|
+
let a = ho(qa.wrap($a(o, r)), e, t, n, i).toVar(), s = k.toVar();
|
|
3715
3741
|
k.addAssign(a), p(C.greaterThan(s).and(C.lessThanEqual(k)), () => {
|
|
3716
3742
|
A.assign(0), M.assign(r), ee.assign(a);
|
|
3717
3743
|
});
|
|
@@ -3725,7 +3751,7 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3725
3751
|
condition: "<"
|
|
3726
3752
|
}, ({ i: r }) => {
|
|
3727
3753
|
p(O.lessThan(N(16)).and(A.lessThan(N(0))), () => {
|
|
3728
|
-
let i =
|
|
3754
|
+
let i = Ja.wrap(eo(c, r)), a = z(i.intensity.greaterThan(0), go(i, e, t, n), j(0)).toVar(), o = k.toVar();
|
|
3729
3755
|
k.addAssign(a), p(C.greaterThan(o).and(C.lessThanEqual(k)), () => {
|
|
3730
3756
|
A.assign(1), M.assign(r), ee.assign(a);
|
|
3731
3757
|
});
|
|
@@ -3739,7 +3765,7 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3739
3765
|
condition: "<"
|
|
3740
3766
|
}, ({ i: r }) => {
|
|
3741
3767
|
p(O.lessThan(N(16)).and(A.lessThan(N(0))), () => {
|
|
3742
|
-
let i =
|
|
3768
|
+
let i = _o(Ya.wrap(to(u, r)), e, t, n).toVar(), a = k.toVar();
|
|
3743
3769
|
k.addAssign(i), p(C.greaterThan(a).and(C.lessThanEqual(k)), () => {
|
|
3744
3770
|
A.assign(2), M.assign(r), ee.assign(i);
|
|
3745
3771
|
});
|
|
@@ -3753,7 +3779,7 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3753
3779
|
condition: "<"
|
|
3754
3780
|
}, ({ i: r }) => {
|
|
3755
3781
|
p(O.lessThan(N(16)).and(A.lessThan(N(0))), () => {
|
|
3756
|
-
let i =
|
|
3782
|
+
let i = vo(Xa.wrap(no(f, r)), e, t, n).toVar(), a = k.toVar();
|
|
3757
3783
|
k.addAssign(i), p(C.greaterThan(a).and(C.lessThanEqual(k)), () => {
|
|
3758
3784
|
A.assign(3), M.assign(r), ee.assign(i);
|
|
3759
3785
|
});
|
|
@@ -3762,25 +3788,25 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3762
3788
|
});
|
|
3763
3789
|
let P = ee.div(I(T, 1e-10)).toVar();
|
|
3764
3790
|
p(A.equal(N(0)).and(M.greaterThanEqual(N(0))), () => {
|
|
3765
|
-
let e =
|
|
3791
|
+
let e = qa.wrap($a(o, M)), t = R(e.direction).toVar(), n = j(1).toVar();
|
|
3766
3792
|
p(e.angle.greaterThan(0), () => {
|
|
3767
|
-
let i = E(e.angle.mul(.5)).toVar(), o = L(i, j(1), r.y).toVar(), s = he(I(j(0), j(1).sub(o.mul(o)))).toVar(), c = j(
|
|
3793
|
+
let i = E(e.angle.mul(.5)).toVar(), o = L(i, j(1), r.y).toVar(), s = he(I(j(0), j(1).sub(o.mul(o)))).toVar(), c = j(bo).mul(J(a)).toVar(), l = R(e.direction).toVar(), u = R(D(z(g(l.x).greaterThan(.9), W(0, 1, 0), W(1, 0, 0)), l)).toVar(), d = D(l, u).toVar();
|
|
3768
3794
|
t.assign(R(l.mul(o).add(u.mul(E(c)).add(d.mul(pe(c))).mul(s))));
|
|
3769
|
-
let f = j(
|
|
3795
|
+
let f = j(bo).mul(I(j(1).sub(i), 1e-10)).toVar();
|
|
3770
3796
|
n.assign(j(1).div(f));
|
|
3771
3797
|
}), v.assign(t), y.assign(e.color.mul(e.intensity)), b.assign(1e6), x.assign(n.mul(P)), S.assign(N(0)), _.assign(w(!0));
|
|
3772
3798
|
}), p(A.equal(N(1)).and(M.greaterThanEqual(N(0))), () => {
|
|
3773
|
-
let t =
|
|
3799
|
+
let t = Ja.wrap(eo(c, M)), n = U(r.y, J(a)).toVar(), i = Za.wrap(xo(t, e, n, P));
|
|
3774
3800
|
_.assign(i.valid), v.assign(i.direction), y.assign(i.emission), b.assign(i.distance), x.assign(i.pdf), S.assign(i.lightType);
|
|
3775
3801
|
}), p(A.equal(N(2)).and(M.greaterThanEqual(N(0))), () => {
|
|
3776
|
-
let t =
|
|
3802
|
+
let t = Ya.wrap(to(u, M)), n = Za.wrap(Co(t, e, P));
|
|
3777
3803
|
_.assign(n.valid), v.assign(n.direction), y.assign(n.emission), b.assign(n.distance), x.assign(n.pdf), S.assign(n.lightType);
|
|
3778
3804
|
}), p(A.equal(N(3)).and(M.greaterThanEqual(N(0))), () => {
|
|
3779
|
-
let t =
|
|
3805
|
+
let t = Xa.wrap(no(f, M)), n = U(r.y, J(a)).toVar(), i = Za.wrap(So(t, e, n, P));
|
|
3780
3806
|
_.assign(i.valid), v.assign(i.direction), y.assign(i.emission), b.assign(i.distance), x.assign(i.pdf), S.assign(i.lightType);
|
|
3781
3807
|
});
|
|
3782
3808
|
});
|
|
3783
|
-
}),
|
|
3809
|
+
}), Za({
|
|
3784
3810
|
valid: _,
|
|
3785
3811
|
direction: v,
|
|
3786
3812
|
emission: y,
|
|
@@ -3788,7 +3814,7 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3788
3814
|
pdf: x,
|
|
3789
3815
|
lightType: S
|
|
3790
3816
|
});
|
|
3791
|
-
}),
|
|
3817
|
+
}), To = f(([e, t, n, r]) => {
|
|
3792
3818
|
let i = I(j(0), k(n, e)).toVar(), a = I(j(0), k(n, t)).toVar(), o = R(e.add(t)).toVar(), s = I(j(0), k(n, o)).toVar();
|
|
3793
3819
|
I(j(0), k(e, o)).toVar();
|
|
3794
3820
|
let c = j(1).sub(r.metalness).mul(j(1).sub(r.transmission)).toVar(), l = j(1).sub(c.mul(j(1).sub(r.metalness))).toVar(), u = c.add(l).toVar(), d = j(0).toVar();
|
|
@@ -3798,7 +3824,7 @@ var xo = f(([e, t, n, r]) => {
|
|
|
3798
3824
|
d.addAssign(c.mul(a).mul($r));
|
|
3799
3825
|
}), p(l.greaterThan(0).and(a.greaterThan(0)), () => {
|
|
3800
3826
|
let e = I(r.roughness, .02).toVar();
|
|
3801
|
-
d.addAssign(l.mul(
|
|
3827
|
+
d.addAssign(l.mul(xa(s, i, e)));
|
|
3802
3828
|
});
|
|
3803
3829
|
}), I(d, 1e-8);
|
|
3804
3830
|
});
|
|
@@ -3809,13 +3835,13 @@ f(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3809
3835
|
p(g.greaterThan(0), () => {
|
|
3810
3836
|
let f = k(r, o).toVar();
|
|
3811
3837
|
p(f.greaterThan(0), () => {
|
|
3812
|
-
p(
|
|
3838
|
+
p(ro({
|
|
3813
3839
|
direction: o,
|
|
3814
3840
|
surfaceNormal: r
|
|
3815
3841
|
}), () => {
|
|
3816
|
-
let m =
|
|
3842
|
+
let m = po(a, o, n.sub(.001), s, Fi, c, l, u);
|
|
3817
3843
|
p(m.greaterThan(0), () => {
|
|
3818
|
-
let n =
|
|
3844
|
+
let n = Ua(t, o, r, i), a = h.div(I(e.area.mul(g), ti)).toVar(), s = To(t, o, r, i).toVar(), c = z(s.greaterThan(0), pi({
|
|
3819
3845
|
pdf1: a,
|
|
3820
3846
|
pdf2: s
|
|
3821
3847
|
}), j(1)).toVar(), l = e.color.mul(e.intensity).toVar();
|
|
@@ -3826,37 +3852,37 @@ f(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3826
3852
|
});
|
|
3827
3853
|
}), d;
|
|
3828
3854
|
});
|
|
3829
|
-
var
|
|
3830
|
-
let
|
|
3855
|
+
var Eo = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, h, g, _, v, y, b, x, S, C, T, E, D, O, A, M, ee]) => {
|
|
3856
|
+
let P = W(0).toVar(), te = e.add(t.mul(.001)).toVar();
|
|
3831
3857
|
return p(n.emissiveIntensity.lessThanEqual(10), () => {
|
|
3832
|
-
let s = W(1).toVar(),
|
|
3833
|
-
p(
|
|
3834
|
-
|
|
3835
|
-
}), p(
|
|
3836
|
-
|
|
3837
|
-
}), p(
|
|
3838
|
-
|
|
3839
|
-
});
|
|
3840
|
-
let
|
|
3841
|
-
p(
|
|
3842
|
-
de.assign(w(!0));
|
|
3843
|
-
}).ElseIf(ne, () => {
|
|
3858
|
+
let s = W(1).toVar(), ne = Xr.wrap(xi(n.roughness, n.metalness, n.transmission, c, s)), F = ne.useBRDFSampling.toVar(), re = ne.useLightSampling.toVar(), ie = ne.brdfWeight.toVar(), L = ne.lightWeight.toVar(), oe = d.add(h).add(_).add(y).toVar(), R = j(.001).mul(j(1).add(j(c).mul(.5))).toVar(), se = oe.greaterThan(N(0)).toVar(), ce = j(0).toVar();
|
|
3859
|
+
p(re.and(se), () => {
|
|
3860
|
+
ce.addAssign(L);
|
|
3861
|
+
}), p(F, () => {
|
|
3862
|
+
ce.addAssign(ie);
|
|
3863
|
+
}), p(ce.lessThanEqual(0), () => {
|
|
3864
|
+
ce.assign(1), F.assign(w(!0)), ie.assign(1);
|
|
3865
|
+
});
|
|
3866
|
+
let le = J(l).toVar(), ue = J(l).toVar(), de = le, fe = w(!1).toVar(), pe = w(!1).toVar(), me = z(se, L, j(0)).toVar(), he = j(1).div(I(ce, 1e-10)).toVar(), ge = me.mul(he).toVar();
|
|
3867
|
+
p(de.lessThan(ge).and(re).and(se), () => {
|
|
3844
3868
|
fe.assign(w(!0));
|
|
3845
|
-
}).ElseIf(
|
|
3846
|
-
|
|
3847
|
-
})
|
|
3848
|
-
|
|
3869
|
+
}).ElseIf(F, () => {
|
|
3870
|
+
pe.assign(w(!0));
|
|
3871
|
+
}).ElseIf(se, () => {
|
|
3872
|
+
fe.assign(w(!0));
|
|
3873
|
+
}), p(fe, () => {
|
|
3874
|
+
let e = U(ue, J(l)).toVar(), i = Za.wrap(wo(te, t, n, e, c, l, u, d, f, h, g, _, v, y));
|
|
3849
3875
|
p(i.valid.and(i.pdf.greaterThan(0)), () => {
|
|
3850
3876
|
let e = I(j(0), k(t, i.direction)).toVar(), a = i.emission.x.add(i.emission.y).add(i.emission.z).toVar();
|
|
3851
|
-
p(e.greaterThan(0).and(a.mul(e).greaterThan(
|
|
3877
|
+
p(e.greaterThan(0).and(a.mul(e).greaterThan(R)).and(ro({
|
|
3852
3878
|
direction: i.direction,
|
|
3853
3879
|
surfaceNormal: t
|
|
3854
3880
|
})), () => {
|
|
3855
|
-
let a = ae(i.distance.sub(.001), j(1e3)).toVar(), o =
|
|
3881
|
+
let a = ae(i.distance.sub(.001), j(1e3)).toVar(), o = po(te, i.direction, a, l, Fi, b, x, S);
|
|
3856
3882
|
p(o.greaterThan(0), () => {
|
|
3857
|
-
let a =
|
|
3858
|
-
p(s.greaterThan(0).and(
|
|
3859
|
-
let e = i.pdf.mul(
|
|
3883
|
+
let a = Ua(r, i.direction, t, n), s = To(r, i.direction, t, n).toVar(), c = j(1).toVar();
|
|
3884
|
+
p(s.greaterThan(0).and(F), () => {
|
|
3885
|
+
let e = i.pdf.mul(L).toVar(), t = s.mul(ie).toVar();
|
|
3860
3886
|
p(i.lightType.equal(N(1)), () => {
|
|
3861
3887
|
c.assign(pi({
|
|
3862
3888
|
pdf1: e,
|
|
@@ -3865,14 +3891,14 @@ var To = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, h, g, _, v, y, b, x, S, C, T
|
|
|
3865
3891
|
});
|
|
3866
3892
|
});
|
|
3867
3893
|
let l = i.emission.mul(a).mul(e).mul(o).mul(c).div(I(i.pdf, 1e-10));
|
|
3868
|
-
|
|
3894
|
+
P.addAssign(l.mul(ce).div(I(L, 1e-10)));
|
|
3869
3895
|
});
|
|
3870
3896
|
});
|
|
3871
3897
|
});
|
|
3872
|
-
}), p(
|
|
3873
|
-
p(a.greaterThan(0).and(
|
|
3898
|
+
}), p(pe, () => {
|
|
3899
|
+
p(a.greaterThan(0).and(F), () => {
|
|
3874
3900
|
let r = I(j(0), k(t, i)).toVar();
|
|
3875
|
-
p(r.greaterThan(0).and(
|
|
3901
|
+
p(r.greaterThan(0).and(ro({
|
|
3876
3902
|
direction: i,
|
|
3877
3903
|
surfaceNormal: t
|
|
3878
3904
|
})), () => {
|
|
@@ -3884,11 +3910,11 @@ var To = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, h, g, _, v, y, b, x, S, C, T
|
|
|
3884
3910
|
type: "int",
|
|
3885
3911
|
condition: "<"
|
|
3886
3912
|
}, ({ i: r }) => {
|
|
3887
|
-
let a =
|
|
3913
|
+
let a = Ja.wrap(eo(f, r));
|
|
3888
3914
|
p(a.intensity.greaterThan(0), () => {
|
|
3889
|
-
let o =
|
|
3890
|
-
p(o.greaterThanEqual(
|
|
3891
|
-
p(
|
|
3915
|
+
let o = go(a, e, t, n).toVar();
|
|
3916
|
+
p(o.greaterThanEqual(R), () => {
|
|
3917
|
+
p(so(a, te, i).toVar().greaterThan(0), () => {
|
|
3892
3918
|
p(o.greaterThan(c), () => {
|
|
3893
3919
|
c.assign(o), u.assign(r);
|
|
3894
3920
|
}), s.assign(w(!0));
|
|
@@ -3896,19 +3922,19 @@ var To = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, h, g, _, v, y, b, x, S, C, T
|
|
|
3896
3922
|
});
|
|
3897
3923
|
});
|
|
3898
3924
|
}), p(s.and(u.greaterThanEqual(N(0))), () => {
|
|
3899
|
-
let e =
|
|
3925
|
+
let e = Ja.wrap(eo(f, u)), t = so(e, te, i).toVar();
|
|
3900
3926
|
p(t.greaterThan(0), () => {
|
|
3901
|
-
let n =
|
|
3927
|
+
let n = po(te, i, ae(t.sub(.001), j(1e3)).toVar(), l, Fi, b, x, S);
|
|
3902
3928
|
p(n.greaterThan(0), () => {
|
|
3903
3929
|
let s = I(j(0), k(i, e.normal).negate()).toVar();
|
|
3904
3930
|
p(s.greaterThan(0), () => {
|
|
3905
3931
|
let i = t.mul(t).toVar().div(I(e.area.mul(s), ti)).toVar();
|
|
3906
|
-
i.divAssign(I(j(
|
|
3932
|
+
i.divAssign(I(j(oe), 1));
|
|
3907
3933
|
let c = pi({
|
|
3908
|
-
pdf1: a.mul(
|
|
3909
|
-
pdf2: i.mul(
|
|
3934
|
+
pdf1: a.mul(ie).toVar(),
|
|
3935
|
+
pdf2: i.mul(L).toVar()
|
|
3910
3936
|
}).toVar(), l = e.color.mul(e.intensity).toVar().mul(o).mul(r).mul(n).mul(c).div(I(a, 1e-10));
|
|
3911
|
-
|
|
3937
|
+
P.addAssign(l.mul(ce).div(I(ie, 1e-10)));
|
|
3912
3938
|
});
|
|
3913
3939
|
});
|
|
3914
3940
|
});
|
|
@@ -3916,37 +3942,37 @@ var To = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, h, g, _, v, y, b, x, S, C, T
|
|
|
3916
3942
|
});
|
|
3917
3943
|
});
|
|
3918
3944
|
});
|
|
3919
|
-
}), p(
|
|
3920
|
-
let e = U(J(l).toVar(), J(l).toVar()).toVar(), i = W(0).toVar(), a =
|
|
3945
|
+
}), p(ee, () => {
|
|
3946
|
+
let e = U(J(l).toVar(), J(l).toVar()).toVar(), i = W(0).toVar(), a = Vi(C, D, E, T, O, A, M, e, i).toVar(), o = a.xyz.toVar(), s = a.w.toVar();
|
|
3921
3947
|
p(s.greaterThan(0), () => {
|
|
3922
3948
|
let e = I(j(0), k(t, o)).toVar();
|
|
3923
|
-
p(e.greaterThan(0).and(
|
|
3949
|
+
p(e.greaterThan(0).and(ro({
|
|
3924
3950
|
direction: o,
|
|
3925
3951
|
surfaceNormal: t
|
|
3926
3952
|
})), () => {
|
|
3927
|
-
let a =
|
|
3953
|
+
let a = po(te, o, j(1e3), l, Fi, b, x, S);
|
|
3928
3954
|
p(a.greaterThan(0), () => {
|
|
3929
|
-
let c =
|
|
3955
|
+
let c = Ua(r, o, t, n), l = To(r, o, t, n).toVar(), u = z(l.greaterThan(0), mi({
|
|
3930
3956
|
pdf1: s,
|
|
3931
3957
|
pdf2: l
|
|
3932
3958
|
}), j(1)).toVar(), d = i.mul(c).mul(e).mul(a).mul(u).div(I(s, 1e-10));
|
|
3933
|
-
|
|
3959
|
+
P.addAssign(d);
|
|
3934
3960
|
});
|
|
3935
3961
|
});
|
|
3936
3962
|
});
|
|
3937
3963
|
});
|
|
3938
|
-
}),
|
|
3939
|
-
}),
|
|
3964
|
+
}), P;
|
|
3965
|
+
}), Do = f(([e, t, n, r, i, a]) => {
|
|
3940
3966
|
let o = z(a, r, j(1).div(r)).toVar(), s = e.add(t.mul(o)).toVar(), c = k(s, s).toVar(), l = z(c.greaterThan(ti), s.div(he(c)), n).toVar();
|
|
3941
3967
|
p(k(l, n).lessThan(0), () => {
|
|
3942
3968
|
l.assign(l.negate());
|
|
3943
3969
|
});
|
|
3944
|
-
let u = g(k(e, l)).toVar(), d = g(k(t, l)).toVar(), f = g(k(n, l)).toVar(), m =
|
|
3970
|
+
let u = g(k(e, l)).toVar(), d = g(k(t, l)).toVar(), f = g(k(n, l)).toVar(), m = ma(f, i).toVar(), h = u.add(d.mul(o)).toVar(), _ = h.mul(h).toVar(), v = d.mul(o).mul(o).div(I(_, ti)).toVar();
|
|
3945
3971
|
return m.mul(f).mul(v);
|
|
3946
|
-
}),
|
|
3972
|
+
}), Oo = f(([e, t, n, r]) => {
|
|
3947
3973
|
let i = e.add(t).toVar(), a = k(i, i).toVar();
|
|
3948
|
-
return
|
|
3949
|
-
}),
|
|
3974
|
+
return xa(I(k(n, z(a.greaterThan(ti), i.div(he(a)), n).toVar()), 0).toVar(), I(k(n, e), 0).toVar(), r);
|
|
3975
|
+
}), ko = f(([e, t, n, r, i]) => {
|
|
3950
3976
|
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(), m = a.add(s).add(l).add(d).toVar();
|
|
3951
3977
|
return p(m.lessThan(.001), () => {
|
|
3952
3978
|
a.assign(0), s.assign(1), l.assign(0), d.assign(0), m.assign(1), o.assign(w(!1)), c.assign(w(!0)), u.assign(w(!1)), f.assign(w(!1));
|
|
@@ -3966,7 +3992,7 @@ var To = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, h, g, _, v, y, b, x, S, C, T
|
|
|
3966
3992
|
useTransmission: u,
|
|
3967
3993
|
useClearcoat: f
|
|
3968
3994
|
});
|
|
3969
|
-
}),
|
|
3995
|
+
}), Ao = f(([e, t]) => {
|
|
3970
3996
|
let n = N(2).toVar(), r = j(1).toVar(), i = j(0).toVar(), a = w(!1).toVar();
|
|
3971
3997
|
return p(e.useSpecular.and(a.not()), () => {
|
|
3972
3998
|
i.addAssign(e.specularWeight), p(t.lessThan(i), () => {
|
|
@@ -3985,49 +4011,49 @@ var To = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, h, g, _, v, y, b, x, S, C, T
|
|
|
3985
4011
|
}), p(a.not(), () => {
|
|
3986
4012
|
n.assign(2), r.assign(z(e.useDiffuse, e.diffuseWeight, j(1)));
|
|
3987
4013
|
}), U(j(n), r);
|
|
3988
|
-
}),
|
|
3989
|
-
let
|
|
4014
|
+
}), jo = f(([e]) => I(e, 0).mul($r)), Mo = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, m, h, _, v, y]) => {
|
|
4015
|
+
let b = W(0).toVar(), x = W(0).toVar(), S = j(0).toVar(), C = j(0).toVar(), w = j(0).toVar();
|
|
3990
4016
|
return p(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(), () => {
|
|
3991
4017
|
let e = U(J(c).toVar(), J(c).toVar()).toVar();
|
|
3992
|
-
|
|
4018
|
+
b.assign(ka(t, e)), x.assign(n.color.xyz), S.assign(1), C.assign(1);
|
|
3993
4019
|
}).Else(() => {
|
|
3994
|
-
let o = Yr.wrap(
|
|
4020
|
+
let o = Yr.wrap(ko(l, s, n, v, y).toVar()), u = J(c).toVar(), d = U(J(c).toVar(), J(c).toVar()).toVar(), f = Ao(o, u).toVar(), m = N(f.x).toVar();
|
|
3995
4021
|
f.y.toVar();
|
|
3996
|
-
let h = W(0).toVar(),
|
|
4022
|
+
let h = W(0).toVar(), _ = j(0).toVar(), T = W(0).toVar();
|
|
3997
4023
|
p(m.equal(N(1)), () => {
|
|
3998
|
-
h.assign(r),
|
|
4024
|
+
h.assign(r), _.assign(i), T.assign(a);
|
|
3999
4025
|
}).ElseIf(m.equal(N(2)), () => {
|
|
4000
|
-
h.assign(
|
|
4026
|
+
h.assign(ka(t, d)), _.assign(jo(I(k(t, h), 0))), T.assign(Ua(e, h, t, n));
|
|
4001
4027
|
}).ElseIf(m.equal(N(3)), () => {
|
|
4002
|
-
let r = k(e, t).greaterThan(0).toVar(), i =
|
|
4003
|
-
h.assign(i.direction),
|
|
4028
|
+
let r = k(e, t).greaterThan(0).toVar(), i = Ia.wrap(Ba(e, t, n.ior, n.roughness, r, n.dispersion, d, c).toVar());
|
|
4029
|
+
h.assign(i.direction), _.assign(i.pdf), T.assign(Ua(e, h, t, n));
|
|
4004
4030
|
}).Else(() => {
|
|
4005
|
-
h.assign(r),
|
|
4031
|
+
h.assign(r), _.assign(i), T.assign(a);
|
|
4006
4032
|
});
|
|
4007
4033
|
let E = k(t, h).toVar(), D = I(E, 0).toVar(), O = g(E).toVar(), A = j(0).toVar();
|
|
4008
4034
|
p(o.useSpecular, () => {
|
|
4009
|
-
let r =
|
|
4035
|
+
let r = xa(I(k(t, R(e.add(h))), .001), I(k(t, e), .001), n.roughness);
|
|
4010
4036
|
A.addAssign(o.specularWeight.mul(r));
|
|
4011
4037
|
}), p(o.useDiffuse, () => {
|
|
4012
|
-
let e =
|
|
4038
|
+
let e = jo(D).toVar();
|
|
4013
4039
|
A.addAssign(o.diffuseWeight.mul(e));
|
|
4014
4040
|
}), p(o.useTransmission.and(n.transmission.greaterThan(0)), () => {
|
|
4015
|
-
let r = k(e, t).greaterThan(0).toVar(), i =
|
|
4041
|
+
let r = k(e, t).greaterThan(0).toVar(), i = Do(e, h, t, n.ior, n.roughness, r).toVar();
|
|
4016
4042
|
A.addAssign(o.transmissionWeight.mul(i));
|
|
4017
4043
|
}), p(o.useClearcoat.and(n.clearcoat.greaterThan(0)), () => {
|
|
4018
|
-
let r =
|
|
4044
|
+
let r = Oo(e, h, t, n.clearcoatRoughness).toVar();
|
|
4019
4045
|
A.addAssign(o.clearcoatWeight.mul(r));
|
|
4020
|
-
}),
|
|
4021
|
-
let M =
|
|
4022
|
-
|
|
4023
|
-
}),
|
|
4024
|
-
direction:
|
|
4025
|
-
throughput:
|
|
4026
|
-
misWeight:
|
|
4027
|
-
pdf:
|
|
4028
|
-
combinedPdf:
|
|
4046
|
+
}), _.assign(I(_, ii)), A.assign(I(A, ii));
|
|
4047
|
+
let M = _.div(A).toVar(), ee = z(m.equal(N(3)), O, D), P = T.mul(ee).mul(M).div(_).toVar();
|
|
4048
|
+
b.assign(h), x.assign(P), S.assign(M), C.assign(_), w.assign(A);
|
|
4049
|
+
}), Qa({
|
|
4050
|
+
direction: b,
|
|
4051
|
+
throughput: x,
|
|
4052
|
+
misWeight: S,
|
|
4053
|
+
pdf: C,
|
|
4054
|
+
combinedPdf: w
|
|
4029
4055
|
});
|
|
4030
|
-
}),
|
|
4056
|
+
}), No = Xt({
|
|
4031
4057
|
position: "vec3",
|
|
4032
4058
|
normal: "vec3",
|
|
4033
4059
|
emission: "vec3",
|
|
@@ -4037,40 +4063,40 @@ var To = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, h, g, _, v, y, b, x, S, C, T
|
|
|
4037
4063
|
area: "float",
|
|
4038
4064
|
cosThetaLight: "float",
|
|
4039
4065
|
valid: "bool"
|
|
4040
|
-
}),
|
|
4066
|
+
}), Po = Xt({
|
|
4041
4067
|
contribution: "vec3",
|
|
4042
4068
|
hasEmissive: "bool",
|
|
4043
4069
|
emissionOnly: "vec3",
|
|
4044
4070
|
distance: "float"
|
|
4045
|
-
}),
|
|
4071
|
+
}), Fo = f(([e, t, n, r]) => {
|
|
4046
4072
|
let i = he(r.x), a = j(1).sub(i), o = r.y.mul(i), s = j(1).sub(a).sub(o);
|
|
4047
4073
|
return e.mul(a).add(t.mul(o)).add(n.mul(s));
|
|
4048
|
-
}),
|
|
4074
|
+
}), Io = f(([e, t, n]) => te(D(t.sub(e), n.sub(e))).mul(.5)), Lo = f(([e, t, n, r]) => {
|
|
4049
4075
|
let i = R(e.sub(r)), a = R(t.sub(r)), o = R(n.sub(r)), s = g(k(i, D(a, o))), c = j(1).add(k(a, o)).add(k(i, o)).add(k(i, a));
|
|
4050
4076
|
return I(j(2).mul(y(s, I(c, j(1e-10)))), j(0));
|
|
4051
|
-
}),
|
|
4077
|
+
}), Ro = f(([e, t, n, r]) => {
|
|
4052
4078
|
let i = t.sub(e), a = n.sub(e), o = n.sub(t), s = I(k(i, i), I(k(a, a), k(o, o))), c = D(i, a), l = k(c, c), u = w(!1).toVar();
|
|
4053
4079
|
return p(l.greaterThan(1e-20), () => {
|
|
4054
4080
|
let t = k(c, r.sub(e)), n = t.mul(t).div(l);
|
|
4055
4081
|
u.assign(s.greaterThan(n));
|
|
4056
4082
|
}), u;
|
|
4057
|
-
}),
|
|
4083
|
+
}), zo = Xt({
|
|
4058
4084
|
direction: "vec3",
|
|
4059
4085
|
position: "vec3",
|
|
4060
4086
|
solidAngle: "float",
|
|
4061
4087
|
valid: "bool"
|
|
4062
|
-
}),
|
|
4088
|
+
}), Bo = f(([e]) => {
|
|
4063
4089
|
let t = te(e);
|
|
4064
4090
|
return z(t.greaterThan(1e-10), e.div(t), W(0));
|
|
4065
|
-
}),
|
|
4066
|
-
let a =
|
|
4091
|
+
}), Vo = f(([e, t, n, r, i]) => {
|
|
4092
|
+
let a = zo({
|
|
4067
4093
|
direction: W(0),
|
|
4068
4094
|
position: W(0),
|
|
4069
4095
|
solidAngle: j(0),
|
|
4070
4096
|
valid: !1
|
|
4071
|
-
}).toVar(), o = R(e.sub(r)), s = R(t.sub(r)), c = R(n.sub(r)), l =
|
|
4097
|
+
}).toVar(), o = R(e.sub(r)), s = R(t.sub(r)), c = R(n.sub(r)), l = Lo(e, t, n, r);
|
|
4072
4098
|
return a.solidAngle.assign(l), p(l.greaterThan(1e-7), () => {
|
|
4073
|
-
let u = T(k(
|
|
4099
|
+
let u = T(k(Bo(D(o, s)), Bo(D(o, c))), -1, 1), d = he(I(j(1).sub(u.mul(u)), 0)), f = _(u), m = i.x.mul(l).sub(f), h = pe(m), v = E(m), y = T(k(o, s), -1, 1), b = v.sub(u), x = h.add(d.mul(y)), S = x.mul(v).sub(b.mul(h)).mul(u).sub(x), C = x.mul(h).add(b.mul(v)).mul(d), w = T(z(g(C).greaterThan(1e-10), S.div(C), j(1)), -1, 1), O = k(c, o), A = Bo(c.sub(o.mul(O))), M = he(I(j(1).sub(w.mul(w)), 0)), ee = R(o.mul(w).add(A.mul(M))), N = k(ee, s), P = j(1).sub(i.y.mul(j(1).sub(N))), te = he(I(j(1).sub(P.mul(P)), 0)), ne = Bo(ee.sub(s.mul(N))), F = R(s.mul(P).add(ne.mul(te))), re = R(D(t.sub(e), n.sub(e))), ie = k(re, F);
|
|
4074
4100
|
p(g(ie).greaterThan(1e-10), () => {
|
|
4075
4101
|
let t = k(re, e.sub(r)).div(ie);
|
|
4076
4102
|
p(t.greaterThan(0), () => {
|
|
@@ -4078,21 +4104,21 @@ var To = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, h, g, _, v, y, b, x, S, C, T
|
|
|
4078
4104
|
});
|
|
4079
4105
|
});
|
|
4080
4106
|
}), a;
|
|
4081
|
-
}),
|
|
4107
|
+
}), Ho = f(([e, t, n, r]) => {
|
|
4082
4108
|
let i = n.sub(t), a = r.sub(t), o = e.sub(t), s = k(i, i), c = k(i, a), l = k(a, a), u = k(o, i), d = k(o, a), f = j(1).div(I(s.mul(l).sub(c.mul(c)), j(1e-10))), p = l.mul(u).sub(c.mul(d)).mul(f), m = s.mul(d).sub(c.mul(u)).mul(f);
|
|
4083
4109
|
return W(j(1).sub(p).sub(m), p, m);
|
|
4084
|
-
}),
|
|
4110
|
+
}), Uo = f(([e, t, n, r]) => {
|
|
4085
4111
|
let i = he(r.x), a = j(1).sub(i), o = r.y.mul(i), s = j(1).sub(a).sub(o);
|
|
4086
4112
|
return R(e.mul(a).add(t.mul(o)).add(n.mul(s)));
|
|
4087
|
-
}),
|
|
4113
|
+
}), Wo = f(([e]) => e.emissiveIntensity.greaterThan(0).and(te(e.emissive).greaterThan(0)));
|
|
4088
4114
|
f(([e, t]) => {
|
|
4089
4115
|
let n = j(0).toVar();
|
|
4090
|
-
return p(
|
|
4116
|
+
return p(Wo(e), () => {
|
|
4091
4117
|
let r = e.emissive.x.add(e.emissive.y).add(e.emissive.z).div(3);
|
|
4092
4118
|
n.assign(r.mul(e.emissiveIntensity).mul(t));
|
|
4093
4119
|
}), n;
|
|
4094
4120
|
});
|
|
4095
|
-
var
|
|
4121
|
+
var Go = 8, Ko = 2, qo = Xt({
|
|
4096
4122
|
v0: "vec3",
|
|
4097
4123
|
v1: "vec3",
|
|
4098
4124
|
v2: "vec3",
|
|
@@ -4100,9 +4126,9 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4100
4126
|
n1: "vec3",
|
|
4101
4127
|
n2: "vec3",
|
|
4102
4128
|
materialIndex: "int"
|
|
4103
|
-
}),
|
|
4104
|
-
let n = $(t, e, N(0), N(
|
|
4105
|
-
return
|
|
4129
|
+
}), Jo = f(([e, t]) => {
|
|
4130
|
+
let n = $(t, e, N(0), N(Go)), r = $(t, e, N(1), N(Go)), i = $(t, e, N(2), N(Go)), a = $(t, e, N(3), N(Go)), o = $(t, e, N(4), N(Go)), s = $(t, e, N(5), N(Go)), c = $(t, e, N(7), N(Go));
|
|
4131
|
+
return qo({
|
|
4106
4132
|
v0: n.xyz,
|
|
4107
4133
|
v1: r.xyz,
|
|
4108
4134
|
v2: i.xyz,
|
|
@@ -4111,27 +4137,27 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4111
4137
|
n2: s.xyz,
|
|
4112
4138
|
materialIndex: N(c.z)
|
|
4113
4139
|
});
|
|
4114
|
-
}),
|
|
4115
|
-
let s =
|
|
4116
|
-
return p(
|
|
4117
|
-
let e =
|
|
4140
|
+
}), Yo = f(([e, t, n, r, i, a, o]) => {
|
|
4141
|
+
let s = qo.wrap(Jo(e, i)), c = Io(s.v0, s.v1, s.v2), l = $(a, s.materialIndex, N(si.EMISSIVE_ROUGHNESS), oi), u = $(a, s.materialIndex, N(si.IOR_TRANSMISSION), oi), d = I(l.x.add(l.y).add(l.z).div(3).mul(u.a).mul(c), j(1e-10)).div(I(o, j(1e-10))), f = j(0).toVar();
|
|
4142
|
+
return p(Ro(s.v0, s.v1, s.v2, r), () => {
|
|
4143
|
+
let e = Lo(s.v0, s.v1, s.v2, r);
|
|
4118
4144
|
f.assign(d.div(I(e, j(1e-10))));
|
|
4119
4145
|
}).Else(() => {
|
|
4120
4146
|
let e = R(D(s.v1.sub(s.v0), s.v2.sub(s.v0))), r = I(k(n.negate(), e), .001), i = t.mul(t), a = d.div(c);
|
|
4121
4147
|
f.assign(a.mul(i).div(r));
|
|
4122
4148
|
}), I(f, ii);
|
|
4123
|
-
}),
|
|
4149
|
+
}), Xo = f(([e, t, n, r]) => {
|
|
4124
4150
|
let i = N(0).toVar(), a = n.sub(1).toVar();
|
|
4125
4151
|
return m(i.lessThan(a), () => {
|
|
4126
|
-
let n = i.add(a).div(2).toVar(), o = e.element(t.add(n.mul(N(
|
|
4152
|
+
let n = i.add(a).div(2).toVar(), o = e.element(t.add(n.mul(N(Ko)))).b;
|
|
4127
4153
|
p(o.lessThan(r), () => {
|
|
4128
4154
|
i.assign(n.add(1));
|
|
4129
4155
|
}).Else(() => {
|
|
4130
4156
|
a.assign(n);
|
|
4131
4157
|
});
|
|
4132
4158
|
}), i;
|
|
4133
|
-
}),
|
|
4134
|
-
let l =
|
|
4159
|
+
}), Zo = f(([e, t, n, r, i, a, o, s, c]) => {
|
|
4160
|
+
let l = No({
|
|
4135
4161
|
position: W(0),
|
|
4136
4162
|
normal: W(0),
|
|
4137
4163
|
emission: W(0),
|
|
@@ -4143,40 +4169,40 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4143
4169
|
valid: !1
|
|
4144
4170
|
}).toVar();
|
|
4145
4171
|
return p(o.greaterThan(N(0)), () => {
|
|
4146
|
-
let n =
|
|
4147
|
-
p(
|
|
4148
|
-
let n =
|
|
4172
|
+
let n = Xo(i, a, o, J(r)).toVar(), u = a.add(n.mul(N(Ko))), d = i.element(u), f = i.element(u.add(1)), m = N(d.r), h = I(d.g, j(1e-10)), g = f.xyz, _ = f.w, v = qo.wrap(Jo(m, c)), y = U(J(r).toVar(), J(r).toVar()), b = R(D(v.v1.sub(v.v0), v.v2.sub(v.v0)));
|
|
4173
|
+
p(Ro(v.v0, v.v1, v.v2, e), () => {
|
|
4174
|
+
let n = zo.wrap(Vo(v.v0, v.v1, v.v2, e, y));
|
|
4149
4175
|
p(n.valid.and(n.solidAngle.greaterThan(1e-7)), () => {
|
|
4150
4176
|
let r = n.direction, i = n.position, a = k(r, t), o = k(r, b.negate());
|
|
4151
4177
|
p(a.greaterThan(0).and(o.greaterThan(0)), () => {
|
|
4152
|
-
let t =
|
|
4178
|
+
let t = Ho(i, v.v0, v.v1, v.v2), a = R(v.n0.mul(t.x).add(v.n1.mul(t.y)).add(v.n2.mul(t.z))), c = te(i.sub(e)), u = h.div(I(s, j(1e-10))).div(n.solidAngle);
|
|
4153
4179
|
l.position.assign(i), l.normal.assign(a), l.emission.assign(g), l.direction.assign(r), l.distance.assign(c), l.pdf.assign(I(u, ii)), l.area.assign(_), l.cosThetaLight.assign(o), l.valid.assign(!0);
|
|
4154
4180
|
});
|
|
4155
4181
|
});
|
|
4156
4182
|
}).Else(() => {
|
|
4157
|
-
let n =
|
|
4183
|
+
let n = Fo(v.v0, v.v1, v.v2, y), r = Uo(v.n0, v.n1, v.n2, y), i = n.sub(e), a = k(i, i), o = he(a), c = i.div(o), u = k(c, t), d = k(c, r.negate());
|
|
4158
4184
|
p(u.greaterThan(0).and(d.greaterThan(0)), () => {
|
|
4159
4185
|
let e = h.div(I(s, j(1e-10)).mul(_)).mul(a).div(d);
|
|
4160
4186
|
l.position.assign(n), l.normal.assign(r), l.emission.assign(g), l.direction.assign(c), l.distance.assign(o), l.pdf.assign(I(e, ii)), l.area.assign(_), l.cosThetaLight.assign(d), l.valid.assign(!0);
|
|
4161
4187
|
});
|
|
4162
4188
|
});
|
|
4163
4189
|
}), l;
|
|
4164
|
-
}),
|
|
4165
|
-
let _ =
|
|
4190
|
+
}), Qo = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, m, h, g]) => {
|
|
4191
|
+
let _ = Po({
|
|
4166
4192
|
contribution: W(0),
|
|
4167
4193
|
hasEmissive: !1,
|
|
4168
4194
|
emissionOnly: W(0),
|
|
4169
4195
|
distance: j(0)
|
|
4170
4196
|
}).toVar();
|
|
4171
4197
|
return p(a.greaterThan(N(1)).and(r.roughness.greaterThan(.9)).and(r.metalness.lessThan(.1)).not(), () => {
|
|
4172
|
-
let a =
|
|
4198
|
+
let a = No.wrap(Zo(e, t, i, o, c, l, u, d, f));
|
|
4173
4199
|
p(a.valid.and(a.pdf.greaterThan(0)), () => {
|
|
4174
4200
|
_.hasEmissive.assign(!0), _.emissionOnly.assign(a.emission), _.distance.assign(a.distance);
|
|
4175
4201
|
let i = I(j(0), k(t, a.direction));
|
|
4176
4202
|
p(i.greaterThan(0), () => {
|
|
4177
4203
|
let c = g(e, t, r), l = e.add(c), u = a.distance.sub(.001), d = m(l, a.direction, u, o);
|
|
4178
4204
|
p(d.greaterThan(0), () => {
|
|
4179
|
-
let e = h(n, a.direction, t, r), o =
|
|
4205
|
+
let e = h(n, a.direction, t, r), o = To(n, a.direction, t, r), c = z(o.greaterThan(0), pi({
|
|
4180
4206
|
pdf1: a.pdf,
|
|
4181
4207
|
pdf2: o
|
|
4182
4208
|
}), j(1));
|
|
@@ -4185,8 +4211,8 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4185
4211
|
});
|
|
4186
4212
|
});
|
|
4187
4213
|
}), _;
|
|
4188
|
-
}),
|
|
4189
|
-
let s =
|
|
4214
|
+
}), $o = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h]) => Po.wrap(Qo(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h)).contribution), es = 4, ts = 2, ns = 32, rs = f(([e, t, n, r, i, a, o]) => {
|
|
4215
|
+
let s = No({
|
|
4190
4216
|
position: W(0),
|
|
4191
4217
|
normal: W(0),
|
|
4192
4218
|
emission: W(0),
|
|
@@ -4197,12 +4223,12 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4197
4223
|
cosThetaLight: j(0),
|
|
4198
4224
|
valid: !1
|
|
4199
4225
|
}).toVar(), c = j(1).toVar(), l = N(0).toVar(), d = w(!1).toVar();
|
|
4200
|
-
return m(
|
|
4201
|
-
let t = l.mul(N(
|
|
4226
|
+
return m(ns, () => {
|
|
4227
|
+
let t = l.mul(N(es)), i = r.element(t.add(N(1))), a = r.element(t.add(N(2)));
|
|
4202
4228
|
p(i.w.greaterThan(.5), () => {
|
|
4203
4229
|
d.assign(w(!0)), u();
|
|
4204
4230
|
});
|
|
4205
|
-
let o = N(a.x), s = N(a.y), f = o.mul(N(
|
|
4231
|
+
let o = N(a.x), s = N(a.y), f = o.mul(N(es)), m = r.element(f), h = r.element(f.add(N(1))), g = s.mul(N(es)), _ = r.element(g), v = r.element(g.add(N(1))), y = W(m.x.add(h.x).mul(.5), m.y.add(h.y).mul(.5), m.z.add(h.z).mul(.5)), b = W(_.x.add(v.x).mul(.5), _.y.add(v.y).mul(.5), _.z.add(v.z).mul(.5)), x = y.sub(e), S = b.sub(e), C = I(k(x, x), j(.01)), T = I(k(S, S), j(.01)), E = I(m.w, j(0)), D = I(_.w, j(0)), O = E.div(C), A = D.div(T), M = O.add(A);
|
|
4206
4232
|
p(M.lessThanEqual(j(0)), () => {
|
|
4207
4233
|
l.assign(o);
|
|
4208
4234
|
}).Else(() => {
|
|
@@ -4214,54 +4240,54 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4214
4240
|
});
|
|
4215
4241
|
});
|
|
4216
4242
|
}), p(d, () => {
|
|
4217
|
-
let d = l.mul(N(
|
|
4243
|
+
let d = l.mul(N(es)), f = r.element(d), h = r.element(d.add(N(2))), g = N(h.x), _ = N(h.y), v = I(f.w, j(1e-10)), y = J(n).mul(v), b = j(0).toVar(), x = g.add(_.sub(N(1))).toVar(), S = j(1e-10).toVar();
|
|
4218
4244
|
m({
|
|
4219
4245
|
start: N(0),
|
|
4220
4246
|
end: _
|
|
4221
4247
|
}, ({ i: e }) => {
|
|
4222
|
-
let t = g.add(e), n = a.add(t.mul(N(
|
|
4248
|
+
let t = g.add(e), n = a.add(t.mul(N(ts))), r = I(i.element(n).g, j(0));
|
|
4223
4249
|
b.addAssign(r), p(b.greaterThanEqual(y).and(r.greaterThan(j(0))), () => {
|
|
4224
4250
|
x.assign(t), S.assign(r), u();
|
|
4225
4251
|
});
|
|
4226
4252
|
}), c.mulAssign(S.div(v));
|
|
4227
|
-
let C = a.add(x.mul(N(
|
|
4228
|
-
p(
|
|
4229
|
-
let n =
|
|
4253
|
+
let C = a.add(x.mul(N(ts))), w = i.element(C), T = i.element(C.add(N(1))), E = N(w.r), O = T.xyz, A = T.w, M = qo.wrap(Jo(E, o)), ee = U(J(n).toVar(), J(n).toVar()), P = R(D(M.v1.sub(M.v0), M.v2.sub(M.v0)));
|
|
4254
|
+
p(Ro(M.v0, M.v1, M.v2, e), () => {
|
|
4255
|
+
let n = zo.wrap(Vo(M.v0, M.v1, M.v2, e, ee));
|
|
4230
4256
|
p(n.valid.and(n.solidAngle.greaterThan(j(1e-7))), () => {
|
|
4231
4257
|
let r = n.direction, i = n.position, a = k(r, t), o = k(r, P.negate());
|
|
4232
4258
|
p(a.greaterThan(j(0)).and(o.greaterThan(j(0))), () => {
|
|
4233
|
-
let t =
|
|
4259
|
+
let t = Ho(i, M.v0, M.v1, M.v2), a = R(M.n0.mul(t.x).add(M.n1.mul(t.y)).add(M.n2.mul(t.z))), l = te(i.sub(e)), u = c.div(I(n.solidAngle, j(1e-10)));
|
|
4234
4260
|
s.position.assign(i), s.normal.assign(a), s.emission.assign(O), s.direction.assign(r), s.distance.assign(l), s.pdf.assign(I(u, ii)), s.area.assign(A), s.cosThetaLight.assign(o), s.valid.assign(!0);
|
|
4235
4261
|
});
|
|
4236
4262
|
});
|
|
4237
4263
|
}).Else(() => {
|
|
4238
|
-
let n =
|
|
4264
|
+
let n = Fo(M.v0, M.v1, M.v2, ee), r = Uo(M.n0, M.n1, M.n2, ee), i = n.sub(e), a = k(i, i), o = he(a), l = i.div(o), u = k(l, t), d = k(l, r.negate());
|
|
4239
4265
|
p(u.greaterThan(j(0)).and(d.greaterThan(j(0))), () => {
|
|
4240
4266
|
let e = c.div(I(A, j(1e-10))).mul(a).div(d);
|
|
4241
4267
|
s.position.assign(n), s.normal.assign(r), s.emission.assign(O), s.direction.assign(l), s.distance.assign(o), s.pdf.assign(I(e, ii)), s.area.assign(A), s.cosThetaLight.assign(d), s.valid.assign(!0);
|
|
4242
4268
|
});
|
|
4243
4269
|
});
|
|
4244
4270
|
}), s;
|
|
4245
|
-
}),
|
|
4271
|
+
}), is = 0, as = 1, os = 2, ss = 3, cs = Xt({
|
|
4246
4272
|
radiance: "vec4",
|
|
4247
4273
|
objectNormal: "vec3",
|
|
4248
4274
|
objectColor: "vec3",
|
|
4249
4275
|
objectID: "float",
|
|
4250
4276
|
firstHitPoint: "vec3",
|
|
4251
4277
|
firstHitDistance: "float"
|
|
4252
|
-
}),
|
|
4278
|
+
}), ls = f(([e, t, n, r, i]) => {
|
|
4253
4279
|
let a = i.toVar();
|
|
4254
4280
|
return p(n.not().or(r.notEqual(t)), () => {
|
|
4255
|
-
a.assign(
|
|
4281
|
+
a.assign(bi(e.metalness, e.roughness, e.transmission, e.clearcoat, e.emissive));
|
|
4256
4282
|
}), a;
|
|
4257
|
-
}),
|
|
4258
|
-
let m = W(0).toVar(), h = W(0).toVar(), g = j(0).toVar(), _ = Kr.wrap(
|
|
4283
|
+
}), us = f(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
|
|
4284
|
+
let m = W(0).toVar(), h = W(0).toVar(), g = j(0).toVar(), _ = Kr.wrap(ls(n, r, o, s, c)).toVar(), v = u.toVar();
|
|
4259
4285
|
p(l.not(), () => {
|
|
4260
4286
|
p(d, () => {
|
|
4261
|
-
v.assign(
|
|
4287
|
+
v.assign(wa(n, _, f));
|
|
4262
4288
|
}).Else(() => {
|
|
4263
4289
|
let e = Jr({
|
|
4264
|
-
F0:
|
|
4290
|
+
F0: pa(n.ior),
|
|
4265
4291
|
NoV: j(1),
|
|
4266
4292
|
diffuseColor: W(0),
|
|
4267
4293
|
isPurelyDiffuse: !1,
|
|
@@ -4273,30 +4299,30 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4273
4299
|
iorFactor: ae(j(2).div(n.ior), 1),
|
|
4274
4300
|
maxSheenColor: I(n.sheenColor.x, I(n.sheenColor.y, n.sheenColor.z))
|
|
4275
4301
|
}).toVar();
|
|
4276
|
-
v.assign(
|
|
4302
|
+
v.assign(wa(n, _, e));
|
|
4277
4303
|
});
|
|
4278
4304
|
});
|
|
4279
4305
|
let y = i.x.toVar(), b = U(i.y, J(a)).toVar(), x = W(0).toVar(), S = v.diffuse.toVar(), C = S.add(v.specular).toVar(), E = C.add(v.sheen).toVar(), D = E.add(v.clearcoat).toVar(), O = w(!1).toVar();
|
|
4280
4306
|
p(y.lessThan(S).and(O.not()), () => {
|
|
4281
|
-
m.assign(
|
|
4307
|
+
m.assign(Oa({
|
|
4282
4308
|
N: t,
|
|
4283
4309
|
xi: b
|
|
4284
4310
|
}));
|
|
4285
4311
|
let r = T(k(t, m), 0, 1);
|
|
4286
|
-
g.assign(r.mul($r)), h.assign(
|
|
4312
|
+
g.assign(r.mul($r)), h.assign(Ua(e, m, t, n)), O.assign(w(!0));
|
|
4287
4313
|
});
|
|
4288
4314
|
let A = T(k(t, e), .001, 1).toVar();
|
|
4289
4315
|
return p(y.lessThan(C).and(O.not()), () => {
|
|
4290
|
-
let r =
|
|
4316
|
+
let r = hi({ N: t }), a = Aa({
|
|
4291
4317
|
V: r.transpose().mul(e).toVar(),
|
|
4292
4318
|
roughness: n.roughness,
|
|
4293
4319
|
Xi: i
|
|
4294
4320
|
});
|
|
4295
4321
|
x.assign(r.mul(a));
|
|
4296
4322
|
let o = T(k(t, x), .001, 1);
|
|
4297
|
-
m.assign(le(e.negate(), x)), g.assign(
|
|
4323
|
+
m.assign(le(e.negate(), x)), g.assign(xa(o, A, n.roughness)), h.assign(Ua(e, m, t, n)), O.assign(w(!0));
|
|
4298
4324
|
}), p(y.lessThan(E).and(O.not()), () => {
|
|
4299
|
-
x.assign(
|
|
4325
|
+
x.assign(Da({
|
|
4300
4326
|
N: t,
|
|
4301
4327
|
roughness: n.sheenRoughness,
|
|
4302
4328
|
Xi: i
|
|
@@ -4305,32 +4331,32 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4305
4331
|
m.assign(le(e.negate(), x));
|
|
4306
4332
|
let o = k(t, m).toVar();
|
|
4307
4333
|
p(o.lessThanEqual(0), () => {
|
|
4308
|
-
m.assign(
|
|
4334
|
+
m.assign(Oa({
|
|
4309
4335
|
N: t,
|
|
4310
4336
|
xi: i
|
|
4311
|
-
})), o.assign(T(k(t, m), 0, 1)), g.assign(o.mul($r)), h.assign(
|
|
4337
|
+
})), o.assign(T(k(t, m), 0, 1)), g.assign(o.mul($r)), h.assign(Ua(e, m, t, n));
|
|
4312
4338
|
}).Else(() => {
|
|
4313
|
-
g.assign(
|
|
4339
|
+
g.assign(ha(r, n.sheenRoughness).mul(r).div(j(4).mul(a))), g.assign(I(g, ii)), h.assign(Ua(e, m, t, n));
|
|
4314
4340
|
}), O.assign(w(!0));
|
|
4315
4341
|
}), p(y.lessThan(D).and(O.not()), () => {
|
|
4316
4342
|
let r = T(n.clearcoatRoughness, ri, 1);
|
|
4317
|
-
x.assign(
|
|
4343
|
+
x.assign(Da({
|
|
4318
4344
|
N: t,
|
|
4319
4345
|
roughness: r,
|
|
4320
4346
|
Xi: i
|
|
4321
4347
|
}));
|
|
4322
4348
|
let a = T(k(t, x), 0, 1);
|
|
4323
|
-
m.assign(le(e.negate(), x)), g.assign(
|
|
4349
|
+
m.assign(le(e.negate(), x)), g.assign(xa(a, A, r)), g.assign(I(g, ii)), h.assign(Ua(e, m, t, n)), O.assign(w(!0));
|
|
4324
4350
|
}), p(O.not(), () => {
|
|
4325
|
-
let r = k(e, t).greaterThan(0).toVar(), o =
|
|
4326
|
-
m.assign(o.direction), g.assign(I(o.pdf, ii)), h.assign(
|
|
4351
|
+
let r = k(e, t).greaterThan(0).toVar(), o = Ia.wrap(Ba(e, t, n.ior, n.roughness, r, n.dispersion, i, a));
|
|
4352
|
+
m.assign(o.direction), g.assign(I(o.pdf, ii)), h.assign(Ua(e, m, t, n));
|
|
4327
4353
|
}), g.assign(I(g, ii)), Vr({
|
|
4328
4354
|
direction: m,
|
|
4329
4355
|
value: h,
|
|
4330
4356
|
pdf: g
|
|
4331
4357
|
});
|
|
4332
|
-
}),
|
|
4333
|
-
let l = I(di({ v: e }), 0).toVar(), u = Kr.wrap(
|
|
4358
|
+
}), ds = f(([e, t, n, r, i, a, o, s, c]) => {
|
|
4359
|
+
let l = I(di({ v: e }), 0).toVar(), u = Kr.wrap(ls(n, r, i, a, o)).toVar(), d = u.complexityScore.toVar();
|
|
4334
4360
|
p(u.isMetallic.and(u.isSmooth), () => {
|
|
4335
4361
|
d.addAssign(.15);
|
|
4336
4362
|
}), p(u.isTransmissive.and(u.hasClearcoat), () => {
|
|
@@ -4345,7 +4371,7 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4345
4371
|
});
|
|
4346
4372
|
let m = me(j(.001), j(.1), l);
|
|
4347
4373
|
return l.mul(L(d.mul(.7), f, .3)).mul(m);
|
|
4348
|
-
}),
|
|
4374
|
+
}), fs = f(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
|
|
4349
4375
|
let m = j(1).toVar();
|
|
4350
4376
|
return p(e.greaterThanEqual(N(3)), () => {
|
|
4351
4377
|
let h = I(di({ v: t }), 0).toVar();
|
|
@@ -4353,7 +4379,7 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4353
4379
|
let e = I(h.mul(125), .01), t = J(a);
|
|
4354
4380
|
m.assign(z(t.lessThan(e), e, j(0)));
|
|
4355
4381
|
}).Else(() => {
|
|
4356
|
-
let g = Kr.wrap(
|
|
4382
|
+
let g = Kr.wrap(ls(n, r, o, s, c)).toVar(), _ = g.complexityScore.toVar();
|
|
4357
4383
|
p(g.isMetallic.and(g.isSmooth).and(e.lessThan(N(7))), () => {
|
|
4358
4384
|
_.addAssign(.3);
|
|
4359
4385
|
}), p(g.isTransmissive.and(e.lessThan(N(6))), () => {
|
|
@@ -4373,7 +4399,7 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4373
4399
|
p(o.and(l), () => {
|
|
4374
4400
|
y.assign(u);
|
|
4375
4401
|
}).Else(() => {
|
|
4376
|
-
y.assign(
|
|
4402
|
+
y.assign(ds(t, i, n, r, o, s, c, d, f));
|
|
4377
4403
|
});
|
|
4378
4404
|
let b = L(T(_.mul(.4).add(h.mul(.6)).mul(1.2), .15, .95), T(h.mul(.4).add(_.mul(.1)), .03, .6), T(j(e.sub(v)).div(10), 0, 1)).toVar();
|
|
4379
4405
|
b.assign(L(b, I(b, y), .4)), p(_.greaterThan(.5), () => {
|
|
@@ -4389,12 +4415,12 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4389
4415
|
});
|
|
4390
4416
|
});
|
|
4391
4417
|
}), m;
|
|
4392
|
-
}),
|
|
4418
|
+
}), ps = f(([e, t, n, r, i, a, o, s]) => {
|
|
4393
4419
|
let c = G(0).toVar();
|
|
4394
4420
|
return p(e.and(o.not()), () => {
|
|
4395
4421
|
c.assign(G(0));
|
|
4396
4422
|
}).Else(() => {
|
|
4397
|
-
let o =
|
|
4423
|
+
let o = Hi({
|
|
4398
4424
|
tex: n,
|
|
4399
4425
|
samp: de(n),
|
|
4400
4426
|
direction: t,
|
|
@@ -4408,10 +4434,10 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4408
4434
|
c.assign(o);
|
|
4409
4435
|
});
|
|
4410
4436
|
}), c;
|
|
4411
|
-
}),
|
|
4412
|
-
let
|
|
4437
|
+
}), ms = /* @__PURE__ */ K("\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", [_i, yi]), hs = f(([e, t, n, r, i, a, o, s, c, l, h, g, _, v, y, b, x, S, C, E, D, O, A, M, ee, P, ne, F, re, ie, ae, L, oe, se, ce, le, ue, de, fe, pe, me, he, ge, _e, ve, B, ye, V, H, be]) => {
|
|
4438
|
+
let xe = W(0).toVar(), Se = W(1).toVar(), U = j(1).toVar(), K = w(!1).toVar(), Ce = j(0).toVar(), we = W(0).toVar(), Te = W(0).toVar(), Ee = j(-1e3).toVar(), De = e.origin.toVar(), Oe = j(1e10).toVar(), ke = N(0).toVar(), Ae = j(1).toVar(), je = j(1).toVar(), Me = j(1).toVar(), Ne = L.toVar(), Pe = oe.toVar(), Fe = N(is).toVar(), Ie = w(!0).toVar(), Le = w(!1).toVar(), Re = w(!1).toVar(), ze = w(!1).toVar();
|
|
4413
4439
|
w(!1).toVar();
|
|
4414
|
-
let
|
|
4440
|
+
let Be = j(0).toVar(), Ve = N(-1).toVar(), He = Kr({
|
|
4415
4441
|
isMetallic: !1,
|
|
4416
4442
|
isRough: !1,
|
|
4417
4443
|
isSmooth: !1,
|
|
@@ -4419,14 +4445,14 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4419
4445
|
hasClearcoat: !1,
|
|
4420
4446
|
isEmissive: !1,
|
|
4421
4447
|
complexityScore: j(0)
|
|
4422
|
-
}).toVar(),
|
|
4448
|
+
}).toVar(), Ue = Hr({
|
|
4423
4449
|
specular: j(.5),
|
|
4424
4450
|
diffuse: j(.5),
|
|
4425
4451
|
sheen: j(0),
|
|
4426
4452
|
clearcoat: j(0),
|
|
4427
4453
|
transmission: j(0),
|
|
4428
4454
|
iridescence: j(0)
|
|
4429
|
-
}).toVar(),
|
|
4455
|
+
}).toVar(), We = Jr({
|
|
4430
4456
|
F0: W(.04),
|
|
4431
4457
|
NoV: j(1),
|
|
4432
4458
|
diffuseColor: W(0),
|
|
@@ -4438,188 +4464,188 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4438
4464
|
metalFactor: j(.5),
|
|
4439
4465
|
iorFactor: j(1),
|
|
4440
4466
|
maxSheenColor: j(0)
|
|
4441
|
-
}).toVar(),
|
|
4467
|
+
}).toVar(), Ge = N(0).toVar(), Ke = e.origin.toVar(), qe = e.direction.toVar();
|
|
4442
4468
|
return m({
|
|
4443
4469
|
start: N(0),
|
|
4444
|
-
end:
|
|
4470
|
+
end: L.add(oe).add(1),
|
|
4445
4471
|
type: "int",
|
|
4446
4472
|
condition: "<"
|
|
4447
4473
|
}, ({ i: e }) => {
|
|
4448
|
-
|
|
4474
|
+
Ne.assign(L.sub(Ge)), Ie.assign(e.equal(N(0))), p(Ge.greaterThan(L), () => {
|
|
4449
4475
|
u();
|
|
4450
4476
|
});
|
|
4451
|
-
let r = z(e.greaterThan(N(0)),
|
|
4452
|
-
origin:
|
|
4453
|
-
direction:
|
|
4454
|
-
}),
|
|
4455
|
-
p(
|
|
4456
|
-
let t =
|
|
4457
|
-
p(
|
|
4458
|
-
let e =
|
|
4477
|
+
let r = z(e.greaterThan(N(0)), de, j(1)), m = Lr({
|
|
4478
|
+
origin: Ke,
|
|
4479
|
+
direction: qe
|
|
4480
|
+
}), oe = Br.wrap(Pi(m, i, a, o)).toVar();
|
|
4481
|
+
p(oe.didHit.not(), () => {
|
|
4482
|
+
let t = ps(Ie, qe, A, ee, M, ie, ce, se), n = j(1).toVar();
|
|
4483
|
+
p(Ce.greaterThan(0).and(ie).and(ae), () => {
|
|
4484
|
+
let e = Bi(A, qe, ee, ne, F, re).w.toVar();
|
|
4459
4485
|
p(e.greaterThan(0), () => {
|
|
4460
|
-
n.assign(
|
|
4461
|
-
pdf1:
|
|
4486
|
+
n.assign(mi({
|
|
4487
|
+
pdf1: Ce,
|
|
4462
4488
|
pdf2: e
|
|
4463
4489
|
}));
|
|
4464
4490
|
});
|
|
4465
|
-
}),
|
|
4466
|
-
contribution: t.xyz.mul(
|
|
4491
|
+
}), xe.addAssign(ms({
|
|
4492
|
+
contribution: t.xyz.mul(Se).mul(r).mul(n),
|
|
4467
4493
|
pathLength: j(e),
|
|
4468
|
-
fireflyThreshold:
|
|
4469
|
-
frame: N(
|
|
4470
|
-
})), p(
|
|
4471
|
-
|
|
4472
|
-
}).ElseIf(
|
|
4473
|
-
|
|
4494
|
+
fireflyThreshold: ue,
|
|
4495
|
+
frame: N(be)
|
|
4496
|
+
})), p(le.and(K.not()), () => {
|
|
4497
|
+
U.assign(0);
|
|
4498
|
+
}).ElseIf(le.not(), () => {
|
|
4499
|
+
U.mulAssign(t.a);
|
|
4474
4500
|
}), u();
|
|
4475
4501
|
});
|
|
4476
|
-
let G = Rr.wrap(
|
|
4502
|
+
let G = Rr.wrap(Ci(oe.materialIndex, o)).toVar(), q = oe.uv.toVar(), Je = oe.normal.toVar();
|
|
4477
4503
|
p(G.displacementMapIndex.greaterThanEqual(N(0)).and(G.displacementScale.greaterThan(0)), () => {
|
|
4478
|
-
let t =
|
|
4479
|
-
|
|
4504
|
+
let t = aa.wrap(oa(m, oe, a, v, G, e)).toVar();
|
|
4505
|
+
q.assign(t.uv), Je.assign(t.normal), oe.hitPoint.assign(t.hitPoint);
|
|
4480
4506
|
});
|
|
4481
|
-
let
|
|
4482
|
-
G.color.assign(
|
|
4483
|
-
let
|
|
4507
|
+
let Ye = Gr.wrap(Qi(s, c, l, h, g, _, G, q, oe.normal)).toVar();
|
|
4508
|
+
G.color.assign(Ye.albedo), G.metalness.assign(T(Ye.metalness, 0, 1)), G.roughness.assign(T(Ye.roughness, ni, 1));
|
|
4509
|
+
let Xe = Ye.normal.toVar();
|
|
4484
4510
|
p(G.displacementMapIndex.greaterThanEqual(N(0)).and(G.displacementScale.greaterThan(0)), () => {
|
|
4485
|
-
|
|
4486
|
-
});
|
|
4487
|
-
let
|
|
4488
|
-
p(
|
|
4489
|
-
|
|
4490
|
-
}).ElseIf(
|
|
4491
|
-
|
|
4492
|
-
}).ElseIf(
|
|
4493
|
-
|
|
4494
|
-
});
|
|
4495
|
-
let
|
|
4496
|
-
p(
|
|
4511
|
+
Xe.assign(R(Je.add(Ye.normal.sub(oe.normal))));
|
|
4512
|
+
});
|
|
4513
|
+
let Ze = j(1).toVar(), Qe = j(1).toVar();
|
|
4514
|
+
p(ke.equal(N(1)), () => {
|
|
4515
|
+
Ze.assign(Ae);
|
|
4516
|
+
}).ElseIf(ke.equal(N(2)), () => {
|
|
4517
|
+
Ze.assign(je), Qe.assign(Ae);
|
|
4518
|
+
}).ElseIf(ke.equal(N(3)), () => {
|
|
4519
|
+
Ze.assign(Me), Qe.assign(je);
|
|
4520
|
+
});
|
|
4521
|
+
let $e = Pa.wrap(Ha(m, oe.hitPoint, Xe, G, t, Pe, Ze, Qe)).toVar();
|
|
4522
|
+
p($e.continueRay, () => {
|
|
4497
4523
|
let e = w(!1).toVar();
|
|
4498
|
-
p(
|
|
4499
|
-
|
|
4500
|
-
p(
|
|
4501
|
-
p(
|
|
4502
|
-
|
|
4503
|
-
ke.assign(G.ior);
|
|
4504
|
-
}).ElseIf(Oe.equal(N(2)), () => {
|
|
4524
|
+
p($e.isTransmissive.and(Pe.greaterThan(N(0))), () => {
|
|
4525
|
+
Pe.subAssign(1), Fe.assign(N(os)), e.assign(w(!0)), p($e.didReflect.not(), () => {
|
|
4526
|
+
p($e.entering, () => {
|
|
4527
|
+
p(ke.lessThan(N(3)), () => {
|
|
4528
|
+
ke.addAssign(1), p(ke.equal(N(1)), () => {
|
|
4505
4529
|
Ae.assign(G.ior);
|
|
4506
|
-
}).ElseIf(
|
|
4530
|
+
}).ElseIf(ke.equal(N(2)), () => {
|
|
4507
4531
|
je.assign(G.ior);
|
|
4532
|
+
}).ElseIf(ke.equal(N(3)), () => {
|
|
4533
|
+
Me.assign(G.ior);
|
|
4508
4534
|
});
|
|
4509
4535
|
});
|
|
4510
4536
|
}).Else(() => {
|
|
4511
|
-
p(
|
|
4512
|
-
|
|
4537
|
+
p(ke.greaterThan(N(0)), () => {
|
|
4538
|
+
ke.subAssign(1);
|
|
4513
4539
|
});
|
|
4514
4540
|
});
|
|
4515
4541
|
});
|
|
4516
|
-
}).ElseIf(
|
|
4542
|
+
}).ElseIf($e.isAlphaSkip, () => {
|
|
4517
4543
|
e.assign(w(!0));
|
|
4518
|
-
}),
|
|
4519
|
-
|
|
4544
|
+
}), Se.mulAssign($e.throughput), p(le.not(), () => {
|
|
4545
|
+
U.mulAssign($e.alpha);
|
|
4520
4546
|
});
|
|
4521
|
-
let t = z(
|
|
4522
|
-
|
|
4523
|
-
|
|
4547
|
+
let t = z($e.entering, Xe, Xe.negate()), n = z($e.didReflect, t, qe);
|
|
4548
|
+
Ke.assign(oe.hitPoint.add(n.mul(.001))), qe.assign($e.direction), Ie.assign(w(!1)), Le.assign(w(!1)), ze.assign(w(!1)), p(e.not(), () => {
|
|
4549
|
+
Ge.addAssign(1);
|
|
4524
4550
|
}), d();
|
|
4525
|
-
}), p(
|
|
4526
|
-
|
|
4527
|
-
}),
|
|
4528
|
-
let
|
|
4529
|
-
G.sheenRoughness.assign(T(G.sheenRoughness, ni, 1)), p(
|
|
4530
|
-
|
|
4531
|
-
});
|
|
4532
|
-
let
|
|
4551
|
+
}), p(le.not(), () => {
|
|
4552
|
+
U.mulAssign($e.alpha);
|
|
4553
|
+
}), K.assign(w(!0));
|
|
4554
|
+
let et = vn(V, n, e, t, N(-1), H, be).toVar(), tt = qe.negate().toVar();
|
|
4555
|
+
G.sheenRoughness.assign(T(G.sheenRoughness, ni, 1)), p(ze.not(), () => {
|
|
4556
|
+
We.assign(Ea(Xe, tt, G, Ye, He)), ze.assign(w(!0));
|
|
4557
|
+
});
|
|
4558
|
+
let nt = W(0).toVar(), rt = W(0).toVar(), it = j(0).toVar();
|
|
4533
4559
|
p(G.clearcoat.greaterThan(0), () => {
|
|
4534
|
-
let e =
|
|
4535
|
-
|
|
4560
|
+
let e = Ga.wrap(Ka(m, oe, G, et, t));
|
|
4561
|
+
nt.assign(e.L), rt.assign(e.brdf), it.assign(e.pdf);
|
|
4536
4562
|
}).Else(() => {
|
|
4537
|
-
let e = Vr.wrap(
|
|
4538
|
-
|
|
4539
|
-
|
|
4540
|
-
}),
|
|
4541
|
-
}), p(te(
|
|
4563
|
+
let e = Vr.wrap(us(tt, Xe, G, oe.materialIndex, et, t, Re, Ve, He, Le, Ue, ze, We));
|
|
4564
|
+
nt.assign(e.direction), rt.assign(e.value), it.assign(e.pdf), p(Ve.notEqual(oe.materialIndex).or(Re.not()), () => {
|
|
4565
|
+
He.assign(bi(G.metalness, G.roughness, G.transmission, G.clearcoat, G.emissive));
|
|
4566
|
+
}), Re.assign(w(!0)), Ve.assign(oe.materialIndex), Le.assign(w(!0));
|
|
4567
|
+
}), p(te(Ye.emissive).greaterThan(0), () => {
|
|
4542
4568
|
let t = j(1).toVar();
|
|
4543
|
-
p(
|
|
4544
|
-
let e =
|
|
4569
|
+
p(pe.equal(N(1)).and(ge.greaterThan(N(0))).and(Ce.greaterThan(0)), () => {
|
|
4570
|
+
let e = Yo(oe.triangleIndex, oe.dst, qe, Ke, a, o, _e);
|
|
4545
4571
|
t.assign(pi({
|
|
4546
|
-
pdf1:
|
|
4572
|
+
pdf1: Ce,
|
|
4547
4573
|
pdf2: e
|
|
4548
4574
|
}));
|
|
4549
|
-
}),
|
|
4550
|
-
contribution:
|
|
4575
|
+
}), xe.addAssign(ms({
|
|
4576
|
+
contribution: Ye.emissive.mul(Se).mul(r).mul(t),
|
|
4551
4577
|
pathLength: j(e),
|
|
4552
|
-
fireflyThreshold:
|
|
4553
|
-
frame: N(
|
|
4578
|
+
fireflyThreshold: ue,
|
|
4579
|
+
frame: N(be)
|
|
4554
4580
|
}));
|
|
4555
4581
|
});
|
|
4556
|
-
let
|
|
4557
|
-
|
|
4558
|
-
contribution:
|
|
4582
|
+
let at = Eo(oe.hitPoint, Xe, G, tt, nt, it, rt, n, e, t, y, b, x, S, C, E, D, O, i, a, o, A, M, ee, P, ne, F, re, ie);
|
|
4583
|
+
xe.addAssign(ms({
|
|
4584
|
+
contribution: at.mul(Se).mul(r),
|
|
4559
4585
|
pathLength: j(e),
|
|
4560
|
-
fireflyThreshold:
|
|
4561
|
-
frame: N(
|
|
4562
|
-
})), p(
|
|
4563
|
-
let n = f(([e, t, n, r]) =>
|
|
4564
|
-
p(
|
|
4565
|
-
let i =
|
|
4586
|
+
fireflyThreshold: ue,
|
|
4587
|
+
frame: N(be)
|
|
4588
|
+
})), p(pe.equal(N(1)).and(ge.greaterThan(N(0))), () => {
|
|
4589
|
+
let n = f(([e, t, n, r]) => po(e, t, n, r, Fi, i, a, o));
|
|
4590
|
+
p(ye.greaterThan(N(0)), () => {
|
|
4591
|
+
let i = No.wrap(rs(oe.hitPoint, Xe, t, B, me, he, a));
|
|
4566
4592
|
p(e.greaterThan(N(1)).and(G.roughness.greaterThan(.9)).and(G.metalness.lessThan(.1)).not().and(i.valid).and(i.pdf.greaterThan(0)), () => {
|
|
4567
|
-
let a = I(j(0), k(
|
|
4593
|
+
let a = I(j(0), k(Xe, i.direction));
|
|
4568
4594
|
p(a.greaterThan(0), () => {
|
|
4569
|
-
let o =
|
|
4595
|
+
let o = mo(oe.hitPoint, Xe, G), s = oe.hitPoint.add(o), c = i.distance.sub(.001), l = n(s, i.direction, c, t);
|
|
4570
4596
|
p(l.greaterThan(0), () => {
|
|
4571
|
-
let t =
|
|
4597
|
+
let t = Ua(tt, i.direction, Xe, G), n = To(tt, i.direction, Xe, G), o = z(n.greaterThan(0), pi({
|
|
4572
4598
|
pdf1: i.pdf,
|
|
4573
4599
|
pdf2: n
|
|
4574
|
-
}), j(1)), s = i.emission.mul(t).mul(a).div(i.pdf).mul(l).mul(
|
|
4575
|
-
|
|
4576
|
-
contribution: s.mul(
|
|
4600
|
+
}), j(1)), s = i.emission.mul(t).mul(a).div(i.pdf).mul(l).mul(ve).mul(o);
|
|
4601
|
+
xe.addAssign(ms({
|
|
4602
|
+
contribution: s.mul(Se).mul(r),
|
|
4577
4603
|
pathLength: j(e),
|
|
4578
|
-
fireflyThreshold:
|
|
4579
|
-
frame: N(
|
|
4604
|
+
fireflyThreshold: ue,
|
|
4605
|
+
frame: N(be)
|
|
4580
4606
|
}));
|
|
4581
4607
|
});
|
|
4582
4608
|
});
|
|
4583
4609
|
});
|
|
4584
4610
|
}).Else(() => {
|
|
4585
|
-
let i =
|
|
4586
|
-
|
|
4587
|
-
contribution: i.mul(
|
|
4611
|
+
let i = $o(oe.hitPoint, Xe, tt, G, fe, e, t, ve, me, he, ge, _e, a, n, Ua, mo);
|
|
4612
|
+
xe.addAssign(ms({
|
|
4613
|
+
contribution: i.mul(Se).mul(r),
|
|
4588
4614
|
pathLength: j(e),
|
|
4589
|
-
fireflyThreshold:
|
|
4590
|
-
frame: N(
|
|
4615
|
+
fireflyThreshold: ue,
|
|
4616
|
+
frame: N(be)
|
|
4591
4617
|
}));
|
|
4592
4618
|
});
|
|
4593
|
-
}), p(
|
|
4594
|
-
|
|
4619
|
+
}), p(Le.not().or(e.equal(N(0))), () => {
|
|
4620
|
+
He.assign(Kr.wrap(ls(G, oe.materialIndex, Re, Ve, He))), Re.assign(w(!0)), Ve.assign(oe.materialIndex);
|
|
4595
4621
|
});
|
|
4596
|
-
let
|
|
4597
|
-
|
|
4598
|
-
|
|
4622
|
+
let ot = Ur.wrap(Ta(G, e, He, M, ae, ie)), st = Qa.wrap(Mo(tt, Xe, G, nt, it, rt, n, e, t, ot, A, M, ee, ne, F, re, ie, ae));
|
|
4623
|
+
Se.mulAssign(st.throughput), Ke.assign(oe.hitPoint.add(Xe.mul(.001))), qe.assign(st.direction), Ce.assign(st.combinedPdf), Ie.assign(w(!1)), p(G.metalness.greaterThan(.7).and(G.roughness.lessThan(.3)), () => {
|
|
4624
|
+
Fe.assign(N(as));
|
|
4599
4625
|
}).ElseIf(G.transmission.greaterThan(.5), () => {
|
|
4600
|
-
|
|
4626
|
+
Fe.assign(N(os));
|
|
4601
4627
|
}).Else(() => {
|
|
4602
|
-
|
|
4603
|
-
}), p(e.equal(N(0)).and(
|
|
4604
|
-
|
|
4628
|
+
Fe.assign(N(ss));
|
|
4629
|
+
}), p(e.equal(N(0)).and(oe.didHit), () => {
|
|
4630
|
+
we.assign(Xe), Te.assign(G.color.xyz), Ee.assign(j(oe.materialIndex)), De.assign(oe.hitPoint), Oe.assign(oe.dst);
|
|
4605
4631
|
});
|
|
4606
|
-
let
|
|
4607
|
-
p(
|
|
4632
|
+
let ct = fs(e, Se, G, oe.materialIndex, qe, t, Re, Ve, He, Le, Be, ie, ae);
|
|
4633
|
+
p(ct.lessThanEqual(0), () => {
|
|
4608
4634
|
u();
|
|
4609
|
-
}),
|
|
4610
|
-
}),
|
|
4611
|
-
radiance: G(
|
|
4612
|
-
objectNormal:
|
|
4613
|
-
objectColor:
|
|
4614
|
-
objectID:
|
|
4615
|
-
firstHitPoint:
|
|
4616
|
-
firstHitDistance:
|
|
4635
|
+
}), Se.divAssign(ct), Ge.addAssign(1), Le.assign(w(!1)), ze.assign(w(!1));
|
|
4636
|
+
}), cs({
|
|
4637
|
+
radiance: G(xe, U),
|
|
4638
|
+
objectNormal: we,
|
|
4639
|
+
objectColor: Te,
|
|
4640
|
+
objectID: Ee,
|
|
4641
|
+
firstHitPoint: De,
|
|
4642
|
+
firstHitDistance: Oe
|
|
4617
4643
|
});
|
|
4618
|
-
}),
|
|
4644
|
+
}), gs = /* @__PURE__ */ K("\n fn visualizeDepth( depth: f32 ) -> vec3f {\n return vec3f( 1.0f - depth );\n }\n"), _s = /* @__PURE__ */ K("\n fn visualizeNormal( normal: vec3f ) -> vec3f {\n return normal * 0.5f + 0.5f;\n }\n"), vs = /* @__PURE__ */ K("\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"), ys = f(([e, t, n, r, i, a, o, s, c, l, u, d, f, m, h, g, _, v, y, b, x, S]) => {
|
|
4619
4645
|
let C = G(1, 0, 1, 1).toVar(), w = Lr({
|
|
4620
4646
|
origin: e,
|
|
4621
4647
|
direction: t
|
|
4622
|
-
}), E = Br.wrap(
|
|
4648
|
+
}), E = Br.wrap(Pi(w, n, r, i).toVar());
|
|
4623
4649
|
return p(l.equal(N(7)), () => {
|
|
4624
4650
|
let e = j(E.triTests).div(u);
|
|
4625
4651
|
C.assign(z(e.lessThan(1), G(W(e), 1), G(1, 0, 0, 1)));
|
|
@@ -4628,7 +4654,7 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4628
4654
|
C.assign(z(e.lessThan(1), G(W(e), 1), G(1, 0, 0, 1)));
|
|
4629
4655
|
}), p(l.equal(N(10)), () => {
|
|
4630
4656
|
p(c, () => {
|
|
4631
|
-
let e =
|
|
4657
|
+
let e = Hi({
|
|
4632
4658
|
tex: a,
|
|
4633
4659
|
samp: de(a),
|
|
4634
4660
|
direction: t,
|
|
@@ -4663,7 +4689,7 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4663
4689
|
p(E.didHit.not(), () => {
|
|
4664
4690
|
C.assign(G(0, 0, 0, 1));
|
|
4665
4691
|
}).Else(() => {
|
|
4666
|
-
let t = Rr.wrap(
|
|
4692
|
+
let t = Rr.wrap(Ci(E.materialIndex, i)).toVar(), n = Gr.wrap(Qi(m, h, g, _, v, y, t, E.uv, E.normal)).toVar().emissive.toVar(), r = te(n).toVar();
|
|
4667
4693
|
p(r.greaterThan(0), () => {
|
|
4668
4694
|
let t = n.div(I(r.mul(.1), .001)).toVar(), i = te(e.sub(E.hitPoint)), a = T(j(1).sub(i.div(10)), 0, 1), o = L(t, t.mul(W(1, .8, .6)), a.mul(.3));
|
|
4669
4695
|
C.assign(G(o, 1));
|
|
@@ -4675,41 +4701,41 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4675
4701
|
p(E.didHit.not(), () => {
|
|
4676
4702
|
C.assign(G(.5, .5, 1, 1));
|
|
4677
4703
|
}).Else(() => {
|
|
4678
|
-
let e = Rr.wrap(
|
|
4679
|
-
C.assign(G(
|
|
4704
|
+
let e = Rr.wrap(Ci(E.materialIndex, i)).toVar(), t = R(Gr.wrap(Qi(m, h, g, _, v, y, e, E.uv, E.normal)).toVar().normal);
|
|
4705
|
+
C.assign(G(_s({ normal: t }), 1));
|
|
4680
4706
|
});
|
|
4681
4707
|
}), p(l.equal(N(2)), () => {
|
|
4682
4708
|
p(E.didHit.not(), () => {
|
|
4683
4709
|
C.assign(G(W(1), 1));
|
|
4684
4710
|
}).Else(() => {
|
|
4685
|
-
let e =
|
|
4711
|
+
let e = vs({
|
|
4686
4712
|
worldPos: E.hitPoint,
|
|
4687
4713
|
cameraProjectionMatrix: b,
|
|
4688
4714
|
cameraViewMatrix: x
|
|
4689
4715
|
});
|
|
4690
|
-
C.assign(G(
|
|
4716
|
+
C.assign(G(gs({ depth: e }), 1));
|
|
4691
4717
|
});
|
|
4692
4718
|
}), p(l.equal(N(3)), () => {
|
|
4693
4719
|
p(E.didHit.not(), () => {
|
|
4694
4720
|
C.assign(G(0, 0, 0, 1));
|
|
4695
4721
|
}).Else(() => {
|
|
4696
|
-
let e = Rr.wrap(
|
|
4722
|
+
let e = Rr.wrap(Ci(E.materialIndex, i)).toVar(), t = Gr.wrap(Qi(m, h, g, _, v, y, e, E.uv, E.normal)).toVar().albedo.rgb;
|
|
4697
4723
|
C.assign(G(t, 1));
|
|
4698
4724
|
});
|
|
4699
4725
|
}), p(l.equal(N(5)), () => {
|
|
4700
4726
|
p(E.didHit.not(), () => {
|
|
4701
4727
|
C.assign(G(0, 0, 0, 1));
|
|
4702
4728
|
}).Else(() => {
|
|
4703
|
-
let e = Rr.wrap(
|
|
4729
|
+
let e = Rr.wrap(Ci(E.materialIndex, i)).toVar(), t = Gr.wrap(Qi(m, h, g, _, v, y, e, E.uv, E.normal)).toVar(), l = t.albedo.rgb.toVar(), u = R(t.normal).toVar(), f = ln({ state: un({ seed: V(d.x).mul(V(1973)).add(V(d.y).mul(V(9277))).add(S.mul(V(26699))) }) }).toVar(), b = ka({
|
|
4704
4730
|
N: u,
|
|
4705
4731
|
xi: U(J(f).toVar(), J(f).toVar()).toVar()
|
|
4706
4732
|
}).toVar(), x = Lr({
|
|
4707
4733
|
origin: E.hitPoint.add(u.mul(.001)).toVar(),
|
|
4708
4734
|
direction: b
|
|
4709
|
-
}), w = Br.wrap(
|
|
4735
|
+
}), w = Br.wrap(Pi(x, n, r, i).toVar()), T = W(0).toVar();
|
|
4710
4736
|
p(w.didHit.not(), () => {
|
|
4711
4737
|
p(c, () => {
|
|
4712
|
-
T.assign(
|
|
4738
|
+
T.assign(Hi({
|
|
4713
4739
|
tex: a,
|
|
4714
4740
|
samp: de(a),
|
|
4715
4741
|
direction: b,
|
|
@@ -4719,9 +4745,9 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4719
4745
|
}).xyz);
|
|
4720
4746
|
});
|
|
4721
4747
|
}).Else(() => {
|
|
4722
|
-
let e = Rr.wrap(
|
|
4748
|
+
let e = Rr.wrap(Ci(w.materialIndex, i)).toVar(), t = Gr.wrap(Qi(m, h, g, _, v, y, e, w.uv, w.normal)).toVar();
|
|
4723
4749
|
T.assign(t.emissive), p(c, () => {
|
|
4724
|
-
let e = R(t.normal).toVar(), n =
|
|
4750
|
+
let e = R(t.normal).toVar(), n = Hi({
|
|
4725
4751
|
tex: a,
|
|
4726
4752
|
samp: de(a),
|
|
4727
4753
|
direction: e,
|
|
@@ -4737,7 +4763,7 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4737
4763
|
});
|
|
4738
4764
|
}), p(l.equal(N(6)), () => {
|
|
4739
4765
|
p(E.didHit, () => {
|
|
4740
|
-
let e = E.normal.toVar(), n = R(t.sub(e.mul(k(t, e).mul(2)))).toVar(), r =
|
|
4766
|
+
let e = E.normal.toVar(), n = R(t.sub(e.mul(k(t, e).mul(2)))).toVar(), r = Hi({
|
|
4741
4767
|
tex: a,
|
|
4742
4768
|
samp: de(a),
|
|
4743
4769
|
direction: n,
|
|
@@ -4747,7 +4773,7 @@ var Wo = 8, Go = 2, Ko = Xt({
|
|
|
4747
4773
|
}).xyz, i = r.div(r.add(1));
|
|
4748
4774
|
C.assign(G(i, 1));
|
|
4749
4775
|
}).Else(() => {
|
|
4750
|
-
let e =
|
|
4776
|
+
let e = Hi({
|
|
4751
4777
|
tex: a,
|
|
4752
4778
|
samp: de(a),
|
|
4753
4779
|
direction: t,
|
|
@@ -4763,7 +4789,7 @@ f(([e, t]) => {
|
|
|
4763
4789
|
let n = J(t), r = W(.25 / 255, -.25 / 255, .25 / 255).toVar();
|
|
4764
4790
|
return r.assign(L(r.mul(2), r.mul(-2), n)), e.add(r);
|
|
4765
4791
|
});
|
|
4766
|
-
var
|
|
4792
|
+
var bs = /* @__PURE__ */ K("\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"), xs = f(([e, t, n, r, i]) => {
|
|
4767
4793
|
let a = ve(n, e.div(t), 0), o = N(0).toVar();
|
|
4768
4794
|
return p(a.b.greaterThan(.5), () => {
|
|
4769
4795
|
o.assign(0);
|
|
@@ -4771,64 +4797,64 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4771
4797
|
let e = N(M(a.r.mul(j(i)).add(.5)));
|
|
4772
4798
|
o.assign(T(e, r, i));
|
|
4773
4799
|
}), o;
|
|
4774
|
-
}),
|
|
4775
|
-
let { pixelCoord: t, writeColorTex: n, writeNDTex: r, writeAlbedoTex: i, resolution: a, frame: o, samplesPerPixel: s, visMode: c, cameraWorldMatrix: l, cameraProjectionMatrixInverse: d, cameraViewMatrix: f, cameraProjectionMatrix: h, bvhBuffer: g, triangleBuffer: _, materialBuffer: v, albedoMaps: y, normalMaps: b, bumpMaps: x, metalnessMaps: S, roughnessMaps: C, emissiveMaps: w, displacementMaps: T, directionalLightsBuffer: E, numDirectionalLights: D, areaLightsBuffer: O, numAreaLights: k, pointLightsBuffer: A, numPointLights: M, spotLightsBuffer: ee, numSpotLights: P, envTexture: te, environmentIntensity: ne, envMatrix: F, envCDFBuffer: re, envTotalSum: ie,
|
|
4776
|
-
|
|
4777
|
-
let
|
|
4800
|
+
}), Ss = (e) => {
|
|
4801
|
+
let { pixelCoord: t, writeColorTex: n, writeNDTex: r, writeAlbedoTex: i, resolution: a, frame: o, samplesPerPixel: s, visMode: c, cameraWorldMatrix: l, cameraProjectionMatrixInverse: d, cameraViewMatrix: f, cameraProjectionMatrix: h, bvhBuffer: g, triangleBuffer: _, materialBuffer: v, albedoMaps: y, normalMaps: b, bumpMaps: x, metalnessMaps: S, roughnessMaps: C, emissiveMaps: w, displacementMaps: T, directionalLightsBuffer: E, numDirectionalLights: D, areaLightsBuffer: O, numAreaLights: k, pointLightsBuffer: A, numPointLights: M, spotLightsBuffer: ee, numSpotLights: P, envTexture: te, environmentIntensity: ne, envMatrix: F, envCDFBuffer: re, envTotalSum: ie, envCompensationDelta: I, envResolution: ae, enableEnvironmentLight: oe, useEnvMapIS: se, maxBounceCount: ce, transmissiveBounces: le, showBackground: ue, transparentBackground: de, backgroundIntensity: fe, fireflyThreshold: pe, globalIlluminationIntensity: me, totalTriangleCount: he, enableEmissiveTriangleSampling: ge, emissiveTriangleBuffer: _e, emissiveVec4Offset: B, emissiveTriangleCount: H, emissiveTotalPower: be, emissiveBoost: xe, lightBVHBuffer: K, lightBVHNodeCount: Ce, debugVisScale: we, enableAccumulation: Te, hasPreviousAccumulated: Ee, prevAccumTexture: De, prevNormalDepthTexture: Oe, prevAlbedoTexture: ke, accumulationAlpha: Ae, cameraIsMoving: je, useAdaptiveSampling: Me, adaptiveSamplingTexture: Ne, adaptiveSamplingMin: Pe, adaptiveSamplingMax: Fe, enableDOF: Ie, focalLength: Le, aperture: Re, focusDistance: ze, sceneScale: Be, apertureScale: Ve, anamorphicRatio: He } = e, Ue = Se(V(N(t.x)), V(N(t.y))), We = t.div(a), Ge = t.div(a).mul(2).sub(1).toVar();
|
|
4802
|
+
Ge.y.assign(Ge.y.negate());
|
|
4803
|
+
let Ke = G(0).toVar(), qe = N(0).toVar(), q = bn({
|
|
4778
4804
|
pixelCoord: t,
|
|
4779
4805
|
rayIndex: N(0),
|
|
4780
4806
|
frame: o
|
|
4781
|
-
}).toVar(),
|
|
4782
|
-
p(o.greaterThan(V(2)).and(
|
|
4783
|
-
let e =
|
|
4784
|
-
|
|
4785
|
-
p(
|
|
4786
|
-
let e = ve(
|
|
4787
|
-
|
|
4788
|
-
let t = ve(
|
|
4789
|
-
|
|
4807
|
+
}).toVar(), Je = N(t.y).mul(N(a.x)).add(N(t.x)).toVar(), Ye = W(0, 0, 1).toVar(), Xe = j(1).toVar(), Ze = j(0).toVar(), Qe = N(s).toVar();
|
|
4808
|
+
p(o.greaterThan(V(2)).and(Me), () => {
|
|
4809
|
+
let e = xs(t, a, Ne, Pe, Fe);
|
|
4810
|
+
Qe.assign(e), p(Qe.equal(N(0)), () => {
|
|
4811
|
+
p(Te.and(Ee), () => {
|
|
4812
|
+
let e = ve(De, We, 0);
|
|
4813
|
+
Ke.assign(e), Ze.assign(e.w);
|
|
4814
|
+
let t = ve(Oe, We, 0);
|
|
4815
|
+
Ye.assign(t.xyz.mul(2).sub(1)), Xe.assign(t.w);
|
|
4790
4816
|
}).Else(() => {
|
|
4791
|
-
|
|
4817
|
+
Qe.assign(1);
|
|
4792
4818
|
});
|
|
4793
4819
|
});
|
|
4794
4820
|
});
|
|
4795
|
-
let
|
|
4821
|
+
let $e = W(0).toVar(), et = W(0).toVar(), tt = j(-1e3).toVar(), nt = U(2).div(a).toVar();
|
|
4796
4822
|
m({
|
|
4797
4823
|
start: N(0),
|
|
4798
|
-
end:
|
|
4824
|
+
end: Qe,
|
|
4799
4825
|
type: "int",
|
|
4800
4826
|
condition: "<"
|
|
4801
4827
|
}, ({ i: e }) => {
|
|
4802
|
-
let n = ln({ state:
|
|
4828
|
+
let n = ln({ state: q.add(V(e)) }).toVar(), r = yn(t, e, Qe, n, a, o).toVar();
|
|
4803
4829
|
p(c.equal(N(9)), () => {
|
|
4804
|
-
|
|
4830
|
+
Ke.assign(G(r, 1, 1)), qe.assign(1), u();
|
|
4805
4831
|
});
|
|
4806
|
-
let i = r.sub(.5).mul(
|
|
4832
|
+
let i = r.sub(.5).mul(nt), s = Ge.add(i), m = Lr.wrap(Ii(s, n, l, d, Ie, Le, Re, ze, Be, Ve, He)), j = G(0).toVar();
|
|
4807
4833
|
p(c.greaterThan(N(0)), () => {
|
|
4808
|
-
j.assign(
|
|
4834
|
+
j.assign(ys(m.origin, m.direction, g, _, v, te, F, ne, oe, c, we, t, a, y, b, x, S, C, w, h, f, o));
|
|
4809
4835
|
}).Else(() => {
|
|
4810
|
-
let r =
|
|
4836
|
+
let r = cs.wrap(hs(m, n, e, Je, g, _, v, y, b, x, S, C, w, T, E, D, O, k, A, M, ee, P, te, ne, F, re, ie, I, ae, oe, se, ce, le, fe, ue, de, pe, me, he, ge, _e, B, H, be, xe, K, Ce, t, a, o));
|
|
4811
4837
|
j.assign(r.radiance), p(e.equal(N(0)), () => {
|
|
4812
|
-
|
|
4813
|
-
|
|
4838
|
+
$e.assign(r.objectNormal), et.assign(r.objectColor), tt.assign(r.objectID), p(r.firstHitDistance.lessThan(1e9), () => {
|
|
4839
|
+
Ye.assign(R(r.objectNormal)), Xe.assign(bs({
|
|
4814
4840
|
worldPos: r.firstHitPoint,
|
|
4815
4841
|
cameraProjectionMatrix: h,
|
|
4816
4842
|
cameraViewMatrix: f
|
|
4817
4843
|
}));
|
|
4818
4844
|
});
|
|
4819
4845
|
});
|
|
4820
|
-
}),
|
|
4821
|
-
}), p(
|
|
4822
|
-
|
|
4846
|
+
}), Ke.addAssign(j), Ze.addAssign(j.w), qe.addAssign(1);
|
|
4847
|
+
}), p(qe.greaterThan(N(0)), () => {
|
|
4848
|
+
Ke.divAssign(j(qe)), Ze.divAssign(j(qe));
|
|
4823
4849
|
});
|
|
4824
|
-
let
|
|
4825
|
-
p(
|
|
4826
|
-
let e = ve(
|
|
4827
|
-
|
|
4828
|
-
|
|
4829
|
-
});
|
|
4830
|
-
}), ye(n,
|
|
4831
|
-
},
|
|
4850
|
+
let rt = Ke.xyz.toVar(), it = G(Ye.mul(.5).add(.5), Xe).toVar(), at = W(et).toVar(), ot = z(de, Ze, j(1)).toVar();
|
|
4851
|
+
p(Te.and(je.not()).and(o.greaterThan(V(0))).and(Ee), () => {
|
|
4852
|
+
let e = ve(De, We, 0).toVar();
|
|
4853
|
+
rt.assign(L(e.xyz, Ke.xyz, Ae)), it.assign(L(ve(Oe, We, 0), it, Ae)), at.assign(L(ve(ke, We, 0).xyz, at, Ae)), p(de, () => {
|
|
4854
|
+
ot.assign(L(e.w, Ze, Ae));
|
|
4855
|
+
});
|
|
4856
|
+
}), ye(n, Ue, G(rt.xyz, ot)).toWriteOnly(), ye(r, Ue, it).toWriteOnly(), ye(i, Ue, G(at, 1)).toWriteOnly();
|
|
4857
|
+
}, Cs = class {
|
|
4832
4858
|
constructor(e = "Build") {
|
|
4833
4859
|
this.label = e, this.entries = /* @__PURE__ */ new Map(), this.order = [], this.totalStart = performance.now();
|
|
4834
4860
|
}
|
|
@@ -4855,7 +4881,7 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4855
4881
|
total: Math.round(e)
|
|
4856
4882
|
};
|
|
4857
4883
|
}
|
|
4858
|
-
},
|
|
4884
|
+
}, ws = 8, Ts = class {
|
|
4859
4885
|
constructor() {
|
|
4860
4886
|
this.computeNode = null, this.prevColorTexNode = null, this.prevNormalDepthTexNode = null, this.prevAlbedoTexNode = null, this.adaptiveSamplingTexNode = null, this.tileOffsetX = H(0, "int"), this.tileOffsetY = H(0, "int"), this.renderWidth = H(1920, "int"), this.renderHeight = H(1080, "int"), this._dispatchX = 0, this._dispatchY = 0, this._dispatchSize = [
|
|
4861
4887
|
0,
|
|
@@ -4864,12 +4890,12 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4864
4890
|
], this._sceneTextureNodes = null, this._compiled = !1;
|
|
4865
4891
|
}
|
|
4866
4892
|
setupCompute(e) {
|
|
4867
|
-
let { stage: t, storageTextures: n } = e, r = new
|
|
4893
|
+
let { stage: t, storageTextures: n } = e, r = new Cs("setupCompute");
|
|
4868
4894
|
r.start("Create texture nodes");
|
|
4869
4895
|
let i = this._createTextureNodes(t, n);
|
|
4870
4896
|
r.end("Create texture nodes"), r.start("Build compute node (TSL)");
|
|
4871
4897
|
let a = n.renderWidth, o = n.renderHeight;
|
|
4872
|
-
this._dispatchX = Math.ceil(a /
|
|
4898
|
+
this._dispatchX = Math.ceil(a / ws), this._dispatchY = Math.ceil(o / ws), this.renderWidth.value = a, this.renderHeight.value = o;
|
|
4873
4899
|
let s = n.getWriteTextures();
|
|
4874
4900
|
this.computeNode = this._buildComputeNode(t, i, s.color, s.normalDepth, s.albedo), this._compiled = !1, r.end("Build compute node (TSL)"), r.print();
|
|
4875
4901
|
}
|
|
@@ -4881,11 +4907,11 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4881
4907
|
return this._sceneTextureNodes;
|
|
4882
4908
|
}
|
|
4883
4909
|
setSize(e, t) {
|
|
4884
|
-
this._dispatchX = Math.ceil(e /
|
|
4910
|
+
this._dispatchX = Math.ceil(e / ws), this._dispatchY = Math.ceil(t / ws), this.computeNode && (this._dispatchSize[0] = this._dispatchX, this._dispatchSize[1] = this._dispatchY, this.computeNode.dispatchSize = this._dispatchSize), this.renderWidth.value = e, this.renderHeight.value = t, this.tileOffsetX.value = 0, this.tileOffsetY.value = 0;
|
|
4885
4911
|
}
|
|
4886
4912
|
setTileDispatch(e, t, n, r) {
|
|
4887
4913
|
this.tileOffsetX.value = e, this.tileOffsetY.value = t;
|
|
4888
|
-
let i = Math.ceil(n /
|
|
4914
|
+
let i = Math.ceil(n / ws), a = Math.ceil(r / ws);
|
|
4889
4915
|
this.computeNode && (this._dispatchSize[0] = i, this._dispatchSize[1] = a, this.computeNode.dispatchSize = this._dispatchSize);
|
|
4890
4916
|
}
|
|
4891
4917
|
setFullScreenDispatch() {
|
|
@@ -4896,7 +4922,7 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4896
4922
|
}
|
|
4897
4923
|
_createTextureNodes(e, t) {
|
|
4898
4924
|
let n = e.triangleStorageNode, r = e.bvhStorageNode, i = e.materialData.materialStorageNode, a = e.lightStorageNode;
|
|
4899
|
-
|
|
4925
|
+
fo(e.uniforms.get("enableAlphaShadows"));
|
|
4900
4926
|
let o = ve(e.environment.environmentTexture), c = new s();
|
|
4901
4927
|
this.adaptiveSamplingTexNode = c;
|
|
4902
4928
|
let l = e.environment.envCDFStorageNode, u = t.getReadTextures();
|
|
@@ -4910,7 +4936,7 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4910
4936
|
]), 1, 1, 1);
|
|
4911
4937
|
return e.minFilter = q, e.magFilter = q, e.generateMipmaps = !1, e.needsUpdate = !0, ve(e);
|
|
4912
4938
|
}, f = e.materialData, p = f.albedoMaps ? ve(f.albedoMaps) : d(), m = f.normalMaps ? ve(f.normalMaps) : d(), h = f.bumpMaps ? ve(f.bumpMaps) : d(), g = f.metalnessMaps ? ve(f.metalnessMaps) : d(), _ = f.roughnessMaps ? ve(f.roughnessMaps) : d(), v = f.emissiveMaps ? ve(f.emissiveMaps) : d(), y = f.displacementMaps ? ve(f.displacementMaps) : d();
|
|
4913
|
-
|
|
4939
|
+
uo(p);
|
|
4914
4940
|
let b = {
|
|
4915
4941
|
triStorage: n,
|
|
4916
4942
|
bvhStorage: r,
|
|
@@ -4932,9 +4958,9 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4932
4958
|
_buildComputeNode(e, t, n, r, i) {
|
|
4933
4959
|
let { triStorage: a, bvhStorage: o, matStorage: s, lightBufferStorage: c, envTex: l, adaptiveSamplingTex: u, envCDFStorage: d, 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;
|
|
4934
4960
|
return f(() => {
|
|
4935
|
-
let t = x.add(N(Te.x).mul(
|
|
4961
|
+
let t = x.add(N(Te.x).mul(ws)).add(N(F.x)), f = S.add(N(Te.y).mul(ws)).add(N(F.y));
|
|
4936
4962
|
p(t.lessThan(C).and(f.lessThan(w)), () => {
|
|
4937
|
-
|
|
4963
|
+
Ss({
|
|
4938
4964
|
pixelCoord: U(j(t).add(.5), j(f).add(.5)),
|
|
4939
4965
|
writeColorTex: n,
|
|
4940
4966
|
writeNDTex: r,
|
|
@@ -4973,6 +4999,7 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4973
4999
|
envMatrix: e.environmentMatrix,
|
|
4974
5000
|
envCDFBuffer: d,
|
|
4975
5001
|
envTotalSum: e.envTotalSum,
|
|
5002
|
+
envCompensationDelta: e.envCompensationDelta,
|
|
4976
5003
|
envResolution: e.envResolution,
|
|
4977
5004
|
enableEnvironmentLight: e.enableEnvironment,
|
|
4978
5005
|
useEnvMapIS: e.useEnvMapIS,
|
|
@@ -5015,15 +5042,15 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5015
5042
|
this._dispatchY,
|
|
5016
5043
|
1
|
|
5017
5044
|
], [
|
|
5018
|
-
|
|
5019
|
-
|
|
5045
|
+
ws,
|
|
5046
|
+
ws,
|
|
5020
5047
|
1
|
|
5021
5048
|
]);
|
|
5022
5049
|
}
|
|
5023
5050
|
dispose() {
|
|
5024
5051
|
this.computeNode?.dispose(), this.computeNode = null, this.prevColorTexNode = null, this.prevNormalDepthTexNode = null, this.prevAlbedoTexNode = null, this.adaptiveSamplingTexNode = null, this._sceneTextureNodes = null, this._compiled = !1;
|
|
5025
5052
|
}
|
|
5026
|
-
},
|
|
5053
|
+
}, Es = class {
|
|
5027
5054
|
constructor(e, t) {
|
|
5028
5055
|
this.traversalCost = e, this.intersectionCost = t, this.maxTreeletLeaves = 7, this.minImprovement = .02, this.topologyCache = /* @__PURE__ */ new Map();
|
|
5029
5056
|
for (let e = 3; e <= this.maxTreeletLeaves; e++) this.topologyCache.set(e, this.generateTopologies(e));
|
|
@@ -5214,10 +5241,10 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5214
5241
|
}
|
|
5215
5242
|
buildSubtree(e, t, n) {
|
|
5216
5243
|
if (typeof e == "number") {
|
|
5217
|
-
let r = t[n[e]], i = new
|
|
5244
|
+
let r = t[n[e]], i = new Ds();
|
|
5218
5245
|
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;
|
|
5219
5246
|
}
|
|
5220
|
-
let r = this.buildSubtree(e[0], t, n), i = this.buildSubtree(e[1], t, n), a = new
|
|
5247
|
+
let r = this.buildSubtree(e[0], t, n), i = this.buildSubtree(e[1], t, n), a = new Ds();
|
|
5221
5248
|
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;
|
|
5222
5249
|
}
|
|
5223
5250
|
setTreeletSize(e) {
|
|
@@ -5231,11 +5258,11 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5231
5258
|
getStatistics() {
|
|
5232
5259
|
return { ...this.stats };
|
|
5233
5260
|
}
|
|
5234
|
-
},
|
|
5261
|
+
}, Ds = class {
|
|
5235
5262
|
constructor() {
|
|
5236
5263
|
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;
|
|
5237
5264
|
}
|
|
5238
|
-
},
|
|
5265
|
+
}, Os = class {
|
|
5239
5266
|
constructor(e, t) {
|
|
5240
5267
|
this.traversalCost = e, this.intersectionCost = t, this.batchSizeRatio = .02, this.maxIterations = 2, this.timeBudgetMs = 15e3, this.stats = {
|
|
5241
5268
|
reinsertionsApplied: 0,
|
|
@@ -5400,7 +5427,7 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5400
5427
|
}
|
|
5401
5428
|
return this.stats.timeMs = performance.now() - n, this.stats;
|
|
5402
5429
|
}
|
|
5403
|
-
},
|
|
5430
|
+
}, ks = "" + new URL("assets/BVHWorker-CNJ0UBQz.js", import.meta.url).href, As = {
|
|
5404
5431
|
FLOATS_PER_TRIANGLE: 32,
|
|
5405
5432
|
POSITION_A_OFFSET: 0,
|
|
5406
5433
|
POSITION_B_OFFSET: 4,
|
|
@@ -5410,11 +5437,11 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5410
5437
|
NORMAL_C_OFFSET: 20,
|
|
5411
5438
|
UV_AB_OFFSET: 24,
|
|
5412
5439
|
UV_C_MAT_OFFSET: 28
|
|
5413
|
-
},
|
|
5440
|
+
}, js = As.FLOATS_PER_TRIANGLE, Ms = class {
|
|
5414
5441
|
constructor() {
|
|
5415
5442
|
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;
|
|
5416
5443
|
}
|
|
5417
|
-
},
|
|
5444
|
+
}, Ns = class {
|
|
5418
5445
|
constructor() {
|
|
5419
5446
|
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 = {
|
|
5420
5447
|
sahSplits: 0,
|
|
@@ -5474,9 +5501,9 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5474
5501
|
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)));
|
|
5475
5502
|
}
|
|
5476
5503
|
initializeTriangleArrays() {
|
|
5477
|
-
let e = this.totalTriangles, t = this.triangles, n =
|
|
5504
|
+
let e = this.totalTriangles, t = this.triangles, n = As.POSITION_A_OFFSET, r = As.POSITION_B_OFFSET, i = As.POSITION_C_OFFSET;
|
|
5478
5505
|
for (let a = 0; a < e; a++) {
|
|
5479
|
-
let e = a *
|
|
5506
|
+
let e = a * js, 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;
|
|
5480
5507
|
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;
|
|
5481
5508
|
}
|
|
5482
5509
|
}
|
|
@@ -5521,11 +5548,11 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5521
5548
|
this.splitStats.mortonSortTime += performance.now() - t;
|
|
5522
5549
|
}
|
|
5523
5550
|
build(e, t = 30, n = null) {
|
|
5524
|
-
return this.totalTriangles = e.byteLength / (
|
|
5551
|
+
return this.totalTriangles = e.byteLength / (js * 4), this.processedTriangles = 0, this.lastProgressUpdate = performance.now(), this.useWorker && typeof Worker < "u" ? new Promise((r, i) => {
|
|
5525
5552
|
let a = (a) => {
|
|
5526
5553
|
let o = this.totalTriangles, s = typeof SharedArrayBuffer < "u";
|
|
5527
5554
|
console.log(`[BVHBuilder] SharedArrayBuffer: ${s ? "enabled" : "unavailable (using transfer fallback)"}`);
|
|
5528
|
-
let c = s ? new SharedArrayBuffer(o *
|
|
5555
|
+
let c = s ? new SharedArrayBuffer(o * js * 4) : null;
|
|
5529
5556
|
a.onmessage = (e) => {
|
|
5530
5557
|
let { bvhData: t, triangles: o, originalToBvh: s, error: l, progress: u, treeletStats: d } = e.data;
|
|
5531
5558
|
if (l) {
|
|
@@ -5568,9 +5595,9 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5568
5595
|
a.postMessage(u, [l]);
|
|
5569
5596
|
};
|
|
5570
5597
|
try {
|
|
5571
|
-
a(new Worker(
|
|
5598
|
+
a(new Worker(ks, { type: "module" }));
|
|
5572
5599
|
} catch (i) {
|
|
5573
|
-
i.name === "SecurityError" ? or(
|
|
5600
|
+
i.name === "SecurityError" ? or(ks).then(a).catch(() => {
|
|
5574
5601
|
console.warn("Worker fetch fallback failed, using synchronous build"), r(this._buildSyncAndFlatten(e, t, n));
|
|
5575
5602
|
}) : (console.warn("Worker creation failed, falling back to synchronous build:", i), r(this._buildSyncAndFlatten(e, t, n)));
|
|
5576
5603
|
}
|
|
@@ -5589,7 +5616,7 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5589
5616
|
}
|
|
5590
5617
|
buildSync(e, t = 30, n = null, r = null) {
|
|
5591
5618
|
let i = performance.now();
|
|
5592
|
-
this.totalNodes = 0, this.processedTriangles = 0, this.triangles = e, this.totalTriangles = e.byteLength / (
|
|
5619
|
+
this.totalNodes = 0, this.processedTriangles = 0, this.triangles = e, this.totalTriangles = e.byteLength / (js * 4), this.lastProgressUpdate = performance.now(), this.splitStats = {
|
|
5593
5620
|
sahSplits: 0,
|
|
5594
5621
|
objectMedianSplits: 0,
|
|
5595
5622
|
spatialMedianSplits: 0,
|
|
@@ -5614,7 +5641,7 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5614
5641
|
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();
|
|
5615
5642
|
let s = performance.now(), c = this.buildNodeRecursive(0, a, t, n);
|
|
5616
5643
|
if (this.splitStats.sahBuildTime = performance.now() - s, this.enableTreeletOptimization && this.totalTriangles > 1e3) {
|
|
5617
|
-
let e = this.totalTriangles > this.treeletComplexityThreshold, t = e ? 3 : this.treeletSize, r = e ? 10 : this.maxTreeletsPerScene, i = new
|
|
5644
|
+
let e = this.totalTriangles > this.treeletComplexityThreshold, t = e ? 3 : this.treeletSize, r = e ? 10 : this.maxTreeletsPerScene, i = new Es(this.traversalCost, this.intersectionCost);
|
|
5618
5645
|
i.setTreeletSize(t), i.setMinImprovement(this.treeletMinImprovement), i.setMaxTreelets(r);
|
|
5619
5646
|
let a = performance.now();
|
|
5620
5647
|
for (let e = 0; e < this.treeletOptimizationPasses; e++) {
|
|
@@ -5636,7 +5663,7 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5636
5663
|
this.splitStats.treeletsProcessed = s.treeletsProcessed, this.splitStats.treeletsImproved = s.treeletsImproved, this.splitStats.averageSAHImprovement = s.averageSAHImprovement;
|
|
5637
5664
|
}
|
|
5638
5665
|
if (this.enableReinsertionOptimization && this.totalTriangles > 1e3) {
|
|
5639
|
-
let e = new
|
|
5666
|
+
let e = new Os(this.traversalCost, this.intersectionCost);
|
|
5640
5667
|
e.setBatchSizeRatio(this.reinsertionBatchSizeRatio), e.setMaxIterations(this.reinsertionMaxIterations);
|
|
5641
5668
|
let t = n ? (e) => {
|
|
5642
5669
|
n(e);
|
|
@@ -5651,10 +5678,10 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5651
5678
|
}
|
|
5652
5679
|
let l = performance.now();
|
|
5653
5680
|
this.applySAOrdering(c), this.splitStats.saOrderTime = performance.now() - l;
|
|
5654
|
-
let u = performance.now(), d = this.triangles, f = r || new Float32Array(a *
|
|
5681
|
+
let u = performance.now(), d = this.triangles, f = r || new Float32Array(a * js);
|
|
5655
5682
|
for (let e = 0; e < a; e++) {
|
|
5656
|
-
let t = this.indices[e] *
|
|
5657
|
-
f.set(d.subarray(t, t +
|
|
5683
|
+
let t = this.indices[e] * js, n = e * js;
|
|
5684
|
+
f.set(d.subarray(t, t + js), n);
|
|
5658
5685
|
}
|
|
5659
5686
|
this.reorderedTriangleData = f;
|
|
5660
5687
|
let p = new Uint32Array(a);
|
|
@@ -5670,7 +5697,7 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5670
5697
|
n - this.lastProgressUpdate < this.progressUpdateInterval || (this.lastProgressUpdate = n, t(Math.min(Math.floor(this.processedTriangles / this.totalTriangles * 100), 99)));
|
|
5671
5698
|
}
|
|
5672
5699
|
buildNodeRecursiveToDepth(e, t, n, r, i, a, o, s, c, l, u) {
|
|
5673
|
-
let d = new
|
|
5700
|
+
let d = new Ms();
|
|
5674
5701
|
this.totalNodes++;
|
|
5675
5702
|
let f = t - e;
|
|
5676
5703
|
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;
|
|
@@ -5711,7 +5738,7 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5711
5738
|
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);
|
|
5712
5739
|
}
|
|
5713
5740
|
buildNodeRecursive(e, t, n, r, i, a, o, s, c, l) {
|
|
5714
|
-
let u = new
|
|
5741
|
+
let u = new Ms();
|
|
5715
5742
|
this.totalNodes++;
|
|
5716
5743
|
let d = t - e;
|
|
5717
5744
|
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;
|
|
@@ -6009,7 +6036,7 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
6009
6036
|
let o = r - e, s = i - t, c = a - n;
|
|
6010
6037
|
return 2 * (o * s + s * c + c * o);
|
|
6011
6038
|
}
|
|
6012
|
-
},
|
|
6039
|
+
}, Ps = {
|
|
6013
6040
|
FLOATS_PER_TRIANGLE: 32,
|
|
6014
6041
|
POSITION_A_OFFSET: 0,
|
|
6015
6042
|
POSITION_B_OFFSET: 4,
|
|
@@ -6017,28 +6044,28 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
6017
6044
|
NORMAL_A_OFFSET: 12,
|
|
6018
6045
|
NORMAL_B_OFFSET: 16,
|
|
6019
6046
|
NORMAL_C_OFFSET: 20
|
|
6020
|
-
},
|
|
6047
|
+
}, Fs = Ps.FLOATS_PER_TRIANGLE, Is = 16, Ls = -1, Rs = -2, zs = class {
|
|
6021
6048
|
constructor() {
|
|
6022
6049
|
this._bounds = null, this._boundsNodeCount = 0;
|
|
6023
6050
|
}
|
|
6024
6051
|
updateTrianglePositions(e, t, n) {
|
|
6025
6052
|
let r = n.length;
|
|
6026
6053
|
for (let i = 0; i < r; i++) {
|
|
6027
|
-
let r = n[i], a = i *
|
|
6028
|
-
e[a +
|
|
6054
|
+
let r = n[i], a = i * Fs, 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];
|
|
6055
|
+
e[a + Ps.POSITION_A_OFFSET] = s, e[a + Ps.POSITION_A_OFFSET + 1] = c, e[a + Ps.POSITION_A_OFFSET + 2] = l, e[a + Ps.POSITION_B_OFFSET] = u, e[a + Ps.POSITION_B_OFFSET + 1] = d, e[a + Ps.POSITION_B_OFFSET + 2] = f, e[a + Ps.POSITION_C_OFFSET] = p, e[a + Ps.POSITION_C_OFFSET + 1] = m, e[a + Ps.POSITION_C_OFFSET + 2] = h;
|
|
6029
6056
|
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;
|
|
6030
|
-
e[a +
|
|
6057
|
+
e[a + Ps.NORMAL_A_OFFSET] = S, e[a + Ps.NORMAL_A_OFFSET + 1] = C, e[a + Ps.NORMAL_A_OFFSET + 2] = w, e[a + Ps.NORMAL_B_OFFSET] = S, e[a + Ps.NORMAL_B_OFFSET + 1] = C, e[a + Ps.NORMAL_B_OFFSET + 2] = w, e[a + Ps.NORMAL_C_OFFSET] = S, e[a + Ps.NORMAL_C_OFFSET + 1] = C, e[a + Ps.NORMAL_C_OFFSET + 2] = w;
|
|
6031
6058
|
}
|
|
6032
6059
|
}
|
|
6033
6060
|
refitRange(e, t, n, r) {
|
|
6034
6061
|
r > this._boundsNodeCount && (this._bounds = new Float32Array(r * 6), this._boundsNodeCount = r);
|
|
6035
6062
|
let i = this._bounds, a = n + r;
|
|
6036
6063
|
for (let r = a - 1; r >= n; r--) {
|
|
6037
|
-
let a = r *
|
|
6038
|
-
if (e[a + 3] ===
|
|
6064
|
+
let a = r * Is, o = (r - n) * 6;
|
|
6065
|
+
if (e[a + 3] === Ls) {
|
|
6039
6066
|
let n = e[a], r = e[a + 1], s = Infinity, c = Infinity, l = Infinity, u = -Infinity, d = -Infinity, f = -Infinity;
|
|
6040
6067
|
for (let e = 0; e < r; e++) {
|
|
6041
|
-
let r = (n + e) *
|
|
6068
|
+
let r = (n + e) * Fs, i = t[r + Ps.POSITION_A_OFFSET], a = t[r + Ps.POSITION_A_OFFSET + 1], o = t[r + Ps.POSITION_A_OFFSET + 2], p = t[r + Ps.POSITION_B_OFFSET], m = t[r + Ps.POSITION_B_OFFSET + 1], h = t[r + Ps.POSITION_B_OFFSET + 2], g = t[r + Ps.POSITION_C_OFFSET], _ = t[r + Ps.POSITION_C_OFFSET + 1], v = t[r + Ps.POSITION_C_OFFSET + 2];
|
|
6042
6069
|
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);
|
|
6043
6070
|
}
|
|
6044
6071
|
i[o] = s, i[o + 1] = c, i[o + 2] = l, i[o + 3] = u, i[o + 4] = d, i[o + 5] = f;
|
|
@@ -6052,15 +6079,15 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
6052
6079
|
n !== this._boundsNodeCount && (this._bounds = new Float32Array(n * 6), this._boundsNodeCount = n);
|
|
6053
6080
|
let r = this._bounds;
|
|
6054
6081
|
for (let i = n - 1; i >= 0; i--) {
|
|
6055
|
-
let n = i *
|
|
6056
|
-
if (o ===
|
|
6082
|
+
let n = i * Is, a = i * 6, o = e[n + 3];
|
|
6083
|
+
if (o === Ls) {
|
|
6057
6084
|
let i = e[n], o = e[n + 1], s = Infinity, c = Infinity, l = Infinity, u = -Infinity, d = -Infinity, f = -Infinity;
|
|
6058
6085
|
for (let e = 0; e < o; e++) {
|
|
6059
|
-
let n = (i + e) *
|
|
6086
|
+
let n = (i + e) * Fs, r = t[n + Ps.POSITION_A_OFFSET], a = t[n + Ps.POSITION_A_OFFSET + 1], o = t[n + Ps.POSITION_A_OFFSET + 2], p = t[n + Ps.POSITION_B_OFFSET], m = t[n + Ps.POSITION_B_OFFSET + 1], h = t[n + Ps.POSITION_B_OFFSET + 2], g = t[n + Ps.POSITION_C_OFFSET], _ = t[n + Ps.POSITION_C_OFFSET + 1], v = t[n + Ps.POSITION_C_OFFSET + 2];
|
|
6060
6087
|
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);
|
|
6061
6088
|
}
|
|
6062
6089
|
r[a] = s, r[a + 1] = c, r[a + 2] = l, r[a + 3] = u, r[a + 4] = d, r[a + 5] = f;
|
|
6063
|
-
} else if (o ===
|
|
6090
|
+
} else if (o === Rs) {
|
|
6064
6091
|
let t = e[n] * 6;
|
|
6065
6092
|
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];
|
|
6066
6093
|
} else {
|
|
@@ -6069,19 +6096,19 @@ var ys = /* @__PURE__ */ K("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
6069
6096
|
}
|
|
6070
6097
|
}
|
|
6071
6098
|
}
|
|
6072
|
-
},
|
|
6073
|
-
function
|
|
6074
|
-
let i = e.byteLength / (
|
|
6099
|
+
}, Bs = "" + new URL("assets/BVHSubtreeWorker-D9GImjGj.js", import.meta.url).href, Vs = 32, Hs = 5e4, Us = 8;
|
|
6100
|
+
function Ws(e, t, n, r) {
|
|
6101
|
+
let i = e.byteLength / (Vs * 4), a = Math.min(navigator.hardwareConcurrency || 4, Us), o = Math.ceil(Math.log2(a * 2.5 + 1));
|
|
6075
6102
|
return console.log(`[ParallelBVH] Parallel build: ${i.toLocaleString()} triangles, ${a} workers, parallelDepth=${o}`), new Promise((s, c) => {
|
|
6076
6103
|
(async () => {
|
|
6077
6104
|
let c = new SharedArrayBuffer(e.byteLength);
|
|
6078
6105
|
new Float32Array(c).set(e);
|
|
6079
|
-
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 *
|
|
6106
|
+
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 * Vs * 4), h;
|
|
6080
6107
|
try {
|
|
6081
|
-
h = new Worker(
|
|
6108
|
+
h = new Worker(ks, { type: "module" });
|
|
6082
6109
|
} catch (e) {
|
|
6083
6110
|
if (e.name !== "SecurityError") throw e;
|
|
6084
|
-
h = await or(
|
|
6111
|
+
h = await or(ks);
|
|
6085
6112
|
}
|
|
6086
6113
|
let g = null, _ = [h], v = { id: null }, y = !1, b = () => {
|
|
6087
6114
|
v.id &&= (clearTimeout(v.id), null);
|
|
@@ -6092,7 +6119,7 @@ function Us(e, t, n, r) {
|
|
|
6092
6119
|
if (y) return;
|
|
6093
6120
|
y = !0, console.warn(`[ParallelBVH] Parallel build failed (${e}), falling back to single worker`), b();
|
|
6094
6121
|
let i = new ArrayBuffer(c.byteLength);
|
|
6095
|
-
new Float32Array(i).set(new Float32Array(c)), s(
|
|
6122
|
+
new Float32Array(i).set(new Float32Array(c)), s(Ks(new Float32Array(i), t, n, r));
|
|
6096
6123
|
};
|
|
6097
6124
|
h.onerror = (e) => {
|
|
6098
6125
|
x(`coordinator error: ${e.message}`);
|
|
@@ -6107,7 +6134,7 @@ function Us(e, t, n, r) {
|
|
|
6107
6134
|
return;
|
|
6108
6135
|
}
|
|
6109
6136
|
if (t.type === "phase1Result") {
|
|
6110
|
-
g = t.splitStats,
|
|
6137
|
+
g = t.splitStats, Gs(t, a, c, l, u, d, f, m, i, n, h, _, b, x, s, v, r).catch((e) => x(e.message));
|
|
6111
6138
|
return;
|
|
6112
6139
|
}
|
|
6113
6140
|
if (t.type === "assembleResult") {
|
|
@@ -6141,7 +6168,7 @@ function Us(e, t, n, r) {
|
|
|
6141
6168
|
});
|
|
6142
6169
|
});
|
|
6143
6170
|
}
|
|
6144
|
-
async function
|
|
6171
|
+
async function Gs(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
|
|
6145
6172
|
let { topFlatData: _, topNodeCount: v, frontierTasks: y, frontierMap: b } = e;
|
|
6146
6173
|
if (!y || y.length === 0) {
|
|
6147
6174
|
console.log("[ParallelBVH] No frontier tasks, assembling with top-level tree only"), u.postMessage({
|
|
@@ -6190,10 +6217,10 @@ async function Ws(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
|
|
|
6190
6217
|
if (t.length === 0) continue;
|
|
6191
6218
|
let s;
|
|
6192
6219
|
try {
|
|
6193
|
-
s = new Worker(
|
|
6220
|
+
s = new Worker(Bs, { type: "module" });
|
|
6194
6221
|
} catch (e) {
|
|
6195
6222
|
if (e.name !== "SecurityError") throw e;
|
|
6196
|
-
s = await or(
|
|
6223
|
+
s = await or(Bs);
|
|
6197
6224
|
}
|
|
6198
6225
|
d.push(s), s.onerror = (e) => {
|
|
6199
6226
|
p(`subtree worker error: ${e.message}`);
|
|
@@ -6244,17 +6271,17 @@ async function Ws(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
|
|
|
6244
6271
|
});
|
|
6245
6272
|
}
|
|
6246
6273
|
}
|
|
6247
|
-
function
|
|
6274
|
+
function Ks(e, t, n, r) {
|
|
6248
6275
|
return new Promise((i, a) => {
|
|
6249
6276
|
(async () => {
|
|
6250
6277
|
let o;
|
|
6251
6278
|
try {
|
|
6252
|
-
o = new Worker(
|
|
6279
|
+
o = new Worker(ks, { type: "module" });
|
|
6253
6280
|
} catch (e) {
|
|
6254
6281
|
if (e.name !== "SecurityError") throw e;
|
|
6255
|
-
o = await or(
|
|
6282
|
+
o = await or(ks);
|
|
6256
6283
|
}
|
|
6257
|
-
let s = e.byteLength / (
|
|
6284
|
+
let s = e.byteLength / (Vs * 4), c = typeof SharedArrayBuffer < "u" ? new SharedArrayBuffer(s * Vs * 4) : null;
|
|
6258
6285
|
o.onmessage = (e) => {
|
|
6259
6286
|
let { bvhData: t, triangles: r, originalToBvh: s, error: l, progress: u, treeletStats: d } = e.data;
|
|
6260
6287
|
if (l) {
|
|
@@ -6292,16 +6319,16 @@ function Gs(e, t, n, r) {
|
|
|
6292
6319
|
});
|
|
6293
6320
|
});
|
|
6294
6321
|
}
|
|
6295
|
-
function
|
|
6296
|
-
return typeof Worker < "u" && typeof SharedArrayBuffer < "u" && e >=
|
|
6322
|
+
function qs(e) {
|
|
6323
|
+
return typeof Worker < "u" && typeof SharedArrayBuffer < "u" && e >= Hs;
|
|
6297
6324
|
}
|
|
6298
6325
|
//#endregion
|
|
6299
6326
|
//#region src/Processor/TLASBuilder.js
|
|
6300
|
-
var
|
|
6327
|
+
var Js = 16, Ys = class {
|
|
6301
6328
|
constructor() {
|
|
6302
6329
|
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;
|
|
6303
6330
|
}
|
|
6304
|
-
},
|
|
6331
|
+
}, Xs = class {
|
|
6305
6332
|
constructor() {
|
|
6306
6333
|
this._flatBuffer = null, this._flatBufferCapacity = 0;
|
|
6307
6334
|
}
|
|
@@ -6319,7 +6346,7 @@ var qs = 16, Js = class {
|
|
|
6319
6346
|
};
|
|
6320
6347
|
}
|
|
6321
6348
|
_buildRecursive(e, t) {
|
|
6322
|
-
let n = new
|
|
6349
|
+
let n = new Ys();
|
|
6323
6350
|
if (t.length === 1) {
|
|
6324
6351
|
let r = e[t[0]].worldAABB;
|
|
6325
6352
|
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;
|
|
@@ -6356,12 +6383,12 @@ var qs = 16, Js = class {
|
|
|
6356
6383
|
let e = r.pop();
|
|
6357
6384
|
e._flatIndex = n.length, n.push(e), e.rightChild && r.push(e.rightChild), e.leftChild && r.push(e.leftChild);
|
|
6358
6385
|
}
|
|
6359
|
-
let i = n.length *
|
|
6386
|
+
let i = n.length * Js;
|
|
6360
6387
|
i > this._flatBufferCapacity && (this._flatBuffer = new Float32Array(i), this._flatBufferCapacity = i);
|
|
6361
6388
|
let a = this._flatBuffer;
|
|
6362
6389
|
a.fill(0, 0, i);
|
|
6363
6390
|
for (let e = 0; e < n.length; e++) {
|
|
6364
|
-
let r = n[e], i = e *
|
|
6391
|
+
let r = n[e], i = e * Js;
|
|
6365
6392
|
if (r.leftChild) {
|
|
6366
6393
|
let e = r.leftChild, t = r.rightChild;
|
|
6367
6394
|
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;
|
|
@@ -6403,7 +6430,7 @@ var qs = 16, Js = class {
|
|
|
6403
6430
|
}
|
|
6404
6431
|
return t;
|
|
6405
6432
|
}
|
|
6406
|
-
},
|
|
6433
|
+
}, Zs = class {
|
|
6407
6434
|
constructor() {
|
|
6408
6435
|
this.entries = [], this.totalBLASNodes = 0, this.tlasNodeCount = 0;
|
|
6409
6436
|
}
|
|
@@ -6480,7 +6507,7 @@ var qs = 16, Js = class {
|
|
|
6480
6507
|
clear() {
|
|
6481
6508
|
this.entries = [], this.totalBLASNodes = 0, this.tlasNodeCount = 0;
|
|
6482
6509
|
}
|
|
6483
|
-
},
|
|
6510
|
+
}, Qs = "" + new URL("assets/TexturesWorker-DBqGmVdR.js", import.meta.url).href, $s = class {
|
|
6484
6511
|
constructor() {
|
|
6485
6512
|
this.canvasContextPairs = [], this.maxPoolSize = qn.CANVAS_POOL_SIZE;
|
|
6486
6513
|
}
|
|
@@ -6520,7 +6547,7 @@ var qs = 16, Js = class {
|
|
|
6520
6547
|
dispose() {
|
|
6521
6548
|
this.canvasContextPairs = [];
|
|
6522
6549
|
}
|
|
6523
|
-
},
|
|
6550
|
+
}, ec = class {
|
|
6524
6551
|
constructor(e = {}) {
|
|
6525
6552
|
this.pools = /* @__PURE__ */ new Map(), this.memoryUsage = 0, this.maxMemoryUsage = e.maxMemory || Zn.MAX_BUFFER_MEMORY, this.allocatedBuffers = /* @__PURE__ */ new WeakMap(), this.sizeStrategy = e.sizeStrategy || "adaptive";
|
|
6526
6553
|
}
|
|
@@ -6578,7 +6605,7 @@ var qs = 16, Js = class {
|
|
|
6578
6605
|
let e = this.getMemoryStats();
|
|
6579
6606
|
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";
|
|
6580
6607
|
}
|
|
6581
|
-
},
|
|
6608
|
+
}, tc = class {
|
|
6582
6609
|
constructor(e = qn.CACHE_SIZE_LIMIT) {
|
|
6583
6610
|
this.cache = /* @__PURE__ */ new Map(), this.accessOrder = [], this.maxSize = e;
|
|
6584
6611
|
}
|
|
@@ -6615,12 +6642,12 @@ var qs = 16, Js = class {
|
|
|
6615
6642
|
e && e.dispose && e.dispose();
|
|
6616
6643
|
}), this.cache.clear(), this.accessOrder = [];
|
|
6617
6644
|
}
|
|
6618
|
-
},
|
|
6645
|
+
}, nc = class {
|
|
6619
6646
|
constructor(e = {}) {
|
|
6620
|
-
this.useWorkers = typeof Worker < "u", this.maxConcurrentWorkers = qn.MAX_CONCURRENT_WORKERS, this.activeWorkers = 0, this.canvasPool = new
|
|
6647
|
+
this.useWorkers = typeof Worker < "u", this.maxConcurrentWorkers = qn.MAX_CONCURRENT_WORKERS, this.activeWorkers = 0, this.canvasPool = new $s(), this.bufferPool = new ec({
|
|
6621
6648
|
maxMemory: e.maxBufferMemory || Zn.MAX_BUFFER_MEMORY,
|
|
6622
6649
|
sizeStrategy: e.bufferSizeStrategy || "adaptive"
|
|
6623
|
-
}), this.textureCache = new
|
|
6650
|
+
}), this.textureCache = new tc(), this.capabilities = this.detectCapabilities(), this.optimalMethod = this.selectOptimalMethod();
|
|
6624
6651
|
}
|
|
6625
6652
|
detectCapabilities() {
|
|
6626
6653
|
return {
|
|
@@ -6677,10 +6704,10 @@ var qs = 16, Js = class {
|
|
|
6677
6704
|
try {
|
|
6678
6705
|
let t;
|
|
6679
6706
|
try {
|
|
6680
|
-
t = new Worker(
|
|
6707
|
+
t = new Worker(Qs, { type: "module" });
|
|
6681
6708
|
} catch (e) {
|
|
6682
6709
|
if (e.name !== "SecurityError") throw e;
|
|
6683
|
-
t = await or(
|
|
6710
|
+
t = await or(Qs);
|
|
6684
6711
|
}
|
|
6685
6712
|
let n = await this.prepareTexturesForWorkerDirect(e), r = await new Promise((e, r) => {
|
|
6686
6713
|
t.onmessage = (t) => {
|
|
@@ -6932,7 +6959,7 @@ var qs = 16, Js = class {
|
|
|
6932
6959
|
let l = performance.now();
|
|
6933
6960
|
try {
|
|
6934
6961
|
if (!t || t.length === 0) throw Error("No materials provided for texture creation");
|
|
6935
|
-
this.textureCache.dispose(), this.textureCache = new
|
|
6962
|
+
this.textureCache.dispose(), this.textureCache = new tc();
|
|
6936
6963
|
let e = [];
|
|
6937
6964
|
n && n.length > 0 && e.push(this.createTexturesToDataTexture(n).then((e) => ({
|
|
6938
6965
|
type: "albedo",
|
|
@@ -7043,7 +7070,7 @@ var qs = 16, Js = class {
|
|
|
7043
7070
|
let e = n.mipmaps[0], i = t.length;
|
|
7044
7071
|
t.push(null), r.push({
|
|
7045
7072
|
index: i,
|
|
7046
|
-
promise:
|
|
7073
|
+
promise: rc(e.data, e.width, e.height)
|
|
7047
7074
|
});
|
|
7048
7075
|
continue;
|
|
7049
7076
|
}
|
|
@@ -7055,7 +7082,7 @@ var qs = 16, Js = class {
|
|
|
7055
7082
|
let e = t.length;
|
|
7056
7083
|
t.push(null), r.push({
|
|
7057
7084
|
index: e,
|
|
7058
|
-
promise:
|
|
7085
|
+
promise: rc(n.image.data, n.image.width, n.image.height)
|
|
7059
7086
|
});
|
|
7060
7087
|
continue;
|
|
7061
7088
|
}
|
|
@@ -7101,13 +7128,13 @@ var qs = 16, Js = class {
|
|
|
7101
7128
|
this.canvasPool.dispose(), this.bufferPool.dispose(), this.textureCache.dispose();
|
|
7102
7129
|
}
|
|
7103
7130
|
};
|
|
7104
|
-
function
|
|
7131
|
+
function rc(e, t, n) {
|
|
7105
7132
|
let r = new Uint8ClampedArray(e.buffer, e.byteOffset, e.byteLength);
|
|
7106
7133
|
return createImageBitmap(new ImageData(r, t, n));
|
|
7107
7134
|
}
|
|
7108
7135
|
//#endregion
|
|
7109
7136
|
//#region src/Processor/GeometryExtractor.js
|
|
7110
|
-
var
|
|
7137
|
+
var ic = 128, ac = class {
|
|
7111
7138
|
constructor() {
|
|
7112
7139
|
this._vectorPool = {
|
|
7113
7140
|
vec3: Array(9).fill().map(() => new Mt()),
|
|
@@ -7322,7 +7349,7 @@ var rc = 128, ic = class {
|
|
|
7322
7349
|
n || (n = /* @__PURE__ */ new Map(), this._textureIndexCache.set(t, n));
|
|
7323
7350
|
let r = e.source.uuid, i = n.get(r);
|
|
7324
7351
|
if (i !== void 0) return i;
|
|
7325
|
-
if (t.length <
|
|
7352
|
+
if (t.length < ic) {
|
|
7326
7353
|
t.push(e);
|
|
7327
7354
|
let i = t.length - 1;
|
|
7328
7355
|
return n.set(r, i), i;
|
|
@@ -7411,7 +7438,7 @@ var rc = 128, ic = class {
|
|
|
7411
7438
|
sceneFeatures: this.sceneFeatures
|
|
7412
7439
|
};
|
|
7413
7440
|
}
|
|
7414
|
-
},
|
|
7441
|
+
}, oc = class {
|
|
7415
7442
|
constructor() {
|
|
7416
7443
|
this.maxLeafSize = 8;
|
|
7417
7444
|
}
|
|
@@ -7470,7 +7497,7 @@ var rc = 128, ic = class {
|
|
|
7470
7497
|
l < i ? n = l + 1 : r = l;
|
|
7471
7498
|
}
|
|
7472
7499
|
}
|
|
7473
|
-
},
|
|
7500
|
+
}, sc = class {
|
|
7474
7501
|
constructor() {
|
|
7475
7502
|
this.emissiveTriangles = [], this.emissiveCount = 0, this.totalEmissivePower = 0, this.emissiveIndicesArray = null, this.emissivePowerArray = null, this.cdfArray = null, this.lightBVHNodeData = null, this.lightBVHNodeCount = 0;
|
|
7476
7503
|
}
|
|
@@ -7614,7 +7641,7 @@ var rc = 128, ic = class {
|
|
|
7614
7641
|
}
|
|
7615
7642
|
buildLightBVH() {
|
|
7616
7643
|
if (this.emissiveCount === 0) return this.lightBVHNodeData = new Float32Array(16), this.lightBVHNodeData[7] = 1, this.lightBVHNodeCount = 1, 1;
|
|
7617
|
-
let { nodeData: e, nodeCount: t, sortedPerm: n } = new
|
|
7644
|
+
let { nodeData: e, nodeCount: t, sortedPerm: n } = new oc().build(this.emissiveTriangles);
|
|
7618
7645
|
return this.lightBVHNodeData = e, this.lightBVHNodeCount = t, this._rebuildSortedEmissiveData(n), t;
|
|
7619
7646
|
}
|
|
7620
7647
|
_rebuildSortedEmissiveData(e) {
|
|
@@ -7635,7 +7662,7 @@ var rc = 128, ic = class {
|
|
|
7635
7662
|
clear() {
|
|
7636
7663
|
this.emissiveTriangles = [], this.emissiveCount = 0, this.totalEmissivePower = 0, this.emissiveIndicesArray = null, this.emissivePowerArray = null, this.cdfArray = null, this.lightBVHNodeData = null, this.lightBVHNodeCount = 0;
|
|
7637
7664
|
}
|
|
7638
|
-
},
|
|
7665
|
+
}, cc = "" + new URL("assets/BVHRefitWorker-GkmNJYvb.js", import.meta.url).href, lc = class {
|
|
7639
7666
|
constructor(e = {}) {
|
|
7640
7667
|
this.config = {
|
|
7641
7668
|
useWorkers: !0,
|
|
@@ -7658,12 +7685,12 @@ var rc = 128, ic = class {
|
|
|
7658
7685
|
};
|
|
7659
7686
|
}
|
|
7660
7687
|
_initProcessors() {
|
|
7661
|
-
this.geometryExtractor = new
|
|
7688
|
+
this.geometryExtractor = new ac(), this.bvhBuilder = new Ns(), this.bvhBuilder.maxLeafSize = this.config.maxLeafSize, this.bvhBuilder.setTreeletConfig({
|
|
7662
7689
|
enabled: this.config.enableTreeletOptimization,
|
|
7663
7690
|
size: this.config.treeletSize,
|
|
7664
7691
|
passes: this.config.treeletOptimizationPasses,
|
|
7665
7692
|
minImprovement: this.config.treeletMinImprovement
|
|
7666
|
-
}), this.textureCreator = new
|
|
7693
|
+
}), this.textureCreator = new nc(), this.emissiveTriangleBuilder = new sc(), this.tlasBuilder = new Xs();
|
|
7667
7694
|
}
|
|
7668
7695
|
_log(e, t) {
|
|
7669
7696
|
this.config.verbose && console.log(`[SceneProcessor] ${e}`, t || "");
|
|
@@ -7671,7 +7698,7 @@ var rc = 128, ic = class {
|
|
|
7671
7698
|
async buildBVH(e) {
|
|
7672
7699
|
if (this.isProcessing) throw Error("Already processing a scene. Call dispose() first.");
|
|
7673
7700
|
this.isProcessing = !0, this.processingStage = "init";
|
|
7674
|
-
let t = new
|
|
7701
|
+
let t = new Cs(`SceneProcessor (${e.name || "scene"})`);
|
|
7675
7702
|
try {
|
|
7676
7703
|
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)");
|
|
7677
7704
|
let n = !1, r = this._buildBVH().then(() => t.end("BVH construction (worker)")), i = this._createMaterialTextures().then(() => {
|
|
@@ -7732,11 +7759,11 @@ var rc = 128, ic = class {
|
|
|
7732
7759
|
try {
|
|
7733
7760
|
let t = Z.FLOATS_PER_TRIANGLE, n = this.meshTriangleRanges;
|
|
7734
7761
|
if (!n || n.length === 0) throw Error("No mesh triangle ranges available for TLAS/BLAS build");
|
|
7735
|
-
this.instanceTable = new
|
|
7762
|
+
this.instanceTable = new Zs(), this.instanceTable.allocate(n.length);
|
|
7736
7763
|
let r = n.length, i = this.config.enableTreeletOptimization, a = [], o = [];
|
|
7737
7764
|
for (let e = 0; e < r; e++) {
|
|
7738
7765
|
let t = n[e];
|
|
7739
|
-
t.count !== 0 && (t.count >= 2e5 &&
|
|
7766
|
+
t.count !== 0 && (t.count >= 2e5 && qs(t.count) ? o.push({
|
|
7740
7767
|
m: e,
|
|
7741
7768
|
range: t
|
|
7742
7769
|
}) : a.push({
|
|
@@ -7762,7 +7789,7 @@ var rc = 128, ic = class {
|
|
|
7762
7789
|
status: `Building BLAS ${e + o.length}/${c}...`,
|
|
7763
7790
|
progress: 25 + Math.floor(e / c * 45)
|
|
7764
7791
|
});
|
|
7765
|
-
}), u = o.map(({ m: e, range: n }) =>
|
|
7792
|
+
}), u = o.map(({ m: e, range: n }) => Ws(this.triangleData.slice(n.start * t, (n.start + n.count) * t), this.config.bvhDepth, null, {
|
|
7766
7793
|
maxLeafSize: this.bvhBuilder.maxLeafSize,
|
|
7767
7794
|
numBins: this.bvhBuilder.numBins,
|
|
7768
7795
|
maxBins: this.bvhBuilder.maxBins,
|
|
@@ -7868,13 +7895,13 @@ var rc = 128, ic = class {
|
|
|
7868
7895
|
for (let e = 0; e < i; e++) {
|
|
7869
7896
|
let e;
|
|
7870
7897
|
try {
|
|
7871
|
-
e = new Worker(
|
|
7898
|
+
e = new Worker(ks, { type: "module" });
|
|
7872
7899
|
} catch (t) {
|
|
7873
7900
|
if (t.name !== "SecurityError") {
|
|
7874
7901
|
l(t);
|
|
7875
7902
|
return;
|
|
7876
7903
|
}
|
|
7877
|
-
e = await or(
|
|
7904
|
+
e = await or(ks);
|
|
7878
7905
|
}
|
|
7879
7906
|
e.onmessage = (t) => f(e, t), e.onerror = (e) => {
|
|
7880
7907
|
u.forEach((e) => e.terminate()), l(e);
|
|
@@ -8047,10 +8074,10 @@ var rc = 128, ic = class {
|
|
|
8047
8074
|
async refitBVH(e, t) {
|
|
8048
8075
|
if (!this.bvhData || !this.triangleData || !this.originalToBvhMap) throw Error("No BVH data available for refit. Run buildBVH() first.");
|
|
8049
8076
|
if (!this._refitWorker) try {
|
|
8050
|
-
this._refitWorker = new Worker(
|
|
8077
|
+
this._refitWorker = new Worker(cc, { type: "module" });
|
|
8051
8078
|
} catch (e) {
|
|
8052
8079
|
if (e.name !== "SecurityError") throw e;
|
|
8053
|
-
this._refitWorker = await or(
|
|
8080
|
+
this._refitWorker = await or(cc);
|
|
8054
8081
|
}
|
|
8055
8082
|
if (!this._refitSharedBuffers) {
|
|
8056
8083
|
let t = new SharedArrayBuffer(this.bvhData.byteLength), n = new SharedArrayBuffer(this.triangleData.byteLength), r = new SharedArrayBuffer(e.byteLength), i = new Float32Array(t), a = new Float32Array(n);
|
|
@@ -8083,7 +8110,7 @@ var rc = 128, ic = class {
|
|
|
8083
8110
|
refitBLASes(e, t, n) {
|
|
8084
8111
|
if (!this.instanceTable || !this.bvhData || !this.triangleData) throw Error("No TLAS/BLAS data available. Run buildBVH() first.");
|
|
8085
8112
|
let r = performance.now();
|
|
8086
|
-
this._blasRefitter ||= new
|
|
8113
|
+
this._blasRefitter ||= new zs();
|
|
8087
8114
|
for (let r of e) {
|
|
8088
8115
|
let e = this.instanceTable.entries[r];
|
|
8089
8116
|
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));
|
|
@@ -8214,10 +8241,10 @@ var rc = 128, ic = class {
|
|
|
8214
8241
|
n && n.terminate();
|
|
8215
8242
|
let r;
|
|
8216
8243
|
try {
|
|
8217
|
-
r = new Worker(
|
|
8244
|
+
r = new Worker(ks, { type: "module" }), i(t, e, r);
|
|
8218
8245
|
} catch (n) {
|
|
8219
8246
|
if (n.name !== "SecurityError") throw n;
|
|
8220
|
-
or(
|
|
8247
|
+
or(ks).then((n) => i(t, e, n));
|
|
8221
8248
|
}
|
|
8222
8249
|
}
|
|
8223
8250
|
}
|
|
@@ -8250,7 +8277,7 @@ var rc = 128, ic = class {
|
|
|
8250
8277
|
dispose() {
|
|
8251
8278
|
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;
|
|
8252
8279
|
}
|
|
8253
|
-
},
|
|
8280
|
+
}, uc = class {
|
|
8254
8281
|
constructor() {
|
|
8255
8282
|
this.lightData = {
|
|
8256
8283
|
directional: [],
|
|
@@ -8403,19 +8430,19 @@ var rc = 128, ic = class {
|
|
|
8403
8430
|
}))
|
|
8404
8431
|
};
|
|
8405
8432
|
}
|
|
8406
|
-
},
|
|
8433
|
+
}, dc = "https://assets.rayzee.atulmourya.com/noise/stbn_scalar_atlas.png", fc = "https://assets.rayzee.atulmourya.com/noise/stbn_vec2_atlas.png", pc = 4, mc = class extends Sn {
|
|
8407
8434
|
constructor(e, t, n, r = {}) {
|
|
8408
8435
|
super("PathTracer", {
|
|
8409
8436
|
...r,
|
|
8410
8437
|
executionMode: xn.ALWAYS
|
|
8411
8438
|
});
|
|
8412
8439
|
let i = r.width || 1920, a = r.height || 1080;
|
|
8413
|
-
this.camera = n, this.width = i, this.height = a, this.renderer = e, this.scene = t, this.tileManager = new Cn(i, a, X.tiles), this.sdfs = new
|
|
8440
|
+
this.camera = n, this.width = i, this.height = a, this.renderer = e, this.scene = t, this.tileManager = new Cn(i, a, X.tiles), this.sdfs = new lc(), this.lightSerializer = new uc(), this.accumulationEnabled = !0, this.isComplete = !1, this.cameras = [], this.performanceMonitor = Ln(), this.completionThreshold = 0, this.renderLimitMode = "frames", this._initDataTextures(), this.storageTextures = new zn(0, 0), this.uniforms = new $n(i, a), this._defineUniformGetters(), this.materialData = new ar(this.sdfs), this.materialData.callbacks.onReset = () => this.reset(), this.materialData.callbacks.getTriangleData = () => ({
|
|
8414
8441
|
array: this.triangleStorageAttr?.array,
|
|
8415
8442
|
count: this.triangleCount
|
|
8416
8443
|
}), this.materialData.callbacks.onTriangleDataChanged = () => {
|
|
8417
8444
|
this.triangleStorageAttr && (this.triangleStorageAttr.needsUpdate = !0);
|
|
8418
|
-
}, this.environment = new Ir(this.scene, this.uniforms), this.environment.callbacks.onReset = () => this.reset(), this.environment.callbacks.getSceneTextureNodes = () => this.shaderBuilder.getSceneTextureNodes(), this.shaderBuilder = new
|
|
8445
|
+
}, this.environment = new Ir(this.scene, this.uniforms), this.environment.callbacks.onReset = () => this.reset(), this.environment.callbacks.getSceneTextureNodes = () => this.shaderBuilder.getSceneTextureNodes(), this.shaderBuilder = new Ts(), this._initRenderingState(), this.setupBlueNoise(), this.tempVector2 = new jt(), this.lastCameraMatrix = new tt(), this.lastProjectionMatrix = new tt(), 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();
|
|
8419
8446
|
}
|
|
8420
8447
|
_initDataTextures() {
|
|
8421
8448
|
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.stbnScalarTexture = null, this.stbnVec2Texture = null, this.lightStorageAttr = new a(new Float32Array(16), 4), this.lightStorageNode = ge(this.lightStorageAttr, "vec4", 1).toReadOnly(), this._lbvhDataCache = null, this._emissiveDataCache = null, this._instanceTable = null, this.adaptiveSamplingTexture = null, this.spheres = [];
|
|
@@ -8513,9 +8540,9 @@ var rc = 128, ic = class {
|
|
|
8513
8540
|
let e = new Dt();
|
|
8514
8541
|
e.setCrossOrigin("anonymous");
|
|
8515
8542
|
let t = (e) => (e.minFilter = ot, e.magFilter = ot, e.wrapS = xt, e.wrapT = xt, e.generateMipmaps = !1, e);
|
|
8516
|
-
e.load(
|
|
8543
|
+
e.load(dc, (e) => {
|
|
8517
8544
|
this.stbnScalarTexture = t(e), rn.value = e, console.log(`PathTracer: STBN scalar atlas loaded ${e.image.width}x${e.image.height}`);
|
|
8518
|
-
}), e.load(
|
|
8545
|
+
}), e.load(fc, (e) => {
|
|
8519
8546
|
this.stbnVec2Texture = t(e), an.value = e, console.log(`PathTracer: STBN vec2 atlas loaded ${e.image.width}x${e.image.height}`);
|
|
8520
8547
|
});
|
|
8521
8548
|
}
|
|
@@ -8598,7 +8625,7 @@ var rc = 128, ic = class {
|
|
|
8598
8625
|
setBVHData(e) {
|
|
8599
8626
|
if (!e) return;
|
|
8600
8627
|
let t = e.length / 4;
|
|
8601
|
-
this.bvhStorageNode ? (this.bvhStorageAttr = new a(e, 4), this.bvhStorageNode.value = this.bvhStorageAttr, this.bvhStorageNode.bufferCount = t) : (this.bvhStorageAttr = new a(e, 4), this.bvhStorageNode = ge(this.bvhStorageAttr, "vec4", t).toReadOnly()), this.bvhNodeCount = Math.floor(t /
|
|
8628
|
+
this.bvhStorageNode ? (this.bvhStorageAttr = new a(e, 4), this.bvhStorageNode.value = this.bvhStorageAttr, this.bvhStorageNode.bufferCount = t) : (this.bvhStorageAttr = new a(e, 4), this.bvhStorageNode = ge(this.bvhStorageAttr, "vec4", t).toReadOnly()), this.bvhNodeCount = Math.floor(t / pc), console.log(`PathTracer: ${this.bvhNodeCount} BVH nodes (storage buffer)`);
|
|
8602
8629
|
}
|
|
8603
8630
|
setInstanceTable(e) {
|
|
8604
8631
|
this._instanceTable = e;
|
|
@@ -8797,7 +8824,7 @@ var rc = 128, ic = class {
|
|
|
8797
8824
|
dispose() {
|
|
8798
8825
|
this.renderModeChangeTimeout &&= (clearTimeout(this.renderModeChangeTimeout), null), this.tileManager?.dispose(), this.cameraOptimizer?.dispose(), this.materialData?.dispose(), this.environment?.dispose(), this.shaderBuilder?.dispose(), this.uniforms?.dispose(), this.storageTextures?.dispose(), this.stbnScalarTexture?.dispose(), this.stbnVec2Texture?.dispose(), this.placeholderTexture?.dispose(), this.triangleStorageAttr = null, this.triangleStorageNode = null, this.bvhStorageAttr = null, this.bvhStorageNode = null, this.placeholderTexture = null, this.isReady = !1;
|
|
8799
8826
|
}
|
|
8800
|
-
},
|
|
8827
|
+
}, hc = class extends Sn {
|
|
8801
8828
|
constructor(e, t = {}) {
|
|
8802
8829
|
super("NormalDepth", {
|
|
8803
8830
|
...t,
|
|
@@ -8835,7 +8862,7 @@ var rc = 128, ic = class {
|
|
|
8835
8862
|
let u = W(j(c).add(.5).div(a).mul(2).sub(1), j(l).add(.5).div(o).mul(2).sub(1).negate(), 1), d = i.mul(G(u, 1)), f = R(ie(r[0].xyz, r[1].xyz, r[2].xyz).mul(d.xyz.div(d.w))), p = Lr({
|
|
8836
8863
|
origin: W(r[3]),
|
|
8837
8864
|
direction: f
|
|
8838
|
-
}), m = Br.wrap(
|
|
8865
|
+
}), m = Br.wrap(Pi(p, t, e, n)), h = m.normal.mul(.5).add(.5), g = m.dst, _ = m.didHit.select(G(h, g), G(0, 0, 0, j(1e6)));
|
|
8839
8866
|
ye(s, Se(V(c), V(l)), _).toWriteOnly();
|
|
8840
8867
|
});
|
|
8841
8868
|
})(r, i).compute([
|
|
@@ -8876,7 +8903,7 @@ var rc = 128, ic = class {
|
|
|
8876
8903
|
dispose() {
|
|
8877
8904
|
this._computeNode?.dispose(), this._outputStorageTex?.dispose(), this.renderTarget?.dispose();
|
|
8878
8905
|
}
|
|
8879
|
-
},
|
|
8906
|
+
}, gc = class extends Sn {
|
|
8880
8907
|
constructor(e, t, n = {}) {
|
|
8881
8908
|
super("MotionVector", {
|
|
8882
8909
|
...n,
|
|
@@ -8988,7 +9015,7 @@ var rc = 128, ic = class {
|
|
|
8988
9015
|
};
|
|
8989
9016
|
//#endregion
|
|
8990
9017
|
//#region src/Processor/createRenderTargetHelper.js
|
|
8991
|
-
function
|
|
9018
|
+
function _c(e, t, n = {}) {
|
|
8992
9019
|
let r = n.textureIndex || 0, i = t.isTexture === !0, a;
|
|
8993
9020
|
i ? (console.warn("RenderTargetHelper: Direct Texture input is not supported. Pass a RenderTarget instead."), a = null) : a = t;
|
|
8994
9021
|
let o = {
|
|
@@ -9146,7 +9173,7 @@ function gc(e, t, n = {}) {
|
|
|
9146
9173
|
}
|
|
9147
9174
|
//#endregion
|
|
9148
9175
|
//#region src/Stages/ASVGF.js
|
|
9149
|
-
var
|
|
9176
|
+
var vc = class extends Sn {
|
|
9150
9177
|
constructor(e, t = {}) {
|
|
9151
9178
|
super("ASVGF", {
|
|
9152
9179
|
...t,
|
|
@@ -9160,7 +9187,7 @@ var _c = class extends Sn {
|
|
|
9160
9187
|
magFilter: ot,
|
|
9161
9188
|
depthBuffer: !1,
|
|
9162
9189
|
stencilBuffer: !1
|
|
9163
|
-
}), this._heatmapRawColorTexNode = new s(), this._heatmapColorTexNode = new s(), this._heatmapTemporalTexNode = new s(), this._heatmapNDTexNode = new s(), this._heatmapMotionTexNode = new s(), this._heatmapGradientTexNode = new s(), this._buildHeatmapCompute(), this.heatmapHelper =
|
|
9190
|
+
}), this._heatmapRawColorTexNode = new s(), this._heatmapColorTexNode = new s(), this._heatmapTemporalTexNode = new s(), this._heatmapNDTexNode = new s(), this._heatmapMotionTexNode = new s(), this._heatmapGradientTexNode = new s(), this._buildHeatmapCompute(), this.heatmapHelper = _c(this.renderer, this.heatmapTarget, {
|
|
9164
9191
|
width: 400,
|
|
9165
9192
|
height: 400,
|
|
9166
9193
|
position: "bottom-right",
|
|
@@ -9216,7 +9243,7 @@ var _c = class extends Sn {
|
|
|
9216
9243
|
let e = B(i, v), t = e.w.greaterThan(.5), r = j(f).sub(e.x.mul(h)), m = j(_).sub(e.y.mul(g)), S = r.greaterThanEqual(0).and(r.lessThan(j(h))).and(m.greaterThanEqual(0)).and(m.lessThan(j(g)));
|
|
9217
9244
|
p(t.and(S), () => {
|
|
9218
9245
|
let e = P(N(r).clamp(N(0), N(h).sub(1)), N(m).clamp(N(0), N(g).sub(1))), t = b.xyz.mul(2).sub(1), i = B(o, e);
|
|
9219
|
-
|
|
9246
|
+
Ti(t, i.xyz.mul(2).sub(1), b.w, i.w, c, l);
|
|
9220
9247
|
let p = B(a, e), v = p.xyz, S = p.w, C = S.div(u).clamp(0, 1), w = W(1e10).toVar(), T = W(-1e10).toVar(), E = W(0).toVar();
|
|
9221
9248
|
for (let e = -1; e <= 1; e++) for (let t = -1; t <= 1; t++) {
|
|
9222
9249
|
let r = B(n, P(f.add(t).clamp(N(0), N(h).sub(1)), _.add(e).clamp(N(0), N(g).sub(1)))).xyz;
|
|
@@ -9333,7 +9360,7 @@ var _c = class extends Sn {
|
|
|
9333
9360
|
dispose() {
|
|
9334
9361
|
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._colorTexNode?.dispose(), this._normalDepthTexNode?.dispose(), this._motionTexNode?.dispose(), this._readTemporalTexNode?.dispose(), this._readPrevNDTexNode?.dispose(), this._gradientReadTexNode?.dispose(), this._heatmapRawColorTexNode?.dispose(), this._heatmapColorTexNode?.dispose(), this._heatmapTemporalTexNode?.dispose(), this._heatmapNDTexNode?.dispose(), this._heatmapMotionTexNode?.dispose(), this._heatmapGradientTexNode?.dispose(), this.heatmapHelper?.dispose();
|
|
9335
9362
|
}
|
|
9336
|
-
},
|
|
9363
|
+
}, yc = /* @__PURE__ */ K("\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"), bc = class extends Sn {
|
|
9337
9364
|
constructor(e, t = {}) {
|
|
9338
9365
|
super("VarianceEstimation", {
|
|
9339
9366
|
...t,
|
|
@@ -9365,7 +9392,7 @@ var _c = class extends Sn {
|
|
|
9365
9392
|
}
|
|
9366
9393
|
n.divAssign(9), a.divAssign(9);
|
|
9367
9394
|
let o = I(a.sub(n.mul(n)), j(0)), u = s.element(l.add(1).mul(10).add(c.add(1))), d = B(t, P(_, v));
|
|
9368
|
-
ye(e, Se(V(_), V(v)),
|
|
9395
|
+
ye(e, Se(V(_), V(v)), yc(u, d.x, d.y, r, o, i)).toWriteOnly();
|
|
9369
9396
|
});
|
|
9370
9397
|
})().compute([
|
|
9371
9398
|
this._dispatchX,
|
|
@@ -9408,7 +9435,7 @@ var _c = class extends Sn {
|
|
|
9408
9435
|
dispose() {
|
|
9409
9436
|
this._computeNodeA?.dispose(), this._computeNodeB?.dispose(), this._storageTexA?.dispose(), this._storageTexB?.dispose(), this._colorTexNode?.dispose(), this._readTexNodeA?.dispose(), this._readTexNodeB?.dispose();
|
|
9410
9437
|
}
|
|
9411
|
-
},
|
|
9438
|
+
}, xc = /* @__PURE__ */ K("\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"), Sc = class extends Sn {
|
|
9412
9439
|
constructor(e, t = {}) {
|
|
9413
9440
|
super("BilateralFiltering", {
|
|
9414
9441
|
...t,
|
|
@@ -9453,7 +9480,7 @@ var _c = class extends Sn {
|
|
|
9453
9480
|
p(d.lessThan(N(c)).and(f.lessThan(N(l))), () => {
|
|
9454
9481
|
let p = P(d, f), m = B(t, p).xyz, h = B(n, p), g = h.xyz.mul(2).sub(1), _ = h.w, v = fi(m), y = W(0).toVar(), b = j(0).toVar();
|
|
9455
9482
|
for (let e = 0; e < 5; e++) for (let p = 0; p < 5; p++) {
|
|
9456
|
-
let h = p - 2, x = e - 2, S = u[e * 5 + p], C = d.add(s.mul(h)).clamp(N(0), N(c).sub(1)), w = f.add(s.mul(x)).clamp(N(0), N(l).sub(1)), T = B(t, P(C, w)).xyz, E = B(n, P(C, w)), D = E.xyz.mul(2).sub(1), O = E.w, k =
|
|
9483
|
+
let h = p - 2, x = e - 2, S = u[e * 5 + p], C = d.add(s.mul(h)).clamp(N(0), N(c).sub(1)), w = f.add(s.mul(x)).clamp(N(0), N(l).sub(1)), T = B(t, P(C, w)).xyz, E = B(n, P(C, w)), D = E.xyz.mul(2).sub(1), O = E.w, k = xc(v, fi(T), g, D, _, O, m, T, j(S), o, i, a, r);
|
|
9457
9484
|
y.addAssign(T.mul(k)), b.addAssign(k);
|
|
9458
9485
|
}
|
|
9459
9486
|
let x = y.div(I(b, j(1e-4)));
|
|
@@ -9498,7 +9525,7 @@ var _c = class extends Sn {
|
|
|
9498
9525
|
dispose() {
|
|
9499
9526
|
this._computeNodeA?.dispose(), this._computeNodeB?.dispose(), this._storageTexA?.dispose(), this._storageTexB?.dispose(), this._readTexNode?.dispose(), this._normalDepthTexNode?.dispose();
|
|
9500
9527
|
}
|
|
9501
|
-
},
|
|
9528
|
+
}, Cc = /* @__PURE__ */ K("\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"), wc = /* @__PURE__ */ K("\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"), Tc = class extends Sn {
|
|
9502
9529
|
constructor(e, t = {}) {
|
|
9503
9530
|
super("AdaptiveSampling", {
|
|
9504
9531
|
...t,
|
|
@@ -9512,7 +9539,7 @@ var _c = class extends Sn {
|
|
|
9512
9539
|
magFilter: ot,
|
|
9513
9540
|
depthBuffer: !1,
|
|
9514
9541
|
stencilBuffer: !1
|
|
9515
|
-
}), this._dispatchX = Math.ceil(n / 16), this._dispatchY = Math.ceil(r / 16), this._varianceTexNode = new s(), this._buildCompute(), this._buildHeatmapCompute(), this.helper =
|
|
9542
|
+
}), this._dispatchX = Math.ceil(n / 16), this._dispatchY = Math.ceil(r / 16), this._varianceTexNode = new s(), this._buildCompute(), this._buildHeatmapCompute(), this.helper = _c(this.renderer, this.heatmapTarget, {
|
|
9516
9543
|
width: 400,
|
|
9517
9544
|
height: 400,
|
|
9518
9545
|
position: "bottom-right",
|
|
@@ -9529,7 +9556,7 @@ var _c = class extends Sn {
|
|
|
9529
9556
|
this._computeNode = f(() => {
|
|
9530
9557
|
let u = N(Te.x).mul(16).add(N(F.x)), d = N(Te.y).mul(16).add(N(F.y));
|
|
9531
9558
|
p(u.lessThan(N(s)).and(d.lessThan(N(c))), () => {
|
|
9532
|
-
let s = B(e, P(u, d)), c =
|
|
9559
|
+
let s = B(e, P(u, d)), c = Cc(s.z, s.w, s.x, t, N(i), N(a), o, n, r);
|
|
9533
9560
|
ye(l, Se(V(u), V(d)), c).toWriteOnly();
|
|
9534
9561
|
});
|
|
9535
9562
|
})().compute([
|
|
@@ -9547,7 +9574,7 @@ var _c = class extends Sn {
|
|
|
9547
9574
|
this._heatmapComputeNode = f(() => {
|
|
9548
9575
|
let i = N(Te.x).mul(16).add(N(F.x)), a = N(Te.y).mul(16).add(N(F.y));
|
|
9549
9576
|
p(i.lessThan(N(n)).and(a.lessThan(N(r))), () => {
|
|
9550
|
-
let n = B(e, P(i, a)), r =
|
|
9577
|
+
let n = B(e, P(i, a)), r = wc(n.x.clamp(0, 1), n.y, n.z);
|
|
9551
9578
|
ye(t, Se(V(i), V(a)), r).toWriteOnly();
|
|
9552
9579
|
});
|
|
9553
9580
|
})().compute([
|
|
@@ -9606,7 +9633,7 @@ var _c = class extends Sn {
|
|
|
9606
9633
|
dispose() {
|
|
9607
9634
|
this._computeNode?.dispose(), this._heatmapComputeNode?.dispose(), this._heatmapStorageTex?.dispose(), this._outputStorageTex?.dispose(), this.heatmapTarget?.dispose(), this._varianceTexNode?.dispose(), this.helper?.dispose(), this._computeNode = null, this._heatmapComputeNode = null, this._heatmapStorageTex = null, this._outputStorageTex = null, this.heatmapTarget = null, this._varianceTexNode = null, this.helper = null;
|
|
9608
9635
|
}
|
|
9609
|
-
},
|
|
9636
|
+
}, Ec = class extends Sn {
|
|
9610
9637
|
constructor(e, t = {}) {
|
|
9611
9638
|
super("EdgeAwareFiltering", {
|
|
9612
9639
|
...t,
|
|
@@ -9686,7 +9713,7 @@ var _c = class extends Sn {
|
|
|
9686
9713
|
dispose() {
|
|
9687
9714
|
this._computeNode?.dispose(), this._outputStorageTex?.dispose(), this.outputTarget?.dispose(), this._inputTexNode?.dispose();
|
|
9688
9715
|
}
|
|
9689
|
-
},
|
|
9716
|
+
}, Dc = 256, Oc = -8, kc = 6 - Oc, Ac = kc / Dc, jc = 1e4, Mc = /* @__PURE__ */ K("\n fn adaptExposure(\n geoMean: f32,\n prevExposure: f32,\n keyValue: f32,\n minExp: f32,\n maxExp: f32,\n speedBright: f32,\n speedDark: f32,\n dt: f32,\n isFirstFrame: f32\n ) -> vec4f {\n\n let targetExp = clamp( keyValue / max( geoMean, 0.001 ), minExp, maxExp );\n var newExposure = targetExp;\n\n // Temporal smoothing (skip on first frame)\n if ( isFirstFrame < 0.5 ) {\n\n // Asymmetric speed: brighter scenes adapt faster\n let speed = select( speedDark, speedBright, targetExp < prevExposure );\n let alpha = 1.0 - exp( -dt * speed );\n newExposure = mix( prevExposure, targetExp, alpha );\n\n }\n\n return vec4f( newExposure, geoMean, targetExp, 1.0 );\n\n }\n"), Nc = class extends Sn {
|
|
9690
9717
|
constructor(e, t = {}) {
|
|
9691
9718
|
super("AutoExposure", {
|
|
9692
9719
|
...t,
|
|
@@ -9702,7 +9729,7 @@ var _c = class extends Sn {
|
|
|
9702
9729
|
depthBuffer: !1,
|
|
9703
9730
|
stencilBuffer: !1
|
|
9704
9731
|
};
|
|
9705
|
-
this._downsampleTarget = new i(this.REDUCTION_SIZE, this.REDUCTION_SIZE, e), this._downsampleStorageTex = new o(this.REDUCTION_SIZE, this.REDUCTION_SIZE), this._downsampleStorageTex.type = Ge, this._downsampleStorageTex.format = _t, this._downsampleStorageTex.minFilter = ot, this._downsampleStorageTex.magFilter = ot, this._reductionStorageTex = new o(1, 1), this._reductionStorageTex.type = Ge, this._reductionStorageTex.format = _t, this._reductionStorageTex.minFilter = ot, this._reductionStorageTex.magFilter = ot, this._reductionReadTarget = new i(1, 1, e), this._adaptationResult = C(1, "vec4"), this._readbackBuffer = new n(16), this._readbackBuffer.name = "AutoExposureAdaptation", this._histogramBuffer = C(
|
|
9732
|
+
this._downsampleTarget = new i(this.REDUCTION_SIZE, this.REDUCTION_SIZE, e), this._downsampleStorageTex = new o(this.REDUCTION_SIZE, this.REDUCTION_SIZE), this._downsampleStorageTex.type = Ge, this._downsampleStorageTex.format = _t, this._downsampleStorageTex.minFilter = ot, this._downsampleStorageTex.magFilter = ot, this._reductionStorageTex = new o(1, 1), this._reductionStorageTex.type = Ge, this._reductionStorageTex.format = _t, this._reductionStorageTex.minFilter = ot, this._reductionStorageTex.magFilter = ot, this._reductionReadTarget = new i(1, 1, e), this._adaptationResult = C(1, "vec4"), this._readbackBuffer = new n(16), this._readbackBuffer.name = "AutoExposureAdaptation", this._histogramBuffer = C(Dc, "uint").toAtomic();
|
|
9706
9733
|
}
|
|
9707
9734
|
_buildCompute() {
|
|
9708
9735
|
this._buildDownsampleCompute(), this._buildHistogramCompute(), this._buildHistogramAnalyzeCompute(), this._buildAdaptationCompute();
|
|
@@ -9736,7 +9763,7 @@ var _c = class extends Sn {
|
|
|
9736
9763
|
for (let i = 0; i < 16; i++) {
|
|
9737
9764
|
let a = r.mul(16).add(i), o = a.mod(64), s = a.div(64), c = B(e, P(N(o), N(s))), l = c.x, u = c.y;
|
|
9738
9765
|
p(u.greaterThan(0), () => {
|
|
9739
|
-
let e = V(l.div(u).sub(j(
|
|
9766
|
+
let e = V(l.div(u).sub(j(Oc)).div(j(kc)).mul(j(Dc)).floor().clamp(0, j(Dc - 1))), r = j(o).add(.5).div(j(64)), i = j(s).add(.5).div(j(64)), a = r.sub(.5), c = i.sub(.5), d = V(a.mul(a).add(c.mul(c)).mul(n).negate().exp().mul(j(jc)));
|
|
9740
9767
|
b(t.element(e), d);
|
|
9741
9768
|
});
|
|
9742
9769
|
}
|
|
@@ -9754,14 +9781,14 @@ var _c = class extends Sn {
|
|
|
9754
9781
|
let e = this._histogramBuffer, t = this._reductionStorageTex, n = this.lowPercentileU, r = this.highPercentileU;
|
|
9755
9782
|
this._histogramAnalyzeNode = f(() => {
|
|
9756
9783
|
let i = j(0).toVar();
|
|
9757
|
-
m(
|
|
9784
|
+
m(Dc, ({ i: t }) => {
|
|
9758
9785
|
i.addAssign(j(x(e.element(t))));
|
|
9759
9786
|
});
|
|
9760
9787
|
let a = i.mul(n), o = i.mul(r), s = j(0).toVar(), c = j(0).toVar(), l = j(0).toVar(), u = j(0).toVar();
|
|
9761
|
-
m(
|
|
9788
|
+
m(Dc, ({ i: t }) => {
|
|
9762
9789
|
let n = j(x(e.element(t)));
|
|
9763
9790
|
u.assign(s), s.addAssign(n), p(u.lessThan(o).and(s.greaterThan(a)), () => {
|
|
9764
|
-
let e = j(
|
|
9791
|
+
let e = j(Oc).add(j(t).add(.5).mul(j(Ac)));
|
|
9765
9792
|
c.addAssign(e.mul(n)), l.addAssign(n);
|
|
9766
9793
|
});
|
|
9767
9794
|
});
|
|
@@ -9776,7 +9803,7 @@ var _c = class extends Sn {
|
|
|
9776
9803
|
_buildAdaptationCompute() {
|
|
9777
9804
|
let e = this._reductionReadTexNode, t = this._adaptationResult, n = this.keyValueU, r = this.minExposureU, i = this.maxExposureU, a = this.adaptSpeedBrightU, o = this.adaptSpeedDarkU, s = this.deltaTimeU, c = this.isFirstFrameU, l = this.previousExposureU;
|
|
9778
9805
|
this._adaptationComputeNode = f(() => {
|
|
9779
|
-
let u = B(e, P(N(0), N(0))).x, d =
|
|
9806
|
+
let u = B(e, P(N(0), N(0))).x, d = Mc(u, l, n, r, i, a, o, s, c);
|
|
9780
9807
|
t.element(V(0)).assign(d);
|
|
9781
9808
|
})().compute(1, [
|
|
9782
9809
|
1,
|
|
@@ -9843,7 +9870,7 @@ var _c = class extends Sn {
|
|
|
9843
9870
|
};
|
|
9844
9871
|
//#endregion
|
|
9845
9872
|
//#region src/TSL/SSRC.js
|
|
9846
|
-
function
|
|
9873
|
+
function Pc({ 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: m, framesSinceReset: h }) {
|
|
9847
9874
|
return f(() => {
|
|
9848
9875
|
let f = N(Te.x).mul(8).add(N(F.x)), g = N(Te.y).mul(8).add(N(F.y));
|
|
9849
9876
|
p(f.lessThan(N(s)).and(g.lessThan(N(c))), () => {
|
|
@@ -9851,7 +9878,7 @@ function Nc({ colorTexNode: e, ndTexNode: t, motionTexNode: n, readCacheTexNode:
|
|
|
9851
9878
|
p(h.greaterThan(N(0)), () => {
|
|
9852
9879
|
let e = B(n, _), t = e.w.greaterThan(.5), a = j(f).sub(e.x.mul(s)), o = j(g).sub(e.y.mul(c)), h = a.greaterThanEqual(0).and(a.lessThan(j(s))).and(o.greaterThanEqual(0)).and(o.lessThan(j(c)));
|
|
9853
9880
|
p(t.and(h), () => {
|
|
9854
|
-
let e = P(N(a).clamp(N(0), N(s).sub(1)), N(o).clamp(N(0), N(c).sub(1))), t = y.xyz.mul(2).sub(1), n = B(i, e), f =
|
|
9881
|
+
let e = P(N(a).clamp(N(0), N(s).sub(1)), N(o).clamp(N(0), N(c).sub(1))), t = y.xyz.mul(2).sub(1), n = B(i, e), f = Ti(t, n.xyz.mul(2).sub(1), y.w, n.w, u, d);
|
|
9855
9882
|
p(f.greaterThan(.01), () => {
|
|
9856
9883
|
let t = B(r, e), n = t.xyz, i = t.w, a = L(n, v, ae(I(l, j(1).div(i.add(1))).div(I(f, j(.1))), 1)), o = ae(i.add(1), m);
|
|
9857
9884
|
b.assign(G(a, o));
|
|
@@ -9865,7 +9892,7 @@ function Nc({ colorTexNode: e, ndTexNode: t, motionTexNode: n, readCacheTexNode:
|
|
|
9865
9892
|
});
|
|
9866
9893
|
});
|
|
9867
9894
|
}
|
|
9868
|
-
function
|
|
9895
|
+
function Fc({ colorTexNode: e, ndTexNode: t, readCacheTexNode: n, outputTex: r, resW: i, resH: a, spatialRadius: o, spatialWeight: s, phiNormal: c, phiDepth: l }) {
|
|
9869
9896
|
let u = [
|
|
9870
9897
|
[1, 0],
|
|
9871
9898
|
[-1, 0],
|
|
@@ -9881,7 +9908,7 @@ function Pc({ colorTexNode: e, ndTexNode: t, readCacheTexNode: n, outputTex: r,
|
|
|
9881
9908
|
p(d.lessThan(N(i)).and(f.lessThan(N(a))), () => {
|
|
9882
9909
|
let p = P(d, f), m = B(n, p), h = m.xyz, g = m.w, _ = B(t, p), v = _.xyz.mul(2).sub(1), y = j(1).sub(g.div(16).clamp(0, 1)), b = s.mul(y), x = W(h).toVar(), S = j(1).toVar();
|
|
9883
9910
|
for (let e = 0; e < u.length; e++) {
|
|
9884
|
-
let [r, s] = u[e], p = P(d.add(N(o).mul(r)).clamp(N(0), N(i).sub(1)), f.add(N(o).mul(s)).clamp(N(0), N(a).sub(1))), m = B(n, p).xyz, h = B(t, p), g =
|
|
9911
|
+
let [r, s] = u[e], p = P(d.add(N(o).mul(r)).clamp(N(0), N(i).sub(1)), f.add(N(o).mul(s)).clamp(N(0), N(a).sub(1))), m = B(n, p).xyz, h = B(t, p), g = Ti(v, h.xyz.mul(2).sub(1), _.w, h.w, c, l);
|
|
9885
9912
|
x.addAssign(m.mul(g)), S.addAssign(g);
|
|
9886
9913
|
}
|
|
9887
9914
|
let C = L(h, x.div(I(S, 1e-4)), b), w = B(e, p).w;
|
|
@@ -9891,7 +9918,7 @@ function Pc({ colorTexNode: e, ndTexNode: t, readCacheTexNode: n, outputTex: r,
|
|
|
9891
9918
|
}
|
|
9892
9919
|
//#endregion
|
|
9893
9920
|
//#region src/Stages/SSRC.js
|
|
9894
|
-
var
|
|
9921
|
+
var Ic = class extends Sn {
|
|
9895
9922
|
constructor(e, t = {}) {
|
|
9896
9923
|
super("SSRC", {
|
|
9897
9924
|
...t,
|
|
@@ -9966,12 +9993,12 @@ var Fc = class extends Sn {
|
|
|
9966
9993
|
phiNormal: this.phiNormal,
|
|
9967
9994
|
phiDepth: this.phiDepth,
|
|
9968
9995
|
maxHistory: this.maxHistory
|
|
9969
|
-
}, t =
|
|
9996
|
+
}, t = Pc({
|
|
9970
9997
|
...e,
|
|
9971
9998
|
writeCacheTex: this._cacheTexA,
|
|
9972
9999
|
writePrevNDTex: this._prevNDTexA,
|
|
9973
10000
|
framesSinceReset: this._framesSinceReset
|
|
9974
|
-
}), n =
|
|
10001
|
+
}), n = Pc({
|
|
9975
10002
|
...e,
|
|
9976
10003
|
writeCacheTex: this._cacheTexB,
|
|
9977
10004
|
writePrevNDTex: this._prevNDTexB,
|
|
@@ -9985,7 +10012,7 @@ var Fc = class extends Sn {
|
|
|
9985
10012
|
8,
|
|
9986
10013
|
1
|
|
9987
10014
|
];
|
|
9988
|
-
this._pass1NodeA = t().compute(r, i), this._pass1NodeB = n().compute(r, i), this._pass2Node =
|
|
10015
|
+
this._pass1NodeA = t().compute(r, i), this._pass1NodeB = n().compute(r, i), this._pass2Node = Fc({
|
|
9989
10016
|
colorTexNode: this._colorTexNode,
|
|
9990
10017
|
ndTexNode: this._ndTexNode,
|
|
9991
10018
|
readCacheTexNode: this._readPass1CacheTexNode,
|
|
@@ -9998,7 +10025,7 @@ var Fc = class extends Sn {
|
|
|
9998
10025
|
phiDepth: this.phiDepth
|
|
9999
10026
|
})().compute(r, i);
|
|
10000
10027
|
}
|
|
10001
|
-
},
|
|
10028
|
+
}, Lc = class extends Sn {
|
|
10002
10029
|
constructor(n, r = {}) {
|
|
10003
10030
|
super("Display", {
|
|
10004
10031
|
...r,
|
|
@@ -10027,7 +10054,7 @@ var Fc = class extends Sn {
|
|
|
10027
10054
|
dispose() {
|
|
10028
10055
|
this._displayTexNode?.dispose(), this.displayMaterial?.dispose(), this.displayQuad = null;
|
|
10029
10056
|
}
|
|
10030
|
-
},
|
|
10057
|
+
}, Rc = class {
|
|
10031
10058
|
constructor() {
|
|
10032
10059
|
this.textures = /* @__PURE__ */ new Map(), this.renderTargets = /* @__PURE__ */ new Map(), this.uniforms = /* @__PURE__ */ new Map(), this.state = {
|
|
10033
10060
|
frame: 0,
|
|
@@ -10150,7 +10177,7 @@ var Fc = class extends Sn {
|
|
|
10150
10177
|
dispose() {
|
|
10151
10178
|
this.textures.clear(), this.renderTargets.clear(), this.uniforms.clear(), this._stateChangeCallbacks.clear(), this.state = {};
|
|
10152
10179
|
}
|
|
10153
|
-
},
|
|
10180
|
+
}, zc = class extends We {
|
|
10154
10181
|
constructor() {
|
|
10155
10182
|
super(), this._onceCallbacks = /* @__PURE__ */ new Map();
|
|
10156
10183
|
}
|
|
@@ -10188,9 +10215,9 @@ var Fc = class extends Sn {
|
|
|
10188
10215
|
eventNames() {
|
|
10189
10216
|
return this._listeners ? Object.keys(this._listeners) : [];
|
|
10190
10217
|
}
|
|
10191
|
-
},
|
|
10218
|
+
}, Bc = class {
|
|
10192
10219
|
constructor(e, t, n) {
|
|
10193
|
-
this.renderer = e, this.width = t, this.height = n, this.stages = [], this.context = new
|
|
10220
|
+
this.renderer = e, this.width = t, this.height = n, this.stages = [], this.context = new Rc(), this.eventBus = new zc(), this.context.setState("width", t), this.context.setState("height", n), this.stats = {
|
|
10194
10221
|
enabled: !1,
|
|
10195
10222
|
logSkipped: !1,
|
|
10196
10223
|
timings: /* @__PURE__ */ new Map(),
|
|
@@ -10322,7 +10349,7 @@ var Fc = class extends Sn {
|
|
|
10322
10349
|
let e = this.getInfo();
|
|
10323
10350
|
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();
|
|
10324
10351
|
}
|
|
10325
|
-
},
|
|
10352
|
+
}, Vc = class {
|
|
10326
10353
|
constructor() {
|
|
10327
10354
|
this.timeElapsed = 0, this.lastResetTime = performance.now(), this.renderCompleteDispatched = !1;
|
|
10328
10355
|
}
|
|
@@ -10344,7 +10371,7 @@ var Fc = class extends Sn {
|
|
|
10344
10371
|
resumeFromPause() {
|
|
10345
10372
|
this.renderCompleteDispatched = !1, this.lastResetTime = performance.now() - this.timeElapsed * 1e3;
|
|
10346
10373
|
}
|
|
10347
|
-
},
|
|
10374
|
+
}, Hc = class extends We {
|
|
10348
10375
|
constructor({ scene: e, camera: t, canvas: n, assetLoader: r, pathTracer: i, floorPlane: a }) {
|
|
10349
10376
|
super(), this.scene = e, this.camera = t, this.canvas = n, this.assetLoader = r, this.pathTracer = i, this.floorPlane = a, this.raycaster = new vt(), 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;
|
|
10350
10377
|
}
|
|
@@ -10565,7 +10592,7 @@ var Fc = class extends Sn {
|
|
|
10565
10592
|
dispose() {
|
|
10566
10593
|
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;
|
|
10567
10594
|
}
|
|
10568
|
-
},
|
|
10595
|
+
}, Uc = {
|
|
10569
10596
|
glb: {
|
|
10570
10597
|
type: "model",
|
|
10571
10598
|
name: "GLB (GLTF Binary)"
|
|
@@ -10630,7 +10657,7 @@ var Fc = class extends Sn {
|
|
|
10630
10657
|
type: "archive",
|
|
10631
10658
|
name: "ZIP Archive"
|
|
10632
10659
|
}
|
|
10633
|
-
},
|
|
10660
|
+
}, Wc = class extends We {
|
|
10634
10661
|
constructor(e, t, n) {
|
|
10635
10662
|
super(), this.scene = e, this.camera = t, this.controls = n, this.targetModel = null, this._externalModel = null, this.floorPlane = null, this.sceneScale = 1, this.loaderCache = {}, this.uploadedFileInfo = null, this.animations = [], this.renderer = null;
|
|
10636
10663
|
}
|
|
@@ -10641,7 +10668,7 @@ var Fc = class extends Sn {
|
|
|
10641
10668
|
this.renderer = e;
|
|
10642
10669
|
}
|
|
10643
10670
|
getFileFormat(e) {
|
|
10644
|
-
return
|
|
10671
|
+
return Uc[e.split(".").pop().toLowerCase()] || null;
|
|
10645
10672
|
}
|
|
10646
10673
|
readFileAsArrayBuffer(e) {
|
|
10647
10674
|
return new Promise((t, n) => {
|
|
@@ -10834,7 +10861,7 @@ var Fc = class extends Sn {
|
|
|
10834
10861
|
}
|
|
10835
10862
|
for (let t in e) {
|
|
10836
10863
|
let n = t.split(".").pop().toLowerCase();
|
|
10837
|
-
if (
|
|
10864
|
+
if (Uc[n] && Uc[n].type === "model") return console.log(`Loading model file from ZIP: ${t}`), await this.loadModelFromZipEntry(e[t], t, n, e);
|
|
10838
10865
|
}
|
|
10839
10866
|
throw Error("No supported model files found in the ZIP archive");
|
|
10840
10867
|
}
|
|
@@ -11281,7 +11308,7 @@ var Fc = class extends Sn {
|
|
|
11281
11308
|
}), e;
|
|
11282
11309
|
}
|
|
11283
11310
|
async onModelLoad(e) {
|
|
11284
|
-
let t = new
|
|
11311
|
+
let t = new Cs("onModelLoad");
|
|
11285
11312
|
t.start("Camera extraction");
|
|
11286
11313
|
let n = this.extractCamerasFromModel(e);
|
|
11287
11314
|
t.end("Camera extraction"), t.start("Camera setup");
|
|
@@ -11360,10 +11387,10 @@ var Fc = class extends Sn {
|
|
|
11360
11387
|
getSupportedFormats(e = null) {
|
|
11361
11388
|
if (e) {
|
|
11362
11389
|
let t = {};
|
|
11363
|
-
for (let [n, r] of Object.entries(
|
|
11390
|
+
for (let [n, r] of Object.entries(Uc)) r.type === e && (t[n] = r);
|
|
11364
11391
|
return t;
|
|
11365
11392
|
}
|
|
11366
|
-
return
|
|
11393
|
+
return Uc;
|
|
11367
11394
|
}
|
|
11368
11395
|
dispose() {
|
|
11369
11396
|
for (let e in this.loaderCache) {
|
|
@@ -11375,7 +11402,7 @@ var Fc = class extends Sn {
|
|
|
11375
11402
|
removeAllEventListeners() {
|
|
11376
11403
|
this._listeners = void 0;
|
|
11377
11404
|
}
|
|
11378
|
-
},
|
|
11405
|
+
}, Gc = {
|
|
11379
11406
|
maxBounces: {
|
|
11380
11407
|
uniform: "maxBounces",
|
|
11381
11408
|
reset: !0
|
|
@@ -11486,11 +11513,11 @@ var Fc = class extends Sn {
|
|
|
11486
11513
|
},
|
|
11487
11514
|
renderMode: { handler: "handleRenderMode" },
|
|
11488
11515
|
environmentRotation: { handler: "handleEnvironmentRotation" }
|
|
11489
|
-
},
|
|
11516
|
+
}, Kc = {
|
|
11490
11517
|
bounces: "maxBounces",
|
|
11491
11518
|
adaptiveSampling: "useAdaptiveSampling",
|
|
11492
11519
|
debugMode: "visMode"
|
|
11493
|
-
},
|
|
11520
|
+
}, qc = class extends We {
|
|
11494
11521
|
constructor(e = X) {
|
|
11495
11522
|
super(), this._values = /* @__PURE__ */ new Map(), this._pathTracer = null, this._resetCallback = null, this._handlers = {}, this._delegates = {}, this._initDefaults(e);
|
|
11496
11523
|
}
|
|
@@ -11532,7 +11559,7 @@ var Fc = class extends Sn {
|
|
|
11532
11559
|
let i = this._values.get(e);
|
|
11533
11560
|
if (i === t) return;
|
|
11534
11561
|
this._values.set(e, t);
|
|
11535
|
-
let a =
|
|
11562
|
+
let a = Gc[e];
|
|
11536
11563
|
a && (this._applyRoute(a, t, i), (n === void 0 ? a.reset ?? !0 : n) && this._resetCallback?.(), r || this.dispatchEvent({
|
|
11537
11564
|
type: Y.SETTING_CHANGED,
|
|
11538
11565
|
key: e,
|
|
@@ -11546,7 +11573,7 @@ var Fc = class extends Sn {
|
|
|
11546
11573
|
let e = this._values.get(r);
|
|
11547
11574
|
if (e === i) continue;
|
|
11548
11575
|
this._values.set(r, i);
|
|
11549
|
-
let a =
|
|
11576
|
+
let a = Gc[r];
|
|
11550
11577
|
a && (this._applyRoute(a, i, e), (a.reset ?? !0) && (n = !0), t || this.dispatchEvent({
|
|
11551
11578
|
type: Y.SETTING_CHANGED,
|
|
11552
11579
|
key: r,
|
|
@@ -11564,7 +11591,7 @@ var Fc = class extends Sn {
|
|
|
11564
11591
|
}
|
|
11565
11592
|
applyAll() {
|
|
11566
11593
|
for (let [e, t] of this._values) {
|
|
11567
|
-
let n =
|
|
11594
|
+
let n = Gc[e];
|
|
11568
11595
|
n && this._applyRoute(n, t, void 0);
|
|
11569
11596
|
}
|
|
11570
11597
|
}
|
|
@@ -11572,10 +11599,10 @@ var Fc = class extends Sn {
|
|
|
11572
11599
|
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);
|
|
11573
11600
|
}
|
|
11574
11601
|
_initDefaults(e) {
|
|
11575
|
-
for (let t of Object.keys(
|
|
11576
|
-
for (let [t, n] of Object.entries(
|
|
11602
|
+
for (let t of Object.keys(Gc)) t in e && this._values.set(t, e[t]);
|
|
11603
|
+
for (let [t, n] of Object.entries(Kc)) t in e && this._values.set(n, e[t]);
|
|
11577
11604
|
}
|
|
11578
|
-
},
|
|
11605
|
+
}, Jc = class extends We {
|
|
11579
11606
|
constructor(e) {
|
|
11580
11607
|
super();
|
|
11581
11608
|
let t = e.clientWidth, n = e.clientHeight;
|
|
@@ -11691,7 +11718,7 @@ var Fc = class extends Sn {
|
|
|
11691
11718
|
dispose() {
|
|
11692
11719
|
this.controls?.dispose();
|
|
11693
11720
|
}
|
|
11694
|
-
},
|
|
11721
|
+
}, Yc = class extends We {
|
|
11695
11722
|
constructor(e, t, n, r = {}) {
|
|
11696
11723
|
super(), this.scene = e, this.sceneHelpers = t, this.pathTracer = n, this._onReset = r.onReset || null;
|
|
11697
11724
|
}
|
|
@@ -11844,39 +11871,39 @@ var Fc = class extends Sn {
|
|
|
11844
11871
|
]);
|
|
11845
11872
|
return n;
|
|
11846
11873
|
}
|
|
11847
|
-
},
|
|
11848
|
-
function Xc(e, t, n, r, i) {
|
|
11849
|
-
i[0] = Yc(e), i[1] = Yc(t), i[2] = Yc(n);
|
|
11850
|
-
}
|
|
11874
|
+
}, Xc = (e) => Math.min(Math.max(e, 0), 1);
|
|
11851
11875
|
function Zc(e, t, n, r, i) {
|
|
11852
|
-
i[0] =
|
|
11876
|
+
i[0] = Xc(e), i[1] = Xc(t), i[2] = Xc(n);
|
|
11853
11877
|
}
|
|
11854
11878
|
function Qc(e, t, n, r, i) {
|
|
11855
|
-
|
|
11879
|
+
i[0] = Xc(e * r), i[1] = Xc(t * r), i[2] = Xc(n * r);
|
|
11856
11880
|
}
|
|
11857
11881
|
function $c(e, t, n, r, i) {
|
|
11882
|
+
e *= r, t *= r, n *= r, i[0] = Xc(e / (e + 1)), i[1] = Xc(t / (t + 1)), i[2] = Xc(n / (n + 1));
|
|
11883
|
+
}
|
|
11884
|
+
function el(e, t, n, r, i) {
|
|
11858
11885
|
e = Math.max(e * r - .004, 0), t = Math.max(t * r - .004, 0), n = Math.max(n * r - .004, 0);
|
|
11859
11886
|
let a = (e) => (e * (6.2 * e + .5) / (e * (6.2 * e + 1.7) + .06)) ** 2.2;
|
|
11860
11887
|
i[0] = a(e), i[1] = a(t), i[2] = a(n);
|
|
11861
11888
|
}
|
|
11862
|
-
function
|
|
11889
|
+
function tl(e, t, n, r, i) {
|
|
11863
11890
|
e = e * r / .6, t = t * r / .6, n = n * r / .6;
|
|
11864
11891
|
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);
|
|
11865
|
-
a = c(a), o = c(o), s = c(s), i[0] =
|
|
11892
|
+
a = c(a), o = c(o), s = c(s), i[0] = Xc(1.60475 * a - .53108 * o - .07367 * s), i[1] = Xc(-.10208 * a + 1.10813 * o - .00605 * s), i[2] = Xc(-.00327 * a - .07276 * o + 1.07602 * s);
|
|
11866
11893
|
}
|
|
11867
|
-
function
|
|
11894
|
+
function nl(e, t, n, r, i) {
|
|
11868
11895
|
e *= r, t *= r, n *= r;
|
|
11869
11896
|
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;
|
|
11870
|
-
c =
|
|
11897
|
+
c = Xc((Math.log2(Math.max(c, 1e-10)) - d) / f), l = Xc((Math.log2(Math.max(l, 1e-10)) - d) / f), u = Xc((Math.log2(Math.max(u, 1e-10)) - d) / f);
|
|
11871
11898
|
let p = (e) => {
|
|
11872
11899
|
let t = e * e, n = t * t;
|
|
11873
11900
|
return 15.5 * n * t - 40.14 * n * e + 31.96 * n - 6.868 * t * e + .4298 * t + .1191 * e - .00232;
|
|
11874
11901
|
};
|
|
11875
11902
|
c = p(c), l = p(l), u = p(u);
|
|
11876
11903
|
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;
|
|
11877
|
-
m = Math.max(0, m) ** 2.2, h = Math.max(0, h) ** 2.2, g = Math.max(0, g) ** 2.2, i[0] =
|
|
11904
|
+
m = Math.max(0, m) ** 2.2, h = Math.max(0, h) ** 2.2, g = Math.max(0, g) ** 2.2, i[0] = Xc(1.6605 * m - .5876 * h - .0728 * g), i[1] = Xc(-.1246 * m + 1.1329 * h - .0083 * g), i[2] = Xc(-.0182 * m - .1006 * h + 1.1187 * g);
|
|
11878
11905
|
}
|
|
11879
|
-
function
|
|
11906
|
+
function rl(e, t, n, r, i) {
|
|
11880
11907
|
let a = .76;
|
|
11881
11908
|
e *= r, t *= r, n *= r;
|
|
11882
11909
|
let o = Math.min(e, Math.min(t, n)), s = o < .08 ? o - 6.25 * o * o : .04;
|
|
@@ -11891,27 +11918,27 @@ function nl(e, t, n, r, i) {
|
|
|
11891
11918
|
let f = 1 - 1 / (.15 * (c - u) + 1);
|
|
11892
11919
|
i[0] = e + (u - e) * f, i[1] = t + (u - t) * f, i[2] = n + (u - n) * f;
|
|
11893
11920
|
}
|
|
11894
|
-
var
|
|
11895
|
-
[lt,
|
|
11896
|
-
[Ye,
|
|
11897
|
-
[bt,
|
|
11898
|
-
[Ne,
|
|
11899
|
-
[Ee,
|
|
11900
|
-
[Oe,
|
|
11901
|
-
[st,
|
|
11902
|
-
]),
|
|
11903
|
-
function
|
|
11921
|
+
var il = new Map([
|
|
11922
|
+
[lt, Zc],
|
|
11923
|
+
[Ye, Qc],
|
|
11924
|
+
[bt, $c],
|
|
11925
|
+
[Ne, el],
|
|
11926
|
+
[Ee, tl],
|
|
11927
|
+
[Oe, nl],
|
|
11928
|
+
[st, rl]
|
|
11929
|
+
]), al = 1 / 2.2, ol = .2126, sl = .7152, cl = .0722;
|
|
11930
|
+
function ll(e, t) {
|
|
11904
11931
|
if (t === 1) return;
|
|
11905
|
-
let n = e[0] *
|
|
11932
|
+
let n = e[0] * ol + e[1] * sl + e[2] * cl;
|
|
11906
11933
|
e[0] = n + (e[0] - n) * t, e[1] = n + (e[1] - n) * t, e[2] = n + (e[2] - n) * t;
|
|
11907
11934
|
}
|
|
11908
11935
|
//#endregion
|
|
11909
11936
|
//#region src/Passes/OIDNDenoiser.js
|
|
11910
|
-
var
|
|
11911
|
-
async function
|
|
11912
|
-
return
|
|
11937
|
+
var ul = null;
|
|
11938
|
+
async function dl() {
|
|
11939
|
+
return ul ||= (await import("oidn-web")).initUNetFromURL, ul;
|
|
11913
11940
|
}
|
|
11914
|
-
var
|
|
11941
|
+
var fl = new Float32Array(3), pl = {
|
|
11915
11942
|
BASE_URL: "https://cdn.jsdelivr.net/npm/denoiser/tzas/",
|
|
11916
11943
|
QUALITY_SUFFIXES: {
|
|
11917
11944
|
fast: "_small",
|
|
@@ -11924,7 +11951,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
11924
11951
|
debugGbufferMaps: !0,
|
|
11925
11952
|
tileSize: 256
|
|
11926
11953
|
}
|
|
11927
|
-
},
|
|
11954
|
+
}, ml = class extends We {
|
|
11928
11955
|
constructor(e, t, n, r, i = {}) {
|
|
11929
11956
|
if (super(), !e || !t || !n || !r) throw Error("OIDNDenoiser requires output canvas, renderer, scene, and camera");
|
|
11930
11957
|
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 || (() => Ee), this.getSaturation = i.getSaturation || (() => 1), this.getTransparentBackground = i.getTransparentBackground || (() => !1), this.isGPUMode = !!this.backendParamsGetter, this.gpuDevice = null, this._gpuInputBuffers = {
|
|
@@ -11935,7 +11962,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
11935
11962
|
width: 0,
|
|
11936
11963
|
height: 0
|
|
11937
11964
|
}, this._gpuInputPadBuffer = null, this._gpuInputPaddedRowBytes = 0, this._alphaReadbackBuffer = null, this._alphaReadbackMapped = !1, this._cachedAlpha = null, this._cachedAlphaWidth = 0, this.config = {
|
|
11938
|
-
...
|
|
11965
|
+
...pl.DEFAULT_OPTIONS,
|
|
11939
11966
|
...i
|
|
11940
11967
|
}, this.enabled = this.config.enableOIDN, this.quality = this.config.oidnQuality, this.debugGbufferMaps = this.config.debugGbufferMaps, this.tileSize = this.config.tileSize, this.state = {
|
|
11941
11968
|
isDenoising: !1,
|
|
@@ -11991,7 +12018,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
11991
12018
|
let e = this.backendParamsGetter();
|
|
11992
12019
|
this.gpuDevice = e?.device ?? null, t = e?.device ? e : void 0;
|
|
11993
12020
|
}
|
|
11994
|
-
this.unet = await (await
|
|
12021
|
+
this.unet = await (await dl())(e, t, {
|
|
11995
12022
|
aux: !0,
|
|
11996
12023
|
hdr: !0,
|
|
11997
12024
|
maxTileSize: this.tileSize
|
|
@@ -12006,14 +12033,14 @@ var dl = new Float32Array(3), fl = {
|
|
|
12006
12033
|
}
|
|
12007
12034
|
}
|
|
12008
12035
|
_generateTzaUrl() {
|
|
12009
|
-
let { BASE_URL: e, QUALITY_SUFFIXES: t } =
|
|
12036
|
+
let { BASE_URL: e, QUALITY_SUFFIXES: t } = pl;
|
|
12010
12037
|
return `${e}rt_hdr_alb_nrm${t[this.quality] || ""}.tza`;
|
|
12011
12038
|
}
|
|
12012
12039
|
async updateConfiguration(e) {
|
|
12013
12040
|
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());
|
|
12014
12041
|
}
|
|
12015
12042
|
async updateQuality(e) {
|
|
12016
|
-
if (!Object.prototype.hasOwnProperty.call(
|
|
12043
|
+
if (!Object.prototype.hasOwnProperty.call(pl.QUALITY_SUFFIXES, e)) throw Error(`Invalid quality setting: ${e}. Must be one of: ${Object.keys(pl.QUALITY_SUFFIXES).join(", ")}`);
|
|
12017
12044
|
await this.updateConfiguration({ oidnQuality: e });
|
|
12018
12045
|
}
|
|
12019
12046
|
async start() {
|
|
@@ -12200,10 +12227,10 @@ var dl = new Float32Array(3), fl = {
|
|
|
12200
12227
|
d.copyBufferToBuffer(e.data, r, u, a, c);
|
|
12201
12228
|
}
|
|
12202
12229
|
r.queue.submit([d.finish()]), u.mapAsync(GPUMapMode.READ).then(() => {
|
|
12203
|
-
let e = new Float32Array(u.getMappedRange()), t = new ImageData(o, s), r = this.getExposure(), i = this.getSaturation(), a =
|
|
12230
|
+
let e = new Float32Array(u.getMappedRange()), t = new ImageData(o, s), r = this.getExposure(), i = this.getSaturation(), a = il.get(this.getToneMapping()) || il.get(Ee), c = this._cachedAlpha, l = this._cachedAlphaWidth;
|
|
12204
12231
|
for (let s = 0, u = e.length; s < u; s += 4) {
|
|
12205
12232
|
let u = e[s] * r, d = e[s + 1] * r, f = e[s + 2] * r;
|
|
12206
|
-
if (i !== 1 && (
|
|
12233
|
+
if (i !== 1 && (fl[0] = u, fl[1] = d, fl[2] = f, ll(fl, i), u = fl[0], d = fl[1], f = fl[2]), a(u, d, f, 1, fl), t.data[s] = fl[0] ** al * 255 | 0, t.data[s + 1] = fl[1] ** al * 255 | 0, t.data[s + 2] = fl[2] ** al * 255 | 0, c) {
|
|
12207
12234
|
let e = (s >> 2) % o, r = (s >> 2) / o | 0;
|
|
12208
12235
|
t.data[s + 3] = c[(n.y + r) * l + n.x + e];
|
|
12209
12236
|
} else t.data[s + 3] = 255;
|
|
@@ -12230,10 +12257,10 @@ var dl = new Float32Array(3), fl = {
|
|
|
12230
12257
|
try {
|
|
12231
12258
|
let o = r.createCommandEncoder({ label: "oidn-readback" });
|
|
12232
12259
|
o.copyBufferToBuffer(e, 0, a, 0, i), r.queue.submit([o.finish()]), await a.mapAsync(GPUMapMode.READ);
|
|
12233
|
-
let s = new Float32Array(a.getMappedRange()), c = new ImageData(t, n), l = this.getExposure(), u = this.getSaturation(), d =
|
|
12260
|
+
let s = new Float32Array(a.getMappedRange()), c = new ImageData(t, n), l = this.getExposure(), u = this.getSaturation(), d = il.get(this.getToneMapping()) || il.get(Ee), f = this._cachedAlpha;
|
|
12234
12261
|
for (let e = 0, t = s.length; e < t; e += 4) {
|
|
12235
12262
|
let t = s[e] * l, n = s[e + 1] * l, r = s[e + 2] * l;
|
|
12236
|
-
u !== 1 && (
|
|
12263
|
+
u !== 1 && (fl[0] = t, fl[1] = n, fl[2] = r, ll(fl, u), t = fl[0], n = fl[1], r = fl[2]), d(t, n, r, 1, fl), c.data[e] = fl[0] ** al * 255 | 0, c.data[e + 1] = fl[1] ** al * 255 | 0, c.data[e + 2] = fl[2] ** al * 255 | 0, c.data[e + 3] = f ? f[e >> 2] : 255;
|
|
12237
12264
|
}
|
|
12238
12265
|
a.unmap(), this.ctx.putImageData(c, 0, 0);
|
|
12239
12266
|
} finally {
|
|
@@ -12254,7 +12281,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
12254
12281
|
let t = this.debugHelpers && (this._lastAlbedoTexture !== e.textures[2] || this._lastNormalTexture !== e.textures[1]);
|
|
12255
12282
|
if (!this.debugHelpers || t) {
|
|
12256
12283
|
this.debugHelpers && (this.debugHelpers.albedo?.dispose(), this.debugHelpers.normal?.dispose(), console.log("OIDNDenoiser: Recreating debug helpers due to texture change")), this.debugHelpers = {
|
|
12257
|
-
albedo:
|
|
12284
|
+
albedo: _c(this.renderer, e, {
|
|
12258
12285
|
width: 250,
|
|
12259
12286
|
height: 250,
|
|
12260
12287
|
position: "bottom-right",
|
|
@@ -12263,7 +12290,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
12263
12290
|
autoUpdate: !1,
|
|
12264
12291
|
textureIndex: 2
|
|
12265
12292
|
}),
|
|
12266
|
-
normal:
|
|
12293
|
+
normal: _c(this.renderer, e, {
|
|
12267
12294
|
width: 250,
|
|
12268
12295
|
height: 250,
|
|
12269
12296
|
position: "bottom-left",
|
|
@@ -12285,19 +12312,19 @@ var dl = new Float32Array(3), fl = {
|
|
|
12285
12312
|
dispose() {
|
|
12286
12313
|
this.abort(), this._destroyPendingStagingBuffers(), 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");
|
|
12287
12314
|
}
|
|
12288
|
-
},
|
|
12315
|
+
}, hl = "" + new URL("assets/AIUpscalerWorker-D58dcMrY.js", import.meta.url).href, gl = "https://huggingface.co/notaneimu/onnx-image-models/resolve/main/", _l = {
|
|
12289
12316
|
QUALITY_PRESETS: {
|
|
12290
12317
|
fast: {
|
|
12291
|
-
2:
|
|
12292
|
-
4:
|
|
12318
|
+
2: gl + "2x-spanx2-ch48.onnx",
|
|
12319
|
+
4: gl + "4xNomos8k_span_otf_strong_fp32_opset17.onnx"
|
|
12293
12320
|
},
|
|
12294
12321
|
balanced: {
|
|
12295
|
-
2:
|
|
12296
|
-
4:
|
|
12322
|
+
2: gl + "2xNomosUni_compact_otf_medium.onnx",
|
|
12323
|
+
4: gl + "RealESRGAN_x4plus.onnx"
|
|
12297
12324
|
},
|
|
12298
12325
|
quality: {
|
|
12299
|
-
2:
|
|
12300
|
-
4:
|
|
12326
|
+
2: gl + "2x-realesrgan-x2plus.onnx",
|
|
12327
|
+
4: gl + "4xNomos2_hq_mosr_fp32.onnx"
|
|
12301
12328
|
}
|
|
12302
12329
|
},
|
|
12303
12330
|
TILE_SIZE: 512,
|
|
@@ -12309,17 +12336,17 @@ var dl = new Float32Array(3), fl = {
|
|
|
12309
12336
|
}],
|
|
12310
12337
|
graphOptimizationLevel: "all"
|
|
12311
12338
|
}
|
|
12312
|
-
},
|
|
12339
|
+
}, vl = class extends We {
|
|
12313
12340
|
constructor(e, t, n = {}) {
|
|
12314
12341
|
if (super(), !e || !t) throw Error("AIUpscaler requires output canvas and renderer");
|
|
12315
|
-
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 || (() => Ee), 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 ||
|
|
12342
|
+
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 || (() => Ee), 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 || _l.TILE_SIZE, this._tileSizeOverride = !!n.tileSize, this.state = {
|
|
12316
12343
|
isUpscaling: !1,
|
|
12317
12344
|
isLoading: !1,
|
|
12318
12345
|
abortController: null
|
|
12319
12346
|
}, this._worker = null, this._currentModelUrl = null, this._tileId = 0, this._pendingWorkerHandlers = /* @__PURE__ */ new Set(), this._upscaledAlpha = null, this._upscaledAlphaWidth = 0, this._backupCanvas = null, this._baseWidth = e.width, this._baseHeight = e.height, this._hdrStagingBuffer = null, this._hdrStagingWidth = 0, this._hdrStagingHeight = 0;
|
|
12320
12347
|
}
|
|
12321
12348
|
async _ensureSession() {
|
|
12322
|
-
let e =
|
|
12349
|
+
let e = _l.QUALITY_PRESETS[this.quality];
|
|
12323
12350
|
if (!e) throw Error(`Unknown quality preset: ${this.quality}`);
|
|
12324
12351
|
let t = e[this.scaleFactor];
|
|
12325
12352
|
if (!t) throw Error(`No model for ${this.quality}/${this.scaleFactor}x`);
|
|
@@ -12330,10 +12357,10 @@ var dl = new Float32Array(3), fl = {
|
|
|
12330
12357
|
});
|
|
12331
12358
|
try {
|
|
12332
12359
|
if (!this._worker) try {
|
|
12333
|
-
this._worker = new Worker(
|
|
12360
|
+
this._worker = new Worker(hl, { type: "module" });
|
|
12334
12361
|
} catch (e) {
|
|
12335
12362
|
if (e.name !== "SecurityError") throw e;
|
|
12336
|
-
this._worker = await or(
|
|
12363
|
+
this._worker = await or(hl);
|
|
12337
12364
|
}
|
|
12338
12365
|
await new Promise((e, n) => {
|
|
12339
12366
|
let r = (t) => {
|
|
@@ -12342,7 +12369,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
12342
12369
|
this._worker.addEventListener("message", r), this._worker.postMessage({
|
|
12343
12370
|
type: "load",
|
|
12344
12371
|
url: t,
|
|
12345
|
-
sessionOptions:
|
|
12372
|
+
sessionOptions: _l.SESSION_OPTIONS
|
|
12346
12373
|
});
|
|
12347
12374
|
}), this._currentModelUrl = t, this.dispatchEvent({ type: "loaded" });
|
|
12348
12375
|
} catch (e) {
|
|
@@ -12409,8 +12436,8 @@ var dl = new Float32Array(3), fl = {
|
|
|
12409
12436
|
willReadFrequently: !0,
|
|
12410
12437
|
alpha: !0
|
|
12411
12438
|
});
|
|
12412
|
-
this._cacheUpscaledAlpha(t, n * i, r * i), t.isHDR && (this._hdrToneMapFn =
|
|
12413
|
-
let o =
|
|
12439
|
+
this._cacheUpscaledAlpha(t, n * i, r * i), t.isHDR && (this._hdrToneMapFn = il.get(this.getToneMapping()) || il.get(Ee), this._hdrExposure = this.getExposure(), this._hdrSaturation = this.getSaturation(), this._tmOut = new Float32Array(3));
|
|
12440
|
+
let o = _l.TILE_OVERLAP, s = this.tileSize, c = s - o * 2, l = Math.ceil(n / c), u = Math.ceil(r / c), d = l * u, f = 0;
|
|
12414
12441
|
for (let o = 0; o < u; o++) for (let u = 0; u < l; u++) {
|
|
12415
12442
|
if (e.aborted) throw new DOMException("Aborted", "AbortError");
|
|
12416
12443
|
let l = Math.min(u * c, Math.max(0, n - s)), p = Math.min(o * c, Math.max(0, r - s)), m = Math.min(s, n - l), h = Math.min(s, r - p), g = this._extractTile(t, l, p, m, h), _ = await this._inferTile(g, m, h), v = l * i, y = p * i, b = m * i, x = h * i, S = this._tensorToImageData(_, b, x, v, y);
|
|
@@ -12483,7 +12510,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
12483
12510
|
let u = ((n + e) * o + (t + i)) * 4, d = e * r + i;
|
|
12484
12511
|
if (s) {
|
|
12485
12512
|
let e = this._hdrToneMapFn, t = this._hdrExposure, n = this._hdrSaturation, r = a[u] * t, i = a[u + 1] * t, o = a[u + 2] * t;
|
|
12486
|
-
n !== 1 && (this._tmOut[0] = r, this._tmOut[1] = i, this._tmOut[2] = o,
|
|
12513
|
+
n !== 1 && (this._tmOut[0] = r, this._tmOut[1] = i, this._tmOut[2] = o, ll(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] ** +al, l[c + d] = this._tmOut[1] ** +al, l[2 * c + d] = this._tmOut[2] ** +al;
|
|
12487
12514
|
} else l[d] = a[u] / 255, l[c + d] = a[u + 1] / 255, l[2 * c + d] = a[u + 2] / 255;
|
|
12488
12515
|
}
|
|
12489
12516
|
return l;
|
|
@@ -12541,10 +12568,10 @@ var dl = new Float32Array(3), fl = {
|
|
|
12541
12568
|
this._backupCanvas = document.createElement("canvas"), this._backupCanvas.width = e.width, this._backupCanvas.height = e.height;
|
|
12542
12569
|
let t = this._backupCanvas.getContext("2d");
|
|
12543
12570
|
if (e.isHDR) {
|
|
12544
|
-
let { data: n, width: r, height: i } = e, a = t.createImageData(r, i), o = a.data, s =
|
|
12571
|
+
let { data: n, width: r, height: i } = e, a = t.createImageData(r, i), o = a.data, s = il.get(this.getToneMapping()) || il.get(Ee), c = this.getExposure(), l = this.getSaturation(), u = new Float32Array(3);
|
|
12545
12572
|
for (let e = 0, t = r * i; e < t; e++) {
|
|
12546
12573
|
let t = e * 4, r = n[t] * c, i = n[t + 1] * c, a = n[t + 2] * c;
|
|
12547
|
-
l !== 1 && (u[0] = r, u[1] = i, u[2] = a,
|
|
12574
|
+
l !== 1 && (u[0] = r, u[1] = i, u[2] = a, ll(u, l), r = u[0], i = u[1], a = u[2]), s(r, i, a, 1, u), o[t] = u[0] ** +al * 255 + .5 | 0, o[t + 1] = u[1] ** +al * 255 + .5 | 0, o[t + 2] = u[2] ** +al * 255 + .5 | 0, o[t + 3] = 255;
|
|
12548
12575
|
}
|
|
12549
12576
|
t.putImageData(a, 0, 0);
|
|
12550
12577
|
} else t.putImageData(e, 0, 0);
|
|
@@ -12556,7 +12583,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
12556
12583
|
this.hdr = !!e;
|
|
12557
12584
|
}
|
|
12558
12585
|
setQuality(e) {
|
|
12559
|
-
if (!
|
|
12586
|
+
if (!_l.QUALITY_PRESETS[e]) {
|
|
12560
12587
|
console.warn(`AIUpscaler: Invalid quality "${e}", must be fast/balanced/quality`);
|
|
12561
12588
|
return;
|
|
12562
12589
|
}
|
|
@@ -12579,7 +12606,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
12579
12606
|
async dispose() {
|
|
12580
12607
|
this.abort(), this._cleanupPendingWorkerHandlers(), this._worker &&= (this._worker.postMessage({ type: "dispose" }), this._worker.terminate(), null), this._currentModelUrl = null, this._backupCanvas = null, this._upscaledAlpha = null, this.state.abortController = null, this._hdrStagingBuffer?.destroy(), this._hdrStagingBuffer = null, this._hdrStagingWidth = 0, this._hdrStagingHeight = 0, console.log("AIUpscaler disposed");
|
|
12581
12608
|
}
|
|
12582
|
-
},
|
|
12609
|
+
}, yl = class extends We {
|
|
12583
12610
|
constructor({ renderer: e, mainCanvas: t, scene: n, camera: r, stages: i, pipeline: a, getExposure: o, getSaturation: s, getTransparentBg: c }) {
|
|
12584
12611
|
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, this._pendingStartUpscaler = null, this._denoiserStartHandler = null, this._denoiserEndHandler = null, this._upscalerResChangedHandler = null, this._upscalerStartHandler = null, this._upscalerProgressHandler = null, this._upscalerEndHandler = null;
|
|
12585
12612
|
}
|
|
@@ -12600,7 +12627,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
12600
12627
|
setupDenoiser() {
|
|
12601
12628
|
if (!this.denoiserCanvas) return;
|
|
12602
12629
|
let e = this._stages.pathTracer;
|
|
12603
|
-
this.denoiser = new
|
|
12630
|
+
this.denoiser = new ml(this.denoiserCanvas, this.renderer, this.scene, this.camera, {
|
|
12604
12631
|
...X,
|
|
12605
12632
|
backendParams: () => ({
|
|
12606
12633
|
device: this.renderer.backend.device,
|
|
@@ -12625,7 +12652,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
12625
12652
|
setupUpscaler() {
|
|
12626
12653
|
if (!this.denoiserCanvas) return;
|
|
12627
12654
|
let e = this._stages.pathTracer;
|
|
12628
|
-
this.upscaler = new
|
|
12655
|
+
this.upscaler = new vl(this.denoiserCanvas, this.renderer, {
|
|
12629
12656
|
scaleFactor: X.upscalerScale || 2,
|
|
12630
12657
|
quality: X.upscalerQuality || "fast",
|
|
12631
12658
|
getSourceCanvas: () => this.denoiser?.enabled ? null : this.renderer.domElement,
|
|
@@ -12786,7 +12813,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
12786
12813
|
let t = Bn[e];
|
|
12787
12814
|
t && this._stages.asvgf?.updateParameters(t);
|
|
12788
12815
|
}
|
|
12789
|
-
},
|
|
12816
|
+
}, bl = class {
|
|
12790
12817
|
constructor() {
|
|
12791
12818
|
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;
|
|
12792
12819
|
}
|
|
@@ -12810,7 +12837,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
12810
12837
|
dispose() {
|
|
12811
12838
|
this.visible = !1;
|
|
12812
12839
|
}
|
|
12813
|
-
},
|
|
12840
|
+
}, xl = class {
|
|
12814
12841
|
constructor(n, r, i) {
|
|
12815
12842
|
this.layer = "scene", this.visible = !0, this._outlineNode = Kt(r, i, {
|
|
12816
12843
|
selectedObjects: [],
|
|
@@ -12844,7 +12871,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
12844
12871
|
dispose() {
|
|
12845
12872
|
this.visible = !1, this._outlineNode?.dispose(), this._material?.dispose(), this._quad = null;
|
|
12846
12873
|
}
|
|
12847
|
-
},
|
|
12874
|
+
}, Sl = class {
|
|
12848
12875
|
constructor(e, t) {
|
|
12849
12876
|
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;
|
|
12850
12877
|
}
|
|
@@ -12856,13 +12883,13 @@ var dl = new Float32Array(3), fl = {
|
|
|
12856
12883
|
}
|
|
12857
12884
|
setupDefaultHelpers({ helperScene: e, meshScene: t, pipeline: n, denoisingManager: r, app: i, renderWidth: a, renderHeight: o }) {
|
|
12858
12885
|
this.setHelperScene(e);
|
|
12859
|
-
let s = new
|
|
12886
|
+
let s = new bl();
|
|
12860
12887
|
this.register("tiles", s), s.setRenderSize(a || 1, o || 1), i.addEventListener("resolution_changed", (e) => {
|
|
12861
12888
|
s.setRenderSize(e.width, e.height);
|
|
12862
12889
|
}), n.eventBus.on("tile:changed", (e) => {
|
|
12863
12890
|
e.renderMode === 1 && e.tileBounds && (s.setActiveTile(e.tileBounds), s.show());
|
|
12864
12891
|
}), n.eventBus.on("pipeline:reset", () => s.hide()), i.addEventListener(Y.RENDER_COMPLETE, () => s.hide()), this._wireDenoiserTileEvents(s, r);
|
|
12865
|
-
let c = new
|
|
12892
|
+
let c = new xl(this.renderer, t, this.camera);
|
|
12866
12893
|
this.register("outline", c);
|
|
12867
12894
|
}
|
|
12868
12895
|
_wireDenoiserTileEvents(e, t) {
|
|
@@ -12929,7 +12956,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
12929
12956
|
for (let e of this._helpers.values()) e.dispose?.();
|
|
12930
12957
|
this._helpers.clear(), this._hudCanvas.parentElement && this._hudCanvas.parentElement.removeChild(this._hudCanvas);
|
|
12931
12958
|
}
|
|
12932
|
-
},
|
|
12959
|
+
}, Cl = class extends We {
|
|
12933
12960
|
constructor() {
|
|
12934
12961
|
super(), this.mixer = null, this.timer = new Ot(), this.actions = [], this.isPlaying = !1, this._scene = null, this._mixerRoot = null, this._meshes = null, this._meshTriRanges = null, this._posBuffer = null, this._tempVec = new Mt(), this._skinnedCache = null, this._totalTriangleCount = 0, this._clipsCache = null, this._savedTimeScale = 1, this.onFinished = null, this.wakeCallback = null;
|
|
12935
12962
|
}
|
|
@@ -13029,7 +13056,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
13029
13056
|
dispose() {
|
|
13030
13057
|
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;
|
|
13031
13058
|
}
|
|
13032
|
-
},
|
|
13059
|
+
}, wl = class {
|
|
13033
13060
|
constructor({ camera: e, canvas: t, orbitControls: n, app: r }) {
|
|
13034
13061
|
this._app = r, this._orbitControls = n, this._camera = e, this._controls = new qt(e, t), this._gizmoScene = new Ct(), 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 Mt(), this._normalMatrix = new et(), 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);
|
|
13035
13062
|
}
|
|
@@ -13138,11 +13165,17 @@ var dl = new Float32Array(3), fl = {
|
|
|
13138
13165
|
}
|
|
13139
13166
|
}
|
|
13140
13167
|
dispose() {
|
|
13141
|
-
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;
|
|
13168
|
+
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, this._app = null, this._orbitControls = null, this._camera = null, this._controls = null, this._gizmoScene = null;
|
|
13142
13169
|
}
|
|
13143
|
-
},
|
|
13170
|
+
}, Tl = /* @__PURE__ */ new WeakMap(), El = class extends We {
|
|
13144
13171
|
constructor(e, t = {}) {
|
|
13145
|
-
super()
|
|
13172
|
+
super();
|
|
13173
|
+
try {
|
|
13174
|
+
Tl.get(e)?.dispose();
|
|
13175
|
+
} catch (e) {
|
|
13176
|
+
console.warn("PathTracerApp: prior canvas owner dispose failed", e);
|
|
13177
|
+
}
|
|
13178
|
+
Tl.set(e, this), this.canvas = e, this._autoResize = t.autoResize !== !1, this._showStats = t.showStats !== !1, this._statsContainer = t.statsContainer || null, this.settings = new qc(X), 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 Cl(), 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 Vc(), this._resizeDebounceTimer = null, this._trackedListeners = [], this._disposed = !1;
|
|
13146
13179
|
}
|
|
13147
13180
|
_addTrackedListener(e, t, n) {
|
|
13148
13181
|
e && (e.addEventListener(t, n), this._trackedListeners.push({
|
|
@@ -13219,7 +13252,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
13219
13252
|
}
|
|
13220
13253
|
dispose() {
|
|
13221
13254
|
if (!this._disposed) {
|
|
13222
|
-
if (this._disposed = !0, this.stopAnimation(), clearTimeout(this._resizeDebounceTimer), this._resizeDebounceTimer = null, this._removeTrackedListeners(), En(null), this.interactionManager?.deselect?.(), this.transformManager?.detach?.(), this.animationManager?.dispose(), this.transformManager?.dispose(), this.overlayManager?.dispose(), this.lightManager?.dispose(), this.denoisingManager?.dispose(), this.interactionManager?.dispose(), this.cameraManager?.dispose(), this.pipeline?.dispose(), this._sdf?.dispose(), this._sdf = null, this.assetLoader?.dispose(), this.assetLoader = null, this.meshScene) {
|
|
13255
|
+
if (this._disposed = !0, this.dispatchEvent({ type: Y.DISPOSE }), this.stopAnimation(), clearTimeout(this._resizeDebounceTimer), this._resizeDebounceTimer = null, this._removeTrackedListeners(), En(null), this.interactionManager?.deselect?.(), this.transformManager?.detach?.(), this.animationManager?.dispose(), this.transformManager?.dispose(), this.overlayManager?.dispose(), this.lightManager?.dispose(), this.denoisingManager?.dispose(), this.interactionManager?.dispose(), this.cameraManager?.dispose(), this.pipeline?.dispose(), this._sdf?.dispose(), this._sdf = null, this.assetLoader?.dispose(), this.assetLoader = null, this.meshScene) {
|
|
13223
13256
|
this.meshScene.environment?.dispose(), this.meshScene.environment = null;
|
|
13224
13257
|
for (let e of [...this.meshScene.children]) Pn(e);
|
|
13225
13258
|
this.meshScene.clear(), this.meshScene = null;
|
|
@@ -13287,7 +13320,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
13287
13320
|
}
|
|
13288
13321
|
async loadSceneData() {
|
|
13289
13322
|
this.interactionManager?.deselect(), this.animationManager.dispose(), this._animRefitInFlight = !1;
|
|
13290
|
-
let e = new
|
|
13323
|
+
let e = new Cs("loadSceneData"), t = this.meshScene.environment, n = null;
|
|
13291
13324
|
if (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)"), On({
|
|
13292
13325
|
status: "Transferring data to GPU...",
|
|
13293
13326
|
progress: 86
|
|
@@ -13423,32 +13456,32 @@ var dl = new Float32Array(3), fl = {
|
|
|
13423
13456
|
}), await this.renderer.init(), r.setLTC(Nt.init()), this.renderer.toneMapping = Ee, this.renderer.toneMappingExposure = 1, this.renderer.setPixelRatio(1);
|
|
13424
13457
|
}
|
|
13425
13458
|
_initCameraManager() {
|
|
13426
|
-
this.cameraManager = new
|
|
13459
|
+
this.cameraManager = new Jc(this.canvas);
|
|
13427
13460
|
}
|
|
13428
13461
|
_initScenes() {
|
|
13429
13462
|
this.scene = new Ct(), this.meshScene = new Ct(), this._sceneHelpers = new Zt();
|
|
13430
13463
|
}
|
|
13431
13464
|
_initAssetPipeline() {
|
|
13432
|
-
this._sdf = new
|
|
13465
|
+
this._sdf = new lc(), this.assetLoader = new Wc(this.meshScene, this.cameraManager.camera, this.cameraManager.controls), this.assetLoader.setRenderer(this.renderer), this.assetLoader.createFloorPlane(), this._addTrackedListener(this.cameraManager.controls, "change", () => {
|
|
13433
13466
|
this.needsReset = !0, this.wake();
|
|
13434
13467
|
});
|
|
13435
13468
|
}
|
|
13436
13469
|
_initPipeline() {
|
|
13437
13470
|
this._createStages();
|
|
13438
13471
|
let { clientWidth: e, clientHeight: t } = this.canvas;
|
|
13439
|
-
this.pipeline = new
|
|
13472
|
+
this.pipeline = new Bc(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);
|
|
13440
13473
|
let n = this.canvas.clientWidth || 1, r = this.canvas.clientHeight || 1;
|
|
13441
13474
|
this.pipeline.setSize(n, r);
|
|
13442
13475
|
}
|
|
13443
13476
|
_initManagers() {
|
|
13444
|
-
this.interactionManager = new
|
|
13477
|
+
this.interactionManager = new Hc({
|
|
13445
13478
|
scene: this.meshScene,
|
|
13446
13479
|
camera: this.cameraManager.camera,
|
|
13447
13480
|
canvas: this.canvas,
|
|
13448
13481
|
assetLoader: this.assetLoader,
|
|
13449
13482
|
pathTracer: null,
|
|
13450
13483
|
floorPlane: this.assetLoader.floorPlane
|
|
13451
|
-
}), this.interactionManager.wireAppEvents(this), this.cameraManager.setInteractionManager(this.interactionManager), this.lightManager = new
|
|
13484
|
+
}), 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 wl({
|
|
13452
13485
|
camera: this.cameraManager.camera,
|
|
13453
13486
|
canvas: this.canvas,
|
|
13454
13487
|
orbitControls: this.cameraManager.controls,
|
|
@@ -13518,16 +13551,16 @@ var dl = new Float32Array(3), fl = {
|
|
|
13518
13551
|
}
|
|
13519
13552
|
_createStages() {
|
|
13520
13553
|
let e = this.settings.get("adaptiveSamplingMax"), t = this.settings.get("useAdaptiveSampling");
|
|
13521
|
-
this.stages.pathTracer = new
|
|
13554
|
+
this.stages.pathTracer = new mc(this.renderer, this.scene, this.cameraManager.camera), this.stages.normalDepth = new hc(this.renderer, { pathTracer: this.stages.pathTracer }), this.stages.motionVector = new gc(this.renderer, this.cameraManager.camera, { pathTracer: this.stages.pathTracer }), this.stages.ssrc = new Ic(this.renderer, { enabled: !1 }), this.stages.asvgf = new vc(this.renderer, { enabled: !1 }), this.stages.variance = new bc(this.renderer, { enabled: !1 }), this.stages.bilateralFilter = new Sc(this.renderer, { enabled: !1 }), this.stages.adaptiveSampling = new Tc(this.renderer, {
|
|
13522
13555
|
adaptiveSamplingMax: e,
|
|
13523
13556
|
enabled: t
|
|
13524
|
-
}), this.stages.edgeFilter = new
|
|
13557
|
+
}), this.stages.edgeFilter = new Ec(this.renderer, { enabled: !1 }), this.stages.autoExposure = new Nc(this.renderer, { enabled: X.autoExposure ?? !1 }), this.stages.display = new Lc(this.renderer, {
|
|
13525
13558
|
exposure: X.autoExposure ? 1 : this.settings.get("exposure") ?? 1,
|
|
13526
13559
|
saturation: this.settings.get("saturation") ?? X.saturation
|
|
13527
13560
|
});
|
|
13528
13561
|
}
|
|
13529
13562
|
_setupDenoisingManager() {
|
|
13530
|
-
this.denoisingManager = new
|
|
13563
|
+
this.denoisingManager = new yl({
|
|
13531
13564
|
renderer: this.renderer,
|
|
13532
13565
|
mainCanvas: this.canvas,
|
|
13533
13566
|
scene: this.scene,
|
|
@@ -13579,7 +13612,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
13579
13612
|
this.scene.updateMatrixWorld(), this.overlayManager?.render(), this.transformManager?.render(this.renderer);
|
|
13580
13613
|
}
|
|
13581
13614
|
_setupOverlayManager() {
|
|
13582
|
-
this.overlayManager = new
|
|
13615
|
+
this.overlayManager = new Sl(this.renderer, this.cameraManager.camera), this.overlayManager.setupDefaultHelpers({
|
|
13583
13616
|
helperScene: this._sceneHelpers,
|
|
13584
13617
|
meshScene: this.meshScene,
|
|
13585
13618
|
pipeline: this.pipeline,
|
|
@@ -13595,7 +13628,7 @@ var dl = new Float32Array(3), fl = {
|
|
|
13595
13628
|
_forwardEvents(e, t) {
|
|
13596
13629
|
if (e) for (let n of t) this._addTrackedListener(e, n, (e) => this.dispatchEvent(e));
|
|
13597
13630
|
}
|
|
13598
|
-
},
|
|
13631
|
+
}, Dl = class {
|
|
13599
13632
|
constructor(e) {
|
|
13600
13633
|
this._app = e, this._cancelled = !1, this._rendering = !1;
|
|
13601
13634
|
}
|
|
@@ -13695,6 +13728,6 @@ var dl = new Float32Array(3), fl = {
|
|
|
13695
13728
|
}
|
|
13696
13729
|
};
|
|
13697
13730
|
//#endregion
|
|
13698
|
-
export { Gn as AF_DEFAULTS, Bn as ASVGF_QUALITY_PRESETS, Wn as AUTO_FOCUS_MODES,
|
|
13731
|
+
export { Gn as AF_DEFAULTS, Bn as ASVGF_QUALITY_PRESETS, Wn as AUTO_FOCUS_MODES, Cl as AnimationManager, Kn as BVH_LEAF_MARKERS, Un as CAMERA_PRESETS, Vn as CAMERA_RANGES, Jc as CameraManager, Jn as DEFAULT_TEXTURE_MATRIX, yl as DenoisingManager, X as ENGINE_DEFAULTS, Y as EngineEvents, Yn as FINAL_RENDER_CONFIG, Hc as InteractionManager, Yc as LightManager, Zn as MEMORY_CONSTANTS, Sl as OverlayManager, Xn as PREVIEW_RENDER_CONFIG, El as PathTracerApp, Rc as PipelineContext, Bc as RenderPipeline, qc as RenderSettings, Sn as RenderStage, Hn as SKY_PRESETS, xn as StageExecutionMode, qn as TEXTURE_CONSTANTS, Z as TRIANGLE_DATA_LAYOUT, wl as TransformManager, Dl as VideoRenderManager };
|
|
13699
13732
|
|
|
13700
13733
|
//# sourceMappingURL=rayzee.es.js.map
|