Искажения и ограничения

В основе CesiumJS лежит представление Земли как эллипсоида WGS84, а не плоской карты. Эта модель задаёт фундаментальные ограничения и характер всех визуальных и математических искажений.

Ключевой момент: переход от плоской проекции к глобусу устраняет одни искажения (например, неизбежные деформации площадей в Web Mercator), но вводит другие — связанные с трёхмерной геометрией эллипсоида и численной реализацией в WebGL.

Эллипсоидальная модель описывается в мировых координатах (ECEF — Earth-Centered, Earth-Fixed), где каждая точка задаётся в трёхмерном пространстве относительно центра Земли. При визуализации на экране происходит цепочка преобразований:

ECEF → локальная система камеры → проекция → экранные координаты

Искажения могут возникать на каждом этапе, особенно при переходе из глобальных координат в систему камеры с ограниченной точностью чисел с плавающей точкой.


Геометрические искажения при отображении на глобусе

В отличие от классических 2D-карт, CesiumJS работает с непрерывной поверхностью сферы/эллипсоида, что приводит к ряду эффектов:

Изменение масштабов по широте

На глобусе расстояния между меридианами уменьшаются к полюсам. Это не визуальный артефакт, а геометрическое следствие модели:

  • экваториальные области визуально «растянуты» по сравнению с полярными;
  • локальные объекты сохраняют форму, но глобальные расстояния изменяются нелинейно.

Искажение площадей и форм в глобальном контексте

Хотя локальные геометрические объекты (например, модели зданий) сохраняют корректную форму, при анализе больших территорий:

  • полигоны могут выглядеть «сжатими» ближе к полюсам;
  • линии маршрутов приобретают кривизну, соответствующую геодезическим дугам.

Геодезическая, а не евклидова природа расстояний

Расстояния вычисляются вдоль поверхности эллипсоида, а не по прямой в 3D-пространстве. Это приводит к различиям между:

  • прямолинейной интерполяцией в 3D;
  • истинной геодезической линией на поверхности.

Ограничения численной точности в глобальном пространстве

CesiumJS опирается на JavaScript Number (IEEE-754 double precision). При работе с координатами масштаба Земли возникают фундаментальные ограничения.

Потеря точности на больших расстояниях

В ECEF-системе значения координат достигают миллионов метров. При этом:

  • точность double precision ограничена примерно 15–17 значащими цифрами;
  • на удалении от центра сцены возникают ошибки округления;
  • мелкие детали начинают «дрожать» или смещаться.

Артефакты дрожания геометрии (jittering)

При движении камеры:

  • вершины объектов могут смещаться на субпиксельном уровне;
  • особенно заметно на тонких линиях и удалённых объектах;
  • эффект усиливается при высокой скорости камеры.

Floating Origin и локализация координат

Для компенсации численных ограничений применяется концепция локальной системы координат камеры.

Принцип относительной системы

Вместо прямого рендеринга в глобальных координатах используется:

  • выделение локального центра (camera-centered frame);
  • преобразование всех объектов в координаты относительно камеры.

Это уменьшает абсолютные значения координат и повышает точность вычислений.

Ограничения подхода

Несмотря на стабилизацию:

  • при экстремально больших масштабах сцены возникают переходные артефакты;
  • пересчёт базовой точки может вызывать кратковременные скачки;
  • в сценах с высокой плотностью объектов возможны несогласованности LOD.

Ограничения глубины буфера и Z-fighting

WebGL использует буфер глубины с фиксированной точностью (обычно 24 бита), что создаёт ряд проблем при масштабах планеты.

Сжатие глубины в перспективной проекции

В перспективной камере распределение точности глубины нелинейно:

  • высокая точность ближе к камере;
  • резкое падение точности на дальних расстояниях.

Z-fighting на поверхности Земли

При наложении слоёв (например, imagery + terrain + 3D Tiles):

  • возникают конфликты глубины;
  • поверхности начинают «мерцать»;
  • особенно заметно на ровных участках и больших дистанциях.

Ограничения рельефа и тайловой модели данных

CesiumJS использует тайловую структуру для рельефа и изображений.

Дискретизация высот (quantization)

Данные высот хранятся в сжатом виде:

  • ограниченная вертикальная точность;
  • ступенчатые переходы на малых масштабах;
  • потеря гладкости на высоких зумах.

Артефакты на границах тайлов

При загрузке соседних тайлов:

  • возможны перепады высот;
  • заметные швы между сегментами;
  • временные несоответствия при потоковой загрузке.

