Grid материал

Grid Material в CesiumJS представляет собой один из процедурных материалов, используемых для визуального наложения регулярной координатной сетки на поверхности геометрии. Он применяется для визуальной ориентации в пространстве сцены, анализа масштабов, отладки геометрии и создания технических визуализаций, где требуется подчеркнуть структуру поверхности или объёма.

Grid material относится к классу процедурных материалов, генерируемых на основе математических функций в шейдере, а не текстурных изображений. В отличие от image-based материалов, grid-материал формируется динамически на GPU и зависит от параметров координат поверхности.

Основная идея заключается в разбиении поверхности на равномерную сетку линий, задаваемую параметрами:

  • размер ячеек (cell alpha / cell spacing)
  • цвет линий (line color)
  • прозрачность (alpha blending)
  • толщина линий (визуально через антиалиасинг)
  • смещение (offset)

Grid материал может применяться к примитивам (primitives), полигонам, стенам (wall geometries), эллипсам, а также к extruded geometries.

Архитектура Material System

В CesiumJS система материалов базируется на унифицированных шейдерных шаблонах. Каждый материал описывается как набор:

  • uniform-параметров
  • GLSL-функций
  • структуры color/alpha computation
  • идентификатора материала

Grid material является встроенным типом материала и подключается через Material.fromType("Grid") или через GridMaterialProperty в entity API.

Основной принцип работы:

  1. Геометрия передаёт UV или position в шейдер
  2. Grid-функция вычисляет координаты сетки
  3. Определяется принадлежность пикселя к линии
  4. Формируется итоговый цвет с учетом alpha blending

Параметры Grid Material

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

Цветовые параметры

  • color — основной цвет заливки фона
  • lineColor — цвет линий сетки

Геометрические параметры

  • cellAlpha — плотность или прозрачность ячеек
  • lineCount — количество линий (или масштаб сетки)
  • lineThickness — визуальная толщина линий (через шейдерную интерполяцию)

Поведенческие параметры

  • offset — смещение сетки относительно мировых координат
  • reverseColor — инверсия цвета линий и фона

Использование через Entity API

Grid material чаще всего используется через свойство GridMaterialProperty, которое интегрируется с системой сущностей.

Пример конфигурации:

viewer.entities.add({
  polygon: {
    hierarchy: Cesium.Cartesian3.fromDegreesArray([
      -100.0, 30.0,
      -90.0, 30.0,
      -90.0, 40.0,
      -100.0, 40.0
    ]),
    material: new Cesium.GridMaterialProperty({
      color: Cesium.Color.BLUE.withAlpha(0.2),
      lineColor: Cesium.Color.WHITE,
      cellAlpha: 0.1,
      lineCount: new Cesium.Cartesian2(10, 10)
    })
  }
});

В этом контексте материал применяется к поверхности полигона и динамически обновляется при изменении свойств.

Использование через Primitive API

На уровне primitives grid material подключается через MaterialAppearance или EllipsoidSurfaceAppearance.

Пример:

const instance = new Cesium.GeometryInstance({
  geometry: new Cesium.RectangleGeometry({
    rectangle: Cesium.Rectangle.fromDegrees(-120, 20, -60, 50)
  })
});

const primitive = new Cesium.Primitive({
  geometryInstances: instance,
  appearance: new Cesium.EllipsoidSurfaceAppearance({
    material: Cesium.Material.fromType("Grid", {
      color: Cesium.Color.BLACK,
      cellAlpha: 0.2,
      lineColor: Cesium.Color.YELLOW
    })
  })
});

Шейдерная реализация Grid Material

Внутри CesiumJS grid material реализован через fragment shader, где используется разложение координат на сеточную структуру.

Типичная логика:

  1. Берётся координата поверхности (обычно st или position)
  2. Умножается на scale (lineCount)
  3. Вычисляется дробная часть координаты
  4. Проверяется близость к границе ячейки
  5. Формируется маска линии

Псевдологика:

vec2 coord = st * lineCount;
vec2 grid = abs(fract(coord - 0.5) - 0.5) / fwidth(coord);
float line = min(grid.x, grid.y);
float alpha = 1.0 - smoothstep(0.0, thickness, line);

Такая реализация обеспечивает:

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

Масштабирование и LOD поведение

Grid material имеет важную особенность — он не зависит от разрешения текстуры, но зависит от масштаба сцены.

При увеличении масштаба:

  • сетка может «разрастаться» визуально
  • линии становятся менее плотными
  • увеличивается читаемость крупных объектов

При уменьшении масштаба:

  • сетка сжимается
  • возможна потеря детализации
  • повышается нагрузка на визуальное восприятие

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

  • динамическое изменение lineCount
  • привязка к camera height
  • интерполяция alpha

Применение в 3D аналитике

Grid material часто используется в следующих задачах:

  • визуализация высотных поверхностей
  • анализ территорий и зон покрытия
  • демонстрация масштабов объектов
  • техническая визуализация CAD-данных
  • геопространственные симуляции

В отличие от текстурированных материалов, grid материал сохраняет чёткость при любом уровне приближения, что делает его удобным для аналитических систем.

Особенности работы с прозрачностью

Alpha blending в grid material имеет ключевое значение. Параметры прозрачности влияют не только на фон, но и на восприятие сетки.

Важные моменты:

  • при высокой прозрачности фон сцены влияет на читаемость
  • линии сетки должны иметь более высокий contrast
  • порядок отрисовки (render order) влияет на итоговый результат

Ограничения и производственные нюансы

Grid material имеет ряд ограничений:

  • не поддерживает сложные текстурные паттерны
  • зависит от корректности UV или геометрических координат
  • может давать визуальные артефакты при экстремальном зуме
  • требует аккуратной настройки при использовании на curved surfaces

Также следует учитывать производительность:

  • хотя материал процедурный, он выполняется на fragment stage
  • большое количество одновременно активных материалов увеличивает нагрузку GPU
  • на сложных сценах рекомендуется минимизировать вариативность параметров

Динамическое управление свойствами

Grid material может изменяться в runtime, что позволяет использовать его для интерактивных систем.

Пример изменения параметров:

entity.polygon.material.cellAlpha = 0.3;
entity.polygon.material.lineColor = Cesium.Color.RED;
entity.polygon.material.lineCount = new Cesium.Cartesian2(20, 20);

Такая динамика полезна для:

  • визуальной отладки данных
  • интерактивного анализа зон
  • пользовательских интерфейсов геоаналитики

Связь с другими материалами Cesium

Grid material входит в набор встроенных процедурных материалов, среди которых:

  • Stripe material
  • Checkerboard material
  • Image material
  • Polyline glow material

В отличие от них, grid material ориентирован на регулярную двумерную структуру и наиболее близок к координатной визуализации.

Поведение на разных типах геометрии

Grid material демонстрирует различное поведение в зависимости от геометрии:

  • PolygonGeometry — равномерная сетка по поверхности
  • RectangleGeometry — идеальная прямоугольная структура
  • WallGeometry — вертикальная проекция сетки
  • EllipsoidSurfaceGeometry — искажение сетки по кривизне

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

Практическое значение в архитектуре сцен

Grid material часто используется как вспомогательный слой визуализации в комплексных сценах:

  • подложка под 3D модели
  • контроль масштабов BIM объектов
  • визуальная проверка геометрии terrain
  • overlay для измерительных инструментов

Его ключевая ценность заключается в универсальности и независимости от внешних ресурсов, таких как текстуры или серверные данные.