@d5techs/3dgs-lib 1.4.55 → 1.4.56
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/3dgs-lib.cjs +23 -21
- package/dist/3dgs-lib.cjs.map +1 -1
- package/dist/3dgs-lib.js +23 -21
- package/dist/3dgs-lib.js.map +1 -1
- package/dist/core/SkyboxRenderer.d.ts +1 -1
- package/package.json +1 -1
package/dist/3dgs-lib.cjs
CHANGED
|
@@ -2244,33 +2244,35 @@ fn dirToUv(d: vec3<f32>) -> vec2<f32> {
|
|
|
2244
2244
|
// --- sky UV (always computed) ---
|
|
2245
2245
|
let skyUv = dirToUv(d);
|
|
2246
2246
|
|
|
2247
|
-
// --- ground projection
|
|
2248
|
-
//
|
|
2249
|
-
let
|
|
2250
|
-
let t = -camY /
|
|
2247
|
+
// --- ground projection (always computed for uniform control flow) ---
|
|
2248
|
+
// Ray from camera (0, camY, 0) in direction d hits plane y=0 at t
|
|
2249
|
+
let dyClamped = min(d.y, -0.0001);
|
|
2250
|
+
let t = -camY / dyClamped;
|
|
2251
2251
|
let hitX = t * d.x;
|
|
2252
2252
|
let hitZ = t * d.z;
|
|
2253
|
-
let
|
|
2254
|
-
|
|
2255
|
-
//
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
let
|
|
2259
|
-
let
|
|
2260
|
-
|
|
2261
|
-
let
|
|
2262
|
-
let groundDir = normalize(vec3(pX,
|
|
2253
|
+
let hitDist = sqrt(hitX * hitX + hitZ * hitZ);
|
|
2254
|
+
|
|
2255
|
+
// Project the ground hit point back onto a sphere of radius R
|
|
2256
|
+
// centered at the camera projection on y=0 (i.e. center = origin).
|
|
2257
|
+
// For points beyond R, fade to horizon sampling.
|
|
2258
|
+
let ratio = min(hitDist, sphereR) / max(hitDist, 0.001);
|
|
2259
|
+
let pX = hitX * ratio;
|
|
2260
|
+
let pZ = hitZ * ratio;
|
|
2261
|
+
let pY = -sqrt(max(sphereR * sphereR - pX * pX - pZ * pZ, 0.0));
|
|
2262
|
+
let groundDir = normalize(vec3(pX, pY, pZ));
|
|
2263
2263
|
let groundUv = dirToUv(groundDir);
|
|
2264
2264
|
|
|
2265
2265
|
// --- sample both (unconditional = uniform control flow) ---
|
|
2266
2266
|
let skyColor = textureSample(envTexture, envSampler, skyUv).rgb;
|
|
2267
2267
|
let groundColor = textureSample(envTexture, envSampler, groundUv).rgb;
|
|
2268
2268
|
|
|
2269
|
-
//
|
|
2270
|
-
|
|
2271
|
-
let
|
|
2272
|
-
|
|
2273
|
-
let
|
|
2269
|
+
// Blend: smooth transition near horizon
|
|
2270
|
+
// step(0.01, camY) disables ground projection when camera is at/below ground
|
|
2271
|
+
let groundFactor = smoothstep(0.01, -0.15, d.y) * step(0.01, camY);
|
|
2272
|
+
// Fade out ground color at the sphere edge to avoid hard seam
|
|
2273
|
+
let edgeFade = 1.0 - smoothstep(sphereR * 0.7, sphereR * 0.99, hitDist);
|
|
2274
|
+
let finalBlend = groundFactor * edgeFade;
|
|
2275
|
+
let c = mix(skyColor, groundColor, finalBlend);
|
|
2274
2276
|
|
|
2275
2277
|
// Reinhard tone mapping + gamma
|
|
2276
2278
|
let mapped = c / (c + vec3(1.));
|
|
@@ -2292,8 +2294,8 @@ class SkyboxRenderer {
|
|
|
2292
2294
|
__publicField(this, "bindGroup", null);
|
|
2293
2295
|
__publicField(this, "frameReady", false);
|
|
2294
2296
|
__publicField(this, "mode", "none");
|
|
2295
|
-
/** Ground projection sphere radius (world units). Larger = ground extends further. */
|
|
2296
|
-
__publicField(this, "groundRadius",
|
|
2297
|
+
/** Ground projection sphere radius (world units). Larger = ground extends further, flatter. */
|
|
2298
|
+
__publicField(this, "groundRadius", 500);
|
|
2297
2299
|
this.device = device;
|
|
2298
2300
|
const depthStencil = {
|
|
2299
2301
|
format: depthFormat,
|