Искажения уровня детализации в 3D Tiles

Система 3D Tiles основана на иерархии уровней детализации (LOD).

Переходы между уровнями детализации

При смене LOD возникают характерные эффекты:

  • «пульсация» геометрии;
  • резкая смена плотности полигонов;
  • временные несоответствия текстур и геометрии.

Сильное упрощение на дальних дистанциях

Для оптимизации производительности:

  • дальние объекты заменяются низкополигональными версиями;
  • формы теряют мелкие детали;
  • архитектурные элементы могут схлопываться в примитивы.

Ограничения кривизны Земли и видимого горизонта

Модель глобуса вводит естественное ограничение видимости.

Горизонт как геометрический предел

При удалении камеры от поверхности:

  • объекты постепенно скрываются за кривизной;
  • линии обзора ограничиваются эллипсоидом;
  • дальние объекты исчезают не по прямой отсечке, а по кривой поверхности.

Horizon culling

Для оптимизации используется отсечение невидимых объектов:

  • объекты за горизонтом не передаются в рендер;
  • возможны резкие исчезновения при изменении высоты камеры;
  • сложные сцены требуют дополнительной фильтрации видимости.

Ограничения 2D и Columbus View

Помимо глобуса CesiumJS поддерживает альтернативные режимы проекции.

2D-проекция (Web Mercator)

При переходе в 2D:

  • вводится классическая картографическая проекция;
  • усиливаются искажения площадей на высоких широтах;
  • прямые линии на глобусе становятся кривыми на карте.

Columbus View (псевдо-3D)

Гибридный режим обладает собственными деформациями:

  • вертикальная ось отделена от географической модели;
  • объекты могут «наклоняться» при переходах;
  • отсутствует строгая геодезическая согласованность.

Производственные ограничения рендеринга

Реализация в браузере накладывает существенные ограничения на масштаб сцены.

Ограничения GPU и памяти

  • лимит видеопамяти ограничивает количество тайлов;
  • сложные сцены требуют агрессивного выгрузочного стриминга;
  • текстуры высокого разрешения приводят к росту bandwidth.

Стоимость draw calls

Каждый объект или тайл:

  • увеличивает нагрузку на CPU-GPU pipeline;
  • снижает частоту кадров при высокой плотности объектов;
  • требует батчинга и инстансинга для стабилизации производительности.

Ограничения потоковой загрузки данных

CesiumJS активно использует динамическую подгрузку данных.

Задержки сети и несогласованность сцен

При асинхронной загрузке:

  • разные уровни сцены могут отображаться одновременно;
  • возникают временные «дырки» в визуализации;
  • детализация появляется постепенно, создавая эффект сборки мира.

Ограничения пропускной способности

  • ограничение скорости загрузки тайлов;
  • конкуренция между изображениями, рельефом и 3D-моделями;
  • при перегрузке происходит деградация качества.

Ограничения преобразований координат

CesiumJS активно использует системы ENU, ECEF и локальные касательные плоскости.

Локальные системы координат

При переходах между системами:

  • возникают округления при преобразованиях матриц;
  • возможны расхождения в ориентации нормалей;
  • сложные сцены могут демонстрировать микродеформации.

Накопление ошибок трансформации

Многоступенчатые преобразования:

ECEF → ENU → camera → clip space

могут приводить к:

  • накоплению численных погрешностей;
  • смещению объектов при длительном рендере сцены;
  • нестабильности анимаций на больших дистанциях.

Атмосферные и визуальные эффекты как источник псевдо-искажений

Атмосферные модели и постобработка влияют на восприятие геометрии.

Рэлеевское рассеяние и дымка

  • дальние объекты теряют контраст;
  • границы объектов становятся менее чёткими;
  • возникает ощущение «исчезновения» деталей.

Экспоненциальное затухание видимости

Плотность атмосферы используется для:

  • имитации глубины сцены;
  • маскировки дальних артефактов рендеринга;
  • сглаживания переходов между уровнями детализации.

Численная устойчивость и масштаб сцены

Глобальная сцена в CesiumJS объединяет:

  • километровые масштабы рельефа;
  • сантиметровую точность 3D-моделей;
  • орбитальные дистанции камеры.

Такое сочетание приводит к фундаментальному конфликту масштабов, где:

  • геометрия требует высокой точности;
  • графический pipeline ограничен фиксированной точностью представления;
  • визуализация балансирует между производительностью и математической корректностью.