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