rayzee 5.0.1 → 5.1.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 +18 -12
- package/dist/rayzee.es.js +738 -717
- package/dist/rayzee.es.js.map +1 -1
- package/dist/rayzee.umd.js +32 -41
- package/dist/rayzee.umd.js.map +1 -1
- package/package.json +2 -2
- package/src/PathTracerApp.js +30 -1
- package/src/Processor/EmissiveTriangleBuilder.js +3 -5
- package/src/Processor/GeometryExtractor.js +5 -7
- package/src/Processor/SceneProcessor.js +1 -2
- package/src/Processor/ShaderBuilder.js +4 -0
- package/src/Processor/TLASBuilder.js +1 -1
- package/src/Stages/PathTracer.js +111 -0
- package/src/TSL/BVHTraversal.js +99 -92
- package/src/TSL/Common.js +0 -1
- package/src/TSL/PathTracerCore.js +0 -10
- package/src/TSL/Random.js +0 -1
- package/src/TSL/RayIntersection.js +0 -3
- package/src/TSL/Struct.js +0 -1
- package/src/managers/MaterialDataManager.js +1 -2
- package/src/managers/RenderTargetManager.js +0 -1
package/dist/rayzee.es.js
CHANGED
|
@@ -84,9 +84,7 @@ var Ht = K(0, "int"), Ut = Ht, Wt = new b(new Float32Array([
|
|
|
84
84
|
Wt.type = D, Wt.needsUpdate = !0;
|
|
85
85
|
var Gt = vt(Wt);
|
|
86
86
|
Gt.setUpdateMatrix(!1);
|
|
87
|
-
var Kt = q(bt(Gt));
|
|
88
|
-
z(1.61803398875);
|
|
89
|
-
var qt = z(.61803398875), Jt = z(.38196601125), Yt = /* @__PURE__ */ X("\n fn getSobolDirectionVector( index: i32 ) -> u32 {\n\n switch ( index ) {\n case 0: { return 2147483648u; }\n case 1: { return 1073741824u; }\n case 2: { return 536870912u; }\n case 3: { return 268435456u; }\n case 4: { return 134217728u; }\n case 5: { return 67108864u; }\n case 6: { return 33554432u; }\n case 7: { return 16777216u; }\n case 8: { return 8388608u; }\n case 9: { return 4194304u; }\n case 10: { return 2097152u; }\n case 11: { return 1048576u; }\n case 12: { return 524288u; }\n case 13: { return 262144u; }\n case 14: { return 131072u; }\n case 15: { return 65536u; }\n case 16: { return 32768u; }\n case 17: { return 16384u; }\n case 18: { return 8192u; }\n case 19: { return 4096u; }\n case 20: { return 2048u; }\n case 21: { return 1024u; }\n case 22: { return 512u; }\n case 23: { return 256u; }\n case 24: { return 128u; }\n case 25: { return 64u; }\n case 26: { return 32u; }\n case 27: { return 16u; }\n case 28: { return 8u; }\n case 29: { return 4u; }\n case 30: { return 2u; }\n default: { return 1u; }\n }\n\n }\n"), Xt = /* @__PURE__ */ X("\n fn pcgHash( state: u32 ) -> u32 {\n\n var s = state;\n s = s * 747796405u + 2891336453u;\n s = ( ( s >> ( ( s >> 28u ) + 4u ) ) ^ s ) * 277803737u;\n s = ( s >> 22u ) ^ s;\n return s;\n\n }\n"), Zt = /* @__PURE__ */ X("\n fn wang_hash( seed: u32 ) -> u32 {\n\n var s = seed;\n s = ( s ^ 61u ) ^ ( s >> 16u );\n s = s * 9u;\n s = s ^ ( s >> 4u );\n s = s * 0x27d4eb2du;\n s = s ^ ( s >> 15u );\n return s;\n\n }\n"), Qt = (e) => (e.assign(e.mul(1664525).add(1013904223)), z(e.shiftRight(8)).mul(1 / 16777216)), $t = (e) => (e.assign(Xt({ state: e })), z(e.shiftRight(8)).mul(1 / 16777216)), en = (e) => {
|
|
87
|
+
var Kt = q(bt(Gt)), qt = z(.61803398875), Jt = z(.38196601125), Yt = /* @__PURE__ */ X("\n fn getSobolDirectionVector( index: i32 ) -> u32 {\n\n switch ( index ) {\n case 0: { return 2147483648u; }\n case 1: { return 1073741824u; }\n case 2: { return 536870912u; }\n case 3: { return 268435456u; }\n case 4: { return 134217728u; }\n case 5: { return 67108864u; }\n case 6: { return 33554432u; }\n case 7: { return 16777216u; }\n case 8: { return 8388608u; }\n case 9: { return 4194304u; }\n case 10: { return 2097152u; }\n case 11: { return 1048576u; }\n case 12: { return 524288u; }\n case 13: { return 262144u; }\n case 14: { return 131072u; }\n case 15: { return 65536u; }\n case 16: { return 32768u; }\n case 17: { return 16384u; }\n case 18: { return 8192u; }\n case 19: { return 4096u; }\n case 20: { return 2048u; }\n case 21: { return 1024u; }\n case 22: { return 512u; }\n case 23: { return 256u; }\n case 24: { return 128u; }\n case 25: { return 64u; }\n case 26: { return 32u; }\n case 27: { return 16u; }\n case 28: { return 8u; }\n case 29: { return 4u; }\n case 30: { return 2u; }\n default: { return 1u; }\n }\n\n }\n"), Xt = /* @__PURE__ */ X("\n fn pcgHash( state: u32 ) -> u32 {\n\n var s = state;\n s = s * 747796405u + 2891336453u;\n s = ( ( s >> ( ( s >> 28u ) + 4u ) ) ^ s ) * 277803737u;\n s = ( s >> 22u ) ^ s;\n return s;\n\n }\n"), Zt = /* @__PURE__ */ X("\n fn wang_hash( seed: u32 ) -> u32 {\n\n var s = seed;\n s = ( s ^ 61u ) ^ ( s >> 16u );\n s = s * 9u;\n s = s ^ ( s >> 4u );\n s = s * 0x27d4eb2du;\n s = s ^ ( s >> 15u );\n return s;\n\n }\n"), Qt = (e) => (e.assign(e.mul(1664525).add(1013904223)), z(e.shiftRight(8)).mul(1 / 16777216)), $t = (e) => (e.assign(Xt({ state: e })), z(e.shiftRight(8)).mul(1 / 16777216)), en = (e) => {
|
|
90
88
|
let t = Qt(e).mul(We).toVar();
|
|
91
89
|
return q(Je(t), pt(t)).mul(ht(Qt(e)));
|
|
92
90
|
}, tn = /* @__PURE__ */ X("\n fn cranleyPatterson2D( p: vec2f, offset: vec2f ) -> vec2f {\n\n return fract( p + offset );\n\n }\n"), nn = /* @__PURE__ */ M(([e, t, n, r]) => {
|
|
@@ -1130,9 +1128,6 @@ var jn = class {
|
|
|
1130
1128
|
case "dispersion":
|
|
1131
1129
|
r[i + 16] = n;
|
|
1132
1130
|
break;
|
|
1133
|
-
case "visible":
|
|
1134
|
-
r[i + 17] = n;
|
|
1135
|
-
break;
|
|
1136
1131
|
case "sheen":
|
|
1137
1132
|
r[i + 18] = n;
|
|
1138
1133
|
break;
|
|
@@ -1211,7 +1206,7 @@ var jn = class {
|
|
|
1211
1206
|
return;
|
|
1212
1207
|
}
|
|
1213
1208
|
let n = this.materialStorageAttr.array, r = e * (zn.PIXELS_PER_MATERIAL * zn.RGBA_COMPONENTS);
|
|
1214
|
-
t.color && (n[r + 0] = t.color.r ?? t.color[0] ?? 1, n[r + 1] = t.color.g ?? t.color[1] ?? 1, n[r + 2] = t.color.b ?? t.color[2] ?? 1), n[r + 3] = t.metalness ?? 0, t.emissive && (n[r + 4] = t.emissive.r ?? t.emissive[0] ?? 0, n[r + 5] = t.emissive.g ?? t.emissive[1] ?? 0, n[r + 6] = t.emissive.b ?? t.emissive[2] ?? 0), n[r + 7] = t.roughness ?? 1, n[r + 8] = t.ior ?? 1.5, n[r + 9] = t.transmission ?? 0, n[r + 10] = t.thickness ?? .1, n[r + 11] = t.emissiveIntensity ?? 1, t.attenuationColor && (n[r + 12] = t.attenuationColor.r ?? t.attenuationColor[0] ?? 1, n[r + 13] = t.attenuationColor.g ?? t.attenuationColor[1] ?? 1, n[r + 14] = t.attenuationColor.b ?? t.attenuationColor[2] ?? 1), n[r + 15] = t.attenuationDistance ?? Infinity, n[r + 16] = t.dispersion ?? 0, n[r + 17] =
|
|
1209
|
+
t.color && (n[r + 0] = t.color.r ?? t.color[0] ?? 1, n[r + 1] = t.color.g ?? t.color[1] ?? 1, n[r + 2] = t.color.b ?? t.color[2] ?? 1), n[r + 3] = t.metalness ?? 0, t.emissive && (n[r + 4] = t.emissive.r ?? t.emissive[0] ?? 0, n[r + 5] = t.emissive.g ?? t.emissive[1] ?? 0, n[r + 6] = t.emissive.b ?? t.emissive[2] ?? 0), n[r + 7] = t.roughness ?? 1, n[r + 8] = t.ior ?? 1.5, n[r + 9] = t.transmission ?? 0, n[r + 10] = t.thickness ?? .1, n[r + 11] = t.emissiveIntensity ?? 1, t.attenuationColor && (n[r + 12] = t.attenuationColor.r ?? t.attenuationColor[0] ?? 1, n[r + 13] = t.attenuationColor.g ?? t.attenuationColor[1] ?? 1, n[r + 14] = t.attenuationColor.b ?? t.attenuationColor[2] ?? 1), n[r + 15] = t.attenuationDistance ?? Infinity, n[r + 16] = t.dispersion ?? 0, n[r + 17] = 1, n[r + 18] = t.sheen ?? 0, n[r + 19] = t.sheenRoughness ?? 1, t.sheenColor && (n[r + 20] = t.sheenColor.r ?? t.sheenColor[0] ?? 0, n[r + 21] = t.sheenColor.g ?? t.sheenColor[1] ?? 0, n[r + 22] = t.sheenColor.b ?? t.sheenColor[2] ?? 0), n[r + 24] = t.specularIntensity ?? 1, t.specularColor && (n[r + 25] = t.specularColor.r ?? t.specularColor[0] ?? 1, n[r + 26] = t.specularColor.g ?? t.specularColor[1] ?? 1, n[r + 27] = t.specularColor.b ?? t.specularColor[2] ?? 1), n[r + 28] = t.iridescence ?? 0, n[r + 29] = t.iridescenceIOR ?? 1.3, t.iridescenceThicknessRange && (n[r + 30] = t.iridescenceThicknessRange[0] ?? 100, n[r + 31] = t.iridescenceThicknessRange[1] ?? 400), n[r + 32] = t.map ?? -1, n[r + 33] = t.normalMap ?? -1, n[r + 34] = t.roughnessMap ?? -1, n[r + 35] = t.metalnessMap ?? -1, n[r + 36] = t.emissiveMap ?? -1, n[r + 37] = t.bumpMap ?? -1, n[r + 38] = t.clearcoat ?? 0, n[r + 39] = t.clearcoatRoughness ?? 0, n[r + 40] = t.opacity ?? 1, n[r + 41] = t.side ?? 0, n[r + 42] = t.transparent ?? 0, n[r + 43] = t.alphaTest ?? 0, n[r + 44] = t.alphaMode ?? 0, n[r + 45] = t.depthWrite ?? 1, n[r + 46] = t.normalScale?.x ?? (typeof t.normalScale == "number" ? t.normalScale : 1), n[r + 47] = t.normalScale?.y ?? (typeof t.normalScale == "number" ? t.normalScale : 1), n[r + 48] = t.bumpScale ?? 1, n[r + 49] = t.displacementScale ?? 1, n[r + 50] = t.displacementMap ?? -1;
|
|
1215
1210
|
let i = [
|
|
1216
1211
|
1,
|
|
1217
1212
|
0,
|
|
@@ -1794,7 +1789,6 @@ var wr = Cr({
|
|
|
1794
1789
|
alphaMode: "int",
|
|
1795
1790
|
side: "int",
|
|
1796
1791
|
depthWrite: "int",
|
|
1797
|
-
visible: "bool",
|
|
1798
1792
|
albedoMapIndex: "int",
|
|
1799
1793
|
emissiveMapIndex: "int",
|
|
1800
1794
|
normalMapIndex: "int",
|
|
@@ -2063,7 +2057,6 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2063
2057
|
attenuationColor: a.rgb,
|
|
2064
2058
|
attenuationDistance: a.a,
|
|
2065
2059
|
dispersion: o.r,
|
|
2066
|
-
visible: o.g,
|
|
2067
2060
|
sheen: o.b,
|
|
2068
2061
|
sheenRoughness: o.a,
|
|
2069
2062
|
sheenColor: s.rgb,
|
|
@@ -2119,28 +2112,14 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2119
2112
|
data2: O
|
|
2120
2113
|
})
|
|
2121
2114
|
});
|
|
2122
|
-
}), oi = /* @__PURE__ */ X("\n fn normalDepthWeight(\n n1: vec3f, n2: vec3f,\n d1: f32, d2: f32,\n phiN: f32, phiD: f32\n ) -> f32 {\n\n let normalW = pow( clamp( dot( n1, n2 ), 0.0, 1.0 ), phiN );\n let depthW = exp( -abs( d1 - d2 ) / max( phiD, 0.001 ) );\n return normalW * depthW;\n\n }\n"), si =
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
visible: n.g.greaterThan(.5),
|
|
2131
|
-
opacity: r.r,
|
|
2132
|
-
side: B(r.g),
|
|
2133
|
-
transparent: r.b.greaterThan(.5)
|
|
2134
|
-
});
|
|
2135
|
-
}), _i = M(([e, t]) => $(t, e, B(4), B(27)).g.greaterThan(.5)), vi = X("\n fn isMaterialVisibleOptimized( visible: bool, side: i32, rayDirection: vec3f, normal: vec3f ) -> bool {\n if ( !visible ) { return false; }\n let rayDotNormal = dot( rayDirection, normal );\n let doubleSide = side == 2;\n let frontSide = side == 0 && rayDotNormal < -0.0001f;\n let backSide = side == 1 && rayDotNormal > 0.0001f;\n return doubleSide || frontSide || backSide;\n }\n"), yi = M(([e, t, n, r]) => {
|
|
2136
|
-
let i = si.wrap(gi(e, r));
|
|
2137
|
-
return vi({
|
|
2138
|
-
visible: i.visible,
|
|
2139
|
-
side: i.side,
|
|
2140
|
-
rayDirection: t,
|
|
2141
|
-
normal: n
|
|
2142
|
-
});
|
|
2143
|
-
}), bi = M(([e, t, n, r]) => {
|
|
2115
|
+
}), oi = /* @__PURE__ */ X("\n fn normalDepthWeight(\n n1: vec3f, n2: vec3f,\n d1: f32, d2: f32,\n phiN: f32, phiD: f32\n ) -> f32 {\n\n let normalW = pow( clamp( dot( n1, n2 ), 0.0, 1.0 ), phiN );\n let depthW = exp( -abs( d1 - d2 ) / max( phiD, 0.001 ) );\n return normalW * depthW;\n\n }\n"), si = 32, ci = 512, li = 4, ui = 8, di = 1e8, fi = null;
|
|
2116
|
+
function pi(e) {
|
|
2117
|
+
fi = e;
|
|
2118
|
+
}
|
|
2119
|
+
var mi = () => Ke("int", si).toVar(), hi = X("\n fn RayTriangleGeometry( rayOrigin: vec3f, rayDir: vec3f, pA: vec3f, pB: vec3f, pC: vec3f, closestHitDst: f32 ) -> vec4f {\n\n // Returns vec4(t, u, v, hit) where hit > 0.5 means intersection\n var result = vec4f( 1e20f, 0.0f, 0.0f, 0.0f );\n\n let edge1 = pB - pA;\n let edge2 = pC - pA;\n let h = cross( rayDir, edge2 );\n let a = dot( edge1, h );\n\n if ( abs( a ) >= 1e-8f ) {\n\n let f = 1.0f / a;\n let s = rayOrigin - pA;\n let u = f * dot( s, h );\n\n if ( u >= 0.0f && u <= 1.0f ) {\n\n let q = cross( s, edge1 );\n let v = f * dot( rayDir, q );\n\n if ( v >= 0.0f && ( u + v ) <= 1.0f ) {\n\n let t = f * dot( edge2, q );\n\n if ( t > 0.0f && t < closestHitDst ) {\n\n result = vec4f( t, u, v, 1.0f );\n\n }\n\n }\n\n }\n\n }\n\n return result;\n\n }\n"), gi = X("\n fn fastRayAABBDst( rayOrigin: vec3f, invDir: vec3f, boxMin: vec3f, boxMax: vec3f ) -> f32 {\n\n let t1 = ( boxMin - rayOrigin ) * invDir;\n let t2 = ( boxMax - rayOrigin ) * invDir;\n\n let tmin = min( t1, t2 );\n let tmax = max( t1, t2 );\n\n let tNear = max( max( tmin.x, tmin.y ), tmin.z );\n let tFar = min( min( tmax.x, tmax.y ), tmax.z ) * 1.00000024f; // Robust traversal: 2 ULP padding (Ize 2013)\n\n let isHit = tNear <= tFar && tFar > 0.0f;\n return select( 1e20f, max( tNear, 0.0f ), isHit );\n\n }\n"), _i = M(([e, t, n, r]) => {
|
|
2120
|
+
let i = B($(r, e, B(10), B(27)).g), a = t.dot(n), o = i.equal(B(2)), s = i.equal(B(0)).and(a.lessThan(-1e-4)), c = i.equal(B(1)).and(a.greaterThan(1e-4));
|
|
2121
|
+
return o.or(s).or(c);
|
|
2122
|
+
}), vi = M(([e, t, n, r]) => {
|
|
2144
2123
|
let i = Er({
|
|
2145
2124
|
didHit: !1,
|
|
2146
2125
|
dst: z(0x56bc75e2d63100000),
|
|
@@ -2151,12 +2130,12 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2151
2130
|
meshIndex: B(-1),
|
|
2152
2131
|
boxTests: B(0),
|
|
2153
2132
|
triTests: B(0)
|
|
2154
|
-
}).toVar(), a = B(-1).toVar(), o = z(0).toVar(), s = z(0).toVar(), c =
|
|
2133
|
+
}).toVar(), a = B(-1).toVar(), o = z(0).toVar(), s = z(0).toVar(), c = mi(), l = B(1).toVar();
|
|
2155
2134
|
c.element(B(0)).assign(B(0));
|
|
2156
|
-
let u = H(J(1), ft(e.direction), st(e.direction, J(0))), d = H(J(1).div(e.direction), J(
|
|
2157
|
-
return P(l.greaterThan(B(0)).and(m.lessThan(B(
|
|
2135
|
+
let u = H(J(1), ft(e.direction), st(e.direction, J(0))), d = H(J(1).div(e.direction), J(di).mul(u), tt(F(e.direction), J(1e-8))).toVar(), f = e.origin, p = e.direction, m = B(0).toVar();
|
|
2136
|
+
return P(l.greaterThan(B(0)).and(m.lessThan(B(ci))), () => {
|
|
2158
2137
|
m.addAssign(1), l.subAssign(1);
|
|
2159
|
-
let e = c.element(l).toVar(), u = $(t, e, B(0), B(
|
|
2138
|
+
let e = c.element(l).toVar(), u = $(t, e, B(0), B(li));
|
|
2160
2139
|
i.boxTests.addAssign(1), N(u.w.lessThan(0), () => {
|
|
2161
2140
|
N(u.w.greaterThan(z(-1.5)), () => {
|
|
2162
2141
|
let e = B(u.x).toVar(), t = B(u.y).toVar();
|
|
@@ -2165,7 +2144,7 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2165
2144
|
end: t
|
|
2166
2145
|
}, ({ i: t }) => {
|
|
2167
2146
|
i.triTests.addAssign(1);
|
|
2168
|
-
let c = e.add(t).toVar(), l = $(n, c, B(0), B(
|
|
2147
|
+
let c = e.add(t).toVar(), l = $(n, c, B(0), B(ui)).xyz, u = $(n, c, B(1), B(ui)).xyz, d = $(n, c, B(2), B(ui)).xyz, m = hi({
|
|
2169
2148
|
rayOrigin: f,
|
|
2170
2149
|
rayDir: p,
|
|
2171
2150
|
pA: l,
|
|
@@ -2174,12 +2153,9 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2174
2153
|
closestHitDst: i.dst
|
|
2175
2154
|
});
|
|
2176
2155
|
N(m.w.greaterThan(.5), () => {
|
|
2177
|
-
let e = m.x, t = m.y, l = m.z, u = $(n, c, B(3), B(
|
|
2178
|
-
N(_i(g, r), () => {
|
|
2179
|
-
|
|
2180
|
-
N(yi(g, p, m, r), () => {
|
|
2181
|
-
i.didHit.assign(!0), i.dst.assign(e), i.normal.assign(m), i.materialIndex.assign(g), i.meshIndex.assign(B(h.w)), a.assign(c), o.assign(t), s.assign(l);
|
|
2182
|
-
});
|
|
2156
|
+
let e = m.x, t = m.y, l = m.z, u = $(n, c, B(3), B(ui)).xyz, d = $(n, c, B(4), B(ui)).xyz, f = $(n, c, B(5), B(ui)).xyz, h = $(n, c, B(7), B(ui)), g = B(h.z), _ = z(1).sub(t).sub(l), v = U(u.mul(_).add(d.mul(t)).add(f.mul(l))).toVar();
|
|
2157
|
+
N(_i(g, p, v, r), () => {
|
|
2158
|
+
i.didHit.assign(!0), i.dst.assign(e), i.normal.assign(v), i.materialIndex.assign(g), i.meshIndex.assign(B(h.w)), a.assign(c), o.assign(t), s.assign(l);
|
|
2183
2159
|
});
|
|
2184
2160
|
});
|
|
2185
2161
|
}), N(i.didHit.and(i.dst.lessThan(.001)), () => {
|
|
@@ -2187,17 +2163,22 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2187
2163
|
});
|
|
2188
2164
|
}).Else(() => {
|
|
2189
2165
|
let e = B(u.x).toVar();
|
|
2190
|
-
|
|
2166
|
+
if (fi) {
|
|
2167
|
+
let t = B(u.y).toVar(), n = $(fi, B(1), t, B(0)).x;
|
|
2168
|
+
N(n.greaterThan(.5).and(l.lessThan(B(si))), () => {
|
|
2169
|
+
c.element(l).assign(e), l.addAssign(1);
|
|
2170
|
+
});
|
|
2171
|
+
} else N(l.lessThan(B(si)), () => {
|
|
2191
2172
|
c.element(l).assign(e), l.addAssign(1);
|
|
2192
2173
|
});
|
|
2193
2174
|
});
|
|
2194
2175
|
}).Else(() => {
|
|
2195
|
-
let n = $(t, e, B(1), B(
|
|
2176
|
+
let n = $(t, e, B(1), B(li)), r = $(t, e, B(2), B(li)), a = $(t, e, B(3), B(li)), o = B(u.w).toVar(), s = B(n.w).toVar(), p = gi({
|
|
2196
2177
|
rayOrigin: f,
|
|
2197
2178
|
invDir: d,
|
|
2198
2179
|
boxMin: u.xyz,
|
|
2199
2180
|
boxMax: n.xyz
|
|
2200
|
-
}).toVar(), m =
|
|
2181
|
+
}).toVar(), m = gi({
|
|
2201
2182
|
rayOrigin: f,
|
|
2202
2183
|
invDir: d,
|
|
2203
2184
|
boxMin: r.xyz,
|
|
@@ -2205,19 +2186,19 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2205
2186
|
}).toVar();
|
|
2206
2187
|
N(at(p, m).lessThan(i.dst), () => {
|
|
2207
2188
|
let e = p.lessThan(m), t = W(e, o, s).toVar(), n = W(e, s, o).toVar();
|
|
2208
|
-
N(W(e, m, p).toVar().lessThan(i.dst).and(l.lessThan(B(
|
|
2189
|
+
N(W(e, m, p).toVar().lessThan(i.dst).and(l.lessThan(B(si))), () => {
|
|
2209
2190
|
c.element(l).assign(n), l.addAssign(1);
|
|
2210
|
-
}), N(l.lessThan(B(
|
|
2191
|
+
}), N(l.lessThan(B(si)), () => {
|
|
2211
2192
|
c.element(l).assign(t), l.addAssign(1);
|
|
2212
2193
|
});
|
|
2213
2194
|
});
|
|
2214
2195
|
});
|
|
2215
2196
|
}), N(i.didHit, () => {
|
|
2216
2197
|
i.hitPoint.assign(e.origin.add(e.direction.mul(i.dst)));
|
|
2217
|
-
let t = z(1).sub(o).sub(s), r = $(n, a, B(6), B(
|
|
2198
|
+
let t = z(1).sub(o).sub(s), r = $(n, a, B(6), B(ui)), c = $(n, a, B(7), B(ui));
|
|
2218
2199
|
i.uv.assign(r.xy.mul(t).add(r.zw.mul(o)).add(c.xy.mul(s))), i.triangleIndex.assign(a);
|
|
2219
2200
|
}), i;
|
|
2220
|
-
}),
|
|
2201
|
+
}), yi = M(([e, t, n, r, i]) => {
|
|
2221
2202
|
let a = Er({
|
|
2222
2203
|
didHit: !1,
|
|
2223
2204
|
dst: i,
|
|
@@ -2228,63 +2209,66 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2228
2209
|
meshIndex: B(-1),
|
|
2229
2210
|
boxTests: B(0),
|
|
2230
2211
|
triTests: B(0)
|
|
2231
|
-
}).toVar(), o =
|
|
2212
|
+
}).toVar(), o = mi(), s = B(1).toVar();
|
|
2232
2213
|
o.element(B(0)).assign(B(0));
|
|
2233
|
-
let c = H(J(1), ft(e.direction), st(e.direction, J(0))), l = H(J(1).div(e.direction), J(
|
|
2234
|
-
return P(s.greaterThan(B(0)).and(a.didHit.not()).and(u.lessThan(B(
|
|
2214
|
+
let c = H(J(1), ft(e.direction), st(e.direction, J(0))), l = H(J(1).div(e.direction), J(di).mul(c), tt(F(e.direction), J(1e-8))).toVar(), u = B(0).toVar();
|
|
2215
|
+
return P(s.greaterThan(B(0)).and(a.didHit.not()).and(u.lessThan(B(ci))), () => {
|
|
2235
2216
|
u.addAssign(1), s.subAssign(1);
|
|
2236
|
-
let
|
|
2237
|
-
N(
|
|
2238
|
-
N(
|
|
2239
|
-
let t = B(
|
|
2217
|
+
let r = o.element(s).toVar(), i = $(t, r, B(0), B(li));
|
|
2218
|
+
N(i.w.lessThan(0), () => {
|
|
2219
|
+
N(i.w.greaterThan(z(-1.5)), () => {
|
|
2220
|
+
let t = B(i.x).toVar(), r = B(i.y).toVar();
|
|
2240
2221
|
P({
|
|
2241
2222
|
start: B(0),
|
|
2242
|
-
end:
|
|
2243
|
-
}, ({ i }) => {
|
|
2244
|
-
let
|
|
2223
|
+
end: r
|
|
2224
|
+
}, ({ i: r }) => {
|
|
2225
|
+
let i = t.add(r).toVar(), o = $(n, i, B(0), B(ui)).xyz, s = $(n, i, B(1), B(ui)).xyz, c = $(n, i, B(2), B(ui)).xyz, l = hi({
|
|
2245
2226
|
rayOrigin: e.origin,
|
|
2246
2227
|
rayDir: e.direction,
|
|
2247
|
-
pA:
|
|
2248
|
-
pB:
|
|
2249
|
-
pC:
|
|
2228
|
+
pA: o,
|
|
2229
|
+
pB: s,
|
|
2230
|
+
pC: c,
|
|
2250
2231
|
closestHitDst: a.dst
|
|
2251
2232
|
});
|
|
2252
|
-
N(
|
|
2253
|
-
let t = $(n,
|
|
2254
|
-
|
|
2255
|
-
a.didHit.assign(!0), a.dst.assign(u.x), a.materialIndex.assign(i), a.meshIndex.assign(B(t.w)), a.hitPoint.assign(e.origin.add(e.direction.mul(u.x))), a.normal.assign(U(Ye(c.sub(s), l.sub(s)))), Ve();
|
|
2256
|
-
});
|
|
2233
|
+
N(l.w.greaterThan(.5), () => {
|
|
2234
|
+
let t = $(n, i, B(7), B(ui));
|
|
2235
|
+
a.didHit.assign(!0), a.dst.assign(l.x), a.materialIndex.assign(B(t.z)), a.meshIndex.assign(B(t.w)), a.hitPoint.assign(e.origin.add(e.direction.mul(l.x))), a.normal.assign(U(Ye(s.sub(o), c.sub(o)))), Ve();
|
|
2257
2236
|
});
|
|
2258
2237
|
});
|
|
2259
2238
|
}).Else(() => {
|
|
2260
|
-
let e = B(
|
|
2261
|
-
|
|
2239
|
+
let e = B(i.x).toVar();
|
|
2240
|
+
if (fi) {
|
|
2241
|
+
let t = B(i.y).toVar(), n = $(fi, B(1), t, B(0)).x;
|
|
2242
|
+
N(n.greaterThan(.5).and(s.lessThan(B(si))), () => {
|
|
2243
|
+
o.element(s).assign(e), s.addAssign(1);
|
|
2244
|
+
});
|
|
2245
|
+
} else N(s.lessThan(B(si)), () => {
|
|
2262
2246
|
o.element(s).assign(e), s.addAssign(1);
|
|
2263
2247
|
});
|
|
2264
2248
|
});
|
|
2265
2249
|
}).Else(() => {
|
|
2266
|
-
let n = $(t,
|
|
2250
|
+
let n = $(t, r, B(1), B(li)), c = $(t, r, B(2), B(li)), u = $(t, r, B(3), B(li)), d = B(i.w).toVar(), f = B(n.w).toVar(), p = gi({
|
|
2267
2251
|
rayOrigin: e.origin,
|
|
2268
2252
|
invDir: l,
|
|
2269
|
-
boxMin:
|
|
2253
|
+
boxMin: i.xyz,
|
|
2270
2254
|
boxMax: n.xyz
|
|
2271
|
-
}).toVar(), m =
|
|
2255
|
+
}).toVar(), m = gi({
|
|
2272
2256
|
rayOrigin: e.origin,
|
|
2273
2257
|
invDir: l,
|
|
2274
|
-
boxMin:
|
|
2258
|
+
boxMin: c.xyz,
|
|
2275
2259
|
boxMax: u.xyz
|
|
2276
2260
|
}).toVar();
|
|
2277
2261
|
N(at(p, m).lessThan(a.dst), () => {
|
|
2278
2262
|
let e = p.lessThan(m), t = W(e, d, f).toVar(), n = W(e, f, d).toVar();
|
|
2279
|
-
N(W(e, m, p).toVar().lessThan(a.dst).and(s.lessThan(B(
|
|
2263
|
+
N(W(e, m, p).toVar().lessThan(a.dst).and(s.lessThan(B(si))), () => {
|
|
2280
2264
|
o.element(s).assign(n), s.addAssign(1);
|
|
2281
|
-
}), N(s.lessThan(B(
|
|
2265
|
+
}), N(s.lessThan(B(si)), () => {
|
|
2282
2266
|
o.element(s).assign(t), s.addAssign(1);
|
|
2283
2267
|
});
|
|
2284
2268
|
});
|
|
2285
2269
|
});
|
|
2286
2270
|
}), a;
|
|
2287
|
-
}),
|
|
2271
|
+
}), bi = M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
2288
2272
|
let d = J(e.xy, 1), f = r.mul(Y(d, 1)), p = U(it(n[0].xyz, n[1].xyz, n[2].xyz).mul(f.xyz.div(f.w))).toVar(), m = J(n[3]).toVar(), h = m.toVar(), g = p.toVar();
|
|
2289
2273
|
return N(i.and(a.greaterThan(0)).and(o.lessThan(64)).and(s.greaterThan(.001)), () => {
|
|
2290
2274
|
let e = m.add(p.mul(s)).toVar(), r = a.div(o).mul(.001).mul(c).mul(l), i = en(t), d = i.x.mul(u.max(.01)), f = i.y, _ = U(J(n[0])), v = U(J(n[1])), y = _.mul(d).add(v.mul(f)).mul(r);
|
|
@@ -2293,52 +2277,52 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2293
2277
|
origin: h,
|
|
2294
2278
|
direction: g
|
|
2295
2279
|
});
|
|
2296
|
-
}),
|
|
2297
|
-
M(([e, t, n]) => vt(e,
|
|
2280
|
+
}), xi = /* @__PURE__ */ X("\n fn equirectDirectionToUv( direction: vec3f, environmentMatrix: mat4x4f ) -> vec2f {\n let d = normalize( ( environmentMatrix * vec4f( direction, 0.0f ) ).xyz );\n var uv = vec2f( atan2( d.z, d.x ), acos( d.y ) );\n uv = uv / vec2f( 6.28318530717958647692f, 3.14159265358979323846f );\n uv.x = uv.x + 0.5f;\n uv.y = 1.0f - uv.y;\n return uv;\n }\n"), Si = /* @__PURE__ */ X("\n fn equirectUvToDirection( uv: vec2f, environmentMatrix: mat4x4f ) -> vec3f {\n let adjustedUv = vec2f( uv.x - 0.5f, 1.0f - uv.y );\n let theta = adjustedUv.x * 6.28318530717958647692f;\n let phi = adjustedUv.y * 3.14159265358979323846f;\n let sinPhi = sin( phi );\n let localDir = vec3f( sinPhi * cos( theta ), cos( phi ), sinPhi * sin( theta ) );\n return normalize( ( transpose( environmentMatrix ) * vec4f( localDir, 0.0f ) ).xyz );\n }\n");
|
|
2281
|
+
M(([e, t, n]) => vt(e, xi({
|
|
2298
2282
|
direction: t,
|
|
2299
2283
|
environmentMatrix: n
|
|
2300
2284
|
}), 0).rgb);
|
|
2301
|
-
var
|
|
2285
|
+
var Ci = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, environmentMatrix: mat4x4f ) -> f32 {\n let uv = equirectDirectionToUv( direction, environmentMatrix );\n let theta = uv.y * 3.14159265358979323846f;\n let sinTheta = sin( theta );\n if ( sinTheta == 0.0f ) { return 0.0f; }\n return 1.0f / ( 6.28318530717958647692f * 3.14159265358979323846f * sinTheta );\n }\n", [xi]), wi = M(([e, t, n, r, i]) => {
|
|
2302
2286
|
let a = Y(0).toVar();
|
|
2303
2287
|
return N(r.equal(0), () => {
|
|
2304
2288
|
a.assign(Y(0));
|
|
2305
2289
|
}).Else(() => {
|
|
2306
|
-
let o = vt(e,
|
|
2290
|
+
let o = vt(e, xi({
|
|
2307
2291
|
direction: t,
|
|
2308
2292
|
environmentMatrix: n
|
|
2309
|
-
}).toVar(), 0).rgb.toVar(), s = R(o, Gr).toVar().div(r).toVar(), c =
|
|
2293
|
+
}).toVar(), 0).rgb.toVar(), s = R(o, Gr).toVar().div(r).toVar(), c = Ci({
|
|
2310
2294
|
direction: t,
|
|
2311
2295
|
environmentMatrix: n
|
|
2312
2296
|
}).toVar(), l = z(i.x).mul(z(i.y)).mul(s).mul(c).toVar();
|
|
2313
2297
|
a.assign(Y(o, l));
|
|
2314
2298
|
}), a;
|
|
2315
|
-
}),
|
|
2316
|
-
let l = o.y, u = L(s.x.mul(l.sub(1)), 0, l.sub(1)), d = B(Ze(u)), f = at(d.add(1), B(l).sub(1)), p = Qe(u), m = H(t.element(d), t.element(f), p).toVar(), h = o.x, g = o.y, _ = L(s.y.mul(h.sub(1)), 0, h.sub(1)), v = L(m.mul(g.sub(1)), 0, g.sub(1)), y = B(Ze(_)), b = B(Ze(v)), x = at(y.add(1), B(h).sub(1)), S = at(b.add(1), B(g).sub(1)), C = Qe(_), w = Qe(v), T = B(h), E = n.element(b.mul(T).add(y)), D = n.element(b.mul(T).add(x)), O = n.element(S.mul(T).add(y)), k = n.element(S.mul(T).add(x)), A = q(H(H(E, D, C), H(O, k, C), w).toVar(), m).toVar(), ee =
|
|
2299
|
+
}), Ti = M(([e, t, n, r, i, a, o, s, c]) => {
|
|
2300
|
+
let l = o.y, u = L(s.x.mul(l.sub(1)), 0, l.sub(1)), d = B(Ze(u)), f = at(d.add(1), B(l).sub(1)), p = Qe(u), m = H(t.element(d), t.element(f), p).toVar(), h = o.x, g = o.y, _ = L(s.y.mul(h.sub(1)), 0, h.sub(1)), v = L(m.mul(g.sub(1)), 0, g.sub(1)), y = B(Ze(_)), b = B(Ze(v)), x = at(y.add(1), B(h).sub(1)), S = at(b.add(1), B(g).sub(1)), C = Qe(_), w = Qe(v), T = B(h), E = n.element(b.mul(T).add(y)), D = n.element(b.mul(T).add(x)), O = n.element(S.mul(T).add(y)), k = n.element(S.mul(T).add(x)), A = q(H(H(E, D, C), H(O, k, C), w).toVar(), m).toVar(), ee = Si({
|
|
2317
2301
|
uv: A,
|
|
2318
2302
|
environmentMatrix: r
|
|
2319
2303
|
}).toVar(), te = vt(e, A, 0).rgb.mul(i).toVar();
|
|
2320
2304
|
c.assign(te);
|
|
2321
|
-
let ne = R(te.div(i), Gr).toVar().div(a).toVar(), re =
|
|
2305
|
+
let ne = R(te.div(i), Gr).toVar().div(a).toVar(), re = Ci({
|
|
2322
2306
|
direction: ee,
|
|
2323
2307
|
environmentMatrix: r
|
|
2324
2308
|
}).toVar();
|
|
2325
2309
|
return Y(ee, z(o.x).mul(z(o.y)).mul(ne).mul(re).toVar());
|
|
2326
|
-
}),
|
|
2327
|
-
let n =
|
|
2310
|
+
}), Ei = /* @__PURE__ */ X("\n fn sampleEnvironment(\n tex: texture_2d<f32>,\n samp: sampler,\n direction: vec3f,\n environmentMatrix: mat4x4f,\n environmentIntensity: f32,\n enableEnvironmentLight: f32\n ) -> vec4f {\n if ( enableEnvironmentLight < 0.5 ) { return vec4f( 0.0 ); }\n let uv = equirectDirectionToUv( direction, environmentMatrix );\n let texSample = textureSampleLevel( tex, samp, uv, 0.0 );\n return texSample * environmentIntensity;\n }\n", [xi]), Di = /* @__PURE__ */ X("\n fn getTransformedUV( uv: vec2f, transform: mat3x3f ) -> vec2f {\n if ( !isIdentityTransform( transform ) ) {\n return fract( vec2f(\n transform[0][0] * uv.x + transform[1][0] * uv.y + transform[2][0],\n transform[0][1] * uv.x + transform[1][1] * uv.y + transform[2][1]\n ) );\n }\n return uv;\n }\n", [/* @__PURE__ */ X("\n fn isIdentityTransform( transform: mat3x3f ) -> bool {\n return transform[0][0] == 1.0f\n && transform[1][1] == 1.0f\n && transform[0][1] == 0.0f\n && transform[1][0] == 0.0f\n && transform[2][0] == 0.0f\n && transform[2][1] == 0.0f;\n }\n")]), Oi = M(([e]) => e.albedoMapIndex.greaterThanEqual(B(0)).or(e.normalMapIndex.greaterThanEqual(B(0))).or(e.roughnessMapIndex.greaterThanEqual(B(0))).or(e.metalnessMapIndex.greaterThanEqual(B(0))).or(e.emissiveMapIndex.greaterThanEqual(B(0))).or(e.bumpMapIndex.greaterThanEqual(B(0))).or(e.displacementMapIndex.greaterThanEqual(B(0)))), ki = /* @__PURE__ */ X("\n fn hashTransform( t: mat3x3f ) -> f32 {\n return t[0][0] + t[1][1] * 7.0f + t[2][0] * 13.0f + t[2][1] * 17.0f;\n }\n"), Ai = M(([e, t]) => {
|
|
2311
|
+
let n = ki({ t: t.albedoTransform }).toVar(), r = ki({ t: t.normalTransform }).toVar(), i = ki({ t: t.metalnessTransform }).toVar(), a = ki({ t: t.roughnessTransform }).toVar(), o = ki({ t: t.emissiveTransform }).toVar(), s = ki({ t: t.bumpTransform }).toVar(), c = .001, l = F(n.sub(r)).lessThan(c).toVar(), u = F(r.sub(s)).lessThan(c).toVar(), d = F(i.sub(a)).lessThan(c).toVar(), f = F(n.sub(o)).lessThan(c).toVar(), p = l.and(F(n.sub(i)).lessThan(c)).and(F(n.sub(o)).lessThan(c)).and(F(n.sub(s)).lessThan(c)).toVar(), m = q(0).toVar(), h = q(0).toVar(), g = q(0).toVar(), _ = q(0).toVar(), v = q(0).toVar(), y = q(0).toVar(), b = u.or(p).toVar(), x = d.or(p).toVar(), S = f.or(p).toVar();
|
|
2328
2312
|
return N(p, () => {
|
|
2329
|
-
let n =
|
|
2313
|
+
let n = Di({
|
|
2330
2314
|
uv: e,
|
|
2331
2315
|
transform: t.albedoTransform
|
|
2332
2316
|
});
|
|
2333
2317
|
m.assign(n), h.assign(n), g.assign(n), _.assign(n), v.assign(n), y.assign(n);
|
|
2334
2318
|
}).Else(() => {
|
|
2335
|
-
m.assign(
|
|
2319
|
+
m.assign(Di({
|
|
2336
2320
|
uv: e,
|
|
2337
2321
|
transform: t.albedoTransform
|
|
2338
|
-
})), h.assign(l.select(m,
|
|
2322
|
+
})), h.assign(l.select(m, Di({
|
|
2339
2323
|
uv: e,
|
|
2340
2324
|
transform: t.normalTransform
|
|
2341
|
-
}))), v.assign(f.select(m,
|
|
2325
|
+
}))), v.assign(f.select(m, Di({
|
|
2342
2326
|
uv: e,
|
|
2343
2327
|
transform: t.emissiveTransform
|
|
2344
2328
|
}))), N(u, () => {
|
|
@@ -2346,12 +2330,12 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2346
2330
|
}).ElseIf(F(s.sub(n)).lessThan(c), () => {
|
|
2347
2331
|
y.assign(m);
|
|
2348
2332
|
}).Else(() => {
|
|
2349
|
-
y.assign(
|
|
2333
|
+
y.assign(Di({
|
|
2350
2334
|
uv: e,
|
|
2351
2335
|
transform: t.bumpTransform
|
|
2352
2336
|
}));
|
|
2353
2337
|
}), N(d, () => {
|
|
2354
|
-
g.assign(
|
|
2338
|
+
g.assign(Di({
|
|
2355
2339
|
uv: e,
|
|
2356
2340
|
transform: t.metalnessTransform
|
|
2357
2341
|
})), _.assign(g);
|
|
@@ -2361,7 +2345,7 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2361
2345
|
}).ElseIf(F(i.sub(r)).lessThan(c), () => {
|
|
2362
2346
|
g.assign(h);
|
|
2363
2347
|
}).Else(() => {
|
|
2364
|
-
g.assign(
|
|
2348
|
+
g.assign(Di({
|
|
2365
2349
|
uv: e,
|
|
2366
2350
|
transform: t.metalnessTransform
|
|
2367
2351
|
}));
|
|
@@ -2372,7 +2356,7 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2372
2356
|
}).ElseIf(F(a.sub(i)).lessThan(c), () => {
|
|
2373
2357
|
_.assign(g);
|
|
2374
2358
|
}).Else(() => {
|
|
2375
|
-
_.assign(
|
|
2359
|
+
_.assign(Di({
|
|
2376
2360
|
uv: e,
|
|
2377
2361
|
transform: t.roughnessTransform
|
|
2378
2362
|
}));
|
|
@@ -2390,13 +2374,13 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2390
2374
|
metalRoughSameUV: x,
|
|
2391
2375
|
albedoEmissiveSameUV: S
|
|
2392
2376
|
});
|
|
2393
|
-
}),
|
|
2377
|
+
}), ji = M(([e, t, n]) => {
|
|
2394
2378
|
let r = t.color.toVar();
|
|
2395
2379
|
return N(t.albedoMapIndex.greaterThanEqual(B(0)), () => {
|
|
2396
2380
|
let i = vt(e, n.albedoUV).depth(B(t.albedoMapIndex)).toVar();
|
|
2397
2381
|
r.assign(Y(t.color.rgb.mul(i.rgb), t.color.a.mul(i.a)));
|
|
2398
2382
|
}), r;
|
|
2399
|
-
}),
|
|
2383
|
+
}), Mi = M(([e, t, n, r]) => {
|
|
2400
2384
|
let i = n.metalness.toVar(), a = n.roughness.toVar();
|
|
2401
2385
|
return N(n.metalnessMapIndex.greaterThanEqual(B(0)).and(n.metalnessMapIndex.equal(n.roughnessMapIndex)), () => {
|
|
2402
2386
|
let t = vt(e, r.metalnessUV).depth(B(n.metalnessMapIndex));
|
|
@@ -2410,7 +2394,7 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2410
2394
|
a.assign(n.roughness.mul(e.g));
|
|
2411
2395
|
});
|
|
2412
2396
|
}), q(i, a);
|
|
2413
|
-
}),
|
|
2397
|
+
}), Ni = M(([e, t, n, r]) => {
|
|
2414
2398
|
let i = t.toVar();
|
|
2415
2399
|
return N(n.normalMapIndex.greaterThanEqual(B(0)), () => {
|
|
2416
2400
|
let a = vt(e, r.normalUV).depth(B(n.normalMapIndex)).xyz.mul(2).sub(1).toVar();
|
|
@@ -2418,27 +2402,27 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2418
2402
|
let o = U(Ye(F(t.z).lessThan(.999).select(J(0, 0, 1), J(1, 0, 0)), t)), s = Ye(t, o);
|
|
2419
2403
|
i.assign(U(o.mul(a.x).add(s.mul(a.y)).add(t.mul(a.z))));
|
|
2420
2404
|
}), i;
|
|
2421
|
-
}),
|
|
2405
|
+
}), Pi = M(([e, t, n, r]) => {
|
|
2422
2406
|
let i = t.toVar();
|
|
2423
2407
|
return N(n.bumpMapIndex.greaterThanEqual(B(0)), () => {
|
|
2424
2408
|
let a = q(1 / 1024).toVar(), o = vt(e, r.bumpUV).depth(B(n.bumpMapIndex)).r, s = vt(e, q(r.bumpUV.x.add(a.x), r.bumpUV.y)).depth(B(n.bumpMapIndex)).r, c = vt(e, q(r.bumpUV.x, r.bumpUV.y.add(a.y))).depth(B(n.bumpMapIndex)).r, l = q(s.sub(o), c.sub(o)).mul(n.bumpScale), u = U(J(l.x.negate(), l.y.negate(), 1)), d = U(Ye(F(t.z).lessThan(.999).select(J(0, 0, 1), J(1, 0, 0)), t)), f = Ye(t, d), p = d.mul(u.x).add(f.mul(u.y)).add(t.mul(u.z));
|
|
2425
2409
|
i.assign(U(H(t, p, L(n.bumpScale, 0, 1))));
|
|
2426
2410
|
}), i;
|
|
2427
|
-
}),
|
|
2411
|
+
}), Fi = M(([e, t, n, r]) => {
|
|
2428
2412
|
let i = t.emissive.mul(t.emissiveIntensity).toVar();
|
|
2429
2413
|
return N(t.emissiveMapIndex.greaterThanEqual(B(0)), () => {
|
|
2430
2414
|
let n = vt(e, r.emissiveUV).depth(B(t.emissiveMapIndex)).toVar();
|
|
2431
2415
|
i.assign(i.mul(n.rgb));
|
|
2432
2416
|
}), i;
|
|
2433
|
-
}),
|
|
2434
|
-
let l = Y(0).toVar(), u = J(0).toVar(), d = z(0).toVar(), f = z(0).toVar(), p = J(0).toVar(), m =
|
|
2417
|
+
}), Ii = M(([e, t, n, r, i, a, o, s, c]) => {
|
|
2418
|
+
let l = Y(0).toVar(), u = J(0).toVar(), d = z(0).toVar(), f = z(0).toVar(), p = J(0).toVar(), m = Oi(o).toVar();
|
|
2435
2419
|
return l.assign(o.color), u.assign(o.emissive.mul(o.emissiveIntensity)), d.assign(o.metalness), f.assign(o.roughness), p.assign(c), N(m, () => {
|
|
2436
|
-
let m = Nr.wrap(
|
|
2437
|
-
l.assign(
|
|
2438
|
-
let h =
|
|
2420
|
+
let m = Nr.wrap(Ai(s, o)).toVar();
|
|
2421
|
+
l.assign(ji(e, o, m));
|
|
2422
|
+
let h = Mi(r, i, o, m);
|
|
2439
2423
|
d.assign(h.x), f.assign(h.y);
|
|
2440
|
-
let g =
|
|
2441
|
-
p.assign(
|
|
2424
|
+
let g = Ni(t, c, o, m).toVar();
|
|
2425
|
+
p.assign(Pi(n, g, o, m)), u.assign(Fi(a, o, l, m));
|
|
2442
2426
|
}), jr({
|
|
2443
2427
|
albedo: l,
|
|
2444
2428
|
emissive: u,
|
|
@@ -2448,27 +2432,27 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2448
2432
|
hasTextures: m
|
|
2449
2433
|
});
|
|
2450
2434
|
});
|
|
2451
|
-
M(([e, t, n, r, i, a, o, s]) => jr.wrap(
|
|
2452
|
-
var
|
|
2435
|
+
M(([e, t, n, r, i, a, o, s]) => jr.wrap(Ii(e, t, n, r, i, a, o, s, J(0, 1, 0))).albedo), M(([e, t, n, r, i, a, o, s]) => jr.wrap(Ii(e, t, n, r, i, a, o, s, J(0, 1, 0))).emissive), M(([e, t, n, r, i, a, o, s]) => jr.wrap(Ii(e, t, n, r, i, a, o, s, J(0, 1, 0))).metalness), M(([e, t, n, r, i, a, o, s]) => jr.wrap(Ii(e, t, n, r, i, a, o, s, J(0, 1, 0))).roughness), M(([e, t, n, r, i, a, o, s, c]) => jr.wrap(Ii(e, t, n, r, i, a, o, s, c)).normal);
|
|
2436
|
+
var Li = M(([e, t, n, r]) => {
|
|
2453
2437
|
let i = z(0).toVar();
|
|
2454
2438
|
return N(t.greaterThanEqual(B(0)), () => {
|
|
2455
|
-
let a =
|
|
2439
|
+
let a = Di({
|
|
2456
2440
|
uv: n,
|
|
2457
2441
|
transform: r
|
|
2458
2442
|
});
|
|
2459
2443
|
i.assign(vt(e, a).depth(B(t)).r);
|
|
2460
2444
|
}), i;
|
|
2461
|
-
}),
|
|
2445
|
+
}), Ri = 32, zi = 16, Bi = 5, Vi = 1 / 1024, Hi = 8, Ui = Cr({
|
|
2462
2446
|
hitPoint: "vec3",
|
|
2463
2447
|
uv: "vec2",
|
|
2464
2448
|
normal: "vec3",
|
|
2465
2449
|
height: "float"
|
|
2466
|
-
}),
|
|
2467
|
-
let o = t.hitPoint.toVar(), s = t.uv.toVar(), c = t.normal.toVar(), l = z(0).toVar(), u = t.triangleIndex, d = $(n, u, B(0), B(
|
|
2450
|
+
}), Wi = M(([e, t, n, r, i, a]) => {
|
|
2451
|
+
let o = t.hitPoint.toVar(), s = t.uv.toVar(), c = t.normal.toVar(), l = z(0).toVar(), u = t.triangleIndex, d = $(n, u, B(0), B(Hi)).xyz.toVar(), f = $(n, u, B(1), B(Hi)).xyz.toVar(), p = $(n, u, B(2), B(Hi)).xyz.toVar(), m = $(n, u, B(6), B(Hi)).toVar(), h = $(n, u, B(7), B(Hi)).toVar(), g = m.xy.toVar(), _ = m.zw.toVar(), v = h.xy.toVar(), y = f.sub(d).toVar(), b = p.sub(d).toVar(), x = _.sub(g).toVar(), S = v.sub(g).toVar(), C = x.x.mul(S.y).sub(S.x.mul(x.y)).toVar();
|
|
2468
2452
|
return N(F(C).greaterThan(1e-8), () => {
|
|
2469
2453
|
let n = z(1).div(C), u = y.mul(S.y).sub(b.mul(x.y)).mul(n).toVar(), d = b.mul(x.x).sub(y.mul(S.x)).mul(n).toVar(), f = t.normal.toVar(), p = i.displacementScale.div(z(10)), m = e.direction, h = R(m, f).toVar(), g = m.sub(f.mul(h)).toVar(), _ = R(u, u), v = R(u, d), w = R(d, d), T = _.mul(w).sub(v.mul(v)).toVar();
|
|
2470
2454
|
N(F(T).greaterThan(1e-10), () => {
|
|
2471
|
-
let e = z(1).div(T), n = R(g, u), y = R(g, d), b = q(w.mul(n).sub(v.mul(y)).mul(e).toVar(), _.mul(y).sub(v.mul(n)).mul(e).toVar()).toVar(), x = h.toVar(), S = V(F(x), .001).toVar(), C = p.div(S).toVar(), E = B(a.equal(B(0)).select(B(
|
|
2455
|
+
let e = z(1).div(T), n = R(g, u), y = R(g, d), b = q(w.mul(n).sub(v.mul(y)).mul(e).toVar(), _.mul(y).sub(v.mul(n)).mul(e).toVar()).toVar(), x = h.toVar(), S = V(F(x), .001).toVar(), C = p.div(S).toVar(), E = B(a.equal(B(0)).select(B(Ri), B(zi))).toVar(), D = C.negate().toVar(), O = C.toVar().sub(D).div(z(E)).toVar(), k = D.toVar(), A = D.toVar(), ee = B(0).toVar();
|
|
2472
2456
|
P({
|
|
2473
2457
|
start: B(0),
|
|
2474
2458
|
end: E,
|
|
@@ -2476,7 +2460,7 @@ var zi = M(([e, t, n, r]) => {
|
|
|
2476
2460
|
condition: "<"
|
|
2477
2461
|
}, ({ i: e }) => {
|
|
2478
2462
|
N(ee.equal(B(0)), () => {
|
|
2479
|
-
let n = D.add(O.mul(z(e))).toVar(), a = t.uv.add(b.mul(n)).toVar(), o = n.mul(x).toVar(), s =
|
|
2463
|
+
let n = D.add(O.mul(z(e))).toVar(), a = t.uv.add(b.mul(n)).toVar(), o = n.mul(x).toVar(), s = Li(r, i.displacementMapIndex, a, i.displacementTransform).sub(.5).mul(p);
|
|
2480
2464
|
N(o.lessThanEqual(s).and(e.greaterThan(B(0))), () => {
|
|
2481
2465
|
ee.assign(1), A.assign(n);
|
|
2482
2466
|
}).Else(() => {
|
|
@@ -2487,80 +2471,80 @@ var zi = M(([e, t, n, r]) => {
|
|
|
2487
2471
|
let e = k.toVar(), n = A.toVar();
|
|
2488
2472
|
P({
|
|
2489
2473
|
start: B(0),
|
|
2490
|
-
end: B(
|
|
2474
|
+
end: B(Bi),
|
|
2491
2475
|
type: "int",
|
|
2492
2476
|
condition: "<"
|
|
2493
2477
|
}, () => {
|
|
2494
|
-
let a = e.add(n).mul(.5).toVar(), o = t.uv.add(b.mul(a)).toVar(), s = a.mul(x), c =
|
|
2478
|
+
let a = e.add(n).mul(.5).toVar(), o = t.uv.add(b.mul(a)).toVar(), s = a.mul(x), c = Li(r, i.displacementMapIndex, o, i.displacementTransform).sub(.5).mul(p);
|
|
2495
2479
|
N(s.lessThanEqual(c), () => {
|
|
2496
2480
|
n.assign(a);
|
|
2497
2481
|
}).Else(() => {
|
|
2498
2482
|
e.assign(a);
|
|
2499
2483
|
});
|
|
2500
2484
|
});
|
|
2501
|
-
let a = e.add(n).mul(.5).toVar(), h = t.uv.add(b.mul(a)).toVar(), g = t.hitPoint.add(m.mul(a)).toVar(), _ =
|
|
2485
|
+
let a = e.add(n).mul(.5).toVar(), h = t.uv.add(b.mul(a)).toVar(), g = t.hitPoint.add(m.mul(a)).toVar(), _ = Li(r, i.displacementMapIndex, h, i.displacementTransform), v = _.sub(.5).mul(p), y = z(Vi), S = _, C = Li(r, i.displacementMapIndex, h.add(q(y, 0)), i.displacementTransform), w = Li(r, i.displacementMapIndex, h.add(q(0, y)), i.displacementTransform), T = U(u).toVar(), E = U(d).toVar(), D = C.sub(S).mul(p), O = w.sub(S).mul(p), ee = U(f.sub(T.mul(D)).sub(E.mul(O)));
|
|
2502
2486
|
o.assign(g), s.assign(h), c.assign(ee), l.assign(v);
|
|
2503
2487
|
});
|
|
2504
2488
|
});
|
|
2505
|
-
}),
|
|
2489
|
+
}), Ui({
|
|
2506
2490
|
hitPoint: o,
|
|
2507
2491
|
uv: s,
|
|
2508
2492
|
normal: c,
|
|
2509
2493
|
height: l
|
|
2510
2494
|
});
|
|
2511
|
-
}),
|
|
2495
|
+
}), Gi = 1e-6;
|
|
2512
2496
|
M(([e, t, n]) => {
|
|
2513
2497
|
let r = V(J(z(1).sub(n)), e);
|
|
2514
2498
|
return e.add(r.sub(e).mul(ct(z(1).sub(t), 5)));
|
|
2515
2499
|
});
|
|
2516
|
-
var
|
|
2500
|
+
var Ki = M(([e, t]) => {
|
|
2517
2501
|
let n = L(e, 0, 1);
|
|
2518
2502
|
return t.add(z(1).sub(t).mul(ct(z(1).sub(n), 5)));
|
|
2519
|
-
}),
|
|
2503
|
+
}), qi = M(([e, t]) => {
|
|
2520
2504
|
let n = L(e, 0, 1);
|
|
2521
2505
|
return t.add(J(1).sub(t).mul(ct(z(1).sub(n), 5)));
|
|
2522
|
-
}),
|
|
2506
|
+
}), Ji = M(([e]) => {
|
|
2523
2507
|
let t = ht(e);
|
|
2524
|
-
return J(1).add(t).div(V(J(1).sub(t), J(
|
|
2525
|
-
}),
|
|
2526
|
-
let n = e.sub(J(t)), r = V(e.add(J(t)), J(
|
|
2508
|
+
return J(1).add(t).div(V(J(1).sub(t), J(Gi)));
|
|
2509
|
+
}), Yi = M(([e, t]) => {
|
|
2510
|
+
let n = e.sub(J(t)), r = V(e.add(J(t)), J(Gi)), i = n.div(r);
|
|
2527
2511
|
return i.mul(i);
|
|
2528
|
-
}),
|
|
2529
|
-
let n = e.sub(t), r = V(e.add(t),
|
|
2512
|
+
}), Xi = M(([e, t]) => {
|
|
2513
|
+
let n = e.sub(t), r = V(e.add(t), Gi), i = n.div(r);
|
|
2530
2514
|
return i.mul(i);
|
|
2531
|
-
}),
|
|
2515
|
+
}), Zi = (e) => J(Xi(e, z(1))), Qi = M(([e, t]) => {
|
|
2532
2516
|
let n = t.mul(t), r = n.mul(n), i = e.mul(e).mul(r.sub(1)).add(1);
|
|
2533
2517
|
return r.div(V(z(Rr).mul(i).mul(i), Vr));
|
|
2534
|
-
}),
|
|
2518
|
+
}), $i = M(([e, t]) => {
|
|
2535
2519
|
let n = V(t, Hr), r = n.mul(n), i = z(1).div(r), a = e.mul(e).mul(i.mul(i).sub(1)).add(1);
|
|
2536
2520
|
return at(i.mul(i).div(V(z(Rr).mul(a).mul(a), Vr)), 100);
|
|
2537
|
-
}),
|
|
2521
|
+
}), ea = M(([e, t]) => {
|
|
2538
2522
|
let n = t.add(1), r = n.mul(n).div(8);
|
|
2539
2523
|
return e.div(V(e.mul(z(1).sub(r)).add(r), Vr));
|
|
2540
|
-
}),
|
|
2541
|
-
let r =
|
|
2542
|
-
return
|
|
2543
|
-
}),
|
|
2524
|
+
}), ta = M(([e, t, n]) => {
|
|
2525
|
+
let r = ea(e, n);
|
|
2526
|
+
return ea(t, n).mul(r);
|
|
2527
|
+
}), na = M(([e, t, n]) => {
|
|
2544
2528
|
let r = z(1).sub(n), i = n.mul(-.0275).add(.0425), a = n.mul(-.572).add(1.04), o = n.mul(.022).sub(.04), s = at(r.mul(r), Xe(z(-6.4308).mul(t))).mul(r).add(i), c = z(-1.04).mul(s).add(a), l = z(1.04).mul(s).add(o), u = V(c.add(l), .1);
|
|
2545
2529
|
return J(1).add(e.mul(z(1).div(u).sub(1)));
|
|
2546
|
-
}),
|
|
2530
|
+
}), ra = M(([e, t, n]) => {
|
|
2547
2531
|
let r = z(1).sub(n), i = n.mul(-.0275).add(.0425), a = n.mul(-.572).add(1.04), o = n.mul(.022).sub(.04), s = at(r.mul(r), Xe(z(-6.4308).mul(t))).mul(r).add(i), c = z(-1.04).mul(s).add(a), l = z(1.04).mul(s).add(o), u = V(e.mul(c).add(J(l)), J(0)), d = V(c.add(l), .1), f = J(1).add(e.mul(z(1).div(d).sub(1)));
|
|
2548
2532
|
return L(u.mul(f), J(0), J(1));
|
|
2549
|
-
}),
|
|
2550
|
-
let r =
|
|
2533
|
+
}), ia = M(([e, t, n]) => Qi(e, n).mul(e).div(V(z(4).mul(t), Vr))), aa = M(([e, t, n]) => {
|
|
2534
|
+
let r = Qi(e, n), i = ea(t, n);
|
|
2551
2535
|
return r.mul(i).div(V(t.mul(4), Vr));
|
|
2552
|
-
}),
|
|
2536
|
+
}), oa = M(([e, t]) => {
|
|
2553
2537
|
let n = z(Br).mul(e).mul(1e-9), r = J(54856e-17, 44201e-17, 52481e-17), i = J(1681e3, 1795300, 2208400), a = J(43278e5, 93046e5, 66121e5), o = r.mul(ht(z(Br).mul(a))).mul(Je(i.mul(n).add(t))).mul(Xe(qr({ x: n }).negate().mul(a))).toVar();
|
|
2554
2538
|
return o.x.addAssign(z(9747e-17).mul(ht(z(Br).mul(45282e5))).mul(Je(z(2239900).mul(n).add(t.x))).mul(Xe(z(-45282e5).mul(qr({ x: n }))))), Kr.mul(o.div(1.0685e-7));
|
|
2555
|
-
}),
|
|
2539
|
+
}), sa = M(([e, t, n, r, i]) => {
|
|
2556
2540
|
let a = H(e, t, mt(0, .03, r)).toVar(), o = qr({ x: e.div(a) }).mul(z(1).sub(qr({ x: n }))).toVar(), s = z(1).sub(o).toVar(), c = J(0).toVar();
|
|
2557
2541
|
return N(s.lessThan(0), () => {
|
|
2558
2542
|
c.assign(J(1));
|
|
2559
2543
|
}).Else(() => {
|
|
2560
|
-
let t = ht(s).toVar(), o =
|
|
2561
|
-
S.mulAssign(y), x.addAssign(S.mul(z(2).mul(
|
|
2544
|
+
let t = ht(s).toVar(), o = Ki(n, Xi(a, e).toVar()).toVar(), l = z(1).sub(o).toVar(), u = a.lessThan(e).select(z(Rr), z(0)).toVar(), d = z(Rr).sub(u).toVar(), f = Ji(L(i, 0, .9999)).toVar(), p = Yi(f, a).toVar(), m = J(Ki(t, p.x), Ki(t, p.y), Ki(t, p.z)).toVar(), h = J(f.x.lessThan(a).select(z(Rr), z(0)), f.y.lessThan(a).select(z(Rr), z(0)), f.z.lessThan(a).select(z(Rr), z(0))).toVar(), g = z(2).mul(a).mul(r).mul(t).toVar(), _ = J(d).add(h).toVar(), v = L(J(o).mul(m), 1e-5, .9999).toVar(), y = ht(v).toVar(), b = J(l.mul(l)).mul(m).div(J(1).sub(v)).toVar(), x = J(o).add(b).toVar().toVar(), S = b.sub(J(l)).toVar();
|
|
2545
|
+
S.mulAssign(y), x.addAssign(S.mul(z(2).mul(oa(z(1).mul(g), z(1).mul(_))))), S.mulAssign(y), x.addAssign(S.mul(z(2).mul(oa(z(2).mul(g), z(2).mul(_))))), c.assign(V(x, J(0)));
|
|
2562
2546
|
}), c;
|
|
2563
|
-
}),
|
|
2547
|
+
}), ca = M(([e, t, n]) => {
|
|
2564
2548
|
let r = n.invRoughness, i = n.metalFactor, a = z(0).toVar();
|
|
2565
2549
|
N(t.isMetallic, () => {
|
|
2566
2550
|
a.assign(V(r.mul(i), .7));
|
|
@@ -2619,7 +2603,7 @@ M(([e, t]) => {
|
|
|
2619
2603
|
n.assign(L(o, 0, 1));
|
|
2620
2604
|
}), n;
|
|
2621
2605
|
});
|
|
2622
|
-
var
|
|
2606
|
+
var la = M(([e, t, n, r, i, a]) => {
|
|
2623
2607
|
let o = z(1).sub(e.roughness), s = z(.5).add(z(.5).mul(e.metalness)), c = at(z(2).div(e.ior), 1), l = V(e.sheenColor.r, V(e.sheenColor.g, e.sheenColor.b)), u = Pr({
|
|
2624
2608
|
NoV: z(.5),
|
|
2625
2609
|
isPurelyDiffuse: !1,
|
|
@@ -2628,7 +2612,7 @@ var da = M(([e, t, n, r, i, a]) => {
|
|
|
2628
2612
|
alpha: e.roughness.mul(e.roughness),
|
|
2629
2613
|
alpha2: e.roughness.mul(e.roughness).mul(e.roughness).mul(e.roughness),
|
|
2630
2614
|
k: e.roughness.add(1).mul(e.roughness.add(1)).div(8),
|
|
2631
|
-
F0:
|
|
2615
|
+
F0: Zi(e.ior),
|
|
2632
2616
|
diffuseColor: e.color.rgb,
|
|
2633
2617
|
specularColor: e.color.rgb,
|
|
2634
2618
|
tsAlbedo: e.color,
|
|
@@ -2641,7 +2625,7 @@ var da = M(([e, t, n, r, i, a]) => {
|
|
|
2641
2625
|
metalFactor: s,
|
|
2642
2626
|
iorFactor: c,
|
|
2643
2627
|
maxSheenColor: l
|
|
2644
|
-
}), d = Or.wrap(
|
|
2628
|
+
}), d = Or.wrap(ca(e, n, u)), f = d.diffuse.toVar(), p = d.specular.toVar(), m = d.transmission.toVar(), h = d.clearcoat.toVar();
|
|
2645
2629
|
N(t.greaterThan(B(2)), () => {
|
|
2646
2630
|
let e = z(1).div(z(t).sub(1));
|
|
2647
2631
|
p.mulAssign(z(.8).add(e.mul(.2))), h.mulAssign(z(.7).add(e.mul(.3))), f.mulAssign(z(1).add(e.mul(.2)));
|
|
@@ -2665,8 +2649,8 @@ var da = M(([e, t, n, r, i, a]) => {
|
|
|
2665
2649
|
clearcoatImportance: h,
|
|
2666
2650
|
envmapImportance: z(0)
|
|
2667
2651
|
});
|
|
2668
|
-
}),
|
|
2669
|
-
let a = V(R(e, t), .001).toVar(), o = i.isRough.and(i.isMetallic.not()).and(n.transmission.equal(0)).and(n.clearcoat.equal(0)).toVar(), s = i.isMetallic.toVar(), c = i.isTransmissive.or(i.hasClearcoat).or(n.sheen.greaterThan(0)).or(n.iridescence.greaterThan(0)).toVar(), l = r.roughness.mul(r.roughness).toVar(), u = l.mul(l).toVar(), d = r.roughness.add(1), f = d.mul(d).div(8).toVar(), p = H(
|
|
2652
|
+
}), ua = M(([e, t, n, r, i]) => {
|
|
2653
|
+
let a = V(R(e, t), .001).toVar(), o = i.isRough.and(i.isMetallic.not()).and(n.transmission.equal(0)).and(n.clearcoat.equal(0)).toVar(), s = i.isMetallic.toVar(), c = i.isTransmissive.or(i.hasClearcoat).or(n.sheen.greaterThan(0)).or(n.iridescence.greaterThan(0)).toVar(), l = r.roughness.mul(r.roughness).toVar(), u = l.mul(l).toVar(), d = r.roughness.add(1), f = d.mul(d).div(8).toVar(), p = H(Zi(n.ior).mul(n.specularColor), r.albedo.rgb, r.metalness).mul(n.specularIntensity).toVar(), m = r.albedo.rgb.mul(z(1).sub(r.metalness)).toVar(), h = r.albedo.rgb.toVar(), g = z(1).sub(r.roughness).toVar(), _ = z(.5).add(z(.5).mul(r.metalness)).toVar(), v = at(z(2).div(n.ior), 1).toVar(), y = V(n.sheenColor.r, V(n.sheenColor.g, n.sheenColor.b)).toVar();
|
|
2670
2654
|
return Pr({
|
|
2671
2655
|
NoV: a,
|
|
2672
2656
|
isPurelyDiffuse: o,
|
|
@@ -2691,7 +2675,7 @@ var da = M(([e, t, n, r, i, a]) => {
|
|
|
2691
2675
|
});
|
|
2692
2676
|
});
|
|
2693
2677
|
M(([e, t, n]) => {
|
|
2694
|
-
let r = V(R(e, t), .001).toVar(), i = n.roughness.greaterThan(.98).and(n.metalness.lessThan(.02)).and(n.transmission.equal(0)).and(n.clearcoat.equal(0)).toVar(), a = n.metalness.greaterThan(.7).toVar(), o = n.transmission.greaterThan(0).or(n.clearcoat.greaterThan(0)).or(n.sheen.greaterThan(0)).or(n.iridescence.greaterThan(0)).toVar(), s = n.roughness.mul(n.roughness).toVar(), c = s.mul(s).toVar(), l = n.roughness.add(1), u = l.mul(l).div(8).toVar(), d = H(
|
|
2678
|
+
let r = V(R(e, t), .001).toVar(), i = n.roughness.greaterThan(.98).and(n.metalness.lessThan(.02)).and(n.transmission.equal(0)).and(n.clearcoat.equal(0)).toVar(), a = n.metalness.greaterThan(.7).toVar(), o = n.transmission.greaterThan(0).or(n.clearcoat.greaterThan(0)).or(n.sheen.greaterThan(0)).or(n.iridescence.greaterThan(0)).toVar(), s = n.roughness.mul(n.roughness).toVar(), c = s.mul(s).toVar(), l = n.roughness.add(1), u = l.mul(l).div(8).toVar(), d = H(Zi(n.ior).mul(n.specularColor), n.color.rgb, n.metalness).mul(n.specularIntensity).toVar(), f = n.color.rgb.mul(z(1).sub(n.metalness)).toVar(), p = n.color.rgb.toVar(), m = jr({
|
|
2695
2679
|
albedo: n.color,
|
|
2696
2680
|
emissive: n.emissive.mul(n.emissiveIntensity),
|
|
2697
2681
|
metalness: n.metalness,
|
|
@@ -2724,9 +2708,9 @@ M(([e, t, n]) => {
|
|
|
2724
2708
|
});
|
|
2725
2709
|
//#endregion
|
|
2726
2710
|
//#region src/TSL/MaterialSampling.js
|
|
2727
|
-
var
|
|
2711
|
+
var da = /* @__PURE__ */ X("\n fn ImportanceSampleGGX( N: vec3f, roughness: f32, Xi: vec2f ) -> vec3f {\n let alpha = roughness * roughness;\n let phi = 6.28318530717958647692f * Xi.x;\n let cosTheta = sqrt( ( 1.0f - Xi.y ) / ( 1.0f + ( alpha * alpha - 1.0f ) * Xi.y ) );\n let sinTheta = sqrt( max( 0.0f, 1.0f - cosTheta * cosTheta ) );\n let H = vec3f( cos( phi ) * sinTheta, sin( phi ) * sinTheta, cosTheta );\n // TBN construction\n let up = select( vec3f( 1.0f, 0.0f, 0.0f ), vec3f( 0.0f, 0.0f, 1.0f ), abs( N.z ) < 0.999f );\n let tangent = normalize( cross( up, N ) );\n let bitangent = cross( N, tangent );\n return normalize( tangent * H.x + bitangent * H.y + N * H.z );\n }\n"), fa = /* @__PURE__ */ X("\n fn ImportanceSampleCosine( N: vec3f, xi: vec2f ) -> vec3f {\n let T = normalize( cross( N, N.yzx + vec3f( 0.1f, 0.2f, 0.3f ) ) );\n let B = cross( N, T );\n let phi = 6.28318530717958647692f * xi.x;\n let cosTheta = sqrt( 1.0f - xi.y );\n let sinTheta = sqrt( xi.y );\n let localDir = vec3f( sinTheta * cos( phi ), sinTheta * sin( phi ), cosTheta );\n return normalize( T * localDir.x + B * localDir.y + N * localDir.z );\n }\n"), pa = /* @__PURE__ */ X("\n fn cosineWeightedSample( N: vec3f, xi: vec2f ) -> vec3f {\n let T = normalize( cross( N, N.yzx + vec3f( 0.1f, 0.2f, 0.3f ) ) );\n let B = cross( N, T );\n let phi = 6.28318530717958647692f * xi.y;\n let cosTheta = sqrt( 1.0f - xi.x );\n let sinTheta = sqrt( xi.x );\n let localDir = vec3f( sinTheta * cos( phi ), sinTheta * sin( phi ), cosTheta );\n return normalize( T * localDir.x + B * localDir.y + N * localDir.z );\n }\n");
|
|
2728
2712
|
M(([e]) => V(e, Wr).mul(zr));
|
|
2729
|
-
var
|
|
2713
|
+
var ma = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: vec2f ) -> vec3f {\n let alpha = roughness * roughness;\n // Transform view direction to local space\n let Vh = normalize( vec3f( alpha * V.x, alpha * V.y, V.z ) );\n // Construct orthonormal basis around view direction\n let lensq = Vh.x * Vh.x + Vh.y * Vh.y;\n let T1 = select( vec3f( 1.0f, 0.0f, 0.0f ), vec3f( -Vh.y, Vh.x, 0.0f ) / sqrt( lensq ), lensq > 1e-8f );\n let T2 = cross( Vh, T1 );\n // Sample point with polar coordinates (r, phi)\n let r = sqrt( Xi.x );\n let phi = 6.28318530717958647692f * Xi.y;\n let t1 = r * cos( phi );\n let t2tmp = r * sin( phi );\n let s = 0.5f * ( 1.0f + Vh.z );\n let t2 = ( 1.0f - s ) * sqrt( 1.0f - t1 * t1 ) + s * t2tmp;\n // Compute normal\n let Nh = T1 * t1 + T2 * t2 + Vh * sqrt( max( 0.0f, 1.0f - t1 * t1 - t2 * t2 ) );\n // Transform the normal back to the ellipsoid configuration\n return normalize( vec3f( alpha * Nh.x, alpha * Nh.y, max( 0.0f, Nh.z ) ) );\n }\n"), ha = M(([e, t, n]) => {
|
|
2730
2714
|
let r = Mr.wrap(ni(n)), i = z(1).sub(n.roughness), a = z(.5).add(z(.5).mul(n.metalness)), o = at(z(2).div(n.ior), 1), s = V(n.sheenColor.r, V(n.sheenColor.g, n.sheenColor.b)), c = Pr({
|
|
2731
2715
|
NoV: z(.5),
|
|
2732
2716
|
isPurelyDiffuse: !1,
|
|
@@ -2735,7 +2719,7 @@ var ga = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
|
|
|
2735
2719
|
alpha: n.roughness.mul(n.roughness),
|
|
2736
2720
|
alpha2: n.roughness.mul(n.roughness).mul(n.roughness).mul(n.roughness),
|
|
2737
2721
|
k: n.roughness.add(1).mul(n.roughness.add(1)).div(8),
|
|
2738
|
-
F0:
|
|
2722
|
+
F0: Zi(n.ior),
|
|
2739
2723
|
diffuseColor: n.color.rgb,
|
|
2740
2724
|
specularColor: n.color.rgb,
|
|
2741
2725
|
tsAlbedo: n.color,
|
|
@@ -2748,7 +2732,7 @@ var ga = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
|
|
|
2748
2732
|
metalFactor: a,
|
|
2749
2733
|
iorFactor: o,
|
|
2750
2734
|
maxSheenColor: s
|
|
2751
|
-
}), l = BRDFWeights.wrap(
|
|
2735
|
+
}), l = BRDFWeights.wrap(ca(n, r, c)), u = V(R(t, e), 0), d = ct(z(1).sub(u), 5), f = l.diffuse.mul(d), p = l.diffuse.sub(f).toVar(), m = l.specular.add(f).toVar(), h = l.clearcoat.toVar(), g = l.transmission.mul(o).toVar(), _ = l.sheen.toVar(), v = l.iridescence.toVar(), y = V(p.add(m).add(h).add(g).add(_).add(v), 1e-6).toVar(), b = z(1).div(y);
|
|
2752
2736
|
return Lr({
|
|
2753
2737
|
diffuse: p.mul(b),
|
|
2754
2738
|
specular: m.mul(b),
|
|
@@ -2758,15 +2742,15 @@ var ga = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
|
|
|
2758
2742
|
iridescence: v.mul(b),
|
|
2759
2743
|
totalWeight: y
|
|
2760
2744
|
});
|
|
2761
|
-
}),
|
|
2745
|
+
}), ga = M(([e, t, n, r, i, a]) => {
|
|
2762
2746
|
let o = z(0).toVar(), s = z(0).toVar(), c = z(0).toVar(), l = z(0).toVar(), u = z(0).toVar(), d = R(n, e);
|
|
2763
2747
|
N(d.greaterThan(0), () => {
|
|
2764
2748
|
o.assign(d.div(Rr));
|
|
2765
2749
|
});
|
|
2766
2750
|
let f = U(t.add(e)).toVar(), p = V(R(n, f), 0), m = V(R(t, f), 0), h = V(R(n, t), 0);
|
|
2767
2751
|
N(p.greaterThan(0).and(m.greaterThan(0)).and(h.greaterThan(0)), () => {
|
|
2768
|
-
s.assign(
|
|
2769
|
-
c.assign(
|
|
2752
|
+
s.assign(ia(p, m, r.roughness)), N(r.clearcoat.greaterThan(0), () => {
|
|
2753
|
+
c.assign(ia(p, m, r.clearcoatRoughness));
|
|
2770
2754
|
});
|
|
2771
2755
|
}), N(r.transmission.greaterThan(0).and(d.lessThan(0)), () => {
|
|
2772
2756
|
l.assign(F(d).div(Rr));
|
|
@@ -2780,34 +2764,34 @@ var ga = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
|
|
|
2780
2764
|
}), C;
|
|
2781
2765
|
});
|
|
2782
2766
|
M(([e, t, n, r, i, a]) => {
|
|
2783
|
-
let o =
|
|
2767
|
+
let o = ha(e, t, n), s = $t(i), c = o.diffuse, l = c.add(o.specular), u = l.add(o.clearcoat), d = u.add(o.transmission), f = J(0).toVar(), p = z(0).toVar(), m = z(0).toVar();
|
|
2784
2768
|
N(s.lessThan(c), () => {
|
|
2785
|
-
f.assign(
|
|
2769
|
+
f.assign(fa({
|
|
2786
2770
|
N: t,
|
|
2787
2771
|
xi: r
|
|
2788
2772
|
})), p.assign(V(R(t, f), 0).div(Rr)), m.assign(p.mul(o.diffuse));
|
|
2789
2773
|
}).ElseIf(s.lessThan(l), () => {
|
|
2790
|
-
let i =
|
|
2774
|
+
let i = da({
|
|
2791
2775
|
N: t,
|
|
2792
2776
|
roughness: n.roughness,
|
|
2793
2777
|
Xi: r
|
|
2794
2778
|
}).toVar();
|
|
2795
2779
|
f.assign(lt(e.negate(), i)), N(R(t, f).greaterThan(0), () => {
|
|
2796
2780
|
let r = V(R(t, i), 0), a = V(R(e, i), 0);
|
|
2797
|
-
p.assign(
|
|
2781
|
+
p.assign(ia(r, a, n.roughness));
|
|
2798
2782
|
}), m.assign(p.mul(o.specular));
|
|
2799
2783
|
}).ElseIf(s.lessThan(u).and(n.clearcoat.greaterThan(0)), () => {
|
|
2800
|
-
let i =
|
|
2784
|
+
let i = da({
|
|
2801
2785
|
N: t,
|
|
2802
2786
|
roughness: n.clearcoatRoughness,
|
|
2803
2787
|
Xi: r
|
|
2804
2788
|
}).toVar();
|
|
2805
2789
|
f.assign(lt(e.negate(), i)), N(R(t, f).greaterThan(0), () => {
|
|
2806
2790
|
let r = V(R(t, i), 0), a = V(R(e, i), 0);
|
|
2807
|
-
p.assign(
|
|
2791
|
+
p.assign(ia(r, a, n.clearcoatRoughness));
|
|
2808
2792
|
}), m.assign(p.mul(o.clearcoat));
|
|
2809
2793
|
}).ElseIf(s.lessThan(d).and(n.transmission.greaterThan(0)), () => {
|
|
2810
|
-
let i =
|
|
2794
|
+
let i = da({
|
|
2811
2795
|
N: t,
|
|
2812
2796
|
roughness: n.roughness,
|
|
2813
2797
|
Xi: r
|
|
@@ -2815,17 +2799,17 @@ M(([e, t, n, r, i, a]) => {
|
|
|
2815
2799
|
N(R(a, a).greaterThan(.001), () => {
|
|
2816
2800
|
f.assign(U(a));
|
|
2817
2801
|
let r = V(R(t, i), 0), o = V(R(e, i), 0);
|
|
2818
|
-
p.assign(
|
|
2802
|
+
p.assign(ia(r, o, n.roughness));
|
|
2819
2803
|
}).Else(() => {
|
|
2820
2804
|
f.assign(lt(e.negate(), i)), p.assign(.1);
|
|
2821
2805
|
}), m.assign(p.mul(o.transmission));
|
|
2822
2806
|
}).Else(() => {
|
|
2823
|
-
f.assign(
|
|
2807
|
+
f.assign(fa({
|
|
2824
2808
|
N: t,
|
|
2825
2809
|
xi: r
|
|
2826
2810
|
})), p.assign(V(R(t, f), 0).div(Rr)), m.assign(p.mul(o.sheen.add(o.iridescence)));
|
|
2827
2811
|
});
|
|
2828
|
-
let h =
|
|
2812
|
+
let h = ga(f, e, t, n, o, m), g = a(e, f, t, n).toVar();
|
|
2829
2813
|
return g.mulAssign(h), Dr({
|
|
2830
2814
|
direction: f,
|
|
2831
2815
|
value: g,
|
|
@@ -2834,11 +2818,11 @@ M(([e, t, n, r, i, a]) => {
|
|
|
2834
2818
|
});
|
|
2835
2819
|
//#endregion
|
|
2836
2820
|
//#region src/TSL/MaterialTransmission.js
|
|
2837
|
-
var
|
|
2821
|
+
var _a = Cr({
|
|
2838
2822
|
direction: "vec3",
|
|
2839
2823
|
throughput: "vec3",
|
|
2840
2824
|
didReflect: "bool"
|
|
2841
|
-
}),
|
|
2825
|
+
}), va = Cr({
|
|
2842
2826
|
continueRay: "bool",
|
|
2843
2827
|
isTransmissive: "bool",
|
|
2844
2828
|
isAlphaSkip: "bool",
|
|
@@ -2854,11 +2838,11 @@ Cr({
|
|
|
2854
2838
|
attenuationDistance: "float",
|
|
2855
2839
|
dispersion: "float"
|
|
2856
2840
|
});
|
|
2857
|
-
var
|
|
2841
|
+
var ya = Cr({
|
|
2858
2842
|
wavelength: "float",
|
|
2859
2843
|
ior: "float",
|
|
2860
2844
|
colorWeight: "vec3"
|
|
2861
|
-
}),
|
|
2845
|
+
}), ba = Cr({
|
|
2862
2846
|
direction: "vec3",
|
|
2863
2847
|
halfVector: "vec3",
|
|
2864
2848
|
didReflect: "bool",
|
|
@@ -2894,7 +2878,7 @@ Cr({
|
|
|
2894
2878
|
});
|
|
2895
2879
|
}), t;
|
|
2896
2880
|
});
|
|
2897
|
-
var
|
|
2881
|
+
var xa = M(([e, t, n]) => {
|
|
2898
2882
|
let r = H(z(380), z(700), n).toVar(), i = r.div(1e3), a = e, o = t.mul(.03), s = a.add(o.div(i.mul(i))).toVar(), c = J(0).toVar();
|
|
2899
2883
|
return N(r.greaterThanEqual(380).and(r.lessThan(420)), () => {
|
|
2900
2884
|
c.assign(J(.9, 0, 1));
|
|
@@ -2910,17 +2894,17 @@ var Ca = M(([e, t, n]) => {
|
|
|
2910
2894
|
c.assign(J(1, .5, 0));
|
|
2911
2895
|
}), N(r.greaterThanEqual(620).and(r.lessThanEqual(700)), () => {
|
|
2912
2896
|
c.assign(J(1, 0, 0));
|
|
2913
|
-
}), c.assign(ct(c, J(.4))), c.assign(L(c, J(0), J(2))),
|
|
2897
|
+
}), c.assign(ct(c, J(.4))), c.assign(L(c, J(0), J(2))), ya({
|
|
2914
2898
|
wavelength: r,
|
|
2915
2899
|
ior: s,
|
|
2916
2900
|
colorWeight: c
|
|
2917
2901
|
});
|
|
2918
|
-
}),
|
|
2902
|
+
}), Sa = /* @__PURE__ */ X("\n fn calculateBeerLawAbsorption( attenuationColor: vec3f, attenuationDistance: f32, thickness: f32 ) -> vec3f {\n if ( attenuationDistance <= 0.0f ) { return vec3f( 1.0f ); }\n // Convert RGB attenuation color to absorption coefficients\n let absorption = -log( max( attenuationColor, vec3f( 0.001f ) ) ) / attenuationDistance;\n // Apply Beer's law\n return exp( -absorption * thickness );\n }\n"), Ca = M(([e, t, n, r]) => {
|
|
2919
2903
|
let i = W(r, z(1), n.ior).toVar(), a = W(r, n.ior, z(1)).toVar(), o = F(R(t, e)), s = i.mul(i).div(a.mul(a)).mul(z(1).sub(o.mul(o))), c = z(0).toVar();
|
|
2920
2904
|
return N(s.lessThanEqual(1), () => {
|
|
2921
|
-
let e =
|
|
2905
|
+
let e = Ki(o, Xi(a, i)), t = z(1).sub(e).mul(n.transmission).toVar();
|
|
2922
2906
|
N(r.not().and(n.attenuationDistance.greaterThan(0)), () => {
|
|
2923
|
-
let e =
|
|
2907
|
+
let e = Sa({
|
|
2924
2908
|
attenuationColor: n.attenuationColor,
|
|
2925
2909
|
attenuationDistance: n.attenuationDistance,
|
|
2926
2910
|
thickness: n.thickness
|
|
@@ -2928,8 +2912,8 @@ var Ca = M(([e, t, n]) => {
|
|
|
2928
2912
|
t.assign(t.mul(e.x.add(e.y).add(e.z).div(3)));
|
|
2929
2913
|
}), c.assign(L(t, 0, 1));
|
|
2930
2914
|
}), c;
|
|
2931
|
-
}),
|
|
2932
|
-
let c =
|
|
2915
|
+
}), wa = M(([e, t, n, r, i, a, o, s]) => {
|
|
2916
|
+
let c = ba({
|
|
2933
2917
|
direction: J(0),
|
|
2934
2918
|
halfVector: J(0),
|
|
2935
2919
|
didReflect: !1,
|
|
@@ -2937,7 +2921,7 @@ var Ca = M(([e, t, n]) => {
|
|
|
2937
2921
|
}).toVar();
|
|
2938
2922
|
return N(r.lessThanEqual(.05).and(a.greaterThan(0)), () => {
|
|
2939
2923
|
c.halfVector.assign(t), c.didReflect.assign(!1);
|
|
2940
|
-
let r = n, o = W(i, z(1).div(r), r).toVar(), l =
|
|
2924
|
+
let r = n, o = W(i, z(1).div(r), r).toVar(), l = ya.wrap(xa(n, a, $t(s)));
|
|
2941
2925
|
o.assign(W(i, z(1).div(l.ior), l.ior));
|
|
2942
2926
|
let u = ut(e.negate(), t, o).toVar();
|
|
2943
2927
|
N(R(u, u).lessThan(.001), () => {
|
|
@@ -2946,7 +2930,7 @@ var Ca = M(([e, t, n]) => {
|
|
|
2946
2930
|
c.direction.assign(u), c.pdf.assign(1);
|
|
2947
2931
|
});
|
|
2948
2932
|
}).Else(() => {
|
|
2949
|
-
let l = V(Hr, r), u =
|
|
2933
|
+
let l = V(Hr, r), u = da({
|
|
2950
2934
|
N: t,
|
|
2951
2935
|
roughness: l,
|
|
2952
2936
|
Xi: o
|
|
@@ -2954,26 +2938,26 @@ var Ca = M(([e, t, n]) => {
|
|
|
2954
2938
|
c.halfVector.assign(u);
|
|
2955
2939
|
let d = W(i, z(1).div(n), n).toVar();
|
|
2956
2940
|
N(a.greaterThan(0), () => {
|
|
2957
|
-
let e =
|
|
2941
|
+
let e = ya.wrap(xa(n, a, $t(s)));
|
|
2958
2942
|
d.assign(W(i, z(1).div(e.ior), e.ior));
|
|
2959
2943
|
});
|
|
2960
2944
|
let f = L(R(u, e), .001, 1), p = ut(e.negate(), u, d).toVar();
|
|
2961
2945
|
N(R(p, p).lessThan(.001), () => {
|
|
2962
2946
|
c.direction.assign(lt(e.negate(), u)), c.didReflect.assign(!0);
|
|
2963
2947
|
let n = L(R(t, u), .001, 1), r = L(R(e, u), .001, 1);
|
|
2964
|
-
c.pdf.assign(
|
|
2948
|
+
c.pdf.assign(ia(n, r, l));
|
|
2965
2949
|
}).Else(() => {
|
|
2966
2950
|
c.direction.assign(p), c.didReflect.assign(!1);
|
|
2967
|
-
let e = L(R(t, u), .001, 1), n = L(R(u, p), .001, 1), r =
|
|
2951
|
+
let e = L(R(t, u), .001, 1), n = L(R(u, p), .001, 1), r = Qi(e, l), i = f.add(d.mul(n)), a = F(n).div(i.mul(i));
|
|
2968
2952
|
c.pdf.assign(r.mul(e).mul(a));
|
|
2969
2953
|
});
|
|
2970
2954
|
}), c;
|
|
2971
|
-
}),
|
|
2972
|
-
let s =
|
|
2955
|
+
}), Ta = M(([e, t, n, r, i, a, o]) => {
|
|
2956
|
+
let s = _a({
|
|
2973
2957
|
direction: J(0),
|
|
2974
2958
|
throughput: J(1),
|
|
2975
2959
|
didReflect: !1
|
|
2976
|
-
}).toVar(), c = W(r, t, t.negate()).toVar(), l = e.negate().toVar(), u = W(r, a, n.ior).toVar(), d = W(r, n.ior, o).toVar(), f = F(R(c, e)), p = u.mul(u).div(d.mul(d)).mul(z(1).sub(f.mul(f))).greaterThan(1).toVar(), m =
|
|
2960
|
+
}).toVar(), c = W(r, t, t.negate()).toVar(), l = e.negate().toVar(), u = W(r, a, n.ior).toVar(), d = W(r, n.ior, o).toVar(), f = F(R(c, e)), p = u.mul(u).div(d.mul(d)).mul(z(1).sub(f.mul(f))).greaterThan(1).toVar(), m = Xi(d, u), h = W(p, z(1), Ki(f, m)).toVar(), g = z(0).toVar();
|
|
2977
2961
|
N(p, () => {
|
|
2978
2962
|
g.assign(1);
|
|
2979
2963
|
}).Else(() => {
|
|
@@ -2985,14 +2969,14 @@ var Ca = M(([e, t, n]) => {
|
|
|
2985
2969
|
let v = q($t(i).toVar(), $t(i).toVar());
|
|
2986
2970
|
return N(_, () => {
|
|
2987
2971
|
N(n.roughness.greaterThan(.05), () => {
|
|
2988
|
-
let e =
|
|
2972
|
+
let e = ba.wrap(wa(l, c, n.ior, n.roughness, r, z(0), v, i));
|
|
2989
2973
|
s.direction.assign(e.direction);
|
|
2990
2974
|
}).Else(() => {
|
|
2991
2975
|
s.direction.assign(lt(e, c));
|
|
2992
2976
|
}), s.throughput.assign(n.color.xyz.mul(h).div(V(g, .05)));
|
|
2993
2977
|
}).Else(() => {
|
|
2994
2978
|
N(n.roughness.greaterThan(.05).or(n.dispersion.greaterThan(0)), () => {
|
|
2995
|
-
let t =
|
|
2979
|
+
let t = ba.wrap(wa(l, c, n.ior, n.roughness, r, n.dispersion, v, i));
|
|
2996
2980
|
N(t.didReflect, () => {
|
|
2997
2981
|
s.direction.assign(t.direction), s.didReflect.assign(!0), s.throughput.assign(n.color.xyz.div(V(z(1).sub(g), .05)));
|
|
2998
2982
|
}).Else(() => {
|
|
@@ -3030,7 +3014,7 @@ var Ca = M(([e, t, n]) => {
|
|
|
3030
3014
|
s.direction.assign(ut(e, c, u.div(d))), s.throughput.assign(J(1));
|
|
3031
3015
|
}), N(s.didReflect.not(), () => {
|
|
3032
3016
|
s.throughput.mulAssign(n.color.xyz), s.throughput.mulAssign(u.mul(u).div(V(d.mul(d), Vr))), N(r.and(n.attenuationDistance.greaterThan(0)), () => {
|
|
3033
|
-
s.throughput.mulAssign(
|
|
3017
|
+
s.throughput.mulAssign(Sa({
|
|
3034
3018
|
attenuationColor: n.attenuationColor,
|
|
3035
3019
|
attenuationDistance: n.attenuationDistance,
|
|
3036
3020
|
thickness: n.thickness
|
|
@@ -3038,8 +3022,8 @@ var Ca = M(([e, t, n]) => {
|
|
|
3038
3022
|
}), s.throughput.mulAssign(z(1).sub(h).div(V(z(1).sub(g), .05)));
|
|
3039
3023
|
});
|
|
3040
3024
|
}), s;
|
|
3041
|
-
}),
|
|
3042
|
-
let c =
|
|
3025
|
+
}), Ea = M(([e, t, n, r, i, a, o, s]) => {
|
|
3026
|
+
let c = va({
|
|
3043
3027
|
continueRay: !1,
|
|
3044
3028
|
isTransmissive: !1,
|
|
3045
3029
|
isAlphaSkip: !1,
|
|
@@ -3067,17 +3051,17 @@ var Ca = M(([e, t, n]) => {
|
|
|
3067
3051
|
});
|
|
3068
3052
|
}), N(d.not().and(r.transmission.greaterThan(0)).and(a.greaterThan(B(0))), () => {
|
|
3069
3053
|
N(l.lessThan(r.transmission), () => {
|
|
3070
|
-
let t = R(e.direction, n).lessThan(0), i =
|
|
3054
|
+
let t = R(e.direction, n).lessThan(0), i = _a.wrap(Ta(e.direction, n, r, t, u, o, s));
|
|
3071
3055
|
c.direction.assign(i.direction), c.throughput.assign(i.throughput), c.continueRay.assign(!0), c.isTransmissive.assign(!0), c.didReflect.assign(i.didReflect), c.entering.assign(t), c.alpha.assign(z(1).sub(r.transmission));
|
|
3072
3056
|
});
|
|
3073
3057
|
});
|
|
3074
3058
|
}), c;
|
|
3075
|
-
}),
|
|
3059
|
+
}), Da = M(([e, t, n, r]) => {
|
|
3076
3060
|
let i = J(0).toVar();
|
|
3077
3061
|
return N(r.roughness.greaterThan(.98).and(r.metalness.lessThan(.02)).and(r.transmission.equal(0)).and(r.clearcoat.equal(0)).and(r.iridescence.equal(0)), () => {
|
|
3078
3062
|
i.assign(r.color.rgb.mul(z(1).sub(r.metalness)).mul(zr));
|
|
3079
3063
|
}).Else(() => {
|
|
3080
|
-
let a = Ar.wrap(Qr(n, e, t)), o = L(H(
|
|
3064
|
+
let a = Ar.wrap(Qr(n, e, t)), o = L(H(Zi(r.ior).mul(r.specularColor), r.color.rgb, r.metalness).mul(r.specularIntensity), J(0), J(1)).toVar(), s = r.color.rgb.toVar();
|
|
3081
3065
|
N(r.dispersion.greaterThan(0).and(r.transmission.greaterThan(.5)), () => {
|
|
3082
3066
|
let e = L(r.dispersion.mul(.1), 0, .8), t = V(V(s.r, s.g), s.b), n = at(at(s.r, s.g), s.b);
|
|
3083
3067
|
N(t.greaterThan(n), () => {
|
|
@@ -3085,12 +3069,12 @@ var Ca = M(([e, t, n]) => {
|
|
|
3085
3069
|
s.assign(H(s, r, e.mul(.3)));
|
|
3086
3070
|
});
|
|
3087
3071
|
}), N(r.iridescence.greaterThan(0), () => {
|
|
3088
|
-
let e = r.iridescenceThicknessRange.y, t =
|
|
3072
|
+
let e = r.iridescenceThicknessRange.y, t = sa(z(1), r.iridescenceIOR, a.VoH, e, o);
|
|
3089
3073
|
o.assign(H(o, t, r.iridescence));
|
|
3090
3074
|
});
|
|
3091
|
-
let c =
|
|
3075
|
+
let c = Qi(a.NoH, r.roughness), l = ta(a.NoV, a.NoL, r.roughness), u = qi(a.VoH, o).toVar(), d = c.mul(l).mul(u).div(V(z(4).mul(a.NoV).mul(a.NoL), Vr)).mul(na(o, a.NoV, r.roughness)), f = ra(o, a.NoV, r.roughness), p = J(1).sub(f).mul(z(1).sub(r.metalness)).mul(s).mul(zr).add(d).toVar();
|
|
3092
3076
|
N(r.sheen.greaterThan(0), () => {
|
|
3093
|
-
let e =
|
|
3077
|
+
let e = $i(a.NoH, r.sheenRoughness), t = r.sheenColor.mul(r.sheen).mul(e).mul(a.NoL), n = z(1).sub(r.sheenRoughness).mul(.5).add(.25), o = L(r.sheenColor.mul(r.sheen).mul(n), J(0), J(1)), s = J(1).sub(o);
|
|
3094
3078
|
i.assign(p.mul(s).add(t));
|
|
3095
3079
|
}).Else(() => {
|
|
3096
3080
|
i.assign(p);
|
|
@@ -3106,16 +3090,16 @@ M(([e, t, n, r, i]) => {
|
|
|
3106
3090
|
o.assign(s.greaterThan(Vr).select(o.div(ht(s)), J(0, 0, 1)));
|
|
3107
3091
|
let c = V(R(n, t), Vr), l = V(R(n, o), Vr), u = V(R(e, o), Vr);
|
|
3108
3092
|
N(i.NoV.mul(c).lessThan(0).and(r.transmission.greaterThan(0)), () => {
|
|
3109
|
-
a.assign(
|
|
3093
|
+
a.assign(Da(e, t, n, r));
|
|
3110
3094
|
}).Else(() => {
|
|
3111
3095
|
let e = i.F0.toVar();
|
|
3112
3096
|
N(r.iridescence.greaterThan(0), () => {
|
|
3113
|
-
let t = r.iridescenceThicknessRange.y, n =
|
|
3097
|
+
let t = r.iridescenceThicknessRange.y, n = sa(z(1), r.iridescenceIOR, u, t, e);
|
|
3114
3098
|
e.assign(L(H(e, n, r.iridescence), J(0), J(1)));
|
|
3115
3099
|
});
|
|
3116
|
-
let t = l.mul(l).mul(i.alpha2.sub(1)).add(1), n = i.alpha2.div(V(z(Rr).mul(t).mul(t), Vr)), o = c.div(c.mul(z(1).sub(i.k)).add(i.k)), s = i.NoV.div(i.NoV.mul(z(1).sub(i.k)).add(i.k)), d = o.mul(s), f =
|
|
3100
|
+
let t = l.mul(l).mul(i.alpha2.sub(1)).add(1), n = i.alpha2.div(V(z(Rr).mul(t).mul(t), Vr)), o = c.div(c.mul(z(1).sub(i.k)).add(i.k)), s = i.NoV.div(i.NoV.mul(z(1).sub(i.k)).add(i.k)), d = o.mul(s), f = qi(u, e).toVar(), p = V(z(4).mul(i.NoV).mul(c), Vr), m = n.mul(d).mul(f).div(p).mul(na(e, i.NoV, r.roughness)), h = ra(e, i.NoV, r.roughness), g = J(1).sub(h).mul(z(1).sub(r.metalness)).mul(r.color.rgb).mul(zr).add(m).toVar();
|
|
3117
3101
|
N(r.sheen.greaterThan(0), () => {
|
|
3118
|
-
let e =
|
|
3102
|
+
let e = $i(l, r.sheenRoughness), t = r.sheenColor.mul(r.sheen).mul(e).mul(c), n = z(1).sub(r.sheenRoughness).mul(.5).add(.25), i = L(r.sheenColor.mul(r.sheen).mul(n), J(0), J(1)), o = J(1).sub(i);
|
|
3119
3103
|
a.assign(g.mul(o).add(t));
|
|
3120
3104
|
}).Else(() => {
|
|
3121
3105
|
a.assign(g);
|
|
@@ -3123,50 +3107,50 @@ M(([e, t, n, r, i]) => {
|
|
|
3123
3107
|
});
|
|
3124
3108
|
}), a;
|
|
3125
3109
|
}), M(([e, t]) => {
|
|
3126
|
-
let n =
|
|
3110
|
+
let n = Ki(t, z(.04));
|
|
3127
3111
|
return z(1).sub(e.mul(n).mul(z(2).sub(n)));
|
|
3128
3112
|
});
|
|
3129
|
-
var
|
|
3130
|
-
let n = L(H(
|
|
3113
|
+
var Oa = M(([e, t]) => {
|
|
3114
|
+
let n = L(H(Zi(t.ior).mul(t.specularColor), t.color.rgb, t.metalness).mul(t.specularIntensity), J(0), J(1)).toVar(), r = Qi(e.NoH, t.roughness), i = ta(e.NoV, e.NoL, t.roughness), a = qi(e.VoH, n).toVar(), o = r.mul(i).mul(a).div(V(z(4).mul(e.NoV).mul(e.NoL), Vr)).mul(na(n, e.NoV, t.roughness)), s = ra(n, e.NoV, t.roughness), c = J(1).sub(s).mul(z(1).sub(t.metalness)).mul(t.color.rgb).div(Rr).add(o), l = V(t.clearcoatRoughness, Ur), u = Qi(e.NoH, l), d = ta(e.NoV, e.NoL, l), f = Ki(e.VoH, z(.04)), p = u.mul(d).mul(f).div(V(z(4).mul(e.NoV).mul(e.NoL), Vr)), m = z(1).sub(t.clearcoat.mul(f).mul(z(2).sub(f)));
|
|
3131
3115
|
return c.mul(m).add(J(p).mul(t.clearcoat));
|
|
3132
|
-
}),
|
|
3116
|
+
}), ka = Cr({
|
|
3133
3117
|
brdf: "vec3",
|
|
3134
3118
|
L: "vec3",
|
|
3135
3119
|
pdf: "float"
|
|
3136
|
-
}),
|
|
3120
|
+
}), Aa = M(([e, t, n, r, i]) => {
|
|
3137
3121
|
let a = t.normal, o = e.direction.negate(), s = V(n.clearcoatRoughness, Ur), c = V(n.roughness, Ur), l = z(1).sub(c).mul(z(.5).add(z(.5).mul(n.metalness))).toVar(), u = n.clearcoat.mul(z(1).sub(s)).toVar(), d = z(1).sub(l).mul(z(1).sub(n.metalness)).toVar(), f = l.add(u).add(d);
|
|
3138
3122
|
l.divAssign(f), u.divAssign(f), d.divAssign(f);
|
|
3139
3123
|
let p = $t(i), m = J(0).toVar(), h = J(0).toVar();
|
|
3140
3124
|
N(p.lessThan(u), () => {
|
|
3141
|
-
h.assign(
|
|
3125
|
+
h.assign(da({
|
|
3142
3126
|
N: a,
|
|
3143
3127
|
roughness: s,
|
|
3144
3128
|
Xi: r
|
|
3145
3129
|
})), m.assign(lt(o.negate(), h));
|
|
3146
3130
|
}).ElseIf(p.lessThan(u.add(l)), () => {
|
|
3147
|
-
h.assign(
|
|
3131
|
+
h.assign(da({
|
|
3148
3132
|
N: a,
|
|
3149
3133
|
roughness: c,
|
|
3150
3134
|
Xi: r
|
|
3151
3135
|
})), m.assign(lt(o.negate(), h));
|
|
3152
3136
|
}).Else(() => {
|
|
3153
|
-
m.assign(
|
|
3137
|
+
m.assign(fa({
|
|
3154
3138
|
N: a,
|
|
3155
3139
|
xi: r
|
|
3156
3140
|
})), h.assign(U(o.add(m)));
|
|
3157
3141
|
});
|
|
3158
|
-
let g = Ar.wrap(Qr(a, o, m)), _ =
|
|
3159
|
-
return
|
|
3160
|
-
brdf:
|
|
3142
|
+
let g = Ar.wrap(Qr(a, o, m)), _ = Qi(g.NoH, s).mul(g.NoH).div(z(4).mul(g.VoH)).mul(u), v = Qi(g.NoH, c).mul(g.NoH).div(z(4).mul(g.VoH)).mul(l), y = g.NoL.div(Rr).mul(d), b = V(_.add(v).add(y), .001);
|
|
3143
|
+
return ka({
|
|
3144
|
+
brdf: Oa(g, n),
|
|
3161
3145
|
L: m,
|
|
3162
3146
|
pdf: b
|
|
3163
3147
|
});
|
|
3164
|
-
}),
|
|
3148
|
+
}), ja = Cr({
|
|
3165
3149
|
direction: "vec3",
|
|
3166
3150
|
color: "vec3",
|
|
3167
3151
|
intensity: "float",
|
|
3168
3152
|
angle: "float"
|
|
3169
|
-
}),
|
|
3153
|
+
}), Ma = Cr({
|
|
3170
3154
|
position: "vec3",
|
|
3171
3155
|
u: "vec3",
|
|
3172
3156
|
v: "vec3",
|
|
@@ -3174,13 +3158,13 @@ var Aa = M(([e, t]) => {
|
|
|
3174
3158
|
intensity: "float",
|
|
3175
3159
|
normal: "vec3",
|
|
3176
3160
|
area: "float"
|
|
3177
|
-
}),
|
|
3161
|
+
}), Na = Cr({
|
|
3178
3162
|
position: "vec3",
|
|
3179
3163
|
color: "vec3",
|
|
3180
3164
|
intensity: "float",
|
|
3181
3165
|
distance: "float",
|
|
3182
3166
|
decay: "float"
|
|
3183
|
-
}),
|
|
3167
|
+
}), Pa = Cr({
|
|
3184
3168
|
position: "vec3",
|
|
3185
3169
|
direction: "vec3",
|
|
3186
3170
|
color: "vec3",
|
|
@@ -3189,30 +3173,30 @@ var Aa = M(([e, t]) => {
|
|
|
3189
3173
|
penumbra: "float",
|
|
3190
3174
|
distance: "float",
|
|
3191
3175
|
decay: "float"
|
|
3192
|
-
}),
|
|
3176
|
+
}), Fa = Cr({
|
|
3193
3177
|
direction: "vec3",
|
|
3194
3178
|
emission: "vec3",
|
|
3195
3179
|
pdf: "float",
|
|
3196
3180
|
distance: "float",
|
|
3197
3181
|
lightType: "int",
|
|
3198
3182
|
valid: "bool"
|
|
3199
|
-
}),
|
|
3183
|
+
}), Ia = Cr({
|
|
3200
3184
|
direction: "vec3",
|
|
3201
3185
|
throughput: "vec3",
|
|
3202
3186
|
misWeight: "float",
|
|
3203
3187
|
pdf: "float",
|
|
3204
3188
|
combinedPdf: "float"
|
|
3205
|
-
}),
|
|
3189
|
+
}), La = M(([e, t]) => {
|
|
3206
3190
|
let n = t.mul(8);
|
|
3207
|
-
return
|
|
3191
|
+
return ja({
|
|
3208
3192
|
direction: U(J(e.element(n), e.element(n.add(1)), e.element(n.add(2)))),
|
|
3209
3193
|
color: J(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5))),
|
|
3210
3194
|
intensity: e.element(n.add(6)),
|
|
3211
3195
|
angle: e.element(n.add(7))
|
|
3212
3196
|
});
|
|
3213
|
-
}),
|
|
3197
|
+
}), Ra = M(([e, t]) => {
|
|
3214
3198
|
let n = t.mul(13), r = J(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5))).toVar(), i = J(e.element(n.add(6)), e.element(n.add(7)), e.element(n.add(8))).toVar(), a = Ye(r, i);
|
|
3215
|
-
return
|
|
3199
|
+
return Ma({
|
|
3216
3200
|
position: J(e.element(n), e.element(n.add(1)), e.element(n.add(2))),
|
|
3217
3201
|
u: r,
|
|
3218
3202
|
v: i,
|
|
@@ -3221,18 +3205,18 @@ var Aa = M(([e, t]) => {
|
|
|
3221
3205
|
normal: U(a),
|
|
3222
3206
|
area: et(a).mul(4)
|
|
3223
3207
|
});
|
|
3224
|
-
}),
|
|
3208
|
+
}), za = M(([e, t]) => {
|
|
3225
3209
|
let n = t.mul(9);
|
|
3226
|
-
return
|
|
3210
|
+
return Na({
|
|
3227
3211
|
position: J(e.element(n), e.element(n.add(1)), e.element(n.add(2))),
|
|
3228
3212
|
color: J(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5))),
|
|
3229
3213
|
intensity: e.element(n.add(6)),
|
|
3230
3214
|
distance: e.element(n.add(7)),
|
|
3231
3215
|
decay: e.element(n.add(8))
|
|
3232
3216
|
});
|
|
3233
|
-
}),
|
|
3217
|
+
}), Ba = M(([e, t]) => {
|
|
3234
3218
|
let n = t.mul(14);
|
|
3235
|
-
return
|
|
3219
|
+
return Pa({
|
|
3236
3220
|
position: J(e.element(n), e.element(n.add(1)), e.element(n.add(2))),
|
|
3237
3221
|
direction: U(J(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5)))),
|
|
3238
3222
|
color: J(e.element(n.add(6)), e.element(n.add(7)), e.element(n.add(8))),
|
|
@@ -3242,7 +3226,7 @@ var Aa = M(([e, t]) => {
|
|
|
3242
3226
|
distance: e.element(n.add(12)),
|
|
3243
3227
|
decay: e.element(n.add(13))
|
|
3244
3228
|
});
|
|
3245
|
-
}),
|
|
3229
|
+
}), Va = /* @__PURE__ */ X("\n fn isDirectionValid( direction: vec3f, surfaceNormal: vec3f ) -> bool {\n return dot( direction, surfaceNormal ) > 0.0f;\n }\n"), Ha = /* @__PURE__ */ X("\n fn getDistanceAttenuation( lightDistance: f32, cutoffDistance: f32, decayExponent: f32 ) -> f32 {\n var distanceFalloff = 1.0f / max( pow( lightDistance, decayExponent ), 0.01f );\n if ( cutoffDistance > 0.0f ) {\n let ratio = pow( lightDistance / cutoffDistance, 4.0f );\n distanceFalloff *= pow( clamp( 1.0f - ratio, 0.0f, 1.0f ), 2.0f );\n }\n return distanceFalloff;\n }\n"), Ua = /* @__PURE__ */ X("\n fn getSpotAttenuation( coneCosine: f32, penumbraCosine: f32, angleCosine: f32 ) -> f32 {\n return smoothstep( coneCosine, penumbraCosine, angleCosine );\n }\n"), Wa = /* @__PURE__ */ X("\n fn sampleCone( direction: vec3f, halfAngle: f32, xi: vec2f ) -> vec3f {\n let cosHalfAngle = cos( halfAngle );\n let cosTheta = cosHalfAngle + xi.x * ( 1.0f - cosHalfAngle );\n let sinTheta = sqrt( 1.0f - cosTheta * cosTheta );\n let phi = 6.28318530717958647692f * xi.y;\n // Create local coordinate system\n let up = select( vec3f( 1.0f, 0.0f, 0.0f ), vec3f( 0.0f, 0.0f, 1.0f ), abs( direction.z ) < 0.999f );\n let tangent = normalize( cross( up, direction ) );\n let bitangent = cross( direction, tangent );\n // Convert to world space\n let localDir = vec3f( sinTheta * cos( phi ), sinTheta * sin( phi ), cosTheta );\n return normalize( tangent * localDir.x + bitangent * localDir.y + direction * localDir.z );\n }\n"), Ga = M(([e, t, n]) => {
|
|
3246
3230
|
let r = e.normal, i = R(r, n), a = z(-1).toVar();
|
|
3247
3231
|
return N(i.lessThan(-1e-4), () => {
|
|
3248
3232
|
let o = z(1).div(i), s = R(e.position.sub(t), r).mul(o).toVar();
|
|
@@ -3257,13 +3241,13 @@ var Aa = M(([e, t]) => {
|
|
|
3257
3241
|
M(([e, t, n]) => {
|
|
3258
3242
|
let r = z(1).toVar();
|
|
3259
3243
|
return N(e.material.transmission.greaterThan(0), () => {
|
|
3260
|
-
let n = R(t, e.normal).lessThan(0), i =
|
|
3244
|
+
let n = R(t, e.normal).lessThan(0), i = Ca(t, e.normal, e.material, n);
|
|
3261
3245
|
r.assign(z(1).sub(i));
|
|
3262
3246
|
}).ElseIf(e.material.transparent, () => {
|
|
3263
3247
|
r.assign(e.material.opacity);
|
|
3264
3248
|
}), r;
|
|
3265
3249
|
});
|
|
3266
|
-
var
|
|
3250
|
+
var Ka = M(([e, t, n, r, i, a, o, s]) => {
|
|
3267
3251
|
let c = z(1).toVar(), l = e.toVar(), u = z(n).toVar();
|
|
3268
3252
|
return P({
|
|
3269
3253
|
start: B(0),
|
|
@@ -3280,10 +3264,10 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3280
3264
|
N(r.transmission.greaterThan(0), () => {
|
|
3281
3265
|
let e = R(t, n.normal).lessThan(0), i = W(e, n.normal, n.normal.negate());
|
|
3282
3266
|
N(e.not().and(r.attenuationDistance.greaterThan(0)), () => {
|
|
3283
|
-
let e = et(n.hitPoint.sub(l)), t =
|
|
3267
|
+
let e = et(n.hitPoint.sub(l)), t = Sa(r.attenuationColor, r.attenuationDistance, e);
|
|
3284
3268
|
c.mulAssign(t.x.add(t.y).add(t.z).div(3));
|
|
3285
3269
|
});
|
|
3286
|
-
let a =
|
|
3270
|
+
let a = Ki(F(R(t, i)), Xi(r.ior, z(1))), o = z(1).sub(a).mul(r.transmission);
|
|
3287
3271
|
c.mulAssign(o), N(c.lessThan(.005), () => {
|
|
3288
3272
|
c.assign(0), Ve();
|
|
3289
3273
|
}), l.assign(n.hitPoint.add(t.mul(.001))), u.subAssign(n.dst.add(.001));
|
|
@@ -3295,14 +3279,14 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3295
3279
|
c.assign(0), Ve();
|
|
3296
3280
|
});
|
|
3297
3281
|
}), c;
|
|
3298
|
-
}),
|
|
3282
|
+
}), qa = M(([e, t, n]) => {
|
|
3299
3283
|
let r = V(z(1e-4), et(e).mul(1e-6)).toVar().toVar();
|
|
3300
3284
|
return N(n.transmission.greaterThan(0), () => {
|
|
3301
3285
|
r.mulAssign(2);
|
|
3302
3286
|
}), N(n.roughness.lessThan(.1), () => {
|
|
3303
3287
|
r.mulAssign(1.5);
|
|
3304
3288
|
}), t.mul(r);
|
|
3305
|
-
}),
|
|
3289
|
+
}), Ja = M(([e, t, n, r, i]) => {
|
|
3306
3290
|
let a = V(z(0), R(n, e.direction)), o = z(0).toVar();
|
|
3307
3291
|
return N(a.greaterThan(0), () => {
|
|
3308
3292
|
let t = e.intensity.mul(R(e.color, Gr)), n = z(1).toVar();
|
|
@@ -3314,7 +3298,7 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3314
3298
|
let s = z(1).div(z(1).add(z(i).mul(.5)));
|
|
3315
3299
|
o.assign(t.mul(a).mul(n).mul(s));
|
|
3316
3300
|
}), o;
|
|
3317
|
-
}),
|
|
3301
|
+
}), Ya = M(([e, t, n, r]) => {
|
|
3318
3302
|
let i = e.position.sub(t), a = et(i), o = a.mul(a), s = i.div(a), c = V(R(n, s), 0), l = z(0).toVar();
|
|
3319
3303
|
return N(c.greaterThan(0), () => {
|
|
3320
3304
|
let t = V(R(s, e.normal).negate(), 0);
|
|
@@ -3332,7 +3316,7 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3332
3316
|
}), l.assign(i.mul(n).mul(c).mul(t).mul(a));
|
|
3333
3317
|
});
|
|
3334
3318
|
}), l;
|
|
3335
|
-
}),
|
|
3319
|
+
}), Xa = M(([e, t, n, r]) => {
|
|
3336
3320
|
let i = e.position.sub(t), a = R(i, i), o = z(0).toVar();
|
|
3337
3321
|
return N(a.greaterThanEqual(.001), () => {
|
|
3338
3322
|
let t = ht(a), s = i.div(t), c = V(z(0), R(n, s));
|
|
@@ -3349,7 +3333,7 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3349
3333
|
}), o.assign(n.mul(t).mul(c).mul(i));
|
|
3350
3334
|
});
|
|
3351
3335
|
}), o;
|
|
3352
|
-
}),
|
|
3336
|
+
}), Za = M(([e, t, n, r]) => {
|
|
3353
3337
|
let i = e.position.sub(t), a = R(i, i), o = z(0).toVar();
|
|
3354
3338
|
return N(a.greaterThanEqual(.001), () => {
|
|
3355
3339
|
let t = i.div(ht(a)), s = V(z(0), R(n, t));
|
|
@@ -3361,7 +3345,7 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3361
3345
|
});
|
|
3362
3346
|
});
|
|
3363
3347
|
}), o;
|
|
3364
|
-
}),
|
|
3348
|
+
}), Qa = M(([e, t, n, r]) => {
|
|
3365
3349
|
let i = V(z(0), R(t, e.direction)), a = I(!1).toVar();
|
|
3366
3350
|
return N(e.intensity.lessThanEqual(.001).or(i.lessThanEqual(.001)), () => {
|
|
3367
3351
|
a.assign(!0);
|
|
@@ -3377,11 +3361,11 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3377
3361
|
});
|
|
3378
3362
|
M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
3379
3363
|
let d = J(0).toVar();
|
|
3380
|
-
return N(
|
|
3381
|
-
let f =
|
|
3364
|
+
return N(Qa(e, n, i, s).not(), () => {
|
|
3365
|
+
let f = qa(t, n, i), p = t.add(f), m = J(0).toVar(), h = z(1e6).toVar();
|
|
3382
3366
|
N(e.angle.greaterThan(.001), () => {
|
|
3383
3367
|
let t = q($t(c).toVar(), $t(c).toVar()), n = e.angle.mul(.5);
|
|
3384
|
-
m.assign(
|
|
3368
|
+
m.assign(Wa({
|
|
3385
3369
|
direction: e.direction,
|
|
3386
3370
|
halfAngle: n,
|
|
3387
3371
|
xi: t
|
|
@@ -3413,9 +3397,9 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3413
3397
|
});
|
|
3414
3398
|
}), d;
|
|
3415
3399
|
}), M(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
|
|
3416
|
-
let p = J(0).toVar(), m =
|
|
3400
|
+
let p = J(0).toVar(), m = Ya(e, t, n, i);
|
|
3417
3401
|
return N(m.greaterThanEqual(.001), () => {
|
|
3418
|
-
let h =
|
|
3402
|
+
let h = qa(t, n, i), g = t.add(h), _ = i.roughness.greaterThan(.7).and(i.metalness.lessThan(.3)), v = i.roughness.lessThan(.3).or(i.metalness.greaterThan(.7)), y = c.equal(B(0));
|
|
3419
3403
|
N(y.or(_).or(m.greaterThan(.1).and(v.not())), () => {
|
|
3420
3404
|
let m = f(s, c, l), h = e.position.add(e.u.mul(m.x.sub(.5))).add(e.v.mul(m.y.sub(.5))).sub(t), _ = R(h, h), v = ht(_), b = h.div(v), x = V(z(0), R(n, b)), S = V(z(0), R(b, e.normal).negate());
|
|
3421
3405
|
N(x.greaterThan(0).and(S.greaterThan(0)), () => {
|
|
@@ -3430,7 +3414,7 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3430
3414
|
});
|
|
3431
3415
|
}), N(y.or(v).and(o.pdf.greaterThan(0)), () => {
|
|
3432
3416
|
N(R(e.position.sub(g), o.direction).greaterThan(0), () => {
|
|
3433
|
-
let t =
|
|
3417
|
+
let t = Ga(e, g, o.direction);
|
|
3434
3418
|
N(t.greaterThan(0), () => {
|
|
3435
3419
|
let r = u(g, o.direction, t, l);
|
|
3436
3420
|
N(r.greaterThan(0), () => {
|
|
@@ -3452,7 +3436,7 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3452
3436
|
return N(p.lessThanEqual(1e3), () => {
|
|
3453
3437
|
let a = f.div(p), o = R(n, a);
|
|
3454
3438
|
N(o.greaterThan(0), () => {
|
|
3455
|
-
let s = z(1).div(p.mul(p)), f = e.color.mul(e.intensity).mul(s), m =
|
|
3439
|
+
let s = z(1).div(p.mul(p)), f = e.color.mul(e.intensity).mul(s), m = qa(t, n, i), h = l(t.add(m), a, p.sub(.001), c);
|
|
3456
3440
|
N(h.greaterThan(0), () => {
|
|
3457
3441
|
let e = u(r, a, n, i);
|
|
3458
3442
|
d.assign(e.mul(f).mul(o).mul(h));
|
|
@@ -3466,7 +3450,7 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3466
3450
|
N(o.greaterThan(0), () => {
|
|
3467
3451
|
let s = R(a.negate(), e.direction), f = Je(e.angle);
|
|
3468
3452
|
N(s.greaterThanEqual(f), () => {
|
|
3469
|
-
let m = mt(f, f.add(.1), s), h = z(1).div(p.mul(p)), g = e.color.mul(e.intensity).mul(h).mul(m), _ =
|
|
3453
|
+
let m = mt(f, f.add(.1), s), h = z(1).div(p.mul(p)), g = e.color.mul(e.intensity).mul(h).mul(m), _ = qa(t, n, i), v = l(t.add(_), a, p.sub(.001), c);
|
|
3470
3454
|
N(v.greaterThan(0), () => {
|
|
3471
3455
|
let e = u(r, a, n, i);
|
|
3472
3456
|
d.assign(e.mul(g).mul(o).mul(v));
|
|
@@ -3477,8 +3461,8 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3477
3461
|
});
|
|
3478
3462
|
//#endregion
|
|
3479
3463
|
//#region src/TSL/LightsSampling.js
|
|
3480
|
-
var
|
|
3481
|
-
M(() =>
|
|
3464
|
+
var $a = 2 * Rr;
|
|
3465
|
+
M(() => Fa({
|
|
3482
3466
|
valid: I(!1),
|
|
3483
3467
|
direction: J(0, 1, 0),
|
|
3484
3468
|
emission: J(0),
|
|
@@ -3486,7 +3470,7 @@ M(() => La({
|
|
|
3486
3470
|
pdf: z(0),
|
|
3487
3471
|
lightType: B(2)
|
|
3488
3472
|
}));
|
|
3489
|
-
var
|
|
3473
|
+
var eo = M(([e, t, n, r]) => {
|
|
3490
3474
|
let i = I(!1).toVar(), a = J(0, 1, 0).toVar(), o = J(0).toVar(), s = z(0).toVar(), c = z(0).toVar(), l = B(2).toVar();
|
|
3491
3475
|
return N(e.area.greaterThan(0), () => {
|
|
3492
3476
|
let u = e.position.add(e.u.mul(n.x.mul(2).sub(1))).add(e.v.mul(n.y.mul(2).sub(1))).toVar().sub(t).toVar(), d = R(u, u).toVar();
|
|
@@ -3494,7 +3478,7 @@ var no = M(([e, t, n, r]) => {
|
|
|
3494
3478
|
let t = ht(d).toVar(), n = u.div(t).toVar(), f = U(Ye(e.u, e.v)).toVar(), p = R(n.negate(), f).toVar();
|
|
3495
3479
|
l.assign(B(1)), o.assign(e.color.mul(e.intensity)), s.assign(t), a.assign(n), c.assign(d.div(V(e.area.mul(V(p, .001)), 1e-10)).mul(r)), i.assign(p.greaterThan(0));
|
|
3496
3480
|
});
|
|
3497
|
-
}),
|
|
3481
|
+
}), Fa({
|
|
3498
3482
|
valid: i,
|
|
3499
3483
|
direction: a,
|
|
3500
3484
|
emission: o,
|
|
@@ -3506,12 +3490,12 @@ var no = M(([e, t, n, r]) => {
|
|
|
3506
3490
|
M(([e, t, n, r]) => {
|
|
3507
3491
|
let i = I(!1).toVar(), a = J(0, 1, 0).toVar(), o = J(0).toVar(), s = z(0).toVar(), c = z(0).toVar(), l = B(2).toVar();
|
|
3508
3492
|
return N(e.area.greaterThan(0), () => {
|
|
3509
|
-
let u = z(.5).mul(ht(n.x)).toVar(), d = n.y.mul(
|
|
3493
|
+
let u = z(.5).mul(ht(n.x)).toVar(), d = n.y.mul($a).toVar(), f = u.mul(Je(d)).toVar(), p = u.mul(pt(d)).toVar(), m = e.position.add(e.u.mul(f)).add(e.v.mul(p)).toVar().sub(t).toVar(), h = R(m, m).toVar();
|
|
3510
3494
|
N(h.greaterThanEqual(1e-10), () => {
|
|
3511
3495
|
let t = ht(h).toVar(), n = m.div(t).toVar(), u = U(Ye(e.u, e.v)).toVar(), d = R(n.negate(), u).toVar();
|
|
3512
3496
|
l.assign(B(1)), o.assign(e.color.mul(e.intensity)), s.assign(t), a.assign(n), c.assign(h.div(V(e.area.mul(V(d, .001)), 1e-10)).mul(r)), i.assign(d.greaterThan(0));
|
|
3513
3497
|
});
|
|
3514
|
-
}),
|
|
3498
|
+
}), Fa({
|
|
3515
3499
|
valid: i,
|
|
3516
3500
|
direction: a,
|
|
3517
3501
|
emission: o,
|
|
@@ -3520,23 +3504,23 @@ M(([e, t, n, r]) => {
|
|
|
3520
3504
|
lightType: l
|
|
3521
3505
|
});
|
|
3522
3506
|
});
|
|
3523
|
-
var
|
|
3507
|
+
var to = M(([e, t, n, r]) => {
|
|
3524
3508
|
let i = I(!1).toVar(), a = J(0, 1, 0).toVar(), o = J(0).toVar(), s = z(0).toVar(), c = z(0).toVar(), l = B(3).toVar(), u = e.position.sub(t).toVar(), d = et(u).toVar();
|
|
3525
3509
|
return N(d.greaterThanEqual(1e-10), () => {
|
|
3526
3510
|
let t = u.div(d).toVar(), n = R(t.negate(), e.direction).toVar(), l = Je(e.angle).toVar();
|
|
3527
3511
|
a.assign(t), s.assign(d), c.assign(r), i.assign(n.greaterThanEqual(l)), N(i, () => {
|
|
3528
|
-
let t =
|
|
3512
|
+
let t = Ua({
|
|
3529
3513
|
coneCosine: l,
|
|
3530
3514
|
penumbraCosine: Je(e.angle.mul(z(1).sub(e.penumbra))).max(l.add(1e-5)).toVar(),
|
|
3531
3515
|
angleCosine: n
|
|
3532
|
-
}), r =
|
|
3516
|
+
}), r = Ha({
|
|
3533
3517
|
lightDistance: d,
|
|
3534
3518
|
cutoffDistance: e.distance,
|
|
3535
3519
|
decayExponent: e.decay
|
|
3536
3520
|
});
|
|
3537
3521
|
o.assign(e.color.mul(e.intensity).mul(r).mul(t));
|
|
3538
3522
|
});
|
|
3539
|
-
}),
|
|
3523
|
+
}), Fa({
|
|
3540
3524
|
valid: i,
|
|
3541
3525
|
direction: a,
|
|
3542
3526
|
emission: o,
|
|
@@ -3544,16 +3528,16 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3544
3528
|
pdf: c,
|
|
3545
3529
|
lightType: l
|
|
3546
3530
|
});
|
|
3547
|
-
}),
|
|
3531
|
+
}), no = M(([e, t, n]) => {
|
|
3548
3532
|
let r = I(!1).toVar(), i = J(0, 1, 0).toVar(), a = J(0).toVar(), o = z(0).toVar(), s = z(0).toVar(), c = B(2).toVar(), l = e.position.sub(t).toVar(), u = et(l).toVar();
|
|
3549
3533
|
return N(u.greaterThanEqual(1e-10), () => {
|
|
3550
|
-
let t = l.div(u).toVar(), d =
|
|
3534
|
+
let t = l.div(u).toVar(), d = Ha({
|
|
3551
3535
|
lightDistance: u,
|
|
3552
3536
|
cutoffDistance: e.distance,
|
|
3553
3537
|
decayExponent: e.decay
|
|
3554
3538
|
});
|
|
3555
3539
|
c.assign(B(2)), i.assign(t), o.assign(u), a.assign(e.color.mul(e.intensity).mul(d)), s.assign(n), r.assign(I(!0));
|
|
3556
|
-
}),
|
|
3540
|
+
}), Fa({
|
|
3557
3541
|
valid: r,
|
|
3558
3542
|
direction: i,
|
|
3559
3543
|
emission: a,
|
|
@@ -3561,7 +3545,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3561
3545
|
pdf: s,
|
|
3562
3546
|
lightType: c
|
|
3563
3547
|
});
|
|
3564
|
-
}),
|
|
3548
|
+
}), ro = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p]) => {
|
|
3565
3549
|
let m = I(!1).toVar(), h = J(0, 1, 0).toVar(), g = J(0).toVar(), _ = z(0).toVar(), v = z(0).toVar(), y = B(2).toVar(), b = s.add(l).add(d).add(p).toVar();
|
|
3566
3550
|
return N(b.greaterThan(B(0)), () => {
|
|
3567
3551
|
let x = z(0).toVar(), S = B(0).toVar();
|
|
@@ -3573,8 +3557,8 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3573
3557
|
condition: "<"
|
|
3574
3558
|
}, ({ i: r }) => {
|
|
3575
3559
|
N(S.lessThan(B(16)), () => {
|
|
3576
|
-
let a =
|
|
3577
|
-
x.addAssign(
|
|
3560
|
+
let a = ja.wrap(La(o, r));
|
|
3561
|
+
x.addAssign(Ja(a, e, t, n, i)), S.addAssign(1);
|
|
3578
3562
|
});
|
|
3579
3563
|
});
|
|
3580
3564
|
}), N(l.greaterThan(B(0)), () => {
|
|
@@ -3585,7 +3569,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3585
3569
|
condition: "<"
|
|
3586
3570
|
}, ({ i: r }) => {
|
|
3587
3571
|
N(S.lessThan(B(16)), () => {
|
|
3588
|
-
let i =
|
|
3572
|
+
let i = Ma.wrap(Ra(c, r)), a = W(i.intensity.greaterThan(0), Ya(i, e, t, n), z(0));
|
|
3589
3573
|
x.addAssign(a), S.addAssign(1);
|
|
3590
3574
|
});
|
|
3591
3575
|
});
|
|
@@ -3597,8 +3581,8 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3597
3581
|
condition: "<"
|
|
3598
3582
|
}, ({ i: r }) => {
|
|
3599
3583
|
N(S.lessThan(B(16)), () => {
|
|
3600
|
-
let i =
|
|
3601
|
-
x.addAssign(
|
|
3584
|
+
let i = Na.wrap(za(u, r));
|
|
3585
|
+
x.addAssign(Xa(i, e, t, n)), S.addAssign(1);
|
|
3602
3586
|
});
|
|
3603
3587
|
});
|
|
3604
3588
|
}), N(p.greaterThan(B(0)), () => {
|
|
@@ -3609,8 +3593,8 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3609
3593
|
condition: "<"
|
|
3610
3594
|
}, ({ i: r }) => {
|
|
3611
3595
|
N(S.lessThan(B(16)), () => {
|
|
3612
|
-
let i =
|
|
3613
|
-
x.addAssign(
|
|
3596
|
+
let i = Pa.wrap(Ba(f, r));
|
|
3597
|
+
x.addAssign(Za(i, e, t, n)), S.addAssign(1);
|
|
3614
3598
|
});
|
|
3615
3599
|
});
|
|
3616
3600
|
}), N(x.lessThanEqual(0), () => {
|
|
@@ -3619,32 +3603,32 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3619
3603
|
let i = I(!1).toVar(), x = B(0).toVar();
|
|
3620
3604
|
N(s.greaterThan(B(0)), () => {
|
|
3621
3605
|
N(i.not().and(t.greaterThanEqual(x)).and(t.lessThan(x.add(s))), () => {
|
|
3622
|
-
let e =
|
|
3606
|
+
let e = ja.wrap(La(o, t.sub(x)));
|
|
3623
3607
|
N(e.intensity.greaterThan(0), () => {
|
|
3624
3608
|
h.assign(U(e.direction)), g.assign(e.color.mul(e.intensity)), _.assign(1e6), y.assign(B(0)), m.assign(I(!0)), i.assign(I(!0));
|
|
3625
3609
|
});
|
|
3626
3610
|
}), x.addAssign(s);
|
|
3627
3611
|
}), N(l.greaterThan(B(0)), () => {
|
|
3628
3612
|
N(i.not().and(t.greaterThanEqual(x)).and(t.lessThan(x.add(l))), () => {
|
|
3629
|
-
let o =
|
|
3613
|
+
let o = Ma.wrap(Ra(c, t.sub(x)));
|
|
3630
3614
|
N(o.intensity.greaterThan(0), () => {
|
|
3631
|
-
let t = q(r.y, $t(a)).toVar(), s =
|
|
3615
|
+
let t = q(r.y, $t(a)).toVar(), s = Fa.wrap(eo(o, e, t, n));
|
|
3632
3616
|
m.assign(s.valid), h.assign(s.direction), g.assign(s.emission), _.assign(s.distance), v.assign(s.pdf), y.assign(s.lightType), i.assign(I(!0));
|
|
3633
3617
|
});
|
|
3634
3618
|
}), x.addAssign(l);
|
|
3635
3619
|
}), N(d.greaterThan(B(0)), () => {
|
|
3636
3620
|
N(i.not().and(t.greaterThanEqual(x)).and(t.lessThan(x.add(d))), () => {
|
|
3637
|
-
let r =
|
|
3621
|
+
let r = Na.wrap(za(u, t.sub(x)));
|
|
3638
3622
|
N(r.intensity.greaterThan(0), () => {
|
|
3639
|
-
let t =
|
|
3623
|
+
let t = Fa.wrap(no(r, e, n));
|
|
3640
3624
|
m.assign(t.valid), h.assign(t.direction), g.assign(t.emission), _.assign(t.distance), v.assign(t.pdf), y.assign(t.lightType), i.assign(I(!0));
|
|
3641
3625
|
});
|
|
3642
3626
|
}), x.addAssign(d);
|
|
3643
3627
|
}), N(p.greaterThan(B(0)), () => {
|
|
3644
3628
|
N(i.not().and(t.greaterThanEqual(x)).and(t.lessThan(x.add(p))), () => {
|
|
3645
|
-
let o =
|
|
3629
|
+
let o = Pa.wrap(Ba(f, t.sub(x)));
|
|
3646
3630
|
N(o.intensity.greaterThan(0), () => {
|
|
3647
|
-
let t = q(r.y, $t(a)).toVar(), s =
|
|
3631
|
+
let t = q(r.y, $t(a)).toVar(), s = Fa.wrap(to(o, e, t, n));
|
|
3648
3632
|
m.assign(s.valid), h.assign(s.direction), g.assign(s.emission), _.assign(s.distance), v.assign(s.pdf), y.assign(s.lightType), i.assign(I(!0));
|
|
3649
3633
|
});
|
|
3650
3634
|
});
|
|
@@ -3661,7 +3645,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3661
3645
|
condition: "<"
|
|
3662
3646
|
}, ({ i: r }) => {
|
|
3663
3647
|
N(S.lessThan(B(16)).and(w.lessThan(B(0))), () => {
|
|
3664
|
-
let a =
|
|
3648
|
+
let a = Ja(ja.wrap(La(o, r)), e, t, n, i).toVar(), s = C.toVar();
|
|
3665
3649
|
C.addAssign(a), N(b.greaterThan(s).and(b.lessThanEqual(C)), () => {
|
|
3666
3650
|
w.assign(0), T.assign(r), E.assign(a);
|
|
3667
3651
|
});
|
|
@@ -3675,7 +3659,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3675
3659
|
condition: "<"
|
|
3676
3660
|
}, ({ i: r }) => {
|
|
3677
3661
|
N(S.lessThan(B(16)).and(w.lessThan(B(0))), () => {
|
|
3678
|
-
let i =
|
|
3662
|
+
let i = Ma.wrap(Ra(c, r)), a = W(i.intensity.greaterThan(0), Ya(i, e, t, n), z(0)).toVar(), o = C.toVar();
|
|
3679
3663
|
C.addAssign(a), N(b.greaterThan(o).and(b.lessThanEqual(C)), () => {
|
|
3680
3664
|
w.assign(1), T.assign(r), E.assign(a);
|
|
3681
3665
|
});
|
|
@@ -3689,7 +3673,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3689
3673
|
condition: "<"
|
|
3690
3674
|
}, ({ i: r }) => {
|
|
3691
3675
|
N(S.lessThan(B(16)).and(w.lessThan(B(0))), () => {
|
|
3692
|
-
let i =
|
|
3676
|
+
let i = Xa(Na.wrap(za(u, r)), e, t, n).toVar(), a = C.toVar();
|
|
3693
3677
|
C.addAssign(i), N(b.greaterThan(a).and(b.lessThanEqual(C)), () => {
|
|
3694
3678
|
w.assign(2), T.assign(r), E.assign(i);
|
|
3695
3679
|
});
|
|
@@ -3703,7 +3687,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3703
3687
|
condition: "<"
|
|
3704
3688
|
}, ({ i: r }) => {
|
|
3705
3689
|
N(S.lessThan(B(16)).and(w.lessThan(B(0))), () => {
|
|
3706
|
-
let i =
|
|
3690
|
+
let i = Za(Pa.wrap(Ba(f, r)), e, t, n).toVar(), a = C.toVar();
|
|
3707
3691
|
C.addAssign(i), N(b.greaterThan(a).and(b.lessThanEqual(C)), () => {
|
|
3708
3692
|
w.assign(3), T.assign(r), E.assign(i);
|
|
3709
3693
|
});
|
|
@@ -3712,25 +3696,25 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3712
3696
|
});
|
|
3713
3697
|
let D = E.div(V(x, 1e-10)).toVar();
|
|
3714
3698
|
N(w.equal(B(0)).and(T.greaterThanEqual(B(0))), () => {
|
|
3715
|
-
let e =
|
|
3699
|
+
let e = ja.wrap(La(o, T)), t = U(e.direction).toVar(), n = z(1).toVar();
|
|
3716
3700
|
N(e.angle.greaterThan(0), () => {
|
|
3717
|
-
let i = Je(e.angle.mul(.5)).toVar(), o = H(i, z(1), r.y).toVar(), s = ht(V(z(0), z(1).sub(o.mul(o)))).toVar(), c = z(
|
|
3701
|
+
let i = Je(e.angle.mul(.5)).toVar(), o = H(i, z(1), r.y).toVar(), s = ht(V(z(0), z(1).sub(o.mul(o)))).toVar(), c = z($a).mul($t(a)).toVar(), l = U(e.direction).toVar(), u = U(Ye(W(F(l.x).greaterThan(.9), J(0, 1, 0), J(1, 0, 0)), l)).toVar(), d = Ye(l, u).toVar();
|
|
3718
3702
|
t.assign(U(l.mul(o).add(u.mul(Je(c)).add(d.mul(pt(c))).mul(s))));
|
|
3719
|
-
let f = z(
|
|
3703
|
+
let f = z($a).mul(V(z(1).sub(i), 1e-10)).toVar();
|
|
3720
3704
|
n.assign(z(1).div(f));
|
|
3721
3705
|
}), h.assign(t), g.assign(e.color.mul(e.intensity)), _.assign(1e6), v.assign(n.mul(D)), y.assign(B(0)), m.assign(I(!0));
|
|
3722
3706
|
}), N(w.equal(B(1)).and(T.greaterThanEqual(B(0))), () => {
|
|
3723
|
-
let t =
|
|
3707
|
+
let t = Ma.wrap(Ra(c, T)), n = q(r.y, $t(a)).toVar(), i = Fa.wrap(eo(t, e, n, D));
|
|
3724
3708
|
m.assign(i.valid), h.assign(i.direction), g.assign(i.emission), _.assign(i.distance), v.assign(i.pdf), y.assign(i.lightType);
|
|
3725
3709
|
}), N(w.equal(B(2)).and(T.greaterThanEqual(B(0))), () => {
|
|
3726
|
-
let t =
|
|
3710
|
+
let t = Na.wrap(za(u, T)), n = Fa.wrap(no(t, e, D));
|
|
3727
3711
|
m.assign(n.valid), h.assign(n.direction), g.assign(n.emission), _.assign(n.distance), v.assign(n.pdf), y.assign(n.lightType);
|
|
3728
3712
|
}), N(w.equal(B(3)).and(T.greaterThanEqual(B(0))), () => {
|
|
3729
|
-
let t =
|
|
3713
|
+
let t = Pa.wrap(Ba(f, T)), n = q(r.y, $t(a)).toVar(), i = Fa.wrap(to(t, e, n, D));
|
|
3730
3714
|
m.assign(i.valid), h.assign(i.direction), g.assign(i.emission), _.assign(i.distance), v.assign(i.pdf), y.assign(i.lightType);
|
|
3731
3715
|
});
|
|
3732
3716
|
});
|
|
3733
|
-
}),
|
|
3717
|
+
}), Fa({
|
|
3734
3718
|
valid: m,
|
|
3735
3719
|
direction: h,
|
|
3736
3720
|
emission: g,
|
|
@@ -3738,7 +3722,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3738
3722
|
pdf: v,
|
|
3739
3723
|
lightType: y
|
|
3740
3724
|
});
|
|
3741
|
-
}),
|
|
3725
|
+
}), io = M(([e, t, n, r]) => {
|
|
3742
3726
|
let i = V(z(0), R(n, e)).toVar(), a = V(z(0), R(n, t)).toVar(), o = U(e.add(t)).toVar(), s = V(z(0), R(n, o)).toVar();
|
|
3743
3727
|
V(z(0), R(e, o)).toVar();
|
|
3744
3728
|
let c = z(1).sub(r.metalness).mul(z(1).sub(r.transmission)).toVar(), l = z(1).sub(c.mul(z(1).sub(r.metalness))).toVar(), u = c.add(l).toVar(), d = z(0).toVar();
|
|
@@ -3748,7 +3732,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3748
3732
|
d.addAssign(c.mul(a).mul(zr));
|
|
3749
3733
|
}), N(l.greaterThan(0).and(a.greaterThan(0)), () => {
|
|
3750
3734
|
let e = V(r.roughness, .02).toVar();
|
|
3751
|
-
d.addAssign(l.mul(
|
|
3735
|
+
d.addAssign(l.mul(aa(s, i, e)));
|
|
3752
3736
|
});
|
|
3753
3737
|
}), V(d, 1e-8);
|
|
3754
3738
|
});
|
|
@@ -3759,13 +3743,13 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3759
3743
|
N(h.greaterThan(0), () => {
|
|
3760
3744
|
let f = R(r, o).toVar();
|
|
3761
3745
|
N(f.greaterThan(0), () => {
|
|
3762
|
-
N(
|
|
3746
|
+
N(Va({
|
|
3763
3747
|
direction: o,
|
|
3764
3748
|
surfaceNormal: r
|
|
3765
3749
|
}), () => {
|
|
3766
|
-
let p =
|
|
3750
|
+
let p = Ka(a, o, n.sub(.001), s, yi, c, l, u);
|
|
3767
3751
|
N(p.greaterThan(0), () => {
|
|
3768
|
-
let n =
|
|
3752
|
+
let n = Da(t, o, r, i), a = m.div(V(e.area.mul(h), Vr)).toVar(), s = io(t, o, r, i).toVar(), c = W(s.greaterThan(0), Xr({
|
|
3769
3753
|
pdf1: a,
|
|
3770
3754
|
pdf2: s
|
|
3771
3755
|
}), z(1)).toVar(), l = e.color.mul(e.intensity).toVar();
|
|
@@ -3776,7 +3760,7 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3776
3760
|
});
|
|
3777
3761
|
}), d;
|
|
3778
3762
|
});
|
|
3779
|
-
var
|
|
3763
|
+
var ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E, D, O]) => {
|
|
3780
3764
|
let k = J(0).toVar(), A = e.add(t.mul(.001)).toVar();
|
|
3781
3765
|
return N(n.emissiveIntensity.lessThanEqual(10), () => {
|
|
3782
3766
|
let s = J(1).toVar(), ee = Ir.wrap(ri(n.roughness, n.metalness, n.transmission, c, s)), te = ee.useBRDFSampling.toVar(), ne = ee.useLightSampling.toVar(), re = ee.brdfWeight.toVar(), ie = ee.lightWeight.toVar(), ae = d.add(p).add(h).add(_).toVar(), oe = z(.001).mul(z(1).add(z(c).mul(.5))).toVar(), se = ae.greaterThan(B(0)).toVar(), ce = z(0).toVar();
|
|
@@ -3795,16 +3779,16 @@ var so = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
|
|
|
3795
3779
|
}).ElseIf(se, () => {
|
|
3796
3780
|
j.assign(I(!0));
|
|
3797
3781
|
}), N(j, () => {
|
|
3798
|
-
let e = q(ue, $t(l)).toVar(), i =
|
|
3782
|
+
let e = q(ue, $t(l)).toVar(), i = Fa.wrap(ro(A, t, n, e, c, l, u, d, f, p, m, h, g, _));
|
|
3799
3783
|
N(i.valid.and(i.pdf.greaterThan(0)), () => {
|
|
3800
3784
|
let e = V(z(0), R(t, i.direction)).toVar(), a = i.emission.x.add(i.emission.y).add(i.emission.z).toVar();
|
|
3801
|
-
N(e.greaterThan(0).and(a.mul(e).greaterThan(oe)).and(
|
|
3785
|
+
N(e.greaterThan(0).and(a.mul(e).greaterThan(oe)).and(Va({
|
|
3802
3786
|
direction: i.direction,
|
|
3803
3787
|
surfaceNormal: t
|
|
3804
3788
|
})), () => {
|
|
3805
|
-
let a = at(i.distance.sub(.001), z(1e3)).toVar(), o =
|
|
3789
|
+
let a = at(i.distance.sub(.001), z(1e3)).toVar(), o = Ka(A, i.direction, a, l, yi, v, y, b);
|
|
3806
3790
|
N(o.greaterThan(0), () => {
|
|
3807
|
-
let a =
|
|
3791
|
+
let a = Da(r, i.direction, t, n), s = io(r, i.direction, t, n).toVar(), c = z(1).toVar();
|
|
3808
3792
|
N(s.greaterThan(0).and(te), () => {
|
|
3809
3793
|
let e = i.pdf.mul(ie).toVar(), t = s.mul(re).toVar();
|
|
3810
3794
|
N(i.lightType.equal(B(1)), () => {
|
|
@@ -3822,7 +3806,7 @@ var so = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
|
|
|
3822
3806
|
}), N(fe, () => {
|
|
3823
3807
|
N(a.greaterThan(0).and(te), () => {
|
|
3824
3808
|
let r = V(z(0), R(t, i)).toVar();
|
|
3825
|
-
N(r.greaterThan(0).and(
|
|
3809
|
+
N(r.greaterThan(0).and(Va({
|
|
3826
3810
|
direction: i,
|
|
3827
3811
|
surfaceNormal: t
|
|
3828
3812
|
})), () => {
|
|
@@ -3834,11 +3818,11 @@ var so = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
|
|
|
3834
3818
|
type: "int",
|
|
3835
3819
|
condition: "<"
|
|
3836
3820
|
}, ({ i: r }) => {
|
|
3837
|
-
let a =
|
|
3821
|
+
let a = Ma.wrap(Ra(f, r));
|
|
3838
3822
|
N(a.intensity.greaterThan(0), () => {
|
|
3839
|
-
let o =
|
|
3823
|
+
let o = Ya(a, e, t, n).toVar();
|
|
3840
3824
|
N(o.greaterThanEqual(oe), () => {
|
|
3841
|
-
N(
|
|
3825
|
+
N(Ga(a, A, i).toVar().greaterThan(0), () => {
|
|
3842
3826
|
N(o.greaterThan(c), () => {
|
|
3843
3827
|
c.assign(o), u.assign(r);
|
|
3844
3828
|
}), s.assign(I(!0));
|
|
@@ -3846,9 +3830,9 @@ var so = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
|
|
|
3846
3830
|
});
|
|
3847
3831
|
});
|
|
3848
3832
|
}), N(s.and(u.greaterThanEqual(B(0))), () => {
|
|
3849
|
-
let e =
|
|
3833
|
+
let e = Ma.wrap(Ra(f, u)), t = Ga(e, A, i).toVar();
|
|
3850
3834
|
N(t.greaterThan(0), () => {
|
|
3851
|
-
let n =
|
|
3835
|
+
let n = Ka(A, i, at(t.sub(.001), z(1e3)).toVar(), l, yi, v, y, b);
|
|
3852
3836
|
N(n.greaterThan(0), () => {
|
|
3853
3837
|
let s = V(z(0), R(i, e.normal).negate()).toVar();
|
|
3854
3838
|
N(s.greaterThan(0), () => {
|
|
@@ -3867,16 +3851,16 @@ var so = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
|
|
|
3867
3851
|
});
|
|
3868
3852
|
});
|
|
3869
3853
|
}), N(O, () => {
|
|
3870
|
-
let e = q($t(l).toVar(), $t(l).toVar()).toVar(), i = J(0).toVar(), a =
|
|
3854
|
+
let e = q($t(l).toVar(), $t(l).toVar()).toVar(), i = J(0).toVar(), a = Ti(x, w, T, C, S, E, D, e, i).toVar(), o = a.xyz.toVar(), s = a.w.toVar();
|
|
3871
3855
|
N(s.greaterThan(0), () => {
|
|
3872
3856
|
let e = V(z(0), R(t, o)).toVar();
|
|
3873
|
-
N(e.greaterThan(0).and(
|
|
3857
|
+
N(e.greaterThan(0).and(Va({
|
|
3874
3858
|
direction: o,
|
|
3875
3859
|
surfaceNormal: t
|
|
3876
3860
|
})), () => {
|
|
3877
|
-
let a =
|
|
3861
|
+
let a = Ka(A, o, z(1e3), l, yi, v, y, b);
|
|
3878
3862
|
N(a.greaterThan(0), () => {
|
|
3879
|
-
let c =
|
|
3863
|
+
let c = Da(r, o, t, n), l = io(r, o, t, n).toVar(), u = W(l.greaterThan(0), Xr({
|
|
3880
3864
|
pdf1: s,
|
|
3881
3865
|
pdf2: l
|
|
3882
3866
|
}), z(1)).toVar(), d = i.mul(c).mul(e).mul(a).mul(u).div(V(s, 1e-10));
|
|
@@ -3886,17 +3870,17 @@ var so = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
|
|
|
3886
3870
|
});
|
|
3887
3871
|
});
|
|
3888
3872
|
}), k;
|
|
3889
|
-
}),
|
|
3873
|
+
}), oo = M(([e, t, n, r, i, a]) => {
|
|
3890
3874
|
let o = W(a, r, z(1).div(r)).toVar(), s = e.add(t.mul(o)).toVar(), c = R(s, s).toVar(), l = W(c.greaterThan(Vr), s.div(ht(c)), n).toVar();
|
|
3891
3875
|
N(R(l, n).lessThan(0), () => {
|
|
3892
3876
|
l.assign(l.negate());
|
|
3893
3877
|
});
|
|
3894
|
-
let u = F(R(e, l)).toVar(), d = F(R(t, l)).toVar(), f = F(R(n, l)).toVar(), p =
|
|
3878
|
+
let u = F(R(e, l)).toVar(), d = F(R(t, l)).toVar(), f = F(R(n, l)).toVar(), p = Qi(f, i).toVar(), m = u.add(d.mul(o)).toVar(), h = m.mul(m).toVar(), g = d.mul(o).mul(o).div(V(h, Vr)).toVar();
|
|
3895
3879
|
return p.mul(f).mul(g);
|
|
3896
|
-
}),
|
|
3880
|
+
}), so = M(([e, t, n, r]) => {
|
|
3897
3881
|
let i = e.add(t).toVar(), a = R(i, i).toVar();
|
|
3898
|
-
return
|
|
3899
|
-
}),
|
|
3882
|
+
return aa(V(R(n, W(a.greaterThan(Vr), i.div(ht(a)), n).toVar()), 0).toVar(), V(R(n, e), 0).toVar(), r);
|
|
3883
|
+
}), co = M(([e, t, n, r, i]) => {
|
|
3900
3884
|
let a = e.specularImportance.toVar(), o = a.greaterThan(.001).toVar(), s = e.diffuseImportance.toVar(), c = s.greaterThan(.001).toVar(), l = e.transmissionImportance.toVar(), u = l.greaterThan(.001).toVar(), d = e.clearcoatImportance.toVar(), f = d.greaterThan(.001).toVar(), p = a.add(s).add(l).add(d).toVar();
|
|
3901
3885
|
return N(p.lessThan(.001), () => {
|
|
3902
3886
|
a.assign(0), s.assign(1), l.assign(0), d.assign(0), p.assign(1), o.assign(I(!1)), c.assign(I(!0)), u.assign(I(!1)), f.assign(I(!1));
|
|
@@ -3916,7 +3900,7 @@ var so = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
|
|
|
3916
3900
|
useTransmission: u,
|
|
3917
3901
|
useClearcoat: f
|
|
3918
3902
|
});
|
|
3919
|
-
}),
|
|
3903
|
+
}), lo = M(([e, t]) => {
|
|
3920
3904
|
let n = B(2).toVar(), r = z(1).toVar(), i = z(0).toVar(), a = I(!1).toVar();
|
|
3921
3905
|
return N(e.useSpecular.and(a.not()), () => {
|
|
3922
3906
|
i.addAssign(e.specularWeight), N(t.lessThan(i), () => {
|
|
@@ -3935,49 +3919,49 @@ var so = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
|
|
|
3935
3919
|
}), N(a.not(), () => {
|
|
3936
3920
|
n.assign(2), r.assign(W(e.useDiffuse, e.diffuseWeight, z(1)));
|
|
3937
3921
|
}), q(z(n), r);
|
|
3938
|
-
}),
|
|
3922
|
+
}), uo = M(([e]) => V(e, 0).mul(zr)), fo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v]) => {
|
|
3939
3923
|
let y = J(0).toVar(), b = J(0).toVar(), x = z(0).toVar(), S = z(0).toVar(), C = z(0).toVar();
|
|
3940
3924
|
return N(l.diffuseImportance.greaterThanEqual(0).and(l.specularImportance.greaterThanEqual(0)).and(l.transmissionImportance.greaterThanEqual(0)).and(l.clearcoatImportance.greaterThanEqual(0)).and(l.envmapImportance.greaterThanEqual(0)).toVar().not(), () => {
|
|
3941
3925
|
let e = q($t(c).toVar(), $t(c).toVar()).toVar();
|
|
3942
|
-
y.assign(
|
|
3926
|
+
y.assign(pa(t, e)), b.assign(n.color.xyz), x.assign(1), S.assign(1);
|
|
3943
3927
|
}).Else(() => {
|
|
3944
|
-
let o = Fr.wrap(
|
|
3928
|
+
let o = Fr.wrap(co(l, s, n, _, v).toVar()), u = $t(c).toVar(), d = q($t(c).toVar(), $t(c).toVar()).toVar(), f = lo(o, u).toVar(), p = B(f.x).toVar();
|
|
3945
3929
|
f.y.toVar();
|
|
3946
3930
|
let m = J(0).toVar(), h = z(0).toVar(), g = J(0).toVar();
|
|
3947
3931
|
N(p.equal(B(1)), () => {
|
|
3948
3932
|
m.assign(r), h.assign(i), g.assign(a);
|
|
3949
3933
|
}).ElseIf(p.equal(B(2)), () => {
|
|
3950
|
-
m.assign(
|
|
3934
|
+
m.assign(pa(t, d)), h.assign(uo(V(R(t, m), 0))), g.assign(Da(e, m, t, n));
|
|
3951
3935
|
}).ElseIf(p.equal(B(3)), () => {
|
|
3952
|
-
let r = R(e, t).greaterThan(0).toVar(), i =
|
|
3953
|
-
m.assign(i.direction), h.assign(i.pdf), g.assign(
|
|
3936
|
+
let r = R(e, t).greaterThan(0).toVar(), i = ba.wrap(wa(e, t, n.ior, n.roughness, r, n.dispersion, d, c).toVar());
|
|
3937
|
+
m.assign(i.direction), h.assign(i.pdf), g.assign(Da(e, m, t, n));
|
|
3954
3938
|
}).Else(() => {
|
|
3955
3939
|
m.assign(r), h.assign(i), g.assign(a);
|
|
3956
3940
|
});
|
|
3957
3941
|
let w = R(t, m).toVar(), T = V(w, 0).toVar(), E = F(w).toVar(), D = z(0).toVar();
|
|
3958
3942
|
N(o.useSpecular, () => {
|
|
3959
|
-
let r =
|
|
3943
|
+
let r = aa(V(R(t, U(e.add(m))), .001), V(R(t, e), .001), n.roughness);
|
|
3960
3944
|
D.addAssign(o.specularWeight.mul(r));
|
|
3961
3945
|
}), N(o.useDiffuse, () => {
|
|
3962
|
-
let e =
|
|
3946
|
+
let e = uo(T).toVar();
|
|
3963
3947
|
D.addAssign(o.diffuseWeight.mul(e));
|
|
3964
3948
|
}), N(o.useTransmission.and(n.transmission.greaterThan(0)), () => {
|
|
3965
|
-
let r = R(e, t).greaterThan(0).toVar(), i =
|
|
3949
|
+
let r = R(e, t).greaterThan(0).toVar(), i = oo(e, m, t, n.ior, n.roughness, r).toVar();
|
|
3966
3950
|
D.addAssign(o.transmissionWeight.mul(i));
|
|
3967
3951
|
}), N(o.useClearcoat.and(n.clearcoat.greaterThan(0)), () => {
|
|
3968
|
-
let r =
|
|
3952
|
+
let r = so(e, m, t, n.clearcoatRoughness).toVar();
|
|
3969
3953
|
D.addAssign(o.clearcoatWeight.mul(r));
|
|
3970
3954
|
}), h.assign(V(h, Wr)), D.assign(V(D, Wr));
|
|
3971
3955
|
let O = h.div(D).toVar(), k = W(p.equal(B(3)), E, T), A = g.mul(k).mul(O).div(h).toVar();
|
|
3972
3956
|
y.assign(m), b.assign(A), x.assign(O), S.assign(h), C.assign(D);
|
|
3973
|
-
}),
|
|
3957
|
+
}), Ia({
|
|
3974
3958
|
direction: y,
|
|
3975
3959
|
throughput: b,
|
|
3976
3960
|
misWeight: x,
|
|
3977
3961
|
pdf: S,
|
|
3978
3962
|
combinedPdf: C
|
|
3979
3963
|
});
|
|
3980
|
-
}),
|
|
3964
|
+
}), po = Cr({
|
|
3981
3965
|
position: "vec3",
|
|
3982
3966
|
normal: "vec3",
|
|
3983
3967
|
emission: "vec3",
|
|
@@ -3987,40 +3971,40 @@ var so = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
|
|
|
3987
3971
|
area: "float",
|
|
3988
3972
|
cosThetaLight: "float",
|
|
3989
3973
|
valid: "bool"
|
|
3990
|
-
}),
|
|
3974
|
+
}), mo = Cr({
|
|
3991
3975
|
contribution: "vec3",
|
|
3992
3976
|
hasEmissive: "bool",
|
|
3993
3977
|
emissionOnly: "vec3",
|
|
3994
3978
|
distance: "float"
|
|
3995
|
-
}),
|
|
3979
|
+
}), ho = M(([e, t, n, r]) => {
|
|
3996
3980
|
let i = ht(r.x), a = z(1).sub(i), o = r.y.mul(i), s = z(1).sub(a).sub(o);
|
|
3997
3981
|
return e.mul(a).add(t.mul(o)).add(n.mul(s));
|
|
3998
|
-
}),
|
|
3982
|
+
}), go = M(([e, t, n]) => et(Ye(t.sub(e), n.sub(e))).mul(.5)), _o = M(([e, t, n, r]) => {
|
|
3999
3983
|
let i = U(e.sub(r)), a = U(t.sub(r)), o = U(n.sub(r)), s = F(R(i, Ye(a, o))), c = z(1).add(R(a, o)).add(R(i, o)).add(R(i, a));
|
|
4000
3984
|
return V(z(2).mul(qe(s, V(c, z(1e-10)))), z(0));
|
|
4001
|
-
}),
|
|
3985
|
+
}), vo = M(([e, t, n, r]) => {
|
|
4002
3986
|
let i = t.sub(e), a = n.sub(e), o = n.sub(t), s = V(R(i, i), V(R(a, a), R(o, o))), c = Ye(i, a), l = R(c, c), u = I(!1).toVar();
|
|
4003
3987
|
return N(l.greaterThan(1e-20), () => {
|
|
4004
3988
|
let t = R(c, r.sub(e)), n = t.mul(t).div(l);
|
|
4005
3989
|
u.assign(s.greaterThan(n));
|
|
4006
3990
|
}), u;
|
|
4007
|
-
}),
|
|
3991
|
+
}), yo = Cr({
|
|
4008
3992
|
direction: "vec3",
|
|
4009
3993
|
position: "vec3",
|
|
4010
3994
|
solidAngle: "float",
|
|
4011
3995
|
valid: "bool"
|
|
4012
|
-
}),
|
|
3996
|
+
}), bo = M(([e]) => {
|
|
4013
3997
|
let t = et(e);
|
|
4014
3998
|
return W(t.greaterThan(1e-10), e.div(t), J(0));
|
|
4015
|
-
}),
|
|
4016
|
-
let a =
|
|
3999
|
+
}), xo = M(([e, t, n, r, i]) => {
|
|
4000
|
+
let a = yo({
|
|
4017
4001
|
direction: J(0),
|
|
4018
4002
|
position: J(0),
|
|
4019
4003
|
solidAngle: z(0),
|
|
4020
4004
|
valid: !1
|
|
4021
|
-
}).toVar(), o = U(e.sub(r)), s = U(t.sub(r)), c = U(n.sub(r)), l =
|
|
4005
|
+
}).toVar(), o = U(e.sub(r)), s = U(t.sub(r)), c = U(n.sub(r)), l = _o(e, t, n, r);
|
|
4022
4006
|
return a.solidAngle.assign(l), N(l.greaterThan(1e-7), () => {
|
|
4023
|
-
let u = L(R(
|
|
4007
|
+
let u = L(R(bo(Ye(o, s)), bo(Ye(o, c))), -1, 1), d = ht(V(z(1).sub(u.mul(u)), 0)), f = Ge(u), p = i.x.mul(l).sub(f), m = pt(p), h = Je(p), g = L(R(o, s), -1, 1), _ = h.sub(u), v = m.add(d.mul(g)), y = v.mul(h).sub(_.mul(m)).mul(u).sub(v), b = v.mul(m).add(_.mul(h)).mul(d), x = L(W(F(b).greaterThan(1e-10), y.div(b), z(1)), -1, 1), S = R(c, o), C = bo(c.sub(o.mul(S))), w = ht(V(z(1).sub(x.mul(x)), 0)), T = U(o.mul(x).add(C.mul(w))), E = R(T, s), D = z(1).sub(i.y.mul(z(1).sub(E))), O = ht(V(z(1).sub(D.mul(D)), 0)), k = bo(T.sub(s.mul(E))), A = U(s.mul(D).add(k.mul(O))), ee = U(Ye(t.sub(e), n.sub(e))), te = R(ee, A);
|
|
4024
4008
|
N(F(te).greaterThan(1e-10), () => {
|
|
4025
4009
|
let t = R(ee, e.sub(r)).div(te);
|
|
4026
4010
|
N(t.greaterThan(0), () => {
|
|
@@ -4028,21 +4012,21 @@ var so = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S
|
|
|
4028
4012
|
});
|
|
4029
4013
|
});
|
|
4030
4014
|
}), a;
|
|
4031
|
-
}),
|
|
4015
|
+
}), So = M(([e, t, n, r]) => {
|
|
4032
4016
|
let i = n.sub(t), a = r.sub(t), o = e.sub(t), s = R(i, i), c = R(i, a), l = R(a, a), u = R(o, i), d = R(o, a), f = z(1).div(V(s.mul(l).sub(c.mul(c)), z(1e-10))), p = l.mul(u).sub(c.mul(d)).mul(f), m = s.mul(d).sub(c.mul(u)).mul(f);
|
|
4033
4017
|
return J(z(1).sub(p).sub(m), p, m);
|
|
4034
|
-
}),
|
|
4018
|
+
}), Co = M(([e, t, n, r]) => {
|
|
4035
4019
|
let i = ht(r.x), a = z(1).sub(i), o = r.y.mul(i), s = z(1).sub(a).sub(o);
|
|
4036
4020
|
return U(e.mul(a).add(t.mul(o)).add(n.mul(s)));
|
|
4037
|
-
}),
|
|
4021
|
+
}), wo = M(([e]) => e.emissiveIntensity.greaterThan(0).and(et(e.emissive).greaterThan(0)));
|
|
4038
4022
|
M(([e, t]) => {
|
|
4039
4023
|
let n = z(0).toVar();
|
|
4040
|
-
return N(
|
|
4024
|
+
return N(wo(e), () => {
|
|
4041
4025
|
let r = e.emissive.x.add(e.emissive.y).add(e.emissive.z).div(3);
|
|
4042
4026
|
n.assign(r.mul(e.emissiveIntensity).mul(t));
|
|
4043
4027
|
}), n;
|
|
4044
4028
|
});
|
|
4045
|
-
var
|
|
4029
|
+
var To = 8, Eo = 2, Do = Cr({
|
|
4046
4030
|
v0: "vec3",
|
|
4047
4031
|
v1: "vec3",
|
|
4048
4032
|
v2: "vec3",
|
|
@@ -4050,9 +4034,9 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4050
4034
|
n1: "vec3",
|
|
4051
4035
|
n2: "vec3",
|
|
4052
4036
|
materialIndex: "int"
|
|
4053
|
-
}),
|
|
4054
|
-
let n = $(t, e, B(0), B(
|
|
4055
|
-
return
|
|
4037
|
+
}), Oo = M(([e, t]) => {
|
|
4038
|
+
let n = $(t, e, B(0), B(To)), r = $(t, e, B(1), B(To)), i = $(t, e, B(2), B(To)), a = $(t, e, B(3), B(To)), o = $(t, e, B(4), B(To)), s = $(t, e, B(5), B(To)), c = $(t, e, B(7), B(To));
|
|
4039
|
+
return Do({
|
|
4056
4040
|
v0: n.xyz,
|
|
4057
4041
|
v1: r.xyz,
|
|
4058
4042
|
v2: i.xyz,
|
|
@@ -4061,27 +4045,27 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4061
4045
|
n2: s.xyz,
|
|
4062
4046
|
materialIndex: B(c.z)
|
|
4063
4047
|
});
|
|
4064
|
-
}),
|
|
4065
|
-
let s =
|
|
4066
|
-
return N(
|
|
4067
|
-
let e =
|
|
4048
|
+
}), ko = M(([e, t, n, r, i, a, o]) => {
|
|
4049
|
+
let s = Do.wrap(Oo(e, i)), c = go(s.v0, s.v1, s.v2), l = B(27), u = $(a, s.materialIndex, B(1), l), d = $(a, s.materialIndex, B(2), l), f = V(u.x.add(u.y).add(u.z).div(3).mul(d.a).mul(c), z(1e-10)).div(V(o, z(1e-10))), p = z(0).toVar();
|
|
4050
|
+
return N(vo(s.v0, s.v1, s.v2, r), () => {
|
|
4051
|
+
let e = _o(s.v0, s.v1, s.v2, r);
|
|
4068
4052
|
p.assign(f.div(V(e, z(1e-10))));
|
|
4069
4053
|
}).Else(() => {
|
|
4070
4054
|
let e = U(Ye(s.v1.sub(s.v0), s.v2.sub(s.v0))), r = V(R(n.negate(), e), .001), i = t.mul(t), a = f.div(c);
|
|
4071
4055
|
p.assign(a.mul(i).div(r));
|
|
4072
4056
|
}), V(p, Wr);
|
|
4073
|
-
}),
|
|
4057
|
+
}), Ao = M(([e, t, n]) => {
|
|
4074
4058
|
let r = B(0).toVar(), i = t.sub(1).toVar();
|
|
4075
4059
|
return P(r.lessThan(i), () => {
|
|
4076
|
-
let t = r.add(i).div(2).toVar(), a = e.element(t.mul(
|
|
4060
|
+
let t = r.add(i).div(2).toVar(), a = e.element(t.mul(Eo)).b;
|
|
4077
4061
|
N(a.lessThan(n), () => {
|
|
4078
4062
|
r.assign(t.add(1));
|
|
4079
4063
|
}).Else(() => {
|
|
4080
4064
|
i.assign(t);
|
|
4081
4065
|
});
|
|
4082
4066
|
}), r;
|
|
4083
|
-
}),
|
|
4084
|
-
let c =
|
|
4067
|
+
}), jo = M(([e, t, n, r, i, a, o, s]) => {
|
|
4068
|
+
let c = po({
|
|
4085
4069
|
position: J(0),
|
|
4086
4070
|
normal: J(0),
|
|
4087
4071
|
emission: J(0),
|
|
@@ -4093,40 +4077,40 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4093
4077
|
valid: !1
|
|
4094
4078
|
}).toVar();
|
|
4095
4079
|
return N(a.greaterThan(B(0)), () => {
|
|
4096
|
-
let n =
|
|
4097
|
-
N(
|
|
4098
|
-
let n =
|
|
4080
|
+
let n = Ao(i, a, $t(r)).toVar().mul(Eo), l = i.element(n), u = i.element(n.add(1)), d = B(l.r), f = V(l.g, z(1e-10)), p = u.xyz, m = u.w, h = Do.wrap(Oo(d, s)), g = q($t(r).toVar(), $t(r).toVar()), _ = U(Ye(h.v1.sub(h.v0), h.v2.sub(h.v0)));
|
|
4081
|
+
N(vo(h.v0, h.v1, h.v2, e), () => {
|
|
4082
|
+
let n = yo.wrap(xo(h.v0, h.v1, h.v2, e, g));
|
|
4099
4083
|
N(n.valid.and(n.solidAngle.greaterThan(1e-7)), () => {
|
|
4100
4084
|
let r = n.direction, i = n.position, a = R(r, t), s = R(r, _.negate());
|
|
4101
4085
|
N(a.greaterThan(0).and(s.greaterThan(0)), () => {
|
|
4102
|
-
let t =
|
|
4086
|
+
let t = So(i, h.v0, h.v1, h.v2), a = U(h.n0.mul(t.x).add(h.n1.mul(t.y)).add(h.n2.mul(t.z))), l = et(i.sub(e)), u = f.div(V(o, z(1e-10))).div(n.solidAngle);
|
|
4103
4087
|
c.position.assign(i), c.normal.assign(a), c.emission.assign(p), c.direction.assign(r), c.distance.assign(l), c.pdf.assign(V(u, Wr)), c.area.assign(m), c.cosThetaLight.assign(s), c.valid.assign(!0);
|
|
4104
4088
|
});
|
|
4105
4089
|
});
|
|
4106
4090
|
}).Else(() => {
|
|
4107
|
-
let n =
|
|
4091
|
+
let n = ho(h.v0, h.v1, h.v2, g), r = Co(h.n0, h.n1, h.n2, g), i = n.sub(e), a = R(i, i), s = ht(a), l = i.div(s), u = R(l, t), d = R(l, r.negate());
|
|
4108
4092
|
N(u.greaterThan(0).and(d.greaterThan(0)), () => {
|
|
4109
4093
|
let e = f.div(V(o, z(1e-10)).mul(m)).mul(a).div(d);
|
|
4110
4094
|
c.position.assign(n), c.normal.assign(r), c.emission.assign(p), c.direction.assign(l), c.distance.assign(s), c.pdf.assign(V(e, Wr)), c.area.assign(m), c.cosThetaLight.assign(d), c.valid.assign(!0);
|
|
4111
4095
|
});
|
|
4112
4096
|
});
|
|
4113
4097
|
}), c;
|
|
4114
|
-
}),
|
|
4115
|
-
let h =
|
|
4098
|
+
}), Mo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m]) => {
|
|
4099
|
+
let h = mo({
|
|
4116
4100
|
contribution: J(0),
|
|
4117
4101
|
hasEmissive: !1,
|
|
4118
4102
|
emissionOnly: J(0),
|
|
4119
4103
|
distance: z(0)
|
|
4120
4104
|
}).toVar();
|
|
4121
4105
|
return N(a.greaterThan(B(1)).and(r.roughness.greaterThan(.9)).and(r.metalness.lessThan(.1)).not(), () => {
|
|
4122
|
-
let a =
|
|
4106
|
+
let a = po.wrap(jo(e, t, i, o, c, l, u, d));
|
|
4123
4107
|
N(a.valid.and(a.pdf.greaterThan(0)), () => {
|
|
4124
4108
|
h.hasEmissive.assign(!0), h.emissionOnly.assign(a.emission), h.distance.assign(a.distance);
|
|
4125
4109
|
let i = V(z(0), R(t, a.direction));
|
|
4126
4110
|
N(i.greaterThan(0), () => {
|
|
4127
4111
|
let c = m(e, t, r), l = e.add(c), u = a.distance.sub(.001), d = f(l, a.direction, u, o);
|
|
4128
4112
|
N(d.greaterThan(0), () => {
|
|
4129
|
-
let e = p(n, a.direction, t, r), o =
|
|
4113
|
+
let e = p(n, a.direction, t, r), o = io(n, a.direction, t, r), c = W(o.greaterThan(0), Xr({
|
|
4130
4114
|
pdf1: a.pdf,
|
|
4131
4115
|
pdf2: o
|
|
4132
4116
|
}), z(1));
|
|
@@ -4135,8 +4119,8 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4135
4119
|
});
|
|
4136
4120
|
});
|
|
4137
4121
|
}), h;
|
|
4138
|
-
}),
|
|
4139
|
-
let o =
|
|
4122
|
+
}), No = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m]) => mo.wrap(Mo(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)).contribution), Po = 4, Fo = 2, Io = 32, Lo = M(([e, t, n, r, i, a]) => {
|
|
4123
|
+
let o = po({
|
|
4140
4124
|
position: J(0),
|
|
4141
4125
|
normal: J(0),
|
|
4142
4126
|
emission: J(0),
|
|
@@ -4147,12 +4131,12 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4147
4131
|
cosThetaLight: z(0),
|
|
4148
4132
|
valid: !1
|
|
4149
4133
|
}).toVar(), s = z(1).toVar(), c = B(0).toVar(), l = I(!1).toVar();
|
|
4150
|
-
return P(
|
|
4151
|
-
let t = c.mul(B(
|
|
4134
|
+
return P(Io, () => {
|
|
4135
|
+
let t = c.mul(B(Po)), i = r.element(t.add(B(1))), a = r.element(t.add(B(2)));
|
|
4152
4136
|
N(i.w.greaterThan(.5), () => {
|
|
4153
4137
|
l.assign(I(!0)), Ve();
|
|
4154
4138
|
});
|
|
4155
|
-
let o = B(a.x), u = B(a.y), d = o.mul(B(
|
|
4139
|
+
let o = B(a.x), u = B(a.y), d = o.mul(B(Po)), f = r.element(d), p = r.element(d.add(B(1))), m = u.mul(B(Po)), h = r.element(m), g = r.element(m.add(B(1))), _ = J(f.x.add(p.x).mul(.5), f.y.add(p.y).mul(.5), f.z.add(p.z).mul(.5)), v = J(h.x.add(g.x).mul(.5), h.y.add(g.y).mul(.5), h.z.add(g.z).mul(.5)), y = _.sub(e), b = v.sub(e), x = V(R(y, y), z(.01)), S = V(R(b, b), z(.01)), C = V(f.w, z(0)), w = V(h.w, z(0)), T = C.div(x), E = w.div(S), D = T.add(E);
|
|
4156
4140
|
N(D.lessThanEqual(z(0)), () => {
|
|
4157
4141
|
c.assign(o);
|
|
4158
4142
|
}).Else(() => {
|
|
@@ -4164,54 +4148,54 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4164
4148
|
});
|
|
4165
4149
|
});
|
|
4166
4150
|
}), N(l, () => {
|
|
4167
|
-
let l = c.mul(B(
|
|
4151
|
+
let l = c.mul(B(Po)), u = r.element(l), d = r.element(l.add(B(2))), f = B(d.x), p = B(d.y), m = V(u.w, z(1e-10)), h = $t(n).mul(m), g = z(0).toVar(), _ = f.add(p.sub(B(1))).toVar(), v = z(1e-10).toVar();
|
|
4168
4152
|
P({
|
|
4169
4153
|
start: B(0),
|
|
4170
4154
|
end: p
|
|
4171
4155
|
}, ({ i: e }) => {
|
|
4172
|
-
let t = f.add(e), n = t.mul(B(
|
|
4156
|
+
let t = f.add(e), n = t.mul(B(Fo)), r = V(i.element(n).g, z(0));
|
|
4173
4157
|
g.addAssign(r), N(g.greaterThanEqual(h).and(r.greaterThan(z(0))), () => {
|
|
4174
4158
|
_.assign(t), v.assign(r), Ve();
|
|
4175
4159
|
});
|
|
4176
4160
|
}), s.mulAssign(v.div(m));
|
|
4177
|
-
let y = _.mul(B(
|
|
4178
|
-
N(
|
|
4179
|
-
let n =
|
|
4161
|
+
let y = _.mul(B(Fo)), b = i.element(y), x = i.element(y.add(B(1))), S = B(b.r), C = x.xyz, w = x.w, T = Do.wrap(Oo(S, a)), E = q($t(n).toVar(), $t(n).toVar()), D = U(Ye(T.v1.sub(T.v0), T.v2.sub(T.v0)));
|
|
4162
|
+
N(vo(T.v0, T.v1, T.v2, e), () => {
|
|
4163
|
+
let n = yo.wrap(xo(T.v0, T.v1, T.v2, e, E));
|
|
4180
4164
|
N(n.valid.and(n.solidAngle.greaterThan(z(1e-7))), () => {
|
|
4181
4165
|
let r = n.direction, i = n.position, a = R(r, t), c = R(r, D.negate());
|
|
4182
4166
|
N(a.greaterThan(z(0)).and(c.greaterThan(z(0))), () => {
|
|
4183
|
-
let t =
|
|
4167
|
+
let t = So(i, T.v0, T.v1, T.v2), a = U(T.n0.mul(t.x).add(T.n1.mul(t.y)).add(T.n2.mul(t.z))), l = et(i.sub(e)), u = s.div(V(n.solidAngle, z(1e-10)));
|
|
4184
4168
|
o.position.assign(i), o.normal.assign(a), o.emission.assign(C), o.direction.assign(r), o.distance.assign(l), o.pdf.assign(V(u, Wr)), o.area.assign(w), o.cosThetaLight.assign(c), o.valid.assign(!0);
|
|
4185
4169
|
});
|
|
4186
4170
|
});
|
|
4187
4171
|
}).Else(() => {
|
|
4188
|
-
let n =
|
|
4172
|
+
let n = ho(T.v0, T.v1, T.v2, E), r = Co(T.n0, T.n1, T.n2, E), i = n.sub(e), a = R(i, i), c = ht(a), l = i.div(c), u = R(l, t), d = R(l, r.negate());
|
|
4189
4173
|
N(u.greaterThan(z(0)).and(d.greaterThan(z(0))), () => {
|
|
4190
4174
|
let e = s.div(V(w, z(1e-10))).mul(a).div(d);
|
|
4191
4175
|
o.position.assign(n), o.normal.assign(r), o.emission.assign(C), o.direction.assign(l), o.distance.assign(c), o.pdf.assign(V(e, Wr)), o.area.assign(w), o.cosThetaLight.assign(d), o.valid.assign(!0);
|
|
4192
4176
|
});
|
|
4193
4177
|
});
|
|
4194
4178
|
}), o;
|
|
4195
|
-
}),
|
|
4179
|
+
}), Ro = 0, zo = 1, Bo = 2, Vo = 3, Ho = Cr({
|
|
4196
4180
|
radiance: "vec4",
|
|
4197
4181
|
objectNormal: "vec3",
|
|
4198
4182
|
objectColor: "vec3",
|
|
4199
4183
|
objectID: "float",
|
|
4200
4184
|
firstHitPoint: "vec3",
|
|
4201
4185
|
firstHitDistance: "float"
|
|
4202
|
-
}),
|
|
4186
|
+
}), Uo = M(([e, t, n, r, i]) => {
|
|
4203
4187
|
let a = i.toVar();
|
|
4204
4188
|
return N(n.not().or(r.notEqual(t)), () => {
|
|
4205
4189
|
a.assign(ni(e.metalness, e.roughness, e.transmission, e.clearcoat, e.emissive));
|
|
4206
4190
|
}), a;
|
|
4207
|
-
}),
|
|
4208
|
-
let p = J(0).toVar(), m = J(0).toVar(), h = z(0).toVar(), g = Mr.wrap(
|
|
4191
|
+
}), Wo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
|
|
4192
|
+
let p = J(0).toVar(), m = J(0).toVar(), h = z(0).toVar(), g = Mr.wrap(Uo(n, r, o, s, c)).toVar(), _ = u.toVar();
|
|
4209
4193
|
N(l.not(), () => {
|
|
4210
4194
|
N(d, () => {
|
|
4211
|
-
_.assign(
|
|
4195
|
+
_.assign(ca(n, g, f));
|
|
4212
4196
|
}).Else(() => {
|
|
4213
4197
|
let e = Pr({
|
|
4214
|
-
F0:
|
|
4198
|
+
F0: Zi(n.ior),
|
|
4215
4199
|
NoV: z(1),
|
|
4216
4200
|
diffuseColor: J(0),
|
|
4217
4201
|
specularColor: J(0),
|
|
@@ -4232,30 +4216,30 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4232
4216
|
iorFactor: at(z(2).div(n.ior), 1),
|
|
4233
4217
|
maxSheenColor: V(n.sheenColor.x, V(n.sheenColor.y, n.sheenColor.z))
|
|
4234
4218
|
}).toVar();
|
|
4235
|
-
_.assign(
|
|
4219
|
+
_.assign(ca(n, g, e));
|
|
4236
4220
|
});
|
|
4237
4221
|
});
|
|
4238
4222
|
let v = i.x.toVar(), y = q(i.y, $t(a)).toVar(), b = J(0).toVar(), x = _.diffuse.toVar(), S = x.add(_.specular).toVar(), C = S.add(_.sheen).toVar(), w = C.add(_.clearcoat).toVar(), T = I(!1).toVar();
|
|
4239
4223
|
N(v.lessThan(x).and(T.not()), () => {
|
|
4240
|
-
p.assign(
|
|
4224
|
+
p.assign(fa({
|
|
4241
4225
|
N: t,
|
|
4242
4226
|
xi: y
|
|
4243
4227
|
}));
|
|
4244
4228
|
let r = L(R(t, p), 0, 1);
|
|
4245
|
-
h.assign(r.mul(zr)), m.assign(
|
|
4229
|
+
h.assign(r.mul(zr)), m.assign(Da(e, p, t, n)), T.assign(I(!0));
|
|
4246
4230
|
});
|
|
4247
4231
|
let E = L(R(t, e), .001, 1).toVar();
|
|
4248
4232
|
return N(v.lessThan(S).and(T.not()), () => {
|
|
4249
|
-
let r = Zr({ N: t }), a =
|
|
4233
|
+
let r = Zr({ N: t }), a = ma({
|
|
4250
4234
|
V: r.transpose().mul(e).toVar(),
|
|
4251
4235
|
roughness: n.roughness,
|
|
4252
4236
|
Xi: i
|
|
4253
4237
|
});
|
|
4254
4238
|
b.assign(r.mul(a));
|
|
4255
4239
|
let o = L(R(t, b), .001, 1);
|
|
4256
|
-
p.assign(lt(e.negate(), b)), h.assign(
|
|
4240
|
+
p.assign(lt(e.negate(), b)), h.assign(aa(o, E, n.roughness)), m.assign(Da(e, p, t, n)), T.assign(I(!0));
|
|
4257
4241
|
}), N(v.lessThan(C).and(T.not()), () => {
|
|
4258
|
-
b.assign(
|
|
4242
|
+
b.assign(da({
|
|
4259
4243
|
N: t,
|
|
4260
4244
|
roughness: n.sheenRoughness,
|
|
4261
4245
|
Xi: i
|
|
@@ -4264,32 +4248,32 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4264
4248
|
p.assign(lt(e.negate(), b));
|
|
4265
4249
|
let o = R(t, p).toVar();
|
|
4266
4250
|
N(o.lessThanEqual(0), () => {
|
|
4267
|
-
p.assign(
|
|
4251
|
+
p.assign(fa({
|
|
4268
4252
|
N: t,
|
|
4269
4253
|
xi: i
|
|
4270
|
-
})), o.assign(L(R(t, p), 0, 1)), h.assign(o.mul(zr)), m.assign(
|
|
4254
|
+
})), o.assign(L(R(t, p), 0, 1)), h.assign(o.mul(zr)), m.assign(Da(e, p, t, n));
|
|
4271
4255
|
}).Else(() => {
|
|
4272
|
-
h.assign(
|
|
4256
|
+
h.assign($i(r, n.sheenRoughness).mul(r).div(z(4).mul(a))), h.assign(V(h, Wr)), m.assign(Da(e, p, t, n));
|
|
4273
4257
|
}), T.assign(I(!0));
|
|
4274
4258
|
}), N(v.lessThan(w).and(T.not()), () => {
|
|
4275
4259
|
let r = L(n.clearcoatRoughness, Ur, 1);
|
|
4276
|
-
b.assign(
|
|
4260
|
+
b.assign(da({
|
|
4277
4261
|
N: t,
|
|
4278
4262
|
roughness: r,
|
|
4279
4263
|
Xi: i
|
|
4280
4264
|
}));
|
|
4281
4265
|
let a = L(R(t, b), 0, 1);
|
|
4282
|
-
p.assign(lt(e.negate(), b)), h.assign(
|
|
4266
|
+
p.assign(lt(e.negate(), b)), h.assign(aa(a, E, r)), h.assign(V(h, Wr)), m.assign(Da(e, p, t, n)), T.assign(I(!0));
|
|
4283
4267
|
}), N(T.not(), () => {
|
|
4284
|
-
let r = R(e, t).greaterThan(0).toVar(), o =
|
|
4285
|
-
p.assign(o.direction), h.assign(V(o.pdf, Wr)), m.assign(
|
|
4268
|
+
let r = R(e, t).greaterThan(0).toVar(), o = ba.wrap(wa(e, t, n.ior, n.roughness, r, n.dispersion, i, a));
|
|
4269
|
+
p.assign(o.direction), h.assign(V(o.pdf, Wr)), m.assign(Da(e, p, t, n));
|
|
4286
4270
|
}), h.assign(V(h, Wr)), Dr({
|
|
4287
4271
|
direction: p,
|
|
4288
4272
|
value: m,
|
|
4289
4273
|
pdf: h
|
|
4290
4274
|
});
|
|
4291
|
-
}),
|
|
4292
|
-
let l = V(Jr({ v: e }), 0).toVar(), u = Mr.wrap(
|
|
4275
|
+
}), Go = M(([e, t, n, r, i, a, o, s, c]) => {
|
|
4276
|
+
let l = V(Jr({ v: e }), 0).toVar(), u = Mr.wrap(Uo(n, r, i, a, o)).toVar(), d = u.complexityScore.toVar();
|
|
4293
4277
|
N(u.isMetallic.and(u.isSmooth), () => {
|
|
4294
4278
|
d.addAssign(.15);
|
|
4295
4279
|
}), N(u.isTransmissive.and(u.hasClearcoat), () => {
|
|
@@ -4304,7 +4288,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4304
4288
|
});
|
|
4305
4289
|
let p = mt(z(.001), z(.1), l);
|
|
4306
4290
|
return l.mul(H(d.mul(.7), f, .3)).mul(p);
|
|
4307
|
-
}),
|
|
4291
|
+
}), Ko = M(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
|
|
4308
4292
|
let p = z(1).toVar();
|
|
4309
4293
|
return N(e.greaterThanEqual(B(3)), () => {
|
|
4310
4294
|
let m = V(Jr({ v: t }), 0).toVar();
|
|
@@ -4312,7 +4296,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4312
4296
|
let e = V(m.mul(125), .01), t = $t(a);
|
|
4313
4297
|
p.assign(W(t.lessThan(e), e, z(0)));
|
|
4314
4298
|
}).Else(() => {
|
|
4315
|
-
let h = Mr.wrap(
|
|
4299
|
+
let h = Mr.wrap(Uo(n, r, o, s, c)).toVar(), g = h.complexityScore.toVar();
|
|
4316
4300
|
N(h.isMetallic.and(h.isSmooth).and(e.lessThan(B(7))), () => {
|
|
4317
4301
|
g.addAssign(.3);
|
|
4318
4302
|
}), N(h.isTransmissive.and(e.lessThan(B(6))), () => {
|
|
@@ -4332,7 +4316,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4332
4316
|
N(o.and(l), () => {
|
|
4333
4317
|
v.assign(u);
|
|
4334
4318
|
}).Else(() => {
|
|
4335
|
-
v.assign(
|
|
4319
|
+
v.assign(Go(t, i, n, r, o, s, c, d, f));
|
|
4336
4320
|
});
|
|
4337
4321
|
let y = H(L(g.mul(.4).add(m.mul(.6)).mul(1.2), .15, .95), L(m.mul(.4).add(g.mul(.1)), .03, .6), L(z(e.sub(_)).div(10), 0, 1)).toVar();
|
|
4338
4322
|
y.assign(H(y, V(y, v), .4)), N(g.greaterThan(.5), () => {
|
|
@@ -4348,12 +4332,12 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4348
4332
|
});
|
|
4349
4333
|
});
|
|
4350
4334
|
}), p;
|
|
4351
|
-
}),
|
|
4335
|
+
}), qo = M(([e, t, n, r, i, a, o, s]) => {
|
|
4352
4336
|
let c = Y(0).toVar();
|
|
4353
4337
|
return N(e.and(o.not()), () => {
|
|
4354
4338
|
c.assign(Y(0));
|
|
4355
4339
|
}).Else(() => {
|
|
4356
|
-
let o =
|
|
4340
|
+
let o = Ei({
|
|
4357
4341
|
tex: n,
|
|
4358
4342
|
samp: dt(n),
|
|
4359
4343
|
direction: t,
|
|
@@ -4367,8 +4351,8 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4367
4351
|
c.assign(o);
|
|
4368
4352
|
});
|
|
4369
4353
|
}), c;
|
|
4370
|
-
}),
|
|
4371
|
-
let _e = J(0).toVar(), ve = J(1).toVar(), ye = z(1).toVar(), be = I(!1).toVar(), xe = z(0).toVar(), Se = J(0).toVar(), Ce = J(0).toVar(), we = z(-1e3).toVar(), Te = e.origin.toVar(), Ee = z(1e10).toVar(), De = B(0).toVar(), Oe = z(1).toVar(), ke = z(1).toVar(), Ae = z(1).toVar(), je = ee.toVar(), Me = te.toVar(), Ne = B(
|
|
4354
|
+
}), Jo = /* @__PURE__ */ X("\n fn regularizePathContribution( contribution: vec3f, pathLength: f32, fireflyThreshold: f32, frame: i32 ) -> vec3f {\n let threshold = calculateFireflyThreshold( fireflyThreshold, i32( pathLength ), frame );\n return applySoftSuppressionRGB( contribution, threshold, 0.5f );\n }\n", [$r, ti]), Yo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x, S, C, w, T, E, D, O, k, A, ee, te, ne, re, ie, ae, oe, se, ce, le, ue, de, j, fe, pe, me, he, ge]) => {
|
|
4355
|
+
let _e = J(0).toVar(), ve = J(1).toVar(), ye = z(1).toVar(), be = I(!1).toVar(), xe = z(0).toVar(), Se = J(0).toVar(), Ce = J(0).toVar(), we = z(-1e3).toVar(), Te = e.origin.toVar(), Ee = z(1e10).toVar(), De = B(0).toVar(), Oe = z(1).toVar(), ke = z(1).toVar(), Ae = z(1).toVar(), je = ee.toVar(), Me = te.toVar(), Ne = B(Ro).toVar(), Pe = I(!0).toVar(), Fe = I(!1).toVar(), Ie = I(!1).toVar(), Le = I(!1).toVar();
|
|
4372
4356
|
I(!1).toVar();
|
|
4373
4357
|
let Re = z(0).toVar(), ze = B(-1).toVar(), Be = Mr({
|
|
4374
4358
|
isMetallic: !1,
|
|
@@ -4419,18 +4403,18 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4419
4403
|
let r = W(e.greaterThan(B(0)), oe, z(1)), te = wr({
|
|
4420
4404
|
origin: Ge,
|
|
4421
4405
|
direction: Ke
|
|
4422
|
-
}), P = Er.wrap(
|
|
4406
|
+
}), P = Er.wrap(vi(te, i, a, o)).toVar();
|
|
4423
4407
|
N(P.didHit.not(), () => {
|
|
4424
|
-
let t =
|
|
4408
|
+
let t = qo(Pe, Ke, S, w, C, k, re, ne), n = z(1).toVar();
|
|
4425
4409
|
N(xe.greaterThan(0).and(k).and(A), () => {
|
|
4426
|
-
let e =
|
|
4410
|
+
let e = wi(S, Ke, w, D, O).w.toVar();
|
|
4427
4411
|
N(e.greaterThan(0), () => {
|
|
4428
4412
|
n.assign(Xr({
|
|
4429
4413
|
pdf1: xe,
|
|
4430
4414
|
pdf2: e
|
|
4431
4415
|
}));
|
|
4432
4416
|
});
|
|
4433
|
-
}), _e.addAssign(
|
|
4417
|
+
}), _e.addAssign(Jo({
|
|
4434
4418
|
contribution: t.xyz.mul(ve).mul(r).mul(n),
|
|
4435
4419
|
pathLength: z(e),
|
|
4436
4420
|
fireflyThreshold: ae,
|
|
@@ -4443,10 +4427,10 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4443
4427
|
});
|
|
4444
4428
|
let qe = Tr.wrap(ai(P.materialIndex, o)).toVar(), Je = P.uv.toVar(), Ye = P.normal.toVar();
|
|
4445
4429
|
N(qe.displacementMapIndex.greaterThanEqual(B(0)).and(qe.displacementScale.greaterThan(0)), () => {
|
|
4446
|
-
let t =
|
|
4430
|
+
let t = Ui.wrap(Wi(te, P, a, p, qe, e)).toVar();
|
|
4447
4431
|
Je.assign(t.uv), Ye.assign(t.normal), P.hitPoint.assign(t.hitPoint);
|
|
4448
4432
|
});
|
|
4449
|
-
let Xe = jr.wrap(
|
|
4433
|
+
let Xe = jr.wrap(Ii(s, c, l, u, d, f, qe, Je, P.normal)).toVar();
|
|
4450
4434
|
qe.color.assign(Xe.albedo), qe.metalness.assign(L(Xe.metalness, 0, 1)), qe.roughness.assign(L(Xe.roughness, Hr, 1));
|
|
4451
4435
|
let Ze = Xe.normal.toVar();
|
|
4452
4436
|
N(qe.displacementMapIndex.greaterThanEqual(B(0)).and(qe.displacementScale.greaterThan(0)), () => {
|
|
@@ -4460,11 +4444,11 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4460
4444
|
}).ElseIf(De.equal(B(3)), () => {
|
|
4461
4445
|
Qe.assign(Ae), $e.assign(ke);
|
|
4462
4446
|
});
|
|
4463
|
-
let tt =
|
|
4447
|
+
let tt = va.wrap(Ea(te, P.hitPoint, Ze, qe, t, Me, Qe, $e)).toVar();
|
|
4464
4448
|
N(tt.continueRay, () => {
|
|
4465
4449
|
let e = I(!1).toVar();
|
|
4466
4450
|
N(tt.isTransmissive.and(Me.greaterThan(B(0))), () => {
|
|
4467
|
-
Me.subAssign(1), Ne.assign(B(
|
|
4451
|
+
Me.subAssign(1), Ne.assign(B(Bo)), e.assign(I(!0)), N(tt.didReflect.not(), () => {
|
|
4468
4452
|
N(tt.entering, () => {
|
|
4469
4453
|
N(De.lessThan(B(3)), () => {
|
|
4470
4454
|
De.addAssign(1), N(De.equal(B(1)), () => {
|
|
@@ -4495,52 +4479,52 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4495
4479
|
}), be.assign(I(!0));
|
|
4496
4480
|
let nt = ln(me, n, e, t, B(-1), he, ge).toVar(), rt = Ke.negate().toVar();
|
|
4497
4481
|
qe.sheenRoughness.assign(L(qe.sheenRoughness, Hr, 1)), N(Le.not(), () => {
|
|
4498
|
-
We.assign(
|
|
4482
|
+
We.assign(ua(Ze, rt, qe, Xe, Be)), Le.assign(I(!0));
|
|
4499
4483
|
});
|
|
4500
4484
|
let it = J(0).toVar(), at = J(0).toVar(), H = z(0).toVar();
|
|
4501
4485
|
N(qe.clearcoat.greaterThan(0), () => {
|
|
4502
|
-
let e =
|
|
4486
|
+
let e = ka.wrap(Aa(te, P, qe, nt, t));
|
|
4503
4487
|
it.assign(e.L), at.assign(e.brdf), H.assign(e.pdf);
|
|
4504
4488
|
}).Else(() => {
|
|
4505
|
-
let e = Dr.wrap(
|
|
4489
|
+
let e = Dr.wrap(Wo(rt, Ze, qe, P.materialIndex, nt, t, Ie, ze, Be, Fe, Ue, Le, We));
|
|
4506
4490
|
it.assign(e.direction), at.assign(e.value), H.assign(e.pdf), N(ze.notEqual(P.materialIndex).or(Ie.not()), () => {
|
|
4507
4491
|
Be.assign(ni(qe.metalness, qe.roughness, qe.transmission, qe.clearcoat, qe.emissive));
|
|
4508
4492
|
}), Ie.assign(I(!0)), ze.assign(P.materialIndex), Fe.assign(I(!0));
|
|
4509
4493
|
}), N(et(Xe.emissive).greaterThan(0), () => {
|
|
4510
4494
|
let t = z(1).toVar();
|
|
4511
4495
|
N(ce.equal(B(1)).and(ue.greaterThan(B(0))).and(xe.greaterThan(0)), () => {
|
|
4512
|
-
let e =
|
|
4496
|
+
let e = ko(P.triangleIndex, P.dst, Ke, Ge, a, o, de);
|
|
4513
4497
|
t.assign(Xr({
|
|
4514
4498
|
pdf1: xe,
|
|
4515
4499
|
pdf2: e
|
|
4516
4500
|
}));
|
|
4517
|
-
}), _e.addAssign(
|
|
4501
|
+
}), _e.addAssign(Jo({
|
|
4518
4502
|
contribution: Xe.emissive.mul(ve).mul(r).mul(t),
|
|
4519
4503
|
pathLength: z(e),
|
|
4520
4504
|
fireflyThreshold: ae,
|
|
4521
4505
|
frame: B(ge)
|
|
4522
4506
|
}));
|
|
4523
4507
|
});
|
|
4524
|
-
let ot =
|
|
4525
|
-
_e.addAssign(
|
|
4508
|
+
let ot = ao(P.hitPoint, Ze, qe, rt, it, H, at, n, e, t, m, h, g, _, v, y, b, x, i, a, o, S, C, w, T, E, D, O, k);
|
|
4509
|
+
_e.addAssign(Jo({
|
|
4526
4510
|
contribution: ot.mul(ve).mul(r),
|
|
4527
4511
|
pathLength: z(e),
|
|
4528
4512
|
fireflyThreshold: ae,
|
|
4529
4513
|
frame: B(ge)
|
|
4530
4514
|
})), N(ce.equal(B(1)).and(ue.greaterThan(B(0))), () => {
|
|
4531
|
-
let n = M(([e, t, n, r]) =>
|
|
4515
|
+
let n = M(([e, t, n, r]) => Ka(e, t, n, r, yi, i, a, o));
|
|
4532
4516
|
N(pe.greaterThan(B(0)), () => {
|
|
4533
|
-
let i =
|
|
4517
|
+
let i = po.wrap(Lo(P.hitPoint, Ze, t, fe, le, a));
|
|
4534
4518
|
N(e.greaterThan(B(1)).and(qe.roughness.greaterThan(.9)).and(qe.metalness.lessThan(.1)).not().and(i.valid).and(i.pdf.greaterThan(0)), () => {
|
|
4535
4519
|
let a = V(z(0), R(Ze, i.direction));
|
|
4536
4520
|
N(a.greaterThan(0), () => {
|
|
4537
|
-
let o =
|
|
4521
|
+
let o = qa(P.hitPoint, Ze, qe), s = P.hitPoint.add(o), c = i.distance.sub(.001), l = n(s, i.direction, c, t);
|
|
4538
4522
|
N(l.greaterThan(0), () => {
|
|
4539
|
-
let t =
|
|
4523
|
+
let t = Da(rt, i.direction, Ze, qe), n = io(rt, i.direction, Ze, qe), o = W(n.greaterThan(0), Xr({
|
|
4540
4524
|
pdf1: i.pdf,
|
|
4541
4525
|
pdf2: n
|
|
4542
4526
|
}), z(1)), s = i.emission.mul(t).mul(a).div(i.pdf).mul(l).mul(j).mul(o);
|
|
4543
|
-
_e.addAssign(
|
|
4527
|
+
_e.addAssign(Jo({
|
|
4544
4528
|
contribution: s.mul(ve).mul(r),
|
|
4545
4529
|
pathLength: z(e),
|
|
4546
4530
|
fireflyThreshold: ae,
|
|
@@ -4550,8 +4534,8 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4550
4534
|
});
|
|
4551
4535
|
});
|
|
4552
4536
|
}).Else(() => {
|
|
4553
|
-
let i =
|
|
4554
|
-
_e.addAssign(
|
|
4537
|
+
let i = No(P.hitPoint, Ze, rt, qe, se, e, t, j, le, ue, de, a, n, Da, qa);
|
|
4538
|
+
_e.addAssign(Jo({
|
|
4555
4539
|
contribution: i.mul(ve).mul(r),
|
|
4556
4540
|
pathLength: z(e),
|
|
4557
4541
|
fireflyThreshold: ae,
|
|
@@ -4559,23 +4543,23 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4559
4543
|
}));
|
|
4560
4544
|
});
|
|
4561
4545
|
}), N(Fe.not().or(e.equal(B(0))), () => {
|
|
4562
|
-
Be.assign(Mr.wrap(
|
|
4546
|
+
Be.assign(Mr.wrap(Uo(qe, P.materialIndex, Ie, ze, Be))), Ie.assign(I(!0)), ze.assign(P.materialIndex);
|
|
4563
4547
|
});
|
|
4564
|
-
let st = kr.wrap(
|
|
4548
|
+
let st = kr.wrap(la(qe, e, Be, C, A, k)), ct = Ia.wrap(fo(rt, Ze, qe, it, H, at, n, e, t, st, S, C, w, T, E, D, O, k, A));
|
|
4565
4549
|
ve.mulAssign(ct.throughput), Ge.assign(P.hitPoint.add(Ze.mul(.001))), Ke.assign(ct.direction), xe.assign(ct.combinedPdf), Pe.assign(I(!1)), N(qe.metalness.greaterThan(.7).and(qe.roughness.lessThan(.3)), () => {
|
|
4566
|
-
Ne.assign(B(
|
|
4550
|
+
Ne.assign(B(zo));
|
|
4567
4551
|
}).ElseIf(qe.transmission.greaterThan(.5), () => {
|
|
4568
|
-
Ne.assign(B(
|
|
4552
|
+
Ne.assign(B(Bo));
|
|
4569
4553
|
}).Else(() => {
|
|
4570
|
-
Ne.assign(B(
|
|
4554
|
+
Ne.assign(B(Vo));
|
|
4571
4555
|
}), N(e.equal(B(0)).and(P.didHit), () => {
|
|
4572
4556
|
Se.assign(Ze), Ce.assign(qe.color.xyz), we.assign(z(P.materialIndex)), Te.assign(P.hitPoint), Ee.assign(P.dst);
|
|
4573
4557
|
});
|
|
4574
|
-
let lt =
|
|
4558
|
+
let lt = Ko(e, ve, qe, P.materialIndex, Ke, t, Ie, ze, Be, Fe, Re, k, A);
|
|
4575
4559
|
N(lt.lessThanEqual(0), () => {
|
|
4576
4560
|
Ve();
|
|
4577
4561
|
}), ve.divAssign(lt), F.addAssign(1), Fe.assign(I(!1)), Le.assign(I(!1));
|
|
4578
|
-
}),
|
|
4562
|
+
}), Ho({
|
|
4579
4563
|
radiance: Y(_e, ye),
|
|
4580
4564
|
objectNormal: Se,
|
|
4581
4565
|
objectColor: Ce,
|
|
@@ -4583,11 +4567,11 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4583
4567
|
firstHitPoint: Te,
|
|
4584
4568
|
firstHitDistance: Ee
|
|
4585
4569
|
});
|
|
4586
|
-
}),
|
|
4570
|
+
}), Xo = /* @__PURE__ */ X("\n fn visualizeDepth( depth: f32 ) -> vec3f {\n return vec3f( 1.0f - depth );\n }\n"), Zo = /* @__PURE__ */ X("\n fn visualizeNormal( normal: vec3f ) -> vec3f {\n return normal * 0.5f + 0.5f;\n }\n"), Qo = /* @__PURE__ */ X("\n fn computeNDCDepthLocal( worldPos: vec3f, cameraProjectionMatrix: mat4x4f, cameraViewMatrix: mat4x4f ) -> f32 {\n let clipPos = cameraProjectionMatrix * cameraViewMatrix * vec4f( worldPos, 1.0f );\n let ndcDepth = clipPos.z / clipPos.w * 0.5f + 0.5f;\n return clamp( ndcDepth, 0.0f, 1.0f );\n }\n"), $o = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x]) => {
|
|
4587
4571
|
let S = Y(1, 0, 1, 1).toVar(), C = wr({
|
|
4588
4572
|
origin: e,
|
|
4589
4573
|
direction: t
|
|
4590
|
-
}), w = Er.wrap(
|
|
4574
|
+
}), w = Er.wrap(vi(C, n, r, i).toVar());
|
|
4591
4575
|
return N(l.equal(B(7)), () => {
|
|
4592
4576
|
let e = z(w.triTests).div(u);
|
|
4593
4577
|
S.assign(W(e.lessThan(1), Y(J(e), 1), Y(1, 0, 0, 1)));
|
|
@@ -4596,7 +4580,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4596
4580
|
S.assign(W(e.lessThan(1), Y(J(e), 1), Y(1, 0, 0, 1)));
|
|
4597
4581
|
}), N(l.equal(B(10)), () => {
|
|
4598
4582
|
N(c, () => {
|
|
4599
|
-
let e =
|
|
4583
|
+
let e = Ei({
|
|
4600
4584
|
tex: a,
|
|
4601
4585
|
samp: dt(a),
|
|
4602
4586
|
direction: t,
|
|
@@ -4631,7 +4615,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4631
4615
|
N(w.didHit.not(), () => {
|
|
4632
4616
|
S.assign(Y(0, 0, 0, 1));
|
|
4633
4617
|
}).Else(() => {
|
|
4634
|
-
let t = Tr.wrap(ai(w.materialIndex, i)).toVar(), n = jr.wrap(
|
|
4618
|
+
let t = Tr.wrap(ai(w.materialIndex, i)).toVar(), n = jr.wrap(Ii(p, m, h, g, _, v, t, w.uv, w.normal)).toVar().emissive.toVar(), r = et(n).toVar();
|
|
4635
4619
|
N(r.greaterThan(0), () => {
|
|
4636
4620
|
let t = n.div(V(r.mul(.1), .001)).toVar(), i = et(e.sub(w.hitPoint)), a = L(z(1).sub(i.div(10)), 0, 1), o = H(t, t.mul(J(1, .8, .6)), a.mul(.3));
|
|
4637
4621
|
S.assign(Y(o, 1));
|
|
@@ -4643,41 +4627,41 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4643
4627
|
N(w.didHit.not(), () => {
|
|
4644
4628
|
S.assign(Y(.5, .5, 1, 1));
|
|
4645
4629
|
}).Else(() => {
|
|
4646
|
-
let e = Tr.wrap(ai(w.materialIndex, i)).toVar(), t = U(jr.wrap(
|
|
4647
|
-
S.assign(Y(
|
|
4630
|
+
let e = Tr.wrap(ai(w.materialIndex, i)).toVar(), t = U(jr.wrap(Ii(p, m, h, g, _, v, e, w.uv, w.normal)).toVar().normal);
|
|
4631
|
+
S.assign(Y(Zo({ normal: t }), 1));
|
|
4648
4632
|
});
|
|
4649
4633
|
}), N(l.equal(B(2)), () => {
|
|
4650
4634
|
N(w.didHit.not(), () => {
|
|
4651
4635
|
S.assign(Y(J(1), 1));
|
|
4652
4636
|
}).Else(() => {
|
|
4653
|
-
let e =
|
|
4637
|
+
let e = Qo({
|
|
4654
4638
|
worldPos: w.hitPoint,
|
|
4655
4639
|
cameraProjectionMatrix: y,
|
|
4656
4640
|
cameraViewMatrix: b
|
|
4657
4641
|
});
|
|
4658
|
-
S.assign(Y(
|
|
4642
|
+
S.assign(Y(Xo({ depth: e }), 1));
|
|
4659
4643
|
});
|
|
4660
4644
|
}), N(l.equal(B(3)), () => {
|
|
4661
4645
|
N(w.didHit.not(), () => {
|
|
4662
4646
|
S.assign(Y(0, 0, 0, 1));
|
|
4663
4647
|
}).Else(() => {
|
|
4664
|
-
let e = Tr.wrap(ai(w.materialIndex, i)).toVar(), t = jr.wrap(
|
|
4648
|
+
let e = Tr.wrap(ai(w.materialIndex, i)).toVar(), t = jr.wrap(Ii(p, m, h, g, _, v, e, w.uv, w.normal)).toVar().albedo.rgb;
|
|
4665
4649
|
S.assign(Y(t, 1));
|
|
4666
4650
|
});
|
|
4667
4651
|
}), N(l.equal(B(5)), () => {
|
|
4668
4652
|
N(w.didHit.not(), () => {
|
|
4669
4653
|
S.assign(Y(0, 0, 0, 1));
|
|
4670
4654
|
}).Else(() => {
|
|
4671
|
-
let e = Tr.wrap(ai(w.materialIndex, i)).toVar(), t = jr.wrap(
|
|
4655
|
+
let e = Tr.wrap(ai(w.materialIndex, i)).toVar(), t = jr.wrap(Ii(p, m, h, g, _, v, e, w.uv, w.normal)).toVar(), l = t.albedo.rgb.toVar(), u = U(t.normal).toVar(), f = Xt({ state: Zt({ seed: G(d.x).mul(G(1973)).add(G(d.y).mul(G(9277))).add(x.mul(G(26699))) }) }).toVar(), y = pa({
|
|
4672
4656
|
N: u,
|
|
4673
4657
|
xi: q($t(f).toVar(), $t(f).toVar()).toVar()
|
|
4674
4658
|
}).toVar(), b = wr({
|
|
4675
4659
|
origin: w.hitPoint.add(u.mul(.001)).toVar(),
|
|
4676
4660
|
direction: y
|
|
4677
|
-
}), C = Er.wrap(
|
|
4661
|
+
}), C = Er.wrap(vi(b, n, r, i).toVar()), T = J(0).toVar();
|
|
4678
4662
|
N(C.didHit.not(), () => {
|
|
4679
4663
|
N(c, () => {
|
|
4680
|
-
T.assign(
|
|
4664
|
+
T.assign(Ei({
|
|
4681
4665
|
tex: a,
|
|
4682
4666
|
samp: dt(a),
|
|
4683
4667
|
direction: y,
|
|
@@ -4687,9 +4671,9 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4687
4671
|
}).xyz);
|
|
4688
4672
|
});
|
|
4689
4673
|
}).Else(() => {
|
|
4690
|
-
let e = Tr.wrap(ai(C.materialIndex, i)).toVar(), t = jr.wrap(
|
|
4674
|
+
let e = Tr.wrap(ai(C.materialIndex, i)).toVar(), t = jr.wrap(Ii(p, m, h, g, _, v, e, C.uv, C.normal)).toVar();
|
|
4691
4675
|
T.assign(t.emissive), N(c, () => {
|
|
4692
|
-
let e = U(t.normal).toVar(), n =
|
|
4676
|
+
let e = U(t.normal).toVar(), n = Ei({
|
|
4693
4677
|
tex: a,
|
|
4694
4678
|
samp: dt(a),
|
|
4695
4679
|
direction: e,
|
|
@@ -4705,7 +4689,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4705
4689
|
});
|
|
4706
4690
|
}), N(l.equal(B(6)), () => {
|
|
4707
4691
|
N(w.didHit, () => {
|
|
4708
|
-
let e = w.normal.toVar(), n = U(t.sub(e.mul(R(t, e).mul(2)))).toVar(), r =
|
|
4692
|
+
let e = w.normal.toVar(), n = U(t.sub(e.mul(R(t, e).mul(2)))).toVar(), r = Ei({
|
|
4709
4693
|
tex: a,
|
|
4710
4694
|
samp: dt(a),
|
|
4711
4695
|
direction: n,
|
|
@@ -4715,7 +4699,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4715
4699
|
}).xyz, i = r.div(r.add(1));
|
|
4716
4700
|
S.assign(Y(i, 1));
|
|
4717
4701
|
}).Else(() => {
|
|
4718
|
-
let e =
|
|
4702
|
+
let e = Ei({
|
|
4719
4703
|
tex: a,
|
|
4720
4704
|
samp: dt(a),
|
|
4721
4705
|
direction: t,
|
|
@@ -4731,7 +4715,7 @@ M(([e, t]) => {
|
|
|
4731
4715
|
let n = $t(t), r = J(.25 / 255, -.25 / 255, .25 / 255).toVar();
|
|
4732
4716
|
return r.assign(H(r.mul(2), r.mul(-2), n)), e.add(r);
|
|
4733
4717
|
});
|
|
4734
|
-
var
|
|
4718
|
+
var es = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjectionMatrix: mat4x4f, cameraViewMatrix: mat4x4f ) -> f32 {\n let clipPos = cameraProjectionMatrix * cameraViewMatrix * vec4f( worldPos, 1.0f );\n let ndcDepth = clipPos.z / clipPos.w * 0.5f + 0.5f;\n return clamp( ndcDepth, 0.0f, 1.0f );\n }\n"), ts = M(([e, t, n, r, i]) => {
|
|
4735
4719
|
let a = vt(n, e.div(t), 0), o = B(0).toVar();
|
|
4736
4720
|
return N(a.b.greaterThan(.5), () => {
|
|
4737
4721
|
o.assign(0);
|
|
@@ -4739,7 +4723,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4739
4723
|
let e = B(Ze(a.r.mul(z(i)).add(.5)));
|
|
4740
4724
|
o.assign(L(e, r, i));
|
|
4741
4725
|
}), o;
|
|
4742
|
-
}),
|
|
4726
|
+
}), ns = (e) => {
|
|
4743
4727
|
let { pixelCoord: t, writeColorTex: n, writeNDTex: r, writeAlbedoTex: i, resolution: a, frame: o, samplesPerPixel: s, visMode: c, cameraWorldMatrix: l, cameraProjectionMatrixInverse: u, cameraViewMatrix: d, cameraProjectionMatrix: f, bvhBuffer: p, triangleBuffer: m, materialBuffer: h, albedoMaps: g, normalMaps: _, bumpMaps: v, metalnessMaps: y, roughnessMaps: b, emissiveMaps: x, displacementMaps: S, directionalLightsBuffer: C, numDirectionalLights: w, areaLightsBuffer: T, numAreaLights: E, pointLightsBuffer: D, numPointLights: O, spotLightsBuffer: k, numSpotLights: A, envTexture: ee, environmentIntensity: te, envMatrix: ne, envMarginalWeights: re, envConditionalWeights: ie, envTotalSum: ae, envResolution: oe, enableEnvironmentLight: se, useEnvMapIS: ce, maxBounceCount: le, transmissiveBounces: ue, showBackground: de, transparentBackground: j, backgroundIntensity: fe, fireflyThreshold: pe, globalIlluminationIntensity: me, totalTriangleCount: he, enableEmissiveTriangleSampling: ge, emissiveTriangleBuffer: _e, emissiveTriangleCount: ve, emissiveTotalPower: ye, emissiveBoost: be, lightBVHBuffer: xe, lightBVHNodeCount: Se, debugVisScale: Ce, enableAccumulation: we, hasPreviousAccumulated: Te, prevAccumTexture: Ee, prevNormalDepthTexture: De, prevAlbedoTexture: Oe, accumulationAlpha: ke, cameraIsMoving: Ae, useAdaptiveSampling: je, adaptiveSamplingTexture: Me, adaptiveSamplingMin: Ne, adaptiveSamplingMax: Pe, enableDOF: Fe, focalLength: Ie, aperture: Le, focusDistance: Re, sceneScale: ze, apertureScale: Be, anamorphicRatio: He } = e, M = wt(G(B(t.x)), G(B(t.y))), Ue = t.div(a), We = t.div(a).mul(2).sub(1).toVar();
|
|
4744
4728
|
We.y.assign(We.y.negate());
|
|
4745
4729
|
let F = Y(0).toVar(), Ge = B(0).toVar(), Ke = dn({
|
|
@@ -4748,7 +4732,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4748
4732
|
frame: o
|
|
4749
4733
|
}).toVar(), qe = B(t.y).mul(B(a.x)).add(B(t.x)).toVar(), I = J(0, 0, 1).toVar(), L = z(1).toVar(), Je = z(0).toVar(), Ye = B(s).toVar();
|
|
4750
4734
|
N(o.greaterThan(G(2)).and(je), () => {
|
|
4751
|
-
let e =
|
|
4735
|
+
let e = ts(t, a, Me, Ne, Pe);
|
|
4752
4736
|
Ye.assign(e), N(Ye.equal(B(0)), () => {
|
|
4753
4737
|
N(we.and(Te), () => {
|
|
4754
4738
|
let e = vt(Ee, Ue, 0);
|
|
@@ -4771,14 +4755,14 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4771
4755
|
N(c.equal(B(9)), () => {
|
|
4772
4756
|
F.assign(Y(r, 1, 1)), Ge.assign(1), Ve();
|
|
4773
4757
|
});
|
|
4774
|
-
let i = r.sub(.5).mul(Qe), s = We.add(i), we = wr.wrap(
|
|
4758
|
+
let i = r.sub(.5).mul(Qe), s = We.add(i), we = wr.wrap(bi(s, n, l, u, Fe, Ie, Le, Re, ze, Be, He)), Te = Y(0).toVar();
|
|
4775
4759
|
N(c.greaterThan(B(0)), () => {
|
|
4776
|
-
Te.assign(
|
|
4760
|
+
Te.assign($o(we.origin, we.direction, p, m, h, ee, ne, te, se, c, Ce, t, a, g, _, v, y, b, x, f, d, o));
|
|
4777
4761
|
}).Else(() => {
|
|
4778
|
-
let r =
|
|
4762
|
+
let r = Ho.wrap(Yo(we, n, e, qe, p, m, h, g, _, v, y, b, x, S, C, w, T, E, D, O, k, A, ee, te, ne, re, ie, ae, oe, se, ce, le, ue, fe, de, j, pe, me, he, ge, _e, ve, ye, be, xe, Se, t, a, o));
|
|
4779
4763
|
Te.assign(r.radiance), N(e.equal(B(0)), () => {
|
|
4780
4764
|
R.assign(r.objectNormal), Xe.assign(r.objectColor), Ze.assign(r.objectID), N(r.firstHitDistance.lessThan(1e9), () => {
|
|
4781
|
-
I.assign(U(r.objectNormal)), L.assign(
|
|
4765
|
+
I.assign(U(r.objectNormal)), L.assign(es({
|
|
4782
4766
|
worldPos: r.firstHitPoint,
|
|
4783
4767
|
cameraProjectionMatrix: f,
|
|
4784
4768
|
cameraViewMatrix: d
|
|
@@ -4796,7 +4780,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4796
4780
|
nt.assign(H(e.w, Je, ke));
|
|
4797
4781
|
});
|
|
4798
4782
|
}), xt(n, M, Y($e.xyz, nt)).toWriteOnly(), xt(r, M, et).toWriteOnly(), xt(i, M, Y(tt, 1)).toWriteOnly();
|
|
4799
|
-
},
|
|
4783
|
+
}, rs = class {
|
|
4800
4784
|
constructor(e = "Build") {
|
|
4801
4785
|
this.label = e, this.entries = /* @__PURE__ */ new Map(), this.order = [], this.totalStart = performance.now();
|
|
4802
4786
|
}
|
|
@@ -4823,17 +4807,17 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4823
4807
|
total: Math.round(e)
|
|
4824
4808
|
};
|
|
4825
4809
|
}
|
|
4826
|
-
},
|
|
4810
|
+
}, is = 8, as = class {
|
|
4827
4811
|
constructor() {
|
|
4828
4812
|
this.computeNode = null, this.prevColorTexNode = null, this.prevNormalDepthTexNode = null, this.prevAlbedoTexNode = null, this.adaptiveSamplingTexNode = null, this.tileOffsetX = K(0, "int"), this.tileOffsetY = K(0, "int"), this.renderWidth = K(1920, "int"), this.renderHeight = K(1080, "int"), this._dispatchX = 0, this._dispatchY = 0, this._sceneTextureNodes = null;
|
|
4829
4813
|
}
|
|
4830
4814
|
setupCompute(e) {
|
|
4831
|
-
let { stage: t, storageTextures: n } = e, r = new
|
|
4815
|
+
let { stage: t, storageTextures: n } = e, r = new rs("setupCompute");
|
|
4832
4816
|
r.start("Create texture nodes");
|
|
4833
4817
|
let i = this._createTextureNodes(t, n);
|
|
4834
4818
|
r.end("Create texture nodes"), r.start("Build compute node (TSL)");
|
|
4835
4819
|
let a = n.renderWidth, o = n.renderHeight;
|
|
4836
|
-
this._dispatchX = Math.ceil(a /
|
|
4820
|
+
this._dispatchX = Math.ceil(a / is), this._dispatchY = Math.ceil(o / is), this.renderWidth.value = a, this.renderHeight.value = o;
|
|
4837
4821
|
let s = n.getWriteTextures();
|
|
4838
4822
|
this.computeNode = this._buildComputeNode(t, i, s.color, s.normalDepth, s.albedo), r.end("Build compute node (TSL)"), r.print();
|
|
4839
4823
|
}
|
|
@@ -4845,7 +4829,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4845
4829
|
return this._sceneTextureNodes;
|
|
4846
4830
|
}
|
|
4847
4831
|
setSize(e, t) {
|
|
4848
|
-
this._dispatchX = Math.ceil(e /
|
|
4832
|
+
this._dispatchX = Math.ceil(e / is), this._dispatchY = Math.ceil(t / is), this.computeNode && this.computeNode.setCount([
|
|
4849
4833
|
this._dispatchX,
|
|
4850
4834
|
this._dispatchY,
|
|
4851
4835
|
1
|
|
@@ -4853,7 +4837,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4853
4837
|
}
|
|
4854
4838
|
setTileDispatch(e, t, n, r) {
|
|
4855
4839
|
this.tileOffsetX.value = e, this.tileOffsetY.value = t;
|
|
4856
|
-
let i = Math.ceil(n /
|
|
4840
|
+
let i = Math.ceil(n / is), a = Math.ceil(r / is);
|
|
4857
4841
|
this.computeNode && this.computeNode.setCount([
|
|
4858
4842
|
i,
|
|
4859
4843
|
a,
|
|
@@ -4869,7 +4853,9 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4869
4853
|
}
|
|
4870
4854
|
forceCompile() {}
|
|
4871
4855
|
_createTextureNodes(e, t) {
|
|
4872
|
-
let n = e.triangleStorageNode, r = e.bvhStorageNode, i = e.materialData.materialStorageNode, a = e.emissiveTriangleStorageNode, s = e.lightBVHStorageNode
|
|
4856
|
+
let n = e.triangleStorageNode, r = e.bvhStorageNode, i = e.materialData.materialStorageNode, a = e.emissiveTriangleStorageNode, s = e.lightBVHStorageNode;
|
|
4857
|
+
pi(e.meshVisibilityStorageNode);
|
|
4858
|
+
let c = vt(e.environment.environmentTexture), l = new o();
|
|
4873
4859
|
this.adaptiveSamplingTexNode = l;
|
|
4874
4860
|
let u = e.environment.envMarginalStorageNode, d = e.environment.envConditionalStorageNode, f = t.getReadTextures();
|
|
4875
4861
|
this.prevColorTexNode = vt(f.color), this.prevNormalDepthTexNode = vt(f.normalDepth), this.prevAlbedoTexNode = vt(f.albedo);
|
|
@@ -4904,9 +4890,9 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4904
4890
|
_buildComputeNode(e, t, n, r, i) {
|
|
4905
4891
|
let { triStorage: a, bvhStorage: o, matStorage: s, emissiveTriStorage: c, lightBVHStorage: l, envTex: u, adaptiveSamplingTex: d, marginalCDFStorage: f, conditionalCDFStorage: p, albedoMapsTex: m, normalMapsTex: h, bumpMapsTex: g, metalnessMapsTex: _, roughnessMapsTex: v, emissiveMapsTex: y, displacementMapsTex: b } = t, x = this.tileOffsetX, S = this.tileOffsetY, C = this.renderWidth, w = this.renderHeight, T = this.prevColorTexNode, E = this.prevNormalDepthTexNode, D = this.prevAlbedoTexNode;
|
|
4906
4892
|
return M(() => {
|
|
4907
|
-
let t = x.add(B(Dt.x).mul(
|
|
4893
|
+
let t = x.add(B(Dt.x).mul(is)).add(B(nt.x)), O = S.add(B(Dt.y).mul(is)).add(B(nt.y));
|
|
4908
4894
|
N(t.lessThan(C).and(O.lessThan(w)), () => {
|
|
4909
|
-
|
|
4895
|
+
ns({
|
|
4910
4896
|
pixelCoord: q(z(t).add(.5), z(O).add(.5)),
|
|
4911
4897
|
writeColorTex: n,
|
|
4912
4898
|
writeNDTex: r,
|
|
@@ -4987,15 +4973,15 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4987
4973
|
this._dispatchY,
|
|
4988
4974
|
1
|
|
4989
4975
|
], [
|
|
4990
|
-
|
|
4991
|
-
|
|
4976
|
+
is,
|
|
4977
|
+
is,
|
|
4992
4978
|
1
|
|
4993
4979
|
]);
|
|
4994
4980
|
}
|
|
4995
4981
|
dispose() {
|
|
4996
4982
|
this.computeNode?.dispose(), this.computeNode = null, this.prevColorTexNode = null, this.prevNormalDepthTexNode = null, this.prevAlbedoTexNode = null, this.adaptiveSamplingTexNode = null, this._sceneTextureNodes = null;
|
|
4997
4983
|
}
|
|
4998
|
-
},
|
|
4984
|
+
}, os = class {
|
|
4999
4985
|
constructor(e, t) {
|
|
5000
4986
|
this.traversalCost = e, this.intersectionCost = t, this.maxTreeletLeaves = 7, this.minImprovement = .02, this.topologyCache = /* @__PURE__ */ new Map();
|
|
5001
4987
|
for (let e = 3; e <= this.maxTreeletLeaves; e++) this.topologyCache.set(e, this.generateTopologies(e));
|
|
@@ -5186,10 +5172,10 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5186
5172
|
}
|
|
5187
5173
|
buildSubtree(e, t, n) {
|
|
5188
5174
|
if (typeof e == "number") {
|
|
5189
|
-
let r = t[n[e]], i = new
|
|
5175
|
+
let r = t[n[e]], i = new ss();
|
|
5190
5176
|
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;
|
|
5191
5177
|
}
|
|
5192
|
-
let r = this.buildSubtree(e[0], t, n), i = this.buildSubtree(e[1], t, n), a = new
|
|
5178
|
+
let r = this.buildSubtree(e[0], t, n), i = this.buildSubtree(e[1], t, n), a = new ss();
|
|
5193
5179
|
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;
|
|
5194
5180
|
}
|
|
5195
5181
|
setTreeletSize(e) {
|
|
@@ -5203,11 +5189,11 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5203
5189
|
getStatistics() {
|
|
5204
5190
|
return { ...this.stats };
|
|
5205
5191
|
}
|
|
5206
|
-
},
|
|
5192
|
+
}, ss = class {
|
|
5207
5193
|
constructor() {
|
|
5208
5194
|
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;
|
|
5209
5195
|
}
|
|
5210
|
-
},
|
|
5196
|
+
}, cs = class {
|
|
5211
5197
|
constructor(e, t) {
|
|
5212
5198
|
this.traversalCost = e, this.intersectionCost = t, this.batchSizeRatio = .02, this.maxIterations = 2, this.timeBudgetMs = 15e3, this.stats = {
|
|
5213
5199
|
reinsertionsApplied: 0,
|
|
@@ -5372,7 +5358,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5372
5358
|
}
|
|
5373
5359
|
return this.stats.timeMs = performance.now() - n, this.stats;
|
|
5374
5360
|
}
|
|
5375
|
-
},
|
|
5361
|
+
}, ls = {
|
|
5376
5362
|
FLOATS_PER_TRIANGLE: 32,
|
|
5377
5363
|
POSITION_A_OFFSET: 0,
|
|
5378
5364
|
POSITION_B_OFFSET: 4,
|
|
@@ -5382,11 +5368,11 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5382
5368
|
NORMAL_C_OFFSET: 20,
|
|
5383
5369
|
UV_AB_OFFSET: 24,
|
|
5384
5370
|
UV_C_MAT_OFFSET: 28
|
|
5385
|
-
},
|
|
5371
|
+
}, us = ls.FLOATS_PER_TRIANGLE, ds = class {
|
|
5386
5372
|
constructor() {
|
|
5387
5373
|
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;
|
|
5388
5374
|
}
|
|
5389
|
-
},
|
|
5375
|
+
}, fs = class {
|
|
5390
5376
|
constructor() {
|
|
5391
5377
|
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 = {
|
|
5392
5378
|
sahSplits: 0,
|
|
@@ -5446,9 +5432,9 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5446
5432
|
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)));
|
|
5447
5433
|
}
|
|
5448
5434
|
initializeTriangleArrays() {
|
|
5449
|
-
let e = this.totalTriangles, t = this.triangles, n =
|
|
5435
|
+
let e = this.totalTriangles, t = this.triangles, n = ls.POSITION_A_OFFSET, r = ls.POSITION_B_OFFSET, i = ls.POSITION_C_OFFSET;
|
|
5450
5436
|
for (let a = 0; a < e; a++) {
|
|
5451
|
-
let e = a *
|
|
5437
|
+
let e = a * us, o = t[e + n], s = t[e + n + 1], c = t[e + n + 2], l = t[e + r], u = t[e + r + 1], d = t[e + r + 2], f = t[e + i], p = t[e + i + 1], m = t[e + i + 2], h = a * 3;
|
|
5452
5438
|
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;
|
|
5453
5439
|
}
|
|
5454
5440
|
}
|
|
@@ -5493,7 +5479,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5493
5479
|
this.splitStats.mortonSortTime += performance.now() - t;
|
|
5494
5480
|
}
|
|
5495
5481
|
build(e, t = 30, n = null) {
|
|
5496
|
-
return this.totalTriangles = e.byteLength / (
|
|
5482
|
+
return this.totalTriangles = e.byteLength / (us * 4), this.processedTriangles = 0, this.lastProgressUpdate = performance.now(), this.useWorker && typeof Worker < "u" ? new Promise((r, i) => {
|
|
5497
5483
|
try {
|
|
5498
5484
|
let a = new Worker(new URL(
|
|
5499
5485
|
/* @vite-ignore */
|
|
@@ -5501,7 +5487,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5501
5487
|
"" + import.meta.url
|
|
5502
5488
|
), { type: "module" }), o = this.totalTriangles, s = typeof SharedArrayBuffer < "u";
|
|
5503
5489
|
console.log(`[BVHBuilder] SharedArrayBuffer: ${s ? "enabled" : "unavailable (using transfer fallback)"}`);
|
|
5504
|
-
let c = s ? new SharedArrayBuffer(o *
|
|
5490
|
+
let c = s ? new SharedArrayBuffer(o * us * 4) : null;
|
|
5505
5491
|
a.onmessage = (e) => {
|
|
5506
5492
|
let { bvhData: t, triangles: o, originalToBvh: s, error: l, progress: u, treeletStats: d } = e.data;
|
|
5507
5493
|
if (l) {
|
|
@@ -5560,7 +5546,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5560
5546
|
}
|
|
5561
5547
|
buildSync(e, t = 30, n = null, r = null) {
|
|
5562
5548
|
let i = performance.now();
|
|
5563
|
-
this.totalNodes = 0, this.processedTriangles = 0, this.triangles = e, this.totalTriangles = e.byteLength / (
|
|
5549
|
+
this.totalNodes = 0, this.processedTriangles = 0, this.triangles = e, this.totalTriangles = e.byteLength / (us * 4), this.lastProgressUpdate = performance.now(), this.splitStats = {
|
|
5564
5550
|
sahSplits: 0,
|
|
5565
5551
|
objectMedianSplits: 0,
|
|
5566
5552
|
spatialMedianSplits: 0,
|
|
@@ -5585,7 +5571,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5585
5571
|
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();
|
|
5586
5572
|
let s = performance.now(), c = this.buildNodeRecursive(0, a, t, n);
|
|
5587
5573
|
if (this.splitStats.sahBuildTime = performance.now() - s, this.enableTreeletOptimization && this.totalTriangles > 1e3) {
|
|
5588
|
-
let e = this.totalTriangles > this.treeletComplexityThreshold, t = e ? 3 : this.treeletSize, r = e ? 10 : this.maxTreeletsPerScene, i = new
|
|
5574
|
+
let e = this.totalTriangles > this.treeletComplexityThreshold, t = e ? 3 : this.treeletSize, r = e ? 10 : this.maxTreeletsPerScene, i = new os(this.traversalCost, this.intersectionCost);
|
|
5589
5575
|
i.setTreeletSize(t), i.setMinImprovement(this.treeletMinImprovement), i.setMaxTreelets(r);
|
|
5590
5576
|
let a = performance.now();
|
|
5591
5577
|
for (let e = 0; e < this.treeletOptimizationPasses; e++) {
|
|
@@ -5607,7 +5593,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5607
5593
|
this.splitStats.treeletsProcessed = s.treeletsProcessed, this.splitStats.treeletsImproved = s.treeletsImproved, this.splitStats.averageSAHImprovement = s.averageSAHImprovement;
|
|
5608
5594
|
}
|
|
5609
5595
|
if (this.enableReinsertionOptimization && this.totalTriangles > 1e3) {
|
|
5610
|
-
let e = new
|
|
5596
|
+
let e = new cs(this.traversalCost, this.intersectionCost);
|
|
5611
5597
|
e.setBatchSizeRatio(this.reinsertionBatchSizeRatio), e.setMaxIterations(this.reinsertionMaxIterations);
|
|
5612
5598
|
let t = n ? (e) => {
|
|
5613
5599
|
n(e);
|
|
@@ -5622,10 +5608,10 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5622
5608
|
}
|
|
5623
5609
|
let l = performance.now();
|
|
5624
5610
|
this.applySAOrdering(c), this.splitStats.saOrderTime = performance.now() - l;
|
|
5625
|
-
let u = performance.now(), d = this.triangles, f = r || new Float32Array(a *
|
|
5611
|
+
let u = performance.now(), d = this.triangles, f = r || new Float32Array(a * us);
|
|
5626
5612
|
for (let e = 0; e < a; e++) {
|
|
5627
|
-
let t = this.indices[e] *
|
|
5628
|
-
f.set(d.subarray(t, t +
|
|
5613
|
+
let t = this.indices[e] * us, n = e * us;
|
|
5614
|
+
f.set(d.subarray(t, t + us), n);
|
|
5629
5615
|
}
|
|
5630
5616
|
this.reorderedTriangleData = f;
|
|
5631
5617
|
let p = new Uint32Array(a);
|
|
@@ -5641,7 +5627,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5641
5627
|
n - this.lastProgressUpdate < this.progressUpdateInterval || (this.lastProgressUpdate = n, t(Math.min(Math.floor(this.processedTriangles / this.totalTriangles * 100), 99)));
|
|
5642
5628
|
}
|
|
5643
5629
|
buildNodeRecursiveToDepth(e, t, n, r, i, a, o, s, c, l, u) {
|
|
5644
|
-
let d = new
|
|
5630
|
+
let d = new ds();
|
|
5645
5631
|
this.totalNodes++;
|
|
5646
5632
|
let f = t - e;
|
|
5647
5633
|
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;
|
|
@@ -5682,7 +5668,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5682
5668
|
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);
|
|
5683
5669
|
}
|
|
5684
5670
|
buildNodeRecursive(e, t, n, r, i, a, o, s, c, l) {
|
|
5685
|
-
let u = new
|
|
5671
|
+
let u = new ds();
|
|
5686
5672
|
this.totalNodes++;
|
|
5687
5673
|
let d = t - e;
|
|
5688
5674
|
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;
|
|
@@ -5980,7 +5966,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5980
5966
|
let o = r - e, s = i - t, c = a - n;
|
|
5981
5967
|
return 2 * (o * s + s * c + c * o);
|
|
5982
5968
|
}
|
|
5983
|
-
},
|
|
5969
|
+
}, ps = {
|
|
5984
5970
|
FLOATS_PER_TRIANGLE: 32,
|
|
5985
5971
|
POSITION_A_OFFSET: 0,
|
|
5986
5972
|
POSITION_B_OFFSET: 4,
|
|
@@ -5988,28 +5974,28 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5988
5974
|
NORMAL_A_OFFSET: 12,
|
|
5989
5975
|
NORMAL_B_OFFSET: 16,
|
|
5990
5976
|
NORMAL_C_OFFSET: 20
|
|
5991
|
-
},
|
|
5977
|
+
}, ms = ps.FLOATS_PER_TRIANGLE, hs = 16, gs = -1, _s = -2, vs = class {
|
|
5992
5978
|
constructor() {
|
|
5993
5979
|
this._bounds = null, this._boundsNodeCount = 0;
|
|
5994
5980
|
}
|
|
5995
5981
|
updateTrianglePositions(e, t, n) {
|
|
5996
5982
|
let r = n.length;
|
|
5997
5983
|
for (let i = 0; i < r; i++) {
|
|
5998
|
-
let r = n[i], a = i *
|
|
5999
|
-
e[a +
|
|
5984
|
+
let r = n[i], a = i * ms, o = r * 9, s = t[o], c = t[o + 1], l = t[o + 2], u = t[o + 3], d = t[o + 4], f = t[o + 5], p = t[o + 6], m = t[o + 7], h = t[o + 8];
|
|
5985
|
+
e[a + ps.POSITION_A_OFFSET] = s, e[a + ps.POSITION_A_OFFSET + 1] = c, e[a + ps.POSITION_A_OFFSET + 2] = l, e[a + ps.POSITION_B_OFFSET] = u, e[a + ps.POSITION_B_OFFSET + 1] = d, e[a + ps.POSITION_B_OFFSET + 2] = f, e[a + ps.POSITION_C_OFFSET] = p, e[a + ps.POSITION_C_OFFSET + 1] = m, e[a + ps.POSITION_C_OFFSET + 2] = h;
|
|
6000
5986
|
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;
|
|
6001
|
-
e[a +
|
|
5987
|
+
e[a + ps.NORMAL_A_OFFSET] = S, e[a + ps.NORMAL_A_OFFSET + 1] = C, e[a + ps.NORMAL_A_OFFSET + 2] = w, e[a + ps.NORMAL_B_OFFSET] = S, e[a + ps.NORMAL_B_OFFSET + 1] = C, e[a + ps.NORMAL_B_OFFSET + 2] = w, e[a + ps.NORMAL_C_OFFSET] = S, e[a + ps.NORMAL_C_OFFSET + 1] = C, e[a + ps.NORMAL_C_OFFSET + 2] = w;
|
|
6002
5988
|
}
|
|
6003
5989
|
}
|
|
6004
5990
|
refitRange(e, t, n, r) {
|
|
6005
5991
|
r > this._boundsNodeCount && (this._bounds = new Float32Array(r * 6), this._boundsNodeCount = r);
|
|
6006
5992
|
let i = this._bounds, a = n + r;
|
|
6007
5993
|
for (let r = a - 1; r >= n; r--) {
|
|
6008
|
-
let a = r *
|
|
6009
|
-
if (e[a + 3] ===
|
|
5994
|
+
let a = r * hs, o = (r - n) * 6;
|
|
5995
|
+
if (e[a + 3] === gs) {
|
|
6010
5996
|
let n = e[a], r = e[a + 1], s = Infinity, c = Infinity, l = Infinity, u = -Infinity, d = -Infinity, f = -Infinity;
|
|
6011
5997
|
for (let e = 0; e < r; e++) {
|
|
6012
|
-
let r = (n + e) *
|
|
5998
|
+
let r = (n + e) * ms, i = t[r + ps.POSITION_A_OFFSET], a = t[r + ps.POSITION_A_OFFSET + 1], o = t[r + ps.POSITION_A_OFFSET + 2], p = t[r + ps.POSITION_B_OFFSET], m = t[r + ps.POSITION_B_OFFSET + 1], h = t[r + ps.POSITION_B_OFFSET + 2], g = t[r + ps.POSITION_C_OFFSET], _ = t[r + ps.POSITION_C_OFFSET + 1], v = t[r + ps.POSITION_C_OFFSET + 2];
|
|
6013
5999
|
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);
|
|
6014
6000
|
}
|
|
6015
6001
|
i[o] = s, i[o + 1] = c, i[o + 2] = l, i[o + 3] = u, i[o + 4] = d, i[o + 5] = f;
|
|
@@ -6023,15 +6009,15 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
6023
6009
|
n !== this._boundsNodeCount && (this._bounds = new Float32Array(n * 6), this._boundsNodeCount = n);
|
|
6024
6010
|
let r = this._bounds;
|
|
6025
6011
|
for (let i = n - 1; i >= 0; i--) {
|
|
6026
|
-
let n = i *
|
|
6027
|
-
if (o ===
|
|
6012
|
+
let n = i * hs, a = i * 6, o = e[n + 3];
|
|
6013
|
+
if (o === gs) {
|
|
6028
6014
|
let i = e[n], o = e[n + 1], s = Infinity, c = Infinity, l = Infinity, u = -Infinity, d = -Infinity, f = -Infinity;
|
|
6029
6015
|
for (let e = 0; e < o; e++) {
|
|
6030
|
-
let n = (i + e) *
|
|
6016
|
+
let n = (i + e) * ms, r = t[n + ps.POSITION_A_OFFSET], a = t[n + ps.POSITION_A_OFFSET + 1], o = t[n + ps.POSITION_A_OFFSET + 2], p = t[n + ps.POSITION_B_OFFSET], m = t[n + ps.POSITION_B_OFFSET + 1], h = t[n + ps.POSITION_B_OFFSET + 2], g = t[n + ps.POSITION_C_OFFSET], _ = t[n + ps.POSITION_C_OFFSET + 1], v = t[n + ps.POSITION_C_OFFSET + 2];
|
|
6031
6017
|
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);
|
|
6032
6018
|
}
|
|
6033
6019
|
r[a] = s, r[a + 1] = c, r[a + 2] = l, r[a + 3] = u, r[a + 4] = d, r[a + 5] = f;
|
|
6034
|
-
} else if (o ===
|
|
6020
|
+
} else if (o === _s) {
|
|
6035
6021
|
let t = e[n] * 6;
|
|
6036
6022
|
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];
|
|
6037
6023
|
} else {
|
|
@@ -6040,14 +6026,14 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
6040
6026
|
}
|
|
6041
6027
|
}
|
|
6042
6028
|
}
|
|
6043
|
-
},
|
|
6044
|
-
function
|
|
6045
|
-
let i = e.byteLength / (
|
|
6029
|
+
}, ys = 32, bs = 5e4, xs = 8;
|
|
6030
|
+
function Ss(e, t, n, r) {
|
|
6031
|
+
let i = e.byteLength / (ys * 4), a = Math.min(navigator.hardwareConcurrency || 4, xs), o = Math.ceil(Math.log2(a * 2.5 + 1));
|
|
6046
6032
|
return console.log(`[ParallelBVH] Parallel build: ${i.toLocaleString()} triangles, ${a} workers, parallelDepth=${o}`), new Promise((s, c) => {
|
|
6047
6033
|
try {
|
|
6048
6034
|
let c = new SharedArrayBuffer(e.byteLength);
|
|
6049
6035
|
new Float32Array(c).set(e);
|
|
6050
|
-
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 *
|
|
6036
|
+
let l = new SharedArrayBuffer(i * 3 * 4), u = new SharedArrayBuffer(i * 3 * 4), d = new SharedArrayBuffer(i * 3 * 4), f = new SharedArrayBuffer(i * 4), p = new SharedArrayBuffer(i * 4), m = new SharedArrayBuffer(i * ys * 4), h = new Worker(new URL(
|
|
6051
6037
|
/* @vite-ignore */
|
|
6052
6038
|
"" + new URL("assets/BVHWorker-BqQTDljT.js", import.meta.url).href,
|
|
6053
6039
|
"" + import.meta.url
|
|
@@ -6060,7 +6046,7 @@ function ws(e, t, n, r) {
|
|
|
6060
6046
|
if (y) return;
|
|
6061
6047
|
y = !0, console.warn(`[ParallelBVH] Parallel build failed (${e}), falling back to single worker`), b();
|
|
6062
6048
|
let i = new ArrayBuffer(c.byteLength);
|
|
6063
|
-
new Float32Array(i).set(new Float32Array(c)), s(
|
|
6049
|
+
new Float32Array(i).set(new Float32Array(c)), s(ws(new Float32Array(i), t, n, r));
|
|
6064
6050
|
};
|
|
6065
6051
|
h.onerror = (e) => {
|
|
6066
6052
|
x(`coordinator error: ${e.message}`);
|
|
@@ -6075,7 +6061,7 @@ function ws(e, t, n, r) {
|
|
|
6075
6061
|
return;
|
|
6076
6062
|
}
|
|
6077
6063
|
if (t.type === "phase1Result") {
|
|
6078
|
-
g = t.splitStats,
|
|
6064
|
+
g = t.splitStats, Cs(t, a, c, l, u, d, f, m, i, n, h, _, b, x, s, v, r);
|
|
6079
6065
|
return;
|
|
6080
6066
|
}
|
|
6081
6067
|
if (t.type === "assembleResult") {
|
|
@@ -6109,7 +6095,7 @@ function ws(e, t, n, r) {
|
|
|
6109
6095
|
}
|
|
6110
6096
|
});
|
|
6111
6097
|
}
|
|
6112
|
-
function
|
|
6098
|
+
function Cs(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
|
|
6113
6099
|
let { topFlatData: _, topNodeCount: v, frontierTasks: y, frontierMap: b } = e;
|
|
6114
6100
|
if (!y || y.length === 0) {
|
|
6115
6101
|
console.log("[ParallelBVH] No frontier tasks, assembling with top-level tree only"), u.postMessage({
|
|
@@ -6210,14 +6196,14 @@ function Ts(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
|
|
|
6210
6196
|
});
|
|
6211
6197
|
}
|
|
6212
6198
|
}
|
|
6213
|
-
function
|
|
6199
|
+
function ws(e, t, n, r) {
|
|
6214
6200
|
return new Promise((i, a) => {
|
|
6215
6201
|
try {
|
|
6216
6202
|
let o = new Worker(new URL(
|
|
6217
6203
|
/* @vite-ignore */
|
|
6218
6204
|
"" + new URL("assets/BVHWorker-BqQTDljT.js", import.meta.url).href,
|
|
6219
6205
|
"" + import.meta.url
|
|
6220
|
-
), { type: "module" }), s = e.byteLength / (
|
|
6206
|
+
), { type: "module" }), s = e.byteLength / (ys * 4), c = typeof SharedArrayBuffer < "u" ? new SharedArrayBuffer(s * ys * 4) : null;
|
|
6221
6207
|
o.onmessage = (e) => {
|
|
6222
6208
|
let { bvhData: t, triangles: r, originalToBvh: s, error: l, progress: u, treeletStats: d } = e.data;
|
|
6223
6209
|
if (l) {
|
|
@@ -6255,16 +6241,16 @@ function Es(e, t, n, r) {
|
|
|
6255
6241
|
}
|
|
6256
6242
|
});
|
|
6257
6243
|
}
|
|
6258
|
-
function
|
|
6259
|
-
return typeof Worker < "u" && typeof SharedArrayBuffer < "u" && e >=
|
|
6244
|
+
function Ts(e) {
|
|
6245
|
+
return typeof Worker < "u" && typeof SharedArrayBuffer < "u" && e >= bs;
|
|
6260
6246
|
}
|
|
6261
6247
|
//#endregion
|
|
6262
6248
|
//#region src/Processor/TLASBuilder.js
|
|
6263
|
-
var
|
|
6249
|
+
var Es = 16, Ds = class {
|
|
6264
6250
|
constructor() {
|
|
6265
6251
|
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;
|
|
6266
6252
|
}
|
|
6267
|
-
},
|
|
6253
|
+
}, Os = class {
|
|
6268
6254
|
constructor() {
|
|
6269
6255
|
this._flatBuffer = null, this._flatBufferCapacity = 0;
|
|
6270
6256
|
}
|
|
@@ -6282,7 +6268,7 @@ var Os = 16, ks = class {
|
|
|
6282
6268
|
};
|
|
6283
6269
|
}
|
|
6284
6270
|
_buildRecursive(e, t) {
|
|
6285
|
-
let n = new
|
|
6271
|
+
let n = new Ds();
|
|
6286
6272
|
if (t.length === 1) {
|
|
6287
6273
|
let r = e[t[0]].worldAABB;
|
|
6288
6274
|
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;
|
|
@@ -6319,16 +6305,16 @@ var Os = 16, ks = class {
|
|
|
6319
6305
|
let e = r.pop();
|
|
6320
6306
|
e._flatIndex = n.length, n.push(e), e.rightChild && r.push(e.rightChild), e.leftChild && r.push(e.leftChild);
|
|
6321
6307
|
}
|
|
6322
|
-
let i = n.length *
|
|
6308
|
+
let i = n.length * Es;
|
|
6323
6309
|
i > this._flatBufferCapacity && (this._flatBuffer = new Float32Array(i), this._flatBufferCapacity = i);
|
|
6324
6310
|
let a = this._flatBuffer;
|
|
6325
6311
|
a.fill(0, 0, i);
|
|
6326
6312
|
for (let e = 0; e < n.length; e++) {
|
|
6327
|
-
let r = n[e], i = e *
|
|
6313
|
+
let r = n[e], i = e * Es;
|
|
6328
6314
|
if (r.leftChild) {
|
|
6329
6315
|
let e = r.leftChild, t = r.rightChild;
|
|
6330
6316
|
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;
|
|
6331
|
-
} else a[i] = t[r.entryIndex].blasOffset, a[i + 3] = Rn.BLAS_POINTER_LEAF;
|
|
6317
|
+
} else a[i] = t[r.entryIndex].blasOffset, a[i + 1] = r.entryIndex, a[i + 3] = Rn.BLAS_POINTER_LEAF;
|
|
6332
6318
|
}
|
|
6333
6319
|
return a.subarray(0, i);
|
|
6334
6320
|
}
|
|
@@ -6363,7 +6349,7 @@ var Os = 16, ks = class {
|
|
|
6363
6349
|
}
|
|
6364
6350
|
return t;
|
|
6365
6351
|
}
|
|
6366
|
-
},
|
|
6352
|
+
}, ks = class {
|
|
6367
6353
|
constructor() {
|
|
6368
6354
|
this.entries = [], this.totalBLASNodes = 0, this.tlasNodeCount = 0;
|
|
6369
6355
|
}
|
|
@@ -6434,7 +6420,7 @@ var Os = 16, ks = class {
|
|
|
6434
6420
|
clear() {
|
|
6435
6421
|
this.entries = [], this.totalBLASNodes = 0, this.tlasNodeCount = 0;
|
|
6436
6422
|
}
|
|
6437
|
-
},
|
|
6423
|
+
}, As = class {
|
|
6438
6424
|
constructor() {
|
|
6439
6425
|
this.canvasContextPairs = [], this.maxPoolSize = zn.CANVAS_POOL_SIZE;
|
|
6440
6426
|
}
|
|
@@ -6474,7 +6460,7 @@ var Os = 16, ks = class {
|
|
|
6474
6460
|
dispose() {
|
|
6475
6461
|
this.canvasContextPairs = [];
|
|
6476
6462
|
}
|
|
6477
|
-
},
|
|
6463
|
+
}, js = class {
|
|
6478
6464
|
constructor(e = {}) {
|
|
6479
6465
|
this.pools = /* @__PURE__ */ new Map(), this.memoryUsage = 0, this.maxMemoryUsage = e.maxMemory || Un.MAX_BUFFER_MEMORY, this.allocatedBuffers = /* @__PURE__ */ new WeakMap(), this.sizeStrategy = e.sizeStrategy || "adaptive";
|
|
6480
6466
|
}
|
|
@@ -6532,7 +6518,7 @@ var Os = 16, ks = class {
|
|
|
6532
6518
|
let e = this.getMemoryStats();
|
|
6533
6519
|
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";
|
|
6534
6520
|
}
|
|
6535
|
-
},
|
|
6521
|
+
}, Ms = class {
|
|
6536
6522
|
constructor(e = zn.CACHE_SIZE_LIMIT) {
|
|
6537
6523
|
this.cache = /* @__PURE__ */ new Map(), this.accessOrder = [], this.maxSize = e;
|
|
6538
6524
|
}
|
|
@@ -6569,12 +6555,12 @@ var Os = 16, ks = class {
|
|
|
6569
6555
|
e && e.dispose && e.dispose();
|
|
6570
6556
|
}), this.cache.clear(), this.accessOrder = [];
|
|
6571
6557
|
}
|
|
6572
|
-
},
|
|
6558
|
+
}, Ns = class {
|
|
6573
6559
|
constructor(e = {}) {
|
|
6574
|
-
this.useWorkers = typeof Worker < "u", this.maxConcurrentWorkers = zn.MAX_CONCURRENT_WORKERS, this.activeWorkers = 0, this.canvasPool = new
|
|
6560
|
+
this.useWorkers = typeof Worker < "u", this.maxConcurrentWorkers = zn.MAX_CONCURRENT_WORKERS, this.activeWorkers = 0, this.canvasPool = new As(), this.bufferPool = new js({
|
|
6575
6561
|
maxMemory: e.maxBufferMemory || Un.MAX_BUFFER_MEMORY,
|
|
6576
6562
|
sizeStrategy: e.bufferSizeStrategy || "adaptive"
|
|
6577
|
-
}), this.textureCache = new
|
|
6563
|
+
}), this.textureCache = new Ms(), this.capabilities = this.detectCapabilities(), this.optimalMethod = this.selectOptimalMethod();
|
|
6578
6564
|
}
|
|
6579
6565
|
detectCapabilities() {
|
|
6580
6566
|
return {
|
|
@@ -6881,7 +6867,7 @@ var Os = 16, ks = class {
|
|
|
6881
6867
|
let l = performance.now();
|
|
6882
6868
|
try {
|
|
6883
6869
|
if (!t || t.length === 0) throw Error("No materials provided for texture creation");
|
|
6884
|
-
this.textureCache.dispose(), this.textureCache = new
|
|
6870
|
+
this.textureCache.dispose(), this.textureCache = new Ms();
|
|
6885
6871
|
let e = [];
|
|
6886
6872
|
n && n.length > 0 && e.push(this.createTexturesToDataTexture(n).then((e) => ({
|
|
6887
6873
|
type: "albedo",
|
|
@@ -7000,7 +6986,7 @@ var Os = 16, ks = class {
|
|
|
7000
6986
|
dispose() {
|
|
7001
6987
|
this.canvasPool.dispose(), this.bufferPool.dispose(), this.textureCache.dispose();
|
|
7002
6988
|
}
|
|
7003
|
-
},
|
|
6989
|
+
}, Ps = 128, Fs = class {
|
|
7004
6990
|
constructor() {
|
|
7005
6991
|
this._vectorPool = {
|
|
7006
6992
|
vec3: Array(9).fill().map(() => new Le()),
|
|
@@ -7041,7 +7027,7 @@ var Os = 16, ks = class {
|
|
|
7041
7027
|
console.warn("Skipping mesh with missing geometry or material:", e);
|
|
7042
7028
|
return;
|
|
7043
7029
|
}
|
|
7044
|
-
let t = this.processMaterial(e.material
|
|
7030
|
+
let t = this.processMaterial(e.material);
|
|
7045
7031
|
e.userData.materialIndex = t;
|
|
7046
7032
|
let n = this.meshes.length;
|
|
7047
7033
|
this.meshes.push(e), e.userData.meshIndex = n;
|
|
@@ -7051,19 +7037,19 @@ var Os = 16, ks = class {
|
|
|
7051
7037
|
count: this.currentTriangleIndex - r
|
|
7052
7038
|
});
|
|
7053
7039
|
}
|
|
7054
|
-
processMaterial(e
|
|
7055
|
-
let
|
|
7056
|
-
if (
|
|
7040
|
+
processMaterial(e) {
|
|
7041
|
+
let t = this._materialUuidMap.get(e.uuid) ?? -1;
|
|
7042
|
+
if (t === -1) {
|
|
7057
7043
|
e.depthWrite === !1 && (e.depthWrite = !0, console.warn("Depth write is disabled in material, enabling it for rastered rendering"));
|
|
7058
|
-
let
|
|
7059
|
-
this.materials.push(
|
|
7060
|
-
|
|
7061
|
-
|
|
7062
|
-
|
|
7063
|
-
|
|
7044
|
+
let n = this.createMaterialObject(e);
|
|
7045
|
+
this.materials.push(n), t = this.materials.length - 1, this._materialUuidMap.set(e.uuid, t), n.clearcoat > 0 && (this.sceneFeatures.hasClearcoat = !0), n.transmission > 0 && (this.sceneFeatures.hasTransmission = !0), n.dispersion > 0 && (this.sceneFeatures.hasDispersion = !0), n.iridescence > 0 && (this.sceneFeatures.hasIridescence = !0), n.sheen > 0 && (this.sceneFeatures.hasSheen = !0), (n.transparent || n.opacity < 1 || n.alphaTest > 0) && (this.sceneFeatures.hasTransparency = !0), [
|
|
7046
|
+
n.clearcoat > 0,
|
|
7047
|
+
n.transmission > 0,
|
|
7048
|
+
n.iridescence > 0,
|
|
7049
|
+
n.sheen > 0
|
|
7064
7050
|
].filter(Boolean).length >= 2 && (this.sceneFeatures.hasMultiLobeMaterials = !0);
|
|
7065
7051
|
}
|
|
7066
|
-
return
|
|
7052
|
+
return t;
|
|
7067
7053
|
}
|
|
7068
7054
|
getMaterialAlphaMode(e) {
|
|
7069
7055
|
if (e.userData?.gltfExtensions?.KHR_materials_unlit?.alphaMode) {
|
|
@@ -7134,43 +7120,42 @@ var Os = 16, ks = class {
|
|
|
7134
7120
|
}
|
|
7135
7121
|
return n;
|
|
7136
7122
|
}
|
|
7137
|
-
createMaterialObject(e
|
|
7138
|
-
let
|
|
7139
|
-
|
|
7140
|
-
let
|
|
7141
|
-
return
|
|
7123
|
+
createMaterialObject(e) {
|
|
7124
|
+
let t = this.getPhysicalDefaults(), n = this.getMaterialType(e), r = this.mapLegacyMaterialToPhysical(e, n), i = (e.metalness ?? r.metalness ?? 0) > .1, a = t.ior;
|
|
7125
|
+
i ? a = 2.5 : e.transmission > 0 && (a = 1.5);
|
|
7126
|
+
let o = e.color || new v(16777215);
|
|
7127
|
+
return n === "basic" && !e.map && (o = new v(0)), {
|
|
7142
7128
|
uuid: e.uuid,
|
|
7143
|
-
color:
|
|
7144
|
-
emissive:
|
|
7145
|
-
emissiveIntensity:
|
|
7146
|
-
roughness: Math.max(.05,
|
|
7147
|
-
metalness:
|
|
7148
|
-
ior: e.ior ??
|
|
7149
|
-
opacity: e.opacity ??
|
|
7150
|
-
transmission: e.transmission ??
|
|
7151
|
-
thickness: e.thickness ??
|
|
7152
|
-
attenuationColor: e.attenuationColor ??
|
|
7153
|
-
attenuationDistance: e.attenuationDistance ??
|
|
7154
|
-
dispersion: e.dispersion ??
|
|
7155
|
-
sheen: e.sheen ??
|
|
7156
|
-
sheenRoughness: e.sheenRoughness ??
|
|
7157
|
-
sheenColor: e.sheenColor ??
|
|
7158
|
-
clearcoat: e.clearcoat ??
|
|
7159
|
-
clearcoatRoughness: e.clearcoatRoughness ??
|
|
7160
|
-
iridescence: e.iridescence ??
|
|
7161
|
-
iridescenceIOR: e.iridescenceIOR ??
|
|
7162
|
-
iridescenceThicknessRange: e.iridescenceThicknessRange ??
|
|
7163
|
-
specularIntensity:
|
|
7164
|
-
specularColor:
|
|
7165
|
-
normalScale: e.normalScale ??
|
|
7166
|
-
bumpScale: e.bumpScale ??
|
|
7167
|
-
displacementScale: e.displacementScale ??
|
|
7129
|
+
color: o,
|
|
7130
|
+
emissive: r.emissive ?? e.emissive ?? t.emissive,
|
|
7131
|
+
emissiveIntensity: r.emissiveIntensity ?? e.emissiveIntensity ?? t.emissiveIntensity,
|
|
7132
|
+
roughness: Math.max(.05, r.roughness ?? e.roughness ?? t.roughness),
|
|
7133
|
+
metalness: r.metalness ?? e.metalness ?? t.metalness,
|
|
7134
|
+
ior: e.ior ?? a,
|
|
7135
|
+
opacity: e.opacity ?? t.opacity,
|
|
7136
|
+
transmission: e.transmission ?? t.transmission,
|
|
7137
|
+
thickness: e.thickness ?? t.thickness,
|
|
7138
|
+
attenuationColor: e.attenuationColor ?? t.attenuationColor,
|
|
7139
|
+
attenuationDistance: e.attenuationDistance ?? t.attenuationDistance,
|
|
7140
|
+
dispersion: e.dispersion ?? t.dispersion,
|
|
7141
|
+
sheen: e.sheen ?? t.sheen,
|
|
7142
|
+
sheenRoughness: e.sheenRoughness ?? t.sheenRoughness,
|
|
7143
|
+
sheenColor: e.sheenColor ?? t.sheenColor,
|
|
7144
|
+
clearcoat: e.clearcoat ?? t.clearcoat,
|
|
7145
|
+
clearcoatRoughness: e.clearcoatRoughness ?? t.clearcoatRoughness,
|
|
7146
|
+
iridescence: e.iridescence ?? t.iridescence,
|
|
7147
|
+
iridescenceIOR: e.iridescenceIOR ?? t.iridescenceIOR,
|
|
7148
|
+
iridescenceThicknessRange: e.iridescenceThicknessRange ?? t.iridescenceThicknessRange,
|
|
7149
|
+
specularIntensity: r.specularIntensity ?? e.specularIntensity ?? t.specularIntensity,
|
|
7150
|
+
specularColor: r.specularColor ?? e.specularColor ?? t.specularColor,
|
|
7151
|
+
normalScale: e.normalScale ?? t.normalScale,
|
|
7152
|
+
bumpScale: e.bumpScale ?? t.bumpScale,
|
|
7153
|
+
displacementScale: e.displacementScale ?? t.displacementScale,
|
|
7168
7154
|
transparent: e.transparent ? 1 : 0,
|
|
7169
|
-
alphaTest: e.alphaTest ??
|
|
7155
|
+
alphaTest: e.alphaTest ?? t.alphaTest,
|
|
7170
7156
|
alphaMode: this.getMaterialAlphaMode(e),
|
|
7171
7157
|
side: this.getMaterialSide(e),
|
|
7172
7158
|
depthWrite: e.depthWrite ?? !0 ? 1 : 0,
|
|
7173
|
-
visible: t ? t.visible ? 1 : 0 : e.visible ?? !0 ? 1 : 0,
|
|
7174
7159
|
map: this.processTexture(e.map, this.maps),
|
|
7175
7160
|
normalMap: this.processTexture(e.normalMap, this.normalMaps),
|
|
7176
7161
|
bumpMap: this.processTexture(e.bumpMap, this.bumpMaps),
|
|
@@ -7195,7 +7180,7 @@ var Os = 16, ks = class {
|
|
|
7195
7180
|
metalnessMapMatrices: this.getTextureMatrix(e.metalnessMap),
|
|
7196
7181
|
emissiveMapMatrices: this.getTextureMatrix(e.emissiveMap),
|
|
7197
7182
|
displacementMapMatrices: this.getTextureMatrix(e.displacementMap),
|
|
7198
|
-
originalType:
|
|
7183
|
+
originalType: n
|
|
7199
7184
|
};
|
|
7200
7185
|
}
|
|
7201
7186
|
getTextureMatrix(e) {
|
|
@@ -7216,7 +7201,7 @@ var Os = 16, ks = class {
|
|
|
7216
7201
|
n || (n = /* @__PURE__ */ new Map(), this._textureIndexCache.set(t, n));
|
|
7217
7202
|
let r = e.source.uuid, i = n.get(r);
|
|
7218
7203
|
if (i !== void 0) return i;
|
|
7219
|
-
if (t.length <
|
|
7204
|
+
if (t.length < Ps) {
|
|
7220
7205
|
t.push(e);
|
|
7221
7206
|
let i = t.length - 1;
|
|
7222
7207
|
return n.set(r, i), i;
|
|
@@ -7265,7 +7250,7 @@ var Os = 16, ks = class {
|
|
|
7265
7250
|
}
|
|
7266
7251
|
_traverseMaterialsOnly(e) {
|
|
7267
7252
|
if (e.isMesh && e.geometry && e.material) {
|
|
7268
|
-
let t = this.processMaterial(e.material
|
|
7253
|
+
let t = this.processMaterial(e.material);
|
|
7269
7254
|
e.userData.materialIndex = t;
|
|
7270
7255
|
let n = this.meshes.length;
|
|
7271
7256
|
this.meshes.push(e), e.userData.meshIndex = n;
|
|
@@ -7303,7 +7288,7 @@ var Os = 16, ks = class {
|
|
|
7303
7288
|
sceneFeatures: this.sceneFeatures
|
|
7304
7289
|
};
|
|
7305
7290
|
}
|
|
7306
|
-
},
|
|
7291
|
+
}, Is = class {
|
|
7307
7292
|
constructor() {
|
|
7308
7293
|
this.maxLeafSize = 8;
|
|
7309
7294
|
}
|
|
@@ -7362,7 +7347,7 @@ var Os = 16, ks = class {
|
|
|
7362
7347
|
l < i ? n = l + 1 : r = l;
|
|
7363
7348
|
}
|
|
7364
7349
|
}
|
|
7365
|
-
},
|
|
7350
|
+
}, Ls = class {
|
|
7366
7351
|
constructor() {
|
|
7367
7352
|
this.emissiveTriangles = [], this.emissiveCount = 0, this.totalEmissivePower = 0, this.emissiveIndicesArray = null, this.emissivePowerArray = null, this.cdfArray = null, this.lightBVHNodeData = null, this.lightBVHNodeCount = 0;
|
|
7368
7353
|
}
|
|
@@ -7377,7 +7362,7 @@ var Os = 16, ks = class {
|
|
|
7377
7362
|
g: 0,
|
|
7378
7363
|
b: 0
|
|
7379
7364
|
}, l = s.emissiveIntensity || 0;
|
|
7380
|
-
if (
|
|
7365
|
+
if (l > 0 && (c.r > 0 || c.g > 0 || c.b > 0)) {
|
|
7381
7366
|
let t = e[n + 0], r = e[n + 1], i = e[n + 2], s = e[n + 4], u = e[n + 5], d = e[n + 6], f = e[n + 8], p = e[n + 9], m = e[n + 10], h = this._calculateTriangleArea(t, r, i, s, u, d, f, p, m), g = (c.r + c.g + c.b) / 3 * l * h, _ = (t + s + f) / 3, v = (r + u + p) / 3, y = (i + d + m) / 3, b = Math.min(t, s, f), x = Math.min(r, u, p), S = Math.min(i, d, m), C = Math.max(t, s, f), w = Math.max(r, u, p), T = Math.max(i, d, m);
|
|
7382
7367
|
this.emissiveTriangles.push({
|
|
7383
7368
|
triangleIndex: a,
|
|
@@ -7489,7 +7474,7 @@ var Os = 16, ks = class {
|
|
|
7489
7474
|
r: 0,
|
|
7490
7475
|
g: 0,
|
|
7491
7476
|
b: 0
|
|
7492
|
-
}, o = t.emissiveIntensity || 0, s =
|
|
7477
|
+
}, o = t.emissiveIntensity || 0, s = o > 0 && (a.r > 0 || a.g > 0 || a.b > 0);
|
|
7493
7478
|
if (s !== this.emissiveTriangles.some((t) => t.materialIndex === e)) return this.extractEmissiveTriangles(n, r, i), !0;
|
|
7494
7479
|
if (!s) return !1;
|
|
7495
7480
|
let c = (a.r + a.g + a.b) / 3;
|
|
@@ -7506,7 +7491,7 @@ var Os = 16, ks = class {
|
|
|
7506
7491
|
}
|
|
7507
7492
|
buildLightBVH() {
|
|
7508
7493
|
if (this.emissiveCount === 0) return this.lightBVHNodeData = new Float32Array(16), this.lightBVHNodeData[7] = 1, this.lightBVHNodeCount = 1, 1;
|
|
7509
|
-
let { nodeData: e, nodeCount: t, sortedPerm: n } = new
|
|
7494
|
+
let { nodeData: e, nodeCount: t, sortedPerm: n } = new Is().build(this.emissiveTriangles);
|
|
7510
7495
|
return this.lightBVHNodeData = e, this.lightBVHNodeCount = t, this._rebuildSortedEmissiveData(n), t;
|
|
7511
7496
|
}
|
|
7512
7497
|
_rebuildSortedEmissiveData(e) {
|
|
@@ -7527,7 +7512,7 @@ var Os = 16, ks = class {
|
|
|
7527
7512
|
clear() {
|
|
7528
7513
|
this.emissiveTriangles = [], this.emissiveCount = 0, this.totalEmissivePower = 0, this.emissiveIndicesArray = null, this.emissivePowerArray = null, this.cdfArray = null, this.lightBVHNodeData = null, this.lightBVHNodeCount = 0;
|
|
7529
7514
|
}
|
|
7530
|
-
},
|
|
7515
|
+
}, Rs = class {
|
|
7531
7516
|
constructor(e = {}) {
|
|
7532
7517
|
this.config = {
|
|
7533
7518
|
useWorkers: !0,
|
|
@@ -7550,12 +7535,12 @@ var Os = 16, ks = class {
|
|
|
7550
7535
|
};
|
|
7551
7536
|
}
|
|
7552
7537
|
_initProcessors() {
|
|
7553
|
-
this.geometryExtractor = new
|
|
7538
|
+
this.geometryExtractor = new Fs(), this.bvhBuilder = new fs(), this.bvhBuilder.maxLeafSize = this.config.maxLeafSize, this.bvhBuilder.setTreeletConfig({
|
|
7554
7539
|
enabled: this.config.enableTreeletOptimization,
|
|
7555
7540
|
size: this.config.treeletSize,
|
|
7556
7541
|
passes: this.config.treeletOptimizationPasses,
|
|
7557
7542
|
minImprovement: this.config.treeletMinImprovement
|
|
7558
|
-
}), this.textureCreator = new
|
|
7543
|
+
}), this.textureCreator = new Ns(), this.emissiveTriangleBuilder = new Ls(), this.tlasBuilder = new Os();
|
|
7559
7544
|
}
|
|
7560
7545
|
_log(e, t) {
|
|
7561
7546
|
this.config.verbose && console.log(`[SceneProcessor] ${e}`, t || "");
|
|
@@ -7563,7 +7548,7 @@ var Os = 16, ks = class {
|
|
|
7563
7548
|
async buildBVH(e) {
|
|
7564
7549
|
if (this.isProcessing) throw Error("Already processing a scene. Call dispose() first.");
|
|
7565
7550
|
this.isProcessing = !0, this.processingStage = "init";
|
|
7566
|
-
let t = new
|
|
7551
|
+
let t = new rs(`SceneProcessor (${e.name || "scene"})`);
|
|
7567
7552
|
try {
|
|
7568
7553
|
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)");
|
|
7569
7554
|
let n = !1, r = this._buildBVH().then(() => t.end("BVH construction (worker)")), i = this._createMaterialTextures().then(() => {
|
|
@@ -7624,11 +7609,11 @@ var Os = 16, ks = class {
|
|
|
7624
7609
|
try {
|
|
7625
7610
|
let t = Q.FLOATS_PER_TRIANGLE, n = this.meshTriangleRanges;
|
|
7626
7611
|
if (!n || n.length === 0) throw Error("No mesh triangle ranges available for TLAS/BLAS build");
|
|
7627
|
-
this.instanceTable = new
|
|
7612
|
+
this.instanceTable = new ks(), this.instanceTable.allocate(n.length);
|
|
7628
7613
|
let r = n.length, i = this.config.enableTreeletOptimization, a = [], o = [];
|
|
7629
7614
|
for (let e = 0; e < r; e++) {
|
|
7630
7615
|
let t = n[e];
|
|
7631
|
-
t.count !== 0 && (t.count >= 2e5 &&
|
|
7616
|
+
t.count !== 0 && (t.count >= 2e5 && Ts(t.count) ? o.push({
|
|
7632
7617
|
m: e,
|
|
7633
7618
|
range: t
|
|
7634
7619
|
}) : a.push({
|
|
@@ -7654,7 +7639,7 @@ var Os = 16, ks = class {
|
|
|
7654
7639
|
status: `Building BLAS ${e + o.length}/${c}...`,
|
|
7655
7640
|
progress: 25 + Math.floor(e / c * 45)
|
|
7656
7641
|
});
|
|
7657
|
-
}), u = o.map(({ m: e, range: n }) =>
|
|
7642
|
+
}), u = o.map(({ m: e, range: n }) => Ss(this.triangleData.slice(n.start * t, (n.start + n.count) * t), this.config.bvhDepth, null, {
|
|
7658
7643
|
maxLeafSize: this.bvhBuilder.maxLeafSize,
|
|
7659
7644
|
numBins: this.bvhBuilder.numBins,
|
|
7660
7645
|
maxBins: this.bvhBuilder.maxBins,
|
|
@@ -7971,7 +7956,7 @@ var Os = 16, ks = class {
|
|
|
7971
7956
|
refitBLASes(e, t, n) {
|
|
7972
7957
|
if (!this.instanceTable || !this.bvhData || !this.triangleData) throw Error("No TLAS/BLAS data available. Run buildBVH() first.");
|
|
7973
7958
|
let r = performance.now();
|
|
7974
|
-
this._blasRefitter ||= new
|
|
7959
|
+
this._blasRefitter ||= new vs();
|
|
7975
7960
|
for (let r of e) {
|
|
7976
7961
|
let e = this.instanceTable.entries[r];
|
|
7977
7962
|
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));
|
|
@@ -8012,7 +7997,7 @@ var Os = 16, ks = class {
|
|
|
8012
7997
|
updateMaterialEmissive(e, t, n) {
|
|
8013
7998
|
if (!this.emissiveTriangleBuilder) return null;
|
|
8014
7999
|
let r = this.materials[e];
|
|
8015
|
-
return !r || (t === "emissive" ? r.emissive = n : t === "emissiveIntensity"
|
|
8000
|
+
return !r || (t === "emissive" ? r.emissive = n : t === "emissiveIntensity" && (r.emissiveIntensity = n), !this.emissiveTriangleBuilder.updateMaterialEmissive(e, r, this.triangleData, this.materials, this.triangleCount)) ? null : {
|
|
8016
8001
|
rawData: this.emissiveTriangleBuilder.createEmissiveRawData(),
|
|
8017
8002
|
emissiveCount: this.emissiveTriangleBuilder.emissiveCount,
|
|
8018
8003
|
totalPower: this.emissiveTriangleBuilder.totalEmissivePower
|
|
@@ -8134,7 +8119,7 @@ var Os = 16, ks = class {
|
|
|
8134
8119
|
dispose() {
|
|
8135
8120
|
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;
|
|
8136
8121
|
}
|
|
8137
|
-
},
|
|
8122
|
+
}, zs = class {
|
|
8138
8123
|
constructor() {
|
|
8139
8124
|
this.lightData = {
|
|
8140
8125
|
directional: [],
|
|
@@ -8287,17 +8272,22 @@ var Os = 16, ks = class {
|
|
|
8287
8272
|
}))
|
|
8288
8273
|
};
|
|
8289
8274
|
}
|
|
8290
|
-
},
|
|
8275
|
+
}, Bs = "https://assets.rayzee.atulmourya.com/noise/simple_bluenoise.png", Vs = 4, Hs = class extends pn {
|
|
8291
8276
|
constructor(e, t, n, r = {}) {
|
|
8292
8277
|
super("PathTracer", {
|
|
8293
8278
|
...r,
|
|
8294
8279
|
executionMode: fn.ALWAYS
|
|
8295
8280
|
});
|
|
8296
8281
|
let i = r.width || 1920, a = r.height || 1080;
|
|
8297
|
-
this.camera = n, this.width = i, this.height = a, this.renderer = e, this.scene = t, this.tileManager = new mn(i, a, Z.tiles), this.sdfs = new
|
|
8282
|
+
this.camera = n, this.width = i, this.height = a, this.renderer = e, this.scene = t, this.tileManager = new mn(i, a, Z.tiles), this.sdfs = new Rs(), this.lightSerializer = new zs(), this.accumulationEnabled = !0, this.isComplete = !1, this.cameras = [], this.performanceMonitor = kn(), this.completionThreshold = 0, this.renderLimitMode = "frames", this._initDataTextures(), this.storageTextures = new jn(0, 0), this.uniforms = new Gn(i, a), this._defineUniformGetters(), this.materialData = new qn(this.sdfs), this.materialData.callbacks.onReset = () => this.reset(), this.environment = new xr(this.scene, this.uniforms), this.environment.callbacks.onReset = () => this.reset(), this.environment.callbacks.getSceneTextureNodes = () => this.shaderBuilder.getSceneTextureNodes(), this.shaderBuilder = new as(), this._initRenderingState(), this.setupBlueNoise(), this.tempVector2 = new Ie(), this.lastCameraMatrix = new se(), this.lastProjectionMatrix = new se(), this.lastRenderMode = -1, this.tileCompletionFrame = 0, this.renderModeChangeTimeout = null, this.renderModeChangeDelay = 50, this.pendingRenderMode = null, this.adaptiveSamplingFrameToggle = !1, this.lastInteractionModeState = !1, this.cameraChanged = !1, this.tileChanged = !1, this.updateCompletionThreshold();
|
|
8298
8283
|
}
|
|
8299
8284
|
_initDataTextures() {
|
|
8300
|
-
this.triangleStorageAttr = null, this.triangleStorageNode = null, this.triangleCount = 0, this.bvhStorageAttr = null, this.bvhStorageNode = null, this.bvhNodeCount = 0, this.directionalLightsData = null, this.pointLightsData = null, this.spotLightsData = null, this.areaLightsData = null, this.blueNoiseTexture = null, this.emissiveTriangleStorageAttr = new i(new Float32Array(4), 4), this.emissiveTriangleStorageNode = gt(this.emissiveTriangleStorageAttr, "vec4", 1).toReadOnly(), this.lightBVHStorageAttr = new i(new Float32Array(16), 4), this.lightBVHStorageNode = gt(this.lightBVHStorageAttr, "vec4", 1).toReadOnly(), this.
|
|
8285
|
+
this.triangleStorageAttr = null, this.triangleStorageNode = null, this.triangleCount = 0, this.bvhStorageAttr = null, this.bvhStorageNode = null, this.bvhNodeCount = 0, this.directionalLightsData = null, this.pointLightsData = null, this.spotLightsData = null, this.areaLightsData = null, this.blueNoiseTexture = null, this.emissiveTriangleStorageAttr = new i(new Float32Array(4), 4), this.emissiveTriangleStorageNode = gt(this.emissiveTriangleStorageAttr, "vec4", 1).toReadOnly(), this.lightBVHStorageAttr = new i(new Float32Array(16), 4), this.lightBVHStorageNode = gt(this.lightBVHStorageAttr, "vec4", 1).toReadOnly(), this.meshVisibilityStorageAttr = new i(new Float32Array([
|
|
8286
|
+
1,
|
|
8287
|
+
0,
|
|
8288
|
+
0,
|
|
8289
|
+
0
|
|
8290
|
+
]), 4), this.meshVisibilityStorageNode = gt(this.meshVisibilityStorageAttr, "vec4", 1).toReadOnly(), this.adaptiveSamplingTexture = null, this.spheres = [];
|
|
8301
8291
|
}
|
|
8302
8292
|
_defineUniformGetters() {
|
|
8303
8293
|
let e = this.uniforms;
|
|
@@ -8390,7 +8380,7 @@ var Os = 16, ks = class {
|
|
|
8390
8380
|
}
|
|
8391
8381
|
setupBlueNoise() {
|
|
8392
8382
|
let e = new Me();
|
|
8393
|
-
e.setCrossOrigin("anonymous"), e.load(
|
|
8383
|
+
e.setCrossOrigin("anonymous"), e.load(Bs, (e) => {
|
|
8394
8384
|
e.minFilter = j, e.magFilter = j, e.wrapS = Ee, e.wrapT = Ee, e.type = D, e.generateMipmaps = !1, this.blueNoiseTexture = e, Gt.value = e, console.log(`PathTracer: Blue noise loaded ${e.image.width}x${e.image.height}`);
|
|
8395
8385
|
});
|
|
8396
8386
|
}
|
|
@@ -8407,7 +8397,7 @@ var Os = 16, ks = class {
|
|
|
8407
8397
|
this.dispose(), this.scene = e, await this.sdfs.buildBVH(e), this.cameras = this.sdfs.cameras, this.materialData.injectMaterialFeatureDefines(), this.updateSceneUniforms(), this.updateLights(), this._initCameraOptimizer(), this.setupMaterial();
|
|
8408
8398
|
}
|
|
8409
8399
|
updateSceneUniforms() {
|
|
8410
|
-
this.setTriangleData(this.sdfs.triangleData, this.sdfs.triangleCount), this.setBVHData(this.sdfs.bvhData), this.materialData.setMaterialData(this.sdfs.materialData), this.totalTriangleCount.value = this.sdfs.triangleCount || 0, this.materialData.loadTexturesFromSdfs(), this.sdfs.emissiveTriangleData ? this.setEmissiveTriangleData(this.sdfs.emissiveTriangleData, this.sdfs.emissiveTriangleCount || 0) : this.emissiveTriangleCount.value = 0, this.sdfs.lightBVHNodeData ? this.setLightBVHData(this.sdfs.lightBVHNodeData, this.sdfs.lightBVHNodeCount || 0) : this.lightBVHNodeCount.value = 0, this.spheres = this.sdfs.spheres || [];
|
|
8400
|
+
this.setTriangleData(this.sdfs.triangleData, this.sdfs.triangleCount), this.setBVHData(this.sdfs.bvhData), this.materialData.setMaterialData(this.sdfs.materialData), this.totalTriangleCount.value = this.sdfs.triangleCount || 0, this.materialData.loadTexturesFromSdfs(), this.sdfs.emissiveTriangleData ? this.setEmissiveTriangleData(this.sdfs.emissiveTriangleData, this.sdfs.emissiveTriangleCount || 0) : this.emissiveTriangleCount.value = 0, this.sdfs.lightBVHNodeData ? this.setLightBVHData(this.sdfs.lightBVHNodeData, this.sdfs.lightBVHNodeCount || 0) : this.lightBVHNodeCount.value = 0, this._meshRefs = this._collectMeshRefs(this.scene), this.setMeshVisibilityData(this._meshRefs), this.spheres = this.sdfs.spheres || [];
|
|
8411
8401
|
}
|
|
8412
8402
|
updateLights() {
|
|
8413
8403
|
let e = {
|
|
@@ -8473,7 +8463,36 @@ var Os = 16, ks = class {
|
|
|
8473
8463
|
setBVHData(e) {
|
|
8474
8464
|
if (!e) return;
|
|
8475
8465
|
let t = e.length / 4;
|
|
8476
|
-
this.bvhStorageNode ? (this.bvhStorageAttr = new i(e, 4), this.bvhStorageNode.value = this.bvhStorageAttr, this.bvhStorageNode.bufferCount = t) : (this.bvhStorageAttr = new i(e, 4), this.bvhStorageNode = gt(this.bvhStorageAttr, "vec4", t).toReadOnly()), this.bvhNodeCount = Math.floor(t /
|
|
8466
|
+
this.bvhStorageNode ? (this.bvhStorageAttr = new i(e, 4), this.bvhStorageNode.value = this.bvhStorageAttr, this.bvhStorageNode.bufferCount = t) : (this.bvhStorageAttr = new i(e, 4), this.bvhStorageNode = gt(this.bvhStorageAttr, "vec4", t).toReadOnly()), this.bvhNodeCount = Math.floor(t / Vs), console.log(`PathTracer: ${this.bvhNodeCount} BVH nodes (storage buffer)`);
|
|
8467
|
+
}
|
|
8468
|
+
setMeshVisibilityData(e) {
|
|
8469
|
+
if (!e || e.length === 0) return;
|
|
8470
|
+
let t = e.length, n = new Float32Array(t * 4);
|
|
8471
|
+
for (let r = 0; r < t; r++) n[r * 4] = this._isWorldVisible(e[r]) ? 1 : 0;
|
|
8472
|
+
this.meshVisibilityStorageAttr = new i(n, 4), this.meshVisibilityStorageNode.value = this.meshVisibilityStorageAttr, this.meshVisibilityStorageNode.bufferCount = t;
|
|
8473
|
+
}
|
|
8474
|
+
updateMeshVisibility(e, t) {
|
|
8475
|
+
this.meshVisibilityStorageAttr && (this.meshVisibilityStorageAttr.array[e * 4] = t ? 1 : 0, this.meshVisibilityStorageAttr.needsUpdate = !0);
|
|
8476
|
+
}
|
|
8477
|
+
updateAllMeshVisibility() {
|
|
8478
|
+
if (!this._meshRefs || !this.meshVisibilityStorageAttr) return;
|
|
8479
|
+
let e = this.meshVisibilityStorageAttr.array;
|
|
8480
|
+
for (let t = 0; t < this._meshRefs.length; t++) e[t * 4] = this._isWorldVisible(this._meshRefs[t]) ? 1 : 0;
|
|
8481
|
+
this.meshVisibilityStorageAttr.needsUpdate = !0;
|
|
8482
|
+
}
|
|
8483
|
+
_collectMeshRefs(e) {
|
|
8484
|
+
if (!e) return [];
|
|
8485
|
+
let t = [];
|
|
8486
|
+
return e.traverse((e) => {
|
|
8487
|
+
e.isMesh && e.userData.meshIndex !== void 0 && (t[e.userData.meshIndex] = e);
|
|
8488
|
+
}), t;
|
|
8489
|
+
}
|
|
8490
|
+
_isWorldVisible(e) {
|
|
8491
|
+
for (; e;) {
|
|
8492
|
+
if (!e.visible) return !1;
|
|
8493
|
+
e = e.parent;
|
|
8494
|
+
}
|
|
8495
|
+
return !0;
|
|
8477
8496
|
}
|
|
8478
8497
|
_updateStorageBuffer(e, t) {
|
|
8479
8498
|
e && (e.array.set(t), e.needsUpdate = !0);
|
|
@@ -8636,7 +8655,7 @@ var Os = 16, ks = class {
|
|
|
8636
8655
|
dispose() {
|
|
8637
8656
|
this.renderModeChangeTimeout &&= (clearTimeout(this.renderModeChangeTimeout), null), this.tileManager?.dispose(), this.cameraOptimizer?.dispose(), this.materialData?.dispose(), this.environment?.dispose(), this.shaderBuilder?.dispose(), this.storageTextures?.dispose(), this.blueNoiseTexture?.dispose(), this.placeholderTexture?.dispose(), this.triangleStorageAttr = null, this.triangleStorageNode = null, this.bvhStorageAttr = null, this.bvhStorageNode = null, this.placeholderTexture = null, this.isReady = !1;
|
|
8638
8657
|
}
|
|
8639
|
-
},
|
|
8658
|
+
}, Us = class extends pn {
|
|
8640
8659
|
constructor(e, t = {}) {
|
|
8641
8660
|
super("NormalDepth", {
|
|
8642
8661
|
...t,
|
|
@@ -8674,7 +8693,7 @@ var Os = 16, ks = class {
|
|
|
8674
8693
|
let u = J(z(c).add(.5).div(a).mul(2).sub(1), z(l).add(.5).div(o).mul(2).sub(1).negate(), 1), d = i.mul(Y(u, 1)), f = U(it(r[0].xyz, r[1].xyz, r[2].xyz).mul(d.xyz.div(d.w))), p = wr({
|
|
8675
8694
|
origin: J(r[3]),
|
|
8676
8695
|
direction: f
|
|
8677
|
-
}), m = Er.wrap(
|
|
8696
|
+
}), m = Er.wrap(vi(p, t, e, n)), h = m.normal.mul(.5).add(.5), g = m.dst, _ = m.didHit.select(Y(h, g), Y(0, 0, 0, z(1e6)));
|
|
8678
8697
|
xt(s, wt(G(c), G(l)), _).toWriteOnly();
|
|
8679
8698
|
});
|
|
8680
8699
|
})(r, i).compute([
|
|
@@ -8715,7 +8734,7 @@ var Os = 16, ks = class {
|
|
|
8715
8734
|
dispose() {
|
|
8716
8735
|
this._computeNode?.dispose(), this._outputStorageTex?.dispose(), this.renderTarget?.dispose();
|
|
8717
8736
|
}
|
|
8718
|
-
},
|
|
8737
|
+
}, Ws = class extends pn {
|
|
8719
8738
|
constructor(e, t, n = {}) {
|
|
8720
8739
|
super("MotionVector", {
|
|
8721
8740
|
...n,
|
|
@@ -8827,7 +8846,7 @@ var Os = 16, ks = class {
|
|
|
8827
8846
|
};
|
|
8828
8847
|
//#endregion
|
|
8829
8848
|
//#region src/Processor/createRenderTargetHelper.js
|
|
8830
|
-
function
|
|
8849
|
+
function Gs(e, t, n = {}) {
|
|
8831
8850
|
let r = n.textureIndex || 0, i = t.isTexture === !0, a;
|
|
8832
8851
|
i ? (console.warn("RenderTargetHelper: Direct Texture input is not supported. Pass a RenderTarget instead."), a = null) : a = t;
|
|
8833
8852
|
let o = {
|
|
@@ -8979,7 +8998,7 @@ function qs(e, t, n = {}) {
|
|
|
8979
8998
|
}
|
|
8980
8999
|
//#endregion
|
|
8981
9000
|
//#region src/Stages/ASVGF.js
|
|
8982
|
-
var
|
|
9001
|
+
var Ks = class extends pn {
|
|
8983
9002
|
constructor(e, t = {}) {
|
|
8984
9003
|
super("ASVGF", {
|
|
8985
9004
|
...t,
|
|
@@ -8993,7 +9012,7 @@ var Js = class extends pn {
|
|
|
8993
9012
|
magFilter: j,
|
|
8994
9013
|
depthBuffer: !1,
|
|
8995
9014
|
stencilBuffer: !1
|
|
8996
|
-
}), this._heatmapRawColorTexNode = new o(), this._heatmapColorTexNode = new o(), this._heatmapTemporalTexNode = new o(), this._heatmapNDTexNode = new o(), this._heatmapMotionTexNode = new o(), this._heatmapGradientTexNode = new o(), this._buildHeatmapCompute(), this.heatmapHelper =
|
|
9015
|
+
}), this._heatmapRawColorTexNode = new o(), this._heatmapColorTexNode = new o(), this._heatmapTemporalTexNode = new o(), this._heatmapNDTexNode = new o(), this._heatmapMotionTexNode = new o(), this._heatmapGradientTexNode = new o(), this._buildHeatmapCompute(), this.heatmapHelper = Gs(this.renderer, this.heatmapTarget, {
|
|
8997
9016
|
width: 400,
|
|
8998
9017
|
height: 400,
|
|
8999
9018
|
position: "bottom-right",
|
|
@@ -9166,7 +9185,7 @@ var Js = class extends pn {
|
|
|
9166
9185
|
dispose() {
|
|
9167
9186
|
this._gradientNode?.dispose(), this._temporalNodeA?.dispose(), this._temporalNodeB?.dispose(), this._temporalTexA?.dispose(), this._temporalTexB?.dispose(), this._prevNDTexA?.dispose(), this._prevNDTexB?.dispose(), this._gradientStorageTex?.dispose(), this._heatmapComputeNode?.dispose(), this._heatmapStorageTex?.dispose(), this.heatmapTarget?.dispose(), this.heatmapHelper?.dispose();
|
|
9168
9187
|
}
|
|
9169
|
-
},
|
|
9188
|
+
}, qs = /* @__PURE__ */ X("\n fn temporalAccumulate(\n lum: f32,\n prevMean: f32,\n prevMeanSq: f32,\n alpha: f32,\n spatialVariance: f32,\n varianceBoost: f32\n ) -> vec4f {\n\n let newMean = prevMean + ( lum - prevMean ) * alpha;\n let newMeanSq = prevMeanSq + ( lum * lum - prevMeanSq ) * alpha;\n let temporalVariance = max( newMeanSq - newMean * newMean, 0.0 );\n\n return vec4f(\n newMean,\n newMeanSq,\n temporalVariance * varianceBoost,\n spatialVariance * varianceBoost\n );\n\n }\n"), Js = class extends pn {
|
|
9170
9189
|
constructor(e, t = {}) {
|
|
9171
9190
|
super("VarianceEstimation", {
|
|
9172
9191
|
...t,
|
|
@@ -9198,7 +9217,7 @@ var Js = class extends pn {
|
|
|
9198
9217
|
}
|
|
9199
9218
|
n.divAssign(9), a.divAssign(9);
|
|
9200
9219
|
let o = V(a.sub(n.mul(n)), z(0)), u = s.element(l.add(1).mul(10).add(c.add(1))), d = yt(t, $e(g, _));
|
|
9201
|
-
xt(e, wt(G(g), G(_)),
|
|
9220
|
+
xt(e, wt(G(g), G(_)), qs(u, d.x, d.y, r, o, i)).toWriteOnly();
|
|
9202
9221
|
});
|
|
9203
9222
|
})().compute([
|
|
9204
9223
|
this._dispatchX,
|
|
@@ -9241,7 +9260,7 @@ var Js = class extends pn {
|
|
|
9241
9260
|
dispose() {
|
|
9242
9261
|
this._computeNodeA?.dispose(), this._computeNodeB?.dispose(), this._storageTexA?.dispose(), this._storageTexB?.dispose();
|
|
9243
9262
|
}
|
|
9244
|
-
},
|
|
9263
|
+
}, Ys = /* @__PURE__ */ X("\n fn bilateralWeight(\n centerLum: f32, sLum: f32,\n centerNormal: vec3f, sNormal: vec3f,\n centerDepth: f32, sDepth: f32,\n centerColor: vec3f, sColor: vec3f,\n kernelW: f32,\n phiLum: f32, phiNorm: f32, phiDep: f32, phiCol: f32\n ) -> f32 {\n\n let lumW = exp( -abs( centerLum - sLum ) * phiLum );\n let normW = pow( max( dot( centerNormal, sNormal ), 0.0 ), phiNorm );\n let depW = exp( -abs( centerDepth - sDepth ) / max( phiDep, 0.001 ) );\n let maxDiff = max( max( abs( centerColor.x - sColor.x ),\n abs( centerColor.y - sColor.y ) ),\n abs( centerColor.z - sColor.z ) );\n let colW = exp( -maxDiff * phiCol );\n return kernelW * lumW * normW * depW * colW;\n\n }\n"), Xs = class extends pn {
|
|
9245
9264
|
constructor(e, t = {}) {
|
|
9246
9265
|
super("BilateralFiltering", {
|
|
9247
9266
|
...t,
|
|
@@ -9286,7 +9305,7 @@ var Js = class extends pn {
|
|
|
9286
9305
|
N(d.lessThan(B(c)).and(f.lessThan(B(l))), () => {
|
|
9287
9306
|
let p = $e(d, f), m = yt(t, p).xyz, h = yt(n, p), g = h.xyz.mul(2).sub(1), _ = h.w, v = Yr(m), y = J(0).toVar(), b = z(0).toVar();
|
|
9288
9307
|
for (let e = 0; e < 5; e++) for (let p = 0; p < 5; p++) {
|
|
9289
|
-
let h = p - 2, x = e - 2, S = u[e * 5 + p], C = d.add(s.mul(h)).clamp(B(0), B(c).sub(1)), w = f.add(s.mul(x)).clamp(B(0), B(l).sub(1)), T = yt(t, $e(C, w)).xyz, E = yt(n, $e(C, w)), D = E.xyz.mul(2).sub(1), O = E.w, k =
|
|
9308
|
+
let h = p - 2, x = e - 2, S = u[e * 5 + p], C = d.add(s.mul(h)).clamp(B(0), B(c).sub(1)), w = f.add(s.mul(x)).clamp(B(0), B(l).sub(1)), T = yt(t, $e(C, w)).xyz, E = yt(n, $e(C, w)), D = E.xyz.mul(2).sub(1), O = E.w, k = Ys(v, Yr(T), g, D, _, O, m, T, z(S), o, i, a, r);
|
|
9290
9309
|
y.addAssign(T.mul(k)), b.addAssign(k);
|
|
9291
9310
|
}
|
|
9292
9311
|
let x = y.div(V(b, z(1e-4)));
|
|
@@ -9331,7 +9350,7 @@ var Js = class extends pn {
|
|
|
9331
9350
|
dispose() {
|
|
9332
9351
|
this._computeNodeA?.dispose(), this._computeNodeB?.dispose(), this._storageTexA?.dispose(), this._storageTexB?.dispose();
|
|
9333
9352
|
}
|
|
9334
|
-
},
|
|
9353
|
+
}, Zs = /* @__PURE__ */ X("\n fn computeSamplingGuidance(\n temporalVariance: f32,\n spatialVariance: f32,\n meanLuminance: f32,\n threshold: f32,\n frame: i32,\n minFrames: i32,\n convThreshold: f32,\n sensitivity: f32,\n convSpeedScale: f32\n ) -> vec4f {\n\n // The path tracer accumulates via alpha = 1/(frame+1), so temporal variance\n // of the accumulated output shrinks as ~sigma²/(frame+1)². Scale by (frame+1)\n // to get accumulated image quality ~sigma²/N — decreases as image converges.\n let frameScale = f32( frame + 1 );\n let effectiveVariance = temporalVariance * frameScale;\n\n // Normalize by luminance² — converts absolute variance to relative (CV²).\n // Floor of 0.01 prevents noise amplification for near-black pixels\n // (linear luminance < 0.1 → below perceptual visibility threshold).\n let normFactor = max( meanLuminance * meanLuminance, 0.01 );\n let normalizedVariance = effectiveVariance / normFactor;\n\n let varianceRatio = clamp( normalizedVariance / threshold, 0.0, 1.0 );\n\n // Apply sensitivity — higher values assign more samples to noisy pixels\n var normalizedSamples = clamp( varianceRatio * sensitivity, 0.0, 1.0 );\n\n // Small spatial boost for noisy neighbourhoods (un-scaled — provides\n // a minor secondary signal that naturally diminishes as image converges)\n let spatialBoost = clamp( spatialVariance / ( threshold * 4.0 ), 0.0, 0.2 );\n normalizedSamples = clamp( normalizedSamples + spatialBoost, 0.0, 1.0 );\n\n // Warm-up: variance estimates need a few frames to stabilise\n if ( frame < minFrames ) {\n\n let warmupFactor = f32( frame ) / f32( minFrames );\n normalizedSamples = mix( 1.0, normalizedSamples, warmupFactor * warmupFactor );\n\n }\n\n // Convergence: mark pixel only when per-frame noise is truly negligible.\n // convSpeedScale controls aggressiveness: higher = easier to converge\n // (scales the threshold up, so more pixels qualify as converged).\n let scaledConvThreshold = convThreshold * convSpeedScale;\n var converged = 0.0;\n if ( normalizedVariance < scaledConvThreshold && frame > minFrames ) {\n\n converged = 1.0;\n\n }\n\n return vec4f(\n normalizedSamples,\n varianceRatio,\n converged,\n 1.0\n );\n\n }\n"), Qs = /* @__PURE__ */ X("\n fn heatmapGradient( t: f32, normalizedVariance: f32, converged: f32 ) -> vec4f {\n\n let r = clamp( ( t - 0.5 ) * 4.0, 0.0, 1.0 );\n let g = clamp( t * 4.0, 0.0, 1.0 ) - clamp( ( t - 0.75 ) * 4.0, 0.0, 1.0 );\n let b = 1.0 - clamp( ( t - 0.25 ) * 4.0, 0.0, 1.0 );\n\n var color = vec3f( r, g, b );\n\n // Convergence: desaturate converged pixels\n if ( converged > 0.5 ) {\n\n let gray = color.x * 0.299 + color.y * 0.587 + color.z * 0.114;\n color = mix( color, vec3f( gray ), 0.6 );\n\n }\n\n // Brightness modulation\n color *= 0.7 + normalizedVariance * 0.3;\n\n return vec4f( color, 1.0 );\n\n }\n"), $s = class extends pn {
|
|
9335
9354
|
constructor(e, t = {}) {
|
|
9336
9355
|
super("AdaptiveSampling", {
|
|
9337
9356
|
...t,
|
|
@@ -9345,7 +9364,7 @@ var Js = class extends pn {
|
|
|
9345
9364
|
magFilter: j,
|
|
9346
9365
|
depthBuffer: !1,
|
|
9347
9366
|
stencilBuffer: !1
|
|
9348
|
-
}), this._dispatchX = Math.ceil(n / 16), this._dispatchY = Math.ceil(i / 16), this._varianceTexNode = new o(), this._buildCompute(), this._buildHeatmapCompute(), this.helper =
|
|
9367
|
+
}), this._dispatchX = Math.ceil(n / 16), this._dispatchY = Math.ceil(i / 16), this._varianceTexNode = new o(), this._buildCompute(), this._buildHeatmapCompute(), this.helper = Gs(this.renderer, this.heatmapTarget, {
|
|
9349
9368
|
width: 400,
|
|
9350
9369
|
height: 400,
|
|
9351
9370
|
position: "bottom-right",
|
|
@@ -9362,7 +9381,7 @@ var Js = class extends pn {
|
|
|
9362
9381
|
this._computeNode = M(() => {
|
|
9363
9382
|
let u = B(Dt.x).mul(16).add(B(nt.x)), d = B(Dt.y).mul(16).add(B(nt.y));
|
|
9364
9383
|
N(u.lessThan(B(s)).and(d.lessThan(B(c))), () => {
|
|
9365
|
-
let s = yt(e, $e(u, d)), c =
|
|
9384
|
+
let s = yt(e, $e(u, d)), c = Zs(s.z, s.w, s.x, t, B(i), B(a), o, n, r);
|
|
9366
9385
|
xt(l, wt(G(u), G(d)), c).toWriteOnly();
|
|
9367
9386
|
});
|
|
9368
9387
|
})().compute([
|
|
@@ -9380,7 +9399,7 @@ var Js = class extends pn {
|
|
|
9380
9399
|
this._heatmapComputeNode = M(() => {
|
|
9381
9400
|
let i = B(Dt.x).mul(16).add(B(nt.x)), a = B(Dt.y).mul(16).add(B(nt.y));
|
|
9382
9401
|
N(i.lessThan(B(n)).and(a.lessThan(B(r))), () => {
|
|
9383
|
-
let n = yt(e, $e(i, a)), r =
|
|
9402
|
+
let n = yt(e, $e(i, a)), r = Qs(n.x.clamp(0, 1), n.y, n.z);
|
|
9384
9403
|
xt(t, wt(G(i), G(a)), r).toWriteOnly();
|
|
9385
9404
|
});
|
|
9386
9405
|
})().compute([
|
|
@@ -9439,7 +9458,7 @@ var Js = class extends pn {
|
|
|
9439
9458
|
dispose() {
|
|
9440
9459
|
this._computeNode?.dispose(), this._heatmapComputeNode?.dispose(), this._heatmapStorageTex?.dispose(), this._outputStorageTex?.dispose(), this.heatmapTarget?.dispose(), this.helper?.dispose();
|
|
9441
9460
|
}
|
|
9442
|
-
},
|
|
9461
|
+
}, ec = class extends pn {
|
|
9443
9462
|
constructor(e, t = {}) {
|
|
9444
9463
|
super("EdgeAwareFiltering", {
|
|
9445
9464
|
...t,
|
|
@@ -9519,7 +9538,7 @@ var Js = class extends pn {
|
|
|
9519
9538
|
dispose() {
|
|
9520
9539
|
this._computeNode?.dispose(), this._outputStorageTex?.dispose(), this.outputTarget?.dispose();
|
|
9521
9540
|
}
|
|
9522
|
-
},
|
|
9541
|
+
}, tc = /* @__PURE__ */ X("\n fn adaptExposure(\n geoMean: f32,\n prevExposure: f32,\n keyValue: f32,\n minExp: f32,\n maxExp: f32,\n speedBright: f32,\n speedDark: f32,\n dt: f32,\n isFirstFrame: f32\n ) -> vec4f {\n\n let targetExp = clamp( keyValue / max( geoMean, 0.001 ), minExp, maxExp );\n var newExposure = targetExp;\n\n // Temporal smoothing (skip on first frame)\n if ( isFirstFrame < 0.5 ) {\n\n // Asymmetric speed: brighter scenes adapt faster\n let speed = select( speedDark, speedBright, targetExp < prevExposure );\n let alpha = 1.0 - exp( -dt * speed );\n newExposure = mix( prevExposure, targetExp, alpha );\n\n }\n\n return vec4f( newExposure, geoMean, targetExp, 1.0 );\n\n }\n"), nc = class extends pn {
|
|
9523
9542
|
constructor(e, t = {}) {
|
|
9524
9543
|
super("AutoExposure", {
|
|
9525
9544
|
...t,
|
|
@@ -9586,7 +9605,7 @@ var Js = class extends pn {
|
|
|
9586
9605
|
_buildAdaptationCompute() {
|
|
9587
9606
|
let e = this._reductionReadTexNode, t = this._adaptationStorageTex, n = this.keyValueU, r = this.minExposureU, i = this.maxExposureU, a = this.adaptSpeedBrightU, o = this.adaptSpeedDarkU, s = this.deltaTimeU, c = this.isFirstFrameU, l = this.previousExposureU;
|
|
9588
9607
|
this._adaptationComputeNode = M(() => {
|
|
9589
|
-
let u = yt(e, $e(B(0), B(0))).x, d =
|
|
9608
|
+
let u = yt(e, $e(B(0), B(0))).x, d = tc(u, l, n, r, i, a, o, s, c);
|
|
9590
9609
|
xt(t, wt(G(0), G(0)), d).toWriteOnly();
|
|
9591
9610
|
})().compute(1, [
|
|
9592
9611
|
1,
|
|
@@ -9651,7 +9670,7 @@ var Js = class extends pn {
|
|
|
9651
9670
|
};
|
|
9652
9671
|
//#endregion
|
|
9653
9672
|
//#region src/TSL/SSRC.js
|
|
9654
|
-
function
|
|
9673
|
+
function rc({ colorTexNode: e, ndTexNode: t, motionTexNode: n, readCacheTexNode: r, readPrevNDTexNode: i, writeCacheTex: a, writePrevNDTex: o, resW: s, resH: c, temporalAlpha: l, phiNormal: u, phiDepth: d, maxHistory: f, framesSinceReset: p }) {
|
|
9655
9674
|
return M(() => {
|
|
9656
9675
|
let m = B(Dt.x).mul(8).add(B(nt.x)), h = B(Dt.y).mul(8).add(B(nt.y));
|
|
9657
9676
|
N(m.lessThan(B(s)).and(h.lessThan(B(c))), () => {
|
|
@@ -9673,7 +9692,7 @@ function ac({ colorTexNode: e, ndTexNode: t, motionTexNode: n, readCacheTexNode:
|
|
|
9673
9692
|
});
|
|
9674
9693
|
});
|
|
9675
9694
|
}
|
|
9676
|
-
function
|
|
9695
|
+
function ic({ colorTexNode: e, ndTexNode: t, readCacheTexNode: n, outputTex: r, resW: i, resH: a, spatialRadius: o, spatialWeight: s, phiNormal: c, phiDepth: l }) {
|
|
9677
9696
|
let u = [
|
|
9678
9697
|
[1, 0],
|
|
9679
9698
|
[-1, 0],
|
|
@@ -9699,7 +9718,7 @@ function oc({ colorTexNode: e, ndTexNode: t, readCacheTexNode: n, outputTex: r,
|
|
|
9699
9718
|
}
|
|
9700
9719
|
//#endregion
|
|
9701
9720
|
//#region src/Stages/SSRC.js
|
|
9702
|
-
var
|
|
9721
|
+
var ac = class extends pn {
|
|
9703
9722
|
constructor(e, t = {}) {
|
|
9704
9723
|
super("SSRC", {
|
|
9705
9724
|
...t,
|
|
@@ -9774,12 +9793,12 @@ var sc = class extends pn {
|
|
|
9774
9793
|
phiNormal: this.phiNormal,
|
|
9775
9794
|
phiDepth: this.phiDepth,
|
|
9776
9795
|
maxHistory: this.maxHistory
|
|
9777
|
-
}, t =
|
|
9796
|
+
}, t = rc({
|
|
9778
9797
|
...e,
|
|
9779
9798
|
writeCacheTex: this._cacheTexA,
|
|
9780
9799
|
writePrevNDTex: this._prevNDTexA,
|
|
9781
9800
|
framesSinceReset: this._framesSinceReset
|
|
9782
|
-
}), n =
|
|
9801
|
+
}), n = rc({
|
|
9783
9802
|
...e,
|
|
9784
9803
|
writeCacheTex: this._cacheTexB,
|
|
9785
9804
|
writePrevNDTex: this._prevNDTexB,
|
|
@@ -9793,7 +9812,7 @@ var sc = class extends pn {
|
|
|
9793
9812
|
8,
|
|
9794
9813
|
1
|
|
9795
9814
|
];
|
|
9796
|
-
this._pass1NodeA = t().compute(r, i), this._pass1NodeB = n().compute(r, i), this._pass2Node =
|
|
9815
|
+
this._pass1NodeA = t().compute(r, i), this._pass1NodeB = n().compute(r, i), this._pass2Node = ic({
|
|
9797
9816
|
colorTexNode: this._colorTexNode,
|
|
9798
9817
|
ndTexNode: this._ndTexNode,
|
|
9799
9818
|
readCacheTexNode: this._readPass1CacheTexNode,
|
|
@@ -9806,7 +9825,7 @@ var sc = class extends pn {
|
|
|
9806
9825
|
phiDepth: this.phiDepth
|
|
9807
9826
|
})().compute(r, i);
|
|
9808
9827
|
}
|
|
9809
|
-
},
|
|
9828
|
+
}, oc = class extends pn {
|
|
9810
9829
|
constructor(n, r = {}) {
|
|
9811
9830
|
super("Display", {
|
|
9812
9831
|
...r,
|
|
@@ -9835,7 +9854,7 @@ var sc = class extends pn {
|
|
|
9835
9854
|
dispose() {
|
|
9836
9855
|
this.displayMaterial?.dispose();
|
|
9837
9856
|
}
|
|
9838
|
-
},
|
|
9857
|
+
}, sc = class {
|
|
9839
9858
|
constructor() {
|
|
9840
9859
|
this.textures = /* @__PURE__ */ new Map(), this.renderTargets = /* @__PURE__ */ new Map(), this.uniforms = /* @__PURE__ */ new Map(), this.state = {
|
|
9841
9860
|
frame: 0,
|
|
@@ -9958,7 +9977,7 @@ var sc = class extends pn {
|
|
|
9958
9977
|
dispose() {
|
|
9959
9978
|
this.textures.clear(), this.renderTargets.clear(), this.uniforms.clear(), this._stateChangeCallbacks.clear(), this.state = {};
|
|
9960
9979
|
}
|
|
9961
|
-
},
|
|
9980
|
+
}, cc = class extends E {
|
|
9962
9981
|
constructor() {
|
|
9963
9982
|
super(), this._onceCallbacks = /* @__PURE__ */ new Map();
|
|
9964
9983
|
}
|
|
@@ -9996,9 +10015,9 @@ var sc = class extends pn {
|
|
|
9996
10015
|
eventNames() {
|
|
9997
10016
|
return this._listeners ? Object.keys(this._listeners) : [];
|
|
9998
10017
|
}
|
|
9999
|
-
},
|
|
10018
|
+
}, lc = class {
|
|
10000
10019
|
constructor(e, t, n) {
|
|
10001
|
-
this.renderer = e, this.width = t, this.height = n, this.stages = [], this.context = new
|
|
10020
|
+
this.renderer = e, this.width = t, this.height = n, this.stages = [], this.context = new sc(), this.eventBus = new cc(), this.context.setState("width", t), this.context.setState("height", n), this.stats = {
|
|
10002
10021
|
enabled: !1,
|
|
10003
10022
|
logSkipped: !1,
|
|
10004
10023
|
timings: /* @__PURE__ */ new Map(),
|
|
@@ -10130,7 +10149,7 @@ var sc = class extends pn {
|
|
|
10130
10149
|
let e = this.getInfo();
|
|
10131
10150
|
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();
|
|
10132
10151
|
}
|
|
10133
|
-
},
|
|
10152
|
+
}, uc = class {
|
|
10134
10153
|
constructor() {
|
|
10135
10154
|
this.timeElapsed = 0, this.lastResetTime = performance.now(), this.renderCompleteDispatched = !1;
|
|
10136
10155
|
}
|
|
@@ -10152,7 +10171,7 @@ var sc = class extends pn {
|
|
|
10152
10171
|
resumeFromPause() {
|
|
10153
10172
|
this.renderCompleteDispatched = !1, this.lastResetTime = performance.now() - this.timeElapsed * 1e3;
|
|
10154
10173
|
}
|
|
10155
|
-
},
|
|
10174
|
+
}, dc = class extends E {
|
|
10156
10175
|
constructor({ scene: e, camera: t, canvas: n, assetLoader: r, pathTracer: i, floorPlane: a }) {
|
|
10157
10176
|
super(), this.scene = e, this.camera = t, this.canvas = n, this.assetLoader = r, this.pathTracer = i, this.floorPlane = a, this.raycaster = new Ce(), this.focusMode = !1, this.focusPointIndicator = null, this.afPointPlacementMode = !1, this.handleAFPointClick = this.handleAFPointClick.bind(this), this.selectedObject = null, this.selectMode = !1, this.clickTimeout = null, this.mouseDownPosition = null, this.dragThreshold = 5, this.handleFocusClick = this.handleFocusClick.bind(this), this.handleSelectClick = this.handleSelectClick.bind(this), this.handleSelectDoubleClick = this.handleSelectDoubleClick.bind(this), this.handleMouseDown = this.handleMouseDown.bind(this), this.handleMouseUp = this.handleMouseUp.bind(this), this.handleContextMenu = this.handleContextMenu.bind(this), this.handleContextPointerDown = this.handleContextPointerDown.bind(this), this.handleContextPointerUp = this.handleContextPointerUp.bind(this), this.contextPointerDownPosition = null, this.canvas.addEventListener("pointerdown", this.handleContextPointerDown), this.canvas.addEventListener("pointerup", this.handleContextPointerUp), this.canvas.addEventListener("contextmenu", this.handleContextMenu), this._overlayManager = null, this._transformManager = null, this._appDispatch = null, this._orbitControls = null;
|
|
10158
10177
|
}
|
|
@@ -10373,7 +10392,7 @@ var sc = class extends pn {
|
|
|
10373
10392
|
dispose() {
|
|
10374
10393
|
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;
|
|
10375
10394
|
}
|
|
10376
|
-
},
|
|
10395
|
+
}, fc = {
|
|
10377
10396
|
glb: {
|
|
10378
10397
|
type: "model",
|
|
10379
10398
|
name: "GLB (GLTF Binary)"
|
|
@@ -10438,12 +10457,12 @@ var sc = class extends pn {
|
|
|
10438
10457
|
type: "archive",
|
|
10439
10458
|
name: "ZIP Archive"
|
|
10440
10459
|
}
|
|
10441
|
-
},
|
|
10460
|
+
}, pc = class extends E {
|
|
10442
10461
|
constructor(e, t, n) {
|
|
10443
10462
|
super(), this.scene = e, this.camera = t, this.controls = n, this.targetModel = null, this.floorPlane = null, this.sceneScale = 1, this.loaderCache = {}, this.uploadedFileInfo = null, this.animations = [];
|
|
10444
10463
|
}
|
|
10445
10464
|
getFileFormat(e) {
|
|
10446
|
-
return
|
|
10465
|
+
return fc[e.split(".").pop().toLowerCase()] || null;
|
|
10447
10466
|
}
|
|
10448
10467
|
readFileAsArrayBuffer(e) {
|
|
10449
10468
|
return new Promise((t, n) => {
|
|
@@ -10636,7 +10655,7 @@ var sc = class extends pn {
|
|
|
10636
10655
|
}
|
|
10637
10656
|
for (let t in e) {
|
|
10638
10657
|
let n = t.split(".").pop().toLowerCase();
|
|
10639
|
-
if (
|
|
10658
|
+
if (fc[n] && fc[n].type === "model") return console.log(`Loading model file from ZIP: ${t}`), await this.loadModelFromZipEntry(e[t], t, n, e);
|
|
10640
10659
|
}
|
|
10641
10660
|
throw Error("No supported model files found in the ZIP archive");
|
|
10642
10661
|
}
|
|
@@ -11065,7 +11084,7 @@ var sc = class extends pn {
|
|
|
11065
11084
|
}), e;
|
|
11066
11085
|
}
|
|
11067
11086
|
async onModelLoad(e) {
|
|
11068
|
-
let t = new
|
|
11087
|
+
let t = new rs("onModelLoad");
|
|
11069
11088
|
t.start("Camera extraction");
|
|
11070
11089
|
let n = this.extractCamerasFromModel(e);
|
|
11071
11090
|
t.end("Camera extraction"), t.start("Camera setup");
|
|
@@ -11144,10 +11163,10 @@ var sc = class extends pn {
|
|
|
11144
11163
|
getSupportedFormats(e = null) {
|
|
11145
11164
|
if (e) {
|
|
11146
11165
|
let t = {};
|
|
11147
|
-
for (let [n, r] of Object.entries(
|
|
11166
|
+
for (let [n, r] of Object.entries(fc)) r.type === e && (t[n] = r);
|
|
11148
11167
|
return t;
|
|
11149
11168
|
}
|
|
11150
|
-
return
|
|
11169
|
+
return fc;
|
|
11151
11170
|
}
|
|
11152
11171
|
dispose() {
|
|
11153
11172
|
for (let e in this.loaderCache) {
|
|
@@ -11159,7 +11178,7 @@ var sc = class extends pn {
|
|
|
11159
11178
|
removeAllEventListeners() {
|
|
11160
11179
|
super.dispose();
|
|
11161
11180
|
}
|
|
11162
|
-
},
|
|
11181
|
+
}, mc = {
|
|
11163
11182
|
maxBounces: {
|
|
11164
11183
|
uniform: "maxBounces",
|
|
11165
11184
|
reset: !0
|
|
@@ -11266,11 +11285,11 @@ var sc = class extends pn {
|
|
|
11266
11285
|
},
|
|
11267
11286
|
renderMode: { handler: "handleRenderMode" },
|
|
11268
11287
|
environmentRotation: { handler: "handleEnvironmentRotation" }
|
|
11269
|
-
},
|
|
11288
|
+
}, hc = {
|
|
11270
11289
|
bounces: "maxBounces",
|
|
11271
11290
|
adaptiveSampling: "useAdaptiveSampling",
|
|
11272
11291
|
debugMode: "visMode"
|
|
11273
|
-
},
|
|
11292
|
+
}, gc = class extends E {
|
|
11274
11293
|
constructor(e = Z) {
|
|
11275
11294
|
super(), this._values = /* @__PURE__ */ new Map(), this._pathTracer = null, this._resetCallback = null, this._handlers = {}, this._delegates = {}, this._initDefaults(e);
|
|
11276
11295
|
}
|
|
@@ -11312,7 +11331,7 @@ var sc = class extends pn {
|
|
|
11312
11331
|
let i = this._values.get(e);
|
|
11313
11332
|
if (i === t) return;
|
|
11314
11333
|
this._values.set(e, t);
|
|
11315
|
-
let a =
|
|
11334
|
+
let a = mc[e];
|
|
11316
11335
|
a && (this._applyRoute(a, t, i), (n === void 0 ? a.reset ?? !0 : n) && this._resetCallback?.(), r || this.dispatchEvent({
|
|
11317
11336
|
type: gn.SETTING_CHANGED,
|
|
11318
11337
|
key: e,
|
|
@@ -11326,7 +11345,7 @@ var sc = class extends pn {
|
|
|
11326
11345
|
let e = this._values.get(r);
|
|
11327
11346
|
if (e === i) continue;
|
|
11328
11347
|
this._values.set(r, i);
|
|
11329
|
-
let a =
|
|
11348
|
+
let a = mc[r];
|
|
11330
11349
|
a && (this._applyRoute(a, i, e), (a.reset ?? !0) && (n = !0), t || this.dispatchEvent({
|
|
11331
11350
|
type: gn.SETTING_CHANGED,
|
|
11332
11351
|
key: r,
|
|
@@ -11344,7 +11363,7 @@ var sc = class extends pn {
|
|
|
11344
11363
|
}
|
|
11345
11364
|
applyAll() {
|
|
11346
11365
|
for (let [e, t] of this._values) {
|
|
11347
|
-
let n =
|
|
11366
|
+
let n = mc[e];
|
|
11348
11367
|
n && this._applyRoute(n, t, void 0);
|
|
11349
11368
|
}
|
|
11350
11369
|
}
|
|
@@ -11352,10 +11371,10 @@ var sc = class extends pn {
|
|
|
11352
11371
|
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);
|
|
11353
11372
|
}
|
|
11354
11373
|
_initDefaults(e) {
|
|
11355
|
-
for (let t of Object.keys(
|
|
11356
|
-
for (let [t, n] of Object.entries(
|
|
11374
|
+
for (let t of Object.keys(mc)) t in e && this._values.set(t, e[t]);
|
|
11375
|
+
for (let [t, n] of Object.entries(hc)) t in e && this._values.set(n, e[t]);
|
|
11357
11376
|
}
|
|
11358
|
-
},
|
|
11377
|
+
}, _c = class extends E {
|
|
11359
11378
|
constructor(e) {
|
|
11360
11379
|
super();
|
|
11361
11380
|
let t = e.clientWidth, n = e.clientHeight;
|
|
@@ -11471,7 +11490,7 @@ var sc = class extends pn {
|
|
|
11471
11490
|
dispose() {
|
|
11472
11491
|
this.controls?.dispose();
|
|
11473
11492
|
}
|
|
11474
|
-
},
|
|
11493
|
+
}, vc = class extends E {
|
|
11475
11494
|
constructor(e, t, n, r = {}) {
|
|
11476
11495
|
super(), this.scene = e, this.sceneHelpers = t, this.pathTracer = n, this._onReset = r.onReset || null;
|
|
11477
11496
|
}
|
|
@@ -11621,39 +11640,39 @@ var sc = class extends pn {
|
|
|
11621
11640
|
]);
|
|
11622
11641
|
return n;
|
|
11623
11642
|
}
|
|
11624
|
-
},
|
|
11625
|
-
function
|
|
11626
|
-
i[0] =
|
|
11643
|
+
}, yc = (e) => Math.min(Math.max(e, 0), 1);
|
|
11644
|
+
function bc(e, t, n, r, i) {
|
|
11645
|
+
i[0] = yc(e), i[1] = yc(t), i[2] = yc(n);
|
|
11627
11646
|
}
|
|
11628
|
-
function
|
|
11629
|
-
i[0] =
|
|
11647
|
+
function xc(e, t, n, r, i) {
|
|
11648
|
+
i[0] = yc(e * r), i[1] = yc(t * r), i[2] = yc(n * r);
|
|
11630
11649
|
}
|
|
11631
|
-
function
|
|
11632
|
-
e *= r, t *= r, n *= r, i[0] =
|
|
11650
|
+
function Sc(e, t, n, r, i) {
|
|
11651
|
+
e *= r, t *= r, n *= r, i[0] = yc(e / (e + 1)), i[1] = yc(t / (t + 1)), i[2] = yc(n / (n + 1));
|
|
11633
11652
|
}
|
|
11634
|
-
function
|
|
11653
|
+
function Cc(e, t, n, r, i) {
|
|
11635
11654
|
e = Math.max(e * r - .004, 0), t = Math.max(t * r - .004, 0), n = Math.max(n * r - .004, 0);
|
|
11636
11655
|
let a = (e) => (e * (6.2 * e + .5) / (e * (6.2 * e + 1.7) + .06)) ** 2.2;
|
|
11637
11656
|
i[0] = a(e), i[1] = a(t), i[2] = a(n);
|
|
11638
11657
|
}
|
|
11639
|
-
function
|
|
11658
|
+
function wc(e, t, n, r, i) {
|
|
11640
11659
|
e = e * r / .6, t = t * r / .6, n = n * r / .6;
|
|
11641
11660
|
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);
|
|
11642
|
-
a = c(a), o = c(o), s = c(s), i[0] =
|
|
11661
|
+
a = c(a), o = c(o), s = c(s), i[0] = yc(1.60475 * a - .53108 * o - .07367 * s), i[1] = yc(-.10208 * a + 1.10813 * o - .00605 * s), i[2] = yc(-.00327 * a - .07276 * o + 1.07602 * s);
|
|
11643
11662
|
}
|
|
11644
|
-
function
|
|
11663
|
+
function Tc(e, t, n, r, i) {
|
|
11645
11664
|
e *= r, t *= r, n *= r;
|
|
11646
11665
|
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;
|
|
11647
|
-
c =
|
|
11666
|
+
c = yc((Math.log2(Math.max(c, 1e-10)) - d) / f), l = yc((Math.log2(Math.max(l, 1e-10)) - d) / f), u = yc((Math.log2(Math.max(u, 1e-10)) - d) / f);
|
|
11648
11667
|
let p = (e) => {
|
|
11649
11668
|
let t = e * e, n = t * t;
|
|
11650
11669
|
return 15.5 * n * t - 40.14 * n * e + 31.96 * n - 6.868 * t * e + .4298 * t + .1191 * e - .00232;
|
|
11651
11670
|
};
|
|
11652
11671
|
c = p(c), l = p(l), u = p(u);
|
|
11653
11672
|
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;
|
|
11654
|
-
m = Math.max(0, m) ** 2.2, h = Math.max(0, h) ** 2.2, g = Math.max(0, g) ** 2.2, i[0] =
|
|
11673
|
+
m = Math.max(0, m) ** 2.2, h = Math.max(0, h) ** 2.2, g = Math.max(0, g) ** 2.2, i[0] = yc(1.6605 * m - .5876 * h - .0728 * g), i[1] = yc(-.1246 * m + 1.1329 * h - .0083 * g), i[2] = yc(-.0182 * m - .1006 * h + 1.1187 * g);
|
|
11655
11674
|
}
|
|
11656
|
-
function
|
|
11675
|
+
function Ec(e, t, n, r, i) {
|
|
11657
11676
|
let a = .76;
|
|
11658
11677
|
e *= r, t *= r, n *= r;
|
|
11659
11678
|
let o = Math.min(e, Math.min(t, n)), s = o < .08 ? o - 6.25 * o * o : .04;
|
|
@@ -11668,27 +11687,27 @@ function Oc(e, t, n, r, i) {
|
|
|
11668
11687
|
let f = 1 - 1 / (.15 * (c - u) + 1);
|
|
11669
11688
|
i[0] = e + (u - e) * f, i[1] = t + (u - t) * f, i[2] = n + (u - n) * f;
|
|
11670
11689
|
}
|
|
11671
|
-
var
|
|
11672
|
-
[me,
|
|
11673
|
-
[te,
|
|
11674
|
-
[Te,
|
|
11675
|
-
[h,
|
|
11676
|
-
[c,
|
|
11677
|
-
[u,
|
|
11678
|
-
[fe,
|
|
11679
|
-
]),
|
|
11680
|
-
function
|
|
11690
|
+
var Dc = new Map([
|
|
11691
|
+
[me, bc],
|
|
11692
|
+
[te, xc],
|
|
11693
|
+
[Te, Sc],
|
|
11694
|
+
[h, Cc],
|
|
11695
|
+
[c, wc],
|
|
11696
|
+
[u, Tc],
|
|
11697
|
+
[fe, Ec]
|
|
11698
|
+
]), Oc = 1 / 2.2, kc = .2126, Ac = .7152, jc = .0722;
|
|
11699
|
+
function Mc(e, t) {
|
|
11681
11700
|
if (t === 1) return;
|
|
11682
|
-
let n = e[0] *
|
|
11701
|
+
let n = e[0] * kc + e[1] * Ac + e[2] * jc;
|
|
11683
11702
|
e[0] = n + (e[0] - n) * t, e[1] = n + (e[1] - n) * t, e[2] = n + (e[2] - n) * t;
|
|
11684
11703
|
}
|
|
11685
11704
|
//#endregion
|
|
11686
11705
|
//#region src/Passes/OIDNDenoiser.js
|
|
11687
|
-
var
|
|
11688
|
-
async function
|
|
11689
|
-
return
|
|
11706
|
+
var Nc = null;
|
|
11707
|
+
async function Pc() {
|
|
11708
|
+
return Nc ||= (await import("oidn-web")).initUNetFromURL, Nc;
|
|
11690
11709
|
}
|
|
11691
|
-
var
|
|
11710
|
+
var Fc = new Float32Array(3), Ic = {
|
|
11692
11711
|
BASE_URL: "https://cdn.jsdelivr.net/npm/denoiser/tzas/",
|
|
11693
11712
|
QUALITY_SUFFIXES: {
|
|
11694
11713
|
fast: "_small",
|
|
@@ -11701,7 +11720,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
11701
11720
|
debugGbufferMaps: !0,
|
|
11702
11721
|
tileSize: 256
|
|
11703
11722
|
}
|
|
11704
|
-
},
|
|
11723
|
+
}, Lc = class extends E {
|
|
11705
11724
|
constructor(e, t, n, r, i = {}) {
|
|
11706
11725
|
if (super(), !e || !t || !n || !r) throw Error("OIDNDenoiser requires output canvas, renderer, scene, and camera");
|
|
11707
11726
|
this.renderer = t, this.scene = n, this.camera = r, this.input = t.domElement, this.output = e, this.debugContainer = i.debugContainer || null, this.extractGBufferData = i.extractGBufferData || null, this.getMRTRenderTarget = i.getMRTRenderTarget || null, this.backendParamsGetter = i.backendParams || null, this.getGPUTextures = i.getGPUTextures || null, this.getExposure = i.getExposure || (() => 1), this.getToneMapping = i.getToneMapping || (() => c), this.getSaturation = i.getSaturation || (() => 1), this.getTransparentBackground = i.getTransparentBackground || (() => !1), this.isGPUMode = !!this.backendParamsGetter, this.gpuDevice = null, this._gpuInputBuffers = {
|
|
@@ -11712,7 +11731,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
11712
11731
|
width: 0,
|
|
11713
11732
|
height: 0
|
|
11714
11733
|
}, this._cachedAlpha = null, this._cachedAlphaWidth = 0, this.config = {
|
|
11715
|
-
...
|
|
11734
|
+
...Ic.DEFAULT_OPTIONS,
|
|
11716
11735
|
...i
|
|
11717
11736
|
}, this.enabled = this.config.enableOIDN, this.quality = this.config.oidnQuality, this.debugGbufferMaps = this.config.debugGbufferMaps, this.tileSize = this.config.tileSize, this.state = {
|
|
11718
11737
|
isDenoising: !1,
|
|
@@ -11768,7 +11787,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
11768
11787
|
let e = this.backendParamsGetter();
|
|
11769
11788
|
this.gpuDevice = e?.device ?? null, t = e?.device ? e : void 0;
|
|
11770
11789
|
}
|
|
11771
|
-
this.unet = await (await
|
|
11790
|
+
this.unet = await (await Pc())(e, t, {
|
|
11772
11791
|
aux: !0,
|
|
11773
11792
|
hdr: !0,
|
|
11774
11793
|
maxTileSize: this.tileSize
|
|
@@ -11783,14 +11802,14 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
11783
11802
|
}
|
|
11784
11803
|
}
|
|
11785
11804
|
_generateTzaUrl() {
|
|
11786
|
-
let { BASE_URL: e, QUALITY_SUFFIXES: t } =
|
|
11805
|
+
let { BASE_URL: e, QUALITY_SUFFIXES: t } = Ic;
|
|
11787
11806
|
return `${e}rt_hdr_alb_nrm${t[this.quality] || ""}.tza`;
|
|
11788
11807
|
}
|
|
11789
11808
|
async updateConfiguration(e) {
|
|
11790
11809
|
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());
|
|
11791
11810
|
}
|
|
11792
11811
|
async updateQuality(e) {
|
|
11793
|
-
if (!Object.prototype.hasOwnProperty.call(
|
|
11812
|
+
if (!Object.prototype.hasOwnProperty.call(Ic.QUALITY_SUFFIXES, e)) throw Error(`Invalid quality setting: ${e}. Must be one of: ${Object.keys(Ic.QUALITY_SUFFIXES).join(", ")}`);
|
|
11794
11813
|
await this.updateConfiguration({ oidnQuality: e });
|
|
11795
11814
|
}
|
|
11796
11815
|
async start() {
|
|
@@ -11964,10 +11983,10 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
11964
11983
|
f.copyBufferToBuffer(e.data, r, d, a, l);
|
|
11965
11984
|
}
|
|
11966
11985
|
r.queue.submit([f.finish()]), d.mapAsync(GPUMapMode.READ).then(() => {
|
|
11967
|
-
let e = new Float32Array(d.getMappedRange()), t = new ImageData(o, s), r = this.getExposure(), i = this.getSaturation(), a =
|
|
11986
|
+
let e = new Float32Array(d.getMappedRange()), t = new ImageData(o, s), r = this.getExposure(), i = this.getSaturation(), a = Dc.get(this.getToneMapping()) || Dc.get(c), l = this._cachedAlpha, u = this._cachedAlphaWidth;
|
|
11968
11987
|
for (let s = 0, c = e.length; s < c; s += 4) {
|
|
11969
11988
|
let c = e[s] * r, d = e[s + 1] * r, f = e[s + 2] * r;
|
|
11970
|
-
if (i !== 1 && (
|
|
11989
|
+
if (i !== 1 && (Fc[0] = c, Fc[1] = d, Fc[2] = f, Mc(Fc, i), c = Fc[0], d = Fc[1], f = Fc[2]), a(c, d, f, 1, Fc), t.data[s] = Fc[0] ** Oc * 255 | 0, t.data[s + 1] = Fc[1] ** Oc * 255 | 0, t.data[s + 2] = Fc[2] ** Oc * 255 | 0, l) {
|
|
11971
11990
|
let e = (s >> 2) % o, r = (s >> 2) / o | 0;
|
|
11972
11991
|
t.data[s + 3] = l[(n.y + r) * u + n.x + e];
|
|
11973
11992
|
} else t.data[s + 3] = 255;
|
|
@@ -11990,10 +12009,10 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
11990
12009
|
usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST
|
|
11991
12010
|
}), o = r.createCommandEncoder({ label: "oidn-readback" });
|
|
11992
12011
|
o.copyBufferToBuffer(e, 0, a, 0, i), r.queue.submit([o.finish()]), await a.mapAsync(GPUMapMode.READ);
|
|
11993
|
-
let s = new Float32Array(a.getMappedRange()), l = new ImageData(t, n), u = this.getExposure(), d = this.getSaturation(), f =
|
|
12012
|
+
let s = new Float32Array(a.getMappedRange()), l = new ImageData(t, n), u = this.getExposure(), d = this.getSaturation(), f = Dc.get(this.getToneMapping()) || Dc.get(c), p = this._cachedAlpha;
|
|
11994
12013
|
for (let e = 0, t = s.length; e < t; e += 4) {
|
|
11995
12014
|
let t = s[e] * u, n = s[e + 1] * u, r = s[e + 2] * u;
|
|
11996
|
-
d !== 1 && (
|
|
12015
|
+
d !== 1 && (Fc[0] = t, Fc[1] = n, Fc[2] = r, Mc(Fc, d), t = Fc[0], n = Fc[1], r = Fc[2]), f(t, n, r, 1, Fc), l.data[e] = Fc[0] ** Oc * 255 | 0, l.data[e + 1] = Fc[1] ** Oc * 255 | 0, l.data[e + 2] = Fc[2] ** Oc * 255 | 0, l.data[e + 3] = p ? p[e >> 2] : 255;
|
|
11997
12016
|
}
|
|
11998
12017
|
a.unmap(), a.destroy(), this.ctx.putImageData(l, 0, 0);
|
|
11999
12018
|
}
|
|
@@ -12011,7 +12030,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12011
12030
|
let t = this.debugHelpers && (this._lastAlbedoTexture !== e.textures[2] || this._lastNormalTexture !== e.textures[1]);
|
|
12012
12031
|
if (!this.debugHelpers || t) {
|
|
12013
12032
|
this.debugHelpers && (this.debugHelpers.albedo?.dispose(), this.debugHelpers.normal?.dispose(), console.log("OIDNDenoiser: Recreating debug helpers due to texture change")), this.debugHelpers = {
|
|
12014
|
-
albedo:
|
|
12033
|
+
albedo: Gs(this.renderer, e, {
|
|
12015
12034
|
width: 250,
|
|
12016
12035
|
height: 250,
|
|
12017
12036
|
position: "bottom-right",
|
|
@@ -12020,7 +12039,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12020
12039
|
autoUpdate: !1,
|
|
12021
12040
|
textureIndex: 2
|
|
12022
12041
|
}),
|
|
12023
|
-
normal:
|
|
12042
|
+
normal: Gs(this.renderer, e, {
|
|
12024
12043
|
width: 250,
|
|
12025
12044
|
height: 250,
|
|
12026
12045
|
position: "bottom-left",
|
|
@@ -12038,19 +12057,19 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12038
12057
|
dispose() {
|
|
12039
12058
|
this.abort(), this.unet?.dispose(), this._destroyGPUInputBuffers(), this.debugHelpers &&= (this.debugHelpers.albedo?.dispose(), this.debugHelpers.normal?.dispose(), null), this._lastAlbedoTexture = null, this._lastNormalTexture = null, this.output?.parentNode && this.output.remove(), this.unet = null, this.ctx = null, this.state.abortController = null, this.removeAllListeners?.(), console.log("OIDNDenoiser disposed");
|
|
12040
12059
|
}
|
|
12041
|
-
},
|
|
12060
|
+
}, Rc = "https://huggingface.co/notaneimu/onnx-image-models/resolve/main/", zc = {
|
|
12042
12061
|
QUALITY_PRESETS: {
|
|
12043
12062
|
fast: {
|
|
12044
|
-
2:
|
|
12045
|
-
4:
|
|
12063
|
+
2: Rc + "2x-spanx2-ch48.onnx",
|
|
12064
|
+
4: Rc + "4xNomos8k_span_otf_strong_fp32_opset17.onnx"
|
|
12046
12065
|
},
|
|
12047
12066
|
balanced: {
|
|
12048
|
-
2:
|
|
12049
|
-
4:
|
|
12067
|
+
2: Rc + "2xNomosUni_compact_otf_medium.onnx",
|
|
12068
|
+
4: Rc + "RealESRGAN_x4plus.onnx"
|
|
12050
12069
|
},
|
|
12051
12070
|
quality: {
|
|
12052
|
-
2:
|
|
12053
|
-
4:
|
|
12071
|
+
2: Rc + "2x-realesrgan-x2plus.onnx",
|
|
12072
|
+
4: Rc + "4xNomos2_hq_mosr_fp32.onnx"
|
|
12054
12073
|
}
|
|
12055
12074
|
},
|
|
12056
12075
|
TILE_SIZE: 512,
|
|
@@ -12062,17 +12081,17 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12062
12081
|
}],
|
|
12063
12082
|
graphOptimizationLevel: "all"
|
|
12064
12083
|
}
|
|
12065
|
-
},
|
|
12084
|
+
}, Bc = class extends E {
|
|
12066
12085
|
constructor(e, t, n = {}) {
|
|
12067
12086
|
if (super(), !e || !t) throw Error("AIUpscaler requires output canvas and renderer");
|
|
12068
|
-
this.renderer = t, this.input = t.domElement, this.output = e, this.getSourceCanvas = n.getSourceCanvas || null, this.getGPUTextures = n.getGPUTextures || null, this.getExposure = n.getExposure || (() => 1), this.getToneMapping = n.getToneMapping || (() => c), this.getSaturation = n.getSaturation || (() => 1), this.enabled = !1, this.hdr = !1, this.scaleFactor = n.scaleFactor || 2, this.quality = n.quality || "fast", this.tileSize = n.tileSize ||
|
|
12087
|
+
this.renderer = t, this.input = t.domElement, this.output = e, this.getSourceCanvas = n.getSourceCanvas || null, this.getGPUTextures = n.getGPUTextures || null, this.getExposure = n.getExposure || (() => 1), this.getToneMapping = n.getToneMapping || (() => c), this.getSaturation = n.getSaturation || (() => 1), this.enabled = !1, this.hdr = !1, this.scaleFactor = n.scaleFactor || 2, this.quality = n.quality || "fast", this.tileSize = n.tileSize || zc.TILE_SIZE, this._tileSizeOverride = !!n.tileSize, this.state = {
|
|
12069
12088
|
isUpscaling: !1,
|
|
12070
12089
|
isLoading: !1,
|
|
12071
12090
|
abortController: null
|
|
12072
12091
|
}, this._worker = null, this._currentModelUrl = null, this._tileId = 0, this._upscaledAlpha = null, this._upscaledAlphaWidth = 0, this._backupCanvas = null, this._baseWidth = e.width, this._baseHeight = e.height;
|
|
12073
12092
|
}
|
|
12074
12093
|
async _ensureSession() {
|
|
12075
|
-
let e =
|
|
12094
|
+
let e = zc.QUALITY_PRESETS[this.quality];
|
|
12076
12095
|
if (!e) throw Error(`Unknown quality preset: ${this.quality}`);
|
|
12077
12096
|
let t = e[this.scaleFactor];
|
|
12078
12097
|
if (!t) throw Error(`No model for ${this.quality}/${this.scaleFactor}x`);
|
|
@@ -12093,7 +12112,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12093
12112
|
this._worker.addEventListener("message", r), this._worker.postMessage({
|
|
12094
12113
|
type: "load",
|
|
12095
12114
|
url: t,
|
|
12096
|
-
sessionOptions:
|
|
12115
|
+
sessionOptions: zc.SESSION_OPTIONS
|
|
12097
12116
|
});
|
|
12098
12117
|
}), this._currentModelUrl = t, this.dispatchEvent({ type: "loaded" });
|
|
12099
12118
|
} catch (e) {
|
|
@@ -12160,8 +12179,8 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12160
12179
|
willReadFrequently: !0,
|
|
12161
12180
|
alpha: !0
|
|
12162
12181
|
});
|
|
12163
|
-
this._cacheUpscaledAlpha(t, n * i, r * i), t.isHDR && (this._hdrToneMapFn =
|
|
12164
|
-
let o =
|
|
12182
|
+
this._cacheUpscaledAlpha(t, n * i, r * i), t.isHDR && (this._hdrToneMapFn = Dc.get(this.getToneMapping()) || Dc.get(c), this._hdrExposure = this.getExposure(), this._hdrSaturation = this.getSaturation(), this._tmOut = new Float32Array(3));
|
|
12183
|
+
let o = zc.TILE_OVERLAP, s = this.tileSize, l = s - o * 2, u = Math.ceil(n / l), d = Math.ceil(r / l), f = u * d, p = 0;
|
|
12165
12184
|
for (let o = 0; o < d; o++) for (let c = 0; c < u; c++) {
|
|
12166
12185
|
if (e.aborted) throw new DOMException("Aborted", "AbortError");
|
|
12167
12186
|
let u = Math.min(c * l, Math.max(0, n - s)), d = Math.min(o * l, Math.max(0, r - s)), m = Math.min(s, n - u), h = Math.min(s, r - d), g = this._extractTile(t, u, d, m, h), _ = await this._inferTile(g, m, h), v = u * i, y = d * i, b = m * i, x = h * i, S = this._tensorToImageData(_, b, x, v, y);
|
|
@@ -12231,7 +12250,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12231
12250
|
let u = ((n + e) * o + (t + i)) * 4, d = e * r + i;
|
|
12232
12251
|
if (s) {
|
|
12233
12252
|
let e = this._hdrToneMapFn, t = this._hdrExposure, n = this._hdrSaturation, r = a[u] * t, i = a[u + 1] * t, o = a[u + 2] * t;
|
|
12234
|
-
n !== 1 && (this._tmOut[0] = r, this._tmOut[1] = i, this._tmOut[2] = o,
|
|
12253
|
+
n !== 1 && (this._tmOut[0] = r, this._tmOut[1] = i, this._tmOut[2] = o, Mc(this._tmOut, n), r = this._tmOut[0], i = this._tmOut[1], o = this._tmOut[2]), e(r, i, o, 1, this._tmOut), l[d] = this._tmOut[0] ** +Oc, l[c + d] = this._tmOut[1] ** +Oc, l[2 * c + d] = this._tmOut[2] ** +Oc;
|
|
12235
12254
|
} else l[d] = a[u] / 255, l[c + d] = a[u + 1] / 255, l[2 * c + d] = a[u + 2] / 255;
|
|
12236
12255
|
}
|
|
12237
12256
|
return l;
|
|
@@ -12289,10 +12308,10 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12289
12308
|
this._backupCanvas = document.createElement("canvas"), this._backupCanvas.width = e.width, this._backupCanvas.height = e.height;
|
|
12290
12309
|
let t = this._backupCanvas.getContext("2d");
|
|
12291
12310
|
if (e.isHDR) {
|
|
12292
|
-
let { data: n, width: r, height: i } = e, a = t.createImageData(r, i), o = a.data, s =
|
|
12311
|
+
let { data: n, width: r, height: i } = e, a = t.createImageData(r, i), o = a.data, s = Dc.get(this.getToneMapping()) || Dc.get(c), l = this.getExposure(), u = this.getSaturation(), d = new Float32Array(3);
|
|
12293
12312
|
for (let e = 0, t = r * i; e < t; e++) {
|
|
12294
12313
|
let t = e * 4, r = n[t] * l, i = n[t + 1] * l, a = n[t + 2] * l;
|
|
12295
|
-
u !== 1 && (d[0] = r, d[1] = i, d[2] = a,
|
|
12314
|
+
u !== 1 && (d[0] = r, d[1] = i, d[2] = a, Mc(d, u), r = d[0], i = d[1], a = d[2]), s(r, i, a, 1, d), o[t] = d[0] ** +Oc * 255 + .5 | 0, o[t + 1] = d[1] ** +Oc * 255 + .5 | 0, o[t + 2] = d[2] ** +Oc * 255 + .5 | 0, o[t + 3] = 255;
|
|
12296
12315
|
}
|
|
12297
12316
|
t.putImageData(a, 0, 0);
|
|
12298
12317
|
} else t.putImageData(e, 0, 0);
|
|
@@ -12304,7 +12323,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12304
12323
|
this.hdr = !!e;
|
|
12305
12324
|
}
|
|
12306
12325
|
setQuality(e) {
|
|
12307
|
-
if (!
|
|
12326
|
+
if (!zc.QUALITY_PRESETS[e]) {
|
|
12308
12327
|
console.warn(`AIUpscaler: Invalid quality "${e}", must be fast/balanced/quality`);
|
|
12309
12328
|
return;
|
|
12310
12329
|
}
|
|
@@ -12323,7 +12342,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12323
12342
|
async dispose() {
|
|
12324
12343
|
this.abort(), this._worker &&= (this._worker.postMessage({ type: "dispose" }), this._worker.terminate(), null), this._currentModelUrl = null, this._backupCanvas = null, this._upscaledAlpha = null, this.state.abortController = null, console.log("AIUpscaler disposed");
|
|
12325
12344
|
}
|
|
12326
|
-
},
|
|
12345
|
+
}, Vc = class extends E {
|
|
12327
12346
|
constructor({ renderer: e, mainCanvas: t, scene: n, camera: r, stages: i, pipeline: a, getExposure: o, getSaturation: s, getTransparentBg: c }) {
|
|
12328
12347
|
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;
|
|
12329
12348
|
}
|
|
@@ -12347,7 +12366,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12347
12366
|
setupDenoiser() {
|
|
12348
12367
|
if (!this.denoiserCanvas) return;
|
|
12349
12368
|
let e = this._stages.pathTracer;
|
|
12350
|
-
this.denoiser = new
|
|
12369
|
+
this.denoiser = new Lc(this.denoiserCanvas, this.renderer, this.scene, this.camera, {
|
|
12351
12370
|
...Z,
|
|
12352
12371
|
backendParams: () => ({
|
|
12353
12372
|
device: this.renderer.backend.device,
|
|
@@ -12372,7 +12391,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12372
12391
|
setupUpscaler() {
|
|
12373
12392
|
if (!this.denoiserCanvas) return;
|
|
12374
12393
|
let e = this._stages.pathTracer;
|
|
12375
|
-
this.upscaler = new
|
|
12394
|
+
this.upscaler = new Bc(this.denoiserCanvas, this.renderer, {
|
|
12376
12395
|
scaleFactor: Z.upscalerScale || 2,
|
|
12377
12396
|
quality: Z.upscalerQuality || "fast",
|
|
12378
12397
|
getSourceCanvas: () => this.denoiser?.enabled ? null : this.renderer.domElement,
|
|
@@ -12530,7 +12549,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12530
12549
|
let t = Mn[e];
|
|
12531
12550
|
t && this._stages.asvgf?.updateParameters(t);
|
|
12532
12551
|
}
|
|
12533
|
-
},
|
|
12552
|
+
}, Hc = class {
|
|
12534
12553
|
constructor() {
|
|
12535
12554
|
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;
|
|
12536
12555
|
}
|
|
@@ -12554,7 +12573,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12554
12573
|
dispose() {
|
|
12555
12574
|
this.visible = !1;
|
|
12556
12575
|
}
|
|
12557
|
-
},
|
|
12576
|
+
}, Uc = class {
|
|
12558
12577
|
constructor(n, r, i) {
|
|
12559
12578
|
this.layer = "scene", this.visible = !0, this._outlineNode = Lt(r, i, {
|
|
12560
12579
|
selectedObjects: [],
|
|
@@ -12588,7 +12607,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12588
12607
|
dispose() {
|
|
12589
12608
|
this.visible = !1, this._outlineNode?.dispose(), this._material?.dispose(), this._quad?.dispose();
|
|
12590
12609
|
}
|
|
12591
|
-
},
|
|
12610
|
+
}, Wc = class {
|
|
12592
12611
|
constructor(e, t) {
|
|
12593
12612
|
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;
|
|
12594
12613
|
}
|
|
@@ -12600,13 +12619,13 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12600
12619
|
}
|
|
12601
12620
|
setupDefaultHelpers({ helperScene: e, meshScene: t, pipeline: n, denoisingManager: r, app: i, renderWidth: a, renderHeight: o }) {
|
|
12602
12621
|
this.setHelperScene(e);
|
|
12603
|
-
let s = new
|
|
12622
|
+
let s = new Hc();
|
|
12604
12623
|
this.register("tiles", s), s.setRenderSize(a || 1, o || 1), i.addEventListener("resolution_changed", (e) => {
|
|
12605
12624
|
s.setRenderSize(e.width, e.height);
|
|
12606
12625
|
}), n.eventBus.on("tile:changed", (e) => {
|
|
12607
12626
|
e.renderMode === 1 && e.tileBounds && (s.setActiveTile(e.tileBounds), s.show());
|
|
12608
12627
|
}), n.eventBus.on("pipeline:reset", () => s.hide()), i.addEventListener(gn.RENDER_COMPLETE, () => s.hide()), this._wireDenoiserTileEvents(s, r);
|
|
12609
|
-
let c = new
|
|
12628
|
+
let c = new Uc(this.renderer, t, this.camera);
|
|
12610
12629
|
this.register("outline", c);
|
|
12611
12630
|
}
|
|
12612
12631
|
_wireDenoiserTileEvents(e, t) {
|
|
@@ -12673,7 +12692,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12673
12692
|
for (let e of this._helpers.values()) e.dispose?.();
|
|
12674
12693
|
this._helpers.clear(), this._hudCanvas.parentElement && this._hudCanvas.parentElement.removeChild(this._hudCanvas);
|
|
12675
12694
|
}
|
|
12676
|
-
},
|
|
12695
|
+
}, Gc = class extends E {
|
|
12677
12696
|
constructor() {
|
|
12678
12697
|
super(), this.mixer = null, this.timer = new Ne(), this.actions = [], this.isPlaying = !1, this._scene = null, this._mixerRoot = null, this._meshes = null, this._meshTriRanges = null, this._posBuffer = null, this._tempVec = new Le(), this._skinnedCache = null, this._totalTriangleCount = 0, this._clipsCache = null, this._savedTimeScale = 1, this.onFinished = null, this.wakeCallback = null;
|
|
12679
12698
|
}
|
|
@@ -12773,7 +12792,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12773
12792
|
dispose() {
|
|
12774
12793
|
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;
|
|
12775
12794
|
}
|
|
12776
|
-
},
|
|
12795
|
+
}, Kc = class {
|
|
12777
12796
|
constructor({ camera: e, canvas: t, orbitControls: n, app: r }) {
|
|
12778
12797
|
this._app = r, this._orbitControls = n, this._camera = e, this._controls = new Rt(e, t), this._gizmoScene = new Oe(), this._gizmoScene.add(this._controls.getHelper()), this._attached = null, this._isDragging = !1, this._meshes = null, this._meshTriRanges = null, this._posBuffer = null, this._normalBuffer = null, this._skinnedCache = null, this._normalCache = null, this._tempVec = new Le(), this._normalMatrix = new oe(), this._refitInFlight = !1, this._baselineComputed = !1, this._onDraggingChanged = this._onDraggingChanged.bind(this), this._onObjectChange = this._onObjectChange.bind(this), this._controls.addEventListener("dragging-changed", this._onDraggingChanged), this._controls.addEventListener("objectChange", this._onObjectChange);
|
|
12779
12798
|
}
|
|
@@ -12884,9 +12903,9 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12884
12903
|
dispose() {
|
|
12885
12904
|
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;
|
|
12886
12905
|
}
|
|
12887
|
-
},
|
|
12906
|
+
}, qc = class extends E {
|
|
12888
12907
|
constructor(e, t = {}) {
|
|
12889
|
-
super(), this.canvas = e, this._autoResize = t.autoResize !== !1, this._showStats = t.showStats !== !1, this._statsContainer = t.statsContainer || null, this.settings = new
|
|
12908
|
+
super(), this.canvas = e, this._autoResize = t.autoResize !== !1, this._showStats = t.showStats !== !1, this._statsContainer = t.statsContainer || null, this.settings = new gc(Z), this.renderer = null, this.scene = null, this.meshScene = null, this._sceneHelpers = null, this.assetLoader = null, this._sdf = null, this._animRefitInFlight = !1, this.pipeline = null, this.stages = {}, this.cameraManager = null, this.lightManager = null, this.denoisingManager = null, this.overlayManager = null, this.interactionManager = null, this.transformManager = null, this.animationManager = new Gc(), this.environmentManager = null, this.isInitialized = !1, this.pauseRendering = !1, this.pathTracerEnabled = !0, this.animationManagerId = null, this.needsReset = !1, this._loadingInProgress = !1, this._needsDisplayRefresh = !1, this._paused = !1, this.completion = new uc(), this._resizeDebounceTimer = null;
|
|
12890
12909
|
}
|
|
12891
12910
|
async init() {
|
|
12892
12911
|
return await this._initRenderer(), this._initCameraManager(), this._initScenes(), this._initAssetPipeline(), this._initPipeline(), this._initManagers(), this._wireEvents(), this.stages.pathTracer.setTriangleData(new Float32Array(32), 0), this.stages.pathTracer.setBVHData(new Float32Array(16)), this.stages.pathTracer.materialData.setMaterialData(new Float32Array(16)), this.stages.pathTracer.setupMaterial(), this._showStats && this._initStats(), this.isInitialized = !0, console.log("WebGPU Path Tracer App initialized"), this;
|
|
@@ -12994,11 +13013,11 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12994
13013
|
}
|
|
12995
13014
|
async loadSceneData() {
|
|
12996
13015
|
this.interactionManager?.deselect(), this.animationManager.dispose(), this._animRefitInFlight = !1;
|
|
12997
|
-
let e = new
|
|
13016
|
+
let e = new rs("loadSceneData"), t = this.meshScene.environment, n = null;
|
|
12998
13017
|
return t?.image?.data && (e.start("Environment CDF build (worker)"), this.stages.pathTracer.scene.environment = t, n = this.stages.pathTracer.environment.buildEnvironmentCDF().then(() => e.end("Environment CDF build (worker)"))), e.start("BVH build (SceneProcessor)"), await this._sdf.buildBVH(this.meshScene), e.end("BVH build (SceneProcessor)"), bn({
|
|
12999
13018
|
status: "Transferring data to GPU...",
|
|
13000
13019
|
progress: 86
|
|
13001
|
-
}), await new Promise((e) => setTimeout(e, 0)), e.start("GPU data transfer"), this._sdf.uploadToPathTracer(this.stages.pathTracer, this.lightManager, this.meshScene, t) ? (e.end("GPU data transfer"), bn({
|
|
13020
|
+
}), await new Promise((e) => setTimeout(e, 0)), e.start("GPU data transfer"), this._sdf.uploadToPathTracer(this.stages.pathTracer, this.lightManager, this.meshScene, t) ? (this.stages.pathTracer._meshRefs = this.stages.pathTracer._collectMeshRefs(this.meshScene), this.stages.pathTracer.setMeshVisibilityData(this.stages.pathTracer._meshRefs), e.end("GPU data transfer"), bn({
|
|
13002
13021
|
status: "Compiling shaders...",
|
|
13003
13022
|
progress: 90
|
|
13004
13023
|
}), await new Promise((e) => setTimeout(e, 0)), e.start("Material setup (TSL compile)"), this.stages.pathTracer.setupMaterial(), e.end("Material setup (TSL compile)"), n && (bn({
|
|
@@ -13085,16 +13104,18 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
13085
13104
|
return this.stages.pathTracer?.frameCount || 0;
|
|
13086
13105
|
}
|
|
13087
13106
|
setMaterialProperty(e, t, n) {
|
|
13088
|
-
if (this.stages.pathTracer?.materialData.updateMaterialProperty(e, t, n), [
|
|
13089
|
-
"emissive",
|
|
13090
|
-
"emissiveIntensity",
|
|
13091
|
-
"visible"
|
|
13092
|
-
].includes(t) && this.stages.pathTracer?.enableEmissiveTriangleSampling?.value) {
|
|
13107
|
+
if (this.stages.pathTracer?.materialData.updateMaterialProperty(e, t, n), ["emissive", "emissiveIntensity"].includes(t) && this.stages.pathTracer?.enableEmissiveTriangleSampling?.value) {
|
|
13093
13108
|
let r = this._sdf.updateMaterialEmissive(e, t, n);
|
|
13094
13109
|
r && this.stages.pathTracer.setEmissiveTriangleData(r.rawData, r.emissiveCount, r.totalPower);
|
|
13095
13110
|
}
|
|
13096
13111
|
this.reset();
|
|
13097
13112
|
}
|
|
13113
|
+
setMeshVisibility(e, t) {
|
|
13114
|
+
this.stages.pathTracer?.updateMeshVisibility(e, t), this.reset();
|
|
13115
|
+
}
|
|
13116
|
+
updateAllMeshVisibility() {
|
|
13117
|
+
this.stages.pathTracer?.updateAllMeshVisibility(), this.reset();
|
|
13118
|
+
}
|
|
13098
13119
|
setTextureTransform(e, t, n) {
|
|
13099
13120
|
this.stages.pathTracer?.materialData.updateTextureTransform(e, t, n), this.reset();
|
|
13100
13121
|
}
|
|
@@ -13118,32 +13139,32 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
13118
13139
|
}), window.renderer = this.renderer, await this.renderer.init(), n.setLTC(Re.init()), this.renderer.toneMapping = c, this.renderer.toneMappingExposure = 1, this.renderer.setPixelRatio(1);
|
|
13119
13140
|
}
|
|
13120
13141
|
_initCameraManager() {
|
|
13121
|
-
this.cameraManager = new
|
|
13142
|
+
this.cameraManager = new _c(this.canvas);
|
|
13122
13143
|
}
|
|
13123
13144
|
_initScenes() {
|
|
13124
13145
|
this.scene = new Oe(), this.meshScene = new Oe(), this._sceneHelpers = new Bt();
|
|
13125
13146
|
}
|
|
13126
13147
|
_initAssetPipeline() {
|
|
13127
|
-
this._sdf = new
|
|
13148
|
+
this._sdf = new Rs(), this.assetLoader = new pc(this.meshScene, this.cameraManager.camera, this.cameraManager.controls), this.assetLoader.createFloorPlane(), this.cameraManager.controls.addEventListener("change", () => {
|
|
13128
13149
|
this.needsReset = !0, this.wake();
|
|
13129
13150
|
});
|
|
13130
13151
|
}
|
|
13131
13152
|
_initPipeline() {
|
|
13132
13153
|
this._createStages();
|
|
13133
13154
|
let { clientWidth: e, clientHeight: t } = this.canvas;
|
|
13134
|
-
this.pipeline = new
|
|
13155
|
+
this.pipeline = new lc(this.renderer, e || 1, t || 1), this.pipeline.addStage(this.stages.pathTracer), this.pipeline.addStage(this.stages.normalDepth), this.pipeline.addStage(this.stages.motionVector), this.pipeline.addStage(this.stages.ssrc), this.pipeline.addStage(this.stages.asvgf), this.pipeline.addStage(this.stages.variance), this.pipeline.addStage(this.stages.bilateralFilter), this.pipeline.addStage(this.stages.adaptiveSampling), this.pipeline.addStage(this.stages.edgeFilter), this.pipeline.addStage(this.stages.autoExposure), this.pipeline.addStage(this.stages.display);
|
|
13135
13156
|
let n = this.canvas.clientWidth || 1, r = this.canvas.clientHeight || 1;
|
|
13136
13157
|
this.pipeline.setSize(n, r);
|
|
13137
13158
|
}
|
|
13138
13159
|
_initManagers() {
|
|
13139
|
-
this.interactionManager = new
|
|
13160
|
+
this.interactionManager = new dc({
|
|
13140
13161
|
scene: this.meshScene,
|
|
13141
13162
|
camera: this.cameraManager.camera,
|
|
13142
13163
|
canvas: this.canvas,
|
|
13143
13164
|
assetLoader: this.assetLoader,
|
|
13144
13165
|
pathTracer: null,
|
|
13145
13166
|
floorPlane: this.assetLoader.floorPlane
|
|
13146
|
-
}), this.interactionManager.wireAppEvents(this), this.cameraManager.setInteractionManager(this.interactionManager), this.lightManager = new
|
|
13167
|
+
}), this.interactionManager.wireAppEvents(this), this.cameraManager.setInteractionManager(this.interactionManager), this.lightManager = new vc(this.scene, this._sceneHelpers, this.stages.pathTracer, { onReset: () => this.reset() }), this._setupDenoisingManager(), this._setupOverlayManager(), this.transformManager = new Kc({
|
|
13147
13168
|
camera: this.cameraManager.camera,
|
|
13148
13169
|
canvas: this.canvas,
|
|
13149
13170
|
orbitControls: this.cameraManager.controls,
|
|
@@ -13213,16 +13234,16 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
13213
13234
|
}
|
|
13214
13235
|
_createStages() {
|
|
13215
13236
|
let e = this.settings.get("adaptiveSamplingMax"), t = this.settings.get("useAdaptiveSampling");
|
|
13216
|
-
this.stages.pathTracer = new
|
|
13237
|
+
this.stages.pathTracer = new Hs(this.renderer, this.scene, this.cameraManager.camera), this.stages.normalDepth = new Us(this.renderer, { pathTracer: this.stages.pathTracer }), this.stages.motionVector = new Ws(this.renderer, this.cameraManager.camera, { pathTracer: this.stages.pathTracer }), this.stages.ssrc = new ac(this.renderer, { enabled: !1 }), this.stages.asvgf = new Ks(this.renderer, { enabled: !1 }), this.stages.variance = new Js(this.renderer, { enabled: !1 }), this.stages.bilateralFilter = new Xs(this.renderer, { enabled: !1 }), this.stages.adaptiveSampling = new $s(this.renderer, {
|
|
13217
13238
|
adaptiveSamplingMax: e,
|
|
13218
13239
|
enabled: t
|
|
13219
|
-
}), this.stages.edgeFilter = new
|
|
13240
|
+
}), this.stages.edgeFilter = new ec(this.renderer, { enabled: !1 }), this.stages.autoExposure = new nc(this.renderer, { enabled: Z.autoExposure ?? !1 }), this.stages.display = new oc(this.renderer, {
|
|
13220
13241
|
exposure: Z.autoExposure ? 1 : this.settings.get("exposure") ?? 1,
|
|
13221
13242
|
saturation: this.settings.get("saturation") ?? Z.saturation
|
|
13222
13243
|
});
|
|
13223
13244
|
}
|
|
13224
13245
|
_setupDenoisingManager() {
|
|
13225
|
-
this.denoisingManager = new
|
|
13246
|
+
this.denoisingManager = new Vc({
|
|
13226
13247
|
renderer: this.renderer,
|
|
13227
13248
|
mainCanvas: this.canvas,
|
|
13228
13249
|
scene: this.scene,
|
|
@@ -13274,7 +13295,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
13274
13295
|
this.scene.updateMatrixWorld(), this.overlayManager?.render(), this.transformManager?.render(this.renderer);
|
|
13275
13296
|
}
|
|
13276
13297
|
_setupOverlayManager() {
|
|
13277
|
-
this.overlayManager = new
|
|
13298
|
+
this.overlayManager = new Wc(this.renderer, this.cameraManager.camera), this.overlayManager.setupDefaultHelpers({
|
|
13278
13299
|
helperScene: this._sceneHelpers,
|
|
13279
13300
|
meshScene: this.meshScene,
|
|
13280
13301
|
pipeline: this.pipeline,
|
|
@@ -13290,7 +13311,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
13290
13311
|
_forwardEvents(e, t) {
|
|
13291
13312
|
if (e) for (let n of t) e.addEventListener(n, (e) => this.dispatchEvent(e));
|
|
13292
13313
|
}
|
|
13293
|
-
},
|
|
13314
|
+
}, Jc = class {
|
|
13294
13315
|
constructor(e) {
|
|
13295
13316
|
this._app = e, this._cancelled = !1, this._rendering = !1;
|
|
13296
13317
|
}
|
|
@@ -13390,6 +13411,6 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
13390
13411
|
}
|
|
13391
13412
|
};
|
|
13392
13413
|
//#endregion
|
|
13393
|
-
export { Ln as AF_DEFAULTS, Mn as ASVGF_QUALITY_PRESETS, In as AUTO_FOCUS_MODES,
|
|
13414
|
+
export { Ln as AF_DEFAULTS, Mn as ASVGF_QUALITY_PRESETS, In as AUTO_FOCUS_MODES, Gc as AnimationManager, Rn as BVH_LEAF_MARKERS, Fn as CAMERA_PRESETS, Nn as CAMERA_RANGES, _c as CameraManager, Bn as DEFAULT_TEXTURE_MATRIX, Vc as DenoisingManager, Z as ENGINE_DEFAULTS, gn as EngineEvents, Vn as FINAL_RENDER_CONFIG, dc as InteractionManager, vc as LightManager, Un as MEMORY_CONSTANTS, Wc as OverlayManager, Hn as PREVIEW_RENDER_CONFIG, qc as PathTracerApp, sc as PipelineContext, lc as RenderPipeline, gc as RenderSettings, pn as RenderStage, Pn as SKY_PRESETS, fn as StageExecutionMode, zn as TEXTURE_CONSTANTS, Q as TRIANGLE_DATA_LAYOUT, Kc as TransformManager, Jc as VideoRenderManager };
|
|
13394
13415
|
|
|
13395
13416
|
//# sourceMappingURL=rayzee.es.js.map
|