@d5techs/3dgs-lib 1.4.67 → 1.4.69
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 +21 -15
- package/dist/3dgs-lib.cjs.map +1 -1
- package/dist/3dgs-lib.js +21 -15
- package/dist/3dgs-lib.js.map +1 -1
- package/package.json +1 -1
package/dist/3dgs-lib.js
CHANGED
|
@@ -2237,23 +2237,30 @@ fn dirToUv(d: vec3<f32>) -> vec2<f32> {
|
|
|
2237
2237
|
@fragment fn fs(i: V) -> @location(0) vec4<f32> {
|
|
2238
2238
|
let d = normalize(i.dir);
|
|
2239
2239
|
let cx = u.cam.x;
|
|
2240
|
-
let cy = max(u.cam.y, 0.1);
|
|
2240
|
+
let cy = max(u.cam.y, 0.1); // clamp: camera always above ground
|
|
2241
2241
|
let cz = u.cam.z;
|
|
2242
|
-
let
|
|
2242
|
+
let captureH = u.cam.w;
|
|
2243
2243
|
|
|
2244
|
-
//
|
|
2245
|
-
let
|
|
2246
|
-
let halfB = dot(origin, d);
|
|
2247
|
-
let cVal = dot(origin, origin) - R * R;
|
|
2248
|
-
let disc = halfB * halfB - cVal;
|
|
2244
|
+
// --- sky: sample HDR with original direction ---
|
|
2245
|
+
let skyUv = dirToUv(d);
|
|
2249
2246
|
|
|
2250
|
-
//
|
|
2251
|
-
let
|
|
2252
|
-
let
|
|
2253
|
-
let
|
|
2247
|
+
// --- ground: ray→plane at Y=0, camera-centered (no world XZ offset) ---
|
|
2248
|
+
let dyClamped = min(d.y, -0.0001);
|
|
2249
|
+
let t = -cy / dyClamped;
|
|
2250
|
+
let hitX = t * d.x;
|
|
2251
|
+
let hitZ = t * d.z;
|
|
2254
2252
|
|
|
2255
|
-
|
|
2256
|
-
let
|
|
2253
|
+
// Direction from virtual capture point to ground hit point
|
|
2254
|
+
let groundDir = normalize(vec3(hitX, -captureH, hitZ));
|
|
2255
|
+
let groundUv = dirToUv(groundDir);
|
|
2256
|
+
|
|
2257
|
+
// --- sample both (uniform control flow) ---
|
|
2258
|
+
let skyColor = textureSample(envTexture, envSampler, skyUv).rgb;
|
|
2259
|
+
let groundColor = textureSample(envTexture, envSampler, groundUv).rgb;
|
|
2260
|
+
|
|
2261
|
+
// Sharp blend at horizon — cy is always > 0 so no aboveGround check needed
|
|
2262
|
+
let horizonBlend = smoothstep(0.002, -0.002, d.y);
|
|
2263
|
+
let c = mix(skyColor, groundColor, horizonBlend);
|
|
2257
2264
|
|
|
2258
2265
|
// Reinhard tone mapping + gamma
|
|
2259
2266
|
let mapped = c / (c + vec3(1.));
|
|
@@ -19078,8 +19085,7 @@ class App {
|
|
|
19078
19085
|
);
|
|
19079
19086
|
}
|
|
19080
19087
|
const camH = cam[1] - groundLevel;
|
|
19081
|
-
|
|
19082
|
-
this.skyboxRenderer.groundRadius = Math.max(500, camDist + 200);
|
|
19088
|
+
this.skyboxRenderer.groundRadius = 50;
|
|
19083
19089
|
this.skyboxRenderer.prepareFrame(
|
|
19084
19090
|
this.camera.viewMatrix,
|
|
19085
19091
|
this.camera.projectionMatrix,
|