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/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] = t.visible ?? 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;
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 = Cr({
2121
- visible: "bool",
2122
- side: "int",
2123
- transparent: "bool",
2124
- opacity: "float"
2125
- }), ci = 32, li = 512, ui = 4, di = 8, fi = 1e8, pi = () => Ke("int", ci).toVar(), mi = 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"), hi = 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"), gi = M(([e, t]) => {
2126
- let n = $(t, e, B(4), B(27)), r = $(t, e, B(10), B(27));
2127
- return si({
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 = pi(), l = B(1).toVar();
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(fi).mul(u), tt(F(e.direction), J(1e-8))).toVar(), f = e.origin, p = e.direction, m = B(0).toVar();
2155
- return P(l.greaterThan(B(0)).and(m.lessThan(B(li))), () => {
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(ui));
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(di)).xyz, u = $(n, c, B(1), B(di)).xyz, d = $(n, c, B(2), B(di)).xyz, m = mi({
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(di)).xyz, d = $(n, c, B(4), B(di)).xyz, f = $(n, c, B(5), B(di)).xyz, h = $(n, c, B(7), B(di)), g = B(h.z);
2176
- N(_i(g, r), () => {
2177
- let n = z(1).sub(t).sub(l), m = U(u.mul(n).add(d.mul(t)).add(f.mul(l))).toVar();
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
- N(l.lessThan(B(ci)), () => {
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(ui)), r = $(t, e, B(2), B(ui)), a = $(t, e, B(3), B(ui)), o = B(u.w).toVar(), s = B(n.w).toVar(), p = hi({
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 = hi({
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(ci))), () => {
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(ci)), () => {
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(di)), c = $(n, a, B(7), B(di));
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
- }), xi = M(([e, t, n, r, i]) => {
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 = pi(), s = B(1).toVar();
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(fi).mul(c), tt(F(e.direction), J(1e-8))).toVar(), u = B(0).toVar();
2232
- return P(s.greaterThan(B(0)).and(a.didHit.not()).and(u.lessThan(B(li))), () => {
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 i = o.element(s).toVar(), c = $(t, i, B(0), B(ui));
2235
- N(c.w.lessThan(0), () => {
2236
- N(c.w.greaterThan(z(-1.5)), () => {
2237
- let t = B(c.x).toVar(), i = B(c.y).toVar();
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: i
2241
- }, ({ i }) => {
2242
- let o = t.add(i).toVar(), s = $(n, o, B(0), B(di)).xyz, c = $(n, o, B(1), B(di)).xyz, l = $(n, o, B(2), B(di)).xyz, u = mi({
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: s,
2246
- pB: c,
2247
- pC: l,
2228
+ pA: o,
2229
+ pB: s,
2230
+ pC: c,
2248
2231
  closestHitDst: a.dst
2249
2232
  });
2250
- N(u.w.greaterThan(.5), () => {
2251
- let t = $(n, o, B(7), B(di)), i = B(t.z);
2252
- N(_i(i, r), () => {
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(c.x).toVar();
2259
- N(s.lessThan(B(ci)), () => {
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, i, B(1), B(ui)), r = $(t, i, B(2), B(ui)), u = $(t, i, B(3), B(ui)), d = B(c.w).toVar(), f = B(n.w).toVar(), p = hi({
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: c.xyz,
2253
+ boxMin: i.xyz,
2268
2254
  boxMax: n.xyz
2269
- }).toVar(), m = hi({
2255
+ }).toVar(), m = gi({
2270
2256
  rayOrigin: e.origin,
2271
2257
  invDir: l,
2272
- boxMin: r.xyz,
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(ci))), () => {
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(ci)), () => {
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
- }), Si = M(([e, t, n, r, i, a, o, s, c, l, u]) => {
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
- }), Ci = /* @__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"), wi = /* @__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");
2295
- M(([e, t, n]) => vt(e, Ci({
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 Ti = /* @__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", [Ci]), Ei = M(([e, t, n, r, i]) => {
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, Ci({
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 = Ti({
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
- }), Di = M(([e, t, n, r, i, a, o, s, c]) => {
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 = wi({
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 = Ti({
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
- }), Oi = /* @__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", [Ci]), ki = /* @__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")]), Ai = 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)))), ji = /* @__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"), Mi = M(([e, t]) => {
2325
- let n = ji({ t: t.albedoTransform }).toVar(), r = ji({ t: t.normalTransform }).toVar(), i = ji({ t: t.metalnessTransform }).toVar(), a = ji({ t: t.roughnessTransform }).toVar(), o = ji({ t: t.emissiveTransform }).toVar(), s = ji({ 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();
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 = ki({
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(ki({
2319
+ m.assign(Di({
2334
2320
  uv: e,
2335
2321
  transform: t.albedoTransform
2336
- })), h.assign(l.select(m, ki({
2322
+ })), h.assign(l.select(m, Di({
2337
2323
  uv: e,
2338
2324
  transform: t.normalTransform
2339
- }))), v.assign(f.select(m, ki({
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(ki({
2333
+ y.assign(Di({
2348
2334
  uv: e,
2349
2335
  transform: t.bumpTransform
2350
2336
  }));
2351
2337
  }), N(d, () => {
2352
- g.assign(ki({
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(ki({
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(ki({
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
- }), Ni = M(([e, t, n]) => {
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
- }), Pi = M(([e, t, n, r]) => {
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
- }), Fi = M(([e, t, n, r]) => {
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
- }), Ii = M(([e, t, n, r]) => {
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
- }), Li = M(([e, t, n, r]) => {
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
- }), Ri = M(([e, t, n, r, i, a, o, s, c]) => {
2432
- let l = Y(0).toVar(), u = J(0).toVar(), d = z(0).toVar(), f = z(0).toVar(), p = J(0).toVar(), m = Ai(o).toVar();
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(Mi(s, o)).toVar();
2435
- l.assign(Ni(e, o, m));
2436
- let h = Pi(r, i, o, m);
2420
+ let m = Nr.wrap(Ai(s, o)).toVar();
2421
+ l.assign(ji(e, o, m));
2422
+ let h = Mi(r, i, o, m);
2437
2423
  d.assign(h.x), f.assign(h.y);
2438
- let g = Fi(t, c, o, m).toVar();
2439
- p.assign(Ii(n, g, o, m)), u.assign(Li(a, o, l, m));
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(Ri(e, t, n, r, i, a, o, s, J(0, 1, 0))).albedo), M(([e, t, n, r, i, a, o, s]) => jr.wrap(Ri(e, t, n, r, i, a, o, s, J(0, 1, 0))).emissive), M(([e, t, n, r, i, a, o, s]) => jr.wrap(Ri(e, t, n, r, i, a, o, s, J(0, 1, 0))).metalness), M(([e, t, n, r, i, a, o, s]) => jr.wrap(Ri(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(Ri(e, t, n, r, i, a, o, s, c)).normal);
2450
- var zi = M(([e, t, n, r]) => {
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 = ki({
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
- }), Bi = 32, Vi = 16, Hi = 5, Ui = 1 / 1024, Wi = 8, Gi = Cr({
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
- }), Ki = M(([e, t, n, r, i, a]) => {
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(Wi)).xyz.toVar(), f = $(n, u, B(1), B(Wi)).xyz.toVar(), p = $(n, u, B(2), B(Wi)).xyz.toVar(), m = $(n, u, B(6), B(Wi)).toVar(), h = $(n, u, B(7), B(Wi)).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();
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(Bi), B(Vi))).toVar(), D = C.negate().toVar(), O = C.toVar().sub(D).div(z(E)).toVar(), k = D.toVar(), A = D.toVar(), ee = B(0).toVar();
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 = zi(r, i.displacementMapIndex, a, i.displacementTransform).sub(.5).mul(p);
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(Hi),
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 = zi(r, i.displacementMapIndex, o, i.displacementTransform).sub(.5).mul(p);
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(), _ = zi(r, i.displacementMapIndex, h, i.displacementTransform), v = _.sub(.5).mul(p), y = z(Ui), S = _, C = zi(r, i.displacementMapIndex, h.add(q(y, 0)), i.displacementTransform), w = zi(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)));
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
- }), Gi({
2489
+ }), Ui({
2504
2490
  hitPoint: o,
2505
2491
  uv: s,
2506
2492
  normal: c,
2507
2493
  height: l
2508
2494
  });
2509
- }), qi = 1e-6;
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 Ji = M(([e, t]) => {
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
- }), Yi = M(([e, t]) => {
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
- }), Xi = M(([e]) => {
2506
+ }), Ji = M(([e]) => {
2521
2507
  let t = ht(e);
2522
- return J(1).add(t).div(V(J(1).sub(t), J(qi)));
2523
- }), Zi = M(([e, t]) => {
2524
- let n = e.sub(J(t)), r = V(e.add(J(t)), J(qi)), i = n.div(r);
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
- }), Qi = M(([e, t]) => {
2527
- let n = e.sub(t), r = V(e.add(t), qi), i = n.div(r);
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
- }), $i = (e) => J(Qi(e, z(1))), ea = M(([e, t]) => {
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
- }), ta = M(([e, t]) => {
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
- }), na = M(([e, t]) => {
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
- }), ra = M(([e, t, n]) => {
2539
- let r = na(e, n);
2540
- return na(t, n).mul(r);
2541
- }), ia = M(([e, t, n]) => {
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
- }), aa = M(([e, t, n]) => {
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
- }), oa = M(([e, t, n]) => ea(e, n).mul(e).div(V(z(4).mul(t), Vr))), sa = M(([e, t, n]) => {
2548
- let r = ea(e, n), i = na(t, n);
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
- }), ca = M(([e, t]) => {
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
- }), la = M(([e, t, n, r, i]) => {
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 = Ji(n, Qi(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 = Xi(L(i, 0, .9999)).toVar(), p = Zi(f, a).toVar(), m = J(Ji(t, p.x), Ji(t, p.y), Ji(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();
2559
- S.mulAssign(y), x.addAssign(S.mul(z(2).mul(ca(z(1).mul(g), z(1).mul(_))))), S.mulAssign(y), x.addAssign(S.mul(z(2).mul(ca(z(2).mul(g), z(2).mul(_))))), c.assign(V(x, J(0)));
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
- }), ua = M(([e, t, n]) => {
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 da = M(([e, t, n, r, i, a]) => {
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: $i(e.ior),
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(ua(e, n, u)), f = d.diffuse.toVar(), p = d.specular.toVar(), m = d.transmission.toVar(), h = d.clearcoat.toVar();
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
- }), fa = M(([e, t, n, r, i]) => {
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($i(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();
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($i(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({
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 pa = /* @__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"), ma = /* @__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"), ha = /* @__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");
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 ga = /* @__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"), _a = M(([e, t, n]) => {
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: $i(n.ior),
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(ua(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);
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
- }), va = M(([e, t, n, r, i, a]) => {
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(oa(p, m, r.roughness)), N(r.clearcoat.greaterThan(0), () => {
2767
- c.assign(oa(p, m, r.clearcoatRoughness));
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 = _a(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();
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(ma({
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 = pa({
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(oa(r, a, n.roughness));
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 = pa({
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(oa(r, a, n.clearcoatRoughness));
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 = pa({
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(oa(r, o, n.roughness));
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(ma({
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 = va(f, e, t, n, o, m), g = a(e, f, t, n).toVar();
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 ya = Cr({
2821
+ var _a = Cr({
2836
2822
  direction: "vec3",
2837
2823
  throughput: "vec3",
2838
2824
  didReflect: "bool"
2839
- }), ba = Cr({
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 xa = Cr({
2841
+ var ya = Cr({
2856
2842
  wavelength: "float",
2857
2843
  ior: "float",
2858
2844
  colorWeight: "vec3"
2859
- }), Sa = Cr({
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 Ca = M(([e, t, n]) => {
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))), xa({
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
- }), wa = /* @__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"), Ta = M(([e, t, n, r]) => {
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 = Ji(o, Qi(a, i)), t = z(1).sub(e).mul(n.transmission).toVar();
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 = wa({
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
- }), Ea = M(([e, t, n, r, i, a, o, s]) => {
2930
- let c = Sa({
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 = xa.wrap(Ca(n, a, $t(s)));
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 = pa({
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 = xa.wrap(Ca(n, a, $t(s)));
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(oa(n, r, l));
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 = ea(e, l), i = f.add(d.mul(n)), a = F(n).div(i.mul(i));
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
- }), Da = M(([e, t, n, r, i, a, o]) => {
2970
- let s = ya({
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 = Qi(d, u), h = W(p, z(1), Ji(f, m)).toVar(), g = z(0).toVar();
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 = Sa.wrap(Ea(l, c, n.ior, n.roughness, r, z(0), v, i));
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 = Sa.wrap(Ea(l, c, n.ior, n.roughness, r, n.dispersion, v, i));
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(wa({
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
- }), Oa = M(([e, t, n, r, i, a, o, s]) => {
3040
- let c = ba({
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 = ya.wrap(Da(e.direction, n, r, t, u, o, s));
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
- }), ka = M(([e, t, n, r]) => {
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($i(r.ior).mul(r.specularColor), r.color.rgb, r.metalness).mul(r.specularIntensity), J(0), J(1)).toVar(), s = r.color.rgb.toVar();
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 = la(z(1), r.iridescenceIOR, a.VoH, e, o);
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 = ea(a.NoH, r.roughness), l = ra(a.NoV, a.NoL, r.roughness), u = Yi(a.VoH, o).toVar(), d = c.mul(l).mul(u).div(V(z(4).mul(a.NoV).mul(a.NoL), Vr)).mul(ia(o, a.NoV, r.roughness)), f = aa(o, a.NoV, r.roughness), p = J(1).sub(f).mul(z(1).sub(r.metalness)).mul(s).mul(zr).add(d).toVar();
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 = ta(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);
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(ka(e, t, n, r));
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 = la(z(1), r.iridescenceIOR, u, t, e);
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 = Yi(u, e).toVar(), p = V(z(4).mul(i.NoV).mul(c), Vr), m = n.mul(d).mul(f).div(p).mul(ia(e, i.NoV, r.roughness)), h = aa(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();
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 = ta(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);
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 = Ji(t, z(.04));
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 Aa = M(([e, t]) => {
3128
- let n = L(H($i(t.ior).mul(t.specularColor), t.color.rgb, t.metalness).mul(t.specularIntensity), J(0), J(1)).toVar(), r = ea(e.NoH, t.roughness), i = ra(e.NoV, e.NoL, t.roughness), a = Yi(e.VoH, n).toVar(), o = r.mul(i).mul(a).div(V(z(4).mul(e.NoV).mul(e.NoL), Vr)).mul(ia(n, e.NoV, t.roughness)), s = aa(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 = ea(e.NoH, l), d = ra(e.NoV, e.NoL, l), f = Ji(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)));
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
- }), ja = Cr({
3116
+ }), ka = Cr({
3131
3117
  brdf: "vec3",
3132
3118
  L: "vec3",
3133
3119
  pdf: "float"
3134
- }), Ma = M(([e, t, n, r, i]) => {
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(pa({
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(pa({
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(ma({
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)), _ = ea(g.NoH, s).mul(g.NoH).div(z(4).mul(g.VoH)).mul(u), v = ea(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);
3157
- return ja({
3158
- brdf: Aa(g, n),
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
- }), Na = Cr({
3148
+ }), ja = Cr({
3163
3149
  direction: "vec3",
3164
3150
  color: "vec3",
3165
3151
  intensity: "float",
3166
3152
  angle: "float"
3167
- }), Pa = Cr({
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
- }), Fa = Cr({
3161
+ }), Na = Cr({
3176
3162
  position: "vec3",
3177
3163
  color: "vec3",
3178
3164
  intensity: "float",
3179
3165
  distance: "float",
3180
3166
  decay: "float"
3181
- }), Ia = Cr({
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
- }), La = Cr({
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
- }), Ra = Cr({
3183
+ }), Ia = Cr({
3198
3184
  direction: "vec3",
3199
3185
  throughput: "vec3",
3200
3186
  misWeight: "float",
3201
3187
  pdf: "float",
3202
3188
  combinedPdf: "float"
3203
- }), za = M(([e, t]) => {
3189
+ }), La = M(([e, t]) => {
3204
3190
  let n = t.mul(8);
3205
- return Na({
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
- }), Ba = M(([e, t]) => {
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 Pa({
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
- }), Va = M(([e, t]) => {
3208
+ }), za = M(([e, t]) => {
3223
3209
  let n = t.mul(9);
3224
- return Fa({
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
- }), Ha = M(([e, t]) => {
3217
+ }), Ba = M(([e, t]) => {
3232
3218
  let n = t.mul(14);
3233
- return Ia({
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
- }), Ua = /* @__PURE__ */ X("\n fn isDirectionValid( direction: vec3f, surfaceNormal: vec3f ) -> bool {\n return dot( direction, surfaceNormal ) > 0.0f;\n }\n"), Wa = /* @__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"), Ga = /* @__PURE__ */ X("\n fn getSpotAttenuation( coneCosine: f32, penumbraCosine: f32, angleCosine: f32 ) -> f32 {\n return smoothstep( coneCosine, penumbraCosine, angleCosine );\n }\n"), Ka = /* @__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"), qa = M(([e, t, n]) => {
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 = Ta(t, e.normal, e.material, n);
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 Ja = M(([e, t, n, r, i, a, o, s]) => {
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 = wa(r.attenuationColor, r.attenuationDistance, e);
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 = Ji(F(R(t, i)), Qi(r.ior, z(1))), o = z(1).sub(a).mul(r.transmission);
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
- }), Ya = M(([e, t, n]) => {
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
- }), Xa = M(([e, t, n, r, i]) => {
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
- }), Za = M(([e, t, n, r]) => {
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
- }), Qa = M(([e, t, n, r]) => {
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
- }), $a = M(([e, t, n, r]) => {
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
- }), eo = M(([e, t, n, r]) => {
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(eo(e, n, i, s).not(), () => {
3379
- let f = Ya(t, n, i), p = t.add(f), m = J(0).toVar(), h = z(1e6).toVar();
3364
+ return N(Qa(e, n, i, s).not(), () => {
3365
+ let f = qa(t, n, i), p = t.add(f), m = J(0).toVar(), h = z(1e6).toVar();
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(Ka({
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 = Za(e, t, n, i);
3400
+ let p = J(0).toVar(), m = Ya(e, t, n, i);
3415
3401
  return N(m.greaterThanEqual(.001), () => {
3416
- let h = Ya(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));
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 = qa(e, g, o.direction);
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 = Ya(t, n, i), h = l(t.add(m), a, p.sub(.001), c);
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), _ = Ya(t, n, i), v = l(t.add(_), a, p.sub(.001), c);
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 to = 2 * Rr;
3479
- M(() => La({
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 no = M(([e, t, n, r]) => {
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
- }), La({
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(to).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();
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
- }), La({
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 ro = M(([e, t, n, r]) => {
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 = Ga({
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 = Wa({
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
- }), La({
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
- }), io = M(([e, t, n]) => {
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 = Wa({
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
- }), La({
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
- }), ao = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p]) => {
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 = Na.wrap(za(o, r));
3575
- x.addAssign(Xa(a, e, t, n, i)), S.addAssign(1);
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 = Pa.wrap(Ba(c, r)), a = W(i.intensity.greaterThan(0), Za(i, e, t, n), z(0));
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 = Fa.wrap(Va(u, r));
3599
- x.addAssign(Qa(i, e, t, n)), S.addAssign(1);
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 = Ia.wrap(Ha(f, r));
3611
- x.addAssign($a(i, e, t, n)), S.addAssign(1);
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 = Na.wrap(za(o, t.sub(x)));
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 = Pa.wrap(Ba(c, t.sub(x)));
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 = La.wrap(no(o, e, t, n));
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 = Fa.wrap(Va(u, t.sub(x)));
3621
+ let r = Na.wrap(za(u, t.sub(x)));
3636
3622
  N(r.intensity.greaterThan(0), () => {
3637
- let t = La.wrap(io(r, e, n));
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 = Ia.wrap(Ha(f, t.sub(x)));
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 = La.wrap(ro(o, e, t, n));
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 = Xa(Na.wrap(za(o, r)), e, t, n, i).toVar(), s = C.toVar();
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 = Pa.wrap(Ba(c, r)), a = W(i.intensity.greaterThan(0), Za(i, e, t, n), z(0)).toVar(), o = C.toVar();
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 = Qa(Fa.wrap(Va(u, r)), e, t, n).toVar(), a = C.toVar();
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 = $a(Ia.wrap(Ha(f, r)), e, t, n).toVar(), a = C.toVar();
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 = Na.wrap(za(o, T)), t = U(e.direction).toVar(), n = z(1).toVar();
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(to).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();
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(to).mul(V(z(1).sub(i), 1e-10)).toVar();
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 = Pa.wrap(Ba(c, T)), n = q(r.y, $t(a)).toVar(), i = La.wrap(no(t, e, n, D));
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 = Fa.wrap(Va(u, T)), n = La.wrap(io(t, e, D));
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 = Ia.wrap(Ha(f, T)), n = q(r.y, $t(a)).toVar(), i = La.wrap(ro(t, e, n, D));
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
- }), La({
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
- }), oo = M(([e, t, n, r]) => {
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(sa(s, i, e)));
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(Ua({
3746
+ N(Va({
3761
3747
  direction: o,
3762
3748
  surfaceNormal: r
3763
3749
  }), () => {
3764
- let p = Ja(a, o, n.sub(.001), s, xi, c, l, u);
3750
+ let p = Ka(a, o, n.sub(.001), s, yi, c, l, u);
3765
3751
  N(p.greaterThan(0), () => {
3766
- let n = ka(t, o, r, i), a = m.div(V(e.area.mul(h), Vr)).toVar(), s = oo(t, o, r, i).toVar(), c = W(s.greaterThan(0), Xr({
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 so = 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]) => {
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 = La.wrap(ao(A, t, n, e, c, l, u, d, f, p, m, h, g, _));
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(Ua({
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 = Ja(A, i.direction, a, l, xi, v, y, b);
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 = ka(r, i.direction, t, n), s = oo(r, i.direction, t, n).toVar(), c = z(1).toVar();
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(Ua({
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 = Pa.wrap(Ba(f, r));
3821
+ let a = Ma.wrap(Ra(f, r));
3836
3822
  N(a.intensity.greaterThan(0), () => {
3837
- let o = Za(a, e, t, n).toVar();
3823
+ let o = Ya(a, e, t, n).toVar();
3838
3824
  N(o.greaterThanEqual(oe), () => {
3839
- N(qa(a, A, i).toVar().greaterThan(0), () => {
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 = Pa.wrap(Ba(f, u)), t = qa(e, A, i).toVar();
3833
+ let e = Ma.wrap(Ra(f, u)), t = Ga(e, A, i).toVar();
3848
3834
  N(t.greaterThan(0), () => {
3849
- let n = Ja(A, i, at(t.sub(.001), z(1e3)).toVar(), l, xi, v, y, b);
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 = Di(x, w, T, C, S, E, D, e, i).toVar(), o = a.xyz.toVar(), s = a.w.toVar();
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(Ua({
3857
+ N(e.greaterThan(0).and(Va({
3872
3858
  direction: o,
3873
3859
  surfaceNormal: t
3874
3860
  })), () => {
3875
- let a = Ja(A, o, z(1e3), l, xi, v, y, b);
3861
+ let a = Ka(A, o, z(1e3), l, yi, v, y, b);
3876
3862
  N(a.greaterThan(0), () => {
3877
- let c = ka(r, o, t, n), l = oo(r, o, t, n).toVar(), u = W(l.greaterThan(0), Xr({
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
- }), co = M(([e, t, n, r, i, a]) => {
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 = ea(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();
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
- }), lo = M(([e, t, n, r]) => {
3880
+ }), so = M(([e, t, n, r]) => {
3895
3881
  let i = e.add(t).toVar(), a = R(i, i).toVar();
3896
- return sa(V(R(n, W(a.greaterThan(Vr), i.div(ht(a)), n).toVar()), 0).toVar(), V(R(n, e), 0).toVar(), r);
3897
- }), uo = M(([e, t, n, r, i]) => {
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
- }), fo = M(([e, t]) => {
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
- }), po = M(([e]) => V(e, 0).mul(zr)), mo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v]) => {
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(ha(t, e)), b.assign(n.color.xyz), x.assign(1), S.assign(1);
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(uo(l, s, n, _, v).toVar()), u = $t(c).toVar(), d = q($t(c).toVar(), $t(c).toVar()).toVar(), f = fo(o, u).toVar(), p = B(f.x).toVar();
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(ha(t, d)), h.assign(po(V(R(t, m), 0))), g.assign(ka(e, m, t, n));
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 = Sa.wrap(Ea(e, t, n.ior, n.roughness, r, n.dispersion, d, c).toVar());
3951
- m.assign(i.direction), h.assign(i.pdf), g.assign(ka(e, m, t, n));
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 = sa(V(R(t, U(e.add(m))), .001), V(R(t, e), .001), n.roughness);
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 = po(T).toVar();
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 = co(e, m, t, n.ior, n.roughness, r).toVar();
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 = lo(e, m, t, n.clearcoatRoughness).toVar();
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
- }), Ra({
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
- }), ho = Cr({
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
- }), go = Cr({
3974
+ }), mo = Cr({
3989
3975
  contribution: "vec3",
3990
3976
  hasEmissive: "bool",
3991
3977
  emissionOnly: "vec3",
3992
3978
  distance: "float"
3993
- }), _o = M(([e, t, n, r]) => {
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
- }), vo = M(([e, t, n]) => et(Ye(t.sub(e), n.sub(e))).mul(.5)), yo = M(([e, t, n, r]) => {
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
- }), bo = M(([e, t, n, r]) => {
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
- }), xo = Cr({
3991
+ }), yo = Cr({
4006
3992
  direction: "vec3",
4007
3993
  position: "vec3",
4008
3994
  solidAngle: "float",
4009
3995
  valid: "bool"
4010
- }), So = M(([e]) => {
3996
+ }), bo = M(([e]) => {
4011
3997
  let t = et(e);
4012
3998
  return W(t.greaterThan(1e-10), e.div(t), J(0));
4013
- }), Co = M(([e, t, n, r, i]) => {
4014
- let a = xo({
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 = yo(e, t, n, r);
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(So(Ye(o, s)), So(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 = So(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 = So(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);
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
- }), wo = M(([e, t, n, r]) => {
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
- }), To = M(([e, t, n, r]) => {
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
- }), Eo = M(([e]) => e.emissiveIntensity.greaterThan(0).and(et(e.emissive).greaterThan(0)));
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(Eo(e), () => {
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 Do = 8, Oo = 2, ko = Cr({
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
- }), Ao = M(([e, t]) => {
4052
- let n = $(t, e, B(0), B(Do)), r = $(t, e, B(1), B(Do)), i = $(t, e, B(2), B(Do)), a = $(t, e, B(3), B(Do)), o = $(t, e, B(4), B(Do)), s = $(t, e, B(5), B(Do)), c = $(t, e, B(7), B(Do));
4053
- return ko({
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
- }), jo = M(([e, t, n, r, i, a, o]) => {
4063
- let s = ko.wrap(Ao(e, i)), c = vo(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();
4064
- return N(bo(s.v0, s.v1, s.v2, r), () => {
4065
- let e = yo(s.v0, s.v1, s.v2, r);
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
- }), Mo = M(([e, t, n]) => {
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(Oo)).b;
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
- }), No = M(([e, t, n, r, i, a, o, s]) => {
4082
- let c = ho({
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 = Mo(i, a, $t(r)).toVar().mul(Oo), 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 = ko.wrap(Ao(d, s)), g = q($t(r).toVar(), $t(r).toVar()), _ = U(Ye(h.v1.sub(h.v0), h.v2.sub(h.v0)));
4095
- N(bo(h.v0, h.v1, h.v2, e), () => {
4096
- let n = xo.wrap(Co(h.v0, h.v1, h.v2, e, g));
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 = wo(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);
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 = _o(h.v0, h.v1, h.v2, g), r = To(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());
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
- }), Po = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m]) => {
4113
- let h = go({
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 = ho.wrap(No(e, t, i, o, c, l, u, d));
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 = oo(n, a.direction, t, r), c = W(o.greaterThan(0), Xr({
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
- }), Fo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m]) => go.wrap(Po(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m)).contribution), Io = 4, Lo = 2, Ro = 32, zo = M(([e, t, n, r, i, a]) => {
4137
- let o = ho({
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(Ro, () => {
4149
- let t = c.mul(B(Io)), i = r.element(t.add(B(1))), a = r.element(t.add(B(2)));
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(Io)), f = r.element(d), p = r.element(d.add(B(1))), m = u.mul(B(Io)), 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);
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(Io)), 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();
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(Lo)), r = V(i.element(n).g, z(0));
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(Lo)), b = i.element(y), x = i.element(y.add(B(1))), S = B(b.r), C = x.xyz, w = x.w, T = ko.wrap(Ao(S, a)), E = q($t(n).toVar(), $t(n).toVar()), D = U(Ye(T.v1.sub(T.v0), T.v2.sub(T.v0)));
4176
- N(bo(T.v0, T.v1, T.v2, e), () => {
4177
- let n = xo.wrap(Co(T.v0, T.v1, T.v2, e, E));
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 = wo(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)));
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 = _o(T.v0, T.v1, T.v2, E), r = To(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());
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
- }), Bo = 0, Vo = 1, Ho = 2, Uo = 3, Wo = Cr({
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
- }), Go = M(([e, t, n, r, i]) => {
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
- }), Ko = M(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
4206
- let p = J(0).toVar(), m = J(0).toVar(), h = z(0).toVar(), g = Mr.wrap(Go(n, r, o, s, c)).toVar(), _ = u.toVar();
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(ua(n, g, f));
4195
+ _.assign(ca(n, g, f));
4210
4196
  }).Else(() => {
4211
4197
  let e = Pr({
4212
- F0: $i(n.ior),
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(ua(n, g, e));
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(ma({
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(ka(e, p, t, n)), T.assign(I(!0));
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 = ga({
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(sa(o, E, n.roughness)), m.assign(ka(e, p, t, n)), T.assign(I(!0));
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(pa({
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(ma({
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(ka(e, p, t, n));
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(ta(r, n.sheenRoughness).mul(r).div(z(4).mul(a))), h.assign(V(h, Wr)), m.assign(ka(e, p, t, n));
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(pa({
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(sa(a, E, r)), h.assign(V(h, Wr)), m.assign(ka(e, p, t, n)), T.assign(I(!0));
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 = Sa.wrap(Ea(e, t, n.ior, n.roughness, r, n.dispersion, i, a));
4283
- p.assign(o.direction), h.assign(V(o.pdf, Wr)), m.assign(ka(e, p, t, n));
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
- }), qo = M(([e, t, n, r, i, a, o, s, c]) => {
4290
- let l = V(Jr({ v: e }), 0).toVar(), u = Mr.wrap(Go(n, r, i, a, o)).toVar(), d = u.complexityScore.toVar();
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
- }), Jo = M(([e, t, n, r, i, a, o, s, c, l, u, d, f]) => {
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(Go(n, r, o, s, c)).toVar(), g = h.complexityScore.toVar();
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(qo(t, i, n, r, o, s, c, d, f));
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
- }), Yo = M(([e, t, n, r, i, a, o, s]) => {
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 = Oi({
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
- }), Xo = /* @__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]), Zo = 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]) => {
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(Bo).toVar(), Pe = I(!0).toVar(), Fe = I(!1).toVar(), Ie = I(!1).toVar(), Le = I(!1).toVar();
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(bi(te, i, a, o)).toVar();
4406
+ }), P = Er.wrap(vi(te, i, a, o)).toVar();
4421
4407
  N(P.didHit.not(), () => {
4422
- let t = Yo(Pe, Ke, S, w, C, k, re, ne), n = z(1).toVar();
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 = Ei(S, Ke, w, D, O).w.toVar();
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(Xo({
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 = Gi.wrap(Ki(te, P, a, p, qe, e)).toVar();
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(Ri(s, c, l, u, d, f, qe, Je, P.normal)).toVar();
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 = ba.wrap(Oa(te, P.hitPoint, Ze, qe, t, Me, Qe, $e)).toVar();
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(Ho)), e.assign(I(!0)), N(tt.didReflect.not(), () => {
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(fa(Ze, rt, qe, Xe, Be)), Le.assign(I(!0));
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 = ja.wrap(Ma(te, P, qe, nt, t));
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(Ko(rt, Ze, qe, P.materialIndex, nt, t, Ie, ze, Be, Fe, Ue, Le, We));
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 = jo(P.triangleIndex, P.dst, Ke, Ge, a, o, de);
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(Xo({
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 = so(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);
4523
- _e.addAssign(Xo({
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]) => Ja(e, t, n, r, xi, i, a, o));
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 = ho.wrap(zo(P.hitPoint, Ze, t, fe, le, a));
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 = Ya(P.hitPoint, Ze, qe), s = P.hitPoint.add(o), c = i.distance.sub(.001), l = n(s, i.direction, c, t);
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 = ka(rt, i.direction, Ze, qe), n = oo(rt, i.direction, Ze, qe), o = W(n.greaterThan(0), Xr({
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(Xo({
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 = Fo(P.hitPoint, Ze, rt, qe, se, e, t, j, le, ue, de, a, n, ka, Ya);
4552
- _e.addAssign(Xo({
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(Go(qe, P.materialIndex, Ie, ze, Be))), Ie.assign(I(!0)), ze.assign(P.materialIndex);
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(da(qe, e, Be, C, A, k)), ct = Ra.wrap(mo(rt, Ze, qe, it, H, at, n, e, t, st, S, C, w, T, E, D, O, k, A));
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(Vo));
4550
+ Ne.assign(B(zo));
4565
4551
  }).ElseIf(qe.transmission.greaterThan(.5), () => {
4566
- Ne.assign(B(Ho));
4552
+ Ne.assign(B(Bo));
4567
4553
  }).Else(() => {
4568
- Ne.assign(B(Uo));
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 = Jo(e, ve, qe, P.materialIndex, Ke, t, Ie, ze, Be, Fe, Re, k, A);
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
- }), Wo({
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
- }), Qo = /* @__PURE__ */ X("\n fn visualizeDepth( depth: f32 ) -> vec3f {\n return vec3f( 1.0f - depth );\n }\n"), $o = /* @__PURE__ */ X("\n fn visualizeNormal( normal: vec3f ) -> vec3f {\n return normal * 0.5f + 0.5f;\n }\n"), es = /* @__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"), ts = M(([e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g, _, v, y, b, x]) => {
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(bi(C, n, r, i).toVar());
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 = Oi({
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(Ri(p, m, h, g, _, v, t, w.uv, w.normal)).toVar().emissive.toVar(), r = et(n).toVar();
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(Ri(p, m, h, g, _, v, e, w.uv, w.normal)).toVar().normal);
4645
- S.assign(Y($o({ normal: t }), 1));
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 = es({
4637
+ let e = Qo({
4652
4638
  worldPos: w.hitPoint,
4653
4639
  cameraProjectionMatrix: y,
4654
4640
  cameraViewMatrix: b
4655
4641
  });
4656
- S.assign(Y(Qo({ depth: e }), 1));
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(Ri(p, m, h, g, _, v, e, w.uv, w.normal)).toVar().albedo.rgb;
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(Ri(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 = ha({
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(bi(b, n, r, i).toVar()), T = J(0).toVar();
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(Oi({
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(Ri(p, m, h, g, _, v, e, C.uv, C.normal)).toVar();
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 = Oi({
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 = Oi({
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 = Oi({
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 ns = /* @__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"), rs = M(([e, t, n, r, i]) => {
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
- }), is = (e) => {
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 = rs(t, a, Me, Ne, Pe);
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(Si(s, n, l, u, Fe, Ie, Le, Re, ze, Be, He)), Te = Y(0).toVar();
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(ts(we.origin, we.direction, p, m, h, ee, ne, te, se, c, Ce, t, a, g, _, v, y, b, x, f, d, o));
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 = Wo.wrap(Zo(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));
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(ns({
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
- }, as = class {
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
- }, os = 8, ss = class {
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 as("setupCompute");
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 / os), this._dispatchY = Math.ceil(o / os), this.renderWidth.value = a, this.renderHeight.value = o;
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 / os), this._dispatchY = Math.ceil(t / os), this.computeNode && this.computeNode.setCount([
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 / os), a = Math.ceil(r / os);
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, c = vt(e.environment.environmentTexture), l = new o();
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(os)).add(B(nt.x)), O = S.add(B(Dt.y).mul(os)).add(B(nt.y));
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
- is({
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
- os,
4989
- os,
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
- }, cs = class {
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 ls();
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 ls();
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
- }, ls = class {
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
- }, us = class {
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
- }, ds = {
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
- }, fs = ds.FLOATS_PER_TRIANGLE, ps = class {
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
- }, ms = class {
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 = ds.POSITION_A_OFFSET, r = ds.POSITION_B_OFFSET, i = ds.POSITION_C_OFFSET;
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 * fs, 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;
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 / (fs * 4), this.processedTriangles = 0, this.lastProgressUpdate = performance.now(), this.useWorker && typeof Worker < "u" ? new Promise((r, i) => {
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 * fs * 4) : null;
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 / (fs * 4), this.lastProgressUpdate = performance.now(), this.splitStats = {
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 cs(this.traversalCost, this.intersectionCost);
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 us(this.traversalCost, this.intersectionCost);
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 * fs);
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] * fs, n = e * fs;
5626
- f.set(d.subarray(t, t + fs), n);
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 ps();
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 ps();
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
- }, hs = {
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
- }, gs = hs.FLOATS_PER_TRIANGLE, _s = 16, vs = -1, ys = -2, bs = class {
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 * gs, 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];
5997
- e[a + hs.POSITION_A_OFFSET] = s, e[a + hs.POSITION_A_OFFSET + 1] = c, e[a + hs.POSITION_A_OFFSET + 2] = l, e[a + hs.POSITION_B_OFFSET] = u, e[a + hs.POSITION_B_OFFSET + 1] = d, e[a + hs.POSITION_B_OFFSET + 2] = f, e[a + hs.POSITION_C_OFFSET] = p, e[a + hs.POSITION_C_OFFSET + 1] = m, e[a + hs.POSITION_C_OFFSET + 2] = h;
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 + hs.NORMAL_A_OFFSET] = S, e[a + hs.NORMAL_A_OFFSET + 1] = C, e[a + hs.NORMAL_A_OFFSET + 2] = w, e[a + hs.NORMAL_B_OFFSET] = S, e[a + hs.NORMAL_B_OFFSET + 1] = C, e[a + hs.NORMAL_B_OFFSET + 2] = w, e[a + hs.NORMAL_C_OFFSET] = S, e[a + hs.NORMAL_C_OFFSET + 1] = C, e[a + hs.NORMAL_C_OFFSET + 2] = w;
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 * _s, o = (r - n) * 6;
6007
- if (e[a + 3] === vs) {
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) * gs, i = t[r + hs.POSITION_A_OFFSET], a = t[r + hs.POSITION_A_OFFSET + 1], o = t[r + hs.POSITION_A_OFFSET + 2], p = t[r + hs.POSITION_B_OFFSET], m = t[r + hs.POSITION_B_OFFSET + 1], h = t[r + hs.POSITION_B_OFFSET + 2], g = t[r + hs.POSITION_C_OFFSET], _ = t[r + hs.POSITION_C_OFFSET + 1], v = t[r + hs.POSITION_C_OFFSET + 2];
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 * _s, a = i * 6, o = e[n + 3];
6025
- if (o === vs) {
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) * gs, r = t[n + hs.POSITION_A_OFFSET], a = t[n + hs.POSITION_A_OFFSET + 1], o = t[n + hs.POSITION_A_OFFSET + 2], p = t[n + hs.POSITION_B_OFFSET], m = t[n + hs.POSITION_B_OFFSET + 1], h = t[n + hs.POSITION_B_OFFSET + 2], g = t[n + hs.POSITION_C_OFFSET], _ = t[n + hs.POSITION_C_OFFSET + 1], v = t[n + hs.POSITION_C_OFFSET + 2];
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 === ys) {
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
- }, xs = 32, Ss = 5e4, Cs = 8;
6042
- function ws(e, t, n, r) {
6043
- let i = e.byteLength / (xs * 4), a = Math.min(navigator.hardwareConcurrency || 4, Cs), o = Math.ceil(Math.log2(a * 2.5 + 1));
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 * xs * 4), h = new Worker(new URL(
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(Es(new Float32Array(i), t, n, r));
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, Ts(t, a, c, l, u, d, f, m, i, n, h, _, b, x, s, v, r);
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 Ts(e, t, n, r, i, a, o, s, c, l, u, d, f, p, m, h, g) {
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 Es(e, t, n, r) {
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 / (xs * 4), c = typeof SharedArrayBuffer < "u" ? new SharedArrayBuffer(s * xs * 4) : null;
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 Ds(e) {
6257
- return typeof Worker < "u" && typeof SharedArrayBuffer < "u" && e >= Ss;
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 Os = 16, ks = class {
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
- }, As = class {
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 ks();
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 * Os;
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 * Os;
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
- }, js = class {
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
- }, Ms = class {
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
- }, Ns = class {
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
- }, Ps = class {
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
- }, Fs = class {
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 Ms(), this.bufferPool = new Ns({
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 Ps(), this.capabilities = this.detectCapabilities(), this.optimalMethod = this.selectOptimalMethod();
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 Ps();
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
- }, Is = 128, Ls = class {
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, e);
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, t = null) {
7053
- let n = this._materialUuidMap.get(e.uuid) ?? -1;
7054
- if (n === -1) {
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 r = this.createMaterialObject(e, t);
7057
- this.materials.push(r), n = this.materials.length - 1, this._materialUuidMap.set(e.uuid, n), r.clearcoat > 0 && (this.sceneFeatures.hasClearcoat = !0), r.transmission > 0 && (this.sceneFeatures.hasTransmission = !0), r.dispersion > 0 && (this.sceneFeatures.hasDispersion = !0), r.iridescence > 0 && (this.sceneFeatures.hasIridescence = !0), r.sheen > 0 && (this.sceneFeatures.hasSheen = !0), (r.transparent || r.opacity < 1 || r.alphaTest > 0) && (this.sceneFeatures.hasTransparency = !0), [
7058
- r.clearcoat > 0,
7059
- r.transmission > 0,
7060
- r.iridescence > 0,
7061
- r.sheen > 0
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 n;
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, t = null) {
7136
- let n = this.getPhysicalDefaults(), r = this.getMaterialType(e), i = this.mapLegacyMaterialToPhysical(e, r), a = (e.metalness ?? i.metalness ?? 0) > .1, o = n.ior;
7137
- a ? o = 2.5 : e.transmission > 0 && (o = 1.5);
7138
- let s = e.color || new v(16777215);
7139
- return r === "basic" && !e.map && (s = new v(0)), {
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: s,
7142
- emissive: i.emissive ?? e.emissive ?? n.emissive,
7143
- emissiveIntensity: i.emissiveIntensity ?? e.emissiveIntensity ?? n.emissiveIntensity,
7144
- roughness: Math.max(.05, i.roughness ?? e.roughness ?? n.roughness),
7145
- metalness: i.metalness ?? e.metalness ?? n.metalness,
7146
- ior: e.ior ?? o,
7147
- opacity: e.opacity ?? n.opacity,
7148
- transmission: e.transmission ?? n.transmission,
7149
- thickness: e.thickness ?? n.thickness,
7150
- attenuationColor: e.attenuationColor ?? n.attenuationColor,
7151
- attenuationDistance: e.attenuationDistance ?? n.attenuationDistance,
7152
- dispersion: e.dispersion ?? n.dispersion,
7153
- sheen: e.sheen ?? n.sheen,
7154
- sheenRoughness: e.sheenRoughness ?? n.sheenRoughness,
7155
- sheenColor: e.sheenColor ?? n.sheenColor,
7156
- clearcoat: e.clearcoat ?? n.clearcoat,
7157
- clearcoatRoughness: e.clearcoatRoughness ?? n.clearcoatRoughness,
7158
- iridescence: e.iridescence ?? n.iridescence,
7159
- iridescenceIOR: e.iridescenceIOR ?? n.iridescenceIOR,
7160
- iridescenceThicknessRange: e.iridescenceThicknessRange ?? n.iridescenceThicknessRange,
7161
- specularIntensity: i.specularIntensity ?? e.specularIntensity ?? n.specularIntensity,
7162
- specularColor: i.specularColor ?? e.specularColor ?? n.specularColor,
7163
- normalScale: e.normalScale ?? n.normalScale,
7164
- bumpScale: e.bumpScale ?? n.bumpScale,
7165
- displacementScale: e.displacementScale ?? n.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 ?? n.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: r
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 < Is) {
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, e);
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
- }, Rs = class {
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
- }, zs = class {
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 ((s.visible === void 0 || s.visible !== 0) && l > 0 && (c.r > 0 || c.g > 0 || c.b > 0)) {
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 = (t.visible === void 0 || t.visible !== 0) && o > 0 && (a.r > 0 || a.g > 0 || a.b > 0);
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 Rs().build(this.emissiveTriangles);
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
- }, Bs = class {
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 Ls(), this.bvhBuilder = new ms(), this.bvhBuilder.maxLeafSize = this.config.maxLeafSize, this.bvhBuilder.setTreeletConfig({
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 Fs(), this.emissiveTriangleBuilder = new zs(), this.tlasBuilder = new As();
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 as(`SceneProcessor (${e.name || "scene"})`);
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 js(), this.instanceTable.allocate(n.length);
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 && Ds(t.count) ? o.push({
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 }) => ws(this.triangleData.slice(n.start * t, (n.start + n.count) * t), this.config.bvhDepth, null, {
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 bs();
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" ? r.emissiveIntensity = n : t === "visible" && (r.visible = n), !this.emissiveTriangleBuilder.updateMaterialEmissive(e, r, this.triangleData, this.materials, this.triangleCount)) ? null : {
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
- }, Vs = class {
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
- }, Hs = "https://assets.rayzee.atulmourya.com/noise/simple_bluenoise.png", Us = 4, Ws = class extends pn {
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 Bs(), this.lightSerializer = new Vs(), 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 ss(), 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();
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.adaptiveSamplingTexture = null, this.spheres = [];
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(Hs, (e) => {
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 / Us), console.log(`PathTracer: ${this.bvhNodeCount} BVH nodes (storage buffer)`);
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
- }, Gs = class extends pn {
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(bi(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)));
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
- }, Ks = class extends pn {
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 qs(e, t, n = {}) {
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 Js = class extends pn {
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 = qs(this.renderer, this.heatmapTarget, {
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
- }, Ys = /* @__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"), Xs = class extends pn {
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(_)), Ys(u, d.x, d.y, r, o, i)).toWriteOnly();
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
- }, Zs = /* @__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"), Qs = class extends pn {
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 = Zs(v, Yr(T), g, D, _, O, m, T, z(S), o, i, a, r);
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
- }, $s = /* @__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"), ec = /* @__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"), tc = class extends pn {
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 = qs(this.renderer, this.heatmapTarget, {
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 = $s(s.z, s.w, s.x, t, B(i), B(a), o, n, r);
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 = ec(n.x.clamp(0, 1), n.y, n.z);
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
- }, nc = class extends pn {
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
- }, rc = /* @__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"), ic = class extends pn {
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 = rc(u, l, n, r, i, a, o, s, c);
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 ac({ 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 }) {
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 oc({ colorTexNode: e, ndTexNode: t, readCacheTexNode: n, outputTex: r, resW: i, resH: a, spatialRadius: o, spatialWeight: s, phiNormal: c, phiDepth: l }) {
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 sc = class extends pn {
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 = ac({
9796
+ }, t = rc({
9776
9797
  ...e,
9777
9798
  writeCacheTex: this._cacheTexA,
9778
9799
  writePrevNDTex: this._prevNDTexA,
9779
9800
  framesSinceReset: this._framesSinceReset
9780
- }), n = ac({
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 = oc({
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
- }, cc = class extends pn {
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
- }, lc = class {
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
- }, uc = class extends E {
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
- }, dc = class {
10018
+ }, lc = class {
9998
10019
  constructor(e, t, n) {
9999
- this.renderer = e, this.width = t, this.height = n, this.stages = [], this.context = new lc(), this.eventBus = new uc(), this.context.setState("width", t), this.context.setState("height", n), this.stats = {
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
- }, fc = class {
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
- }, pc = class extends E {
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
- }, mc = {
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
- }, hc = class extends E {
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 mc[e.split(".").pop().toLowerCase()] || null;
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 (mc[n] && mc[n].type === "model") return console.log(`Loading model file from ZIP: ${t}`), await this.loadModelFromZipEntry(e[t], t, n, e);
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 as("onModelLoad");
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(mc)) r.type === e && (t[n] = r);
11166
+ for (let [n, r] of Object.entries(fc)) r.type === e && (t[n] = r);
11146
11167
  return t;
11147
11168
  }
11148
- return mc;
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
- }, gc = {
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
- }, _c = {
11288
+ }, hc = {
11268
11289
  bounces: "maxBounces",
11269
11290
  adaptiveSampling: "useAdaptiveSampling",
11270
11291
  debugMode: "visMode"
11271
- }, vc = class extends E {
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 = gc[e];
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 = gc[r];
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 = gc[e];
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(gc)) t in e && this._values.set(t, e[t]);
11354
- for (let [t, n] of Object.entries(_c)) t in e && this._values.set(n, e[t]);
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
- }, yc = class extends E {
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
- }, bc = class extends E {
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
- }, xc = (e) => Math.min(Math.max(e, 0), 1);
11623
- function Sc(e, t, n, r, i) {
11624
- i[0] = xc(e), i[1] = xc(t), i[2] = xc(n);
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 Cc(e, t, n, r, i) {
11627
- i[0] = xc(e * r), i[1] = xc(t * r), i[2] = xc(n * r);
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 wc(e, t, n, r, i) {
11630
- e *= r, t *= r, n *= r, i[0] = xc(e / (e + 1)), i[1] = xc(t / (t + 1)), i[2] = xc(n / (n + 1));
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 Tc(e, t, n, r, i) {
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 Ec(e, t, n, r, i) {
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] = xc(1.60475 * a - .53108 * o - .07367 * s), i[1] = xc(-.10208 * a + 1.10813 * o - .00605 * s), i[2] = xc(-.00327 * a - .07276 * o + 1.07602 * s);
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 Dc(e, t, n, r, i) {
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 = xc((Math.log2(Math.max(c, 1e-10)) - d) / f), l = xc((Math.log2(Math.max(l, 1e-10)) - d) / f), u = xc((Math.log2(Math.max(u, 1e-10)) - d) / f);
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] = xc(1.6605 * m - .5876 * h - .0728 * g), i[1] = xc(-.1246 * m + 1.1329 * h - .0083 * g), i[2] = xc(-.0182 * m - .1006 * h + 1.1187 * g);
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 Oc(e, t, n, r, i) {
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 kc = new Map([
11670
- [me, Sc],
11671
- [te, Cc],
11672
- [Te, wc],
11673
- [h, Tc],
11674
- [c, Ec],
11675
- [u, Dc],
11676
- [fe, Oc]
11677
- ]), Ac = 1 / 2.2, jc = .2126, Mc = .7152, Nc = .0722;
11678
- function Pc(e, t) {
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] * jc + e[1] * Mc + e[2] * Nc;
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 Fc = null;
11686
- async function Ic() {
11687
- return Fc ||= (await import("oidn-web")).initUNetFromURL, Fc;
11706
+ var Nc = null;
11707
+ async function Pc() {
11708
+ return Nc ||= (await import("oidn-web")).initUNetFromURL, Nc;
11688
11709
  }
11689
- var Lc = new Float32Array(3), Rc = {
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
- }, zc = class extends E {
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
- ...Rc.DEFAULT_OPTIONS,
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 Ic())(e, t, {
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 } = Rc;
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(Rc.QUALITY_SUFFIXES, e)) throw Error(`Invalid quality setting: ${e}. Must be one of: ${Object.keys(Rc.QUALITY_SUFFIXES).join(", ")}`);
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 = kc.get(this.getToneMapping()) || kc.get(c), l = this._cachedAlpha, u = this._cachedAlphaWidth;
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 && (Lc[0] = c, Lc[1] = d, Lc[2] = f, Pc(Lc, i), c = Lc[0], d = Lc[1], f = Lc[2]), a(c, d, f, 1, Lc), t.data[s] = Lc[0] ** Ac * 255 | 0, t.data[s + 1] = Lc[1] ** Ac * 255 | 0, t.data[s + 2] = Lc[2] ** Ac * 255 | 0, l) {
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 = kc.get(this.getToneMapping()) || kc.get(c), p = this._cachedAlpha;
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 && (Lc[0] = t, Lc[1] = n, Lc[2] = r, Pc(Lc, d), t = Lc[0], n = Lc[1], r = Lc[2]), f(t, n, r, 1, Lc), l.data[e] = Lc[0] ** Ac * 255 | 0, l.data[e + 1] = Lc[1] ** Ac * 255 | 0, l.data[e + 2] = Lc[2] ** Ac * 255 | 0, l.data[e + 3] = p ? p[e >> 2] : 255;
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: qs(this.renderer, e, {
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: qs(this.renderer, e, {
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
- }, Bc = "https://huggingface.co/notaneimu/onnx-image-models/resolve/main/", Vc = {
12060
+ }, Rc = "https://huggingface.co/notaneimu/onnx-image-models/resolve/main/", zc = {
12040
12061
  QUALITY_PRESETS: {
12041
12062
  fast: {
12042
- 2: Bc + "2x-spanx2-ch48.onnx",
12043
- 4: Bc + "4xNomos8k_span_otf_strong_fp32_opset17.onnx"
12063
+ 2: Rc + "2x-spanx2-ch48.onnx",
12064
+ 4: Rc + "4xNomos8k_span_otf_strong_fp32_opset17.onnx"
12044
12065
  },
12045
12066
  balanced: {
12046
- 2: Bc + "2xNomosUni_compact_otf_medium.onnx",
12047
- 4: Bc + "RealESRGAN_x4plus.onnx"
12067
+ 2: Rc + "2xNomosUni_compact_otf_medium.onnx",
12068
+ 4: Rc + "RealESRGAN_x4plus.onnx"
12048
12069
  },
12049
12070
  quality: {
12050
- 2: Bc + "2x-realesrgan-x2plus.onnx",
12051
- 4: Bc + "4xNomos2_hq_mosr_fp32.onnx"
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
- }, Hc = class extends E {
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 || Vc.TILE_SIZE, this._tileSizeOverride = !!n.tileSize, this.state = {
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 = Vc.QUALITY_PRESETS[this.quality];
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: Vc.SESSION_OPTIONS
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 = kc.get(this.getToneMapping()) || kc.get(c), this._hdrExposure = this.getExposure(), this._hdrSaturation = this.getSaturation(), this._tmOut = new Float32Array(3));
12162
- let o = Vc.TILE_OVERLAP, s = this.tileSize, l = s - o * 2, u = Math.ceil(n / l), d = Math.ceil(r / l), f = u * d, p = 0;
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, Pc(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] ** +Ac, l[c + d] = this._tmOut[1] ** +Ac, l[2 * c + d] = this._tmOut[2] ** +Ac;
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 = kc.get(this.getToneMapping()) || kc.get(c), l = this.getExposure(), u = this.getSaturation(), d = new Float32Array(3);
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, Pc(d, u), r = d[0], i = d[1], a = d[2]), s(r, i, a, 1, d), o[t] = d[0] ** +Ac * 255 + .5 | 0, o[t + 1] = d[1] ** +Ac * 255 + .5 | 0, o[t + 2] = d[2] ** +Ac * 255 + .5 | 0, o[t + 3] = 255;
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 (!Vc.QUALITY_PRESETS[e]) {
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
- }, Uc = class extends E {
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 zc(this.denoiserCanvas, this.renderer, this.scene, this.camera, {
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 Hc(this.denoiserCanvas, this.renderer, {
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
- }, Wc = class {
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
- }, Gc = class {
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
- }, Kc = class {
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 Wc();
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 Gc(this.renderer, t, this.camera);
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
- }, qc = class extends E {
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
- }, Jc = class {
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
- }, Yc = class extends E {
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 vc(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 qc(), 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 fc(), this._resizeDebounceTimer = null;
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 as("loadSceneData"), t = this.meshScene.environment, n = null;
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 yc(this.canvas);
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 Bs(), this.assetLoader = new hc(this.meshScene, this.cameraManager.camera, this.cameraManager.controls), this.assetLoader.createFloorPlane(), this.cameraManager.controls.addEventListener("change", () => {
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 dc(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);
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 pc({
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 bc(this.scene, this._sceneHelpers, this.stages.pathTracer, { onReset: () => this.reset() }), this._setupDenoisingManager(), this._setupOverlayManager(), this.transformManager = new Jc({
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 Ws(this.renderer, this.scene, this.cameraManager.camera), this.stages.normalDepth = new Gs(this.renderer, { pathTracer: this.stages.pathTracer }), this.stages.motionVector = new Ks(this.renderer, this.cameraManager.camera, { pathTracer: this.stages.pathTracer }), this.stages.ssrc = new sc(this.renderer, { enabled: !1 }), this.stages.asvgf = new Js(this.renderer, { enabled: !1 }), this.stages.variance = new Xs(this.renderer, { enabled: !1 }), this.stages.bilateralFilter = new Qs(this.renderer, { enabled: !1 }), this.stages.adaptiveSampling = new tc(this.renderer, {
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 nc(this.renderer, { enabled: !1 }), this.stages.autoExposure = new ic(this.renderer, { enabled: Z.autoExposure ?? !1 }), this.stages.display = new cc(this.renderer, {
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 Uc({
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 Kc(this.renderer, this.cameraManager.camera), this.overlayManager.setupDefaultHelpers({
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
- }, Xc = class {
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, qc as AnimationManager, Rn as BVH_LEAF_MARKERS, Fn as CAMERA_PRESETS, Nn as CAMERA_RANGES, yc as CameraManager, Bn as DEFAULT_TEXTURE_MATRIX, Uc as DenoisingManager, Z as ENGINE_DEFAULTS, gn as EngineEvents, Vn as FINAL_RENDER_CONFIG, pc as InteractionManager, bc as LightManager, Un as MEMORY_CONSTANTS, Kc as OverlayManager, Hn as PREVIEW_RENDER_CONFIG, Yc as PathTracerApp, lc as PipelineContext, dc as RenderPipeline, vc as RenderSettings, pn as RenderStage, Pn as SKY_PRESETS, fn as StageExecutionMode, zn as TEXTURE_CONSTANTS, Q as TRIANGLE_DATA_LAYOUT, Jc as TransformManager, Xc as VideoRenderManager };
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