rayzee 5.0.2 → 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 +5 -0
- package/dist/rayzee.es.js +737 -714
- package/dist/rayzee.es.js.map +1 -1
- package/dist/rayzee.umd.js +31 -40
- 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/Struct.js +0 -1
- package/src/managers/MaterialDataManager.js +1 -2
package/dist/rayzee.es.js
CHANGED
|
@@ -1128,9 +1128,6 @@ var jn = class {
|
|
|
1128
1128
|
case "dispersion":
|
|
1129
1129
|
r[i + 16] = n;
|
|
1130
1130
|
break;
|
|
1131
|
-
case "visible":
|
|
1132
|
-
r[i + 17] = n;
|
|
1133
|
-
break;
|
|
1134
1131
|
case "sheen":
|
|
1135
1132
|
r[i + 18] = n;
|
|
1136
1133
|
break;
|
|
@@ -1209,7 +1206,7 @@ var jn = class {
|
|
|
1209
1206
|
return;
|
|
1210
1207
|
}
|
|
1211
1208
|
let n = this.materialStorageAttr.array, r = e * (zn.PIXELS_PER_MATERIAL * zn.RGBA_COMPONENTS);
|
|
1212
|
-
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;
|
|
1213
1210
|
let i = [
|
|
1214
1211
|
1,
|
|
1215
1212
|
0,
|
|
@@ -1792,7 +1789,6 @@ var wr = Cr({
|
|
|
1792
1789
|
alphaMode: "int",
|
|
1793
1790
|
side: "int",
|
|
1794
1791
|
depthWrite: "int",
|
|
1795
|
-
visible: "bool",
|
|
1796
1792
|
albedoMapIndex: "int",
|
|
1797
1793
|
emissiveMapIndex: "int",
|
|
1798
1794
|
normalMapIndex: "int",
|
|
@@ -2061,7 +2057,6 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2061
2057
|
attenuationColor: a.rgb,
|
|
2062
2058
|
attenuationDistance: a.a,
|
|
2063
2059
|
dispersion: o.r,
|
|
2064
|
-
visible: o.g,
|
|
2065
2060
|
sheen: o.b,
|
|
2066
2061
|
sheenRoughness: o.a,
|
|
2067
2062
|
sheenColor: s.rgb,
|
|
@@ -2117,28 +2112,14 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2117
2112
|
data2: O
|
|
2118
2113
|
})
|
|
2119
2114
|
});
|
|
2120
|
-
}), 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 =
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
visible: n.g.greaterThan(.5),
|
|
2129
|
-
opacity: r.r,
|
|
2130
|
-
side: B(r.g),
|
|
2131
|
-
transparent: r.b.greaterThan(.5)
|
|
2132
|
-
});
|
|
2133
|
-
}), _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]) => {
|
|
2134
|
-
let i = si.wrap(gi(e, r));
|
|
2135
|
-
return vi({
|
|
2136
|
-
visible: i.visible,
|
|
2137
|
-
side: i.side,
|
|
2138
|
-
rayDirection: t,
|
|
2139
|
-
normal: n
|
|
2140
|
-
});
|
|
2141
|
-
}), 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]) => {
|
|
2142
2123
|
let i = Er({
|
|
2143
2124
|
didHit: !1,
|
|
2144
2125
|
dst: z(0x56bc75e2d63100000),
|
|
@@ -2149,12 +2130,12 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2149
2130
|
meshIndex: B(-1),
|
|
2150
2131
|
boxTests: B(0),
|
|
2151
2132
|
triTests: B(0)
|
|
2152
|
-
}).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();
|
|
2153
2134
|
c.element(B(0)).assign(B(0));
|
|
2154
|
-
let u = H(J(1), ft(e.direction), st(e.direction, J(0))), d = H(J(1).div(e.direction), J(
|
|
2155
|
-
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))), () => {
|
|
2156
2137
|
m.addAssign(1), l.subAssign(1);
|
|
2157
|
-
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));
|
|
2158
2139
|
i.boxTests.addAssign(1), N(u.w.lessThan(0), () => {
|
|
2159
2140
|
N(u.w.greaterThan(z(-1.5)), () => {
|
|
2160
2141
|
let e = B(u.x).toVar(), t = B(u.y).toVar();
|
|
@@ -2163,7 +2144,7 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2163
2144
|
end: t
|
|
2164
2145
|
}, ({ i: t }) => {
|
|
2165
2146
|
i.triTests.addAssign(1);
|
|
2166
|
-
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({
|
|
2167
2148
|
rayOrigin: f,
|
|
2168
2149
|
rayDir: p,
|
|
2169
2150
|
pA: l,
|
|
@@ -2172,12 +2153,9 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2172
2153
|
closestHitDst: i.dst
|
|
2173
2154
|
});
|
|
2174
2155
|
N(m.w.greaterThan(.5), () => {
|
|
2175
|
-
let e = m.x, t = m.y, l = m.z, u = $(n, c, B(3), B(
|
|
2176
|
-
N(_i(g, r), () => {
|
|
2177
|
-
|
|
2178
|
-
N(yi(g, p, m, r), () => {
|
|
2179
|
-
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);
|
|
2180
|
-
});
|
|
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);
|
|
2181
2159
|
});
|
|
2182
2160
|
});
|
|
2183
2161
|
}), N(i.didHit.and(i.dst.lessThan(.001)), () => {
|
|
@@ -2185,17 +2163,22 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2185
2163
|
});
|
|
2186
2164
|
}).Else(() => {
|
|
2187
2165
|
let e = B(u.x).toVar();
|
|
2188
|
-
|
|
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)), () => {
|
|
2189
2172
|
c.element(l).assign(e), l.addAssign(1);
|
|
2190
2173
|
});
|
|
2191
2174
|
});
|
|
2192
2175
|
}).Else(() => {
|
|
2193
|
-
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({
|
|
2194
2177
|
rayOrigin: f,
|
|
2195
2178
|
invDir: d,
|
|
2196
2179
|
boxMin: u.xyz,
|
|
2197
2180
|
boxMax: n.xyz
|
|
2198
|
-
}).toVar(), m =
|
|
2181
|
+
}).toVar(), m = gi({
|
|
2199
2182
|
rayOrigin: f,
|
|
2200
2183
|
invDir: d,
|
|
2201
2184
|
boxMin: r.xyz,
|
|
@@ -2203,19 +2186,19 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2203
2186
|
}).toVar();
|
|
2204
2187
|
N(at(p, m).lessThan(i.dst), () => {
|
|
2205
2188
|
let e = p.lessThan(m), t = W(e, o, s).toVar(), n = W(e, s, o).toVar();
|
|
2206
|
-
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))), () => {
|
|
2207
2190
|
c.element(l).assign(n), l.addAssign(1);
|
|
2208
|
-
}), N(l.lessThan(B(
|
|
2191
|
+
}), N(l.lessThan(B(si)), () => {
|
|
2209
2192
|
c.element(l).assign(t), l.addAssign(1);
|
|
2210
2193
|
});
|
|
2211
2194
|
});
|
|
2212
2195
|
});
|
|
2213
2196
|
}), N(i.didHit, () => {
|
|
2214
2197
|
i.hitPoint.assign(e.origin.add(e.direction.mul(i.dst)));
|
|
2215
|
-
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));
|
|
2216
2199
|
i.uv.assign(r.xy.mul(t).add(r.zw.mul(o)).add(c.xy.mul(s))), i.triangleIndex.assign(a);
|
|
2217
2200
|
}), i;
|
|
2218
|
-
}),
|
|
2201
|
+
}), yi = M(([e, t, n, r, i]) => {
|
|
2219
2202
|
let a = Er({
|
|
2220
2203
|
didHit: !1,
|
|
2221
2204
|
dst: i,
|
|
@@ -2226,63 +2209,66 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2226
2209
|
meshIndex: B(-1),
|
|
2227
2210
|
boxTests: B(0),
|
|
2228
2211
|
triTests: B(0)
|
|
2229
|
-
}).toVar(), o =
|
|
2212
|
+
}).toVar(), o = mi(), s = B(1).toVar();
|
|
2230
2213
|
o.element(B(0)).assign(B(0));
|
|
2231
|
-
let c = H(J(1), ft(e.direction), st(e.direction, J(0))), l = H(J(1).div(e.direction), J(
|
|
2232
|
-
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))), () => {
|
|
2233
2216
|
u.addAssign(1), s.subAssign(1);
|
|
2234
|
-
let
|
|
2235
|
-
N(
|
|
2236
|
-
N(
|
|
2237
|
-
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();
|
|
2238
2221
|
P({
|
|
2239
2222
|
start: B(0),
|
|
2240
|
-
end:
|
|
2241
|
-
}, ({ i }) => {
|
|
2242
|
-
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({
|
|
2243
2226
|
rayOrigin: e.origin,
|
|
2244
2227
|
rayDir: e.direction,
|
|
2245
|
-
pA:
|
|
2246
|
-
pB:
|
|
2247
|
-
pC:
|
|
2228
|
+
pA: o,
|
|
2229
|
+
pB: s,
|
|
2230
|
+
pC: c,
|
|
2248
2231
|
closestHitDst: a.dst
|
|
2249
2232
|
});
|
|
2250
|
-
N(
|
|
2251
|
-
let t = $(n,
|
|
2252
|
-
|
|
2253
|
-
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();
|
|
2254
|
-
});
|
|
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();
|
|
2255
2236
|
});
|
|
2256
2237
|
});
|
|
2257
2238
|
}).Else(() => {
|
|
2258
|
-
let e = B(
|
|
2259
|
-
|
|
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)), () => {
|
|
2260
2246
|
o.element(s).assign(e), s.addAssign(1);
|
|
2261
2247
|
});
|
|
2262
2248
|
});
|
|
2263
2249
|
}).Else(() => {
|
|
2264
|
-
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({
|
|
2265
2251
|
rayOrigin: e.origin,
|
|
2266
2252
|
invDir: l,
|
|
2267
|
-
boxMin:
|
|
2253
|
+
boxMin: i.xyz,
|
|
2268
2254
|
boxMax: n.xyz
|
|
2269
|
-
}).toVar(), m =
|
|
2255
|
+
}).toVar(), m = gi({
|
|
2270
2256
|
rayOrigin: e.origin,
|
|
2271
2257
|
invDir: l,
|
|
2272
|
-
boxMin:
|
|
2258
|
+
boxMin: c.xyz,
|
|
2273
2259
|
boxMax: u.xyz
|
|
2274
2260
|
}).toVar();
|
|
2275
2261
|
N(at(p, m).lessThan(a.dst), () => {
|
|
2276
2262
|
let e = p.lessThan(m), t = W(e, d, f).toVar(), n = W(e, f, d).toVar();
|
|
2277
|
-
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))), () => {
|
|
2278
2264
|
o.element(s).assign(n), s.addAssign(1);
|
|
2279
|
-
}), N(s.lessThan(B(
|
|
2265
|
+
}), N(s.lessThan(B(si)), () => {
|
|
2280
2266
|
o.element(s).assign(t), s.addAssign(1);
|
|
2281
2267
|
});
|
|
2282
2268
|
});
|
|
2283
2269
|
});
|
|
2284
2270
|
}), a;
|
|
2285
|
-
}),
|
|
2271
|
+
}), bi = M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
2286
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();
|
|
2287
2273
|
return N(i.and(a.greaterThan(0)).and(o.lessThan(64)).and(s.greaterThan(.001)), () => {
|
|
2288
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);
|
|
@@ -2291,52 +2277,52 @@ var Zr = X("\n fn constructTBN( N: vec3f ) -> mat3x3f {\n\n var majorAxis: vec3
|
|
|
2291
2277
|
origin: h,
|
|
2292
2278
|
direction: g
|
|
2293
2279
|
});
|
|
2294
|
-
}),
|
|
2295
|
-
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({
|
|
2296
2282
|
direction: t,
|
|
2297
2283
|
environmentMatrix: n
|
|
2298
2284
|
}), 0).rgb);
|
|
2299
|
-
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]) => {
|
|
2300
2286
|
let a = Y(0).toVar();
|
|
2301
2287
|
return N(r.equal(0), () => {
|
|
2302
2288
|
a.assign(Y(0));
|
|
2303
2289
|
}).Else(() => {
|
|
2304
|
-
let o = vt(e,
|
|
2290
|
+
let o = vt(e, xi({
|
|
2305
2291
|
direction: t,
|
|
2306
2292
|
environmentMatrix: n
|
|
2307
|
-
}).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({
|
|
2308
2294
|
direction: t,
|
|
2309
2295
|
environmentMatrix: n
|
|
2310
2296
|
}).toVar(), l = z(i.x).mul(z(i.y)).mul(s).mul(c).toVar();
|
|
2311
2297
|
a.assign(Y(o, l));
|
|
2312
2298
|
}), a;
|
|
2313
|
-
}),
|
|
2314
|
-
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({
|
|
2315
2301
|
uv: A,
|
|
2316
2302
|
environmentMatrix: r
|
|
2317
2303
|
}).toVar(), te = vt(e, A, 0).rgb.mul(i).toVar();
|
|
2318
2304
|
c.assign(te);
|
|
2319
|
-
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({
|
|
2320
2306
|
direction: ee,
|
|
2321
2307
|
environmentMatrix: r
|
|
2322
2308
|
}).toVar();
|
|
2323
2309
|
return Y(ee, z(o.x).mul(z(o.y)).mul(ne).mul(re).toVar());
|
|
2324
|
-
}),
|
|
2325
|
-
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();
|
|
2326
2312
|
return N(p, () => {
|
|
2327
|
-
let n =
|
|
2313
|
+
let n = Di({
|
|
2328
2314
|
uv: e,
|
|
2329
2315
|
transform: t.albedoTransform
|
|
2330
2316
|
});
|
|
2331
2317
|
m.assign(n), h.assign(n), g.assign(n), _.assign(n), v.assign(n), y.assign(n);
|
|
2332
2318
|
}).Else(() => {
|
|
2333
|
-
m.assign(
|
|
2319
|
+
m.assign(Di({
|
|
2334
2320
|
uv: e,
|
|
2335
2321
|
transform: t.albedoTransform
|
|
2336
|
-
})), h.assign(l.select(m,
|
|
2322
|
+
})), h.assign(l.select(m, Di({
|
|
2337
2323
|
uv: e,
|
|
2338
2324
|
transform: t.normalTransform
|
|
2339
|
-
}))), v.assign(f.select(m,
|
|
2325
|
+
}))), v.assign(f.select(m, Di({
|
|
2340
2326
|
uv: e,
|
|
2341
2327
|
transform: t.emissiveTransform
|
|
2342
2328
|
}))), N(u, () => {
|
|
@@ -2344,12 +2330,12 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2344
2330
|
}).ElseIf(F(s.sub(n)).lessThan(c), () => {
|
|
2345
2331
|
y.assign(m);
|
|
2346
2332
|
}).Else(() => {
|
|
2347
|
-
y.assign(
|
|
2333
|
+
y.assign(Di({
|
|
2348
2334
|
uv: e,
|
|
2349
2335
|
transform: t.bumpTransform
|
|
2350
2336
|
}));
|
|
2351
2337
|
}), N(d, () => {
|
|
2352
|
-
g.assign(
|
|
2338
|
+
g.assign(Di({
|
|
2353
2339
|
uv: e,
|
|
2354
2340
|
transform: t.metalnessTransform
|
|
2355
2341
|
})), _.assign(g);
|
|
@@ -2359,7 +2345,7 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2359
2345
|
}).ElseIf(F(i.sub(r)).lessThan(c), () => {
|
|
2360
2346
|
g.assign(h);
|
|
2361
2347
|
}).Else(() => {
|
|
2362
|
-
g.assign(
|
|
2348
|
+
g.assign(Di({
|
|
2363
2349
|
uv: e,
|
|
2364
2350
|
transform: t.metalnessTransform
|
|
2365
2351
|
}));
|
|
@@ -2370,7 +2356,7 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2370
2356
|
}).ElseIf(F(a.sub(i)).lessThan(c), () => {
|
|
2371
2357
|
_.assign(g);
|
|
2372
2358
|
}).Else(() => {
|
|
2373
|
-
_.assign(
|
|
2359
|
+
_.assign(Di({
|
|
2374
2360
|
uv: e,
|
|
2375
2361
|
transform: t.roughnessTransform
|
|
2376
2362
|
}));
|
|
@@ -2388,13 +2374,13 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2388
2374
|
metalRoughSameUV: x,
|
|
2389
2375
|
albedoEmissiveSameUV: S
|
|
2390
2376
|
});
|
|
2391
|
-
}),
|
|
2377
|
+
}), ji = M(([e, t, n]) => {
|
|
2392
2378
|
let r = t.color.toVar();
|
|
2393
2379
|
return N(t.albedoMapIndex.greaterThanEqual(B(0)), () => {
|
|
2394
2380
|
let i = vt(e, n.albedoUV).depth(B(t.albedoMapIndex)).toVar();
|
|
2395
2381
|
r.assign(Y(t.color.rgb.mul(i.rgb), t.color.a.mul(i.a)));
|
|
2396
2382
|
}), r;
|
|
2397
|
-
}),
|
|
2383
|
+
}), Mi = M(([e, t, n, r]) => {
|
|
2398
2384
|
let i = n.metalness.toVar(), a = n.roughness.toVar();
|
|
2399
2385
|
return N(n.metalnessMapIndex.greaterThanEqual(B(0)).and(n.metalnessMapIndex.equal(n.roughnessMapIndex)), () => {
|
|
2400
2386
|
let t = vt(e, r.metalnessUV).depth(B(n.metalnessMapIndex));
|
|
@@ -2408,7 +2394,7 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2408
2394
|
a.assign(n.roughness.mul(e.g));
|
|
2409
2395
|
});
|
|
2410
2396
|
}), q(i, a);
|
|
2411
|
-
}),
|
|
2397
|
+
}), Ni = M(([e, t, n, r]) => {
|
|
2412
2398
|
let i = t.toVar();
|
|
2413
2399
|
return N(n.normalMapIndex.greaterThanEqual(B(0)), () => {
|
|
2414
2400
|
let a = vt(e, r.normalUV).depth(B(n.normalMapIndex)).xyz.mul(2).sub(1).toVar();
|
|
@@ -2416,27 +2402,27 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2416
2402
|
let o = U(Ye(F(t.z).lessThan(.999).select(J(0, 0, 1), J(1, 0, 0)), t)), s = Ye(t, o);
|
|
2417
2403
|
i.assign(U(o.mul(a.x).add(s.mul(a.y)).add(t.mul(a.z))));
|
|
2418
2404
|
}), i;
|
|
2419
|
-
}),
|
|
2405
|
+
}), Pi = M(([e, t, n, r]) => {
|
|
2420
2406
|
let i = t.toVar();
|
|
2421
2407
|
return N(n.bumpMapIndex.greaterThanEqual(B(0)), () => {
|
|
2422
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));
|
|
2423
2409
|
i.assign(U(H(t, p, L(n.bumpScale, 0, 1))));
|
|
2424
2410
|
}), i;
|
|
2425
|
-
}),
|
|
2411
|
+
}), Fi = M(([e, t, n, r]) => {
|
|
2426
2412
|
let i = t.emissive.mul(t.emissiveIntensity).toVar();
|
|
2427
2413
|
return N(t.emissiveMapIndex.greaterThanEqual(B(0)), () => {
|
|
2428
2414
|
let n = vt(e, r.emissiveUV).depth(B(t.emissiveMapIndex)).toVar();
|
|
2429
2415
|
i.assign(i.mul(n.rgb));
|
|
2430
2416
|
}), i;
|
|
2431
|
-
}),
|
|
2432
|
-
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();
|
|
2433
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, () => {
|
|
2434
|
-
let m = Nr.wrap(
|
|
2435
|
-
l.assign(
|
|
2436
|
-
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);
|
|
2437
2423
|
d.assign(h.x), f.assign(h.y);
|
|
2438
|
-
let g =
|
|
2439
|
-
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));
|
|
2440
2426
|
}), jr({
|
|
2441
2427
|
albedo: l,
|
|
2442
2428
|
emissive: u,
|
|
@@ -2446,27 +2432,27 @@ var Ti = /* @__PURE__ */ X("\n fn equirectDirectionPdf( direction: vec3f, enviro
|
|
|
2446
2432
|
hasTextures: m
|
|
2447
2433
|
});
|
|
2448
2434
|
});
|
|
2449
|
-
M(([e, t, n, r, i, a, o, s]) => jr.wrap(
|
|
2450
|
-
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]) => {
|
|
2451
2437
|
let i = z(0).toVar();
|
|
2452
2438
|
return N(t.greaterThanEqual(B(0)), () => {
|
|
2453
|
-
let a =
|
|
2439
|
+
let a = Di({
|
|
2454
2440
|
uv: n,
|
|
2455
2441
|
transform: r
|
|
2456
2442
|
});
|
|
2457
2443
|
i.assign(vt(e, a).depth(B(t)).r);
|
|
2458
2444
|
}), i;
|
|
2459
|
-
}),
|
|
2445
|
+
}), Ri = 32, zi = 16, Bi = 5, Vi = 1 / 1024, Hi = 8, Ui = Cr({
|
|
2460
2446
|
hitPoint: "vec3",
|
|
2461
2447
|
uv: "vec2",
|
|
2462
2448
|
normal: "vec3",
|
|
2463
2449
|
height: "float"
|
|
2464
|
-
}),
|
|
2465
|
-
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();
|
|
2466
2452
|
return N(F(C).greaterThan(1e-8), () => {
|
|
2467
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();
|
|
2468
2454
|
N(F(T).greaterThan(1e-10), () => {
|
|
2469
|
-
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();
|
|
2470
2456
|
P({
|
|
2471
2457
|
start: B(0),
|
|
2472
2458
|
end: E,
|
|
@@ -2474,7 +2460,7 @@ var zi = M(([e, t, n, r]) => {
|
|
|
2474
2460
|
condition: "<"
|
|
2475
2461
|
}, ({ i: e }) => {
|
|
2476
2462
|
N(ee.equal(B(0)), () => {
|
|
2477
|
-
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);
|
|
2478
2464
|
N(o.lessThanEqual(s).and(e.greaterThan(B(0))), () => {
|
|
2479
2465
|
ee.assign(1), A.assign(n);
|
|
2480
2466
|
}).Else(() => {
|
|
@@ -2485,80 +2471,80 @@ var zi = M(([e, t, n, r]) => {
|
|
|
2485
2471
|
let e = k.toVar(), n = A.toVar();
|
|
2486
2472
|
P({
|
|
2487
2473
|
start: B(0),
|
|
2488
|
-
end: B(
|
|
2474
|
+
end: B(Bi),
|
|
2489
2475
|
type: "int",
|
|
2490
2476
|
condition: "<"
|
|
2491
2477
|
}, () => {
|
|
2492
|
-
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);
|
|
2493
2479
|
N(s.lessThanEqual(c), () => {
|
|
2494
2480
|
n.assign(a);
|
|
2495
2481
|
}).Else(() => {
|
|
2496
2482
|
e.assign(a);
|
|
2497
2483
|
});
|
|
2498
2484
|
});
|
|
2499
|
-
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)));
|
|
2500
2486
|
o.assign(g), s.assign(h), c.assign(ee), l.assign(v);
|
|
2501
2487
|
});
|
|
2502
2488
|
});
|
|
2503
|
-
}),
|
|
2489
|
+
}), Ui({
|
|
2504
2490
|
hitPoint: o,
|
|
2505
2491
|
uv: s,
|
|
2506
2492
|
normal: c,
|
|
2507
2493
|
height: l
|
|
2508
2494
|
});
|
|
2509
|
-
}),
|
|
2495
|
+
}), Gi = 1e-6;
|
|
2510
2496
|
M(([e, t, n]) => {
|
|
2511
2497
|
let r = V(J(z(1).sub(n)), e);
|
|
2512
2498
|
return e.add(r.sub(e).mul(ct(z(1).sub(t), 5)));
|
|
2513
2499
|
});
|
|
2514
|
-
var
|
|
2500
|
+
var Ki = M(([e, t]) => {
|
|
2515
2501
|
let n = L(e, 0, 1);
|
|
2516
2502
|
return t.add(z(1).sub(t).mul(ct(z(1).sub(n), 5)));
|
|
2517
|
-
}),
|
|
2503
|
+
}), qi = M(([e, t]) => {
|
|
2518
2504
|
let n = L(e, 0, 1);
|
|
2519
2505
|
return t.add(J(1).sub(t).mul(ct(z(1).sub(n), 5)));
|
|
2520
|
-
}),
|
|
2506
|
+
}), Ji = M(([e]) => {
|
|
2521
2507
|
let t = ht(e);
|
|
2522
|
-
return J(1).add(t).div(V(J(1).sub(t), J(
|
|
2523
|
-
}),
|
|
2524
|
-
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);
|
|
2525
2511
|
return i.mul(i);
|
|
2526
|
-
}),
|
|
2527
|
-
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);
|
|
2528
2514
|
return i.mul(i);
|
|
2529
|
-
}),
|
|
2515
|
+
}), Zi = (e) => J(Xi(e, z(1))), Qi = M(([e, t]) => {
|
|
2530
2516
|
let n = t.mul(t), r = n.mul(n), i = e.mul(e).mul(r.sub(1)).add(1);
|
|
2531
2517
|
return r.div(V(z(Rr).mul(i).mul(i), Vr));
|
|
2532
|
-
}),
|
|
2518
|
+
}), $i = M(([e, t]) => {
|
|
2533
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);
|
|
2534
2520
|
return at(i.mul(i).div(V(z(Rr).mul(a).mul(a), Vr)), 100);
|
|
2535
|
-
}),
|
|
2521
|
+
}), ea = M(([e, t]) => {
|
|
2536
2522
|
let n = t.add(1), r = n.mul(n).div(8);
|
|
2537
2523
|
return e.div(V(e.mul(z(1).sub(r)).add(r), Vr));
|
|
2538
|
-
}),
|
|
2539
|
-
let r =
|
|
2540
|
-
return
|
|
2541
|
-
}),
|
|
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]) => {
|
|
2542
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);
|
|
2543
2529
|
return J(1).add(e.mul(z(1).div(u).sub(1)));
|
|
2544
|
-
}),
|
|
2530
|
+
}), ra = M(([e, t, n]) => {
|
|
2545
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)));
|
|
2546
2532
|
return L(u.mul(f), J(0), J(1));
|
|
2547
|
-
}),
|
|
2548
|
-
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);
|
|
2549
2535
|
return r.mul(i).div(V(t.mul(4), Vr));
|
|
2550
|
-
}),
|
|
2536
|
+
}), oa = M(([e, t]) => {
|
|
2551
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();
|
|
2552
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));
|
|
2553
|
-
}),
|
|
2539
|
+
}), sa = M(([e, t, n, r, i]) => {
|
|
2554
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();
|
|
2555
2541
|
return N(s.lessThan(0), () => {
|
|
2556
2542
|
c.assign(J(1));
|
|
2557
2543
|
}).Else(() => {
|
|
2558
|
-
let t = ht(s).toVar(), o =
|
|
2559
|
-
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)));
|
|
2560
2546
|
}), c;
|
|
2561
|
-
}),
|
|
2547
|
+
}), ca = M(([e, t, n]) => {
|
|
2562
2548
|
let r = n.invRoughness, i = n.metalFactor, a = z(0).toVar();
|
|
2563
2549
|
N(t.isMetallic, () => {
|
|
2564
2550
|
a.assign(V(r.mul(i), .7));
|
|
@@ -2617,7 +2603,7 @@ M(([e, t]) => {
|
|
|
2617
2603
|
n.assign(L(o, 0, 1));
|
|
2618
2604
|
}), n;
|
|
2619
2605
|
});
|
|
2620
|
-
var
|
|
2606
|
+
var la = M(([e, t, n, r, i, a]) => {
|
|
2621
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({
|
|
2622
2608
|
NoV: z(.5),
|
|
2623
2609
|
isPurelyDiffuse: !1,
|
|
@@ -2626,7 +2612,7 @@ var da = M(([e, t, n, r, i, a]) => {
|
|
|
2626
2612
|
alpha: e.roughness.mul(e.roughness),
|
|
2627
2613
|
alpha2: e.roughness.mul(e.roughness).mul(e.roughness).mul(e.roughness),
|
|
2628
2614
|
k: e.roughness.add(1).mul(e.roughness.add(1)).div(8),
|
|
2629
|
-
F0:
|
|
2615
|
+
F0: Zi(e.ior),
|
|
2630
2616
|
diffuseColor: e.color.rgb,
|
|
2631
2617
|
specularColor: e.color.rgb,
|
|
2632
2618
|
tsAlbedo: e.color,
|
|
@@ -2639,7 +2625,7 @@ var da = M(([e, t, n, r, i, a]) => {
|
|
|
2639
2625
|
metalFactor: s,
|
|
2640
2626
|
iorFactor: c,
|
|
2641
2627
|
maxSheenColor: l
|
|
2642
|
-
}), 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();
|
|
2643
2629
|
N(t.greaterThan(B(2)), () => {
|
|
2644
2630
|
let e = z(1).div(z(t).sub(1));
|
|
2645
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)));
|
|
@@ -2663,8 +2649,8 @@ var da = M(([e, t, n, r, i, a]) => {
|
|
|
2663
2649
|
clearcoatImportance: h,
|
|
2664
2650
|
envmapImportance: z(0)
|
|
2665
2651
|
});
|
|
2666
|
-
}),
|
|
2667
|
-
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();
|
|
2668
2654
|
return Pr({
|
|
2669
2655
|
NoV: a,
|
|
2670
2656
|
isPurelyDiffuse: o,
|
|
@@ -2689,7 +2675,7 @@ var da = M(([e, t, n, r, i, a]) => {
|
|
|
2689
2675
|
});
|
|
2690
2676
|
});
|
|
2691
2677
|
M(([e, t, n]) => {
|
|
2692
|
-
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({
|
|
2693
2679
|
albedo: n.color,
|
|
2694
2680
|
emissive: n.emissive.mul(n.emissiveIntensity),
|
|
2695
2681
|
metalness: n.metalness,
|
|
@@ -2722,9 +2708,9 @@ M(([e, t, n]) => {
|
|
|
2722
2708
|
});
|
|
2723
2709
|
//#endregion
|
|
2724
2710
|
//#region src/TSL/MaterialSampling.js
|
|
2725
|
-
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");
|
|
2726
2712
|
M(([e]) => V(e, Wr).mul(zr));
|
|
2727
|
-
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]) => {
|
|
2728
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({
|
|
2729
2715
|
NoV: z(.5),
|
|
2730
2716
|
isPurelyDiffuse: !1,
|
|
@@ -2733,7 +2719,7 @@ var ga = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
|
|
|
2733
2719
|
alpha: n.roughness.mul(n.roughness),
|
|
2734
2720
|
alpha2: n.roughness.mul(n.roughness).mul(n.roughness).mul(n.roughness),
|
|
2735
2721
|
k: n.roughness.add(1).mul(n.roughness.add(1)).div(8),
|
|
2736
|
-
F0:
|
|
2722
|
+
F0: Zi(n.ior),
|
|
2737
2723
|
diffuseColor: n.color.rgb,
|
|
2738
2724
|
specularColor: n.color.rgb,
|
|
2739
2725
|
tsAlbedo: n.color,
|
|
@@ -2746,7 +2732,7 @@ var ga = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
|
|
|
2746
2732
|
metalFactor: a,
|
|
2747
2733
|
iorFactor: o,
|
|
2748
2734
|
maxSheenColor: s
|
|
2749
|
-
}), 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);
|
|
2750
2736
|
return Lr({
|
|
2751
2737
|
diffuse: p.mul(b),
|
|
2752
2738
|
specular: m.mul(b),
|
|
@@ -2756,15 +2742,15 @@ var ga = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
|
|
|
2756
2742
|
iridescence: v.mul(b),
|
|
2757
2743
|
totalWeight: y
|
|
2758
2744
|
});
|
|
2759
|
-
}),
|
|
2745
|
+
}), ga = M(([e, t, n, r, i, a]) => {
|
|
2760
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);
|
|
2761
2747
|
N(d.greaterThan(0), () => {
|
|
2762
2748
|
o.assign(d.div(Rr));
|
|
2763
2749
|
});
|
|
2764
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);
|
|
2765
2751
|
N(p.greaterThan(0).and(m.greaterThan(0)).and(h.greaterThan(0)), () => {
|
|
2766
|
-
s.assign(
|
|
2767
|
-
c.assign(
|
|
2752
|
+
s.assign(ia(p, m, r.roughness)), N(r.clearcoat.greaterThan(0), () => {
|
|
2753
|
+
c.assign(ia(p, m, r.clearcoatRoughness));
|
|
2768
2754
|
});
|
|
2769
2755
|
}), N(r.transmission.greaterThan(0).and(d.lessThan(0)), () => {
|
|
2770
2756
|
l.assign(F(d).div(Rr));
|
|
@@ -2778,34 +2764,34 @@ var ga = /* @__PURE__ */ X("\n fn sampleGGXVNDF( V: vec3f, roughness: f32, Xi: v
|
|
|
2778
2764
|
}), C;
|
|
2779
2765
|
});
|
|
2780
2766
|
M(([e, t, n, r, i, a]) => {
|
|
2781
|
-
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();
|
|
2782
2768
|
N(s.lessThan(c), () => {
|
|
2783
|
-
f.assign(
|
|
2769
|
+
f.assign(fa({
|
|
2784
2770
|
N: t,
|
|
2785
2771
|
xi: r
|
|
2786
2772
|
})), p.assign(V(R(t, f), 0).div(Rr)), m.assign(p.mul(o.diffuse));
|
|
2787
2773
|
}).ElseIf(s.lessThan(l), () => {
|
|
2788
|
-
let i =
|
|
2774
|
+
let i = da({
|
|
2789
2775
|
N: t,
|
|
2790
2776
|
roughness: n.roughness,
|
|
2791
2777
|
Xi: r
|
|
2792
2778
|
}).toVar();
|
|
2793
2779
|
f.assign(lt(e.negate(), i)), N(R(t, f).greaterThan(0), () => {
|
|
2794
2780
|
let r = V(R(t, i), 0), a = V(R(e, i), 0);
|
|
2795
|
-
p.assign(
|
|
2781
|
+
p.assign(ia(r, a, n.roughness));
|
|
2796
2782
|
}), m.assign(p.mul(o.specular));
|
|
2797
2783
|
}).ElseIf(s.lessThan(u).and(n.clearcoat.greaterThan(0)), () => {
|
|
2798
|
-
let i =
|
|
2784
|
+
let i = da({
|
|
2799
2785
|
N: t,
|
|
2800
2786
|
roughness: n.clearcoatRoughness,
|
|
2801
2787
|
Xi: r
|
|
2802
2788
|
}).toVar();
|
|
2803
2789
|
f.assign(lt(e.negate(), i)), N(R(t, f).greaterThan(0), () => {
|
|
2804
2790
|
let r = V(R(t, i), 0), a = V(R(e, i), 0);
|
|
2805
|
-
p.assign(
|
|
2791
|
+
p.assign(ia(r, a, n.clearcoatRoughness));
|
|
2806
2792
|
}), m.assign(p.mul(o.clearcoat));
|
|
2807
2793
|
}).ElseIf(s.lessThan(d).and(n.transmission.greaterThan(0)), () => {
|
|
2808
|
-
let i =
|
|
2794
|
+
let i = da({
|
|
2809
2795
|
N: t,
|
|
2810
2796
|
roughness: n.roughness,
|
|
2811
2797
|
Xi: r
|
|
@@ -2813,17 +2799,17 @@ M(([e, t, n, r, i, a]) => {
|
|
|
2813
2799
|
N(R(a, a).greaterThan(.001), () => {
|
|
2814
2800
|
f.assign(U(a));
|
|
2815
2801
|
let r = V(R(t, i), 0), o = V(R(e, i), 0);
|
|
2816
|
-
p.assign(
|
|
2802
|
+
p.assign(ia(r, o, n.roughness));
|
|
2817
2803
|
}).Else(() => {
|
|
2818
2804
|
f.assign(lt(e.negate(), i)), p.assign(.1);
|
|
2819
2805
|
}), m.assign(p.mul(o.transmission));
|
|
2820
2806
|
}).Else(() => {
|
|
2821
|
-
f.assign(
|
|
2807
|
+
f.assign(fa({
|
|
2822
2808
|
N: t,
|
|
2823
2809
|
xi: r
|
|
2824
2810
|
})), p.assign(V(R(t, f), 0).div(Rr)), m.assign(p.mul(o.sheen.add(o.iridescence)));
|
|
2825
2811
|
});
|
|
2826
|
-
let h =
|
|
2812
|
+
let h = ga(f, e, t, n, o, m), g = a(e, f, t, n).toVar();
|
|
2827
2813
|
return g.mulAssign(h), Dr({
|
|
2828
2814
|
direction: f,
|
|
2829
2815
|
value: g,
|
|
@@ -2832,11 +2818,11 @@ M(([e, t, n, r, i, a]) => {
|
|
|
2832
2818
|
});
|
|
2833
2819
|
//#endregion
|
|
2834
2820
|
//#region src/TSL/MaterialTransmission.js
|
|
2835
|
-
var
|
|
2821
|
+
var _a = Cr({
|
|
2836
2822
|
direction: "vec3",
|
|
2837
2823
|
throughput: "vec3",
|
|
2838
2824
|
didReflect: "bool"
|
|
2839
|
-
}),
|
|
2825
|
+
}), va = Cr({
|
|
2840
2826
|
continueRay: "bool",
|
|
2841
2827
|
isTransmissive: "bool",
|
|
2842
2828
|
isAlphaSkip: "bool",
|
|
@@ -2852,11 +2838,11 @@ Cr({
|
|
|
2852
2838
|
attenuationDistance: "float",
|
|
2853
2839
|
dispersion: "float"
|
|
2854
2840
|
});
|
|
2855
|
-
var
|
|
2841
|
+
var ya = Cr({
|
|
2856
2842
|
wavelength: "float",
|
|
2857
2843
|
ior: "float",
|
|
2858
2844
|
colorWeight: "vec3"
|
|
2859
|
-
}),
|
|
2845
|
+
}), ba = Cr({
|
|
2860
2846
|
direction: "vec3",
|
|
2861
2847
|
halfVector: "vec3",
|
|
2862
2848
|
didReflect: "bool",
|
|
@@ -2892,7 +2878,7 @@ Cr({
|
|
|
2892
2878
|
});
|
|
2893
2879
|
}), t;
|
|
2894
2880
|
});
|
|
2895
|
-
var
|
|
2881
|
+
var xa = M(([e, t, n]) => {
|
|
2896
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();
|
|
2897
2883
|
return N(r.greaterThanEqual(380).and(r.lessThan(420)), () => {
|
|
2898
2884
|
c.assign(J(.9, 0, 1));
|
|
@@ -2908,17 +2894,17 @@ var Ca = M(([e, t, n]) => {
|
|
|
2908
2894
|
c.assign(J(1, .5, 0));
|
|
2909
2895
|
}), N(r.greaterThanEqual(620).and(r.lessThanEqual(700)), () => {
|
|
2910
2896
|
c.assign(J(1, 0, 0));
|
|
2911
|
-
}), 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({
|
|
2912
2898
|
wavelength: r,
|
|
2913
2899
|
ior: s,
|
|
2914
2900
|
colorWeight: c
|
|
2915
2901
|
});
|
|
2916
|
-
}),
|
|
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]) => {
|
|
2917
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();
|
|
2918
2904
|
return N(s.lessThanEqual(1), () => {
|
|
2919
|
-
let e =
|
|
2905
|
+
let e = Ki(o, Xi(a, i)), t = z(1).sub(e).mul(n.transmission).toVar();
|
|
2920
2906
|
N(r.not().and(n.attenuationDistance.greaterThan(0)), () => {
|
|
2921
|
-
let e =
|
|
2907
|
+
let e = Sa({
|
|
2922
2908
|
attenuationColor: n.attenuationColor,
|
|
2923
2909
|
attenuationDistance: n.attenuationDistance,
|
|
2924
2910
|
thickness: n.thickness
|
|
@@ -2926,8 +2912,8 @@ var Ca = M(([e, t, n]) => {
|
|
|
2926
2912
|
t.assign(t.mul(e.x.add(e.y).add(e.z).div(3)));
|
|
2927
2913
|
}), c.assign(L(t, 0, 1));
|
|
2928
2914
|
}), c;
|
|
2929
|
-
}),
|
|
2930
|
-
let c =
|
|
2915
|
+
}), wa = M(([e, t, n, r, i, a, o, s]) => {
|
|
2916
|
+
let c = ba({
|
|
2931
2917
|
direction: J(0),
|
|
2932
2918
|
halfVector: J(0),
|
|
2933
2919
|
didReflect: !1,
|
|
@@ -2935,7 +2921,7 @@ var Ca = M(([e, t, n]) => {
|
|
|
2935
2921
|
}).toVar();
|
|
2936
2922
|
return N(r.lessThanEqual(.05).and(a.greaterThan(0)), () => {
|
|
2937
2923
|
c.halfVector.assign(t), c.didReflect.assign(!1);
|
|
2938
|
-
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)));
|
|
2939
2925
|
o.assign(W(i, z(1).div(l.ior), l.ior));
|
|
2940
2926
|
let u = ut(e.negate(), t, o).toVar();
|
|
2941
2927
|
N(R(u, u).lessThan(.001), () => {
|
|
@@ -2944,7 +2930,7 @@ var Ca = M(([e, t, n]) => {
|
|
|
2944
2930
|
c.direction.assign(u), c.pdf.assign(1);
|
|
2945
2931
|
});
|
|
2946
2932
|
}).Else(() => {
|
|
2947
|
-
let l = V(Hr, r), u =
|
|
2933
|
+
let l = V(Hr, r), u = da({
|
|
2948
2934
|
N: t,
|
|
2949
2935
|
roughness: l,
|
|
2950
2936
|
Xi: o
|
|
@@ -2952,26 +2938,26 @@ var Ca = M(([e, t, n]) => {
|
|
|
2952
2938
|
c.halfVector.assign(u);
|
|
2953
2939
|
let d = W(i, z(1).div(n), n).toVar();
|
|
2954
2940
|
N(a.greaterThan(0), () => {
|
|
2955
|
-
let e =
|
|
2941
|
+
let e = ya.wrap(xa(n, a, $t(s)));
|
|
2956
2942
|
d.assign(W(i, z(1).div(e.ior), e.ior));
|
|
2957
2943
|
});
|
|
2958
2944
|
let f = L(R(u, e), .001, 1), p = ut(e.negate(), u, d).toVar();
|
|
2959
2945
|
N(R(p, p).lessThan(.001), () => {
|
|
2960
2946
|
c.direction.assign(lt(e.negate(), u)), c.didReflect.assign(!0);
|
|
2961
2947
|
let n = L(R(t, u), .001, 1), r = L(R(e, u), .001, 1);
|
|
2962
|
-
c.pdf.assign(
|
|
2948
|
+
c.pdf.assign(ia(n, r, l));
|
|
2963
2949
|
}).Else(() => {
|
|
2964
2950
|
c.direction.assign(p), c.didReflect.assign(!1);
|
|
2965
|
-
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));
|
|
2966
2952
|
c.pdf.assign(r.mul(e).mul(a));
|
|
2967
2953
|
});
|
|
2968
2954
|
}), c;
|
|
2969
|
-
}),
|
|
2970
|
-
let s =
|
|
2955
|
+
}), Ta = M(([e, t, n, r, i, a, o]) => {
|
|
2956
|
+
let s = _a({
|
|
2971
2957
|
direction: J(0),
|
|
2972
2958
|
throughput: J(1),
|
|
2973
2959
|
didReflect: !1
|
|
2974
|
-
}).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();
|
|
2975
2961
|
N(p, () => {
|
|
2976
2962
|
g.assign(1);
|
|
2977
2963
|
}).Else(() => {
|
|
@@ -2983,14 +2969,14 @@ var Ca = M(([e, t, n]) => {
|
|
|
2983
2969
|
let v = q($t(i).toVar(), $t(i).toVar());
|
|
2984
2970
|
return N(_, () => {
|
|
2985
2971
|
N(n.roughness.greaterThan(.05), () => {
|
|
2986
|
-
let e =
|
|
2972
|
+
let e = ba.wrap(wa(l, c, n.ior, n.roughness, r, z(0), v, i));
|
|
2987
2973
|
s.direction.assign(e.direction);
|
|
2988
2974
|
}).Else(() => {
|
|
2989
2975
|
s.direction.assign(lt(e, c));
|
|
2990
2976
|
}), s.throughput.assign(n.color.xyz.mul(h).div(V(g, .05)));
|
|
2991
2977
|
}).Else(() => {
|
|
2992
2978
|
N(n.roughness.greaterThan(.05).or(n.dispersion.greaterThan(0)), () => {
|
|
2993
|
-
let t =
|
|
2979
|
+
let t = ba.wrap(wa(l, c, n.ior, n.roughness, r, n.dispersion, v, i));
|
|
2994
2980
|
N(t.didReflect, () => {
|
|
2995
2981
|
s.direction.assign(t.direction), s.didReflect.assign(!0), s.throughput.assign(n.color.xyz.div(V(z(1).sub(g), .05)));
|
|
2996
2982
|
}).Else(() => {
|
|
@@ -3028,7 +3014,7 @@ var Ca = M(([e, t, n]) => {
|
|
|
3028
3014
|
s.direction.assign(ut(e, c, u.div(d))), s.throughput.assign(J(1));
|
|
3029
3015
|
}), N(s.didReflect.not(), () => {
|
|
3030
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)), () => {
|
|
3031
|
-
s.throughput.mulAssign(
|
|
3017
|
+
s.throughput.mulAssign(Sa({
|
|
3032
3018
|
attenuationColor: n.attenuationColor,
|
|
3033
3019
|
attenuationDistance: n.attenuationDistance,
|
|
3034
3020
|
thickness: n.thickness
|
|
@@ -3036,8 +3022,8 @@ var Ca = M(([e, t, n]) => {
|
|
|
3036
3022
|
}), s.throughput.mulAssign(z(1).sub(h).div(V(z(1).sub(g), .05)));
|
|
3037
3023
|
});
|
|
3038
3024
|
}), s;
|
|
3039
|
-
}),
|
|
3040
|
-
let c =
|
|
3025
|
+
}), Ea = M(([e, t, n, r, i, a, o, s]) => {
|
|
3026
|
+
let c = va({
|
|
3041
3027
|
continueRay: !1,
|
|
3042
3028
|
isTransmissive: !1,
|
|
3043
3029
|
isAlphaSkip: !1,
|
|
@@ -3065,17 +3051,17 @@ var Ca = M(([e, t, n]) => {
|
|
|
3065
3051
|
});
|
|
3066
3052
|
}), N(d.not().and(r.transmission.greaterThan(0)).and(a.greaterThan(B(0))), () => {
|
|
3067
3053
|
N(l.lessThan(r.transmission), () => {
|
|
3068
|
-
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));
|
|
3069
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));
|
|
3070
3056
|
});
|
|
3071
3057
|
});
|
|
3072
3058
|
}), c;
|
|
3073
|
-
}),
|
|
3059
|
+
}), Da = M(([e, t, n, r]) => {
|
|
3074
3060
|
let i = J(0).toVar();
|
|
3075
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)), () => {
|
|
3076
3062
|
i.assign(r.color.rgb.mul(z(1).sub(r.metalness)).mul(zr));
|
|
3077
3063
|
}).Else(() => {
|
|
3078
|
-
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();
|
|
3079
3065
|
N(r.dispersion.greaterThan(0).and(r.transmission.greaterThan(.5)), () => {
|
|
3080
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);
|
|
3081
3067
|
N(t.greaterThan(n), () => {
|
|
@@ -3083,12 +3069,12 @@ var Ca = M(([e, t, n]) => {
|
|
|
3083
3069
|
s.assign(H(s, r, e.mul(.3)));
|
|
3084
3070
|
});
|
|
3085
3071
|
}), N(r.iridescence.greaterThan(0), () => {
|
|
3086
|
-
let e = r.iridescenceThicknessRange.y, t =
|
|
3072
|
+
let e = r.iridescenceThicknessRange.y, t = sa(z(1), r.iridescenceIOR, a.VoH, e, o);
|
|
3087
3073
|
o.assign(H(o, t, r.iridescence));
|
|
3088
3074
|
});
|
|
3089
|
-
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();
|
|
3090
3076
|
N(r.sheen.greaterThan(0), () => {
|
|
3091
|
-
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);
|
|
3092
3078
|
i.assign(p.mul(s).add(t));
|
|
3093
3079
|
}).Else(() => {
|
|
3094
3080
|
i.assign(p);
|
|
@@ -3104,16 +3090,16 @@ M(([e, t, n, r, i]) => {
|
|
|
3104
3090
|
o.assign(s.greaterThan(Vr).select(o.div(ht(s)), J(0, 0, 1)));
|
|
3105
3091
|
let c = V(R(n, t), Vr), l = V(R(n, o), Vr), u = V(R(e, o), Vr);
|
|
3106
3092
|
N(i.NoV.mul(c).lessThan(0).and(r.transmission.greaterThan(0)), () => {
|
|
3107
|
-
a.assign(
|
|
3093
|
+
a.assign(Da(e, t, n, r));
|
|
3108
3094
|
}).Else(() => {
|
|
3109
3095
|
let e = i.F0.toVar();
|
|
3110
3096
|
N(r.iridescence.greaterThan(0), () => {
|
|
3111
|
-
let t = r.iridescenceThicknessRange.y, n =
|
|
3097
|
+
let t = r.iridescenceThicknessRange.y, n = sa(z(1), r.iridescenceIOR, u, t, e);
|
|
3112
3098
|
e.assign(L(H(e, n, r.iridescence), J(0), J(1)));
|
|
3113
3099
|
});
|
|
3114
|
-
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();
|
|
3115
3101
|
N(r.sheen.greaterThan(0), () => {
|
|
3116
|
-
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);
|
|
3117
3103
|
a.assign(g.mul(o).add(t));
|
|
3118
3104
|
}).Else(() => {
|
|
3119
3105
|
a.assign(g);
|
|
@@ -3121,50 +3107,50 @@ M(([e, t, n, r, i]) => {
|
|
|
3121
3107
|
});
|
|
3122
3108
|
}), a;
|
|
3123
3109
|
}), M(([e, t]) => {
|
|
3124
|
-
let n =
|
|
3110
|
+
let n = Ki(t, z(.04));
|
|
3125
3111
|
return z(1).sub(e.mul(n).mul(z(2).sub(n)));
|
|
3126
3112
|
});
|
|
3127
|
-
var
|
|
3128
|
-
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)));
|
|
3129
3115
|
return c.mul(m).add(J(p).mul(t.clearcoat));
|
|
3130
|
-
}),
|
|
3116
|
+
}), ka = Cr({
|
|
3131
3117
|
brdf: "vec3",
|
|
3132
3118
|
L: "vec3",
|
|
3133
3119
|
pdf: "float"
|
|
3134
|
-
}),
|
|
3120
|
+
}), Aa = M(([e, t, n, r, i]) => {
|
|
3135
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);
|
|
3136
3122
|
l.divAssign(f), u.divAssign(f), d.divAssign(f);
|
|
3137
3123
|
let p = $t(i), m = J(0).toVar(), h = J(0).toVar();
|
|
3138
3124
|
N(p.lessThan(u), () => {
|
|
3139
|
-
h.assign(
|
|
3125
|
+
h.assign(da({
|
|
3140
3126
|
N: a,
|
|
3141
3127
|
roughness: s,
|
|
3142
3128
|
Xi: r
|
|
3143
3129
|
})), m.assign(lt(o.negate(), h));
|
|
3144
3130
|
}).ElseIf(p.lessThan(u.add(l)), () => {
|
|
3145
|
-
h.assign(
|
|
3131
|
+
h.assign(da({
|
|
3146
3132
|
N: a,
|
|
3147
3133
|
roughness: c,
|
|
3148
3134
|
Xi: r
|
|
3149
3135
|
})), m.assign(lt(o.negate(), h));
|
|
3150
3136
|
}).Else(() => {
|
|
3151
|
-
m.assign(
|
|
3137
|
+
m.assign(fa({
|
|
3152
3138
|
N: a,
|
|
3153
3139
|
xi: r
|
|
3154
3140
|
})), h.assign(U(o.add(m)));
|
|
3155
3141
|
});
|
|
3156
|
-
let g = Ar.wrap(Qr(a, o, m)), _ =
|
|
3157
|
-
return
|
|
3158
|
-
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),
|
|
3159
3145
|
L: m,
|
|
3160
3146
|
pdf: b
|
|
3161
3147
|
});
|
|
3162
|
-
}),
|
|
3148
|
+
}), ja = Cr({
|
|
3163
3149
|
direction: "vec3",
|
|
3164
3150
|
color: "vec3",
|
|
3165
3151
|
intensity: "float",
|
|
3166
3152
|
angle: "float"
|
|
3167
|
-
}),
|
|
3153
|
+
}), Ma = Cr({
|
|
3168
3154
|
position: "vec3",
|
|
3169
3155
|
u: "vec3",
|
|
3170
3156
|
v: "vec3",
|
|
@@ -3172,13 +3158,13 @@ var Aa = M(([e, t]) => {
|
|
|
3172
3158
|
intensity: "float",
|
|
3173
3159
|
normal: "vec3",
|
|
3174
3160
|
area: "float"
|
|
3175
|
-
}),
|
|
3161
|
+
}), Na = Cr({
|
|
3176
3162
|
position: "vec3",
|
|
3177
3163
|
color: "vec3",
|
|
3178
3164
|
intensity: "float",
|
|
3179
3165
|
distance: "float",
|
|
3180
3166
|
decay: "float"
|
|
3181
|
-
}),
|
|
3167
|
+
}), Pa = Cr({
|
|
3182
3168
|
position: "vec3",
|
|
3183
3169
|
direction: "vec3",
|
|
3184
3170
|
color: "vec3",
|
|
@@ -3187,30 +3173,30 @@ var Aa = M(([e, t]) => {
|
|
|
3187
3173
|
penumbra: "float",
|
|
3188
3174
|
distance: "float",
|
|
3189
3175
|
decay: "float"
|
|
3190
|
-
}),
|
|
3176
|
+
}), Fa = Cr({
|
|
3191
3177
|
direction: "vec3",
|
|
3192
3178
|
emission: "vec3",
|
|
3193
3179
|
pdf: "float",
|
|
3194
3180
|
distance: "float",
|
|
3195
3181
|
lightType: "int",
|
|
3196
3182
|
valid: "bool"
|
|
3197
|
-
}),
|
|
3183
|
+
}), Ia = Cr({
|
|
3198
3184
|
direction: "vec3",
|
|
3199
3185
|
throughput: "vec3",
|
|
3200
3186
|
misWeight: "float",
|
|
3201
3187
|
pdf: "float",
|
|
3202
3188
|
combinedPdf: "float"
|
|
3203
|
-
}),
|
|
3189
|
+
}), La = M(([e, t]) => {
|
|
3204
3190
|
let n = t.mul(8);
|
|
3205
|
-
return
|
|
3191
|
+
return ja({
|
|
3206
3192
|
direction: U(J(e.element(n), e.element(n.add(1)), e.element(n.add(2)))),
|
|
3207
3193
|
color: J(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5))),
|
|
3208
3194
|
intensity: e.element(n.add(6)),
|
|
3209
3195
|
angle: e.element(n.add(7))
|
|
3210
3196
|
});
|
|
3211
|
-
}),
|
|
3197
|
+
}), Ra = M(([e, t]) => {
|
|
3212
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);
|
|
3213
|
-
return
|
|
3199
|
+
return Ma({
|
|
3214
3200
|
position: J(e.element(n), e.element(n.add(1)), e.element(n.add(2))),
|
|
3215
3201
|
u: r,
|
|
3216
3202
|
v: i,
|
|
@@ -3219,18 +3205,18 @@ var Aa = M(([e, t]) => {
|
|
|
3219
3205
|
normal: U(a),
|
|
3220
3206
|
area: et(a).mul(4)
|
|
3221
3207
|
});
|
|
3222
|
-
}),
|
|
3208
|
+
}), za = M(([e, t]) => {
|
|
3223
3209
|
let n = t.mul(9);
|
|
3224
|
-
return
|
|
3210
|
+
return Na({
|
|
3225
3211
|
position: J(e.element(n), e.element(n.add(1)), e.element(n.add(2))),
|
|
3226
3212
|
color: J(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5))),
|
|
3227
3213
|
intensity: e.element(n.add(6)),
|
|
3228
3214
|
distance: e.element(n.add(7)),
|
|
3229
3215
|
decay: e.element(n.add(8))
|
|
3230
3216
|
});
|
|
3231
|
-
}),
|
|
3217
|
+
}), Ba = M(([e, t]) => {
|
|
3232
3218
|
let n = t.mul(14);
|
|
3233
|
-
return
|
|
3219
|
+
return Pa({
|
|
3234
3220
|
position: J(e.element(n), e.element(n.add(1)), e.element(n.add(2))),
|
|
3235
3221
|
direction: U(J(e.element(n.add(3)), e.element(n.add(4)), e.element(n.add(5)))),
|
|
3236
3222
|
color: J(e.element(n.add(6)), e.element(n.add(7)), e.element(n.add(8))),
|
|
@@ -3240,7 +3226,7 @@ var Aa = M(([e, t]) => {
|
|
|
3240
3226
|
distance: e.element(n.add(12)),
|
|
3241
3227
|
decay: e.element(n.add(13))
|
|
3242
3228
|
});
|
|
3243
|
-
}),
|
|
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]) => {
|
|
3244
3230
|
let r = e.normal, i = R(r, n), a = z(-1).toVar();
|
|
3245
3231
|
return N(i.lessThan(-1e-4), () => {
|
|
3246
3232
|
let o = z(1).div(i), s = R(e.position.sub(t), r).mul(o).toVar();
|
|
@@ -3255,13 +3241,13 @@ var Aa = M(([e, t]) => {
|
|
|
3255
3241
|
M(([e, t, n]) => {
|
|
3256
3242
|
let r = z(1).toVar();
|
|
3257
3243
|
return N(e.material.transmission.greaterThan(0), () => {
|
|
3258
|
-
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);
|
|
3259
3245
|
r.assign(z(1).sub(i));
|
|
3260
3246
|
}).ElseIf(e.material.transparent, () => {
|
|
3261
3247
|
r.assign(e.material.opacity);
|
|
3262
3248
|
}), r;
|
|
3263
3249
|
});
|
|
3264
|
-
var
|
|
3250
|
+
var Ka = M(([e, t, n, r, i, a, o, s]) => {
|
|
3265
3251
|
let c = z(1).toVar(), l = e.toVar(), u = z(n).toVar();
|
|
3266
3252
|
return P({
|
|
3267
3253
|
start: B(0),
|
|
@@ -3278,10 +3264,10 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3278
3264
|
N(r.transmission.greaterThan(0), () => {
|
|
3279
3265
|
let e = R(t, n.normal).lessThan(0), i = W(e, n.normal, n.normal.negate());
|
|
3280
3266
|
N(e.not().and(r.attenuationDistance.greaterThan(0)), () => {
|
|
3281
|
-
let e = et(n.hitPoint.sub(l)), t =
|
|
3267
|
+
let e = et(n.hitPoint.sub(l)), t = Sa(r.attenuationColor, r.attenuationDistance, e);
|
|
3282
3268
|
c.mulAssign(t.x.add(t.y).add(t.z).div(3));
|
|
3283
3269
|
});
|
|
3284
|
-
let a =
|
|
3270
|
+
let a = Ki(F(R(t, i)), Xi(r.ior, z(1))), o = z(1).sub(a).mul(r.transmission);
|
|
3285
3271
|
c.mulAssign(o), N(c.lessThan(.005), () => {
|
|
3286
3272
|
c.assign(0), Ve();
|
|
3287
3273
|
}), l.assign(n.hitPoint.add(t.mul(.001))), u.subAssign(n.dst.add(.001));
|
|
@@ -3293,14 +3279,14 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3293
3279
|
c.assign(0), Ve();
|
|
3294
3280
|
});
|
|
3295
3281
|
}), c;
|
|
3296
|
-
}),
|
|
3282
|
+
}), qa = M(([e, t, n]) => {
|
|
3297
3283
|
let r = V(z(1e-4), et(e).mul(1e-6)).toVar().toVar();
|
|
3298
3284
|
return N(n.transmission.greaterThan(0), () => {
|
|
3299
3285
|
r.mulAssign(2);
|
|
3300
3286
|
}), N(n.roughness.lessThan(.1), () => {
|
|
3301
3287
|
r.mulAssign(1.5);
|
|
3302
3288
|
}), t.mul(r);
|
|
3303
|
-
}),
|
|
3289
|
+
}), Ja = M(([e, t, n, r, i]) => {
|
|
3304
3290
|
let a = V(z(0), R(n, e.direction)), o = z(0).toVar();
|
|
3305
3291
|
return N(a.greaterThan(0), () => {
|
|
3306
3292
|
let t = e.intensity.mul(R(e.color, Gr)), n = z(1).toVar();
|
|
@@ -3312,7 +3298,7 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3312
3298
|
let s = z(1).div(z(1).add(z(i).mul(.5)));
|
|
3313
3299
|
o.assign(t.mul(a).mul(n).mul(s));
|
|
3314
3300
|
}), o;
|
|
3315
|
-
}),
|
|
3301
|
+
}), Ya = M(([e, t, n, r]) => {
|
|
3316
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();
|
|
3317
3303
|
return N(c.greaterThan(0), () => {
|
|
3318
3304
|
let t = V(R(s, e.normal).negate(), 0);
|
|
@@ -3330,7 +3316,7 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3330
3316
|
}), l.assign(i.mul(n).mul(c).mul(t).mul(a));
|
|
3331
3317
|
});
|
|
3332
3318
|
}), l;
|
|
3333
|
-
}),
|
|
3319
|
+
}), Xa = M(([e, t, n, r]) => {
|
|
3334
3320
|
let i = e.position.sub(t), a = R(i, i), o = z(0).toVar();
|
|
3335
3321
|
return N(a.greaterThanEqual(.001), () => {
|
|
3336
3322
|
let t = ht(a), s = i.div(t), c = V(z(0), R(n, s));
|
|
@@ -3347,7 +3333,7 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3347
3333
|
}), o.assign(n.mul(t).mul(c).mul(i));
|
|
3348
3334
|
});
|
|
3349
3335
|
}), o;
|
|
3350
|
-
}),
|
|
3336
|
+
}), Za = M(([e, t, n, r]) => {
|
|
3351
3337
|
let i = e.position.sub(t), a = R(i, i), o = z(0).toVar();
|
|
3352
3338
|
return N(a.greaterThanEqual(.001), () => {
|
|
3353
3339
|
let t = i.div(ht(a)), s = V(z(0), R(n, t));
|
|
@@ -3359,7 +3345,7 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3359
3345
|
});
|
|
3360
3346
|
});
|
|
3361
3347
|
}), o;
|
|
3362
|
-
}),
|
|
3348
|
+
}), Qa = M(([e, t, n, r]) => {
|
|
3363
3349
|
let i = V(z(0), R(t, e.direction)), a = I(!1).toVar();
|
|
3364
3350
|
return N(e.intensity.lessThanEqual(.001).or(i.lessThanEqual(.001)), () => {
|
|
3365
3351
|
a.assign(!0);
|
|
@@ -3375,11 +3361,11 @@ var Ja = M(([e, t, n, r, i, a, o, s]) => {
|
|
|
3375
3361
|
});
|
|
3376
3362
|
M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
3377
3363
|
let d = J(0).toVar();
|
|
3378
|
-
return N(
|
|
3379
|
-
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();
|
|
3380
3366
|
N(e.angle.greaterThan(.001), () => {
|
|
3381
3367
|
let t = q($t(c).toVar(), $t(c).toVar()), n = e.angle.mul(.5);
|
|
3382
|
-
m.assign(
|
|
3368
|
+
m.assign(Wa({
|
|
3383
3369
|
direction: e.direction,
|
|
3384
3370
|
halfAngle: n,
|
|
3385
3371
|
xi: t
|
|
@@ -3411,9 +3397,9 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3411
3397
|
});
|
|
3412
3398
|
}), d;
|
|
3413
3399
|
}), M(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
|
|
3414
|
-
let p = J(0).toVar(), m =
|
|
3400
|
+
let p = J(0).toVar(), m = Ya(e, t, n, i);
|
|
3415
3401
|
return N(m.greaterThanEqual(.001), () => {
|
|
3416
|
-
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));
|
|
3417
3403
|
N(y.or(_).or(m.greaterThan(.1).and(v.not())), () => {
|
|
3418
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());
|
|
3419
3405
|
N(x.greaterThan(0).and(S.greaterThan(0)), () => {
|
|
@@ -3428,7 +3414,7 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3428
3414
|
});
|
|
3429
3415
|
}), N(y.or(v).and(o.pdf.greaterThan(0)), () => {
|
|
3430
3416
|
N(R(e.position.sub(g), o.direction).greaterThan(0), () => {
|
|
3431
|
-
let t =
|
|
3417
|
+
let t = Ga(e, g, o.direction);
|
|
3432
3418
|
N(t.greaterThan(0), () => {
|
|
3433
3419
|
let r = u(g, o.direction, t, l);
|
|
3434
3420
|
N(r.greaterThan(0), () => {
|
|
@@ -3450,7 +3436,7 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3450
3436
|
return N(p.lessThanEqual(1e3), () => {
|
|
3451
3437
|
let a = f.div(p), o = R(n, a);
|
|
3452
3438
|
N(o.greaterThan(0), () => {
|
|
3453
|
-
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);
|
|
3454
3440
|
N(h.greaterThan(0), () => {
|
|
3455
3441
|
let e = u(r, a, n, i);
|
|
3456
3442
|
d.assign(e.mul(f).mul(o).mul(h));
|
|
@@ -3464,7 +3450,7 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3464
3450
|
N(o.greaterThan(0), () => {
|
|
3465
3451
|
let s = R(a.negate(), e.direction), f = Je(e.angle);
|
|
3466
3452
|
N(s.greaterThanEqual(f), () => {
|
|
3467
|
-
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);
|
|
3468
3454
|
N(v.greaterThan(0), () => {
|
|
3469
3455
|
let e = u(r, a, n, i);
|
|
3470
3456
|
d.assign(e.mul(g).mul(o).mul(v));
|
|
@@ -3475,8 +3461,8 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3475
3461
|
});
|
|
3476
3462
|
//#endregion
|
|
3477
3463
|
//#region src/TSL/LightsSampling.js
|
|
3478
|
-
var
|
|
3479
|
-
M(() =>
|
|
3464
|
+
var $a = 2 * Rr;
|
|
3465
|
+
M(() => Fa({
|
|
3480
3466
|
valid: I(!1),
|
|
3481
3467
|
direction: J(0, 1, 0),
|
|
3482
3468
|
emission: J(0),
|
|
@@ -3484,7 +3470,7 @@ M(() => La({
|
|
|
3484
3470
|
pdf: z(0),
|
|
3485
3471
|
lightType: B(2)
|
|
3486
3472
|
}));
|
|
3487
|
-
var
|
|
3473
|
+
var eo = M(([e, t, n, r]) => {
|
|
3488
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();
|
|
3489
3475
|
return N(e.area.greaterThan(0), () => {
|
|
3490
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();
|
|
@@ -3492,7 +3478,7 @@ var no = M(([e, t, n, r]) => {
|
|
|
3492
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();
|
|
3493
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));
|
|
3494
3480
|
});
|
|
3495
|
-
}),
|
|
3481
|
+
}), Fa({
|
|
3496
3482
|
valid: i,
|
|
3497
3483
|
direction: a,
|
|
3498
3484
|
emission: o,
|
|
@@ -3504,12 +3490,12 @@ var no = M(([e, t, n, r]) => {
|
|
|
3504
3490
|
M(([e, t, n, r]) => {
|
|
3505
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();
|
|
3506
3492
|
return N(e.area.greaterThan(0), () => {
|
|
3507
|
-
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();
|
|
3508
3494
|
N(h.greaterThanEqual(1e-10), () => {
|
|
3509
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();
|
|
3510
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));
|
|
3511
3497
|
});
|
|
3512
|
-
}),
|
|
3498
|
+
}), Fa({
|
|
3513
3499
|
valid: i,
|
|
3514
3500
|
direction: a,
|
|
3515
3501
|
emission: o,
|
|
@@ -3518,23 +3504,23 @@ M(([e, t, n, r]) => {
|
|
|
3518
3504
|
lightType: l
|
|
3519
3505
|
});
|
|
3520
3506
|
});
|
|
3521
|
-
var
|
|
3507
|
+
var to = M(([e, t, n, r]) => {
|
|
3522
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();
|
|
3523
3509
|
return N(d.greaterThanEqual(1e-10), () => {
|
|
3524
3510
|
let t = u.div(d).toVar(), n = R(t.negate(), e.direction).toVar(), l = Je(e.angle).toVar();
|
|
3525
3511
|
a.assign(t), s.assign(d), c.assign(r), i.assign(n.greaterThanEqual(l)), N(i, () => {
|
|
3526
|
-
let t =
|
|
3512
|
+
let t = Ua({
|
|
3527
3513
|
coneCosine: l,
|
|
3528
3514
|
penumbraCosine: Je(e.angle.mul(z(1).sub(e.penumbra))).max(l.add(1e-5)).toVar(),
|
|
3529
3515
|
angleCosine: n
|
|
3530
|
-
}), r =
|
|
3516
|
+
}), r = Ha({
|
|
3531
3517
|
lightDistance: d,
|
|
3532
3518
|
cutoffDistance: e.distance,
|
|
3533
3519
|
decayExponent: e.decay
|
|
3534
3520
|
});
|
|
3535
3521
|
o.assign(e.color.mul(e.intensity).mul(r).mul(t));
|
|
3536
3522
|
});
|
|
3537
|
-
}),
|
|
3523
|
+
}), Fa({
|
|
3538
3524
|
valid: i,
|
|
3539
3525
|
direction: a,
|
|
3540
3526
|
emission: o,
|
|
@@ -3542,16 +3528,16 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3542
3528
|
pdf: c,
|
|
3543
3529
|
lightType: l
|
|
3544
3530
|
});
|
|
3545
|
-
}),
|
|
3531
|
+
}), no = M(([e, t, n]) => {
|
|
3546
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();
|
|
3547
3533
|
return N(u.greaterThanEqual(1e-10), () => {
|
|
3548
|
-
let t = l.div(u).toVar(), d =
|
|
3534
|
+
let t = l.div(u).toVar(), d = Ha({
|
|
3549
3535
|
lightDistance: u,
|
|
3550
3536
|
cutoffDistance: e.distance,
|
|
3551
3537
|
decayExponent: e.decay
|
|
3552
3538
|
});
|
|
3553
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));
|
|
3554
|
-
}),
|
|
3540
|
+
}), Fa({
|
|
3555
3541
|
valid: r,
|
|
3556
3542
|
direction: i,
|
|
3557
3543
|
emission: a,
|
|
@@ -3559,7 +3545,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3559
3545
|
pdf: s,
|
|
3560
3546
|
lightType: c
|
|
3561
3547
|
});
|
|
3562
|
-
}),
|
|
3548
|
+
}), ro = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p]) => {
|
|
3563
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();
|
|
3564
3550
|
return N(b.greaterThan(B(0)), () => {
|
|
3565
3551
|
let x = z(0).toVar(), S = B(0).toVar();
|
|
@@ -3571,8 +3557,8 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3571
3557
|
condition: "<"
|
|
3572
3558
|
}, ({ i: r }) => {
|
|
3573
3559
|
N(S.lessThan(B(16)), () => {
|
|
3574
|
-
let a =
|
|
3575
|
-
x.addAssign(
|
|
3560
|
+
let a = ja.wrap(La(o, r));
|
|
3561
|
+
x.addAssign(Ja(a, e, t, n, i)), S.addAssign(1);
|
|
3576
3562
|
});
|
|
3577
3563
|
});
|
|
3578
3564
|
}), N(l.greaterThan(B(0)), () => {
|
|
@@ -3583,7 +3569,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3583
3569
|
condition: "<"
|
|
3584
3570
|
}, ({ i: r }) => {
|
|
3585
3571
|
N(S.lessThan(B(16)), () => {
|
|
3586
|
-
let i =
|
|
3572
|
+
let i = Ma.wrap(Ra(c, r)), a = W(i.intensity.greaterThan(0), Ya(i, e, t, n), z(0));
|
|
3587
3573
|
x.addAssign(a), S.addAssign(1);
|
|
3588
3574
|
});
|
|
3589
3575
|
});
|
|
@@ -3595,8 +3581,8 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3595
3581
|
condition: "<"
|
|
3596
3582
|
}, ({ i: r }) => {
|
|
3597
3583
|
N(S.lessThan(B(16)), () => {
|
|
3598
|
-
let i =
|
|
3599
|
-
x.addAssign(
|
|
3584
|
+
let i = Na.wrap(za(u, r));
|
|
3585
|
+
x.addAssign(Xa(i, e, t, n)), S.addAssign(1);
|
|
3600
3586
|
});
|
|
3601
3587
|
});
|
|
3602
3588
|
}), N(p.greaterThan(B(0)), () => {
|
|
@@ -3607,8 +3593,8 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3607
3593
|
condition: "<"
|
|
3608
3594
|
}, ({ i: r }) => {
|
|
3609
3595
|
N(S.lessThan(B(16)), () => {
|
|
3610
|
-
let i =
|
|
3611
|
-
x.addAssign(
|
|
3596
|
+
let i = Pa.wrap(Ba(f, r));
|
|
3597
|
+
x.addAssign(Za(i, e, t, n)), S.addAssign(1);
|
|
3612
3598
|
});
|
|
3613
3599
|
});
|
|
3614
3600
|
}), N(x.lessThanEqual(0), () => {
|
|
@@ -3617,32 +3603,32 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3617
3603
|
let i = I(!1).toVar(), x = B(0).toVar();
|
|
3618
3604
|
N(s.greaterThan(B(0)), () => {
|
|
3619
3605
|
N(i.not().and(t.greaterThanEqual(x)).and(t.lessThan(x.add(s))), () => {
|
|
3620
|
-
let e =
|
|
3606
|
+
let e = ja.wrap(La(o, t.sub(x)));
|
|
3621
3607
|
N(e.intensity.greaterThan(0), () => {
|
|
3622
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));
|
|
3623
3609
|
});
|
|
3624
3610
|
}), x.addAssign(s);
|
|
3625
3611
|
}), N(l.greaterThan(B(0)), () => {
|
|
3626
3612
|
N(i.not().and(t.greaterThanEqual(x)).and(t.lessThan(x.add(l))), () => {
|
|
3627
|
-
let o =
|
|
3613
|
+
let o = Ma.wrap(Ra(c, t.sub(x)));
|
|
3628
3614
|
N(o.intensity.greaterThan(0), () => {
|
|
3629
|
-
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));
|
|
3630
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));
|
|
3631
3617
|
});
|
|
3632
3618
|
}), x.addAssign(l);
|
|
3633
3619
|
}), N(d.greaterThan(B(0)), () => {
|
|
3634
3620
|
N(i.not().and(t.greaterThanEqual(x)).and(t.lessThan(x.add(d))), () => {
|
|
3635
|
-
let r =
|
|
3621
|
+
let r = Na.wrap(za(u, t.sub(x)));
|
|
3636
3622
|
N(r.intensity.greaterThan(0), () => {
|
|
3637
|
-
let t =
|
|
3623
|
+
let t = Fa.wrap(no(r, e, n));
|
|
3638
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));
|
|
3639
3625
|
});
|
|
3640
3626
|
}), x.addAssign(d);
|
|
3641
3627
|
}), N(p.greaterThan(B(0)), () => {
|
|
3642
3628
|
N(i.not().and(t.greaterThanEqual(x)).and(t.lessThan(x.add(p))), () => {
|
|
3643
|
-
let o =
|
|
3629
|
+
let o = Pa.wrap(Ba(f, t.sub(x)));
|
|
3644
3630
|
N(o.intensity.greaterThan(0), () => {
|
|
3645
|
-
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));
|
|
3646
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));
|
|
3647
3633
|
});
|
|
3648
3634
|
});
|
|
@@ -3659,7 +3645,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3659
3645
|
condition: "<"
|
|
3660
3646
|
}, ({ i: r }) => {
|
|
3661
3647
|
N(S.lessThan(B(16)).and(w.lessThan(B(0))), () => {
|
|
3662
|
-
let a =
|
|
3648
|
+
let a = Ja(ja.wrap(La(o, r)), e, t, n, i).toVar(), s = C.toVar();
|
|
3663
3649
|
C.addAssign(a), N(b.greaterThan(s).and(b.lessThanEqual(C)), () => {
|
|
3664
3650
|
w.assign(0), T.assign(r), E.assign(a);
|
|
3665
3651
|
});
|
|
@@ -3673,7 +3659,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3673
3659
|
condition: "<"
|
|
3674
3660
|
}, ({ i: r }) => {
|
|
3675
3661
|
N(S.lessThan(B(16)).and(w.lessThan(B(0))), () => {
|
|
3676
|
-
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();
|
|
3677
3663
|
C.addAssign(a), N(b.greaterThan(o).and(b.lessThanEqual(C)), () => {
|
|
3678
3664
|
w.assign(1), T.assign(r), E.assign(a);
|
|
3679
3665
|
});
|
|
@@ -3687,7 +3673,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3687
3673
|
condition: "<"
|
|
3688
3674
|
}, ({ i: r }) => {
|
|
3689
3675
|
N(S.lessThan(B(16)).and(w.lessThan(B(0))), () => {
|
|
3690
|
-
let i =
|
|
3676
|
+
let i = Xa(Na.wrap(za(u, r)), e, t, n).toVar(), a = C.toVar();
|
|
3691
3677
|
C.addAssign(i), N(b.greaterThan(a).and(b.lessThanEqual(C)), () => {
|
|
3692
3678
|
w.assign(2), T.assign(r), E.assign(i);
|
|
3693
3679
|
});
|
|
@@ -3701,7 +3687,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3701
3687
|
condition: "<"
|
|
3702
3688
|
}, ({ i: r }) => {
|
|
3703
3689
|
N(S.lessThan(B(16)).and(w.lessThan(B(0))), () => {
|
|
3704
|
-
let i =
|
|
3690
|
+
let i = Za(Pa.wrap(Ba(f, r)), e, t, n).toVar(), a = C.toVar();
|
|
3705
3691
|
C.addAssign(i), N(b.greaterThan(a).and(b.lessThanEqual(C)), () => {
|
|
3706
3692
|
w.assign(3), T.assign(r), E.assign(i);
|
|
3707
3693
|
});
|
|
@@ -3710,25 +3696,25 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3710
3696
|
});
|
|
3711
3697
|
let D = E.div(V(x, 1e-10)).toVar();
|
|
3712
3698
|
N(w.equal(B(0)).and(T.greaterThanEqual(B(0))), () => {
|
|
3713
|
-
let e =
|
|
3699
|
+
let e = ja.wrap(La(o, T)), t = U(e.direction).toVar(), n = z(1).toVar();
|
|
3714
3700
|
N(e.angle.greaterThan(0), () => {
|
|
3715
|
-
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();
|
|
3716
3702
|
t.assign(U(l.mul(o).add(u.mul(Je(c)).add(d.mul(pt(c))).mul(s))));
|
|
3717
|
-
let f = z(
|
|
3703
|
+
let f = z($a).mul(V(z(1).sub(i), 1e-10)).toVar();
|
|
3718
3704
|
n.assign(z(1).div(f));
|
|
3719
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));
|
|
3720
3706
|
}), N(w.equal(B(1)).and(T.greaterThanEqual(B(0))), () => {
|
|
3721
|
-
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));
|
|
3722
3708
|
m.assign(i.valid), h.assign(i.direction), g.assign(i.emission), _.assign(i.distance), v.assign(i.pdf), y.assign(i.lightType);
|
|
3723
3709
|
}), N(w.equal(B(2)).and(T.greaterThanEqual(B(0))), () => {
|
|
3724
|
-
let t =
|
|
3710
|
+
let t = Na.wrap(za(u, T)), n = Fa.wrap(no(t, e, D));
|
|
3725
3711
|
m.assign(n.valid), h.assign(n.direction), g.assign(n.emission), _.assign(n.distance), v.assign(n.pdf), y.assign(n.lightType);
|
|
3726
3712
|
}), N(w.equal(B(3)).and(T.greaterThanEqual(B(0))), () => {
|
|
3727
|
-
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));
|
|
3728
3714
|
m.assign(i.valid), h.assign(i.direction), g.assign(i.emission), _.assign(i.distance), v.assign(i.pdf), y.assign(i.lightType);
|
|
3729
3715
|
});
|
|
3730
3716
|
});
|
|
3731
|
-
}),
|
|
3717
|
+
}), Fa({
|
|
3732
3718
|
valid: m,
|
|
3733
3719
|
direction: h,
|
|
3734
3720
|
emission: g,
|
|
@@ -3736,7 +3722,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3736
3722
|
pdf: v,
|
|
3737
3723
|
lightType: y
|
|
3738
3724
|
});
|
|
3739
|
-
}),
|
|
3725
|
+
}), io = M(([e, t, n, r]) => {
|
|
3740
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();
|
|
3741
3727
|
V(z(0), R(e, o)).toVar();
|
|
3742
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();
|
|
@@ -3746,7 +3732,7 @@ var ro = M(([e, t, n, r]) => {
|
|
|
3746
3732
|
d.addAssign(c.mul(a).mul(zr));
|
|
3747
3733
|
}), N(l.greaterThan(0).and(a.greaterThan(0)), () => {
|
|
3748
3734
|
let e = V(r.roughness, .02).toVar();
|
|
3749
|
-
d.addAssign(l.mul(
|
|
3735
|
+
d.addAssign(l.mul(aa(s, i, e)));
|
|
3750
3736
|
});
|
|
3751
3737
|
}), V(d, 1e-8);
|
|
3752
3738
|
});
|
|
@@ -3757,13 +3743,13 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3757
3743
|
N(h.greaterThan(0), () => {
|
|
3758
3744
|
let f = R(r, o).toVar();
|
|
3759
3745
|
N(f.greaterThan(0), () => {
|
|
3760
|
-
N(
|
|
3746
|
+
N(Va({
|
|
3761
3747
|
direction: o,
|
|
3762
3748
|
surfaceNormal: r
|
|
3763
3749
|
}), () => {
|
|
3764
|
-
let p =
|
|
3750
|
+
let p = Ka(a, o, n.sub(.001), s, yi, c, l, u);
|
|
3765
3751
|
N(p.greaterThan(0), () => {
|
|
3766
|
-
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({
|
|
3767
3753
|
pdf1: a,
|
|
3768
3754
|
pdf2: s
|
|
3769
3755
|
}), z(1)).toVar(), l = e.color.mul(e.intensity).toVar();
|
|
@@ -3774,7 +3760,7 @@ M(([e, t, n, r, i, a, o, s, c, l, u]) => {
|
|
|
3774
3760
|
});
|
|
3775
3761
|
}), d;
|
|
3776
3762
|
});
|
|
3777
|
-
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]) => {
|
|
3778
3764
|
let k = J(0).toVar(), A = e.add(t.mul(.001)).toVar();
|
|
3779
3765
|
return N(n.emissiveIntensity.lessThanEqual(10), () => {
|
|
3780
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();
|
|
@@ -3793,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
|
|
|
3793
3779
|
}).ElseIf(se, () => {
|
|
3794
3780
|
j.assign(I(!0));
|
|
3795
3781
|
}), N(j, () => {
|
|
3796
|
-
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, _));
|
|
3797
3783
|
N(i.valid.and(i.pdf.greaterThan(0)), () => {
|
|
3798
3784
|
let e = V(z(0), R(t, i.direction)).toVar(), a = i.emission.x.add(i.emission.y).add(i.emission.z).toVar();
|
|
3799
|
-
N(e.greaterThan(0).and(a.mul(e).greaterThan(oe)).and(
|
|
3785
|
+
N(e.greaterThan(0).and(a.mul(e).greaterThan(oe)).and(Va({
|
|
3800
3786
|
direction: i.direction,
|
|
3801
3787
|
surfaceNormal: t
|
|
3802
3788
|
})), () => {
|
|
3803
|
-
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);
|
|
3804
3790
|
N(o.greaterThan(0), () => {
|
|
3805
|
-
let a =
|
|
3791
|
+
let a = Da(r, i.direction, t, n), s = io(r, i.direction, t, n).toVar(), c = z(1).toVar();
|
|
3806
3792
|
N(s.greaterThan(0).and(te), () => {
|
|
3807
3793
|
let e = i.pdf.mul(ie).toVar(), t = s.mul(re).toVar();
|
|
3808
3794
|
N(i.lightType.equal(B(1)), () => {
|
|
@@ -3820,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
|
|
|
3820
3806
|
}), N(fe, () => {
|
|
3821
3807
|
N(a.greaterThan(0).and(te), () => {
|
|
3822
3808
|
let r = V(z(0), R(t, i)).toVar();
|
|
3823
|
-
N(r.greaterThan(0).and(
|
|
3809
|
+
N(r.greaterThan(0).and(Va({
|
|
3824
3810
|
direction: i,
|
|
3825
3811
|
surfaceNormal: t
|
|
3826
3812
|
})), () => {
|
|
@@ -3832,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
|
|
|
3832
3818
|
type: "int",
|
|
3833
3819
|
condition: "<"
|
|
3834
3820
|
}, ({ i: r }) => {
|
|
3835
|
-
let a =
|
|
3821
|
+
let a = Ma.wrap(Ra(f, r));
|
|
3836
3822
|
N(a.intensity.greaterThan(0), () => {
|
|
3837
|
-
let o =
|
|
3823
|
+
let o = Ya(a, e, t, n).toVar();
|
|
3838
3824
|
N(o.greaterThanEqual(oe), () => {
|
|
3839
|
-
N(
|
|
3825
|
+
N(Ga(a, A, i).toVar().greaterThan(0), () => {
|
|
3840
3826
|
N(o.greaterThan(c), () => {
|
|
3841
3827
|
c.assign(o), u.assign(r);
|
|
3842
3828
|
}), s.assign(I(!0));
|
|
@@ -3844,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
|
|
|
3844
3830
|
});
|
|
3845
3831
|
});
|
|
3846
3832
|
}), N(s.and(u.greaterThanEqual(B(0))), () => {
|
|
3847
|
-
let e =
|
|
3833
|
+
let e = Ma.wrap(Ra(f, u)), t = Ga(e, A, i).toVar();
|
|
3848
3834
|
N(t.greaterThan(0), () => {
|
|
3849
|
-
let n =
|
|
3835
|
+
let n = Ka(A, i, at(t.sub(.001), z(1e3)).toVar(), l, yi, v, y, b);
|
|
3850
3836
|
N(n.greaterThan(0), () => {
|
|
3851
3837
|
let s = V(z(0), R(i, e.normal).negate()).toVar();
|
|
3852
3838
|
N(s.greaterThan(0), () => {
|
|
@@ -3865,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
|
|
|
3865
3851
|
});
|
|
3866
3852
|
});
|
|
3867
3853
|
}), N(O, () => {
|
|
3868
|
-
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();
|
|
3869
3855
|
N(s.greaterThan(0), () => {
|
|
3870
3856
|
let e = V(z(0), R(t, o)).toVar();
|
|
3871
|
-
N(e.greaterThan(0).and(
|
|
3857
|
+
N(e.greaterThan(0).and(Va({
|
|
3872
3858
|
direction: o,
|
|
3873
3859
|
surfaceNormal: t
|
|
3874
3860
|
})), () => {
|
|
3875
|
-
let a =
|
|
3861
|
+
let a = Ka(A, o, z(1e3), l, yi, v, y, b);
|
|
3876
3862
|
N(a.greaterThan(0), () => {
|
|
3877
|
-
let c =
|
|
3863
|
+
let c = Da(r, o, t, n), l = io(r, o, t, n).toVar(), u = W(l.greaterThan(0), Xr({
|
|
3878
3864
|
pdf1: s,
|
|
3879
3865
|
pdf2: l
|
|
3880
3866
|
}), z(1)).toVar(), d = i.mul(c).mul(e).mul(a).mul(u).div(V(s, 1e-10));
|
|
@@ -3884,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
|
|
|
3884
3870
|
});
|
|
3885
3871
|
});
|
|
3886
3872
|
}), k;
|
|
3887
|
-
}),
|
|
3873
|
+
}), oo = M(([e, t, n, r, i, a]) => {
|
|
3888
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();
|
|
3889
3875
|
N(R(l, n).lessThan(0), () => {
|
|
3890
3876
|
l.assign(l.negate());
|
|
3891
3877
|
});
|
|
3892
|
-
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();
|
|
3893
3879
|
return p.mul(f).mul(g);
|
|
3894
|
-
}),
|
|
3880
|
+
}), so = M(([e, t, n, r]) => {
|
|
3895
3881
|
let i = e.add(t).toVar(), a = R(i, i).toVar();
|
|
3896
|
-
return
|
|
3897
|
-
}),
|
|
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]) => {
|
|
3898
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();
|
|
3899
3885
|
return N(p.lessThan(.001), () => {
|
|
3900
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));
|
|
@@ -3914,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
|
|
|
3914
3900
|
useTransmission: u,
|
|
3915
3901
|
useClearcoat: f
|
|
3916
3902
|
});
|
|
3917
|
-
}),
|
|
3903
|
+
}), lo = M(([e, t]) => {
|
|
3918
3904
|
let n = B(2).toVar(), r = z(1).toVar(), i = z(0).toVar(), a = I(!1).toVar();
|
|
3919
3905
|
return N(e.useSpecular.and(a.not()), () => {
|
|
3920
3906
|
i.addAssign(e.specularWeight), N(t.lessThan(i), () => {
|
|
@@ -3933,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
|
|
|
3933
3919
|
}), N(a.not(), () => {
|
|
3934
3920
|
n.assign(2), r.assign(W(e.useDiffuse, e.diffuseWeight, z(1)));
|
|
3935
3921
|
}), q(z(n), r);
|
|
3936
|
-
}),
|
|
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]) => {
|
|
3937
3923
|
let y = J(0).toVar(), b = J(0).toVar(), x = z(0).toVar(), S = z(0).toVar(), C = z(0).toVar();
|
|
3938
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(), () => {
|
|
3939
3925
|
let e = q($t(c).toVar(), $t(c).toVar()).toVar();
|
|
3940
|
-
y.assign(
|
|
3926
|
+
y.assign(pa(t, e)), b.assign(n.color.xyz), x.assign(1), S.assign(1);
|
|
3941
3927
|
}).Else(() => {
|
|
3942
|
-
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();
|
|
3943
3929
|
f.y.toVar();
|
|
3944
3930
|
let m = J(0).toVar(), h = z(0).toVar(), g = J(0).toVar();
|
|
3945
3931
|
N(p.equal(B(1)), () => {
|
|
3946
3932
|
m.assign(r), h.assign(i), g.assign(a);
|
|
3947
3933
|
}).ElseIf(p.equal(B(2)), () => {
|
|
3948
|
-
m.assign(
|
|
3934
|
+
m.assign(pa(t, d)), h.assign(uo(V(R(t, m), 0))), g.assign(Da(e, m, t, n));
|
|
3949
3935
|
}).ElseIf(p.equal(B(3)), () => {
|
|
3950
|
-
let r = R(e, t).greaterThan(0).toVar(), i =
|
|
3951
|
-
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));
|
|
3952
3938
|
}).Else(() => {
|
|
3953
3939
|
m.assign(r), h.assign(i), g.assign(a);
|
|
3954
3940
|
});
|
|
3955
3941
|
let w = R(t, m).toVar(), T = V(w, 0).toVar(), E = F(w).toVar(), D = z(0).toVar();
|
|
3956
3942
|
N(o.useSpecular, () => {
|
|
3957
|
-
let r =
|
|
3943
|
+
let r = aa(V(R(t, U(e.add(m))), .001), V(R(t, e), .001), n.roughness);
|
|
3958
3944
|
D.addAssign(o.specularWeight.mul(r));
|
|
3959
3945
|
}), N(o.useDiffuse, () => {
|
|
3960
|
-
let e =
|
|
3946
|
+
let e = uo(T).toVar();
|
|
3961
3947
|
D.addAssign(o.diffuseWeight.mul(e));
|
|
3962
3948
|
}), N(o.useTransmission.and(n.transmission.greaterThan(0)), () => {
|
|
3963
|
-
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();
|
|
3964
3950
|
D.addAssign(o.transmissionWeight.mul(i));
|
|
3965
3951
|
}), N(o.useClearcoat.and(n.clearcoat.greaterThan(0)), () => {
|
|
3966
|
-
let r =
|
|
3952
|
+
let r = so(e, m, t, n.clearcoatRoughness).toVar();
|
|
3967
3953
|
D.addAssign(o.clearcoatWeight.mul(r));
|
|
3968
3954
|
}), h.assign(V(h, Wr)), D.assign(V(D, Wr));
|
|
3969
3955
|
let O = h.div(D).toVar(), k = W(p.equal(B(3)), E, T), A = g.mul(k).mul(O).div(h).toVar();
|
|
3970
3956
|
y.assign(m), b.assign(A), x.assign(O), S.assign(h), C.assign(D);
|
|
3971
|
-
}),
|
|
3957
|
+
}), Ia({
|
|
3972
3958
|
direction: y,
|
|
3973
3959
|
throughput: b,
|
|
3974
3960
|
misWeight: x,
|
|
3975
3961
|
pdf: S,
|
|
3976
3962
|
combinedPdf: C
|
|
3977
3963
|
});
|
|
3978
|
-
}),
|
|
3964
|
+
}), po = Cr({
|
|
3979
3965
|
position: "vec3",
|
|
3980
3966
|
normal: "vec3",
|
|
3981
3967
|
emission: "vec3",
|
|
@@ -3985,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
|
|
|
3985
3971
|
area: "float",
|
|
3986
3972
|
cosThetaLight: "float",
|
|
3987
3973
|
valid: "bool"
|
|
3988
|
-
}),
|
|
3974
|
+
}), mo = Cr({
|
|
3989
3975
|
contribution: "vec3",
|
|
3990
3976
|
hasEmissive: "bool",
|
|
3991
3977
|
emissionOnly: "vec3",
|
|
3992
3978
|
distance: "float"
|
|
3993
|
-
}),
|
|
3979
|
+
}), ho = M(([e, t, n, r]) => {
|
|
3994
3980
|
let i = ht(r.x), a = z(1).sub(i), o = r.y.mul(i), s = z(1).sub(a).sub(o);
|
|
3995
3981
|
return e.mul(a).add(t.mul(o)).add(n.mul(s));
|
|
3996
|
-
}),
|
|
3982
|
+
}), go = M(([e, t, n]) => et(Ye(t.sub(e), n.sub(e))).mul(.5)), _o = M(([e, t, n, r]) => {
|
|
3997
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));
|
|
3998
3984
|
return V(z(2).mul(qe(s, V(c, z(1e-10)))), z(0));
|
|
3999
|
-
}),
|
|
3985
|
+
}), vo = M(([e, t, n, r]) => {
|
|
4000
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();
|
|
4001
3987
|
return N(l.greaterThan(1e-20), () => {
|
|
4002
3988
|
let t = R(c, r.sub(e)), n = t.mul(t).div(l);
|
|
4003
3989
|
u.assign(s.greaterThan(n));
|
|
4004
3990
|
}), u;
|
|
4005
|
-
}),
|
|
3991
|
+
}), yo = Cr({
|
|
4006
3992
|
direction: "vec3",
|
|
4007
3993
|
position: "vec3",
|
|
4008
3994
|
solidAngle: "float",
|
|
4009
3995
|
valid: "bool"
|
|
4010
|
-
}),
|
|
3996
|
+
}), bo = M(([e]) => {
|
|
4011
3997
|
let t = et(e);
|
|
4012
3998
|
return W(t.greaterThan(1e-10), e.div(t), J(0));
|
|
4013
|
-
}),
|
|
4014
|
-
let a =
|
|
3999
|
+
}), xo = M(([e, t, n, r, i]) => {
|
|
4000
|
+
let a = yo({
|
|
4015
4001
|
direction: J(0),
|
|
4016
4002
|
position: J(0),
|
|
4017
4003
|
solidAngle: z(0),
|
|
4018
4004
|
valid: !1
|
|
4019
|
-
}).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);
|
|
4020
4006
|
return a.solidAngle.assign(l), N(l.greaterThan(1e-7), () => {
|
|
4021
|
-
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);
|
|
4022
4008
|
N(F(te).greaterThan(1e-10), () => {
|
|
4023
4009
|
let t = R(ee, e.sub(r)).div(te);
|
|
4024
4010
|
N(t.greaterThan(0), () => {
|
|
@@ -4026,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
|
|
|
4026
4012
|
});
|
|
4027
4013
|
});
|
|
4028
4014
|
}), a;
|
|
4029
|
-
}),
|
|
4015
|
+
}), So = M(([e, t, n, r]) => {
|
|
4030
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);
|
|
4031
4017
|
return J(z(1).sub(p).sub(m), p, m);
|
|
4032
|
-
}),
|
|
4018
|
+
}), Co = M(([e, t, n, r]) => {
|
|
4033
4019
|
let i = ht(r.x), a = z(1).sub(i), o = r.y.mul(i), s = z(1).sub(a).sub(o);
|
|
4034
4020
|
return U(e.mul(a).add(t.mul(o)).add(n.mul(s)));
|
|
4035
|
-
}),
|
|
4021
|
+
}), wo = M(([e]) => e.emissiveIntensity.greaterThan(0).and(et(e.emissive).greaterThan(0)));
|
|
4036
4022
|
M(([e, t]) => {
|
|
4037
4023
|
let n = z(0).toVar();
|
|
4038
|
-
return N(
|
|
4024
|
+
return N(wo(e), () => {
|
|
4039
4025
|
let r = e.emissive.x.add(e.emissive.y).add(e.emissive.z).div(3);
|
|
4040
4026
|
n.assign(r.mul(e.emissiveIntensity).mul(t));
|
|
4041
4027
|
}), n;
|
|
4042
4028
|
});
|
|
4043
|
-
var
|
|
4029
|
+
var To = 8, Eo = 2, Do = Cr({
|
|
4044
4030
|
v0: "vec3",
|
|
4045
4031
|
v1: "vec3",
|
|
4046
4032
|
v2: "vec3",
|
|
@@ -4048,9 +4034,9 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4048
4034
|
n1: "vec3",
|
|
4049
4035
|
n2: "vec3",
|
|
4050
4036
|
materialIndex: "int"
|
|
4051
|
-
}),
|
|
4052
|
-
let n = $(t, e, B(0), B(
|
|
4053
|
-
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({
|
|
4054
4040
|
v0: n.xyz,
|
|
4055
4041
|
v1: r.xyz,
|
|
4056
4042
|
v2: i.xyz,
|
|
@@ -4059,27 +4045,27 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4059
4045
|
n2: s.xyz,
|
|
4060
4046
|
materialIndex: B(c.z)
|
|
4061
4047
|
});
|
|
4062
|
-
}),
|
|
4063
|
-
let s =
|
|
4064
|
-
return N(
|
|
4065
|
-
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);
|
|
4066
4052
|
p.assign(f.div(V(e, z(1e-10))));
|
|
4067
4053
|
}).Else(() => {
|
|
4068
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);
|
|
4069
4055
|
p.assign(a.mul(i).div(r));
|
|
4070
4056
|
}), V(p, Wr);
|
|
4071
|
-
}),
|
|
4057
|
+
}), Ao = M(([e, t, n]) => {
|
|
4072
4058
|
let r = B(0).toVar(), i = t.sub(1).toVar();
|
|
4073
4059
|
return P(r.lessThan(i), () => {
|
|
4074
|
-
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;
|
|
4075
4061
|
N(a.lessThan(n), () => {
|
|
4076
4062
|
r.assign(t.add(1));
|
|
4077
4063
|
}).Else(() => {
|
|
4078
4064
|
i.assign(t);
|
|
4079
4065
|
});
|
|
4080
4066
|
}), r;
|
|
4081
|
-
}),
|
|
4082
|
-
let c =
|
|
4067
|
+
}), jo = M(([e, t, n, r, i, a, o, s]) => {
|
|
4068
|
+
let c = po({
|
|
4083
4069
|
position: J(0),
|
|
4084
4070
|
normal: J(0),
|
|
4085
4071
|
emission: J(0),
|
|
@@ -4091,40 +4077,40 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4091
4077
|
valid: !1
|
|
4092
4078
|
}).toVar();
|
|
4093
4079
|
return N(a.greaterThan(B(0)), () => {
|
|
4094
|
-
let n =
|
|
4095
|
-
N(
|
|
4096
|
-
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));
|
|
4097
4083
|
N(n.valid.and(n.solidAngle.greaterThan(1e-7)), () => {
|
|
4098
4084
|
let r = n.direction, i = n.position, a = R(r, t), s = R(r, _.negate());
|
|
4099
4085
|
N(a.greaterThan(0).and(s.greaterThan(0)), () => {
|
|
4100
|
-
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);
|
|
4101
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);
|
|
4102
4088
|
});
|
|
4103
4089
|
});
|
|
4104
4090
|
}).Else(() => {
|
|
4105
|
-
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());
|
|
4106
4092
|
N(u.greaterThan(0).and(d.greaterThan(0)), () => {
|
|
4107
4093
|
let e = f.div(V(o, z(1e-10)).mul(m)).mul(a).div(d);
|
|
4108
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);
|
|
4109
4095
|
});
|
|
4110
4096
|
});
|
|
4111
4097
|
}), c;
|
|
4112
|
-
}),
|
|
4113
|
-
let h =
|
|
4098
|
+
}), Mo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m]) => {
|
|
4099
|
+
let h = mo({
|
|
4114
4100
|
contribution: J(0),
|
|
4115
4101
|
hasEmissive: !1,
|
|
4116
4102
|
emissionOnly: J(0),
|
|
4117
4103
|
distance: z(0)
|
|
4118
4104
|
}).toVar();
|
|
4119
4105
|
return N(a.greaterThan(B(1)).and(r.roughness.greaterThan(.9)).and(r.metalness.lessThan(.1)).not(), () => {
|
|
4120
|
-
let a =
|
|
4106
|
+
let a = po.wrap(jo(e, t, i, o, c, l, u, d));
|
|
4121
4107
|
N(a.valid.and(a.pdf.greaterThan(0)), () => {
|
|
4122
4108
|
h.hasEmissive.assign(!0), h.emissionOnly.assign(a.emission), h.distance.assign(a.distance);
|
|
4123
4109
|
let i = V(z(0), R(t, a.direction));
|
|
4124
4110
|
N(i.greaterThan(0), () => {
|
|
4125
4111
|
let c = m(e, t, r), l = e.add(c), u = a.distance.sub(.001), d = f(l, a.direction, u, o);
|
|
4126
4112
|
N(d.greaterThan(0), () => {
|
|
4127
|
-
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({
|
|
4128
4114
|
pdf1: a.pdf,
|
|
4129
4115
|
pdf2: o
|
|
4130
4116
|
}), z(1));
|
|
@@ -4133,8 +4119,8 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4133
4119
|
});
|
|
4134
4120
|
});
|
|
4135
4121
|
}), h;
|
|
4136
|
-
}),
|
|
4137
|
-
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({
|
|
4138
4124
|
position: J(0),
|
|
4139
4125
|
normal: J(0),
|
|
4140
4126
|
emission: J(0),
|
|
@@ -4145,12 +4131,12 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4145
4131
|
cosThetaLight: z(0),
|
|
4146
4132
|
valid: !1
|
|
4147
4133
|
}).toVar(), s = z(1).toVar(), c = B(0).toVar(), l = I(!1).toVar();
|
|
4148
|
-
return P(
|
|
4149
|
-
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)));
|
|
4150
4136
|
N(i.w.greaterThan(.5), () => {
|
|
4151
4137
|
l.assign(I(!0)), Ve();
|
|
4152
4138
|
});
|
|
4153
|
-
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);
|
|
4154
4140
|
N(D.lessThanEqual(z(0)), () => {
|
|
4155
4141
|
c.assign(o);
|
|
4156
4142
|
}).Else(() => {
|
|
@@ -4162,54 +4148,54 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4162
4148
|
});
|
|
4163
4149
|
});
|
|
4164
4150
|
}), N(l, () => {
|
|
4165
|
-
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();
|
|
4166
4152
|
P({
|
|
4167
4153
|
start: B(0),
|
|
4168
4154
|
end: p
|
|
4169
4155
|
}, ({ i: e }) => {
|
|
4170
|
-
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));
|
|
4171
4157
|
g.addAssign(r), N(g.greaterThanEqual(h).and(r.greaterThan(z(0))), () => {
|
|
4172
4158
|
_.assign(t), v.assign(r), Ve();
|
|
4173
4159
|
});
|
|
4174
4160
|
}), s.mulAssign(v.div(m));
|
|
4175
|
-
let y = _.mul(B(
|
|
4176
|
-
N(
|
|
4177
|
-
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));
|
|
4178
4164
|
N(n.valid.and(n.solidAngle.greaterThan(z(1e-7))), () => {
|
|
4179
4165
|
let r = n.direction, i = n.position, a = R(r, t), c = R(r, D.negate());
|
|
4180
4166
|
N(a.greaterThan(z(0)).and(c.greaterThan(z(0))), () => {
|
|
4181
|
-
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)));
|
|
4182
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);
|
|
4183
4169
|
});
|
|
4184
4170
|
});
|
|
4185
4171
|
}).Else(() => {
|
|
4186
|
-
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());
|
|
4187
4173
|
N(u.greaterThan(z(0)).and(d.greaterThan(z(0))), () => {
|
|
4188
4174
|
let e = s.div(V(w, z(1e-10))).mul(a).div(d);
|
|
4189
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);
|
|
4190
4176
|
});
|
|
4191
4177
|
});
|
|
4192
4178
|
}), o;
|
|
4193
|
-
}),
|
|
4179
|
+
}), Ro = 0, zo = 1, Bo = 2, Vo = 3, Ho = Cr({
|
|
4194
4180
|
radiance: "vec4",
|
|
4195
4181
|
objectNormal: "vec3",
|
|
4196
4182
|
objectColor: "vec3",
|
|
4197
4183
|
objectID: "float",
|
|
4198
4184
|
firstHitPoint: "vec3",
|
|
4199
4185
|
firstHitDistance: "float"
|
|
4200
|
-
}),
|
|
4186
|
+
}), Uo = M(([e, t, n, r, i]) => {
|
|
4201
4187
|
let a = i.toVar();
|
|
4202
4188
|
return N(n.not().or(r.notEqual(t)), () => {
|
|
4203
4189
|
a.assign(ni(e.metalness, e.roughness, e.transmission, e.clearcoat, e.emissive));
|
|
4204
4190
|
}), a;
|
|
4205
|
-
}),
|
|
4206
|
-
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();
|
|
4207
4193
|
N(l.not(), () => {
|
|
4208
4194
|
N(d, () => {
|
|
4209
|
-
_.assign(
|
|
4195
|
+
_.assign(ca(n, g, f));
|
|
4210
4196
|
}).Else(() => {
|
|
4211
4197
|
let e = Pr({
|
|
4212
|
-
F0:
|
|
4198
|
+
F0: Zi(n.ior),
|
|
4213
4199
|
NoV: z(1),
|
|
4214
4200
|
diffuseColor: J(0),
|
|
4215
4201
|
specularColor: J(0),
|
|
@@ -4230,30 +4216,30 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4230
4216
|
iorFactor: at(z(2).div(n.ior), 1),
|
|
4231
4217
|
maxSheenColor: V(n.sheenColor.x, V(n.sheenColor.y, n.sheenColor.z))
|
|
4232
4218
|
}).toVar();
|
|
4233
|
-
_.assign(
|
|
4219
|
+
_.assign(ca(n, g, e));
|
|
4234
4220
|
});
|
|
4235
4221
|
});
|
|
4236
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();
|
|
4237
4223
|
N(v.lessThan(x).and(T.not()), () => {
|
|
4238
|
-
p.assign(
|
|
4224
|
+
p.assign(fa({
|
|
4239
4225
|
N: t,
|
|
4240
4226
|
xi: y
|
|
4241
4227
|
}));
|
|
4242
4228
|
let r = L(R(t, p), 0, 1);
|
|
4243
|
-
h.assign(r.mul(zr)), m.assign(
|
|
4229
|
+
h.assign(r.mul(zr)), m.assign(Da(e, p, t, n)), T.assign(I(!0));
|
|
4244
4230
|
});
|
|
4245
4231
|
let E = L(R(t, e), .001, 1).toVar();
|
|
4246
4232
|
return N(v.lessThan(S).and(T.not()), () => {
|
|
4247
|
-
let r = Zr({ N: t }), a =
|
|
4233
|
+
let r = Zr({ N: t }), a = ma({
|
|
4248
4234
|
V: r.transpose().mul(e).toVar(),
|
|
4249
4235
|
roughness: n.roughness,
|
|
4250
4236
|
Xi: i
|
|
4251
4237
|
});
|
|
4252
4238
|
b.assign(r.mul(a));
|
|
4253
4239
|
let o = L(R(t, b), .001, 1);
|
|
4254
|
-
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));
|
|
4255
4241
|
}), N(v.lessThan(C).and(T.not()), () => {
|
|
4256
|
-
b.assign(
|
|
4242
|
+
b.assign(da({
|
|
4257
4243
|
N: t,
|
|
4258
4244
|
roughness: n.sheenRoughness,
|
|
4259
4245
|
Xi: i
|
|
@@ -4262,32 +4248,32 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4262
4248
|
p.assign(lt(e.negate(), b));
|
|
4263
4249
|
let o = R(t, p).toVar();
|
|
4264
4250
|
N(o.lessThanEqual(0), () => {
|
|
4265
|
-
p.assign(
|
|
4251
|
+
p.assign(fa({
|
|
4266
4252
|
N: t,
|
|
4267
4253
|
xi: i
|
|
4268
|
-
})), 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));
|
|
4269
4255
|
}).Else(() => {
|
|
4270
|
-
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));
|
|
4271
4257
|
}), T.assign(I(!0));
|
|
4272
4258
|
}), N(v.lessThan(w).and(T.not()), () => {
|
|
4273
4259
|
let r = L(n.clearcoatRoughness, Ur, 1);
|
|
4274
|
-
b.assign(
|
|
4260
|
+
b.assign(da({
|
|
4275
4261
|
N: t,
|
|
4276
4262
|
roughness: r,
|
|
4277
4263
|
Xi: i
|
|
4278
4264
|
}));
|
|
4279
4265
|
let a = L(R(t, b), 0, 1);
|
|
4280
|
-
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));
|
|
4281
4267
|
}), N(T.not(), () => {
|
|
4282
|
-
let r = R(e, t).greaterThan(0).toVar(), o =
|
|
4283
|
-
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));
|
|
4284
4270
|
}), h.assign(V(h, Wr)), Dr({
|
|
4285
4271
|
direction: p,
|
|
4286
4272
|
value: m,
|
|
4287
4273
|
pdf: h
|
|
4288
4274
|
});
|
|
4289
|
-
}),
|
|
4290
|
-
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();
|
|
4291
4277
|
N(u.isMetallic.and(u.isSmooth), () => {
|
|
4292
4278
|
d.addAssign(.15);
|
|
4293
4279
|
}), N(u.isTransmissive.and(u.hasClearcoat), () => {
|
|
@@ -4302,7 +4288,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4302
4288
|
});
|
|
4303
4289
|
let p = mt(z(.001), z(.1), l);
|
|
4304
4290
|
return l.mul(H(d.mul(.7), f, .3)).mul(p);
|
|
4305
|
-
}),
|
|
4291
|
+
}), Ko = M(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
|
|
4306
4292
|
let p = z(1).toVar();
|
|
4307
4293
|
return N(e.greaterThanEqual(B(3)), () => {
|
|
4308
4294
|
let m = V(Jr({ v: t }), 0).toVar();
|
|
@@ -4310,7 +4296,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4310
4296
|
let e = V(m.mul(125), .01), t = $t(a);
|
|
4311
4297
|
p.assign(W(t.lessThan(e), e, z(0)));
|
|
4312
4298
|
}).Else(() => {
|
|
4313
|
-
let h = Mr.wrap(
|
|
4299
|
+
let h = Mr.wrap(Uo(n, r, o, s, c)).toVar(), g = h.complexityScore.toVar();
|
|
4314
4300
|
N(h.isMetallic.and(h.isSmooth).and(e.lessThan(B(7))), () => {
|
|
4315
4301
|
g.addAssign(.3);
|
|
4316
4302
|
}), N(h.isTransmissive.and(e.lessThan(B(6))), () => {
|
|
@@ -4330,7 +4316,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4330
4316
|
N(o.and(l), () => {
|
|
4331
4317
|
v.assign(u);
|
|
4332
4318
|
}).Else(() => {
|
|
4333
|
-
v.assign(
|
|
4319
|
+
v.assign(Go(t, i, n, r, o, s, c, d, f));
|
|
4334
4320
|
});
|
|
4335
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();
|
|
4336
4322
|
y.assign(H(y, V(y, v), .4)), N(g.greaterThan(.5), () => {
|
|
@@ -4346,12 +4332,12 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4346
4332
|
});
|
|
4347
4333
|
});
|
|
4348
4334
|
}), p;
|
|
4349
|
-
}),
|
|
4335
|
+
}), qo = M(([e, t, n, r, i, a, o, s]) => {
|
|
4350
4336
|
let c = Y(0).toVar();
|
|
4351
4337
|
return N(e.and(o.not()), () => {
|
|
4352
4338
|
c.assign(Y(0));
|
|
4353
4339
|
}).Else(() => {
|
|
4354
|
-
let o =
|
|
4340
|
+
let o = Ei({
|
|
4355
4341
|
tex: n,
|
|
4356
4342
|
samp: dt(n),
|
|
4357
4343
|
direction: t,
|
|
@@ -4365,8 +4351,8 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4365
4351
|
c.assign(o);
|
|
4366
4352
|
});
|
|
4367
4353
|
}), c;
|
|
4368
|
-
}),
|
|
4369
|
-
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();
|
|
4370
4356
|
I(!1).toVar();
|
|
4371
4357
|
let Re = z(0).toVar(), ze = B(-1).toVar(), Be = Mr({
|
|
4372
4358
|
isMetallic: !1,
|
|
@@ -4417,18 +4403,18 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4417
4403
|
let r = W(e.greaterThan(B(0)), oe, z(1)), te = wr({
|
|
4418
4404
|
origin: Ge,
|
|
4419
4405
|
direction: Ke
|
|
4420
|
-
}), P = Er.wrap(
|
|
4406
|
+
}), P = Er.wrap(vi(te, i, a, o)).toVar();
|
|
4421
4407
|
N(P.didHit.not(), () => {
|
|
4422
|
-
let t =
|
|
4408
|
+
let t = qo(Pe, Ke, S, w, C, k, re, ne), n = z(1).toVar();
|
|
4423
4409
|
N(xe.greaterThan(0).and(k).and(A), () => {
|
|
4424
|
-
let e =
|
|
4410
|
+
let e = wi(S, Ke, w, D, O).w.toVar();
|
|
4425
4411
|
N(e.greaterThan(0), () => {
|
|
4426
4412
|
n.assign(Xr({
|
|
4427
4413
|
pdf1: xe,
|
|
4428
4414
|
pdf2: e
|
|
4429
4415
|
}));
|
|
4430
4416
|
});
|
|
4431
|
-
}), _e.addAssign(
|
|
4417
|
+
}), _e.addAssign(Jo({
|
|
4432
4418
|
contribution: t.xyz.mul(ve).mul(r).mul(n),
|
|
4433
4419
|
pathLength: z(e),
|
|
4434
4420
|
fireflyThreshold: ae,
|
|
@@ -4441,10 +4427,10 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4441
4427
|
});
|
|
4442
4428
|
let qe = Tr.wrap(ai(P.materialIndex, o)).toVar(), Je = P.uv.toVar(), Ye = P.normal.toVar();
|
|
4443
4429
|
N(qe.displacementMapIndex.greaterThanEqual(B(0)).and(qe.displacementScale.greaterThan(0)), () => {
|
|
4444
|
-
let t =
|
|
4430
|
+
let t = Ui.wrap(Wi(te, P, a, p, qe, e)).toVar();
|
|
4445
4431
|
Je.assign(t.uv), Ye.assign(t.normal), P.hitPoint.assign(t.hitPoint);
|
|
4446
4432
|
});
|
|
4447
|
-
let Xe = jr.wrap(
|
|
4433
|
+
let Xe = jr.wrap(Ii(s, c, l, u, d, f, qe, Je, P.normal)).toVar();
|
|
4448
4434
|
qe.color.assign(Xe.albedo), qe.metalness.assign(L(Xe.metalness, 0, 1)), qe.roughness.assign(L(Xe.roughness, Hr, 1));
|
|
4449
4435
|
let Ze = Xe.normal.toVar();
|
|
4450
4436
|
N(qe.displacementMapIndex.greaterThanEqual(B(0)).and(qe.displacementScale.greaterThan(0)), () => {
|
|
@@ -4458,11 +4444,11 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4458
4444
|
}).ElseIf(De.equal(B(3)), () => {
|
|
4459
4445
|
Qe.assign(Ae), $e.assign(ke);
|
|
4460
4446
|
});
|
|
4461
|
-
let tt =
|
|
4447
|
+
let tt = va.wrap(Ea(te, P.hitPoint, Ze, qe, t, Me, Qe, $e)).toVar();
|
|
4462
4448
|
N(tt.continueRay, () => {
|
|
4463
4449
|
let e = I(!1).toVar();
|
|
4464
4450
|
N(tt.isTransmissive.and(Me.greaterThan(B(0))), () => {
|
|
4465
|
-
Me.subAssign(1), Ne.assign(B(
|
|
4451
|
+
Me.subAssign(1), Ne.assign(B(Bo)), e.assign(I(!0)), N(tt.didReflect.not(), () => {
|
|
4466
4452
|
N(tt.entering, () => {
|
|
4467
4453
|
N(De.lessThan(B(3)), () => {
|
|
4468
4454
|
De.addAssign(1), N(De.equal(B(1)), () => {
|
|
@@ -4493,52 +4479,52 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4493
4479
|
}), be.assign(I(!0));
|
|
4494
4480
|
let nt = ln(me, n, e, t, B(-1), he, ge).toVar(), rt = Ke.negate().toVar();
|
|
4495
4481
|
qe.sheenRoughness.assign(L(qe.sheenRoughness, Hr, 1)), N(Le.not(), () => {
|
|
4496
|
-
We.assign(
|
|
4482
|
+
We.assign(ua(Ze, rt, qe, Xe, Be)), Le.assign(I(!0));
|
|
4497
4483
|
});
|
|
4498
4484
|
let it = J(0).toVar(), at = J(0).toVar(), H = z(0).toVar();
|
|
4499
4485
|
N(qe.clearcoat.greaterThan(0), () => {
|
|
4500
|
-
let e =
|
|
4486
|
+
let e = ka.wrap(Aa(te, P, qe, nt, t));
|
|
4501
4487
|
it.assign(e.L), at.assign(e.brdf), H.assign(e.pdf);
|
|
4502
4488
|
}).Else(() => {
|
|
4503
|
-
let e = Dr.wrap(
|
|
4489
|
+
let e = Dr.wrap(Wo(rt, Ze, qe, P.materialIndex, nt, t, Ie, ze, Be, Fe, Ue, Le, We));
|
|
4504
4490
|
it.assign(e.direction), at.assign(e.value), H.assign(e.pdf), N(ze.notEqual(P.materialIndex).or(Ie.not()), () => {
|
|
4505
4491
|
Be.assign(ni(qe.metalness, qe.roughness, qe.transmission, qe.clearcoat, qe.emissive));
|
|
4506
4492
|
}), Ie.assign(I(!0)), ze.assign(P.materialIndex), Fe.assign(I(!0));
|
|
4507
4493
|
}), N(et(Xe.emissive).greaterThan(0), () => {
|
|
4508
4494
|
let t = z(1).toVar();
|
|
4509
4495
|
N(ce.equal(B(1)).and(ue.greaterThan(B(0))).and(xe.greaterThan(0)), () => {
|
|
4510
|
-
let e =
|
|
4496
|
+
let e = ko(P.triangleIndex, P.dst, Ke, Ge, a, o, de);
|
|
4511
4497
|
t.assign(Xr({
|
|
4512
4498
|
pdf1: xe,
|
|
4513
4499
|
pdf2: e
|
|
4514
4500
|
}));
|
|
4515
|
-
}), _e.addAssign(
|
|
4501
|
+
}), _e.addAssign(Jo({
|
|
4516
4502
|
contribution: Xe.emissive.mul(ve).mul(r).mul(t),
|
|
4517
4503
|
pathLength: z(e),
|
|
4518
4504
|
fireflyThreshold: ae,
|
|
4519
4505
|
frame: B(ge)
|
|
4520
4506
|
}));
|
|
4521
4507
|
});
|
|
4522
|
-
let ot =
|
|
4523
|
-
_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({
|
|
4524
4510
|
contribution: ot.mul(ve).mul(r),
|
|
4525
4511
|
pathLength: z(e),
|
|
4526
4512
|
fireflyThreshold: ae,
|
|
4527
4513
|
frame: B(ge)
|
|
4528
4514
|
})), N(ce.equal(B(1)).and(ue.greaterThan(B(0))), () => {
|
|
4529
|
-
let n = M(([e, t, n, r]) =>
|
|
4515
|
+
let n = M(([e, t, n, r]) => Ka(e, t, n, r, yi, i, a, o));
|
|
4530
4516
|
N(pe.greaterThan(B(0)), () => {
|
|
4531
|
-
let i =
|
|
4517
|
+
let i = po.wrap(Lo(P.hitPoint, Ze, t, fe, le, a));
|
|
4532
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)), () => {
|
|
4533
4519
|
let a = V(z(0), R(Ze, i.direction));
|
|
4534
4520
|
N(a.greaterThan(0), () => {
|
|
4535
|
-
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);
|
|
4536
4522
|
N(l.greaterThan(0), () => {
|
|
4537
|
-
let t =
|
|
4523
|
+
let t = Da(rt, i.direction, Ze, qe), n = io(rt, i.direction, Ze, qe), o = W(n.greaterThan(0), Xr({
|
|
4538
4524
|
pdf1: i.pdf,
|
|
4539
4525
|
pdf2: n
|
|
4540
4526
|
}), z(1)), s = i.emission.mul(t).mul(a).div(i.pdf).mul(l).mul(j).mul(o);
|
|
4541
|
-
_e.addAssign(
|
|
4527
|
+
_e.addAssign(Jo({
|
|
4542
4528
|
contribution: s.mul(ve).mul(r),
|
|
4543
4529
|
pathLength: z(e),
|
|
4544
4530
|
fireflyThreshold: ae,
|
|
@@ -4548,8 +4534,8 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4548
4534
|
});
|
|
4549
4535
|
});
|
|
4550
4536
|
}).Else(() => {
|
|
4551
|
-
let i =
|
|
4552
|
-
_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({
|
|
4553
4539
|
contribution: i.mul(ve).mul(r),
|
|
4554
4540
|
pathLength: z(e),
|
|
4555
4541
|
fireflyThreshold: ae,
|
|
@@ -4557,23 +4543,23 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4557
4543
|
}));
|
|
4558
4544
|
});
|
|
4559
4545
|
}), N(Fe.not().or(e.equal(B(0))), () => {
|
|
4560
|
-
Be.assign(Mr.wrap(
|
|
4546
|
+
Be.assign(Mr.wrap(Uo(qe, P.materialIndex, Ie, ze, Be))), Ie.assign(I(!0)), ze.assign(P.materialIndex);
|
|
4561
4547
|
});
|
|
4562
|
-
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));
|
|
4563
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)), () => {
|
|
4564
|
-
Ne.assign(B(
|
|
4550
|
+
Ne.assign(B(zo));
|
|
4565
4551
|
}).ElseIf(qe.transmission.greaterThan(.5), () => {
|
|
4566
|
-
Ne.assign(B(
|
|
4552
|
+
Ne.assign(B(Bo));
|
|
4567
4553
|
}).Else(() => {
|
|
4568
|
-
Ne.assign(B(
|
|
4554
|
+
Ne.assign(B(Vo));
|
|
4569
4555
|
}), N(e.equal(B(0)).and(P.didHit), () => {
|
|
4570
4556
|
Se.assign(Ze), Ce.assign(qe.color.xyz), we.assign(z(P.materialIndex)), Te.assign(P.hitPoint), Ee.assign(P.dst);
|
|
4571
4557
|
});
|
|
4572
|
-
let lt =
|
|
4558
|
+
let lt = Ko(e, ve, qe, P.materialIndex, Ke, t, Ie, ze, Be, Fe, Re, k, A);
|
|
4573
4559
|
N(lt.lessThanEqual(0), () => {
|
|
4574
4560
|
Ve();
|
|
4575
4561
|
}), ve.divAssign(lt), F.addAssign(1), Fe.assign(I(!1)), Le.assign(I(!1));
|
|
4576
|
-
}),
|
|
4562
|
+
}), Ho({
|
|
4577
4563
|
radiance: Y(_e, ye),
|
|
4578
4564
|
objectNormal: Se,
|
|
4579
4565
|
objectColor: Ce,
|
|
@@ -4581,11 +4567,11 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4581
4567
|
firstHitPoint: Te,
|
|
4582
4568
|
firstHitDistance: Ee
|
|
4583
4569
|
});
|
|
4584
|
-
}),
|
|
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]) => {
|
|
4585
4571
|
let S = Y(1, 0, 1, 1).toVar(), C = wr({
|
|
4586
4572
|
origin: e,
|
|
4587
4573
|
direction: t
|
|
4588
|
-
}), w = Er.wrap(
|
|
4574
|
+
}), w = Er.wrap(vi(C, n, r, i).toVar());
|
|
4589
4575
|
return N(l.equal(B(7)), () => {
|
|
4590
4576
|
let e = z(w.triTests).div(u);
|
|
4591
4577
|
S.assign(W(e.lessThan(1), Y(J(e), 1), Y(1, 0, 0, 1)));
|
|
@@ -4594,7 +4580,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4594
4580
|
S.assign(W(e.lessThan(1), Y(J(e), 1), Y(1, 0, 0, 1)));
|
|
4595
4581
|
}), N(l.equal(B(10)), () => {
|
|
4596
4582
|
N(c, () => {
|
|
4597
|
-
let e =
|
|
4583
|
+
let e = Ei({
|
|
4598
4584
|
tex: a,
|
|
4599
4585
|
samp: dt(a),
|
|
4600
4586
|
direction: t,
|
|
@@ -4629,7 +4615,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4629
4615
|
N(w.didHit.not(), () => {
|
|
4630
4616
|
S.assign(Y(0, 0, 0, 1));
|
|
4631
4617
|
}).Else(() => {
|
|
4632
|
-
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();
|
|
4633
4619
|
N(r.greaterThan(0), () => {
|
|
4634
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));
|
|
4635
4621
|
S.assign(Y(o, 1));
|
|
@@ -4641,41 +4627,41 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4641
4627
|
N(w.didHit.not(), () => {
|
|
4642
4628
|
S.assign(Y(.5, .5, 1, 1));
|
|
4643
4629
|
}).Else(() => {
|
|
4644
|
-
let e = Tr.wrap(ai(w.materialIndex, i)).toVar(), t = U(jr.wrap(
|
|
4645
|
-
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));
|
|
4646
4632
|
});
|
|
4647
4633
|
}), N(l.equal(B(2)), () => {
|
|
4648
4634
|
N(w.didHit.not(), () => {
|
|
4649
4635
|
S.assign(Y(J(1), 1));
|
|
4650
4636
|
}).Else(() => {
|
|
4651
|
-
let e =
|
|
4637
|
+
let e = Qo({
|
|
4652
4638
|
worldPos: w.hitPoint,
|
|
4653
4639
|
cameraProjectionMatrix: y,
|
|
4654
4640
|
cameraViewMatrix: b
|
|
4655
4641
|
});
|
|
4656
|
-
S.assign(Y(
|
|
4642
|
+
S.assign(Y(Xo({ depth: e }), 1));
|
|
4657
4643
|
});
|
|
4658
4644
|
}), N(l.equal(B(3)), () => {
|
|
4659
4645
|
N(w.didHit.not(), () => {
|
|
4660
4646
|
S.assign(Y(0, 0, 0, 1));
|
|
4661
4647
|
}).Else(() => {
|
|
4662
|
-
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;
|
|
4663
4649
|
S.assign(Y(t, 1));
|
|
4664
4650
|
});
|
|
4665
4651
|
}), N(l.equal(B(5)), () => {
|
|
4666
4652
|
N(w.didHit.not(), () => {
|
|
4667
4653
|
S.assign(Y(0, 0, 0, 1));
|
|
4668
4654
|
}).Else(() => {
|
|
4669
|
-
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({
|
|
4670
4656
|
N: u,
|
|
4671
4657
|
xi: q($t(f).toVar(), $t(f).toVar()).toVar()
|
|
4672
4658
|
}).toVar(), b = wr({
|
|
4673
4659
|
origin: w.hitPoint.add(u.mul(.001)).toVar(),
|
|
4674
4660
|
direction: y
|
|
4675
|
-
}), C = Er.wrap(
|
|
4661
|
+
}), C = Er.wrap(vi(b, n, r, i).toVar()), T = J(0).toVar();
|
|
4676
4662
|
N(C.didHit.not(), () => {
|
|
4677
4663
|
N(c, () => {
|
|
4678
|
-
T.assign(
|
|
4664
|
+
T.assign(Ei({
|
|
4679
4665
|
tex: a,
|
|
4680
4666
|
samp: dt(a),
|
|
4681
4667
|
direction: y,
|
|
@@ -4685,9 +4671,9 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4685
4671
|
}).xyz);
|
|
4686
4672
|
});
|
|
4687
4673
|
}).Else(() => {
|
|
4688
|
-
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();
|
|
4689
4675
|
T.assign(t.emissive), N(c, () => {
|
|
4690
|
-
let e = U(t.normal).toVar(), n =
|
|
4676
|
+
let e = U(t.normal).toVar(), n = Ei({
|
|
4691
4677
|
tex: a,
|
|
4692
4678
|
samp: dt(a),
|
|
4693
4679
|
direction: e,
|
|
@@ -4703,7 +4689,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4703
4689
|
});
|
|
4704
4690
|
}), N(l.equal(B(6)), () => {
|
|
4705
4691
|
N(w.didHit, () => {
|
|
4706
|
-
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({
|
|
4707
4693
|
tex: a,
|
|
4708
4694
|
samp: dt(a),
|
|
4709
4695
|
direction: n,
|
|
@@ -4713,7 +4699,7 @@ var Do = 8, Oo = 2, ko = Cr({
|
|
|
4713
4699
|
}).xyz, i = r.div(r.add(1));
|
|
4714
4700
|
S.assign(Y(i, 1));
|
|
4715
4701
|
}).Else(() => {
|
|
4716
|
-
let e =
|
|
4702
|
+
let e = Ei({
|
|
4717
4703
|
tex: a,
|
|
4718
4704
|
samp: dt(a),
|
|
4719
4705
|
direction: t,
|
|
@@ -4729,7 +4715,7 @@ M(([e, t]) => {
|
|
|
4729
4715
|
let n = $t(t), r = J(.25 / 255, -.25 / 255, .25 / 255).toVar();
|
|
4730
4716
|
return r.assign(H(r.mul(2), r.mul(-2), n)), e.add(r);
|
|
4731
4717
|
});
|
|
4732
|
-
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]) => {
|
|
4733
4719
|
let a = vt(n, e.div(t), 0), o = B(0).toVar();
|
|
4734
4720
|
return N(a.b.greaterThan(.5), () => {
|
|
4735
4721
|
o.assign(0);
|
|
@@ -4737,7 +4723,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4737
4723
|
let e = B(Ze(a.r.mul(z(i)).add(.5)));
|
|
4738
4724
|
o.assign(L(e, r, i));
|
|
4739
4725
|
}), o;
|
|
4740
|
-
}),
|
|
4726
|
+
}), ns = (e) => {
|
|
4741
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();
|
|
4742
4728
|
We.y.assign(We.y.negate());
|
|
4743
4729
|
let F = Y(0).toVar(), Ge = B(0).toVar(), Ke = dn({
|
|
@@ -4746,7 +4732,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4746
4732
|
frame: o
|
|
4747
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();
|
|
4748
4734
|
N(o.greaterThan(G(2)).and(je), () => {
|
|
4749
|
-
let e =
|
|
4735
|
+
let e = ts(t, a, Me, Ne, Pe);
|
|
4750
4736
|
Ye.assign(e), N(Ye.equal(B(0)), () => {
|
|
4751
4737
|
N(we.and(Te), () => {
|
|
4752
4738
|
let e = vt(Ee, Ue, 0);
|
|
@@ -4769,14 +4755,14 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4769
4755
|
N(c.equal(B(9)), () => {
|
|
4770
4756
|
F.assign(Y(r, 1, 1)), Ge.assign(1), Ve();
|
|
4771
4757
|
});
|
|
4772
|
-
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();
|
|
4773
4759
|
N(c.greaterThan(B(0)), () => {
|
|
4774
|
-
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));
|
|
4775
4761
|
}).Else(() => {
|
|
4776
|
-
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));
|
|
4777
4763
|
Te.assign(r.radiance), N(e.equal(B(0)), () => {
|
|
4778
4764
|
R.assign(r.objectNormal), Xe.assign(r.objectColor), Ze.assign(r.objectID), N(r.firstHitDistance.lessThan(1e9), () => {
|
|
4779
|
-
I.assign(U(r.objectNormal)), L.assign(
|
|
4765
|
+
I.assign(U(r.objectNormal)), L.assign(es({
|
|
4780
4766
|
worldPos: r.firstHitPoint,
|
|
4781
4767
|
cameraProjectionMatrix: f,
|
|
4782
4768
|
cameraViewMatrix: d
|
|
@@ -4794,7 +4780,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4794
4780
|
nt.assign(H(e.w, Je, ke));
|
|
4795
4781
|
});
|
|
4796
4782
|
}), xt(n, M, Y($e.xyz, nt)).toWriteOnly(), xt(r, M, et).toWriteOnly(), xt(i, M, Y(tt, 1)).toWriteOnly();
|
|
4797
|
-
},
|
|
4783
|
+
}, rs = class {
|
|
4798
4784
|
constructor(e = "Build") {
|
|
4799
4785
|
this.label = e, this.entries = /* @__PURE__ */ new Map(), this.order = [], this.totalStart = performance.now();
|
|
4800
4786
|
}
|
|
@@ -4821,17 +4807,17 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4821
4807
|
total: Math.round(e)
|
|
4822
4808
|
};
|
|
4823
4809
|
}
|
|
4824
|
-
},
|
|
4810
|
+
}, is = 8, as = class {
|
|
4825
4811
|
constructor() {
|
|
4826
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;
|
|
4827
4813
|
}
|
|
4828
4814
|
setupCompute(e) {
|
|
4829
|
-
let { stage: t, storageTextures: n } = e, r = new
|
|
4815
|
+
let { stage: t, storageTextures: n } = e, r = new rs("setupCompute");
|
|
4830
4816
|
r.start("Create texture nodes");
|
|
4831
4817
|
let i = this._createTextureNodes(t, n);
|
|
4832
4818
|
r.end("Create texture nodes"), r.start("Build compute node (TSL)");
|
|
4833
4819
|
let a = n.renderWidth, o = n.renderHeight;
|
|
4834
|
-
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;
|
|
4835
4821
|
let s = n.getWriteTextures();
|
|
4836
4822
|
this.computeNode = this._buildComputeNode(t, i, s.color, s.normalDepth, s.albedo), r.end("Build compute node (TSL)"), r.print();
|
|
4837
4823
|
}
|
|
@@ -4843,7 +4829,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4843
4829
|
return this._sceneTextureNodes;
|
|
4844
4830
|
}
|
|
4845
4831
|
setSize(e, t) {
|
|
4846
|
-
this._dispatchX = Math.ceil(e /
|
|
4832
|
+
this._dispatchX = Math.ceil(e / is), this._dispatchY = Math.ceil(t / is), this.computeNode && this.computeNode.setCount([
|
|
4847
4833
|
this._dispatchX,
|
|
4848
4834
|
this._dispatchY,
|
|
4849
4835
|
1
|
|
@@ -4851,7 +4837,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4851
4837
|
}
|
|
4852
4838
|
setTileDispatch(e, t, n, r) {
|
|
4853
4839
|
this.tileOffsetX.value = e, this.tileOffsetY.value = t;
|
|
4854
|
-
let i = Math.ceil(n /
|
|
4840
|
+
let i = Math.ceil(n / is), a = Math.ceil(r / is);
|
|
4855
4841
|
this.computeNode && this.computeNode.setCount([
|
|
4856
4842
|
i,
|
|
4857
4843
|
a,
|
|
@@ -4867,7 +4853,9 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4867
4853
|
}
|
|
4868
4854
|
forceCompile() {}
|
|
4869
4855
|
_createTextureNodes(e, t) {
|
|
4870
|
-
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();
|
|
4871
4859
|
this.adaptiveSamplingTexNode = l;
|
|
4872
4860
|
let u = e.environment.envMarginalStorageNode, d = e.environment.envConditionalStorageNode, f = t.getReadTextures();
|
|
4873
4861
|
this.prevColorTexNode = vt(f.color), this.prevNormalDepthTexNode = vt(f.normalDepth), this.prevAlbedoTexNode = vt(f.albedo);
|
|
@@ -4902,9 +4890,9 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4902
4890
|
_buildComputeNode(e, t, n, r, i) {
|
|
4903
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;
|
|
4904
4892
|
return M(() => {
|
|
4905
|
-
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));
|
|
4906
4894
|
N(t.lessThan(C).and(O.lessThan(w)), () => {
|
|
4907
|
-
|
|
4895
|
+
ns({
|
|
4908
4896
|
pixelCoord: q(z(t).add(.5), z(O).add(.5)),
|
|
4909
4897
|
writeColorTex: n,
|
|
4910
4898
|
writeNDTex: r,
|
|
@@ -4985,15 +4973,15 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
4985
4973
|
this._dispatchY,
|
|
4986
4974
|
1
|
|
4987
4975
|
], [
|
|
4988
|
-
|
|
4989
|
-
|
|
4976
|
+
is,
|
|
4977
|
+
is,
|
|
4990
4978
|
1
|
|
4991
4979
|
]);
|
|
4992
4980
|
}
|
|
4993
4981
|
dispose() {
|
|
4994
4982
|
this.computeNode?.dispose(), this.computeNode = null, this.prevColorTexNode = null, this.prevNormalDepthTexNode = null, this.prevAlbedoTexNode = null, this.adaptiveSamplingTexNode = null, this._sceneTextureNodes = null;
|
|
4995
4983
|
}
|
|
4996
|
-
},
|
|
4984
|
+
}, os = class {
|
|
4997
4985
|
constructor(e, t) {
|
|
4998
4986
|
this.traversalCost = e, this.intersectionCost = t, this.maxTreeletLeaves = 7, this.minImprovement = .02, this.topologyCache = /* @__PURE__ */ new Map();
|
|
4999
4987
|
for (let e = 3; e <= this.maxTreeletLeaves; e++) this.topologyCache.set(e, this.generateTopologies(e));
|
|
@@ -5184,10 +5172,10 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5184
5172
|
}
|
|
5185
5173
|
buildSubtree(e, t, n) {
|
|
5186
5174
|
if (typeof e == "number") {
|
|
5187
|
-
let r = t[n[e]], i = new
|
|
5175
|
+
let r = t[n[e]], i = new ss();
|
|
5188
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;
|
|
5189
5177
|
}
|
|
5190
|
-
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();
|
|
5191
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;
|
|
5192
5180
|
}
|
|
5193
5181
|
setTreeletSize(e) {
|
|
@@ -5201,11 +5189,11 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5201
5189
|
getStatistics() {
|
|
5202
5190
|
return { ...this.stats };
|
|
5203
5191
|
}
|
|
5204
|
-
},
|
|
5192
|
+
}, ss = class {
|
|
5205
5193
|
constructor() {
|
|
5206
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;
|
|
5207
5195
|
}
|
|
5208
|
-
},
|
|
5196
|
+
}, cs = class {
|
|
5209
5197
|
constructor(e, t) {
|
|
5210
5198
|
this.traversalCost = e, this.intersectionCost = t, this.batchSizeRatio = .02, this.maxIterations = 2, this.timeBudgetMs = 15e3, this.stats = {
|
|
5211
5199
|
reinsertionsApplied: 0,
|
|
@@ -5370,7 +5358,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5370
5358
|
}
|
|
5371
5359
|
return this.stats.timeMs = performance.now() - n, this.stats;
|
|
5372
5360
|
}
|
|
5373
|
-
},
|
|
5361
|
+
}, ls = {
|
|
5374
5362
|
FLOATS_PER_TRIANGLE: 32,
|
|
5375
5363
|
POSITION_A_OFFSET: 0,
|
|
5376
5364
|
POSITION_B_OFFSET: 4,
|
|
@@ -5380,11 +5368,11 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5380
5368
|
NORMAL_C_OFFSET: 20,
|
|
5381
5369
|
UV_AB_OFFSET: 24,
|
|
5382
5370
|
UV_C_MAT_OFFSET: 28
|
|
5383
|
-
},
|
|
5371
|
+
}, us = ls.FLOATS_PER_TRIANGLE, ds = class {
|
|
5384
5372
|
constructor() {
|
|
5385
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;
|
|
5386
5374
|
}
|
|
5387
|
-
},
|
|
5375
|
+
}, fs = class {
|
|
5388
5376
|
constructor() {
|
|
5389
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 = {
|
|
5390
5378
|
sahSplits: 0,
|
|
@@ -5444,9 +5432,9 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5444
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)));
|
|
5445
5433
|
}
|
|
5446
5434
|
initializeTriangleArrays() {
|
|
5447
|
-
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;
|
|
5448
5436
|
for (let a = 0; a < e; a++) {
|
|
5449
|
-
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;
|
|
5450
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;
|
|
5451
5439
|
}
|
|
5452
5440
|
}
|
|
@@ -5491,7 +5479,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5491
5479
|
this.splitStats.mortonSortTime += performance.now() - t;
|
|
5492
5480
|
}
|
|
5493
5481
|
build(e, t = 30, n = null) {
|
|
5494
|
-
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) => {
|
|
5495
5483
|
try {
|
|
5496
5484
|
let a = new Worker(new URL(
|
|
5497
5485
|
/* @vite-ignore */
|
|
@@ -5499,7 +5487,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5499
5487
|
"" + import.meta.url
|
|
5500
5488
|
), { type: "module" }), o = this.totalTriangles, s = typeof SharedArrayBuffer < "u";
|
|
5501
5489
|
console.log(`[BVHBuilder] SharedArrayBuffer: ${s ? "enabled" : "unavailable (using transfer fallback)"}`);
|
|
5502
|
-
let c = s ? new SharedArrayBuffer(o *
|
|
5490
|
+
let c = s ? new SharedArrayBuffer(o * us * 4) : null;
|
|
5503
5491
|
a.onmessage = (e) => {
|
|
5504
5492
|
let { bvhData: t, triangles: o, originalToBvh: s, error: l, progress: u, treeletStats: d } = e.data;
|
|
5505
5493
|
if (l) {
|
|
@@ -5558,7 +5546,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5558
5546
|
}
|
|
5559
5547
|
buildSync(e, t = 30, n = null, r = null) {
|
|
5560
5548
|
let i = performance.now();
|
|
5561
|
-
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 = {
|
|
5562
5550
|
sahSplits: 0,
|
|
5563
5551
|
objectMedianSplits: 0,
|
|
5564
5552
|
spatialMedianSplits: 0,
|
|
@@ -5583,7 +5571,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5583
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();
|
|
5584
5572
|
let s = performance.now(), c = this.buildNodeRecursive(0, a, t, n);
|
|
5585
5573
|
if (this.splitStats.sahBuildTime = performance.now() - s, this.enableTreeletOptimization && this.totalTriangles > 1e3) {
|
|
5586
|
-
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);
|
|
5587
5575
|
i.setTreeletSize(t), i.setMinImprovement(this.treeletMinImprovement), i.setMaxTreelets(r);
|
|
5588
5576
|
let a = performance.now();
|
|
5589
5577
|
for (let e = 0; e < this.treeletOptimizationPasses; e++) {
|
|
@@ -5605,7 +5593,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5605
5593
|
this.splitStats.treeletsProcessed = s.treeletsProcessed, this.splitStats.treeletsImproved = s.treeletsImproved, this.splitStats.averageSAHImprovement = s.averageSAHImprovement;
|
|
5606
5594
|
}
|
|
5607
5595
|
if (this.enableReinsertionOptimization && this.totalTriangles > 1e3) {
|
|
5608
|
-
let e = new
|
|
5596
|
+
let e = new cs(this.traversalCost, this.intersectionCost);
|
|
5609
5597
|
e.setBatchSizeRatio(this.reinsertionBatchSizeRatio), e.setMaxIterations(this.reinsertionMaxIterations);
|
|
5610
5598
|
let t = n ? (e) => {
|
|
5611
5599
|
n(e);
|
|
@@ -5620,10 +5608,10 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5620
5608
|
}
|
|
5621
5609
|
let l = performance.now();
|
|
5622
5610
|
this.applySAOrdering(c), this.splitStats.saOrderTime = performance.now() - l;
|
|
5623
|
-
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);
|
|
5624
5612
|
for (let e = 0; e < a; e++) {
|
|
5625
|
-
let t = this.indices[e] *
|
|
5626
|
-
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);
|
|
5627
5615
|
}
|
|
5628
5616
|
this.reorderedTriangleData = f;
|
|
5629
5617
|
let p = new Uint32Array(a);
|
|
@@ -5639,7 +5627,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5639
5627
|
n - this.lastProgressUpdate < this.progressUpdateInterval || (this.lastProgressUpdate = n, t(Math.min(Math.floor(this.processedTriangles / this.totalTriangles * 100), 99)));
|
|
5640
5628
|
}
|
|
5641
5629
|
buildNodeRecursiveToDepth(e, t, n, r, i, a, o, s, c, l, u) {
|
|
5642
|
-
let d = new
|
|
5630
|
+
let d = new ds();
|
|
5643
5631
|
this.totalNodes++;
|
|
5644
5632
|
let f = t - e;
|
|
5645
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;
|
|
@@ -5680,7 +5668,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5680
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);
|
|
5681
5669
|
}
|
|
5682
5670
|
buildNodeRecursive(e, t, n, r, i, a, o, s, c, l) {
|
|
5683
|
-
let u = new
|
|
5671
|
+
let u = new ds();
|
|
5684
5672
|
this.totalNodes++;
|
|
5685
5673
|
let d = t - e;
|
|
5686
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;
|
|
@@ -5978,7 +5966,7 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5978
5966
|
let o = r - e, s = i - t, c = a - n;
|
|
5979
5967
|
return 2 * (o * s + s * c + c * o);
|
|
5980
5968
|
}
|
|
5981
|
-
},
|
|
5969
|
+
}, ps = {
|
|
5982
5970
|
FLOATS_PER_TRIANGLE: 32,
|
|
5983
5971
|
POSITION_A_OFFSET: 0,
|
|
5984
5972
|
POSITION_B_OFFSET: 4,
|
|
@@ -5986,28 +5974,28 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
5986
5974
|
NORMAL_A_OFFSET: 12,
|
|
5987
5975
|
NORMAL_B_OFFSET: 16,
|
|
5988
5976
|
NORMAL_C_OFFSET: 20
|
|
5989
|
-
},
|
|
5977
|
+
}, ms = ps.FLOATS_PER_TRIANGLE, hs = 16, gs = -1, _s = -2, vs = class {
|
|
5990
5978
|
constructor() {
|
|
5991
5979
|
this._bounds = null, this._boundsNodeCount = 0;
|
|
5992
5980
|
}
|
|
5993
5981
|
updateTrianglePositions(e, t, n) {
|
|
5994
5982
|
let r = n.length;
|
|
5995
5983
|
for (let i = 0; i < r; i++) {
|
|
5996
|
-
let r = n[i], a = i *
|
|
5997
|
-
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;
|
|
5998
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;
|
|
5999
|
-
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;
|
|
6000
5988
|
}
|
|
6001
5989
|
}
|
|
6002
5990
|
refitRange(e, t, n, r) {
|
|
6003
5991
|
r > this._boundsNodeCount && (this._bounds = new Float32Array(r * 6), this._boundsNodeCount = r);
|
|
6004
5992
|
let i = this._bounds, a = n + r;
|
|
6005
5993
|
for (let r = a - 1; r >= n; r--) {
|
|
6006
|
-
let a = r *
|
|
6007
|
-
if (e[a + 3] ===
|
|
5994
|
+
let a = r * hs, o = (r - n) * 6;
|
|
5995
|
+
if (e[a + 3] === gs) {
|
|
6008
5996
|
let n = e[a], r = e[a + 1], s = Infinity, c = Infinity, l = Infinity, u = -Infinity, d = -Infinity, f = -Infinity;
|
|
6009
5997
|
for (let e = 0; e < r; e++) {
|
|
6010
|
-
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];
|
|
6011
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);
|
|
6012
6000
|
}
|
|
6013
6001
|
i[o] = s, i[o + 1] = c, i[o + 2] = l, i[o + 3] = u, i[o + 4] = d, i[o + 5] = f;
|
|
@@ -6021,15 +6009,15 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
6021
6009
|
n !== this._boundsNodeCount && (this._bounds = new Float32Array(n * 6), this._boundsNodeCount = n);
|
|
6022
6010
|
let r = this._bounds;
|
|
6023
6011
|
for (let i = n - 1; i >= 0; i--) {
|
|
6024
|
-
let n = i *
|
|
6025
|
-
if (o ===
|
|
6012
|
+
let n = i * hs, a = i * 6, o = e[n + 3];
|
|
6013
|
+
if (o === gs) {
|
|
6026
6014
|
let i = e[n], o = e[n + 1], s = Infinity, c = Infinity, l = Infinity, u = -Infinity, d = -Infinity, f = -Infinity;
|
|
6027
6015
|
for (let e = 0; e < o; e++) {
|
|
6028
|
-
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];
|
|
6029
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);
|
|
6030
6018
|
}
|
|
6031
6019
|
r[a] = s, r[a + 1] = c, r[a + 2] = l, r[a + 3] = u, r[a + 4] = d, r[a + 5] = f;
|
|
6032
|
-
} else if (o ===
|
|
6020
|
+
} else if (o === _s) {
|
|
6033
6021
|
let t = e[n] * 6;
|
|
6034
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];
|
|
6035
6023
|
} else {
|
|
@@ -6038,14 +6026,14 @@ var ns = /* @__PURE__ */ X("\n fn computeNDCDepth( worldPos: vec3f, cameraProjec
|
|
|
6038
6026
|
}
|
|
6039
6027
|
}
|
|
6040
6028
|
}
|
|
6041
|
-
},
|
|
6042
|
-
function
|
|
6043
|
-
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));
|
|
6044
6032
|
return console.log(`[ParallelBVH] Parallel build: ${i.toLocaleString()} triangles, ${a} workers, parallelDepth=${o}`), new Promise((s, c) => {
|
|
6045
6033
|
try {
|
|
6046
6034
|
let c = new SharedArrayBuffer(e.byteLength);
|
|
6047
6035
|
new Float32Array(c).set(e);
|
|
6048
|
-
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(
|
|
6049
6037
|
/* @vite-ignore */
|
|
6050
6038
|
"" + new URL("assets/BVHWorker-BqQTDljT.js", import.meta.url).href,
|
|
6051
6039
|
"" + import.meta.url
|
|
@@ -6058,7 +6046,7 @@ function ws(e, t, n, r) {
|
|
|
6058
6046
|
if (y) return;
|
|
6059
6047
|
y = !0, console.warn(`[ParallelBVH] Parallel build failed (${e}), falling back to single worker`), b();
|
|
6060
6048
|
let i = new ArrayBuffer(c.byteLength);
|
|
6061
|
-
new Float32Array(i).set(new Float32Array(c)), s(
|
|
6049
|
+
new Float32Array(i).set(new Float32Array(c)), s(ws(new Float32Array(i), t, n, r));
|
|
6062
6050
|
};
|
|
6063
6051
|
h.onerror = (e) => {
|
|
6064
6052
|
x(`coordinator error: ${e.message}`);
|
|
@@ -6073,7 +6061,7 @@ function ws(e, t, n, r) {
|
|
|
6073
6061
|
return;
|
|
6074
6062
|
}
|
|
6075
6063
|
if (t.type === "phase1Result") {
|
|
6076
|
-
g = t.splitStats,
|
|
6064
|
+
g = t.splitStats, Cs(t, a, c, l, u, d, f, m, i, n, h, _, b, x, s, v, r);
|
|
6077
6065
|
return;
|
|
6078
6066
|
}
|
|
6079
6067
|
if (t.type === "assembleResult") {
|
|
@@ -6107,7 +6095,7 @@ function ws(e, t, n, r) {
|
|
|
6107
6095
|
}
|
|
6108
6096
|
});
|
|
6109
6097
|
}
|
|
6110
|
-
function
|
|
6098
|
+
function Cs(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
|
|
6111
6099
|
let { topFlatData: _, topNodeCount: v, frontierTasks: y, frontierMap: b } = e;
|
|
6112
6100
|
if (!y || y.length === 0) {
|
|
6113
6101
|
console.log("[ParallelBVH] No frontier tasks, assembling with top-level tree only"), u.postMessage({
|
|
@@ -6208,14 +6196,14 @@ function Ts(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
|
|
|
6208
6196
|
});
|
|
6209
6197
|
}
|
|
6210
6198
|
}
|
|
6211
|
-
function
|
|
6199
|
+
function ws(e, t, n, r) {
|
|
6212
6200
|
return new Promise((i, a) => {
|
|
6213
6201
|
try {
|
|
6214
6202
|
let o = new Worker(new URL(
|
|
6215
6203
|
/* @vite-ignore */
|
|
6216
6204
|
"" + new URL("assets/BVHWorker-BqQTDljT.js", import.meta.url).href,
|
|
6217
6205
|
"" + import.meta.url
|
|
6218
|
-
), { type: "module" }), s = e.byteLength / (
|
|
6206
|
+
), { type: "module" }), s = e.byteLength / (ys * 4), c = typeof SharedArrayBuffer < "u" ? new SharedArrayBuffer(s * ys * 4) : null;
|
|
6219
6207
|
o.onmessage = (e) => {
|
|
6220
6208
|
let { bvhData: t, triangles: r, originalToBvh: s, error: l, progress: u, treeletStats: d } = e.data;
|
|
6221
6209
|
if (l) {
|
|
@@ -6253,16 +6241,16 @@ function Es(e, t, n, r) {
|
|
|
6253
6241
|
}
|
|
6254
6242
|
});
|
|
6255
6243
|
}
|
|
6256
|
-
function
|
|
6257
|
-
return typeof Worker < "u" && typeof SharedArrayBuffer < "u" && e >=
|
|
6244
|
+
function Ts(e) {
|
|
6245
|
+
return typeof Worker < "u" && typeof SharedArrayBuffer < "u" && e >= bs;
|
|
6258
6246
|
}
|
|
6259
6247
|
//#endregion
|
|
6260
6248
|
//#region src/Processor/TLASBuilder.js
|
|
6261
|
-
var
|
|
6249
|
+
var Es = 16, Ds = class {
|
|
6262
6250
|
constructor() {
|
|
6263
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;
|
|
6264
6252
|
}
|
|
6265
|
-
},
|
|
6253
|
+
}, Os = class {
|
|
6266
6254
|
constructor() {
|
|
6267
6255
|
this._flatBuffer = null, this._flatBufferCapacity = 0;
|
|
6268
6256
|
}
|
|
@@ -6280,7 +6268,7 @@ var Os = 16, ks = class {
|
|
|
6280
6268
|
};
|
|
6281
6269
|
}
|
|
6282
6270
|
_buildRecursive(e, t) {
|
|
6283
|
-
let n = new
|
|
6271
|
+
let n = new Ds();
|
|
6284
6272
|
if (t.length === 1) {
|
|
6285
6273
|
let r = e[t[0]].worldAABB;
|
|
6286
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;
|
|
@@ -6317,16 +6305,16 @@ var Os = 16, ks = class {
|
|
|
6317
6305
|
let e = r.pop();
|
|
6318
6306
|
e._flatIndex = n.length, n.push(e), e.rightChild && r.push(e.rightChild), e.leftChild && r.push(e.leftChild);
|
|
6319
6307
|
}
|
|
6320
|
-
let i = n.length *
|
|
6308
|
+
let i = n.length * Es;
|
|
6321
6309
|
i > this._flatBufferCapacity && (this._flatBuffer = new Float32Array(i), this._flatBufferCapacity = i);
|
|
6322
6310
|
let a = this._flatBuffer;
|
|
6323
6311
|
a.fill(0, 0, i);
|
|
6324
6312
|
for (let e = 0; e < n.length; e++) {
|
|
6325
|
-
let r = n[e], i = e *
|
|
6313
|
+
let r = n[e], i = e * Es;
|
|
6326
6314
|
if (r.leftChild) {
|
|
6327
6315
|
let e = r.leftChild, t = r.rightChild;
|
|
6328
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;
|
|
6329
|
-
} 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;
|
|
6330
6318
|
}
|
|
6331
6319
|
return a.subarray(0, i);
|
|
6332
6320
|
}
|
|
@@ -6361,7 +6349,7 @@ var Os = 16, ks = class {
|
|
|
6361
6349
|
}
|
|
6362
6350
|
return t;
|
|
6363
6351
|
}
|
|
6364
|
-
},
|
|
6352
|
+
}, ks = class {
|
|
6365
6353
|
constructor() {
|
|
6366
6354
|
this.entries = [], this.totalBLASNodes = 0, this.tlasNodeCount = 0;
|
|
6367
6355
|
}
|
|
@@ -6432,7 +6420,7 @@ var Os = 16, ks = class {
|
|
|
6432
6420
|
clear() {
|
|
6433
6421
|
this.entries = [], this.totalBLASNodes = 0, this.tlasNodeCount = 0;
|
|
6434
6422
|
}
|
|
6435
|
-
},
|
|
6423
|
+
}, As = class {
|
|
6436
6424
|
constructor() {
|
|
6437
6425
|
this.canvasContextPairs = [], this.maxPoolSize = zn.CANVAS_POOL_SIZE;
|
|
6438
6426
|
}
|
|
@@ -6472,7 +6460,7 @@ var Os = 16, ks = class {
|
|
|
6472
6460
|
dispose() {
|
|
6473
6461
|
this.canvasContextPairs = [];
|
|
6474
6462
|
}
|
|
6475
|
-
},
|
|
6463
|
+
}, js = class {
|
|
6476
6464
|
constructor(e = {}) {
|
|
6477
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";
|
|
6478
6466
|
}
|
|
@@ -6530,7 +6518,7 @@ var Os = 16, ks = class {
|
|
|
6530
6518
|
let e = this.getMemoryStats();
|
|
6531
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";
|
|
6532
6520
|
}
|
|
6533
|
-
},
|
|
6521
|
+
}, Ms = class {
|
|
6534
6522
|
constructor(e = zn.CACHE_SIZE_LIMIT) {
|
|
6535
6523
|
this.cache = /* @__PURE__ */ new Map(), this.accessOrder = [], this.maxSize = e;
|
|
6536
6524
|
}
|
|
@@ -6567,12 +6555,12 @@ var Os = 16, ks = class {
|
|
|
6567
6555
|
e && e.dispose && e.dispose();
|
|
6568
6556
|
}), this.cache.clear(), this.accessOrder = [];
|
|
6569
6557
|
}
|
|
6570
|
-
},
|
|
6558
|
+
}, Ns = class {
|
|
6571
6559
|
constructor(e = {}) {
|
|
6572
|
-
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({
|
|
6573
6561
|
maxMemory: e.maxBufferMemory || Un.MAX_BUFFER_MEMORY,
|
|
6574
6562
|
sizeStrategy: e.bufferSizeStrategy || "adaptive"
|
|
6575
|
-
}), this.textureCache = new
|
|
6563
|
+
}), this.textureCache = new Ms(), this.capabilities = this.detectCapabilities(), this.optimalMethod = this.selectOptimalMethod();
|
|
6576
6564
|
}
|
|
6577
6565
|
detectCapabilities() {
|
|
6578
6566
|
return {
|
|
@@ -6879,7 +6867,7 @@ var Os = 16, ks = class {
|
|
|
6879
6867
|
let l = performance.now();
|
|
6880
6868
|
try {
|
|
6881
6869
|
if (!t || t.length === 0) throw Error("No materials provided for texture creation");
|
|
6882
|
-
this.textureCache.dispose(), this.textureCache = new
|
|
6870
|
+
this.textureCache.dispose(), this.textureCache = new Ms();
|
|
6883
6871
|
let e = [];
|
|
6884
6872
|
n && n.length > 0 && e.push(this.createTexturesToDataTexture(n).then((e) => ({
|
|
6885
6873
|
type: "albedo",
|
|
@@ -6998,7 +6986,7 @@ var Os = 16, ks = class {
|
|
|
6998
6986
|
dispose() {
|
|
6999
6987
|
this.canvasPool.dispose(), this.bufferPool.dispose(), this.textureCache.dispose();
|
|
7000
6988
|
}
|
|
7001
|
-
},
|
|
6989
|
+
}, Ps = 128, Fs = class {
|
|
7002
6990
|
constructor() {
|
|
7003
6991
|
this._vectorPool = {
|
|
7004
6992
|
vec3: Array(9).fill().map(() => new Le()),
|
|
@@ -7039,7 +7027,7 @@ var Os = 16, ks = class {
|
|
|
7039
7027
|
console.warn("Skipping mesh with missing geometry or material:", e);
|
|
7040
7028
|
return;
|
|
7041
7029
|
}
|
|
7042
|
-
let t = this.processMaterial(e.material
|
|
7030
|
+
let t = this.processMaterial(e.material);
|
|
7043
7031
|
e.userData.materialIndex = t;
|
|
7044
7032
|
let n = this.meshes.length;
|
|
7045
7033
|
this.meshes.push(e), e.userData.meshIndex = n;
|
|
@@ -7049,19 +7037,19 @@ var Os = 16, ks = class {
|
|
|
7049
7037
|
count: this.currentTriangleIndex - r
|
|
7050
7038
|
});
|
|
7051
7039
|
}
|
|
7052
|
-
processMaterial(e
|
|
7053
|
-
let
|
|
7054
|
-
if (
|
|
7040
|
+
processMaterial(e) {
|
|
7041
|
+
let t = this._materialUuidMap.get(e.uuid) ?? -1;
|
|
7042
|
+
if (t === -1) {
|
|
7055
7043
|
e.depthWrite === !1 && (e.depthWrite = !0, console.warn("Depth write is disabled in material, enabling it for rastered rendering"));
|
|
7056
|
-
let
|
|
7057
|
-
this.materials.push(
|
|
7058
|
-
|
|
7059
|
-
|
|
7060
|
-
|
|
7061
|
-
|
|
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
|
|
7062
7050
|
].filter(Boolean).length >= 2 && (this.sceneFeatures.hasMultiLobeMaterials = !0);
|
|
7063
7051
|
}
|
|
7064
|
-
return
|
|
7052
|
+
return t;
|
|
7065
7053
|
}
|
|
7066
7054
|
getMaterialAlphaMode(e) {
|
|
7067
7055
|
if (e.userData?.gltfExtensions?.KHR_materials_unlit?.alphaMode) {
|
|
@@ -7132,43 +7120,42 @@ var Os = 16, ks = class {
|
|
|
7132
7120
|
}
|
|
7133
7121
|
return n;
|
|
7134
7122
|
}
|
|
7135
|
-
createMaterialObject(e
|
|
7136
|
-
let
|
|
7137
|
-
|
|
7138
|
-
let
|
|
7139
|
-
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)), {
|
|
7140
7128
|
uuid: e.uuid,
|
|
7141
|
-
color:
|
|
7142
|
-
emissive:
|
|
7143
|
-
emissiveIntensity:
|
|
7144
|
-
roughness: Math.max(.05,
|
|
7145
|
-
metalness:
|
|
7146
|
-
ior: e.ior ??
|
|
7147
|
-
opacity: e.opacity ??
|
|
7148
|
-
transmission: e.transmission ??
|
|
7149
|
-
thickness: e.thickness ??
|
|
7150
|
-
attenuationColor: e.attenuationColor ??
|
|
7151
|
-
attenuationDistance: e.attenuationDistance ??
|
|
7152
|
-
dispersion: e.dispersion ??
|
|
7153
|
-
sheen: e.sheen ??
|
|
7154
|
-
sheenRoughness: e.sheenRoughness ??
|
|
7155
|
-
sheenColor: e.sheenColor ??
|
|
7156
|
-
clearcoat: e.clearcoat ??
|
|
7157
|
-
clearcoatRoughness: e.clearcoatRoughness ??
|
|
7158
|
-
iridescence: e.iridescence ??
|
|
7159
|
-
iridescenceIOR: e.iridescenceIOR ??
|
|
7160
|
-
iridescenceThicknessRange: e.iridescenceThicknessRange ??
|
|
7161
|
-
specularIntensity:
|
|
7162
|
-
specularColor:
|
|
7163
|
-
normalScale: e.normalScale ??
|
|
7164
|
-
bumpScale: e.bumpScale ??
|
|
7165
|
-
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,
|
|
7166
7154
|
transparent: e.transparent ? 1 : 0,
|
|
7167
|
-
alphaTest: e.alphaTest ??
|
|
7155
|
+
alphaTest: e.alphaTest ?? t.alphaTest,
|
|
7168
7156
|
alphaMode: this.getMaterialAlphaMode(e),
|
|
7169
7157
|
side: this.getMaterialSide(e),
|
|
7170
7158
|
depthWrite: e.depthWrite ?? !0 ? 1 : 0,
|
|
7171
|
-
visible: t ? t.visible ? 1 : 0 : e.visible ?? !0 ? 1 : 0,
|
|
7172
7159
|
map: this.processTexture(e.map, this.maps),
|
|
7173
7160
|
normalMap: this.processTexture(e.normalMap, this.normalMaps),
|
|
7174
7161
|
bumpMap: this.processTexture(e.bumpMap, this.bumpMaps),
|
|
@@ -7193,7 +7180,7 @@ var Os = 16, ks = class {
|
|
|
7193
7180
|
metalnessMapMatrices: this.getTextureMatrix(e.metalnessMap),
|
|
7194
7181
|
emissiveMapMatrices: this.getTextureMatrix(e.emissiveMap),
|
|
7195
7182
|
displacementMapMatrices: this.getTextureMatrix(e.displacementMap),
|
|
7196
|
-
originalType:
|
|
7183
|
+
originalType: n
|
|
7197
7184
|
};
|
|
7198
7185
|
}
|
|
7199
7186
|
getTextureMatrix(e) {
|
|
@@ -7214,7 +7201,7 @@ var Os = 16, ks = class {
|
|
|
7214
7201
|
n || (n = /* @__PURE__ */ new Map(), this._textureIndexCache.set(t, n));
|
|
7215
7202
|
let r = e.source.uuid, i = n.get(r);
|
|
7216
7203
|
if (i !== void 0) return i;
|
|
7217
|
-
if (t.length <
|
|
7204
|
+
if (t.length < Ps) {
|
|
7218
7205
|
t.push(e);
|
|
7219
7206
|
let i = t.length - 1;
|
|
7220
7207
|
return n.set(r, i), i;
|
|
@@ -7263,7 +7250,7 @@ var Os = 16, ks = class {
|
|
|
7263
7250
|
}
|
|
7264
7251
|
_traverseMaterialsOnly(e) {
|
|
7265
7252
|
if (e.isMesh && e.geometry && e.material) {
|
|
7266
|
-
let t = this.processMaterial(e.material
|
|
7253
|
+
let t = this.processMaterial(e.material);
|
|
7267
7254
|
e.userData.materialIndex = t;
|
|
7268
7255
|
let n = this.meshes.length;
|
|
7269
7256
|
this.meshes.push(e), e.userData.meshIndex = n;
|
|
@@ -7301,7 +7288,7 @@ var Os = 16, ks = class {
|
|
|
7301
7288
|
sceneFeatures: this.sceneFeatures
|
|
7302
7289
|
};
|
|
7303
7290
|
}
|
|
7304
|
-
},
|
|
7291
|
+
}, Is = class {
|
|
7305
7292
|
constructor() {
|
|
7306
7293
|
this.maxLeafSize = 8;
|
|
7307
7294
|
}
|
|
@@ -7360,7 +7347,7 @@ var Os = 16, ks = class {
|
|
|
7360
7347
|
l < i ? n = l + 1 : r = l;
|
|
7361
7348
|
}
|
|
7362
7349
|
}
|
|
7363
|
-
},
|
|
7350
|
+
}, Ls = class {
|
|
7364
7351
|
constructor() {
|
|
7365
7352
|
this.emissiveTriangles = [], this.emissiveCount = 0, this.totalEmissivePower = 0, this.emissiveIndicesArray = null, this.emissivePowerArray = null, this.cdfArray = null, this.lightBVHNodeData = null, this.lightBVHNodeCount = 0;
|
|
7366
7353
|
}
|
|
@@ -7375,7 +7362,7 @@ var Os = 16, ks = class {
|
|
|
7375
7362
|
g: 0,
|
|
7376
7363
|
b: 0
|
|
7377
7364
|
}, l = s.emissiveIntensity || 0;
|
|
7378
|
-
if (
|
|
7365
|
+
if (l > 0 && (c.r > 0 || c.g > 0 || c.b > 0)) {
|
|
7379
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);
|
|
7380
7367
|
this.emissiveTriangles.push({
|
|
7381
7368
|
triangleIndex: a,
|
|
@@ -7487,7 +7474,7 @@ var Os = 16, ks = class {
|
|
|
7487
7474
|
r: 0,
|
|
7488
7475
|
g: 0,
|
|
7489
7476
|
b: 0
|
|
7490
|
-
}, o = t.emissiveIntensity || 0, s =
|
|
7477
|
+
}, o = t.emissiveIntensity || 0, s = o > 0 && (a.r > 0 || a.g > 0 || a.b > 0);
|
|
7491
7478
|
if (s !== this.emissiveTriangles.some((t) => t.materialIndex === e)) return this.extractEmissiveTriangles(n, r, i), !0;
|
|
7492
7479
|
if (!s) return !1;
|
|
7493
7480
|
let c = (a.r + a.g + a.b) / 3;
|
|
@@ -7504,7 +7491,7 @@ var Os = 16, ks = class {
|
|
|
7504
7491
|
}
|
|
7505
7492
|
buildLightBVH() {
|
|
7506
7493
|
if (this.emissiveCount === 0) return this.lightBVHNodeData = new Float32Array(16), this.lightBVHNodeData[7] = 1, this.lightBVHNodeCount = 1, 1;
|
|
7507
|
-
let { nodeData: e, nodeCount: t, sortedPerm: n } = new
|
|
7494
|
+
let { nodeData: e, nodeCount: t, sortedPerm: n } = new Is().build(this.emissiveTriangles);
|
|
7508
7495
|
return this.lightBVHNodeData = e, this.lightBVHNodeCount = t, this._rebuildSortedEmissiveData(n), t;
|
|
7509
7496
|
}
|
|
7510
7497
|
_rebuildSortedEmissiveData(e) {
|
|
@@ -7525,7 +7512,7 @@ var Os = 16, ks = class {
|
|
|
7525
7512
|
clear() {
|
|
7526
7513
|
this.emissiveTriangles = [], this.emissiveCount = 0, this.totalEmissivePower = 0, this.emissiveIndicesArray = null, this.emissivePowerArray = null, this.cdfArray = null, this.lightBVHNodeData = null, this.lightBVHNodeCount = 0;
|
|
7527
7514
|
}
|
|
7528
|
-
},
|
|
7515
|
+
}, Rs = class {
|
|
7529
7516
|
constructor(e = {}) {
|
|
7530
7517
|
this.config = {
|
|
7531
7518
|
useWorkers: !0,
|
|
@@ -7548,12 +7535,12 @@ var Os = 16, ks = class {
|
|
|
7548
7535
|
};
|
|
7549
7536
|
}
|
|
7550
7537
|
_initProcessors() {
|
|
7551
|
-
this.geometryExtractor = new
|
|
7538
|
+
this.geometryExtractor = new Fs(), this.bvhBuilder = new fs(), this.bvhBuilder.maxLeafSize = this.config.maxLeafSize, this.bvhBuilder.setTreeletConfig({
|
|
7552
7539
|
enabled: this.config.enableTreeletOptimization,
|
|
7553
7540
|
size: this.config.treeletSize,
|
|
7554
7541
|
passes: this.config.treeletOptimizationPasses,
|
|
7555
7542
|
minImprovement: this.config.treeletMinImprovement
|
|
7556
|
-
}), this.textureCreator = new
|
|
7543
|
+
}), this.textureCreator = new Ns(), this.emissiveTriangleBuilder = new Ls(), this.tlasBuilder = new Os();
|
|
7557
7544
|
}
|
|
7558
7545
|
_log(e, t) {
|
|
7559
7546
|
this.config.verbose && console.log(`[SceneProcessor] ${e}`, t || "");
|
|
@@ -7561,7 +7548,7 @@ var Os = 16, ks = class {
|
|
|
7561
7548
|
async buildBVH(e) {
|
|
7562
7549
|
if (this.isProcessing) throw Error("Already processing a scene. Call dispose() first.");
|
|
7563
7550
|
this.isProcessing = !0, this.processingStage = "init";
|
|
7564
|
-
let t = new
|
|
7551
|
+
let t = new rs(`SceneProcessor (${e.name || "scene"})`);
|
|
7565
7552
|
try {
|
|
7566
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)");
|
|
7567
7554
|
let n = !1, r = this._buildBVH().then(() => t.end("BVH construction (worker)")), i = this._createMaterialTextures().then(() => {
|
|
@@ -7622,11 +7609,11 @@ var Os = 16, ks = class {
|
|
|
7622
7609
|
try {
|
|
7623
7610
|
let t = Q.FLOATS_PER_TRIANGLE, n = this.meshTriangleRanges;
|
|
7624
7611
|
if (!n || n.length === 0) throw Error("No mesh triangle ranges available for TLAS/BLAS build");
|
|
7625
|
-
this.instanceTable = new
|
|
7612
|
+
this.instanceTable = new ks(), this.instanceTable.allocate(n.length);
|
|
7626
7613
|
let r = n.length, i = this.config.enableTreeletOptimization, a = [], o = [];
|
|
7627
7614
|
for (let e = 0; e < r; e++) {
|
|
7628
7615
|
let t = n[e];
|
|
7629
|
-
t.count !== 0 && (t.count >= 2e5 &&
|
|
7616
|
+
t.count !== 0 && (t.count >= 2e5 && Ts(t.count) ? o.push({
|
|
7630
7617
|
m: e,
|
|
7631
7618
|
range: t
|
|
7632
7619
|
}) : a.push({
|
|
@@ -7652,7 +7639,7 @@ var Os = 16, ks = class {
|
|
|
7652
7639
|
status: `Building BLAS ${e + o.length}/${c}...`,
|
|
7653
7640
|
progress: 25 + Math.floor(e / c * 45)
|
|
7654
7641
|
});
|
|
7655
|
-
}), 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, {
|
|
7656
7643
|
maxLeafSize: this.bvhBuilder.maxLeafSize,
|
|
7657
7644
|
numBins: this.bvhBuilder.numBins,
|
|
7658
7645
|
maxBins: this.bvhBuilder.maxBins,
|
|
@@ -7969,7 +7956,7 @@ var Os = 16, ks = class {
|
|
|
7969
7956
|
refitBLASes(e, t, n) {
|
|
7970
7957
|
if (!this.instanceTable || !this.bvhData || !this.triangleData) throw Error("No TLAS/BLAS data available. Run buildBVH() first.");
|
|
7971
7958
|
let r = performance.now();
|
|
7972
|
-
this._blasRefitter ||= new
|
|
7959
|
+
this._blasRefitter ||= new vs();
|
|
7973
7960
|
for (let r of e) {
|
|
7974
7961
|
let e = this.instanceTable.entries[r];
|
|
7975
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));
|
|
@@ -8010,7 +7997,7 @@ var Os = 16, ks = class {
|
|
|
8010
7997
|
updateMaterialEmissive(e, t, n) {
|
|
8011
7998
|
if (!this.emissiveTriangleBuilder) return null;
|
|
8012
7999
|
let r = this.materials[e];
|
|
8013
|
-
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 : {
|
|
8014
8001
|
rawData: this.emissiveTriangleBuilder.createEmissiveRawData(),
|
|
8015
8002
|
emissiveCount: this.emissiveTriangleBuilder.emissiveCount,
|
|
8016
8003
|
totalPower: this.emissiveTriangleBuilder.totalEmissivePower
|
|
@@ -8132,7 +8119,7 @@ var Os = 16, ks = class {
|
|
|
8132
8119
|
dispose() {
|
|
8133
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;
|
|
8134
8121
|
}
|
|
8135
|
-
},
|
|
8122
|
+
}, zs = class {
|
|
8136
8123
|
constructor() {
|
|
8137
8124
|
this.lightData = {
|
|
8138
8125
|
directional: [],
|
|
@@ -8285,17 +8272,22 @@ var Os = 16, ks = class {
|
|
|
8285
8272
|
}))
|
|
8286
8273
|
};
|
|
8287
8274
|
}
|
|
8288
|
-
},
|
|
8275
|
+
}, Bs = "https://assets.rayzee.atulmourya.com/noise/simple_bluenoise.png", Vs = 4, Hs = class extends pn {
|
|
8289
8276
|
constructor(e, t, n, r = {}) {
|
|
8290
8277
|
super("PathTracer", {
|
|
8291
8278
|
...r,
|
|
8292
8279
|
executionMode: fn.ALWAYS
|
|
8293
8280
|
});
|
|
8294
8281
|
let i = r.width || 1920, a = r.height || 1080;
|
|
8295
|
-
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();
|
|
8296
8283
|
}
|
|
8297
8284
|
_initDataTextures() {
|
|
8298
|
-
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 = [];
|
|
8299
8291
|
}
|
|
8300
8292
|
_defineUniformGetters() {
|
|
8301
8293
|
let e = this.uniforms;
|
|
@@ -8388,7 +8380,7 @@ var Os = 16, ks = class {
|
|
|
8388
8380
|
}
|
|
8389
8381
|
setupBlueNoise() {
|
|
8390
8382
|
let e = new Me();
|
|
8391
|
-
e.setCrossOrigin("anonymous"), e.load(
|
|
8383
|
+
e.setCrossOrigin("anonymous"), e.load(Bs, (e) => {
|
|
8392
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}`);
|
|
8393
8385
|
});
|
|
8394
8386
|
}
|
|
@@ -8405,7 +8397,7 @@ var Os = 16, ks = class {
|
|
|
8405
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();
|
|
8406
8398
|
}
|
|
8407
8399
|
updateSceneUniforms() {
|
|
8408
|
-
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 || [];
|
|
8409
8401
|
}
|
|
8410
8402
|
updateLights() {
|
|
8411
8403
|
let e = {
|
|
@@ -8471,7 +8463,36 @@ var Os = 16, ks = class {
|
|
|
8471
8463
|
setBVHData(e) {
|
|
8472
8464
|
if (!e) return;
|
|
8473
8465
|
let t = e.length / 4;
|
|
8474
|
-
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;
|
|
8475
8496
|
}
|
|
8476
8497
|
_updateStorageBuffer(e, t) {
|
|
8477
8498
|
e && (e.array.set(t), e.needsUpdate = !0);
|
|
@@ -8634,7 +8655,7 @@ var Os = 16, ks = class {
|
|
|
8634
8655
|
dispose() {
|
|
8635
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;
|
|
8636
8657
|
}
|
|
8637
|
-
},
|
|
8658
|
+
}, Us = class extends pn {
|
|
8638
8659
|
constructor(e, t = {}) {
|
|
8639
8660
|
super("NormalDepth", {
|
|
8640
8661
|
...t,
|
|
@@ -8672,7 +8693,7 @@ var Os = 16, ks = class {
|
|
|
8672
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({
|
|
8673
8694
|
origin: J(r[3]),
|
|
8674
8695
|
direction: f
|
|
8675
|
-
}), 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)));
|
|
8676
8697
|
xt(s, wt(G(c), G(l)), _).toWriteOnly();
|
|
8677
8698
|
});
|
|
8678
8699
|
})(r, i).compute([
|
|
@@ -8713,7 +8734,7 @@ var Os = 16, ks = class {
|
|
|
8713
8734
|
dispose() {
|
|
8714
8735
|
this._computeNode?.dispose(), this._outputStorageTex?.dispose(), this.renderTarget?.dispose();
|
|
8715
8736
|
}
|
|
8716
|
-
},
|
|
8737
|
+
}, Ws = class extends pn {
|
|
8717
8738
|
constructor(e, t, n = {}) {
|
|
8718
8739
|
super("MotionVector", {
|
|
8719
8740
|
...n,
|
|
@@ -8825,7 +8846,7 @@ var Os = 16, ks = class {
|
|
|
8825
8846
|
};
|
|
8826
8847
|
//#endregion
|
|
8827
8848
|
//#region src/Processor/createRenderTargetHelper.js
|
|
8828
|
-
function
|
|
8849
|
+
function Gs(e, t, n = {}) {
|
|
8829
8850
|
let r = n.textureIndex || 0, i = t.isTexture === !0, a;
|
|
8830
8851
|
i ? (console.warn("RenderTargetHelper: Direct Texture input is not supported. Pass a RenderTarget instead."), a = null) : a = t;
|
|
8831
8852
|
let o = {
|
|
@@ -8977,7 +8998,7 @@ function qs(e, t, n = {}) {
|
|
|
8977
8998
|
}
|
|
8978
8999
|
//#endregion
|
|
8979
9000
|
//#region src/Stages/ASVGF.js
|
|
8980
|
-
var
|
|
9001
|
+
var Ks = class extends pn {
|
|
8981
9002
|
constructor(e, t = {}) {
|
|
8982
9003
|
super("ASVGF", {
|
|
8983
9004
|
...t,
|
|
@@ -8991,7 +9012,7 @@ var Js = class extends pn {
|
|
|
8991
9012
|
magFilter: j,
|
|
8992
9013
|
depthBuffer: !1,
|
|
8993
9014
|
stencilBuffer: !1
|
|
8994
|
-
}), 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, {
|
|
8995
9016
|
width: 400,
|
|
8996
9017
|
height: 400,
|
|
8997
9018
|
position: "bottom-right",
|
|
@@ -9164,7 +9185,7 @@ var Js = class extends pn {
|
|
|
9164
9185
|
dispose() {
|
|
9165
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();
|
|
9166
9187
|
}
|
|
9167
|
-
},
|
|
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 {
|
|
9168
9189
|
constructor(e, t = {}) {
|
|
9169
9190
|
super("VarianceEstimation", {
|
|
9170
9191
|
...t,
|
|
@@ -9196,7 +9217,7 @@ var Js = class extends pn {
|
|
|
9196
9217
|
}
|
|
9197
9218
|
n.divAssign(9), a.divAssign(9);
|
|
9198
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, _));
|
|
9199
|
-
xt(e, wt(G(g), G(_)),
|
|
9220
|
+
xt(e, wt(G(g), G(_)), qs(u, d.x, d.y, r, o, i)).toWriteOnly();
|
|
9200
9221
|
});
|
|
9201
9222
|
})().compute([
|
|
9202
9223
|
this._dispatchX,
|
|
@@ -9239,7 +9260,7 @@ var Js = class extends pn {
|
|
|
9239
9260
|
dispose() {
|
|
9240
9261
|
this._computeNodeA?.dispose(), this._computeNodeB?.dispose(), this._storageTexA?.dispose(), this._storageTexB?.dispose();
|
|
9241
9262
|
}
|
|
9242
|
-
},
|
|
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 {
|
|
9243
9264
|
constructor(e, t = {}) {
|
|
9244
9265
|
super("BilateralFiltering", {
|
|
9245
9266
|
...t,
|
|
@@ -9284,7 +9305,7 @@ var Js = class extends pn {
|
|
|
9284
9305
|
N(d.lessThan(B(c)).and(f.lessThan(B(l))), () => {
|
|
9285
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();
|
|
9286
9307
|
for (let e = 0; e < 5; e++) for (let p = 0; p < 5; p++) {
|
|
9287
|
-
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);
|
|
9288
9309
|
y.addAssign(T.mul(k)), b.addAssign(k);
|
|
9289
9310
|
}
|
|
9290
9311
|
let x = y.div(V(b, z(1e-4)));
|
|
@@ -9329,7 +9350,7 @@ var Js = class extends pn {
|
|
|
9329
9350
|
dispose() {
|
|
9330
9351
|
this._computeNodeA?.dispose(), this._computeNodeB?.dispose(), this._storageTexA?.dispose(), this._storageTexB?.dispose();
|
|
9331
9352
|
}
|
|
9332
|
-
},
|
|
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 {
|
|
9333
9354
|
constructor(e, t = {}) {
|
|
9334
9355
|
super("AdaptiveSampling", {
|
|
9335
9356
|
...t,
|
|
@@ -9343,7 +9364,7 @@ var Js = class extends pn {
|
|
|
9343
9364
|
magFilter: j,
|
|
9344
9365
|
depthBuffer: !1,
|
|
9345
9366
|
stencilBuffer: !1
|
|
9346
|
-
}), 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, {
|
|
9347
9368
|
width: 400,
|
|
9348
9369
|
height: 400,
|
|
9349
9370
|
position: "bottom-right",
|
|
@@ -9360,7 +9381,7 @@ var Js = class extends pn {
|
|
|
9360
9381
|
this._computeNode = M(() => {
|
|
9361
9382
|
let u = B(Dt.x).mul(16).add(B(nt.x)), d = B(Dt.y).mul(16).add(B(nt.y));
|
|
9362
9383
|
N(u.lessThan(B(s)).and(d.lessThan(B(c))), () => {
|
|
9363
|
-
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);
|
|
9364
9385
|
xt(l, wt(G(u), G(d)), c).toWriteOnly();
|
|
9365
9386
|
});
|
|
9366
9387
|
})().compute([
|
|
@@ -9378,7 +9399,7 @@ var Js = class extends pn {
|
|
|
9378
9399
|
this._heatmapComputeNode = M(() => {
|
|
9379
9400
|
let i = B(Dt.x).mul(16).add(B(nt.x)), a = B(Dt.y).mul(16).add(B(nt.y));
|
|
9380
9401
|
N(i.lessThan(B(n)).and(a.lessThan(B(r))), () => {
|
|
9381
|
-
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);
|
|
9382
9403
|
xt(t, wt(G(i), G(a)), r).toWriteOnly();
|
|
9383
9404
|
});
|
|
9384
9405
|
})().compute([
|
|
@@ -9437,7 +9458,7 @@ var Js = class extends pn {
|
|
|
9437
9458
|
dispose() {
|
|
9438
9459
|
this._computeNode?.dispose(), this._heatmapComputeNode?.dispose(), this._heatmapStorageTex?.dispose(), this._outputStorageTex?.dispose(), this.heatmapTarget?.dispose(), this.helper?.dispose();
|
|
9439
9460
|
}
|
|
9440
|
-
},
|
|
9461
|
+
}, ec = class extends pn {
|
|
9441
9462
|
constructor(e, t = {}) {
|
|
9442
9463
|
super("EdgeAwareFiltering", {
|
|
9443
9464
|
...t,
|
|
@@ -9517,7 +9538,7 @@ var Js = class extends pn {
|
|
|
9517
9538
|
dispose() {
|
|
9518
9539
|
this._computeNode?.dispose(), this._outputStorageTex?.dispose(), this.outputTarget?.dispose();
|
|
9519
9540
|
}
|
|
9520
|
-
},
|
|
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 {
|
|
9521
9542
|
constructor(e, t = {}) {
|
|
9522
9543
|
super("AutoExposure", {
|
|
9523
9544
|
...t,
|
|
@@ -9584,7 +9605,7 @@ var Js = class extends pn {
|
|
|
9584
9605
|
_buildAdaptationCompute() {
|
|
9585
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;
|
|
9586
9607
|
this._adaptationComputeNode = M(() => {
|
|
9587
|
-
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);
|
|
9588
9609
|
xt(t, wt(G(0), G(0)), d).toWriteOnly();
|
|
9589
9610
|
})().compute(1, [
|
|
9590
9611
|
1,
|
|
@@ -9649,7 +9670,7 @@ var Js = class extends pn {
|
|
|
9649
9670
|
};
|
|
9650
9671
|
//#endregion
|
|
9651
9672
|
//#region src/TSL/SSRC.js
|
|
9652
|
-
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 }) {
|
|
9653
9674
|
return M(() => {
|
|
9654
9675
|
let m = B(Dt.x).mul(8).add(B(nt.x)), h = B(Dt.y).mul(8).add(B(nt.y));
|
|
9655
9676
|
N(m.lessThan(B(s)).and(h.lessThan(B(c))), () => {
|
|
@@ -9671,7 +9692,7 @@ function ac({ colorTexNode: e, ndTexNode: t, motionTexNode: n, readCacheTexNode:
|
|
|
9671
9692
|
});
|
|
9672
9693
|
});
|
|
9673
9694
|
}
|
|
9674
|
-
function
|
|
9695
|
+
function ic({ colorTexNode: e, ndTexNode: t, readCacheTexNode: n, outputTex: r, resW: i, resH: a, spatialRadius: o, spatialWeight: s, phiNormal: c, phiDepth: l }) {
|
|
9675
9696
|
let u = [
|
|
9676
9697
|
[1, 0],
|
|
9677
9698
|
[-1, 0],
|
|
@@ -9697,7 +9718,7 @@ function oc({ colorTexNode: e, ndTexNode: t, readCacheTexNode: n, outputTex: r,
|
|
|
9697
9718
|
}
|
|
9698
9719
|
//#endregion
|
|
9699
9720
|
//#region src/Stages/SSRC.js
|
|
9700
|
-
var
|
|
9721
|
+
var ac = class extends pn {
|
|
9701
9722
|
constructor(e, t = {}) {
|
|
9702
9723
|
super("SSRC", {
|
|
9703
9724
|
...t,
|
|
@@ -9772,12 +9793,12 @@ var sc = class extends pn {
|
|
|
9772
9793
|
phiNormal: this.phiNormal,
|
|
9773
9794
|
phiDepth: this.phiDepth,
|
|
9774
9795
|
maxHistory: this.maxHistory
|
|
9775
|
-
}, t =
|
|
9796
|
+
}, t = rc({
|
|
9776
9797
|
...e,
|
|
9777
9798
|
writeCacheTex: this._cacheTexA,
|
|
9778
9799
|
writePrevNDTex: this._prevNDTexA,
|
|
9779
9800
|
framesSinceReset: this._framesSinceReset
|
|
9780
|
-
}), n =
|
|
9801
|
+
}), n = rc({
|
|
9781
9802
|
...e,
|
|
9782
9803
|
writeCacheTex: this._cacheTexB,
|
|
9783
9804
|
writePrevNDTex: this._prevNDTexB,
|
|
@@ -9791,7 +9812,7 @@ var sc = class extends pn {
|
|
|
9791
9812
|
8,
|
|
9792
9813
|
1
|
|
9793
9814
|
];
|
|
9794
|
-
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({
|
|
9795
9816
|
colorTexNode: this._colorTexNode,
|
|
9796
9817
|
ndTexNode: this._ndTexNode,
|
|
9797
9818
|
readCacheTexNode: this._readPass1CacheTexNode,
|
|
@@ -9804,7 +9825,7 @@ var sc = class extends pn {
|
|
|
9804
9825
|
phiDepth: this.phiDepth
|
|
9805
9826
|
})().compute(r, i);
|
|
9806
9827
|
}
|
|
9807
|
-
},
|
|
9828
|
+
}, oc = class extends pn {
|
|
9808
9829
|
constructor(n, r = {}) {
|
|
9809
9830
|
super("Display", {
|
|
9810
9831
|
...r,
|
|
@@ -9833,7 +9854,7 @@ var sc = class extends pn {
|
|
|
9833
9854
|
dispose() {
|
|
9834
9855
|
this.displayMaterial?.dispose();
|
|
9835
9856
|
}
|
|
9836
|
-
},
|
|
9857
|
+
}, sc = class {
|
|
9837
9858
|
constructor() {
|
|
9838
9859
|
this.textures = /* @__PURE__ */ new Map(), this.renderTargets = /* @__PURE__ */ new Map(), this.uniforms = /* @__PURE__ */ new Map(), this.state = {
|
|
9839
9860
|
frame: 0,
|
|
@@ -9956,7 +9977,7 @@ var sc = class extends pn {
|
|
|
9956
9977
|
dispose() {
|
|
9957
9978
|
this.textures.clear(), this.renderTargets.clear(), this.uniforms.clear(), this._stateChangeCallbacks.clear(), this.state = {};
|
|
9958
9979
|
}
|
|
9959
|
-
},
|
|
9980
|
+
}, cc = class extends E {
|
|
9960
9981
|
constructor() {
|
|
9961
9982
|
super(), this._onceCallbacks = /* @__PURE__ */ new Map();
|
|
9962
9983
|
}
|
|
@@ -9994,9 +10015,9 @@ var sc = class extends pn {
|
|
|
9994
10015
|
eventNames() {
|
|
9995
10016
|
return this._listeners ? Object.keys(this._listeners) : [];
|
|
9996
10017
|
}
|
|
9997
|
-
},
|
|
10018
|
+
}, lc = class {
|
|
9998
10019
|
constructor(e, t, n) {
|
|
9999
|
-
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 = {
|
|
10000
10021
|
enabled: !1,
|
|
10001
10022
|
logSkipped: !1,
|
|
10002
10023
|
timings: /* @__PURE__ */ new Map(),
|
|
@@ -10128,7 +10149,7 @@ var sc = class extends pn {
|
|
|
10128
10149
|
let e = this.getInfo();
|
|
10129
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();
|
|
10130
10151
|
}
|
|
10131
|
-
},
|
|
10152
|
+
}, uc = class {
|
|
10132
10153
|
constructor() {
|
|
10133
10154
|
this.timeElapsed = 0, this.lastResetTime = performance.now(), this.renderCompleteDispatched = !1;
|
|
10134
10155
|
}
|
|
@@ -10150,7 +10171,7 @@ var sc = class extends pn {
|
|
|
10150
10171
|
resumeFromPause() {
|
|
10151
10172
|
this.renderCompleteDispatched = !1, this.lastResetTime = performance.now() - this.timeElapsed * 1e3;
|
|
10152
10173
|
}
|
|
10153
|
-
},
|
|
10174
|
+
}, dc = class extends E {
|
|
10154
10175
|
constructor({ scene: e, camera: t, canvas: n, assetLoader: r, pathTracer: i, floorPlane: a }) {
|
|
10155
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;
|
|
10156
10177
|
}
|
|
@@ -10371,7 +10392,7 @@ var sc = class extends pn {
|
|
|
10371
10392
|
dispose() {
|
|
10372
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;
|
|
10373
10394
|
}
|
|
10374
|
-
},
|
|
10395
|
+
}, fc = {
|
|
10375
10396
|
glb: {
|
|
10376
10397
|
type: "model",
|
|
10377
10398
|
name: "GLB (GLTF Binary)"
|
|
@@ -10436,12 +10457,12 @@ var sc = class extends pn {
|
|
|
10436
10457
|
type: "archive",
|
|
10437
10458
|
name: "ZIP Archive"
|
|
10438
10459
|
}
|
|
10439
|
-
},
|
|
10460
|
+
}, pc = class extends E {
|
|
10440
10461
|
constructor(e, t, n) {
|
|
10441
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 = [];
|
|
10442
10463
|
}
|
|
10443
10464
|
getFileFormat(e) {
|
|
10444
|
-
return
|
|
10465
|
+
return fc[e.split(".").pop().toLowerCase()] || null;
|
|
10445
10466
|
}
|
|
10446
10467
|
readFileAsArrayBuffer(e) {
|
|
10447
10468
|
return new Promise((t, n) => {
|
|
@@ -10634,7 +10655,7 @@ var sc = class extends pn {
|
|
|
10634
10655
|
}
|
|
10635
10656
|
for (let t in e) {
|
|
10636
10657
|
let n = t.split(".").pop().toLowerCase();
|
|
10637
|
-
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);
|
|
10638
10659
|
}
|
|
10639
10660
|
throw Error("No supported model files found in the ZIP archive");
|
|
10640
10661
|
}
|
|
@@ -11063,7 +11084,7 @@ var sc = class extends pn {
|
|
|
11063
11084
|
}), e;
|
|
11064
11085
|
}
|
|
11065
11086
|
async onModelLoad(e) {
|
|
11066
|
-
let t = new
|
|
11087
|
+
let t = new rs("onModelLoad");
|
|
11067
11088
|
t.start("Camera extraction");
|
|
11068
11089
|
let n = this.extractCamerasFromModel(e);
|
|
11069
11090
|
t.end("Camera extraction"), t.start("Camera setup");
|
|
@@ -11142,10 +11163,10 @@ var sc = class extends pn {
|
|
|
11142
11163
|
getSupportedFormats(e = null) {
|
|
11143
11164
|
if (e) {
|
|
11144
11165
|
let t = {};
|
|
11145
|
-
for (let [n, r] of Object.entries(
|
|
11166
|
+
for (let [n, r] of Object.entries(fc)) r.type === e && (t[n] = r);
|
|
11146
11167
|
return t;
|
|
11147
11168
|
}
|
|
11148
|
-
return
|
|
11169
|
+
return fc;
|
|
11149
11170
|
}
|
|
11150
11171
|
dispose() {
|
|
11151
11172
|
for (let e in this.loaderCache) {
|
|
@@ -11157,7 +11178,7 @@ var sc = class extends pn {
|
|
|
11157
11178
|
removeAllEventListeners() {
|
|
11158
11179
|
super.dispose();
|
|
11159
11180
|
}
|
|
11160
|
-
},
|
|
11181
|
+
}, mc = {
|
|
11161
11182
|
maxBounces: {
|
|
11162
11183
|
uniform: "maxBounces",
|
|
11163
11184
|
reset: !0
|
|
@@ -11264,11 +11285,11 @@ var sc = class extends pn {
|
|
|
11264
11285
|
},
|
|
11265
11286
|
renderMode: { handler: "handleRenderMode" },
|
|
11266
11287
|
environmentRotation: { handler: "handleEnvironmentRotation" }
|
|
11267
|
-
},
|
|
11288
|
+
}, hc = {
|
|
11268
11289
|
bounces: "maxBounces",
|
|
11269
11290
|
adaptiveSampling: "useAdaptiveSampling",
|
|
11270
11291
|
debugMode: "visMode"
|
|
11271
|
-
},
|
|
11292
|
+
}, gc = class extends E {
|
|
11272
11293
|
constructor(e = Z) {
|
|
11273
11294
|
super(), this._values = /* @__PURE__ */ new Map(), this._pathTracer = null, this._resetCallback = null, this._handlers = {}, this._delegates = {}, this._initDefaults(e);
|
|
11274
11295
|
}
|
|
@@ -11310,7 +11331,7 @@ var sc = class extends pn {
|
|
|
11310
11331
|
let i = this._values.get(e);
|
|
11311
11332
|
if (i === t) return;
|
|
11312
11333
|
this._values.set(e, t);
|
|
11313
|
-
let a =
|
|
11334
|
+
let a = mc[e];
|
|
11314
11335
|
a && (this._applyRoute(a, t, i), (n === void 0 ? a.reset ?? !0 : n) && this._resetCallback?.(), r || this.dispatchEvent({
|
|
11315
11336
|
type: gn.SETTING_CHANGED,
|
|
11316
11337
|
key: e,
|
|
@@ -11324,7 +11345,7 @@ var sc = class extends pn {
|
|
|
11324
11345
|
let e = this._values.get(r);
|
|
11325
11346
|
if (e === i) continue;
|
|
11326
11347
|
this._values.set(r, i);
|
|
11327
|
-
let a =
|
|
11348
|
+
let a = mc[r];
|
|
11328
11349
|
a && (this._applyRoute(a, i, e), (a.reset ?? !0) && (n = !0), t || this.dispatchEvent({
|
|
11329
11350
|
type: gn.SETTING_CHANGED,
|
|
11330
11351
|
key: r,
|
|
@@ -11342,7 +11363,7 @@ var sc = class extends pn {
|
|
|
11342
11363
|
}
|
|
11343
11364
|
applyAll() {
|
|
11344
11365
|
for (let [e, t] of this._values) {
|
|
11345
|
-
let n =
|
|
11366
|
+
let n = mc[e];
|
|
11346
11367
|
n && this._applyRoute(n, t, void 0);
|
|
11347
11368
|
}
|
|
11348
11369
|
}
|
|
@@ -11350,10 +11371,10 @@ var sc = class extends pn {
|
|
|
11350
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);
|
|
11351
11372
|
}
|
|
11352
11373
|
_initDefaults(e) {
|
|
11353
|
-
for (let t of Object.keys(
|
|
11354
|
-
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]);
|
|
11355
11376
|
}
|
|
11356
|
-
},
|
|
11377
|
+
}, _c = class extends E {
|
|
11357
11378
|
constructor(e) {
|
|
11358
11379
|
super();
|
|
11359
11380
|
let t = e.clientWidth, n = e.clientHeight;
|
|
@@ -11469,7 +11490,7 @@ var sc = class extends pn {
|
|
|
11469
11490
|
dispose() {
|
|
11470
11491
|
this.controls?.dispose();
|
|
11471
11492
|
}
|
|
11472
|
-
},
|
|
11493
|
+
}, vc = class extends E {
|
|
11473
11494
|
constructor(e, t, n, r = {}) {
|
|
11474
11495
|
super(), this.scene = e, this.sceneHelpers = t, this.pathTracer = n, this._onReset = r.onReset || null;
|
|
11475
11496
|
}
|
|
@@ -11619,39 +11640,39 @@ var sc = class extends pn {
|
|
|
11619
11640
|
]);
|
|
11620
11641
|
return n;
|
|
11621
11642
|
}
|
|
11622
|
-
},
|
|
11623
|
-
function
|
|
11624
|
-
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);
|
|
11625
11646
|
}
|
|
11626
|
-
function
|
|
11627
|
-
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);
|
|
11628
11649
|
}
|
|
11629
|
-
function
|
|
11630
|
-
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));
|
|
11631
11652
|
}
|
|
11632
|
-
function
|
|
11653
|
+
function Cc(e, t, n, r, i) {
|
|
11633
11654
|
e = Math.max(e * r - .004, 0), t = Math.max(t * r - .004, 0), n = Math.max(n * r - .004, 0);
|
|
11634
11655
|
let a = (e) => (e * (6.2 * e + .5) / (e * (6.2 * e + 1.7) + .06)) ** 2.2;
|
|
11635
11656
|
i[0] = a(e), i[1] = a(t), i[2] = a(n);
|
|
11636
11657
|
}
|
|
11637
|
-
function
|
|
11658
|
+
function wc(e, t, n, r, i) {
|
|
11638
11659
|
e = e * r / .6, t = t * r / .6, n = n * r / .6;
|
|
11639
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);
|
|
11640
|
-
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);
|
|
11641
11662
|
}
|
|
11642
|
-
function
|
|
11663
|
+
function Tc(e, t, n, r, i) {
|
|
11643
11664
|
e *= r, t *= r, n *= r;
|
|
11644
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;
|
|
11645
|
-
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);
|
|
11646
11667
|
let p = (e) => {
|
|
11647
11668
|
let t = e * e, n = t * t;
|
|
11648
11669
|
return 15.5 * n * t - 40.14 * n * e + 31.96 * n - 6.868 * t * e + .4298 * t + .1191 * e - .00232;
|
|
11649
11670
|
};
|
|
11650
11671
|
c = p(c), l = p(l), u = p(u);
|
|
11651
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;
|
|
11652
|
-
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);
|
|
11653
11674
|
}
|
|
11654
|
-
function
|
|
11675
|
+
function Ec(e, t, n, r, i) {
|
|
11655
11676
|
let a = .76;
|
|
11656
11677
|
e *= r, t *= r, n *= r;
|
|
11657
11678
|
let o = Math.min(e, Math.min(t, n)), s = o < .08 ? o - 6.25 * o * o : .04;
|
|
@@ -11666,27 +11687,27 @@ function Oc(e, t, n, r, i) {
|
|
|
11666
11687
|
let f = 1 - 1 / (.15 * (c - u) + 1);
|
|
11667
11688
|
i[0] = e + (u - e) * f, i[1] = t + (u - t) * f, i[2] = n + (u - n) * f;
|
|
11668
11689
|
}
|
|
11669
|
-
var
|
|
11670
|
-
[me,
|
|
11671
|
-
[te,
|
|
11672
|
-
[Te,
|
|
11673
|
-
[h,
|
|
11674
|
-
[c,
|
|
11675
|
-
[u,
|
|
11676
|
-
[fe,
|
|
11677
|
-
]),
|
|
11678
|
-
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) {
|
|
11679
11700
|
if (t === 1) return;
|
|
11680
|
-
let n = e[0] *
|
|
11701
|
+
let n = e[0] * kc + e[1] * Ac + e[2] * jc;
|
|
11681
11702
|
e[0] = n + (e[0] - n) * t, e[1] = n + (e[1] - n) * t, e[2] = n + (e[2] - n) * t;
|
|
11682
11703
|
}
|
|
11683
11704
|
//#endregion
|
|
11684
11705
|
//#region src/Passes/OIDNDenoiser.js
|
|
11685
|
-
var
|
|
11686
|
-
async function
|
|
11687
|
-
return
|
|
11706
|
+
var Nc = null;
|
|
11707
|
+
async function Pc() {
|
|
11708
|
+
return Nc ||= (await import("oidn-web")).initUNetFromURL, Nc;
|
|
11688
11709
|
}
|
|
11689
|
-
var
|
|
11710
|
+
var Fc = new Float32Array(3), Ic = {
|
|
11690
11711
|
BASE_URL: "https://cdn.jsdelivr.net/npm/denoiser/tzas/",
|
|
11691
11712
|
QUALITY_SUFFIXES: {
|
|
11692
11713
|
fast: "_small",
|
|
@@ -11699,7 +11720,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
11699
11720
|
debugGbufferMaps: !0,
|
|
11700
11721
|
tileSize: 256
|
|
11701
11722
|
}
|
|
11702
|
-
},
|
|
11723
|
+
}, Lc = class extends E {
|
|
11703
11724
|
constructor(e, t, n, r, i = {}) {
|
|
11704
11725
|
if (super(), !e || !t || !n || !r) throw Error("OIDNDenoiser requires output canvas, renderer, scene, and camera");
|
|
11705
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 = {
|
|
@@ -11710,7 +11731,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
11710
11731
|
width: 0,
|
|
11711
11732
|
height: 0
|
|
11712
11733
|
}, this._cachedAlpha = null, this._cachedAlphaWidth = 0, this.config = {
|
|
11713
|
-
...
|
|
11734
|
+
...Ic.DEFAULT_OPTIONS,
|
|
11714
11735
|
...i
|
|
11715
11736
|
}, this.enabled = this.config.enableOIDN, this.quality = this.config.oidnQuality, this.debugGbufferMaps = this.config.debugGbufferMaps, this.tileSize = this.config.tileSize, this.state = {
|
|
11716
11737
|
isDenoising: !1,
|
|
@@ -11766,7 +11787,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
11766
11787
|
let e = this.backendParamsGetter();
|
|
11767
11788
|
this.gpuDevice = e?.device ?? null, t = e?.device ? e : void 0;
|
|
11768
11789
|
}
|
|
11769
|
-
this.unet = await (await
|
|
11790
|
+
this.unet = await (await Pc())(e, t, {
|
|
11770
11791
|
aux: !0,
|
|
11771
11792
|
hdr: !0,
|
|
11772
11793
|
maxTileSize: this.tileSize
|
|
@@ -11781,14 +11802,14 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
11781
11802
|
}
|
|
11782
11803
|
}
|
|
11783
11804
|
_generateTzaUrl() {
|
|
11784
|
-
let { BASE_URL: e, QUALITY_SUFFIXES: t } =
|
|
11805
|
+
let { BASE_URL: e, QUALITY_SUFFIXES: t } = Ic;
|
|
11785
11806
|
return `${e}rt_hdr_alb_nrm${t[this.quality] || ""}.tza`;
|
|
11786
11807
|
}
|
|
11787
11808
|
async updateConfiguration(e) {
|
|
11788
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());
|
|
11789
11810
|
}
|
|
11790
11811
|
async updateQuality(e) {
|
|
11791
|
-
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(", ")}`);
|
|
11792
11813
|
await this.updateConfiguration({ oidnQuality: e });
|
|
11793
11814
|
}
|
|
11794
11815
|
async start() {
|
|
@@ -11962,10 +11983,10 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
11962
11983
|
f.copyBufferToBuffer(e.data, r, d, a, l);
|
|
11963
11984
|
}
|
|
11964
11985
|
r.queue.submit([f.finish()]), d.mapAsync(GPUMapMode.READ).then(() => {
|
|
11965
|
-
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;
|
|
11966
11987
|
for (let s = 0, c = e.length; s < c; s += 4) {
|
|
11967
11988
|
let c = e[s] * r, d = e[s + 1] * r, f = e[s + 2] * r;
|
|
11968
|
-
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) {
|
|
11969
11990
|
let e = (s >> 2) % o, r = (s >> 2) / o | 0;
|
|
11970
11991
|
t.data[s + 3] = l[(n.y + r) * u + n.x + e];
|
|
11971
11992
|
} else t.data[s + 3] = 255;
|
|
@@ -11988,10 +12009,10 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
11988
12009
|
usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST
|
|
11989
12010
|
}), o = r.createCommandEncoder({ label: "oidn-readback" });
|
|
11990
12011
|
o.copyBufferToBuffer(e, 0, a, 0, i), r.queue.submit([o.finish()]), await a.mapAsync(GPUMapMode.READ);
|
|
11991
|
-
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;
|
|
11992
12013
|
for (let e = 0, t = s.length; e < t; e += 4) {
|
|
11993
12014
|
let t = s[e] * u, n = s[e + 1] * u, r = s[e + 2] * u;
|
|
11994
|
-
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;
|
|
11995
12016
|
}
|
|
11996
12017
|
a.unmap(), a.destroy(), this.ctx.putImageData(l, 0, 0);
|
|
11997
12018
|
}
|
|
@@ -12009,7 +12030,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12009
12030
|
let t = this.debugHelpers && (this._lastAlbedoTexture !== e.textures[2] || this._lastNormalTexture !== e.textures[1]);
|
|
12010
12031
|
if (!this.debugHelpers || t) {
|
|
12011
12032
|
this.debugHelpers && (this.debugHelpers.albedo?.dispose(), this.debugHelpers.normal?.dispose(), console.log("OIDNDenoiser: Recreating debug helpers due to texture change")), this.debugHelpers = {
|
|
12012
|
-
albedo:
|
|
12033
|
+
albedo: Gs(this.renderer, e, {
|
|
12013
12034
|
width: 250,
|
|
12014
12035
|
height: 250,
|
|
12015
12036
|
position: "bottom-right",
|
|
@@ -12018,7 +12039,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12018
12039
|
autoUpdate: !1,
|
|
12019
12040
|
textureIndex: 2
|
|
12020
12041
|
}),
|
|
12021
|
-
normal:
|
|
12042
|
+
normal: Gs(this.renderer, e, {
|
|
12022
12043
|
width: 250,
|
|
12023
12044
|
height: 250,
|
|
12024
12045
|
position: "bottom-left",
|
|
@@ -12036,19 +12057,19 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12036
12057
|
dispose() {
|
|
12037
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");
|
|
12038
12059
|
}
|
|
12039
|
-
},
|
|
12060
|
+
}, Rc = "https://huggingface.co/notaneimu/onnx-image-models/resolve/main/", zc = {
|
|
12040
12061
|
QUALITY_PRESETS: {
|
|
12041
12062
|
fast: {
|
|
12042
|
-
2:
|
|
12043
|
-
4:
|
|
12063
|
+
2: Rc + "2x-spanx2-ch48.onnx",
|
|
12064
|
+
4: Rc + "4xNomos8k_span_otf_strong_fp32_opset17.onnx"
|
|
12044
12065
|
},
|
|
12045
12066
|
balanced: {
|
|
12046
|
-
2:
|
|
12047
|
-
4:
|
|
12067
|
+
2: Rc + "2xNomosUni_compact_otf_medium.onnx",
|
|
12068
|
+
4: Rc + "RealESRGAN_x4plus.onnx"
|
|
12048
12069
|
},
|
|
12049
12070
|
quality: {
|
|
12050
|
-
2:
|
|
12051
|
-
4:
|
|
12071
|
+
2: Rc + "2x-realesrgan-x2plus.onnx",
|
|
12072
|
+
4: Rc + "4xNomos2_hq_mosr_fp32.onnx"
|
|
12052
12073
|
}
|
|
12053
12074
|
},
|
|
12054
12075
|
TILE_SIZE: 512,
|
|
@@ -12060,17 +12081,17 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12060
12081
|
}],
|
|
12061
12082
|
graphOptimizationLevel: "all"
|
|
12062
12083
|
}
|
|
12063
|
-
},
|
|
12084
|
+
}, Bc = class extends E {
|
|
12064
12085
|
constructor(e, t, n = {}) {
|
|
12065
12086
|
if (super(), !e || !t) throw Error("AIUpscaler requires output canvas and renderer");
|
|
12066
|
-
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 = {
|
|
12067
12088
|
isUpscaling: !1,
|
|
12068
12089
|
isLoading: !1,
|
|
12069
12090
|
abortController: null
|
|
12070
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;
|
|
12071
12092
|
}
|
|
12072
12093
|
async _ensureSession() {
|
|
12073
|
-
let e =
|
|
12094
|
+
let e = zc.QUALITY_PRESETS[this.quality];
|
|
12074
12095
|
if (!e) throw Error(`Unknown quality preset: ${this.quality}`);
|
|
12075
12096
|
let t = e[this.scaleFactor];
|
|
12076
12097
|
if (!t) throw Error(`No model for ${this.quality}/${this.scaleFactor}x`);
|
|
@@ -12091,7 +12112,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12091
12112
|
this._worker.addEventListener("message", r), this._worker.postMessage({
|
|
12092
12113
|
type: "load",
|
|
12093
12114
|
url: t,
|
|
12094
|
-
sessionOptions:
|
|
12115
|
+
sessionOptions: zc.SESSION_OPTIONS
|
|
12095
12116
|
});
|
|
12096
12117
|
}), this._currentModelUrl = t, this.dispatchEvent({ type: "loaded" });
|
|
12097
12118
|
} catch (e) {
|
|
@@ -12158,8 +12179,8 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12158
12179
|
willReadFrequently: !0,
|
|
12159
12180
|
alpha: !0
|
|
12160
12181
|
});
|
|
12161
|
-
this._cacheUpscaledAlpha(t, n * i, r * i), t.isHDR && (this._hdrToneMapFn =
|
|
12162
|
-
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;
|
|
12163
12184
|
for (let o = 0; o < d; o++) for (let c = 0; c < u; c++) {
|
|
12164
12185
|
if (e.aborted) throw new DOMException("Aborted", "AbortError");
|
|
12165
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);
|
|
@@ -12229,7 +12250,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12229
12250
|
let u = ((n + e) * o + (t + i)) * 4, d = e * r + i;
|
|
12230
12251
|
if (s) {
|
|
12231
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;
|
|
12232
|
-
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;
|
|
12233
12254
|
} else l[d] = a[u] / 255, l[c + d] = a[u + 1] / 255, l[2 * c + d] = a[u + 2] / 255;
|
|
12234
12255
|
}
|
|
12235
12256
|
return l;
|
|
@@ -12287,10 +12308,10 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12287
12308
|
this._backupCanvas = document.createElement("canvas"), this._backupCanvas.width = e.width, this._backupCanvas.height = e.height;
|
|
12288
12309
|
let t = this._backupCanvas.getContext("2d");
|
|
12289
12310
|
if (e.isHDR) {
|
|
12290
|
-
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);
|
|
12291
12312
|
for (let e = 0, t = r * i; e < t; e++) {
|
|
12292
12313
|
let t = e * 4, r = n[t] * l, i = n[t + 1] * l, a = n[t + 2] * l;
|
|
12293
|
-
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;
|
|
12294
12315
|
}
|
|
12295
12316
|
t.putImageData(a, 0, 0);
|
|
12296
12317
|
} else t.putImageData(e, 0, 0);
|
|
@@ -12302,7 +12323,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12302
12323
|
this.hdr = !!e;
|
|
12303
12324
|
}
|
|
12304
12325
|
setQuality(e) {
|
|
12305
|
-
if (!
|
|
12326
|
+
if (!zc.QUALITY_PRESETS[e]) {
|
|
12306
12327
|
console.warn(`AIUpscaler: Invalid quality "${e}", must be fast/balanced/quality`);
|
|
12307
12328
|
return;
|
|
12308
12329
|
}
|
|
@@ -12321,7 +12342,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12321
12342
|
async dispose() {
|
|
12322
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");
|
|
12323
12344
|
}
|
|
12324
|
-
},
|
|
12345
|
+
}, Vc = class extends E {
|
|
12325
12346
|
constructor({ renderer: e, mainCanvas: t, scene: n, camera: r, stages: i, pipeline: a, getExposure: o, getSaturation: s, getTransparentBg: c }) {
|
|
12326
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;
|
|
12327
12348
|
}
|
|
@@ -12345,7 +12366,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12345
12366
|
setupDenoiser() {
|
|
12346
12367
|
if (!this.denoiserCanvas) return;
|
|
12347
12368
|
let e = this._stages.pathTracer;
|
|
12348
|
-
this.denoiser = new
|
|
12369
|
+
this.denoiser = new Lc(this.denoiserCanvas, this.renderer, this.scene, this.camera, {
|
|
12349
12370
|
...Z,
|
|
12350
12371
|
backendParams: () => ({
|
|
12351
12372
|
device: this.renderer.backend.device,
|
|
@@ -12370,7 +12391,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12370
12391
|
setupUpscaler() {
|
|
12371
12392
|
if (!this.denoiserCanvas) return;
|
|
12372
12393
|
let e = this._stages.pathTracer;
|
|
12373
|
-
this.upscaler = new
|
|
12394
|
+
this.upscaler = new Bc(this.denoiserCanvas, this.renderer, {
|
|
12374
12395
|
scaleFactor: Z.upscalerScale || 2,
|
|
12375
12396
|
quality: Z.upscalerQuality || "fast",
|
|
12376
12397
|
getSourceCanvas: () => this.denoiser?.enabled ? null : this.renderer.domElement,
|
|
@@ -12528,7 +12549,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12528
12549
|
let t = Mn[e];
|
|
12529
12550
|
t && this._stages.asvgf?.updateParameters(t);
|
|
12530
12551
|
}
|
|
12531
|
-
},
|
|
12552
|
+
}, Hc = class {
|
|
12532
12553
|
constructor() {
|
|
12533
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;
|
|
12534
12555
|
}
|
|
@@ -12552,7 +12573,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12552
12573
|
dispose() {
|
|
12553
12574
|
this.visible = !1;
|
|
12554
12575
|
}
|
|
12555
|
-
},
|
|
12576
|
+
}, Uc = class {
|
|
12556
12577
|
constructor(n, r, i) {
|
|
12557
12578
|
this.layer = "scene", this.visible = !0, this._outlineNode = Lt(r, i, {
|
|
12558
12579
|
selectedObjects: [],
|
|
@@ -12586,7 +12607,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12586
12607
|
dispose() {
|
|
12587
12608
|
this.visible = !1, this._outlineNode?.dispose(), this._material?.dispose(), this._quad?.dispose();
|
|
12588
12609
|
}
|
|
12589
|
-
},
|
|
12610
|
+
}, Wc = class {
|
|
12590
12611
|
constructor(e, t) {
|
|
12591
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;
|
|
12592
12613
|
}
|
|
@@ -12598,13 +12619,13 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12598
12619
|
}
|
|
12599
12620
|
setupDefaultHelpers({ helperScene: e, meshScene: t, pipeline: n, denoisingManager: r, app: i, renderWidth: a, renderHeight: o }) {
|
|
12600
12621
|
this.setHelperScene(e);
|
|
12601
|
-
let s = new
|
|
12622
|
+
let s = new Hc();
|
|
12602
12623
|
this.register("tiles", s), s.setRenderSize(a || 1, o || 1), i.addEventListener("resolution_changed", (e) => {
|
|
12603
12624
|
s.setRenderSize(e.width, e.height);
|
|
12604
12625
|
}), n.eventBus.on("tile:changed", (e) => {
|
|
12605
12626
|
e.renderMode === 1 && e.tileBounds && (s.setActiveTile(e.tileBounds), s.show());
|
|
12606
12627
|
}), n.eventBus.on("pipeline:reset", () => s.hide()), i.addEventListener(gn.RENDER_COMPLETE, () => s.hide()), this._wireDenoiserTileEvents(s, r);
|
|
12607
|
-
let c = new
|
|
12628
|
+
let c = new Uc(this.renderer, t, this.camera);
|
|
12608
12629
|
this.register("outline", c);
|
|
12609
12630
|
}
|
|
12610
12631
|
_wireDenoiserTileEvents(e, t) {
|
|
@@ -12671,7 +12692,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12671
12692
|
for (let e of this._helpers.values()) e.dispose?.();
|
|
12672
12693
|
this._helpers.clear(), this._hudCanvas.parentElement && this._hudCanvas.parentElement.removeChild(this._hudCanvas);
|
|
12673
12694
|
}
|
|
12674
|
-
},
|
|
12695
|
+
}, Gc = class extends E {
|
|
12675
12696
|
constructor() {
|
|
12676
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;
|
|
12677
12698
|
}
|
|
@@ -12771,7 +12792,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12771
12792
|
dispose() {
|
|
12772
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;
|
|
12773
12794
|
}
|
|
12774
|
-
},
|
|
12795
|
+
}, Kc = class {
|
|
12775
12796
|
constructor({ camera: e, canvas: t, orbitControls: n, app: r }) {
|
|
12776
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);
|
|
12777
12798
|
}
|
|
@@ -12882,9 +12903,9 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12882
12903
|
dispose() {
|
|
12883
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;
|
|
12884
12905
|
}
|
|
12885
|
-
},
|
|
12906
|
+
}, qc = class extends E {
|
|
12886
12907
|
constructor(e, t = {}) {
|
|
12887
|
-
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;
|
|
12888
12909
|
}
|
|
12889
12910
|
async init() {
|
|
12890
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;
|
|
@@ -12992,11 +13013,11 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
12992
13013
|
}
|
|
12993
13014
|
async loadSceneData() {
|
|
12994
13015
|
this.interactionManager?.deselect(), this.animationManager.dispose(), this._animRefitInFlight = !1;
|
|
12995
|
-
let e = new
|
|
13016
|
+
let e = new rs("loadSceneData"), t = this.meshScene.environment, n = null;
|
|
12996
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({
|
|
12997
13018
|
status: "Transferring data to GPU...",
|
|
12998
13019
|
progress: 86
|
|
12999
|
-
}), 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({
|
|
13000
13021
|
status: "Compiling shaders...",
|
|
13001
13022
|
progress: 90
|
|
13002
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({
|
|
@@ -13083,16 +13104,18 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
13083
13104
|
return this.stages.pathTracer?.frameCount || 0;
|
|
13084
13105
|
}
|
|
13085
13106
|
setMaterialProperty(e, t, n) {
|
|
13086
|
-
if (this.stages.pathTracer?.materialData.updateMaterialProperty(e, t, n), [
|
|
13087
|
-
"emissive",
|
|
13088
|
-
"emissiveIntensity",
|
|
13089
|
-
"visible"
|
|
13090
|
-
].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) {
|
|
13091
13108
|
let r = this._sdf.updateMaterialEmissive(e, t, n);
|
|
13092
13109
|
r && this.stages.pathTracer.setEmissiveTriangleData(r.rawData, r.emissiveCount, r.totalPower);
|
|
13093
13110
|
}
|
|
13094
13111
|
this.reset();
|
|
13095
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
|
+
}
|
|
13096
13119
|
setTextureTransform(e, t, n) {
|
|
13097
13120
|
this.stages.pathTracer?.materialData.updateTextureTransform(e, t, n), this.reset();
|
|
13098
13121
|
}
|
|
@@ -13116,32 +13139,32 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
13116
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);
|
|
13117
13140
|
}
|
|
13118
13141
|
_initCameraManager() {
|
|
13119
|
-
this.cameraManager = new
|
|
13142
|
+
this.cameraManager = new _c(this.canvas);
|
|
13120
13143
|
}
|
|
13121
13144
|
_initScenes() {
|
|
13122
13145
|
this.scene = new Oe(), this.meshScene = new Oe(), this._sceneHelpers = new Bt();
|
|
13123
13146
|
}
|
|
13124
13147
|
_initAssetPipeline() {
|
|
13125
|
-
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", () => {
|
|
13126
13149
|
this.needsReset = !0, this.wake();
|
|
13127
13150
|
});
|
|
13128
13151
|
}
|
|
13129
13152
|
_initPipeline() {
|
|
13130
13153
|
this._createStages();
|
|
13131
13154
|
let { clientWidth: e, clientHeight: t } = this.canvas;
|
|
13132
|
-
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);
|
|
13133
13156
|
let n = this.canvas.clientWidth || 1, r = this.canvas.clientHeight || 1;
|
|
13134
13157
|
this.pipeline.setSize(n, r);
|
|
13135
13158
|
}
|
|
13136
13159
|
_initManagers() {
|
|
13137
|
-
this.interactionManager = new
|
|
13160
|
+
this.interactionManager = new dc({
|
|
13138
13161
|
scene: this.meshScene,
|
|
13139
13162
|
camera: this.cameraManager.camera,
|
|
13140
13163
|
canvas: this.canvas,
|
|
13141
13164
|
assetLoader: this.assetLoader,
|
|
13142
13165
|
pathTracer: null,
|
|
13143
13166
|
floorPlane: this.assetLoader.floorPlane
|
|
13144
|
-
}), 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({
|
|
13145
13168
|
camera: this.cameraManager.camera,
|
|
13146
13169
|
canvas: this.canvas,
|
|
13147
13170
|
orbitControls: this.cameraManager.controls,
|
|
@@ -13211,16 +13234,16 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
13211
13234
|
}
|
|
13212
13235
|
_createStages() {
|
|
13213
13236
|
let e = this.settings.get("adaptiveSamplingMax"), t = this.settings.get("useAdaptiveSampling");
|
|
13214
|
-
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, {
|
|
13215
13238
|
adaptiveSamplingMax: e,
|
|
13216
13239
|
enabled: t
|
|
13217
|
-
}), 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, {
|
|
13218
13241
|
exposure: Z.autoExposure ? 1 : this.settings.get("exposure") ?? 1,
|
|
13219
13242
|
saturation: this.settings.get("saturation") ?? Z.saturation
|
|
13220
13243
|
});
|
|
13221
13244
|
}
|
|
13222
13245
|
_setupDenoisingManager() {
|
|
13223
|
-
this.denoisingManager = new
|
|
13246
|
+
this.denoisingManager = new Vc({
|
|
13224
13247
|
renderer: this.renderer,
|
|
13225
13248
|
mainCanvas: this.canvas,
|
|
13226
13249
|
scene: this.scene,
|
|
@@ -13272,7 +13295,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
13272
13295
|
this.scene.updateMatrixWorld(), this.overlayManager?.render(), this.transformManager?.render(this.renderer);
|
|
13273
13296
|
}
|
|
13274
13297
|
_setupOverlayManager() {
|
|
13275
|
-
this.overlayManager = new
|
|
13298
|
+
this.overlayManager = new Wc(this.renderer, this.cameraManager.camera), this.overlayManager.setupDefaultHelpers({
|
|
13276
13299
|
helperScene: this._sceneHelpers,
|
|
13277
13300
|
meshScene: this.meshScene,
|
|
13278
13301
|
pipeline: this.pipeline,
|
|
@@ -13288,7 +13311,7 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
13288
13311
|
_forwardEvents(e, t) {
|
|
13289
13312
|
if (e) for (let n of t) e.addEventListener(n, (e) => this.dispatchEvent(e));
|
|
13290
13313
|
}
|
|
13291
|
-
},
|
|
13314
|
+
}, Jc = class {
|
|
13292
13315
|
constructor(e) {
|
|
13293
13316
|
this._app = e, this._cancelled = !1, this._rendering = !1;
|
|
13294
13317
|
}
|
|
@@ -13388,6 +13411,6 @@ var Lc = new Float32Array(3), Rc = {
|
|
|
13388
13411
|
}
|
|
13389
13412
|
};
|
|
13390
13413
|
//#endregion
|
|
13391
|
-
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 };
|
|
13392
13415
|
|
|
13393
13416
|
//# sourceMappingURL=rayzee.es.js.map
|