Экзагерация рельефа — приём визуального усиления перепадов высот, применяемый в трёхмерной геовизуализации для повышения читаемости форм поверхности. В контексте веб-глобусов она позволяет делать малозаметные изменения высоты рельефа выраженными и легко интерпретируемыми, особенно при работе с равнинными регионами или с данными, где амплитуда высот значительно меньше горизонтального масштаба сцены.
В CesiumJS экзагерация рельефа реализуется как часть системы управления сценой и геометрией террейна, затрагивая как процедурные высоты земной поверхности, так и загруженные 3D Tiles с геометрией зданий и инфраструктуры.
Любая поверхность в глобусе Cesium представляется функцией высоты:
[ h = f(, )]
где () — широта, () — долгота, (h) — высота относительно эллипсоида WGS84.
Экзагерация вводит коэффициент масштабирования вертикальной оси:
[ h’ = h k]
где (k) — коэффициент вертикального преувеличения.
При (k > 1) усиливается визуальная контрастность рельефа, при (k < 1) поверхность визуально «сплющивается».
В CesiumJS основным глобальным параметром является вертикальное преувеличение сцены:
viewer.scene.verticalExaggeration = 2.0;
Этот коэффициент влияет на все источники высот:
Изменение применяется в реальном времени без пересоздания сцены, так как трансформация происходит на уровне шейдеров и матриц преобразования.
Отдельный уровень управления связан с поверхностью глобуса:
viewer.scene.globe.terrainExaggeration = 3.0;
Этот параметр влияет исключительно на цифровую модель рельефа, не затрагивая 3D Tiles и иные объекты сцены.
Разделение уровней экзагерации позволяет комбинировать эффекты:
Геометрия, загружаемая через 3D Tiles, часто содержит абсолютные координаты. В этом случае экзагерация требует преобразования относительно центра модели:
[ ’ = + ( - ) k]
где:
В CesiumJS подобные трансформации реализуются через
modelMatrix:
const scale = Cesium.Matrix4.fromScale(
new Cesium.Cartesian3(1.0, 1.0, 2.5),
new Cesium.Matrix4()
);
tileset.modelMatrix = scale;
Такой подход позволяет локально усиливать вертикальные размеры конкретных объектов без влияния на глобус.
Изменение коэффициента в реальном времени часто используется для аналитической визуализации:
let k = 1.0;
viewer.scene.verticalExaggeration = k;
setInterval(() => {
k += 0.1;
if (k > 5.0) k = 1.0;
viewer.scene.verticalExaggeration = k;
}, 1000);
При анимации важно учитывать перерасчёт освещения и теней, так как изменение высот влияет на нормали поверхности.
Экзагерация изменяет геометрию поверхности, что напрямую влияет на:
При увеличении коэффициента:
Однако чрезмерное увеличение приводит к артефактам освещения, особенно на низкополигональном террейне, где нормали интерполируются между редкими точками высотной сетки.
Cesium Terrain и 3D Tiles используют многоуровневую детализацию (LOD). При экзагерации:
Особенно это проявляется при резком изменении коэффициента во время загрузки данных, когда соседние уровни детализации уже оптимизированы под исходную геометрию.
Сильная экзагерация приводит к ряду проблем:
1. Z-fighting При увеличении вертикального масштаба поверхности могут пересекаться с объектами сцены из-за недостаточной точности depth buffer.
2. Clipping near plane Высокие вертикальные значения увеличивают вероятность отсечения геометрии ближней плоскостью камеры.
3. Потеря географической пропорциональности Рельеф перестаёт соответствовать реальным отношениям масштабов, что критично для навигационных задач.
4. Искажение 3D Tiles Геометрия зданий может визуально «вытягиваться» непропорционально основаниям.
Экзагерация часто используется совместно с кастомными шейдерами террейна:
В таких случаях вертикальное преувеличение усиливает читаемость аналитических слоёв, поскольку диапазон значений уклона расширяется.
В сложных сценах применяется раздельное масштабирование:
Такой подход позволяет избежать конфликтов между геометрией и аналитическими данными, сохраняя согласованность визуальной модели.
На уровне GPU экзагерация реализуется через модификацию вершинных шейдеров. Основные ограничения:
При экстремальных значениях коэффициента возможны переполнения глубины и деградация точности позиционирования на больших расстояниях от центра сцены.
Cesium использует геоцентрическую систему координат (ECEF), где малые ошибки масштабирования на больших расстояниях приводят к заметным визуальным сдвигам. Экзагерация усиливает эти эффекты, поскольку увеличивает абсолютные значения координат по оси нормали к эллипсоиду, что влияет на численную стабильность матриц преобразования.