Stripe material представляет собой процедурный материал в CesiumJS, создающий чередующиеся полосы (stripe pattern) на поверхностях сущностей и примитивов. Он относится к классу динамических материалов и широко используется для визуального выделения геометрии, создания эффектов разметки, визуального кодирования зон и направления.
В основе лежит генерация повторяющегося рисунка из двух цветов с
управляемым смещением, ориентацией и частотой повторения. Материал
работает как на уровне Entity API, так и в
Primitive/MaterialAppearance контексте.
Stripe material реализуется через систему материалов CesiumJS и подключается как один из стандартных типов:
Cesium.StripeMaterialProperty — для Entity APICesium.Material.StripeType — для низкоуровневых
материаловMaterial и Appearance в
примитивахПроцедурная природа означает, что полосы не загружаются как текстура, а вычисляются шейдером на GPU.
Stripe material задаётся набором параметров, определяющих внешний вид полос и их поведение.
Основные свойства:
Пример использования через Entity API:
const entity = viewer.entities.add({
rectangle: {
coordinates: Cesium.Rectangle.fromDegrees(-100.0, 30.0, -90.0, 40.0),
material: new Cesium.StripeMaterialProperty({
evenColor: Cesium.Color.WHITE.withAlpha(0.7),
oddColor: Cesium.Color.BLUE.withAlpha(0.7),
repeat: 8,
offset: 0,
orientation: Cesium.StripeOrientation.HORIZONTAL
})
}
});
Параметр ориентации определяет, как полосы накладываются на поверхность:
Cesium.StripeOrientation.HORIZONTAL — полосы вдоль
широтыCesium.StripeOrientation.VERTICAL — полосы вдоль
долготыОриентация влияет не только на визуальный результат, но и на восприятие геометрии: вертикальные полосы усиливают эффект «меридианной» структуры, горизонтальные — широтной.
repeat управляет плотностью полос. Это числовой
коэффициент, который определяет количество чередующихся сегментов на
единицу UV-пространства.
При увеличении значения:
При уменьшении:
Stripe material активно использует альфа-канал, что позволяет интегрировать его в сложные сцены.
Типичные приёмы:
Пример:
evenColor: Cesium.Color.RED.withAlpha(0.4),
oddColor: Cesium.Color.YELLOW.withAlpha(0.4)
Stripe material наиболее часто применяется к поверхностям:
PolygonGraphicsRectangleGraphicsEllipseGraphicsПример полигона:
const polygon = 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.StripeMaterialProperty({
evenColor: Cesium.Color.GREEN.withAlpha(0.5),
oddColor: Cesium.Color.BLACK.withAlpha(0.5),
repeat: 6
})
}
});
Полигональная геометрия получает UV-развёртку, на которую проецируется stripe-паттерн.
Stripe material может использоваться для линий через
PolylineGraphics, хотя чаще применяются другие материалы
(например, dashed). Тем не менее stripe даёт интересный эффект
сегментированной трассы.
polyline: {
positions: Cesium.Cartesian3.fromDegreesArray([
-120.0, 35.0,
-110.0, 40.0
]),
width: 6,
material: new Cesium.StripeMaterialProperty({
evenColor: Cesium.Color.WHITE,
oddColor: Cesium.Color.RED,
repeat: 20
})
}
StripeMaterialProperty является реактивным: изменение свойств автоматически обновляет сцену без пересоздания объекта.
const stripe = new Cesium.StripeMaterialProperty({
evenColor: Cesium.Color.BLUE,
oddColor: Cesium.Color.WHITE,
repeat: 4
});
entity.rectangle.material = stripe;
// динамическое изменение
stripe.repeat = 12;
stripe.offset = 0.3;
Это позволяет использовать материал в анимациях и временных визуализациях.
Параметр offset смещает рисунок вдоль направления
UV-развёртки. Это ключевой механизм для создания эффекта движения.
Используется для:
Пример анимации:
let offset = 0.0;
viewer.clock.onTick.addEventListener(() => {
offset += 0.01;
stripe.offset = offset;
});
Stripe material реализован как фрагментный шейдер, который:
repeatoffsetevenColor и oddColorУпрощённая логика:
stripeIndex = floor((uv + offset) * repeat)
isEven = mod(stripeIndex, 2) == 0
color = isEven ? evenColor : oddColor
Stripe material относится к дешёвым по вычислениям материалам, но имеет особенности:
Ограничения:
Stripe material может комбинироваться с другими эффектами через
MaterialProperty цепочки или смешивание цветов:
Пример комбинирования прозрачности:
evenColor: Cesium.Color.CYAN.withAlpha(0.2),
oddColor: Cesium.Color.TRANSPARENT
Stripe material используется в задачах визуального кодирования:
При изменении масштаба камеры:
Для сглаживания часто используются:
Cesium.Material._materialCache.addMaterial(Cesium.Material.StripeType, {
fabric: {
type: "Stripe",
uniforms: {
evenColor: Cesium.Color.WHITE,
oddColor: Cesium.Color.BLUE,
repeat: 10
},
components: {
diffuse: "stripeColor.rgb",
alpha: "stripeColor.a"
}
}
});
Этот уровень используется при кастомизации рендеринга или интеграции в собственные Appearance классы.
На глобусе CesiumJS stripe pattern может:
Это связано с тем, что материал накладывается на сферическую модель через географические координаты.
repeat, приводящее к
aliasingevenColor и oddColor, из-за
чего полосы визуально исчезаютStripe material корректно работает в сценах с несколькими слоями:
При этом порядок отрисовки определяется depth testing и translucency.
Stripe material в CesiumJS представляет собой компактный процедурный механизм генерации повторяющихся полос, основанный на UV-преобразованиях и шейдерной логике. Он используется для визуального кодирования пространственных данных, поддерживает динамическое обновление и эффективно работает на GPU без текстурных ресурсов.