В CesiumJS отображение точечных объектов в сцене строится вокруг двух основных подходов: Billboard (растровые спрайты, всегда обращённые к камере) и Point Primitives (процедурные пиксельные точки, рендерящиеся на GPU). Оба механизма решают задачу визуализации дискретных географических сущностей, но различаются по производительности, гибкости и способу отрисовки.
Billboard представляет собой плоское изображение, закреплённое в
3D-пространстве и автоматически ориентированное к камере. Внутренне
используется оптимизированная коллекция
BillboardCollection, которая минимизирует количество draw
call и позволяет эффективно отрисовывать тысячи объектов.
Основной способ работы через Entity API:
const viewer = new Cesium.Viewer("cesiumContainer");
viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(37.6173, 55.7558),
billboard: {
image: "marker.png",
width: 32,
height: 32
}
});
В этом случае система автоматически создаёт Billboard внутри
BillboardCollection, управляемого сценой.
Billboard привязывается к позиции в мировых координатах
Cartesian3. Чаще всего используется преобразование из
географических координат:
Cesium.Cartesian3.fromDegrees(longitude, latitude, height)
Высота может быть нулевой, но при включённой модели рельефа или 3D Tiles Billboard корректно проецируется на поверхность.
Ключевое свойство Billboard — постоянное обращение к камере. Это исключает необходимость ручного пересчёта ориентации.
Дополнительные параметры позиционирования:
pixelOffset — смещение в пикселях относительно якорной
точкиeyeOffset — смещение в координатах камерыhorizontalOrigin и verticalOrigin —
управление точкой привязки спрайтаalignedAxis — фиксация оси ориентацииПример тонкой настройки:
billboard: {
image: "marker.png",
pixelOffset: new Cesium.Cartesian2(0, -20),
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
horizontalOrigin: Cesium.HorizontalOrigin.CENTER
}
Для оптимизации восприятия сцены применяется динамическое изменение масштаба:
scaleByDistance — изменение размера при удаленииtranslucencyByDistance — изменение прозрачностиdistanceDisplayCondition — полное скрытие за пределами
диапазонаbillboard: {
image: "marker.png",
scaleByDistance: new Cesium.NearFarScalar(1000, 1.0, 500000, 0.2)
}
Такой подход уменьшает визуальную перегрузку при масштабировании глобуса.
Billboard использует изображения как текстуры. Для повышения производительности часто применяется атлас спрайтов — один большой image, содержащий множество иконок. Это снижает количество переключений текстур в GPU.
Entity API предоставляет удобную абстракцию, но внутри создаёт
объекты более высокого уровня. Низкоуровневый
BillboardCollection используется для максимальной
производительности при массовом рендеринге.
Пример низкоуровневого подхода:
const billboards = viewer.scene.primitives.add(
new Cesium.BillboardCollection()
);
billboards.add({
position: Cesium.Cartesian3.fromDegrees(10, 10),
image: "marker.png"
});
Этот способ предпочтителен при тысячах объектов, поскольку уменьшает накладные расходы Entity-системы.
Point Primitive — это пиксельная точка, вычисляемая напрямую на GPU без использования текстур. Это делает их значительно легче по памяти и быстрее в массовом рендеринге.
Создание через Entity:
viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(30, 50),
point: {
pixelSize: 10,
color: Cesium.Color.RED
}
});
Низкоуровневый вариант:
const points = viewer.scene.primitives.add(
new Cesium.PointPrimitiveCollection()
);
points.add({
position: Cesium.Cartesian3.fromDegrees(30, 50),
pixelSize: 8,
color: Cesium.Color.YELLOW
});
pixelSize — размер точки в пикселях экранаcolor — цвет точкиoutlineColor — цвет обводкиoutlineWidth — толщина обводкиdisableDepthTestDistance — игнорирование глубины на
заданной дистанцииПример визуально читаемой точки:
point: {
pixelSize: 12,
color: Cesium.Color.BLUE,
outlineColor: Cesium.Color.WHITE,
outlineWidth: 2
}
Point Primitive не использует текстуры, поэтому его визуализация остаётся стабильной при масштабировании камеры. В отличие от Billboard, точка не изменяет форму и не требует ориентации к камере.
Billboard ориентирован на визуально сложные элементы: иконки, маркеры, изображения с семантикой. Point Primitive — на абстрактные геометрические точки, где важна производительность.
Billboard:
Point Primitive:
Оба типа объектов участвуют в глубинном тестировании сцены. При включённой 3D-глобальной модели возможны эффекты перекрытия рельефом. Для управления этим используется:
disableDepthTestDistanceheightReference в Entity APIbillboard: {
image: "marker.png",
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
}
Это позволяет «прижать» объект к поверхности, учитывая terrain и 3D Tiles.
При большом количестве точек критически важны:
В сценах с десятками тысяч объектов Point Primitive обеспечивает более стабильный FPS, тогда как Billboard остаётся предпочтительным при необходимости визуальной идентификации объектов.
Billboard чаще используется для:
Point Primitive применяется для:
Комбинирование обоих подходов позволяет разделить семантический и аналитический слои визуализации в одной сцене.