mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-15 15:52:21 +00:00
Keep Navara cinematic clouds visible at flight altitudes
This commit is contained in:
1 parent
96ce795f8c
commit
8b179a7e01
4 files changed
+6
-4
No files matched your search
@@ -164,7 +164,7 @@ export function buildNavaraLook(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Terrain-relative layers keep distant cumulus above mountain ridges.
|
// Terrain-relative layers keep distant cumulus above mountain ridges.
|
||||||
// Keep a downward view clear once the camera rises above the cloud deck.
|
// Keep the deck visible from aircraft altitude, then clear it for regional views.
|
||||||
if (clouds) {
|
if (clouds) {
|
||||||
const offset = cloudTerrainOffset(height, ground);
|
const offset = cloudTerrainOffset(height, ground);
|
||||||
const pass = clouds.ref?.raw;
|
const pass = clouds.ref?.raw;
|
||||||
@@ -179,7 +179,7 @@ export function buildNavaraLook(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
cloudsSunlit = cloudsSunlitAt(elevation, cloudsSunlit);
|
cloudsSunlit = cloudsSunlitAt(elevation, cloudsSunlit);
|
||||||
const ceiling = CUMULUS_BASES[0] + offset + (cloudsShown ? 800 : 500);
|
const ceiling = offset + (cloudsShown ? 12_000 : 11_000);
|
||||||
const next = cloudsSunlit && height <= ceiling;
|
const next = cloudsSunlit && height <= ceiling;
|
||||||
if (next !== cloudsShown) {
|
if (next !== cloudsShown) {
|
||||||
cloudsShown = next;
|
cloudsShown = next;
|
||||||
|
|||||||
@@ -143,6 +143,8 @@ test('cumulus rises over mountain terrain and leaves the orbital view clear', ()
|
|||||||
assert.deepEqual(clouds.updates, [{ visible: false }]);
|
assert.deepEqual(clouds.updates, [{ visible: false }]);
|
||||||
look.frame(900, false, 0);
|
look.frame(900, false, 0);
|
||||||
assert.deepEqual(clouds.updates.at(-1), { visible: true });
|
assert.deepEqual(clouds.updates.at(-1), { visible: true });
|
||||||
|
look.frame(6500, true, 0);
|
||||||
|
assert.deepEqual(clouds.updates.at(-1), { visible: true }, 'above the deck');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('globe lighting switches on only at rest, and off even in motion', () => {
|
test('globe lighting switches on only at rest, and off even in motion', () => {
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ export function globeLightingAt(height, current = false) {
|
|||||||
// Navara cloud layers use ellipsoid heights. Over uplands raise the two
|
// Navara cloud layers use ellipsoid heights. Over uplands raise the two
|
||||||
// cumulus layers together; at world scale a single ground sample no longer
|
// cumulus layers together; at world scale a single ground sample no longer
|
||||||
// represents the whole view. Quantize the offset to avoid tiny layer updates.
|
// represents the whole view. Quantize the offset to avoid tiny layer updates.
|
||||||
export const LOCAL_CLOUD_COVERAGE = 0.22;
|
export const LOCAL_CLOUD_COVERAGE = 0.36;
|
||||||
export const CUMULUS_BASES = Object.freeze([1500, 1800]);
|
export const CUMULUS_BASES = Object.freeze([1500, 1800]);
|
||||||
export function cloudTerrainOffset(height, ground) {
|
export function cloudTerrainOffset(height, ground) {
|
||||||
if (!Number.isFinite(ground) || height >= STARS_SPACE_ENTER_M) return 0;
|
if (!Number.isFinite(ground) || height >= STARS_SPACE_ENTER_M) return 0;
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ test('the cinematic look: photoreal plus clouds and ACES, no sun shadow maps, no
|
|||||||
useNormalBuffer: false,
|
useNormalBuffer: false,
|
||||||
albedoScale: 2,
|
albedoScale: 2,
|
||||||
});
|
});
|
||||||
assert.equal(clouds.clouds.coverage, 0.22);
|
assert.equal(clouds.clouds.coverage, 0.36);
|
||||||
assert.equal(clouds.clouds.shadows, false, 'no cloud shadow maps');
|
assert.equal(clouds.clouds.shadows, false, 'no cloud shadow maps');
|
||||||
assert.ok(
|
assert.ok(
|
||||||
clouds.clouds.cloudLayers.every(({ altitude }) => altitude >= 1000),
|
clouds.clouds.cloudLayers.every(({ altitude }) => altitude >= 1000),
|
||||||
|
|||||||
Reference in new issue
Block a user