@d5techs/3dgs-lib 1.4.59 → 1.4.61
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 +34 -31
- package/dist/3dgs-lib.cjs.map +1 -1
- package/dist/3dgs-lib.js +34 -31
- package/dist/3dgs-lib.js.map +1 -1
- package/package.json +1 -1
package/dist/3dgs-lib.cjs
CHANGED
|
@@ -2217,7 +2217,7 @@ struct V { @builtin(position) pos: vec4<f32>, @location(0) dir: vec3<f32> };
|
|
|
2217
2217
|
const EQUIRECT_WGSL = (
|
|
2218
2218
|
/* wgsl */
|
|
2219
2219
|
`
|
|
2220
|
-
struct Uniforms { col0: vec4<f32>, col1: vec4<f32>, col2: vec4<f32>,
|
|
2220
|
+
struct Uniforms { col0: vec4<f32>, col1: vec4<f32>, col2: vec4<f32>, cam: vec4<f32> };
|
|
2221
2221
|
@group(0) @binding(0) var<uniform> u: Uniforms;
|
|
2222
2222
|
@group(0) @binding(1) var envSampler: sampler;
|
|
2223
2223
|
@group(0) @binding(2) var envTexture: texture_2d<f32>;
|
|
@@ -2237,43 +2237,46 @@ fn dirToUv(d: vec3<f32>) -> vec2<f32> {
|
|
|
2237
2237
|
}
|
|
2238
2238
|
|
|
2239
2239
|
@fragment fn fs(i: V) -> @location(0) vec4<f32> {
|
|
2240
|
-
let d
|
|
2241
|
-
let
|
|
2242
|
-
let
|
|
2240
|
+
let d = normalize(i.dir);
|
|
2241
|
+
let cx = u.cam.x;
|
|
2242
|
+
let cy = u.cam.y;
|
|
2243
|
+
let cz = u.cam.z;
|
|
2244
|
+
let R = u.cam.w;
|
|
2243
2245
|
|
|
2244
|
-
// --- sky
|
|
2246
|
+
// --- sky (always computed for uniform control flow) ---
|
|
2245
2247
|
let skyUv = dirToUv(d);
|
|
2246
2248
|
|
|
2247
|
-
// ---
|
|
2248
|
-
// Ray from camera at height camH above ground, direction d,
|
|
2249
|
-
// hits ground plane at t = -camH / d.y
|
|
2249
|
+
// --- ground: ray from camera hits Y=0 plane ---
|
|
2250
2250
|
let dyClamped = min(d.y, -0.0001);
|
|
2251
|
-
let t = -
|
|
2252
|
-
|
|
2253
|
-
let
|
|
2254
|
-
let
|
|
2251
|
+
let t = -cy / dyClamped;
|
|
2252
|
+
// Hit point in WORLD space (not camera-relative)
|
|
2253
|
+
let wx = cx + t * d.x;
|
|
2254
|
+
let wz = cz + t * d.z;
|
|
2255
|
+
let wDist = sqrt(wx * wx + wz * wz);
|
|
2255
2256
|
|
|
2256
|
-
//
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
let
|
|
2260
|
-
|
|
2261
|
-
let
|
|
2257
|
+
// Clamp inside the bowl radius (centered at world origin)
|
|
2258
|
+
let s = min(1.0, R * 0.999 / max(wDist, 0.001));
|
|
2259
|
+
let bx = wx * s;
|
|
2260
|
+
let bz = wz * s;
|
|
2261
|
+
// Inverted bowl: y = -sqrt(R² - x² - z²)
|
|
2262
|
+
let bowlY = -sqrt(max(R * R - bx * bx - bz * bz, 0.0));
|
|
2263
|
+
let groundDir = normalize(vec3(bx, bowlY, bz));
|
|
2264
|
+
let groundUv = dirToUv(groundDir);
|
|
2262
2265
|
|
|
2263
|
-
// --- sample both
|
|
2264
|
-
let skyColor
|
|
2266
|
+
// --- sample both (uniform control flow) ---
|
|
2267
|
+
let skyColor = textureSample(envTexture, envSampler, skyUv).rgb;
|
|
2265
2268
|
let groundColor = textureSample(envTexture, envSampler, groundUv).rgb;
|
|
2266
2269
|
|
|
2267
|
-
// Blend:
|
|
2268
|
-
let horizonBlend = smoothstep(0.0, -0.
|
|
2269
|
-
let aboveGround
|
|
2270
|
-
let edgeFade
|
|
2271
|
-
let finalBlend
|
|
2270
|
+
// Blend: horizon transition + fade at bowl edge
|
|
2271
|
+
let horizonBlend = smoothstep(0.0, -0.08, d.y);
|
|
2272
|
+
let aboveGround = step(0.01, cy);
|
|
2273
|
+
let edgeFade = 1.0 - smoothstep(R * 0.7, R, wDist);
|
|
2274
|
+
let finalBlend = horizonBlend * aboveGround * edgeFade;
|
|
2272
2275
|
let c = mix(skyColor, groundColor, finalBlend);
|
|
2273
2276
|
|
|
2274
2277
|
// Reinhard tone mapping + gamma
|
|
2275
2278
|
let mapped = c / (c + vec3(1.));
|
|
2276
|
-
let gamma
|
|
2279
|
+
let gamma = pow(mapped, vec3(1./2.2));
|
|
2277
2280
|
return vec4(gamma, 1.);
|
|
2278
2281
|
}`
|
|
2279
2282
|
);
|
|
@@ -2292,7 +2295,7 @@ class SkyboxRenderer {
|
|
|
2292
2295
|
__publicField(this, "frameReady", false);
|
|
2293
2296
|
__publicField(this, "mode", "none");
|
|
2294
2297
|
/** Ground projection sphere radius (world units). Larger = ground extends further, flatter. */
|
|
2295
|
-
__publicField(this, "groundRadius",
|
|
2298
|
+
__publicField(this, "groundRadius", 100);
|
|
2296
2299
|
this.device = device;
|
|
2297
2300
|
const depthStencil = {
|
|
2298
2301
|
format: depthFormat,
|
|
@@ -2429,10 +2432,10 @@ class SkyboxRenderer {
|
|
|
2429
2432
|
ud[9] = viewMatrix[9];
|
|
2430
2433
|
ud[10] = viewMatrix[10];
|
|
2431
2434
|
ud[11] = 0;
|
|
2432
|
-
ud[12] = cameraPosition ? cameraPosition[
|
|
2433
|
-
ud[13] =
|
|
2434
|
-
ud[14] = 0;
|
|
2435
|
-
ud[15] =
|
|
2435
|
+
ud[12] = cameraPosition ? cameraPosition[0] : 0;
|
|
2436
|
+
ud[13] = cameraPosition ? cameraPosition[1] : 0;
|
|
2437
|
+
ud[14] = cameraPosition ? cameraPosition[2] : 0;
|
|
2438
|
+
ud[15] = this.groundRadius;
|
|
2436
2439
|
this.device.queue.writeBuffer(this.uniformBuffer, 0, ud);
|
|
2437
2440
|
this.frameReady = true;
|
|
2438
2441
|
}
|