Skip to content

Commit ab81e8d

Browse files
ansiskarimnaaji
andauthored
Revert 10444 + 10446 (#10462) (#10464)
* Revert "Terrain: Don't load unnecessary tiles (#10444)" This reverts commit b00f90b. * Revert "Unit test for zoom 22 at Mile High City (#10446)" This reverts commit 1bacb2b. Co-authored-by: Karim Naaji <[email protected]>
1 parent 9104ac8 commit ab81e8d

File tree

8 files changed

+31
-35
lines changed

8 files changed

+31
-35
lines changed

src/geo/transform.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -541,13 +541,13 @@ class Transform {
541541
roundZoom?: boolean,
542542
reparseOverscaled?: boolean,
543543
renderWorldCopies?: boolean,
544-
isTerrainDEM?: boolean
544+
useElevationData?: boolean
545545
}
546546
): Array<OverscaledTileID> {
547547
let z = this.coveringZoomLevel(options);
548548
const actualZ = z;
549549

550-
const useElevationData = this.elevation && !options.isTerrainDEM;
550+
const useElevationData = !!options.useElevationData;
551551

552552
if (options.minzoom !== undefined && z < options.minzoom) return [];
553553
if (options.maxzoom !== undefined && z > options.maxzoom) z = options.maxzoom;
@@ -569,14 +569,10 @@ class Transform {
569569
// No change of LOD behavior for pitch lower than 60 and when there is no top padding: return only tile ids from the requested zoom level
570570
const minZoom = this.pitch <= 60.0 && this._edgeInsets.top <= this._edgeInsets.bottom && !this._elevation ? z : 0;
571571

572-
// When calculating DEM tile cover, create deep AABB for nodes, to ensure they intersect frustum. For other sources,
573-
// use 2D tile cover: tile assumes center elevation until corresponding DEM cover is loaded to tell if additional
574-
// tiles need to be loaded.
575-
const maxRange = options.isTerrainDEM && this._elevation ? this._elevation.exaggeration() * 10000 : this._centerAltitude;
576-
const minRange = options.isTerrainDEM && this._elevation ? -maxRange : this._centerAltitude;
572+
const maxRange = this.elevation ? this.elevation.exaggeration() * 10000 : 0;
577573
const newRootTile = (wrap: number): any => {
578574
const max = maxRange;
579-
const min = minRange;
575+
const min = -maxRange;
580576
return {
581577
// With elevation, this._elevation provides z coordinate values. For 2D:
582578
// All tiles are on zero elevation plane => z difference is zero
@@ -698,7 +694,10 @@ class Transform {
698694

699695
const aabb = it.aabb.quadrant(i);
700696
let tileID = null;
701-
if (useElevationData) {
697+
if (useElevationData && it.zoom > maxZoom - 6) {
698+
// Using elevation data for tiles helps clipping out tiles that are not visible and
699+
// precise distance calculation. it.zoom > maxZoom - 6 is an optimization as those before get subdivided
700+
// or they are so far at horizon that it doesn't matter.
702701
tileID = new OverscaledTileID(it.zoom + 1 === maxZoom ? overscaledZ : it.zoom + 1, it.wrap, it.zoom + 1, childX, childY);
703702
getAABBFromElevation(aabb, tileID);
704703
}

src/source/source_cache.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,7 @@ class SourceCache extends Evented {
494494
maxzoom: this._source.maxzoom,
495495
roundZoom: this._source.roundZoom && !updateForTerrain,
496496
reparseOverscaled: this._source.reparseOverscaled,
497-
isTerrainDEM: this.usedForTerrain
497+
useElevationData: !!this.transform.elevation && !this.usedForTerrain
498498
});
499499

500500
if (this._source.hasTile) {

src/terrain/terrain.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ class ProxySourceCache extends SourceCache {
104104
minzoom: this._source.minzoom,
105105
maxzoom: this._source.maxzoom,
106106
roundZoom: this._source.roundZoom,
107-
reparseOverscaled: this._source.reparseOverscaled
107+
reparseOverscaled: this._source.reparseOverscaled,
108+
useElevationData: true
108109
});
109110

110111
const incoming: {[string]: string} = idealTileIDs.reduce((acc, tileID) => {
72.3 KB
Loading

test/integration/render-tests/real-world/sanfrancisco-terrain-draped-movelayer/style.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
"height": 512,
77
"operations": [
88
["setStyle", "local://styles/sanfrancisco.json"],
9-
["setZoom", 15.0 ],
10-
["setCenter", [-122.45362, 37.77049] ],
9+
["setZoom", 15.1 ],
10+
["setCenter", [-122.448635, 37.7669995] ],
1111
["wait"],
1212
["addSource", "rgbterrain", {
1313
"type": "raster-dem",
@@ -19,8 +19,12 @@
1919
}],
2020
["setTerrain", {"source": "rgbterrain"}],
2121
["wait"],
22+
["setZoom", 15.2],
2223
["moveLayer", "road_major", "road_minor"],
2324
["moveLayer", "contour-line", "building"],
25+
["wait"],
26+
["setZoom", 15],
27+
["wait"],
2428
["wait"]
2529
]
2630
}
47.3 KB
Loading

test/integration/render-tests/real-world/sanfrancisco-terrain-draped/style.json

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
"height": 512,
77
"operations": [
88
["setStyle", "local://styles/sanfrancisco.json"],
9-
["setZoom", 15.0 ],
10-
["setCenter", [-122.45362, 37.77049] ],
9+
["setZoom", 15.1 ],
10+
["setCenter", [-122.448635, 37.7669995] ],
1111
["wait"],
1212
["addSource", "rgbterrain", {
1313
"type": "raster-dem",
@@ -18,6 +18,11 @@
1818
"tileSize": 256
1919
}],
2020
["setTerrain", {"source": "rgbterrain"}],
21+
["wait"],
22+
["setZoom", 15.2],
23+
["wait"],
24+
["setZoom", 15],
25+
["wait"],
2126
["wait"]
2227
]
2328
}

test/unit/geo/transform.test.js

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {FreeCameraOptions} from '../../../src/ui/free_camera.js';
88
import MercatorCoordinate, {mercatorZfromAltitude} from '../../../src/geo/mercator_coordinate.js';
99
import {vec3, quat} from 'gl-matrix';
1010
import LngLatBounds from '../../../src/geo/lng_lat_bounds.js';
11-
import {degToRad} from '../../../src/util/util.js';
11+
import {extend, degToRad} from '../../../src/util/util.js';
1212

1313
test('transform', (t) => {
1414

@@ -529,12 +529,16 @@ test('transform', (t) => {
529529
});
530530

531531
test('coveringTiles for terrain', (t) => {
532-
const options = {
532+
const options2D = {
533533
minzoom: 1,
534534
maxzoom: 10,
535535
tileSize: 512
536536
};
537537

538+
const options = extend({
539+
useElevationData: true
540+
}, options2D);
541+
538542
const transform = new Transform();
539543
let centerElevation = 0;
540544
let tilesDefaultElevation = 0;
@@ -596,7 +600,7 @@ test('transform', (t) => {
596600
transform.center = new LngLat(56.90, 48.20);
597601
transform.resize(1024, 768);
598602
transform.elevation = null;
599-
const cover2D = transform.coveringTiles(options);
603+
const cover2D = transform.coveringTiles(options2D);
600604
// No LOD as there is no elevation data.
601605
t.true(cover2D[0].overscaledZ === cover2D[cover2D.length - 1].overscaledZ);
602606

@@ -694,23 +698,6 @@ test('transform', (t) => {
694698
t.end();
695699
});
696700

697-
t.test('zoom 22 somewhere in Mile High City should load only visible tiles', (t) => {
698-
tilesDefaultElevation = null;
699-
centerElevation = 1600;
700-
tileElevation[new OverscaledTileID(14, 0, 14, 3413, 6218).key] = 1600;
701-
transform.resize(768, 768);
702-
transform.zoom = options.maxzoom = 22;
703-
transform.center = {lng: -104.99813327, lat: 39.72784465999999};
704-
options.roundZoom = true;
705-
t.deepEqual(transform.coveringTiles(options), [
706-
new OverscaledTileID(22, 0, 22, 873835, 1592007),
707-
new OverscaledTileID(22, 0, 22, 873834, 1592007),
708-
new OverscaledTileID(22, 0, 22, 873835, 1592006),
709-
new OverscaledTileID(22, 0, 22, 873834, 1592006)
710-
]);
711-
t.end();
712-
});
713-
714701
t.end();
715702
});
716703

0 commit comments

Comments
 (0)