SpriteMaterial — это специализированный материал,
предназначенный для создания 2D-спрайтов в 3D-сцене. В отличие от
стандартных материалов (MeshBasicMaterial,
MeshStandardMaterial и других), спрайты всегда
ориентируются лицевой стороной к камере, что делает их удобными для
отображения иконок, частиц, подсказок и визуальных эффектов.
Спрайт в Three.js создаётся с помощью объекта
THREE.Sprite, которому передаётся экземпляр
SpriteMaterial.
const spriteMaterial = new THREE.SpriteMaterial({ color: 0xffffff });
const sprite = new THREE.Sprite(spriteMaterial);
scene.add(sprite);
SpriteMaterialcolor Задаёт основной цвет спрайта. Работает
аналогично THREE.Color и может быть задан в виде
шестнадцатеричного значения, строки или объекта Color.
const material = new THREE.SpriteMaterial({ color: 0xff0000 });map Текстура (THREE.Texture),
используемая для спрайта. Текстура может включать альфа-канал, который
влияет на прозрачность отдельных областей спрайта.
const textureLoader = new THREE.TextureLoader();
const map = textureLoader.load('sprite.png');
const material = new THREE.SpriteMaterial({ map });rotation Поворот спрайта в радианах. Угол поворота применяется относительно центра спрайта.
material.rotation = Math.PI / 4; // 45 градусовsizeAttenuation Логическое значение, определяющее, будет ли размер спрайта уменьшаться с увеличением расстояния до камеры.
true — спрайт уменьшается с увеличением расстояния
(обычно для частиц).false — размер спрайта остаётся постоянным на экране,
независимо от расстояния.material.sizeAttenuation = false;opacity Уровень прозрачности спрайта. Для
корректной работы с прозрачностью необходимо включить
transparent: true.
const material = new THREE.SpriteMaterial({ color: 0xffffff, opacity: 0.5, transparent: true });alphaTest Порог отсечения по альфа-каналу.
Пиксели с прозрачностью ниже значения alphaTest не будут
отрисовываться. Полезно для оптимизации и устранения проблем с
рендерингом прозрачности.
material.alphaTest = 0.5;fog Логическое значение, включающее или
отключающее влияние тумана на спрайт. Если сцена использует
THREE.Fog или THREE.FogExp2, спрайт с
fog: true будет корректно затуманиваться с увеличением
расстояния.
Для создания частиц и значков часто используют PNG-текстуры с прозрачными областями. Важно правильно настроить свойства материала:
const loader = new THREE.TextureLoader();
const texture = loader.load('particle.png');
const spriteMaterial = new THREE.SpriteMaterial({
map: texture,
transparent: true,
alphaTest: 0.1
});
Если transparent не включён, альфа-канал текстуры
игнорируется. alphaTest позволяет отбрасывать почти
полностью прозрачные пиксели, что улучшает производительность при
рендеринге большого количества спрайтов.
SpriteMaterial поддерживает динамическое обновление
свойств в реальном времени. Например, изменение цвета, прозрачности или
текстуры:
sprite.material.color.set(0x00ff00);
sprite.material.opacity = 0.8;
sprite.material.needsUpdate = true; // обновление материала после изменений
needsUpdate следует использовать при изменении текстуры
или других свойств, влияющих на шейдеры.
SpriteMaterial поддерживает режимы смешивания
(blending), позволяя создавать эффекты свечения или
наложения:
THREE.NormalBlending — стандартное смешивание.THREE.AdditiveBlending — полезно для частиц огня,
магии, эффектов света.THREE.SubtractiveBlending — уменьшает яркость при
наложении.THREE.MultiplyBlending — умножение цветов.material.blending = THREE.AdditiveBlending;
material.opacity = 0.7;
material.transparent = true;
Для отображения сотен и тысяч спрайтов используют
THREE.Points с THREE.PointsMaterial, который
основан на тех же принципах, что SpriteMaterial, но
эффективен для массовых частиц. Спрайты через
SpriteMaterial лучше применять для относительно небольших
групп объектов или отдельных элементов интерфейса, где требуется
контроль над каждым спрайтом отдельно.
SpriteMaterial не реагирует на источники света и всегда
отображает заданный цвет или текстуру без затенения. Для создания
эффекта освещённости спрайта необходимо предварительно подготовить
текстуру с нужным градиентом или подсветкой.
Каждый спрайт остаётся ориентированным к камере, что обеспечивает корректное отображение независимо от положения зрителя в 3D-пространстве.
SpriteMaterial представляет собой лёгкий и гибкий
инструмент для визуализации 2D-элементов в трёхмерной сцене, позволяя
сочетать простоту и выразительность с возможностью динамического
управления визуальными эффектами.