@d5techs/3dgs-lib 1.4.66 → 1.4.67
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 +15 -22
- package/dist/3dgs-lib.cjs.map +1 -1
- package/dist/3dgs-lib.js +15 -22
- package/dist/3dgs-lib.js.map +1 -1
- package/package.json +1 -1
package/dist/3dgs-lib.cjs
CHANGED
|
@@ -2239,31 +2239,23 @@ fn dirToUv(d: vec3<f32>) -> vec2<f32> {
|
|
|
2239
2239
|
@fragment fn fs(i: V) -> @location(0) vec4<f32> {
|
|
2240
2240
|
let d = normalize(i.dir);
|
|
2241
2241
|
let cx = u.cam.x;
|
|
2242
|
-
let cy = u.cam.y;
|
|
2242
|
+
let cy = max(u.cam.y, 0.1);
|
|
2243
2243
|
let cz = u.cam.z;
|
|
2244
|
-
let
|
|
2244
|
+
let R = u.cam.w;
|
|
2245
2245
|
|
|
2246
|
-
//
|
|
2247
|
-
let
|
|
2246
|
+
// Ray-sphere intersection: camera at (cx, cy, cz), sphere radius R at origin
|
|
2247
|
+
let origin = vec3(cx, cy, cz);
|
|
2248
|
+
let halfB = dot(origin, d);
|
|
2249
|
+
let cVal = dot(origin, origin) - R * R;
|
|
2250
|
+
let disc = halfB * halfB - cVal;
|
|
2248
2251
|
|
|
2249
|
-
//
|
|
2250
|
-
let
|
|
2251
|
-
let
|
|
2252
|
-
let
|
|
2253
|
-
let hitZ = cz + t * d.z;
|
|
2252
|
+
// Far intersection (camera is inside sphere)
|
|
2253
|
+
let t = -halfB + sqrt(max(disc, 0.0));
|
|
2254
|
+
let hitPoint = origin + t * d;
|
|
2255
|
+
let sampleDir = normalize(hitPoint);
|
|
2254
2256
|
|
|
2255
|
-
|
|
2256
|
-
let
|
|
2257
|
-
let groundUv = dirToUv(groundDir);
|
|
2258
|
-
|
|
2259
|
-
// --- sample both (uniform control flow) ---
|
|
2260
|
-
let skyColor = textureSample(envTexture, envSampler, skyUv).rgb;
|
|
2261
|
-
let groundColor = textureSample(envTexture, envSampler, groundUv).rgb;
|
|
2262
|
-
|
|
2263
|
-
// Sharp blend at horizon, no edge fade needed
|
|
2264
|
-
let horizonBlend = smoothstep(0.002, -0.002, d.y);
|
|
2265
|
-
let aboveGround = step(0.01, cy);
|
|
2266
|
-
let c = mix(skyColor, groundColor, horizonBlend * aboveGround);
|
|
2257
|
+
let uv = dirToUv(sampleDir);
|
|
2258
|
+
let c = textureSample(envTexture, envSampler, uv).rgb;
|
|
2267
2259
|
|
|
2268
2260
|
// Reinhard tone mapping + gamma
|
|
2269
2261
|
let mapped = c / (c + vec3(1.));
|
|
@@ -19088,7 +19080,8 @@ class App {
|
|
|
19088
19080
|
);
|
|
19089
19081
|
}
|
|
19090
19082
|
const camH = cam[1] - groundLevel;
|
|
19091
|
-
|
|
19083
|
+
const camDist = Math.sqrt(cam[0] * cam[0] + camH * camH + cam[2] * cam[2]);
|
|
19084
|
+
this.skyboxRenderer.groundRadius = Math.max(500, camDist + 200);
|
|
19092
19085
|
this.skyboxRenderer.prepareFrame(
|
|
19093
19086
|
this.camera.viewMatrix,
|
|
19094
19087
|
this.camera.projectionMatrix,
|