В Three.js карта эмиссии (emissiveMap) позволяет
объекту излучать свет визуально, независимо от источников освещения
сцены. Эта карта используется вместе с материалами, поддерживающими
эмиссивность, например
MeshStandardMaterial или MeshPhongMaterial.
Основная цель — создать эффект самосветящихся поверхностей, таких как
неоновые вывески, экраны или огни в играх.
Ключевое отличие emissiveMap от обычного цвета
(color) заключается в том, что она не зависит от внешнего
освещения. Значения карты определяют, какие участки поверхности будут
светиться. Черные пиксели карты означают отсутствие свечения, белые и
яркие — максимальное излучение.
Для использования карты эмиссии требуется:
const textureLoader = new THREE.TextureLoader();
const emissiveTexture = textureLoader.load('textures/emissive.png');
const material = new THREE.MeshStandardMaterial({
color: 0x000000, // базовый цвет объекта
emissive: 0xffffff, // цвет свечения
emissiveMap: emissiveTexture,
emissiveIntensity: 1.0 // сила свечения
});
const geometry = new THREE.BoxGeometry(1, 1, 1);
const mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
В этом примере emissiveMap окрашивает объект в белый
свет там, где текстура светлая, а emissiveIntensity
контролирует яркость свечения.
Комбинирование этих свойств даёт возможность управлять как цветом, так и формой светящихся областей. Например, можно задать синий цвет эмиссии для всей модели и одновременно использовать карту, которая ограничит свечения только определёнными участками.
Для emissiveMap рекомендуется использовать текстуры в sRGB пространстве. Если текстура загружается без указания цветового пространства, может возникнуть некорректное отображение цвета свечения. В Three.js это делается так:
emissiveTexture.encoding = THREE.sRGBEncoding;
При использовании HDR карт в формате
.hdr или .exr необходимо конвертировать их в
подходящее цветовое пространство для корректного отображения
интенсивности свечения.
Свойство emissiveIntensity позволяет усиливать или
ослаблять эффект эмиссии:
material.emissiveIntensity = 2.0; // удваивает яркость свечения
Важно учитывать, что слишком высокие значения могут привести к визуальному пересвету и потере деталей. Обычно интенсивность подбирается экспериментально с учётом общего освещения сцены.
EmissiveMap можно анимировать для создания динамических эффектов.
Наиболее часто используют смещение текстуры (offset) или
вращение (rotation):
emissiveTexture.offset.x += 0.01; // движение свечения по X
emissiveTexture.offset.y += 0.01; // движение по Y
Для сложной анимации можно использовать спрайтовые карты, где каждая клетка представляет отдельный кадр свечения, и сдвиг текстуры меняется по времени.
emissive в тон текстуры: яркая карта с
белым цветом даст максимальную светоотдачу.Эмиссия в Three.js является мощным инструментом для создания визуально выразительных сцен, позволяя объектам «светиться» независимо от освещения, что существенно расширяет художественные возможности при разработке 3D-графики.